@@ -439,6 +439,11 @@ void CSys246::ProcessJvsPacket(const uint8* input, uint8* output)
439439 (*output++) = static_cast <uint8>(m_jvsDrumChannels[i] >> 8 );
440440 (*output++) = static_cast <uint8>(m_jvsDrumChannels[i]);
441441 }
442+ // Reset drum channels after sending — drum inputs are pulses, not held states
443+ for (int i = 0 ; i < JVS_DRUM_CHANNEL_MAX; i++)
444+ {
445+ m_jvsDrumChannels[i] = 0 ;
446+ }
442447 }
443448 else if (m_jvsMode == JVS_MODE::DRIVE)
444449 {
@@ -591,20 +596,22 @@ void CSys246::SetButtonState(unsigned int padNumber, PS2::CControllerInfo::BUTTO
591596 }
592597 else if (m_jvsMode == JVS_MODE::DRUM)
593598 {
594- if (button == PS2::CControllerInfo::L1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DL] = pressed ? drumPressValue << 6 : 0 ;
595- if (button == PS2::CControllerInfo::L2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_KL] = pressed ? drumPressValue << 6 : 0 ;
596- if (button == PS2::CControllerInfo::R1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DR] = pressed ? drumPressValue << 6 : 0 ;
597- if (button == PS2::CControllerInfo::R2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_KR] = pressed ? drumPressValue << 6 : 0 ;
599+ // Taiko no Tatsujin: DPAD_LEFT=Left Men, L2=Left Fuchi, CROSS=Right Men, R2=Right Fuchi
600+ if (button == PS2::CControllerInfo::DPAD_LEFT) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DL] = pressed ? drumPressValue << 6 : 0 ;
601+ if (button == PS2::CControllerInfo::L2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_KL] = pressed ? drumPressValue << 6 : 0 ;
602+ if (button == PS2::CControllerInfo::CROSS) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_DR] = pressed ? drumPressValue << 6 : 0 ;
603+ if (button == PS2::CControllerInfo::R2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_1P_KR] = pressed ? drumPressValue << 6 : 0 ;
598604 }
599605 }
600606 else if (padNumber == 1 )
601607 {
602608 if (m_jvsMode == JVS_MODE::DRUM)
603609 {
604- if (button == PS2::CControllerInfo::L1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DL] = pressed ? drumPressValue << 6 : 0 ;
605- if (button == PS2::CControllerInfo::L2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_KL] = pressed ? drumPressValue << 6 : 0 ;
606- if (button == PS2::CControllerInfo::R1) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DR] = pressed ? drumPressValue << 6 : 0 ;
607- if (button == PS2::CControllerInfo::R2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_KR] = pressed ? drumPressValue << 6 : 0 ;
610+ // Taiko no Tatsujin: DPAD_LEFT=Left Men, L2=Left Fuchi, CROSS=Right Men, R2=Right Fuchi
611+ if (button == PS2::CControllerInfo::DPAD_LEFT) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DL] = pressed ? drumPressValue << 6 : 0 ;
612+ if (button == PS2::CControllerInfo::L2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_KL] = pressed ? drumPressValue << 6 : 0 ;
613+ if (button == PS2::CControllerInfo::CROSS) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_DR] = pressed ? drumPressValue << 6 : 0 ;
614+ if (button == PS2::CControllerInfo::R2) m_jvsDrumChannels[JVS_DRUM_CHANNEL_2P_KR] = pressed ? drumPressValue << 6 : 0 ;
608615 }
609616 }
610617 }
@@ -686,6 +693,7 @@ void CSys246::SetAxisState(unsigned int padNumber, PS2::CControllerInfo::BUTTON
686693 break ;
687694 }
688695 }
696+
689697}
690698
691699void CSys246::SetScreenPosition (float x, float y)
0 commit comments