u32 ReturnOfTheKingInput(unsigned short pad) { // Only Nunchuk controls available // Wiimote, Gamecube and Classic controls depend on user configuration u32 J = StandardMovement(pad) | DecodeGamecube(pad) | DecodeWiimote(pad) | DecodeClassic(pad); bool AbilityButton=0, AttackButton=0, UseButton=0, ChangeSkillButton=0, PauseButton=0, ItemsButton=0, SpeedButton=0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // Nunchuk controls are made up if (wp->exp.type == WPAD_EXP_NUNCHUK) { J |= StandardDPad(pad); AbilityButton = wp->btns_h & WPAD_BUTTON_B; UseButton = wp->btns_h & WPAD_BUTTON_A; PauseButton = wp->btns_h & WPAD_BUTTON_PLUS; ItemsButton = wp->btns_h & WPAD_BUTTON_MINUS; SpeedButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_C; ChangeSkillButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_Z; AttackButton = (fabs(wp->gforce.x)> 1.5); } #endif if (AbilityButton) J |= VBA_BUTTON_A; if (AttackButton) J |= VBA_BUTTON_B; if (ChangeSkillButton) J |= VBA_BUTTON_L; if (ItemsButton) J |= VBA_BUTTON_START; if (UseButton) J |= VBA_BUTTON_R; if (SpeedButton) J |= VBA_SPEED; if (PauseButton) J |= VBA_BUTTON_SELECT; return J; }
u32 HarryPotter5Input(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // Wand cursor, normally controlled by DPad, now controlled by Wiimote! int cx = 0; int cy = 0; static int oldcx = 0; static int oldcy = 0; u8 WandOut = CPUReadByte(0x200e0dd); if (WandOut && CursorValid) { cx = (CursorX * 268)/640; cy = (CursorY * 187)/480; if (cx<0x14) cx=0x14; else if (cx>0xf8) cx=0xf8; if (cy<0x13) cy=0x13; else if (cy>0xa8) cy=0xa8; CPUWriteByte(0x200e0fe, cx); CPUWriteByte(0x200e102, cy); } oldcx = cx; oldcy = cy; // DPad works in the map if (wp->btns_h & WPAD_BUTTON_RIGHT) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_BUTTON_LEFT) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_UP) J |= VBA_UP; if (wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_DOWN; // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Map (actually objectives) if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // talk or interact if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // spells if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Run (uses emulator speed button) if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) J |= VBA_SPEED; // CAKTODO spell gestures #endif return J; }
u32 MohUndergroundInput(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeClassic(pad) | DecodeWiimote(pad) | DecodeGamecube(pad); static bool crouched = false; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { // Joystick controls L and R, not left and right if (J & VBA_LEFT) J |= VBA_BUTTON_L; if (J & VBA_RIGHT) J |= VBA_BUTTON_R; J &= ~(VBA_LEFT | VBA_RIGHT); // Cursor controls left and right for turning CursorVisible = true; if (CursorValid) { if (CursorX < 320 - 40) J |= VBA_LEFT; else if (CursorX> 320 + 40) J |= VBA_RIGHT; } // Crouch if (wp->btns_h & WPAD_BUTTON_DOWN) crouched = !crouched; // Pause, objectives, menu if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Action button, not needed in this game if (wp->btns_h & WPAD_BUTTON_MINUS) J |= 0; // Use sights/scope, not needed in this game if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Shoot if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_A; // Reload if (fabs(wp->gforce.y)> 1.6 || wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_SELECT; // Change weapon if (wp->btns_h & WPAD_BUTTON_LEFT || wp->btns_h & WPAD_BUTTON_RIGHT) J |= VBA_BUTTON_B; // Speed if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_SPEED; } else { CursorVisible = false; } #endif if (crouched && (!(J & VBA_BUTTON_L)) && (!(J & VBA_BUTTON_R))) J |= VBA_BUTTON_L | VBA_BUTTON_R; return J; }
u32 CastlevaniaCircleMoonInput(unsigned short pad) { // Only Nunchuk and Classic controls available // Wiimote and Gamecube controls depend on user configuration u32 J = StandardMovement(pad) | DecodeGamecube(pad) | DecodeWiimote(pad) | DecodeClassic(pad); bool JumpButton=0, AttackButton=0, ShootButton=0, GuardButton=0, PauseButton=0, SelectButton=0, SpeedButton=0, HyperButton=0, LButton=0, RButton=0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // Nunchuk controls are based on Castlevania Wii if (wp->exp.type == WPAD_EXP_NUNCHUK) { ShootButton = wp->btns_h & WPAD_BUTTON_A; AttackButton = (fabs(wp->gforce.x)> 1.5) || (fabs(wp->gforce.y)> 1.5) || wp->btns_h & WPAD_BUTTON_B; JumpButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_C; GuardButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_Z; PauseButton = wp->btns_h & WPAD_BUTTON_PLUS; SelectButton = wp->btns_h & WPAD_BUTTON_MINUS; SpeedButton = (wp->btns_h & WPAD_BUTTON_A) && (wp->btns_h & WPAD_BUTTON_B); HyperButton = wp->btns_h & WPAD_BUTTON_DOWN; LButton = wp->btns_h & WPAD_BUTTON_1; RButton = wp->btns_h & WPAD_BUTTON_2; // Classic controls are based on ...? } else if (wp->exp.type == WPAD_EXP_CLASSIC) { ShootButton = wp->btns_h & WPAD_CLASSIC_BUTTON_Y; AttackButton = wp->btns_h & WPAD_CLASSIC_BUTTON_B; JumpButton = wp->btns_h & (WPAD_CLASSIC_BUTTON_FULL_R); GuardButton = wp->btns_h & (WPAD_CLASSIC_BUTTON_FULL_L); PauseButton = wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS; SelectButton = wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS; SpeedButton = wp->btns_h & WPAD_CLASSIC_BUTTON_A; HyperButton = wp->btns_h & WPAD_CLASSIC_BUTTON_X; LButton = wp->btns_h & WPAD_CLASSIC_BUTTON_ZL; RButton = wp->btns_h & WPAD_CLASSIC_BUTTON_ZR; } #endif if (JumpButton) J |= VBA_BUTTON_A; if (AttackButton) { J &= ~VBA_UP; J |= VBA_BUTTON_B; } if (HyperButton) J |= VBA_BUTTON_A | VBA_BUTTON_B; if (ShootButton) J |= VBA_UP | VBA_BUTTON_B; if (PauseButton) J |= VBA_BUTTON_START; if (SelectButton) J |= VBA_BUTTON_SELECT; if (SpeedButton) J |= VBA_SPEED; if (GuardButton) { J &= ~VBA_UP; J |= VBA_DOWN; } if (LButton) J |= VBA_BUTTON_L; if (RButton) J |= VBA_BUTTON_R; return J; }
u32 OnePieceInput(unsigned short pad) { // Only Nunchuk and Gamecube controls available // Wiimote and Classic controls depend on user configuration u32 J = StandardMovement(pad) | DecodeWiimote(pad) | DecodeClassic(pad); static u32 LastDir = VBA_RIGHT; bool JumpButton=0, AttackButton=0, ViewButton=0, CharacterButton=0, PauseButton=0, DashButton=0, GrabButton=0, SpeedButton=0, AttackUpButton = 0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // Nunchuk controls are based on One Piece: Unlimited Adventure for the Wii if (wp->exp.type == WPAD_EXP_NUNCHUK) { J |= StandardDPad(pad); JumpButton = wp->btns_h & WPAD_BUTTON_B; AttackButton = wp->btns_h & WPAD_BUTTON_A; CharacterButton = wp->btns_h & WPAD_BUTTON_MINUS; PauseButton = wp->btns_h & WPAD_BUTTON_PLUS; DashButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_C; GrabButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_Z; ViewButton = wp->btns_h & WPAD_BUTTON_1; // doesn't do anything? SpeedButton = wp->btns_h & WPAD_BUTTON_2; } #endif // Gamecube controls are based on One Piece Grand Adventure { u32 gc = PAD_ButtonsHeld(pad); signed char gc_px = PAD_SubStickX(pad); if (gc_px > 70) J |= VBA_SPEED; JumpButton = JumpButton || gc & PAD_BUTTON_Y; AttackButton = AttackButton || gc & PAD_BUTTON_A; GrabButton = GrabButton || gc & PAD_BUTTON_B; AttackUpButton = AttackUpButton || gc & PAD_BUTTON_X; DashButton = DashButton || gc & PAD_TRIGGER_L; PauseButton = PauseButton || gc & PAD_BUTTON_START; CharacterButton = CharacterButton || gc & PAD_TRIGGER_R; // supposed to be block } if (JumpButton) J |= VBA_BUTTON_A; if (AttackButton) J |= VBA_BUTTON_B; if (AttackUpButton) J |= VBA_UP | VBA_BUTTON_B; if (CharacterButton) J |= VBA_BUTTON_L; if (DashButton) J |= LastDir; if (PauseButton) J |= VBA_BUTTON_START; if (GrabButton) J |= VBA_BUTTON_R; if (SpeedButton) J |= VBA_SPEED; if (ViewButton) J |= VBA_BUTTON_SELECT; // doesn't do anything? if (J & VBA_RIGHT) LastDir = VBA_RIGHT; else if (J & VBA_LEFT) LastDir = VBA_LEFT; return J; }
u32 Boktai2Input(unsigned short pad) { u32 J = StandardMovement(pad) | StandardDPad(pad) | DecodeGamecube(pad) | DecodeClassic(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); static bool GunRaised = false; // Action if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Hold gun or hand up to the light to recharge if ((-wp->orient.pitch)> 45) { GunRaised = true; } else if ((-wp->orient.pitch) < 40) { GunRaised = false; } if (GunRaised) J |= VBA_BUTTON_A; // Fire Gun Del Sol if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Swing sword or hammer or stab spear if (fabs(wp->gforce.x)> 1.8) J |= VBA_BUTTON_B; // Look around or change subscreen if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_R; // Start if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->exp.type == WPAD_EXP_NUNCHUK) { // Look around if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) J |= VBA_BUTTON_R; // Change element or change subscreen if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_SPEED; } else { // Change element or change subscreen if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_L; } #endif return J; }
u32 HarryPotter4Input(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // DPad works in the map if (wp->btns_h & WPAD_BUTTON_RIGHT) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_BUTTON_LEFT) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_UP) J |= VBA_UP; if (wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_DOWN; // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Map doesn't exist. Select Needed for starting game. if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // talk or interact or jinx if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; if (fabs(wp->gforce.x)> 1.5) J |= VBA_BUTTON_A; // Charms if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // L and R if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_R; // Run (uses emulator speed button) if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) J |= VBA_SPEED; // CAKTODO spell gestures // swing sideways for Flipendo // point at ceiling for Lumos #endif return J; }
u32 HarryPotter2Input(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // DPad works in the map if (wp->btns_h & WPAD_BUTTON_RIGHT) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_BUTTON_LEFT) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_UP) J |= VBA_UP; if (wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_DOWN; // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Map if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // talk or interact or sneak if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_B; // spells if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_A; if (fabs(wp->gforce.x)> 1.5) J |= VBA_BUTTON_A; if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_L; // Sneak instead of run if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) J |= VBA_BUTTON_B; // Jump with C button if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_C)) J |= VBA_BUTTON_R; // CAKTODO spell gestures #endif return J; }
// WarioWare Twisted u32 TwistedInput(unsigned short pad) { // Change this to true if you want to see the screen tilt. TiltScreen = false; u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { TiltSideways = false; J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select and L do nothing! if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_L | VBA_SPEED; if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_L | VBA_SPEED; // A Button if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // B Button if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Grab an icon and prevent menu from spinning if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) J |= VBA_BUTTON_R; // Calibrate if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) { CalibrateWario = true; } else CalibrateWario = false; } else if (wp->exp.type == WPAD_EXP_CLASSIC) { TiltSideways = false; J |= StandardDPad(pad) | StandardClassic(pad); } else { TiltSideways = true; J |= StandardSideways(pad); if (wp->btns_h & WPAD_BUTTON_B) { CalibrateWario = true; } else CalibrateWario = false; } #endif return J; }
u32 KirbyTntInput(unsigned short pad) { TiltScreen = false; u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { TiltSideways = false; J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select and L do nothing! if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_B; if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_A; // A Button if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // B Button if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Speed if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) J |= VBA_SPEED; } else if (wp->exp.type == WPAD_EXP_CLASSIC) { TiltSideways = false; J |= StandardDPad(pad) | DecodeClassic(pad); if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; } else { TiltSideways = true; J |= StandardSideways(pad); if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_SPEED; } #endif return J; }
u32 HarryPotter1GBCInput(unsigned short pad) { u32 J = StandardMovement(pad) | StandardDPad(pad) | DecodeGamecube(pad); //u8 ScreenMode = gbReadMemory(0xFFCF); //u8 CursorItem = gbReadMemory(0xFFD5); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); // Pause Menu if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Map (well, it tells you where you are) if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // talk or interact if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // cancel if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // spells if (fabs(wp->gforce.x)> 1.5) J |= VBA_BUTTON_A; if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_R; // Run (uses emulator speed button) if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) J |= VBA_SPEED; // Camera, just tells you what room you are in. CAKTODO make press and release trigger it if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_C)) J |= VBA_BUTTON_SELECT; #endif // CAKTODO spell gestures return J; }
u32 MohInfiltratorInput(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NONE) J |= DecodeWiimote(pad); else if (wp->exp.type == WPAD_EXP_CLASSIC) { J |= DecodeClassic(pad); } else if (wp->exp.type == WPAD_EXP_NUNCHUK) { // Pause, objectives, menu if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Action button, use if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_L; // Use sights/scope, not needed in this game if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A | VBA_BUTTON_L; // Shoot if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_A; // Reload if (fabs(wp->gforce.y)> 1.6 || wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_L; // Strafe if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) J |= VBA_BUTTON_R; // Change weapon if (wp->btns_h & WPAD_BUTTON_LEFT || wp->btns_h & WPAD_BUTTON_RIGHT) J |= VBA_BUTTON_B; // Speed if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_SPEED; } else J |= DecodeWiimote(pad); #endif return J; }
u32 Mario3Input(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); bool run = false; run = (wp->exp.type==WPAD_EXP_NUNCHUK && wp->exp.nunchuk.js.mag> 0.83) || (wp->exp.type==WPAD_EXP_CLASSIC && wp->exp.classic.ljs.mag> 0.83); run = run && ((J & VBA_LEFT) || (J & VBA_RIGHT)); if (wp->exp.type == WPAD_EXP_NONE) J |= DecodeWiimote(pad); else if (wp->exp.type == WPAD_EXP_CLASSIC) { // DPad movement J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) J |= VBA_BUTTON_L; // Replay menu if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_CLASSIC_BUTTON_B) J |= VBA_BUTTON_A; // Run, pick up, throw, fire if (wp->btns_h & WPAD_CLASSIC_BUTTON_X || wp->btns_h & WPAD_CLASSIC_BUTTON_Y || run) J |= VBA_BUTTON_B; // Spin attack (racoon costume, fire flower) if (wp->btns_h & WPAD_CLASSIC_BUTTON_A) J |= VBA_BUTTON_B; // Crouch if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZL || wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_L) { J |= VBA_DOWN; J &= ~VBA_UP; } // Speed if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZR) J |= VBA_SPEED; } else if (wp->exp.type == WPAD_EXP_NUNCHUK) { J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_L; // Replay Menu if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Run, pick up, throw, fire if (wp->btns_h & WPAD_BUTTON_B || run) J |= VBA_BUTTON_B; // Spin attack (racoon, fire flower) if (fabs(wp->gforce.x)> 1.4) J |= VBA_BUTTON_B; // Crouch if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) { J |= VBA_DOWN; J &= ~VBA_UP; } // Speed if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_SPEED; } #endif return J; }
u32 MarioWorldInput(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); u8 CarryState = CPUReadByte(0x3003F06); // 01 = carrying, 00 = not carrying u8 InYoshisMouth = CPUReadByte(0x3003F53); // FF = nothing, 00 = no level, else thing u8 FallState = CPUReadByte(0x3003FA1); // 0B = jump, 24 = fall u8 RidingYoshi = CPUReadByte(0x3004302); // 00 = not riding, 01 = riding static bool NeedStomp = false; bool dontrun = false; bool run = false; static bool dontletgo = false; dontrun = (InYoshisMouth != 0 && InYoshisMouth != 0xFF && RidingYoshi); bool BButton = false; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); run = (wp->exp.type==WPAD_EXP_NUNCHUK && wp->exp.nunchuk.js.mag> 0.83) || (wp->exp.type==WPAD_EXP_CLASSIC && wp->exp.classic.ljs.mag> 0.83); BButton = (wp->exp.type == WPAD_EXP_CLASSIC && (wp->btns_h & WPAD_CLASSIC_BUTTON_X || wp->btns_h & WPAD_CLASSIC_BUTTON_Y)) || wp->btns_h & WPAD_BUTTON_B; #endif u32 gc = PAD_ButtonsHeld(pad); BButton = BButton || gc & PAD_BUTTON_B; if (run && CarryState && !BButton) dontletgo = true; if (!CarryState) dontletgo = false; #ifdef HW_RVL if (wp->exp.type == WPAD_EXP_NUNCHUK) { J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Run, pick up if ((run && !dontrun) || wp->btns_h & WPAD_BUTTON_B || dontletgo) J |= VBA_BUTTON_B; if (wp->btns_h & WPAD_BUTTON_B && dontletgo) { J = J & ~VBA_BUTTON_B; dontletgo = false; } // Spin attack if (fabs(wp->gforce.x)> 1.5) J |= VBA_BUTTON_R; // Butt stomp if (FallState!=0 && (wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) && (!RidingYoshi)) NeedStomp = true; if (FallState!=0 && (wp->exp.type == WPAD_EXP_CLASSIC) && (wp->btns_h & WPAD_CLASSIC_BUTTON_ZL || wp->btns_h & WPAD_CLASSIC_BUTTON_ZR) && (!RidingYoshi)) NeedStomp = true; // Crouch if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) { J |= VBA_DOWN; // Crouch J &= ~VBA_UP; } // Camera if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) { if (J & VBA_DOWN || J & VBA_UP) J |= VBA_BUTTON_L; else if (J & VBA_RIGHT || J & VBA_LEFT) { J |= VBA_BUTTON_L; J &= ~VBA_RIGHT; J &= ~VBA_LEFT; } } } else if (wp->exp.type == WPAD_EXP_CLASSIC) { J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) J |= VBA_BUTTON_START; if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->btns_h & WPAD_CLASSIC_BUTTON_X || wp->btns_h & WPAD_CLASSIC_BUTTON_Y) J |= VBA_BUTTON_B; if (wp->btns_h & WPAD_CLASSIC_BUTTON_B) J |= VBA_BUTTON_A; if (wp->btns_h & WPAD_CLASSIC_BUTTON_A || wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_L) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZL || wp->btns_h & WPAD_CLASSIC_BUTTON_ZR) { J |= VBA_DOWN; // Crouch J &= ~VBA_UP; } } BButton = (wp->exp.type == WPAD_EXP_CLASSIC && (wp->btns_h & WPAD_CLASSIC_BUTTON_X || wp->btns_h & WPAD_CLASSIC_BUTTON_Y)) || wp->btns_h & WPAD_BUTTON_B; #endif // Gamecube controller if (gc & PAD_BUTTON_A) J |= VBA_BUTTON_A; if (gc & PAD_BUTTON_B) J |= VBA_BUTTON_B; if (gc & PAD_BUTTON_X) J |= VBA_BUTTON_R; if (gc & PAD_BUTTON_Y) J |= VBA_BUTTON_SELECT; if (gc & PAD_TRIGGER_R) J |= VBA_BUTTON_R; if (gc & PAD_TRIGGER_L) J |= VBA_BUTTON_L; if (gc & PAD_BUTTON_START) J |= VBA_BUTTON_START; if (gc & PAD_TRIGGER_Z) { J |= VBA_DOWN; J &= ~VBA_UP; } // if we try to use Yoshi's tongue while running, release run for one frame if (run && BButton && !dontrun && !dontletgo) J &= ~VBA_BUTTON_B; if (NeedStomp && FallState == 0 && !RidingYoshi) { J |= VBA_BUTTON_R; // spin attack only works when on ground NeedStomp = false; } return J; }
u32 MarioLand2Input(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); bool run = false; run = (wp->exp.type==WPAD_EXP_NUNCHUK && wp->exp.nunchuk.js.mag> 0.83) || (wp->exp.type==WPAD_EXP_CLASSIC && wp->exp.classic.ljs.mag> 0.83); run = run && ((J & VBA_LEFT) || (J & VBA_RIGHT)); if (wp->exp.type == WPAD_EXP_NONE) J |= StandardSideways(pad); else if (wp->exp.type == WPAD_EXP_CLASSIC) { J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_CLASSIC_BUTTON_B) J |= VBA_BUTTON_A; // Run, pick up, throw, fire if (wp->btns_h & WPAD_CLASSIC_BUTTON_X || wp->btns_h & WPAD_CLASSIC_BUTTON_Y || run) J |= VBA_BUTTON_B; // Spin attack if (wp->btns_h & WPAD_CLASSIC_BUTTON_A) J |= VBA_DOWN | VBA_BUTTON_A; // Camera if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_L) J |= VBA_DOWN | VBA_BUTTON_B; if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) J |= VBA_UP | VBA_BUTTON_B; // Crouch if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZL && (!(wp->btns_h & WPAD_CLASSIC_BUTTON_A))) { J |= VBA_DOWN; // if the run button is held down, crouching also looks down // which we don't want when using the Z button J &= ~VBA_BUTTON_B; J &= ~VBA_UP; } // Speed if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZR) J |= VBA_SPEED; } else if (wp->exp.type == WPAD_EXP_NUNCHUK) { // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Run, pick up, throw, fire if (wp->btns_h & WPAD_BUTTON_B || run) J |= VBA_BUTTON_B; // Spin attack if (fabs(wp->gforce.x)> 1.4) J |= VBA_DOWN | VBA_BUTTON_A; // Camera if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) J |= VBA_BUTTON_B; if (wp->btns_h & WPAD_BUTTON_UP) J |= VBA_BUTTON_B | VBA_UP; if (wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_BUTTON_B | VBA_DOWN; if (wp->btns_h & WPAD_BUTTON_LEFT) J |= VBA_BUTTON_B | VBA_LEFT; if (wp->btns_h & WPAD_BUTTON_RIGHT) J |= VBA_BUTTON_B | VBA_RIGHT; // Crouch if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z && (!(wp->btns_h & WPAD_BUTTON_A))) { J |= VBA_DOWN; // if the run button is held down, crouching also looks down // which we don't want when using the Z button J &= ~VBA_BUTTON_B; J &= ~VBA_UP; } // Speed if (wp->btns_h & WPAD_BUTTON_1 || wp->btns_h & WPAD_BUTTON_2) J |= VBA_SPEED; } else J |= DecodeWiimote(pad); #endif return J; }
u32 MarioKartInput(unsigned short pad) { u32 J = StandardMovement(pad); static u32 frame = 0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); u8 Health = 0; static u8 OldHealth = 0; float fraction; // Rumble when they lose health! if (Health < OldHealth) systemGameRumble(20); OldHealth = Health; // Start/Select if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->exp.type == WPAD_EXP_NONE) { // Use item if (wp->btns_h & WPAD_BUTTON_RIGHT) { J |= VBA_BUTTON_L | VBA_UP; J &= ~VBA_DOWN; } else if (wp->btns_h & WPAD_BUTTON_LEFT) { J |= VBA_BUTTON_L | VBA_DOWN; J &= ~VBA_UP; } else if (wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_BUTTON_L; // Accelerate if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_A; // Brake if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_B; // Jump/Power slide if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_R; if (wp->orient.pitch> 12) { fraction = (wp->orient.pitch - 12)/60.0f; if ((frame % 60)/60.0f < fraction) J |= VBA_LEFT; } else if (wp->orient.pitch <- 12) { fraction = -(wp->orient.pitch + 10)/60.0f; if ((frame % 60)/60.0f < fraction) J |= VBA_RIGHT; } } else if (wp->exp.type == WPAD_EXP_NUNCHUK) { // Use item if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) J |= VBA_BUTTON_L; // Accelerate if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Brake if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Jump if (fabs(wp->gforce.y)> 1.5 ) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_LEFT || wp->btns_h & WPAD_BUTTON_RIGHT || wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_BUTTON_R; } else if (wp->exp.type == WPAD_EXP_CLASSIC) { // Use item if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_L) J |= VBA_BUTTON_L; // Accelerate if (wp->btns_h & WPAD_CLASSIC_BUTTON_A) J |= VBA_BUTTON_A; // Brake if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Jump if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_CLASSIC_BUTTON_UP || wp->btns_h & WPAD_CLASSIC_BUTTON_LEFT || wp->btns_h & WPAD_CLASSIC_BUTTON_RIGHT || wp->btns_h & WPAD_CLASSIC_BUTTON_DOWN) J |= VBA_BUTTON_R; // Start/Select if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) J |= VBA_BUTTON_START; if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; } #endif u32 gc = PAD_ButtonsHeld(pad); if (gc & PAD_BUTTON_START) J |= VBA_BUTTON_START; if (gc & PAD_BUTTON_X || gc & PAD_BUTTON_Y) J |= VBA_BUTTON_SELECT; if (gc & PAD_BUTTON_A) J |= VBA_BUTTON_A; if (gc & PAD_BUTTON_B) J |= VBA_BUTTON_B; if (gc & PAD_TRIGGER_L) J |= VBA_BUTTON_L; if (gc & PAD_TRIGGER_R) J |= VBA_BUTTON_R; if (gc & PAD_BUTTON_UP || gc & PAD_BUTTON_DOWN || gc & PAD_BUTTON_LEFT || gc & PAD_BUTTON_RIGHT) J |= VBA_BUTTON_R; frame++; return J; }
u32 Mario1DXInput(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); bool run = false; run = (wp->exp.type==WPAD_EXP_NUNCHUK && wp->exp.nunchuk.js.mag> 0.83) || (wp->exp.type==WPAD_EXP_CLASSIC && wp->exp.classic.ljs.mag> 0.83); run = run && ((J & VBA_LEFT) || (J & VBA_RIGHT)); if (wp->exp.type==WPAD_EXP_NUNCHUK) { // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Run, pick up if (wp->btns_h & WPAD_BUTTON_B || run) J |= VBA_BUTTON_B; // Starspin shoots when using fireflower if (fabs(wp->gforce.x)> 1.5) J |= VBA_BUTTON_B; // Camera (must come before Crouch) if (!(wp->btns_h & WPAD_NUNCHUK_BUTTON_C)) J &= ~(VBA_DOWN | VBA_UP); if (wp->btns_h & WPAD_BUTTON_UP) J |= VBA_UP; if (wp->btns_h & WPAD_BUTTON_DOWN) J |= VBA_DOWN; // Crouch (must come after Camera) if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) J |= VBA_DOWN; // Speed if (wp->btns_h & WPAD_BUTTON_1 || wp->btns_h & WPAD_BUTTON_2) J |= VBA_SPEED; } else if (wp->exp.type == WPAD_EXP_CLASSIC) { // Pause if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_CLASSIC_BUTTON_B) J |= VBA_BUTTON_A; // Run, pick up, throw, fire if (wp->btns_h & WPAD_CLASSIC_BUTTON_X || wp->btns_h & WPAD_CLASSIC_BUTTON_Y || run) J |= VBA_BUTTON_B; // Spin attack if (wp->btns_h & WPAD_CLASSIC_BUTTON_A) J |= VBA_BUTTON_B; // Camera J &= ~(VBA_DOWN | VBA_UP); if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_L) J |= VBA_DOWN; if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) J |= VBA_UP; // Crouch if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZL) { J |= VBA_DOWN; J &= ~VBA_UP; } // DPad movement/camera if (wp->btns_h & WPAD_CLASSIC_BUTTON_UP) J |= VBA_UP; if (wp->btns_h & WPAD_CLASSIC_BUTTON_DOWN) J |= VBA_DOWN; if (wp->btns_h & WPAD_CLASSIC_BUTTON_LEFT) J |= VBA_LEFT; if (wp->btns_h & WPAD_CLASSIC_BUTTON_RIGHT) J |= VBA_RIGHT; // Speed if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZR) J |= VBA_SPEED; } else J |= StandardSideways(pad); #endif return J; }
static u32 DecodeJoy(unsigned short pad) { TiltScreen = false; CursorVisible = false; #ifdef HW_RVL CursorX = userInput[pad].wpad.ir.x; CursorY = userInput[pad].wpad.ir.y; CursorValid = userInput[pad].wpad.ir.valid; #else CursorX = CursorY = CursorValid = 0; #endif // check for games that should have special Wii controls if (GCSettings.WiiControls) switch (RomIdCode & 0xFFFFFF) { // Zelda case ZELDA1: return Zelda1Input(pad); case ZELDA2: return Zelda2Input(pad); case ALINKTOTHEPAST: return ALinkToThePastInput(pad); case LINKSAWAKENING: return LinksAwakeningInput(pad); case ORACLEOFAGES: return OracleOfAgesInput(pad); case ORACLEOFSEASONS: return OracleOfSeasonsInput(pad); case MINISHCAP: return MinishCapInput(pad); // Metroid case METROID0: return MetroidZeroInput(pad); case METROID1: return Metroid1Input(pad); case METROID2: return Metroid2Input(pad); case METROID4: return MetroidFusionInput(pad); // TMNT case TMNT1: return TMNT1Input(pad); case TMNT2: return TMNT2Input(pad); case TMNT3: return TMNT3Input(pad); case TMNTGBA: return TMNTGBAInput(pad); case TMNTGBA2: return TMNTGBA2Input(pad); case TMNT: return TMNTInput(pad); // Medal Of Honor case MOHUNDERGROUND: return MohUndergroundInput(pad); case MOHINFILTRATOR: return MohInfiltratorInput(pad); // Harry Potter case HARRYPOTTER1GBC: return HarryPotter1GBCInput(pad); case HARRYPOTTER2GBC: return HarryPotter2GBCInput(pad); case HARRYPOTTER1: return HarryPotter1Input(pad); case HARRYPOTTER2: return HarryPotter2Input(pad); case HARRYPOTTER3: return HarryPotter3Input(pad); case HARRYPOTTER4: return HarryPotter4Input(pad); case HARRYPOTTER5: return HarryPotter5Input(pad); // Mario case MARIO1CLASSIC: case MARIO2CLASSIC: return Mario1ClassicInput(pad); case MARIO1DX: return Mario1DXInput(pad); case MARIO2ADV: return Mario2Input(pad); case MARIO3ADV: return Mario3Input(pad); case MARIOWORLD: return MarioWorldInput(pad); case YOSHIISLAND: return YoshiIslandInput(pad); case MARIOLAND1: return MarioLand1Input(pad); case MARIOLAND2: return MarioLand2Input(pad); case YOSHIUG: return UniversalGravitationInput(pad); // Mario Kart case MARIOKART: return MarioKartInput(pad); // Lego Star Wars case LSW1: return LegoStarWars1Input(pad); case LSW2: return LegoStarWars2Input(pad); // Star Wars case SWOBIWAN: return SWObiWanInput(pad); case SWJPB: return SWJediPowerBattlesInput(pad); case SWEP2: return SWEpisode2Input(pad); case SWEP3: return SWEpisode3Input(pad); case SWEP4: return SWEpisode4Input(pad); case SWEP5: return SWEpisode5Input(pad); case SWEP6: return SWEpisode6Input(pad); case SWTRILOGY: return SWTrilogyInput(pad); case SWNDA: return SWNDAInput(pad); case SWYODA: return SWYodaStoriesInput(pad); // Mortal Kombat case MK1: return MK1Input(pad); case MK12: return MK12Input(pad); case MK2: return MK2Input(pad); case MK3: return MK3Input(pad); case MK4: return MK4Input(pad); case MKA: return MKAInput(pad); case MKDA: return MKDAInput(pad); case MKTE: return MKTEInput(pad); // WarioWare case TWISTED: return TwistedInput(pad); // Kirby case KIRBYTNT: case KIRBYTNTJ: return KirbyTntInput(pad); // Boktai case BOKTAI1: return BoktaiInput(pad); case BOKTAI2: case BOKTAI3: return Boktai2Input(pad); // One Piece case ONEPIECE: return OnePieceInput(pad); // Lord of the Rings case HOBBIT: return HobbitInput(pad); case LOTR1: return FellowshipOfTheRingInput(pad); case LOTR2: case LOTR3: return ReturnOfTheKingInput(pad); // Castlevania case CVADVENTURE: return CastlevaniaAdventureInput(pad); case CVBELMONT: return CastlevaniaBelmontInput(pad); case CVLEGENDS: return CastlevaniaLegendsInput(pad); case CVCIRCLEMOON: case CVHARMONY: case CVARIA: return CastlevaniaCircleMoonInput(pad); } // the function result, J, is a combination of flags for all the VBA buttons that are down u32 J = StandardMovement(pad); // Turbo feature if( userInput[0].pad.substickX > 70 || userInput[0].WPAD_Stick(1,0) > 70 ) J |= VBA_SPEED; // Report pressed buttons (gamepads) int i; for (i = 0; i < MAXJP; i++) { if ((userInput[pad].pad.btns_h & btnmap[CTRLR_GCPAD][i]) // gamecube controller #ifdef HW_RVL || ( (userInput[pad].wpad.exp.type == WPAD_EXP_NONE) && (userInput[pad].wpad.btns_h & btnmap[CTRLR_WIIMOTE][i]) ) // wiimote || ( (userInput[pad].wpad.exp.type == WPAD_EXP_CLASSIC) && (userInput[pad].wpad.btns_h & btnmap[CTRLR_CLASSIC][i]) ) // classic controller || ( (userInput[pad].wpad.exp.type == WPAD_EXP_NUNCHUK) && (userInput[pad].wpad.btns_h & btnmap[CTRLR_NUNCHUK][i]) ) // nunchuk + wiimote || ( (DownUsbKeys[btnmap[CTRLR_KEYBOARD][i]]) ) // keyboard #endif ) J |= vbapadmap[i]; } return J; }
u32 KidDraculaInput(unsigned short pad) { // Only Nunchuk and Classic controls available // Wiimote and Gamecube controls depend on user configuration u32 J = StandardMovement(pad) | DecodeGamecube(pad) | DecodeWiimote(pad) | DecodeClassic(pad); bool JumpButton=0, ShootButton=0, PauseButton=0, SelectButton=0, SpeedButton=0, NorButton=0, BatButton=0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { JumpButton = wp->btns_h & WPAD_BUTTON_A; ShootButton = wp->btns_h & WPAD_BUTTON_B; PauseButton = wp->btns_h & WPAD_BUTTON_PLUS; SelectButton = wp->btns_h & WPAD_BUTTON_MINUS; SpeedButton = wp->btns_h & WPAD_BUTTON_1 || wp->btns_h & WPAD_BUTTON_2; NorButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_Z; BatButton = wp->btns_h & WPAD_NUNCHUK_BUTTON_C; } else if (wp->exp.type == WPAD_EXP_CLASSIC) { JumpButton = wp->btns_h & (WPAD_CLASSIC_BUTTON_B | WPAD_CLASSIC_BUTTON_A); ShootButton = wp->btns_h & WPAD_CLASSIC_BUTTON_Y; PauseButton = wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS; SelectButton = wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS; SpeedButton = wp->btns_h & (WPAD_CLASSIC_BUTTON_ZL | WPAD_CLASSIC_BUTTON_FULL_L); NorButton = wp->btns_h & WPAD_CLASSIC_BUTTON_X; BatButton = wp->btns_h & (WPAD_CLASSIC_BUTTON_ZR | WPAD_CLASSIC_BUTTON_FULL_R); } #endif if (JumpButton) J |= VBA_BUTTON_A; if (ShootButton && !(KD_WeaponPressed && KD_LastWeapon != -1)) { J |= VBA_BUTTON_B; KD_LastWeapon = -1; // Insert original weapon and graphics KD_WeaponToMemory(); gbWriteMemory(0xC8CB, KD_ActualItem); for (int i=0; i<64; i++) { gbWriteMemory(0x9110+i, KD_ACTUAL[i]); } for (int i=0; i<128; i++) { gbWriteMemory(0x8f40+i, KD_ACTUAL_GRAPHICS[i]); } } if (NorButton && !(KD_WeaponPressed && KD_LastWeapon != 0)) { J |= VBA_BUTTON_B; KD_LastWeapon = 0; // Insert NOR weapon and graphics KD_WeaponToMemory(); gbWriteMemory(0xC8CB, 0); for (int i=0; i<64; i++) { gbWriteMemory(0x9110+i, KD_NOR[i]); } for (int i=0; i<128; i++) { gbWriteMemory(0x8f40+i, KD_NOR_GRAPHICS[i]); } } if (BatButton && !(KD_WeaponPressed && KD_LastWeapon != 4)) { J |= VBA_BUTTON_B; KD_LastWeapon = 4; // Insert BAT weapon and graphics KD_WeaponToMemory(); gbWriteMemory(0xC8CB, 4); for (int i=0; i<64; i++) { gbWriteMemory(0x9110+i, KD_BAT[i]); } } if (PauseButton) J |= VBA_BUTTON_START; if (SelectButton) J |= VBA_BUTTON_SELECT; if (SpeedButton) J |= VBA_SPEED; KD_WeaponPressed = (ShootButton || NorButton || BatButton); return J; }
u32 TMNT3Input(unsigned short pad) { u32 J = StandardMovement(pad) | StandardDPad(pad); static u32 LastDir = VBA_RIGHT; bool Jump=0, Attack=0, SpinKick=0, Roll=0, Pause=0, Select=0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { Jump = (wp->btns_h & WPAD_BUTTON_A); Attack = (fabs(wp->gforce.x)> 1.5); SpinKick = (fabs(wp->exp.nunchuk.gforce.x)> 0.5); Roll = (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z || wp->btns_h & WPAD_NUNCHUK_BUTTON_C); Pause = (wp->btns_h & WPAD_BUTTON_PLUS); Select = (wp->btns_h & WPAD_BUTTON_MINUS); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_BUTTON_B) { J |= VBA_BUTTON_START; } } else if (wp->exp.type == WPAD_EXP_CLASSIC) { J |= StandardDPad(pad); Jump = (wp->btns_h & WPAD_CLASSIC_BUTTON_B); Attack = (wp->btns_h & WPAD_CLASSIC_BUTTON_A); SpinKick = (wp->btns_h & WPAD_CLASSIC_BUTTON_X); Pause = (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS); Select = (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS); Roll = (wp->btns_h & (WPAD_CLASSIC_BUTTON_FULL_L | WPAD_CLASSIC_BUTTON_FULL_R | WPAD_CLASSIC_BUTTON_ZL | WPAD_CLASSIC_BUTTON_ZR)); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_CLASSIC_BUTTON_Y) { J |= VBA_BUTTON_START; } } else { Jump = (wp->btns_h & WPAD_BUTTON_A); Attack = (fabs(wp->gforce.x)> 1.5); Pause = (wp->btns_h & WPAD_BUTTON_PLUS); Select = (wp->btns_h & WPAD_BUTTON_MINUS); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_BUTTON_B) { J |= VBA_BUTTON_START; } SpinKick = (wp->btns_h & WPAD_BUTTON_1); Roll = (wp->btns_h & WPAD_BUTTON_2); } #endif u32 gc = PAD_ButtonsHeld(pad); // DPad moves if (gc & PAD_BUTTON_UP) J |= VBA_UP; if (gc & PAD_BUTTON_DOWN) J |= VBA_DOWN; if (gc & PAD_BUTTON_LEFT) J |= VBA_LEFT; if (gc & PAD_BUTTON_RIGHT) J |= VBA_RIGHT; // Jump if (gc & PAD_BUTTON_A) J |= VBA_BUTTON_A; // Swap turtles if (gc & PAD_BUTTON_B) { J |= VBA_BUTTON_START; } // Attack if (gc & PAD_BUTTON_X) Attack = true; // Spin kick if (gc & PAD_BUTTON_Y) SpinKick = true; // Pause if (gc & PAD_BUTTON_START) Pause = true; // Select if (gc & PAD_TRIGGER_Z) Select = true; // Roll if (gc & PAD_TRIGGER_L || gc & PAD_TRIGGER_R) Roll = true; if (Jump || Roll) J |= VBA_BUTTON_A; if (Attack || SpinKick) J |= VBA_BUTTON_B; if (Pause) J |= VBA_BUTTON_SELECT; if (Select) J |= VBA_BUTTON_START; if (J & VBA_RIGHT) LastDir = VBA_RIGHT; else if (J & VBA_LEFT) LastDir = VBA_LEFT; return J; }
u32 TMNTInput(unsigned short pad) { u32 J = StandardMovement(pad) | StandardDPad(pad); static u32 LastDir = VBA_RIGHT; static bool wait = false; static int holdcount = 0; bool Jump=0, Attack=0, SpinKick=0, Roll=0, Pause=0, Select=0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { Jump = (wp->btns_h & WPAD_BUTTON_A); Attack = (fabs(wp->gforce.x)> 1.5); SpinKick = (fabs(wp->exp.nunchuk.gforce.x)> 0.5); Roll = (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z || wp->btns_h & WPAD_NUNCHUK_BUTTON_C); Pause = (wp->btns_h & WPAD_BUTTON_PLUS); Select = (wp->btns_h & WPAD_BUTTON_MINUS); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_BUTTON_B) { if (wp->exp.nunchuk.orient.pitch < -35 && wp->orient.pitch < -35) J |= VBA_BUTTON_L | VBA_BUTTON_R; else J |= VBA_BUTTON_R; } } else if (wp->exp.type == WPAD_EXP_CLASSIC) { Jump = (wp->btns_h & WPAD_CLASSIC_BUTTON_B); Attack = (wp->btns_h & WPAD_CLASSIC_BUTTON_A); SpinKick = (wp->btns_h & WPAD_CLASSIC_BUTTON_X); Pause = (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS); Select = (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS); Roll = (wp->btns_h & (WPAD_CLASSIC_BUTTON_FULL_L | WPAD_CLASSIC_BUTTON_FULL_R | WPAD_CLASSIC_BUTTON_ZL | WPAD_CLASSIC_BUTTON_ZR)); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_CLASSIC_BUTTON_Y) { holdcount++; if (holdcount > 20) J |= VBA_BUTTON_L | VBA_BUTTON_R; } if (wp->btns_u & WPAD_CLASSIC_BUTTON_Y) { if (holdcount <= 20) J |= VBA_BUTTON_R; holdcount = 0; } } else { Jump = (wp->btns_h & WPAD_BUTTON_A); Attack = (fabs(wp->gforce.x)> 1.5); Pause = (wp->btns_h & WPAD_BUTTON_PLUS); Select = (wp->btns_h & WPAD_BUTTON_MINUS); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_BUTTON_B) { if (wp->orient.pitch < -40) J |= VBA_BUTTON_L | VBA_BUTTON_R; else J |= VBA_BUTTON_R; } SpinKick = (wp->btns_h & WPAD_BUTTON_1); Roll = (wp->btns_h & WPAD_BUTTON_2); } #endif u32 gc = PAD_ButtonsHeld(pad); u32 released = PAD_ButtonsUp(pad); // DPad moves if (gc & PAD_BUTTON_UP) J |= VBA_UP; if (gc & PAD_BUTTON_DOWN) J |= VBA_DOWN; if (gc & PAD_BUTTON_LEFT) J |= VBA_LEFT; if (gc & PAD_BUTTON_RIGHT) J |= VBA_RIGHT; // Jump if (gc & PAD_BUTTON_A) J |= VBA_BUTTON_A; // Swap turtles, hold for super family move if (gc & PAD_BUTTON_B) { holdcount++; if (holdcount > 20) J |= VBA_BUTTON_L | VBA_BUTTON_R; } if (released & PAD_BUTTON_B) { if (holdcount <= 20) J |= VBA_BUTTON_R; holdcount = 0; } // Attack if (gc & PAD_BUTTON_X) Attack = true; // Spin kick if (gc & PAD_BUTTON_Y) SpinKick = true; // Pause if (gc & PAD_BUTTON_START) Pause = true; // Select if (gc & PAD_TRIGGER_Z) Select = true; // Roll if (gc & PAD_TRIGGER_L || gc & PAD_TRIGGER_R) Roll = true; if (Jump) J |= VBA_BUTTON_A; if (Attack) J |= VBA_BUTTON_B; if (SpinKick) J |= VBA_BUTTON_B | VBA_BUTTON_A; if (Pause) J |= VBA_BUTTON_START; if (Select) J |= VBA_BUTTON_SELECT; if (Roll) { if (!wait) { J |= LastDir; // Double tap D-Pad to roll wait = true; } else wait = false; } if (J & VBA_RIGHT) LastDir = VBA_RIGHT; else if (J & VBA_LEFT) LastDir = VBA_LEFT; return J; }
u32 TMNTGBA2Input(unsigned short pad) { u32 J = StandardMovement(pad) | StandardDPad(pad); static u32 LastDir = VBA_RIGHT; //static bool wait = false; //static int holdcount = 0; bool Jump=0, Attack=0, SpinKick=0, SpecialMove=0, Pause=0, Select=0, Look=0; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { Jump = (wp->btns_h & WPAD_BUTTON_A); Attack = (fabs(wp->gforce.x)> 1.5) || (wp->btns_h & WPAD_BUTTON_B); SpinKick = (fabs(wp->exp.nunchuk.gforce.x)> 0.5); SpecialMove = (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z); Pause = (wp->btns_h & WPAD_BUTTON_PLUS); Select = (wp->btns_h & WPAD_BUTTON_MINUS); Look = (wp->btns_h & WPAD_NUNCHUK_BUTTON_C); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_BUTTON_B) { //J |= VBA_BUTTON_START; } } else if (wp->exp.type == WPAD_EXP_CLASSIC) { Jump = (wp->btns_h & WPAD_CLASSIC_BUTTON_B); Attack = (wp->btns_h & WPAD_CLASSIC_BUTTON_A); SpinKick = (wp->btns_h & WPAD_CLASSIC_BUTTON_X); Pause = (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS); Select = (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS); SpecialMove = (wp->btns_h & (WPAD_CLASSIC_BUTTON_FULL_L | WPAD_CLASSIC_BUTTON_FULL_R | WPAD_CLASSIC_BUTTON_ZR)); Look = (wp->btns_h & WPAD_CLASSIC_BUTTON_ZL); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_CLASSIC_BUTTON_Y) { //J |= VBA_BUTTON_START; } } else { Jump = (wp->btns_h & WPAD_BUTTON_A); Attack = (fabs(wp->gforce.x)> 1.5) || (wp->btns_h & WPAD_BUTTON_B); Pause = (wp->btns_h & WPAD_BUTTON_PLUS); Select = (wp->btns_h & WPAD_BUTTON_MINUS); // Swap Turtles or super turtle summon if (wp->btns_h & WPAD_BUTTON_B) { Look = true; } SpinKick = (wp->btns_h & WPAD_BUTTON_1); SpecialMove = (wp->btns_h & WPAD_BUTTON_2); } #endif u32 gc = PAD_ButtonsHeld(pad); // DPad moves if (gc & PAD_BUTTON_UP) J |= VBA_UP; if (gc & PAD_BUTTON_DOWN) J |= VBA_DOWN; if (gc & PAD_BUTTON_LEFT) J |= VBA_LEFT; if (gc & PAD_BUTTON_RIGHT) J |= VBA_RIGHT; // Jump if (gc & PAD_BUTTON_A) J |= VBA_BUTTON_A; // Swap turtles if (gc & PAD_BUTTON_B) { Look = true; } // Attack if (gc & PAD_BUTTON_X) Attack = true; // Spin kick if (gc & PAD_BUTTON_Y) SpinKick = true; // Pause if (gc & PAD_BUTTON_START) Pause = true; // Select if (gc & PAD_TRIGGER_Z) Select = true; // SpecialMove if (gc & PAD_TRIGGER_L || gc & PAD_TRIGGER_R) SpecialMove = true; if (Jump) J |= VBA_BUTTON_A; if (Attack) J |= VBA_BUTTON_B; if (SpinKick) J |= VBA_BUTTON_R; if (Pause) J |= VBA_BUTTON_START; if (Select) J |= VBA_BUTTON_SELECT; if (SpecialMove) { J |= VBA_UP | VBA_BUTTON_A; // CAKTODO, currently works for Don and Mike } if (J & VBA_RIGHT) LastDir = VBA_RIGHT; else if (J & VBA_LEFT) LastDir = VBA_LEFT; return J; }
u32 YoshiIslandInput(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeWiimote(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { J |= StandardDPad(pad); // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; // Jump if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // Run, pick up if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // throw if (wp->btns_h & WPAD_BUTTON_1 || wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_R; // Crouch, lay egg if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) { J |= VBA_DOWN; // Crouch J &= ~VBA_UP; } // Camera if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) J |= VBA_BUTTON_L; } else if (wp->exp.type == WPAD_EXP_CLASSIC) { J |= StandardDPad(pad); if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) J |= VBA_BUTTON_START; if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->btns_h & WPAD_CLASSIC_BUTTON_X) J |= VBA_BUTTON_B; if (wp->btns_h & WPAD_CLASSIC_BUTTON_Y) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_CLASSIC_BUTTON_B) J |= VBA_BUTTON_A; if (wp->btns_h & WPAD_CLASSIC_BUTTON_A || wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_L) J |= VBA_BUTTON_L; if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZL || wp->btns_h & WPAD_CLASSIC_BUTTON_ZR) { J |= VBA_DOWN; // Crouch J &= ~VBA_UP; } } #endif // Gamecube controller { u32 gc = PAD_ButtonsHeld(pad); if (gc & PAD_BUTTON_A) J |= VBA_BUTTON_A; if (gc & PAD_BUTTON_B) J |= VBA_BUTTON_B; if (gc & PAD_BUTTON_X) J |= VBA_BUTTON_R; if (gc & PAD_BUTTON_Y) J |= VBA_BUTTON_SELECT; if (gc & PAD_TRIGGER_R) J |= VBA_BUTTON_R; if (gc & PAD_TRIGGER_L) J |= VBA_BUTTON_L; if (gc & PAD_BUTTON_START) J |= VBA_BUTTON_START; if (gc & PAD_TRIGGER_Z) { J |= VBA_DOWN; J &= ~VBA_UP; } } return J; }
u32 UniversalGravitationInput(unsigned short pad) { TiltScreen = true; u32 J = StandardMovement(pad) | DecodeGamecube(pad); #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { J |= StandardDPad(pad); TiltSideways = false; // Pause if (wp->btns_h & WPAD_BUTTON_PLUS) J |= VBA_BUTTON_START; // Select, L & R do nothing! if (wp->btns_h & WPAD_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->btns_h & WPAD_BUTTON_1) J |= VBA_BUTTON_L | VBA_SPEED; if (wp->btns_h & WPAD_BUTTON_2) J |= VBA_BUTTON_R | VBA_SPEED; // Jump if (wp->btns_h & WPAD_BUTTON_A) J |= VBA_BUTTON_A; // tongue if (wp->btns_h & WPAD_BUTTON_B) J |= VBA_BUTTON_B; // Crouch, butt stomp if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) { J |= VBA_DOWN; // Crouch J &= ~VBA_UP; } // Camera if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) { J |= VBA_UP; } } else if (wp->exp.type == WPAD_EXP_CLASSIC) { TiltSideways = false; J |= StandardDPad(pad); // A bit stupid playing with the classic controller, but nevermind. if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) J |= VBA_BUTTON_START; if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) J |= VBA_BUTTON_SELECT; if (wp->btns_h & WPAD_CLASSIC_BUTTON_X) J |= VBA_BUTTON_B; if (wp->btns_h & WPAD_CLASSIC_BUTTON_Y) J |= VBA_BUTTON_R; if (wp->btns_h & WPAD_CLASSIC_BUTTON_B || wp->btns_h & WPAD_CLASSIC_BUTTON_A) J |= VBA_BUTTON_A; if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_L || wp->btns_h & WPAD_CLASSIC_BUTTON_ZL) J |= VBA_DOWN; if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) J |= VBA_UP; if (WPAD_CLASSIC_BUTTON_ZR) J |= VBA_SPEED; } else { J |= StandardSideways(pad); TiltSideways = true; } #endif return J; }
u32 GetMKInput(unsigned short pad, int rumbleTime=4) { u32 J = StandardMovement(pad) | DecodeWiimote(pad); HP=0;LP=0;HK=0;LK=0;BL=0;Throw=0;CS=0;F=0;B=0;Select=0;Start=0;SpecialMove=0; // Rumble when they lose health! if (OurHealth < OurOldHealth) systemGameRumble(rumbleTime); OurOldHealth = OurHealth; #ifdef HW_RVL WPADData * wp = WPAD_Data(pad); if (wp->exp.type == WPAD_EXP_NUNCHUK) { // Punch if (wp->btns_h & WPAD_BUTTON_LEFT) LP = true; if (wp->btns_h & WPAD_BUTTON_UP) HP = true; // Kick if (wp->btns_h & WPAD_BUTTON_DOWN) LK = true; if (wp->btns_h & WPAD_BUTTON_RIGHT) HK = true; // Block if (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z) BL = true; // Throw if (wp->btns_h & WPAD_BUTTON_A) Throw = true; // Run / Change Styles if (wp->btns_h & WPAD_NUNCHUK_BUTTON_C) CS = true; // Start and Select if (wp->btns_h & WPAD_BUTTON_MINUS) Select=true; if (wp->btns_h & WPAD_BUTTON_PLUS) Start=true; // Special move if (wp->btns_h & WPAD_BUTTON_B) SpecialMove=true; } else if (wp->exp.type == WPAD_EXP_CLASSIC) { // D-Pad if (wp->btns_h & WPAD_CLASSIC_BUTTON_UP) J |= VBA_UP; if (wp->btns_h & WPAD_CLASSIC_BUTTON_DOWN) J |= VBA_DOWN; if (wp->btns_h & WPAD_CLASSIC_BUTTON_LEFT) J |= VBA_LEFT; if (wp->btns_h & WPAD_CLASSIC_BUTTON_RIGHT) J |= VBA_RIGHT; // Punch if (wp->btns_h & WPAD_CLASSIC_BUTTON_Y) LP = true; if (wp->btns_h & WPAD_CLASSIC_BUTTON_X) HP = true; // Kick if (wp->btns_h & WPAD_CLASSIC_BUTTON_B) LK = true; if (wp->btns_h & WPAD_CLASSIC_BUTTON_A) HK = true; // Throw if (wp->btns_h & WPAD_CLASSIC_BUTTON_ZR) Throw = true; // Block if (wp->btns_h & WPAD_CLASSIC_BUTTON_FULL_R) BL = true; // block // Run / Change Styles if (wp->btns_h & (WPAD_CLASSIC_BUTTON_FULL_L | WPAD_CLASSIC_BUTTON_ZL)) CS = true; // Start and Select if (wp->btns_h & WPAD_CLASSIC_BUTTON_MINUS) Select = true; if (wp->btns_h & WPAD_CLASSIC_BUTTON_PLUS) Start = true; // Special move if (wp->btns_h & WPAD_BUTTON_B) SpecialMove=true; } #endif { u32 gc = PAD_ButtonsHeld(pad); // DPad moves if (gc & PAD_BUTTON_UP) J |= VBA_UP; if (gc & PAD_BUTTON_DOWN) J |= VBA_DOWN; if (gc & PAD_BUTTON_LEFT) J |= VBA_LEFT; if (gc & PAD_BUTTON_RIGHT) J |= VBA_RIGHT; // Start and Select if (gc & PAD_BUTTON_START) Start = true; // Punch if (gc & PAD_BUTTON_B) LP = true; if (gc & PAD_BUTTON_Y) HP = true; // Kick if (gc & PAD_BUTTON_A) LK = true; if (gc & PAD_BUTTON_X) HK = true; // Block if (gc & PAD_TRIGGER_R) BL = true; // Run / Change Style if (gc & PAD_TRIGGER_L) CS = true; // Throw if (gc & PAD_TRIGGER_Z) Throw = true; } // Check which side they are on if (OurX < OpponentX) { VBA_FORWARD = VBA_RIGHT; VBA_BACK = VBA_LEFT; } else { VBA_FORWARD = VBA_LEFT; VBA_BACK = VBA_RIGHT; } if (J & VBA_FORWARD) F = true; if (J & VBA_BACK) B = true; return J; }