diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index df367e3fc..85cfc7360 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -11682,7 +11682,7 @@ glabel var7f1a8d98 /* f034e88: 3c04800a */ lui $a0,0x800a /* f034e8c: 8084a79f */ lb $a0,-0x5861($a0) /* f034e90: 27a500e0 */ addiu $a1,$sp,0xe0 -/* f034e94: 0c005416 */ jal joy000152d0 +/* f034e94: 0c005416 */ jal joyGetContpadNumsForPlayer /* f034e98: 27a600dc */ addiu $a2,$sp,0xdc /* f034e9c: 8fa400e0 */ lw $a0,0xe0($sp) /* f034ea0: 3c053e80 */ lui $a1,0x3e80 @@ -13819,7 +13819,7 @@ glabel var7f1a8d98 /* f034d20: 3c04800a */ lui $a0,%hi(g_Vars+0x28f) /* f034d24: 8084a24f */ lb $a0,%lo(g_Vars+0x28f)($a0) /* f034d28: 27a500e0 */ addiu $a1,$sp,0xe0 -/* f034d2c: 0c0054b4 */ jal joy000152d0 +/* f034d2c: 0c0054b4 */ jal joyGetContpadNumsForPlayer /* f034d30: 27a600dc */ addiu $a2,$sp,0xdc /* f034d34: 8fa400e0 */ lw $a0,0xe0($sp) /* f034d38: 3c053e80 */ lui $a1,0x3e80 diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index d2334ea57..201081ed3 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -39,6 +39,7 @@ #include "game/propobj.h" #include "bss.h" #include "lib/lib_09a80.h" +#include "lib/joy.h" #include "lib/main.h" #include "lib/model.h" #include "lib/snd.h" @@ -124,109 +125,56 @@ u32 var80070118 = 0x78000000; u32 var8007011c = 0x00000000; #if VERSION >= VERSION_NTSC_1_0 -GLOBAL_ASM( -glabel func0f097ba0 -/* f097ba0: 27bdffc0 */ addiu $sp,$sp,-64 -/* f097ba4: afa40040 */ sw $a0,0x40($sp) -/* f097ba8: afbf0014 */ sw $ra,0x14($sp) -/* f097bac: afa50044 */ sw $a1,0x44($sp) -/* f097bb0: 3c04800a */ lui $a0,%hi(g_Vars+0x28f) -/* f097bb4: afa00030 */ sw $zero,0x30($sp) -/* f097bb8: 8084a24f */ lb $a0,%lo(g_Vars+0x28f)($a0) -/* f097bbc: 27a5002c */ addiu $a1,$sp,0x2c -/* f097bc0: 0c0054b4 */ jal joy000152d0 -/* f097bc4: 27a60028 */ addiu $a2,$sp,0x28 -/* f097bc8: 3c0e800a */ lui $t6,%hi(g_Vars+0x288) -/* f097bcc: 8dcea248 */ lw $t6,%lo(g_Vars+0x288)($t6) -/* f097bd0: 0fc549c4 */ jal optionsGetControlMode -/* f097bd4: 8dc40070 */ lw $a0,0x70($t6) -/* f097bd8: 28410004 */ slti $at,$v0,0x4 -/* f097bdc: 1420003f */ bnez $at,.L0f097cdc -/* f097be0: 8faf002c */ lw $t7,0x2c($sp) -/* f097be4: 05e0003d */ bltz $t7,.L0f097cdc -/* f097be8: 8fb80028 */ lw $t8,0x28($sp) -/* f097bec: 0702003c */ bltzl $t8,.L0f097ce0 -/* f097bf0: 8fac002c */ lw $t4,0x2c($sp) -/* f097bf4: 0fc45a45 */ jal func0f116914 -/* f097bf8: 83a4002f */ lb $a0,0x2f($sp) -/* f097bfc: 38590001 */ xori $t9,$v0,0x1 -/* f097c00: 2f390001 */ sltiu $t9,$t9,0x1 -/* f097c04: afb90024 */ sw $t9,0x24($sp) -/* f097c08: 0fc45a45 */ jal func0f116914 -/* f097c0c: 83a4002b */ lb $a0,0x2b($sp) -/* f097c10: 38430001 */ xori $v1,$v0,0x1 -/* f097c14: 2c630001 */ sltiu $v1,$v1,0x1 -/* f097c18: afa30020 */ sw $v1,0x20($sp) -/* f097c1c: 8fa40044 */ lw $a0,0x44($sp) -/* f097c20: 0fc2c5f0 */ jal weaponHasFlag -/* f097c24: 24051000 */ addiu $a1,$zero,0x1000 -/* f097c28: 14400003 */ bnez $v0,.L0f097c38 -/* f097c2c: 8fa30020 */ lw $v1,0x20($sp) -/* f097c30: 24080001 */ addiu $t0,$zero,0x1 -/* f097c34: afa80030 */ sw $t0,0x30($sp) -.L0f097c38: -/* f097c38: 8fa90024 */ lw $t1,0x24($sp) -/* f097c3c: 3c053e4c */ lui $a1,0x3e4c -/* f097c40: 34a5cccd */ ori $a1,$a1,0xcccd -/* f097c44: 1120001e */ beqz $t1,.L0f097cc0 -/* f097c48: 24060002 */ addiu $a2,$zero,0x2 -/* f097c4c: 1060001c */ beqz $v1,.L0f097cc0 -/* f097c50: 8faa0030 */ lw $t2,0x30($sp) -/* f097c54: 1140000f */ beqz $t2,.L0f097c94 -/* f097c58: 8fab0040 */ lw $t3,0x40($sp) -/* f097c5c: 3c053e4c */ lui $a1,0x3e4c -/* f097c60: 34a5cccd */ ori $a1,$a1,0xcccd -/* f097c64: 8fa4002c */ lw $a0,0x2c($sp) -/* f097c68: 24060002 */ addiu $a2,$zero,0x2 -/* f097c6c: 0fc47701 */ jal func0f11dc04 -/* f097c70: 24070004 */ addiu $a3,$zero,0x4 -/* f097c74: 3c053e4c */ lui $a1,0x3e4c -/* f097c78: 34a5cccd */ ori $a1,$a1,0xcccd -/* f097c7c: 8fa40028 */ lw $a0,0x28($sp) -/* f097c80: 24060002 */ addiu $a2,$zero,0x2 -/* f097c84: 0fc47701 */ jal func0f11dc04 -/* f097c88: 24070004 */ addiu $a3,$zero,0x4 -/* f097c8c: 1000001c */ b .L0f097d00 -/* f097c90: 8fbf0014 */ lw $ra,0x14($sp) -.L0f097c94: -/* f097c94: 24010001 */ addiu $at,$zero,0x1 -/* f097c98: 15610002 */ bne $t3,$at,.L0f097ca4 -/* f097c9c: 8fa4002c */ lw $a0,0x2c($sp) -/* f097ca0: 8fa40028 */ lw $a0,0x28($sp) -.L0f097ca4: -/* f097ca4: 3c053e4c */ lui $a1,0x3e4c -/* f097ca8: 34a5cccd */ ori $a1,$a1,0xcccd -/* f097cac: 24060002 */ addiu $a2,$zero,0x2 -/* f097cb0: 0fc47701 */ jal func0f11dc04 -/* f097cb4: 24070004 */ addiu $a3,$zero,0x4 -/* f097cb8: 10000011 */ b .L0f097d00 -/* f097cbc: 8fbf0014 */ lw $ra,0x14($sp) -.L0f097cc0: -/* f097cc0: 10600002 */ beqz $v1,.L0f097ccc -/* f097cc4: 8fa4002c */ lw $a0,0x2c($sp) -/* f097cc8: 8fa40028 */ lw $a0,0x28($sp) -.L0f097ccc: -/* f097ccc: 0fc47701 */ jal func0f11dc04 -/* f097cd0: 24070004 */ addiu $a3,$zero,0x4 -/* f097cd4: 1000000a */ b .L0f097d00 -/* f097cd8: 8fbf0014 */ lw $ra,0x14($sp) -.L0f097cdc: -/* f097cdc: 8fac002c */ lw $t4,0x2c($sp) -.L0f097ce0: -/* f097ce0: 3c053e4c */ lui $a1,0x3e4c -/* f097ce4: 34a5cccd */ ori $a1,$a1,0xcccd -/* f097ce8: 05800004 */ bltz $t4,.L0f097cfc -/* f097cec: 01802025 */ or $a0,$t4,$zero -/* f097cf0: 24060002 */ addiu $a2,$zero,0x2 -/* f097cf4: 0fc47701 */ jal func0f11dc04 -/* f097cf8: 24070004 */ addiu $a3,$zero,0x4 -.L0f097cfc: -/* f097cfc: 8fbf0014 */ lw $ra,0x14($sp) -.L0f097d00: -/* f097d00: 27bd0040 */ addiu $sp,$sp,0x40 -/* f097d04: 03e00008 */ jr $ra -/* f097d08: 00000000 */ nop -); +void func0f097ba0(s32 handnum, s32 weaponnum) +{ + u32 stack; + s32 contpadtouse1; + s32 contpadtouse2; + bool singlewield = false; + s32 contpad1; + s32 contpad2; + s32 a; + s32 b; + + joyGetContpadNumsForPlayer(g_Vars.currentplayernum, &contpad1, &contpad2); + + if (optionsGetControlMode(g_Vars.currentplayerstats->mpindex) >= CONTROLMODE_21 + && contpad1 >= 0 && contpad2 >= 0) { + a = func0f116914(contpad1) == 1; + b = func0f116914(contpad2) == 1; + + if (!weaponHasFlag(weaponnum, WEAPONFLAG_DUALWIELD)) { + singlewield = true; + } + + if (a && b) { + if (singlewield) { + func0f11dc04(contpad1, 0.2f, 2, 4); + func0f11dc04(contpad2, 0.2f, 2, 4); + } else { + s32 contpadtouse1 = contpad1; + + if (handnum == HAND_LEFT) { + contpadtouse1 = contpad2; + } + + func0f11dc04(contpadtouse1, 0.2f, 2, 4); + } + } else { + s32 contpadtouse2 = contpad1; + + if (b) { + contpadtouse2 = contpad2; + } + + func0f11dc04(contpadtouse2, 0.2f, 2, 4); + } + } else { + if (contpad1 >= 0) { + func0f11dc04(contpad1, 0.2f, 2, 4); + } + } +} #else GLOBAL_ASM( glabel func0f097ba0 diff --git a/src/game/pak/pak.c b/src/game/pak/pak.c index e8845250f..4b1a9a7c9 100644 --- a/src/game/pak/pak.c +++ b/src/game/pak/pak.c @@ -15282,7 +15282,7 @@ glabel func0f11dd58 /* f11dd84: afb00014 */ sw $s0,0x14($sp) /* f11dd88: 01e02025 */ or $a0,$t7,$zero /* f11dd8c: 27a50040 */ addiu $a1,$sp,0x40 -/* f11dd90: 0c0054b4 */ jal joy000152d0 +/* f11dd90: 0c0054b4 */ jal joyGetContpadNumsForPlayer /* f11dd94: 27a60044 */ addiu $a2,$sp,0x44 /* f11dd98: 3c12800a */ lui $s2,%hi(var800a2380) /* f11dd9c: 26522380 */ addiu $s2,$s2,%lo(var800a2380) @@ -15365,7 +15365,7 @@ glabel func0f11de20 /* f11de34: 00047e03 */ sra $t7,$a0,0x18 /* f11de38: 01e02025 */ or $a0,$t7,$zero /* f11de3c: 27a50028 */ addiu $a1,$sp,0x28 -/* f11de40: 0c0054b4 */ jal joy000152d0 +/* f11de40: 0c0054b4 */ jal joyGetContpadNumsForPlayer /* f11de44: 27a6002c */ addiu $a2,$sp,0x2c /* f11de48: 3c06800a */ lui $a2,%hi(var800a2380) /* f11de4c: 24c62380 */ addiu $a2,$a2,%lo(var800a2380) diff --git a/src/include/game/pak/pak.h b/src/include/game/pak/pak.h index cd89a1a34..eb8ca661d 100644 --- a/src/include/game/pak/pak.h +++ b/src/include/game/pak/pak.h @@ -120,7 +120,7 @@ s32 func0f11d5b0(s8 index); void func0f11d620(s8 device); u32 func0f11d8b4(void); u32 func0f11d9c4(void); -u32 func0f11dc04(void); +void func0f11dc04(s32 arg0, f32 arg1, s32 arg2, s32 arg3); void func0f11dcb0(s32 arg0); void func0f11dd58(s8 playernum); void func0f11de20(s8 device); diff --git a/src/include/lib/joy.h b/src/include/lib/joy.h index c8a9c1c39..092bfb7a4 100644 --- a/src/include/lib/joy.h +++ b/src/include/lib/joy.h @@ -48,7 +48,7 @@ void joy00015144(s32 line, char *file); #endif void joyReset(void); -void joy000152d0(s8 playernum, s32 *arg1, s32 *arg2); +void joyGetContpadNumsForPlayer(s8 playernum, s32 *pad1, s32 *pad2); void joy000153c4(s8 arg0, s32 arg1); s32 joy000155b4(s8 index); s32 joy000155f4(s8 index); diff --git a/src/lib/joy.c b/src/lib/joy.c index ed881a48e..b9d2fab1e 100644 --- a/src/lib/joy.c +++ b/src/lib/joy.c @@ -1320,22 +1320,22 @@ void joyReset(void) } #if VERSION >= VERSION_NTSC_1_0 -void joy000152d0(s8 playernum, s32 *arg1, s32 *arg2) +void joyGetContpadNumsForPlayer(s8 playernum, s32 *pad1, s32 *pad2) { if (g_Vars.normmplayerisrunning) { - *arg1 = g_Vars.playerstats[playernum].mpindex; - *arg2 = -1; + *pad1 = g_Vars.playerstats[playernum].mpindex; + *pad2 = -1; return; } - *arg1 = playernum; + *pad1 = playernum; if (g_MpPlayers[g_Vars.playerstats[playernum].mpindex].base.controlmode >= CONTROLMODE_21) { - *arg2 = PLAYERCOUNT() + playernum; + *pad2 = PLAYERCOUNT() + playernum; return; } - *arg2 = -1; + *pad2 = -1; } #endif