@@ -28,10 +28,10 @@ typedef struct _keyinput {
2828 u8 triggerR ;
2929 u8 analogA ;
3030 u8 analogB ;
31- u16 up ;
32- u16 down ;
33- u16 state ;
34- u32 chan ;
31+ u32 up ;
32+ u32 down ;
33+ u32 state ;
34+ s32 chan ;
3535} keyinput ;
3636
3737typedef void (* SPECCallback )(u32 chan ,u32 * data ,PADStatus * status );
@@ -874,7 +874,7 @@ u32 PAD_ScanPads(void)
874874 s32 i ;
875875 u32 resetBits ;
876876 u32 padBit ,connected ;
877- u16 state ,oldstate ;
877+ u32 state ,oldstate ;
878878 SISteeringStatus steering ;
879879 PADStatus padstatus [PAD_CHANMAX ];
880880 N64Status n64status ;
@@ -900,6 +900,21 @@ u32 PAD_ScanPads(void)
900900 __pad_keys [i ].analogA = padstatus [i ].analogA ;
901901 __pad_keys [i ].analogB = padstatus [i ].analogB ;
902902
903+ if (!PAD_IsBarrel (i )) {
904+ if (padstatus [i ].stickX < (INT8_MIN /2 )) state |= PADEX_STICK_LEFT ;
905+ if (padstatus [i ].stickX > (INT8_MAX /2 )) state |= PADEX_STICK_RIGHT ;
906+ if (padstatus [i ].stickY < (INT8_MIN /2 )) state |= PADEX_STICK_DOWN ;
907+ if (padstatus [i ].stickY > (INT8_MAX /2 )) state |= PADEX_STICK_UP ;
908+ if (padstatus [i ].substickX < (INT8_MIN /2 )) state |= PADEX_SUBSTICK_LEFT ;
909+ if (padstatus [i ].substickX > (INT8_MAX /2 )) state |= PADEX_SUBSTICK_RIGHT ;
910+ if (padstatus [i ].substickY < (INT8_MIN /2 )) state |= PADEX_SUBSTICK_DOWN ;
911+ if (padstatus [i ].substickY > (INT8_MAX /2 )) state |= PADEX_SUBSTICK_UP ;
912+ if (padstatus [i ].triggerR > (UINT8_MAX /2 )) state |= PADEX_TRIGGER_R ;
913+ if (padstatus [i ].triggerL > (UINT8_MAX /2 )) state |= PADEX_TRIGGER_L ;
914+ if (padstatus [i ].analogA > (UINT8_MAX /2 )) state |= PADEX_ANALOG_A ;
915+ if (padstatus [i ].analogB > (UINT8_MAX /2 )) state |= PADEX_ANALOG_B ;
916+ }
917+
903918 oldstate = __pad_keys [i ].state ;
904919 __pad_keys [i ].up = ~state & oldstate ;
905920 __pad_keys [i ].down = state & ~oldstate ;
@@ -922,21 +937,33 @@ u32 PAD_ScanPads(void)
922937 if (n64status .button & N64_BUTTON_DOWN ) state |= PAD_BUTTON_DOWN ;
923938 if (n64status .button & N64_BUTTON_UP ) state |= PAD_BUTTON_UP ;
924939 if (n64status .button & N64_BUTTON_Z ) state |= PAD_TRIGGER_Z ;
925- if (n64status .button & N64_BUTTON_R ) state |= PAD_TRIGGER_R ;
926- if (n64status .button & N64_BUTTON_L ) state |= PAD_TRIGGER_L ;
940+ if (n64status .button & N64_BUTTON_R ) state |= PAD_TRIGGER_R | PADEX_TRIGGER_R ;
941+ if (n64status .button & N64_BUTTON_L ) state |= PAD_TRIGGER_L | PADEX_TRIGGER_L ;
927942 if (n64status .button & N64_BUTTON_A ) state |= PAD_BUTTON_A ;
928943 if (n64status .button & N64_BUTTON_B ) state |= PAD_BUTTON_B ;
929944 if (n64status .button & N64_BUTTON_START ) state |= PAD_BUTTON_START ;
945+ if (n64status .button & N64_BUTTON_C_LEFT ) state |= PADEX_SUBSTICK_LEFT | PADEX_BUTTON_C_LEFT ;
946+ if (n64status .button & N64_BUTTON_C_RIGHT ) state |= PADEX_SUBSTICK_RIGHT | PADEX_BUTTON_C_RIGHT ;
947+ if (n64status .button & N64_BUTTON_C_DOWN ) state |= PADEX_SUBSTICK_DOWN | PADEX_BUTTON_C_DOWN ;
948+ if (n64status .button & N64_BUTTON_C_UP ) state |= PADEX_SUBSTICK_UP | PADEX_BUTTON_C_UP ;
949+ if (n64status .stickX < (INT8_MIN /2 )) state |= PADEX_STICK_LEFT ;
950+ if (n64status .stickX > (INT8_MAX /2 )) state |= PADEX_STICK_RIGHT ;
951+ if (n64status .stickY < (INT8_MIN /2 )) state |= PADEX_STICK_DOWN ;
952+ if (n64status .stickY > (INT8_MAX /2 )) state |= PADEX_STICK_UP ;
930953
931954 __pad_keys [i ].stickX = n64status .stickX ;
932955 __pad_keys [i ].stickY = n64status .stickY ;
933956 __pad_keys [i ].substickX = 0 ;
934957 __pad_keys [i ].substickY = 0 ;
958+ __pad_keys [i ].triggerL = 0 ;
959+ __pad_keys [i ].triggerR = 0 ;
935960
936- if (n64status .button & N64_BUTTON_C_RIGHT ) __pad_keys [i ].substickX += INT8_MAX ;
937- if (n64status .button & N64_BUTTON_C_LEFT ) __pad_keys [i ].substickX -= INT8_MAX ;
938- if (n64status .button & N64_BUTTON_C_DOWN ) __pad_keys [i ].substickY -= INT8_MAX ;
939- if (n64status .button & N64_BUTTON_C_UP ) __pad_keys [i ].substickY += INT8_MAX ;
961+ if (state & PADEX_SUBSTICK_LEFT ) __pad_keys [i ].substickX -= INT8_MAX ;
962+ if (state & PADEX_SUBSTICK_RIGHT ) __pad_keys [i ].substickX += INT8_MAX ;
963+ if (state & PADEX_SUBSTICK_DOWN ) __pad_keys [i ].substickY -= INT8_MAX ;
964+ if (state & PADEX_SUBSTICK_UP ) __pad_keys [i ].substickY += INT8_MAX ;
965+ if (state & PADEX_TRIGGER_R ) __pad_keys [i ].triggerR += UINT8_MAX ;
966+ if (state & PADEX_TRIGGER_L ) __pad_keys [i ].triggerL += UINT8_MAX ;
940967
941968 oldstate = __pad_keys [i ].state ;
942969 __pad_keys [i ].up = ~state & oldstate ;
@@ -971,6 +998,13 @@ u32 PAD_ScanPads(void)
971998 __pad_keys [i ].analogA = steering .gas ;
972999 __pad_keys [i ].analogB = steering .brake ;
9731000
1001+ if (steering .steering < (INT8_MIN /4 )) state |= PADEX_STEERING_LEFT ;
1002+ if (steering .steering > (INT8_MAX /4 )) state |= PADEX_STEERING_RIGHT ;
1003+ if (steering .right > (UINT8_MAX /2 )) state |= PADEX_PADDLE_RIGHT ;
1004+ if (steering .left > (UINT8_MAX /2 )) state |= PADEX_PADDLE_LEFT ;
1005+ if (steering .gas > (UINT8_MAX /2 )) state |= PADEX_PEDAL_GAS ;
1006+ if (steering .brake > (UINT8_MAX /2 )) state |= PADEX_PEDAL_BRAKE ;
1007+
9741008 oldstate = __pad_keys [i ].state ;
9751009 __pad_keys [i ].up = ~state & oldstate ;
9761010 __pad_keys [i ].down = state & ~oldstate ;
@@ -1017,19 +1051,19 @@ u32 PAD_ScanPads(void)
10171051 return connected ;
10181052}
10191053
1020- u16 PAD_ButtonsUp (s32 chan )
1054+ u32 PAD_ButtonsUp (s32 chan )
10211055{
10221056 if (chan < PAD_CHAN0 || chan > PAD_CHAN3 || __pad_keys [chan ].chan == -1 ) return 0 ;
10231057 return __pad_keys [chan ].up ;
10241058}
10251059
1026- u16 PAD_ButtonsDown (s32 chan )
1060+ u32 PAD_ButtonsDown (s32 chan )
10271061{
10281062 if (chan < PAD_CHAN0 || chan > PAD_CHAN3 || __pad_keys [chan ].chan == -1 ) return 0 ;
10291063 return __pad_keys [chan ].down ;
10301064}
10311065
1032- u16 PAD_ButtonsHeld (s32 chan )
1066+ u32 PAD_ButtonsHeld (s32 chan )
10331067{
10341068 if (chan < PAD_CHAN0 || chan > PAD_CHAN3 || __pad_keys [chan ].chan == -1 ) return 0 ;
10351069 return __pad_keys [chan ].state ;
0 commit comments