Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 56 additions & 24 deletions Source/iop/namco_sys246/Iop_NamcoSys246.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,11 @@ void CSys246::ProcessJvsPacket(const uint8* input, uint8* output)
(*output++) = static_cast<uint8>(m_jvsDrumChannels[i] >> 8);
(*output++) = static_cast<uint8>(m_jvsDrumChannels[i]);
}
// Reset drum channels after sending — drum inputs are pulses, not held states
for(int i = 0; i < JVS_DRUM_CHANNEL_MAX; i++)
{
m_jvsDrumChannels[i] = 0;
}
}
else if(m_jvsMode == JVS_MODE::DRIVE)
{
Expand Down Expand Up @@ -563,8 +568,24 @@ void CSys246::SetButtonState(unsigned int padNumber, PS2::CControllerInfo::BUTTO
{
static const uint16 drumPressValue = 0x200;

m_jvsButtonState[padNumber] &= ~m_jvsButtonBits[button];
m_jvsButtonState[padNumber] |= (pressed ? m_jvsButtonBits[button] : 0);
// In DRIVE mode, remap R1 -> Shift Up (0x0004) and L1 -> Shift Down (0x0002)
// Disable original DPAD_RIGHT and CROSS for shift
uint16 buttonBit = m_jvsButtonBits[button];
if(m_jvsMode == JVS_MODE::DRIVE)
{
if(button == PS2::CControllerInfo::R1)
buttonBit = 0x0004;
else if(button == PS2::CControllerInfo::L1)
buttonBit = 0x0002;
else if(button == PS2::CControllerInfo::DPAD_RIGHT)
buttonBit = 0x0000;
else if(button == PS2::CControllerInfo::CROSS)
buttonBit = 0x0000;
}

m_jvsButtonState[padNumber] &= ~m_jvsButtonBits[button]; // clear original bit
m_jvsButtonState[padNumber] &= ~buttonBit; // clear remapped bit
m_jvsButtonState[padNumber] |= (pressed ? buttonBit : 0);

if(padNumber == 0)
{
Expand All @@ -579,19 +600,21 @@ void CSys246::SetButtonState(unsigned int padNumber, PS2::CControllerInfo::BUTTO
}
else if(m_jvsMode == JVS_MODE::DRUM)
{
if(button == PS2::CControllerInfo::L1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DL] = pressed ? drumPressValue << 6 : 0;
// Taiko no Tatsujin: DPAD_LEFT=Left Men, L2=Left Fuchi, CROSS=Right Men, R2=Right Fuchi
if(button == PS2::CControllerInfo::DPAD_LEFT) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DL] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::L2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_KL] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::R1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DR] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::CROSS) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DR] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::R2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_KR] = pressed ? drumPressValue << 6 : 0;
}
}
else if(padNumber == 1)
{
if(m_jvsMode == JVS_MODE::DRUM)
{
if(button == PS2::CControllerInfo::L1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DL] = pressed ? drumPressValue << 6 : 0;
// Taiko no Tatsujin: DPAD_LEFT=Left Men, L2=Left Fuchi, CROSS=Right Men, R2=Right Fuchi
if(button == PS2::CControllerInfo::DPAD_LEFT) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DL] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::L2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_KL] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::R1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DR] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::CROSS) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DR] = pressed ? drumPressValue << 6 : 0;
if(button == PS2::CControllerInfo::R2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_KR] = pressed ? drumPressValue << 6 : 0;
}
}
Expand Down Expand Up @@ -645,25 +668,34 @@ void CSys246::SetButtonState(unsigned int padNumber, PS2::CControllerInfo::BUTTO

void CSys246::SetAxisState(unsigned int padNumber, PS2::CControllerInfo::BUTTON button, uint8 axisValue, uint8* ram)
{
switch(button)
if(m_jvsMode == JVS_MODE::DRIVE)
{
case PS2::CControllerInfo::BUTTON::ANALOG_LEFT_X:
if(axisValue >= 0 || axisValue < 128) m_jvsWheel = axisValue + 128;
if(axisValue > 128 || axisValue < 256) m_jvsWheel = axisValue - 128;
m_jvsWheel = axisValue;
break;
case PS2::CControllerInfo::BUTTON::ANALOG_LEFT_Y:
if(axisValue >= 128) axisValue = 127; // limit Left stick Y axis to Y+
m_jvsGaz = -axisValue + 127;
break;
case PS2::CControllerInfo::BUTTON::ANALOG_RIGHT_X:
if(axisValue < 128) axisValue = 128; // limit Right stick X axis to X+
m_jvsBrake = axisValue - 128;
break;
case PS2::CControllerInfo::BUTTON::ANALOG_RIGHT_Y:
break;
default:
break;
switch(button)
{
case PS2::CControllerInfo::BUTTON::ANALOG_LEFT_X:
if(axisValue >= 0 || axisValue < 128) m_jvsWheel = axisValue + 128;
if(axisValue > 128 || axisValue < 256) m_jvsWheel = axisValue - 128;
m_jvsWheel = axisValue;
break;
case PS2::CControllerInfo::BUTTON::ANALOG_LEFT_Y:
break;
case PS2::CControllerInfo::BUTTON::ANALOG_RIGHT_X:
break;
case PS2::CControllerInfo::BUTTON::ANALOG_RIGHT_Y:
// Right stick Y upper -> Gaz (Accelerator)
if(axisValue < 128)
{
m_jvsGaz = -axisValue + 127;
}
// Right stick Y lower -> Brake
else
{
m_jvsBrake = axisValue - 128;
}
break;
default:
break;
}
}
}

Expand Down
Loading