From fc388c4db939be2b532f3c79b107e83c9f9fd3ef Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 11 Apr 2020 21:54:53 +1000 Subject: [PATCH] Decompile frGetWeaponBySlot --- src/game/game_097ba0.c | 2 +- src/game/game_0fd660.c | 2 +- src/game/game_102240.c | 4 +- src/game/game_19c990.c | 74 +++++++++++++--------------------- src/game/game_1a3340.c | 20 ++++----- src/include/game/game_19c990.h | 4 +- src/include/types.h | 2 +- 7 files changed, 44 insertions(+), 64 deletions(-) diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 0aa54c763..8b22fbf3d 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -5254,7 +5254,7 @@ glabel func0f09bd58 /* f09bd78: afa3001c */ sw $v1,0x1c($sp) /* f09bd7c: 0fc67494 */ jal func0f19d250 /* f09bd80: afa40020 */ sw $a0,0x20($sp) -/* f09bd84: 0fc6749a */ jal func0f19d268 +/* f09bd84: 0fc6749a */ jal frGetWeaponBySlot /* f09bd88: 00402025 */ or $a0,$v0,$zero /* f09bd8c: 8fa3001c */ lw $v1,0x1c($sp) /* f09bd90: 8fa50020 */ lw $a1,0x20($sp) diff --git a/src/game/game_0fd660.c b/src/game/game_0fd660.c index c9ddba84f..c11caa76d 100644 --- a/src/game/game_0fd660.c +++ b/src/game/game_0fd660.c @@ -624,7 +624,7 @@ void activemenuApply(s32 slot) pass = true; if (var80088804 != 0) { - uVar6 = func0f19d268(func0f19d250()); + uVar6 = frGetWeaponBySlot(func0f19d250()); if (uVar6 == g_Vars.currentplayer->unk0638[0].unk0638) { pass = false; diff --git a/src/game/game_102240.c b/src/game/game_102240.c index 72a1b4b07..b740d359a 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -3806,7 +3806,7 @@ glabel var7f1b2e44 /* f106080: acc20000 */ sw $v0,0x0($a2) /* f106084: 8cc40000 */ lw $a0,0x0($a2) /* f106088: 3c018007 */ lui $at,%hi(var80073544) -/* f10608c: 0fc6749a */ jal func0f19d268 +/* f10608c: 0fc6749a */ jal frGetWeaponBySlot /* f106090: a0243544 */ sb $a0,%lo(var80073544)($at) /* f106094: 0fc28857 */ jal weaponGetName /* f106098: 00402025 */ or $a0,$v0,$zero @@ -3822,7 +3822,7 @@ glabel var7f1b2e44 /* f1060c0: 10000028 */ beqz $zero,.L0f106164 /* f1060c4: acd80000 */ sw $t8,0x0($a2) /* f1060c8: 8cc40000 */ lw $a0,0x0($a2) -/* f1060cc: 0fc6749a */ jal func0f19d268 +/* f1060cc: 0fc6749a */ jal frGetWeaponBySlot /* f1060d0: afa60020 */ sw $a2,0x20($sp) /* f1060d4: 3c03800a */ lui $v1,%hi(g_InventoryWeapon) /* f1060d8: 246321c0 */ addiu $v1,$v1,%lo(g_InventoryWeapon) diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index cfa62cd83..7562f6912 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -645,43 +645,23 @@ glabel func0f19d25c /* f19d264: a424d176 */ sh $a0,%lo(g_FiringRangeData+0x456)($at) ); -GLOBAL_ASM( -glabel func0f19d268 -/* f19d268: 27bdffd8 */ addiu $sp,$sp,-40 -/* f19d26c: afb30020 */ sw $s3,0x20($sp) -/* f19d270: afb2001c */ sw $s2,0x1c($sp) -/* f19d274: afb10018 */ sw $s1,0x18($sp) -/* f19d278: afb00014 */ sw $s0,0x14($sp) -/* f19d27c: 00809825 */ or $s3,$a0,$zero -/* f19d280: afbf0024 */ sw $ra,0x24($sp) -/* f19d284: 2411ffff */ addiu $s1,$zero,-1 -/* f19d288: 00008025 */ or $s0,$zero,$zero -/* f19d28c: 24120033 */ addiu $s2,$zero,0x33 -.L0f19d290: -/* f19d290: 0fc67314 */ jal func0f19cc50 -/* f19d294: 02002025 */ or $a0,$s0,$zero -/* f19d298: 10400002 */ beqz $v0,.L0f19d2a4 -/* f19d29c: 00000000 */ sll $zero,$zero,0x0 -/* f19d2a0: 26310001 */ addiu $s1,$s1,0x1 -.L0f19d2a4: -/* f19d2a4: 56710004 */ bnel $s3,$s1,.L0f19d2b8 -/* f19d2a8: 26100001 */ addiu $s0,$s0,0x1 -/* f19d2ac: 10000005 */ beqz $zero,.L0f19d2c4 -/* f19d2b0: 02001025 */ or $v0,$s0,$zero -/* f19d2b4: 26100001 */ addiu $s0,$s0,0x1 -.L0f19d2b8: -/* f19d2b8: 1612fff5 */ bne $s0,$s2,.L0f19d290 -/* f19d2bc: 00000000 */ sll $zero,$zero,0x0 -/* f19d2c0: 24020001 */ addiu $v0,$zero,0x1 -.L0f19d2c4: -/* f19d2c4: 8fbf0024 */ lw $ra,0x24($sp) -/* f19d2c8: 8fb00014 */ lw $s0,0x14($sp) -/* f19d2cc: 8fb10018 */ lw $s1,0x18($sp) -/* f19d2d0: 8fb2001c */ lw $s2,0x1c($sp) -/* f19d2d4: 8fb30020 */ lw $s3,0x20($sp) -/* f19d2d8: 03e00008 */ jr $ra -/* f19d2dc: 27bd0028 */ addiu $sp,$sp,0x28 -); +u32 frGetWeaponBySlot(s32 slot) +{ + s32 index = -1; + s32 weapon; + + for (weapon = WEAPON_NONE; weapon <= WEAPON_HORIZONSCANNER; weapon++) { + if (func0f19cc50(weapon)) { + index++; + } + + if (slot == index) { + return weapon; + } + } + + return WEAPON_UNARMED; +} GLOBAL_ASM( glabel func0f19d2e0 @@ -1391,7 +1371,7 @@ glabel var7f1b93ec .L0f19dbb0: /* f19dbb0: 1000008c */ beqz $zero,.L0f19dde4 /* f19dbb4: 92220000 */ lbu $v0,0x0($s1) -/* f19dbb8: 0fc6749a */ jal func0f19d268 +/* f19dbb8: 0fc6749a */ jal frGetWeaponBySlot /* f19dbbc: 96040456 */ lhu $a0,0x456($s0) /* f19dbc0: 00402025 */ or $a0,$v0,$zero /* f19dbc4: 0fc2a685 */ jal weaponGetAmmoType @@ -2446,7 +2426,7 @@ glabel func0f19e9c0 char *frGetWeaponDescription(void) { - u32 weapon = func0f19d268(g_FiringRangeData.unk456); + u32 weapon = frGetWeaponBySlot(g_FiringRangeData.slot); switch (weapon) { case WEAPON_FALCON2: return langGet(L_MISC(377)); @@ -2790,7 +2770,7 @@ glabel func0f19f18c /* f19f1d0: a2190465 */ sb $t9,0x465($s0) .L0f19f1d4: /* f19f1d4: 2610cd20 */ addiu $s0,$s0,-13024 -/* f19f1d8: 0fc6749a */ jal func0f19d268 +/* f19f1d8: 0fc6749a */ jal frGetWeaponBySlot /* f19f1dc: 96040456 */ lhu $a0,0x456($s0) /* f19f1e0: 0fc67330 */ jal func0f19ccc0 /* f19f1e4: 00402025 */ or $a0,$v0,$zero @@ -3058,7 +3038,7 @@ glabel func0f19f524 /* f19f524: 27bdfd40 */ addiu $sp,$sp,-704 /* f19f528: afbf0014 */ sw $ra,0x14($sp) /* f19f52c: 3c04800b */ lui $a0,%hi(g_FiringRangeData+0x456) -/* f19f530: 0fc6749a */ jal func0f19d268 +/* f19f530: 0fc6749a */ jal frGetWeaponBySlot /* f19f534: 9484d176 */ lhu $a0,%lo(g_FiringRangeData+0x456)($a0) /* f19f538: afa202bc */ sw $v0,0x2bc($sp) /* f19f53c: 00402025 */ or $a0,$v0,$zero @@ -3418,13 +3398,13 @@ glabel var7f1b94e4 /* f19f9e8: 00184f00 */ sll $t1,$t8,0x1c /* f19f9ec: 0520000b */ bltz $t1,.L0f19fa1c /* f19f9f0: 00000000 */ sll $zero,$zero,0x0 -/* f19f9f4: 0fc6749a */ jal func0f19d268 +/* f19f9f4: 0fc6749a */ jal frGetWeaponBySlot /* f19f9f8: 96a40456 */ lhu $a0,0x456($s5) /* f19f9fc: 0fc44727 */ jal currentPlayerCanHaveWeapon /* f19fa00: 00402025 */ or $a0,$v0,$zero /* f19fa04: 10400005 */ beqz $v0,.L0f19fa1c /* f19fa08: 00000000 */ sll $zero,$zero,0x0 -/* f19fa0c: 0fc6749a */ jal func0f19d268 +/* f19fa0c: 0fc6749a */ jal frGetWeaponBySlot /* f19fa10: 96a40456 */ lhu $a0,0x456($s5) /* f19fa14: 0fc2865b */ jal currentPlayerEquipWeaponInCutscene /* f19fa18: 00402025 */ or $a0,$v0,$zero @@ -3647,7 +3627,7 @@ glabel var7f1b94e4 /* f19fd30: 92ad045a */ lbu $t5,0x45a($s5) /* f19fd34: 51a0004b */ beqzl $t5,.L0f19fe64 /* f19fd38: 8eab044c */ lw $t3,0x44c($s5) -/* f19fd3c: 0fc6749a */ jal func0f19d268 +/* f19fd3c: 0fc6749a */ jal frGetWeaponBySlot /* f19fd40: 96a40456 */ lhu $a0,0x456($s5) /* f19fd44: 00409025 */ or $s2,$v0,$zero /* f19fd48: 00402025 */ or $a0,$v0,$zero @@ -3808,7 +3788,7 @@ glabel var7f1b94e4 /* f19ff74: 052100d1 */ bgez $t1,.L0f1a02bc /* f19ff78: 00009025 */ or $s2,$zero,$zero /* f19ff7c: a3a00123 */ sb $zero,0x123($sp) -/* f19ff80: 0fc6749a */ jal func0f19d268 +/* f19ff80: 0fc6749a */ jal frGetWeaponBySlot /* f19ff84: 96a40456 */ lhu $a0,0x456($s5) /* f19ff88: 8e110014 */ lw $s1,0x14($s0) /* f19ff8c: 304300ff */ andi $v1,$v0,0xff @@ -3901,7 +3881,7 @@ glabel var7f1b94e4 /* f1a00cc: 004b082a */ slt $at,$v0,$t3 /* f1a00d0: 50200007 */ beqzl $at,.L0f1a00f0 /* f1a00d4: 96ac045c */ lhu $t4,0x45c($s5) -/* f1a00d8: 0fc6749a */ jal func0f19d268 +/* f1a00d8: 0fc6749a */ jal frGetWeaponBySlot /* f1a00dc: 96a40456 */ lhu $a0,0x456($s5) /* f1a00e0: 24010007 */ addiu $at,$zero,0x7 /* f1a00e4: 5441000e */ bnel $v0,$at,.L0f1a0120 @@ -4783,7 +4763,7 @@ glabel var7f1b94e8 /* f1a0dd0: 10000044 */ beqz $zero,.L0f1a0ee4 /* f1a0dd4: a2290030 */ sb $t1,0x30($s1) .L0f1a0dd8: -/* f1a0dd8: 0fc6749a */ jal func0f19d268 +/* f1a0dd8: 0fc6749a */ jal frGetWeaponBySlot /* f1a0ddc: 96040456 */ lhu $a0,0x456($s0) /* f1a0de0: 24010006 */ addiu $at,$zero,0x6 /* f1a0de4: 54410035 */ bnel $v0,$at,.L0f1a0ebc diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index 975770d4b..11f0486a9 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -56,7 +56,7 @@ glabel menuhandler001a3340 /* f1a3378: 00000000 */ sll $zero,$zero,0x0 /* f1a337c: 0fc67494 */ jal func0f19d250 /* f1a3380: 00000000 */ sll $zero,$zero,0x0 -/* f1a3384: 0fc6749a */ jal func0f19d268 +/* f1a3384: 0fc6749a */ jal frGetWeaponBySlot /* f1a3388: 00402025 */ or $a0,$v0,$zero /* f1a338c: 3c048009 */ lui $a0,%hi(var8008889c) /* f1a3390: 8c84889c */ lw $a0,%lo(var8008889c)($a0) @@ -197,7 +197,7 @@ glabel var7f1b9940 /* f1a34f4: 10000128 */ beqz $zero,.L0f1a3998 /* f1a34f8: 00001025 */ or $v0,$zero,$zero /* f1a34fc: 8cc40000 */ lw $a0,0x0($a2) -/* f1a3500: 0fc6749a */ jal func0f19d268 +/* f1a3500: 0fc6749a */ jal frGetWeaponBySlot /* f1a3504: afa600b0 */ sw $a2,0xb0($sp) /* f1a3508: afa200a4 */ sw $v0,0xa4($sp) /* f1a350c: 0fc67330 */ jal func0f19ccc0 @@ -240,7 +240,7 @@ glabel var7f1b9940 /* f1a359c: afb9009c */ sw $t9,0x9c($sp) /* f1a35a0: 8cc80008 */ lw $t0,0x8($a2) /* f1a35a4: 8cc40004 */ lw $a0,0x4($a2) -/* f1a35a8: 0fc6749a */ jal func0f19d268 +/* f1a35a8: 0fc6749a */ jal frGetWeaponBySlot /* f1a35ac: afa80098 */ sw $t0,0x98($sp) /* f1a35b0: afa20090 */ sw $v0,0x90($sp) /* f1a35b4: 0fc67330 */ jal func0f19ccc0 @@ -530,7 +530,7 @@ glabel var7f1b9944 .L0f1a39d8: /* f1a39d8: 0fc67494 */ jal func0f19d250 /* f1a39dc: 00000000 */ sll $zero,$zero,0x0 -/* f1a39e0: 0fc6749a */ jal func0f19d268 +/* f1a39e0: 0fc6749a */ jal frGetWeaponBySlot /* f1a39e4: 00402025 */ or $a0,$v0,$zero /* f1a39e8: 3c0e8007 */ lui $t6,%hi(g_MpPlayerNum) /* f1a39ec: 8dce1448 */ lw $t6,%lo(g_MpPlayerNum)($t6) @@ -706,7 +706,7 @@ glabel menuhandlerFrDifficulty /* f1a3c40: 00001025 */ or $v0,$zero,$zero /* f1a3c44: 0fc67494 */ jal func0f19d250 /* f1a3c48: 00000000 */ sll $zero,$zero,0x0 -/* f1a3c4c: 0fc6749a */ jal func0f19d268 +/* f1a3c4c: 0fc6749a */ jal frGetWeaponBySlot /* f1a3c50: 00402025 */ or $a0,$v0,$zero /* f1a3c54: 0fc67330 */ jal func0f19ccc0 /* f1a3c58: 00402025 */ or $a0,$v0,$zero @@ -731,7 +731,7 @@ glabel menuhandlerFrDifficulty .L0f1a3ca0: /* f1a3ca0: 0fc67494 */ jal func0f19d250 /* f1a3ca4: 00000000 */ sll $zero,$zero,0x0 -/* f1a3ca8: 0fc6749a */ jal func0f19d268 +/* f1a3ca8: 0fc6749a */ jal frGetWeaponBySlot /* f1a3cac: 00402025 */ or $a0,$v0,$zero /* f1a3cb0: 0fc67330 */ jal func0f19ccc0 /* f1a3cb4: 00402025 */ or $a0,$v0,$zero @@ -754,7 +754,7 @@ glabel menuhandlerFrDifficulty /* f1a3cf4: afbf0014 */ sw $ra,0x14($sp) /* f1a3cf8: 0fc67494 */ jal func0f19d250 /* f1a3cfc: afa40018 */ sw $a0,0x18($sp) -/* f1a3d00: 0fc6749a */ jal func0f19d268 +/* f1a3d00: 0fc6749a */ jal frGetWeaponBySlot /* f1a3d04: 00402025 */ or $a0,$v0,$zero /* f1a3d08: 00402025 */ or $a0,$v0,$zero /* f1a3d0c: 0fc2c401 */ jal weaponGetFunctionById @@ -777,7 +777,7 @@ glabel menuhandlerFrDifficulty /* f1a3d48: afbf0014 */ sw $ra,0x14($sp) /* f1a3d4c: 0fc67494 */ jal func0f19d250 /* f1a3d50: afa40018 */ sw $a0,0x18($sp) -/* f1a3d54: 0fc6749a */ jal func0f19d268 +/* f1a3d54: 0fc6749a */ jal frGetWeaponBySlot /* f1a3d58: 00402025 */ or $a0,$v0,$zero /* f1a3d5c: 00402025 */ or $a0,$v0,$zero /* f1a3d60: 0fc2c401 */ jal weaponGetFunctionById @@ -858,7 +858,7 @@ char *frMenuTextGoalScoreValueUnconditional(struct menu_item *item) char *frMenuTextWeaponName(struct menu_item *item) { - return weaponGetName(func0f19d268(func0f19d250())); + return weaponGetName(frGetWeaponBySlot(func0f19d250())); } char *frMenuTextTargetsDestroyedValue(struct menu_item *item) @@ -999,7 +999,7 @@ char *frMenuTextAmmoLimitValue(struct menu_item *item) s32 weaponnum; if (frdata->ammolimit != 255) { - weaponnum = func0f19d268(frdata->unk456); + weaponnum = frGetWeaponBySlot(frdata->slot); if (weaponnum == WEAPON_SUPERDRAGON && frdata->sdgrenadelimit != 255) { sprintf(suffix, "/%d", frdata->sdgrenadelimit); diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index 822656e8a..dd4c378ec 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -13,13 +13,13 @@ u32 func0f19cad4(void); void func0f19cb38(s32 weaponnum); bool stageIsComplete(s32 solostageindex); u32 func0f19cbcc(void); -u32 func0f19cc50(void); +bool func0f19cc50(u32 arg0); u32 func0f19ccc0(u32 weaponnum); u32 func0f19cdf0(u32 weaponnum); u32 func0f19cf20(s32 stage_index); // firing range related u32 func0f19d250(void); u32 func0f19d25c(void); -u32 func0f19d268(s32 arg0); +u32 frGetWeaponBySlot(s32 slot); u32 func0f19d2e0(void); u32 func0f19d338(void); u32 func0f19d414(void); diff --git a/src/include/types.h b/src/include/types.h index d0f2ca246..7d8ad9645 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4830,7 +4830,7 @@ struct frdata { /*0x450*/ u32 score; /*0x454*/ u8 unk454; /*0x455*/ u8 targetsdestroyed; - /*0x456*/ u16 unk456; + /*0x456*/ u16 slot; /*0x458*/ u16 numshots; /*0x45a*/ u8 unk45a; /*0x45b*/ u8 failreason;