From 408b7d719d03f4a142272da199cfa609412c98bb Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 29 Aug 2020 23:54:57 +1000 Subject: [PATCH] Decompile mpSetWeaponSlot --- src/game/data/data_02a0e0.c | 2 +- src/game/game_0fd660.c | 4 +- src/game/game_197600.c | 12 ++-- src/game/game_19aa80.c | 8 +-- src/game/mplayer.c | 92 +++++++++++------------------ src/include/game/data/data_02a0e0.h | 2 +- src/include/game/mplayer.h | 2 +- src/include/types.h | 5 +- 8 files changed, 52 insertions(+), 75 deletions(-) diff --git a/src/game/data/data_02a0e0.c b/src/game/data/data_02a0e0.c index 4747cfc51..4477e457d 100644 --- a/src/game/data/data_02a0e0.c +++ b/src/game/data/data_02a0e0.c @@ -2073,7 +2073,7 @@ s32 var80087260 = 0x00000000; u32 var80087264 = 0x00000000; // 2d288 -struct mpweapon mpweaponstable[] = { +struct mpweapon g_MpWeapons[] = { /*0x00*/ { WEAPON_NONE, 0x00, 0x00, 0x00, 0x0080, MODEL_CHRTT33, 0x01, 0x00 }, /*0x01*/ { WEAPON_FALCON2, 0x01, 0x50, 0x00, 0x0080, MODEL_CHRFALCON2, 0x01, 0x00 }, /*0x02*/ { WEAPON_FALCON2_SILENCER, 0x01, 0x50, 0x00, 0x0085, MODEL_CHRFALCON2SIL, 0x01, 0x00 }, diff --git a/src/game/game_0fd660.c b/src/game/game_0fd660.c index 3af3986aa..014f6ed8e 100644 --- a/src/game/game_0fd660.c +++ b/src/game/game_0fd660.c @@ -812,12 +812,12 @@ glabel func0f0fe848 /* f0fe86c: 25e420d0 */ addiu $a0,$t7,%lo(g_ActiveMenuThings) /* f0fe870: 3c12800b */ lui $s2,%hi(g_MpSetup+0x6) /* f0fe874: 3c13800a */ lui $s3,%hi(var800a21b0) -/* f0fe878: 3c0c8008 */ lui $t4,%hi(mpweaponstable) +/* f0fe878: 3c0c8008 */ lui $t4,%hi(g_MpWeapons) /* f0fe87c: 3c0a7f1b */ lui $t2,%hi(var7f1b2b20) /* f0fe880: a1c00250 */ sb $zero,0x250($t6) /* f0fe884: 8d060318 */ lw $a2,0x318($t0) /* f0fe888: 254a2b20 */ addiu $t2,$t2,%lo(var7f1b2b20) -/* f0fe88c: 258c7268 */ addiu $t4,$t4,%lo(mpweaponstable) +/* f0fe88c: 258c7268 */ addiu $t4,$t4,%lo(g_MpWeapons) /* f0fe890: 267321b0 */ addiu $s3,$s3,%lo(var800a21b0) /* f0fe894: 2652cb8e */ addiu $s2,$s2,%lo(g_MpSetup+0x6) /* f0fe898: 00801825 */ or $v1,$a0,$zero diff --git a/src/game/game_197600.c b/src/game/game_197600.c index d714711ef..3c445b702 100644 --- a/src/game/game_197600.c +++ b/src/game/game_197600.c @@ -717,14 +717,14 @@ glabel func0f198068 /* f198084: afb20030 */ sw $s2,0x30($sp) /* f198088: afb1002c */ sw $s1,0x2c($sp) /* f19808c: 3c16800b */ lui $s6,%hi(g_MpSetup) -/* f198090: 3c1e8008 */ lui $s8,%hi(mpweaponstable) +/* f198090: 3c1e8008 */ lui $s8,%hi(g_MpWeapons) /* f198094: 00c08825 */ or $s1,$a2,$zero /* f198098: 0080b825 */ or $s7,$a0,$zero /* f19809c: afbf004c */ sw $ra,0x4c($sp) /* f1980a0: afb00028 */ sw $s0,0x28($sp) /* f1980a4: afa5008c */ sw $a1,0x8c($sp) /* f1980a8: afa70094 */ sw $a3,0x94($sp) -/* f1980ac: 27de7268 */ addiu $s8,$s8,%lo(mpweaponstable) +/* f1980ac: 27de7268 */ addiu $s8,$s8,%lo(g_MpWeapons) /* f1980b0: 26d6cb88 */ addiu $s6,$s6,%lo(g_MpSetup) /* f1980b4: 00009025 */ or $s2,$zero,$zero /* f1980b8: 00c09825 */ or $s3,$a2,$zero @@ -854,8 +854,8 @@ GLOBAL_ASM( glabel func0f198278 /* f198278: 3c03800b */ lui $v1,%hi(g_MpSetup) /* f19827c: 3c07800b */ lui $a3,%hi(g_MpSetup+0x6) -/* f198280: 3c048008 */ lui $a0,%hi(mpweaponstable) -/* f198284: 24847268 */ addiu $a0,$a0,%lo(mpweaponstable) +/* f198280: 3c048008 */ lui $a0,%hi(g_MpWeapons) +/* f198284: 24847268 */ addiu $a0,$a0,%lo(g_MpWeapons) /* f198288: 24e7cb8e */ addiu $a3,$a3,%lo(g_MpSetup+0x6) /* f19828c: 2463cb88 */ addiu $v1,$v1,%lo(g_MpSetup) /* f198290: 2406005b */ addiu $a2,$zero,0x5b @@ -882,9 +882,9 @@ glabel func0f198278 GLOBAL_ASM( glabel func0f1982d4 /* f1982d4: 3c05800b */ lui $a1,%hi(g_MpSetup) -/* f1982d8: 3c068008 */ lui $a2,%hi(mpweaponstable) +/* f1982d8: 3c068008 */ lui $a2,%hi(g_MpWeapons) /* f1982dc: 2403ffff */ addiu $v1,$zero,-1 -/* f1982e0: 24c67268 */ addiu $a2,$a2,%lo(mpweaponstable) +/* f1982e0: 24c67268 */ addiu $a2,$a2,%lo(g_MpWeapons) /* f1982e4: 24a5cb88 */ addiu $a1,$a1,%lo(g_MpSetup) /* f1982e8: 00001025 */ or $v0,$zero,$zero /* f1982ec: 24080006 */ addiu $t0,$zero,0x6 diff --git a/src/game/game_19aa80.c b/src/game/game_19aa80.c index 0ef690bfb..9d6677f43 100644 --- a/src/game/game_19aa80.c +++ b/src/game/game_19aa80.c @@ -705,8 +705,8 @@ glabel func0f19afdc /* f19b430: 1840001c */ blez $v0,.L0f19b4a4 /* f19b434: 0013c880 */ sll $t9,$s3,0x2 /* f19b438: 0333c821 */ addu $t9,$t9,$s3 -/* f19b43c: 3c088008 */ lui $t0,%hi(mpweaponstable) -/* f19b440: 25087268 */ addiu $t0,$t0,%lo(mpweaponstable) +/* f19b43c: 3c088008 */ lui $t0,%hi(g_MpWeapons) +/* f19b440: 25087268 */ addiu $t0,$t0,%lo(g_MpWeapons) /* f19b444: 0019c840 */ sll $t9,$t9,0x1 /* f19b448: 3c11800b */ lui $s1,%hi(g_MpChallengesCompleted) /* f19b44c: 2631ccc8 */ addiu $s1,$s1,%lo(g_MpChallengesCompleted) @@ -1273,13 +1273,13 @@ glabel func0f19bb98 /* f19bbb0: afb2001c */ sw $s2,0x1c($sp) /* f19bbb4: afb10018 */ sw $s1,0x18($sp) /* f19bbb8: afb00014 */ sw $s0,0x14($sp) -/* f19bbbc: 3c138008 */ lui $s3,%hi(mpweaponstable) +/* f19bbbc: 3c138008 */ lui $s3,%hi(g_MpWeapons) /* f19bbc0: 00a0a825 */ or $s5,$a1,$zero /* f19bbc4: 00c0b025 */ or $s6,$a2,$zero /* f19bbc8: 0080b825 */ or $s7,$a0,$zero /* f19bbcc: afbf0034 */ sw $ra,0x34($sp) /* f19bbd0: 00009025 */ or $s2,$zero,$zero -/* f19bbd4: 26737268 */ addiu $s3,$s3,%lo(mpweaponstable) +/* f19bbd4: 26737268 */ addiu $s3,$s3,%lo(g_MpWeapons) /* f19bbd8: 00808025 */ or $s0,$a0,$zero /* f19bbdc: 00008825 */ or $s1,$zero,$zero /* f19bbe0: 2414000a */ addiu $s4,$zero,0xa diff --git a/src/game/mplayer.c b/src/game/mplayer.c index df9028eca..636994405 100644 --- a/src/game/mplayer.c +++ b/src/game/mplayer.c @@ -1468,12 +1468,12 @@ glabel mpGetNumWeaponOptions /* f188bd8: afb20020 */ sw $s2,0x20($sp) /* f188bdc: afb00018 */ sw $s0,0x18($sp) /* f188be0: afb1001c */ sw $s1,0x1c($sp) -/* f188be4: 3c108008 */ lui $s0,%hi(mpweaponstable) -/* f188be8: 3c128008 */ lui $s2,%hi(mpweaponstable+0x186) +/* f188be4: 3c108008 */ lui $s0,%hi(g_MpWeapons) +/* f188be8: 3c128008 */ lui $s2,%hi(g_MpWeapons+0x186) /* f188bec: afbf0024 */ sw $ra,0x24($sp) /* f188bf0: 00008825 */ or $s1,$zero,$zero -/* f188bf4: 265273ee */ addiu $s2,$s2,%lo(mpweaponstable+0x186) -/* f188bf8: 26107268 */ addiu $s0,$s0,%lo(mpweaponstable) +/* f188bf4: 265273ee */ addiu $s2,$s2,%lo(g_MpWeapons+0x186) +/* f188bf8: 26107268 */ addiu $s0,$s0,%lo(g_MpWeapons) /* f188bfc: 96040004 */ lhu $a0,0x4($s0) .L0f188c00: /* f188c00: 308e007f */ andi $t6,$a0,0x7f @@ -1500,12 +1500,12 @@ glabel mpGetWeaponLabel /* f188c40: afb20020 */ sw $s2,0x20($sp) /* f188c44: afb00018 */ sw $s0,0x18($sp) /* f188c48: afb1001c */ sw $s1,0x1c($sp) -/* f188c4c: 3c108008 */ lui $s0,%hi(mpweaponstable) -/* f188c50: 3c128008 */ lui $s2,%hi(mpweaponstable+0x186) +/* f188c4c: 3c108008 */ lui $s0,%hi(g_MpWeapons) +/* f188c50: 3c128008 */ lui $s2,%hi(g_MpWeapons+0x186) /* f188c54: 00808825 */ or $s1,$a0,$zero /* f188c58: afbf0024 */ sw $ra,0x24($sp) -/* f188c5c: 265273ee */ addiu $s2,$s2,%lo(mpweaponstable+0x186) -/* f188c60: 26107268 */ addiu $s0,$s0,%lo(mpweaponstable) +/* f188c5c: 265273ee */ addiu $s2,$s2,%lo(g_MpWeapons+0x186) +/* f188c60: 26107268 */ addiu $s0,$s0,%lo(g_MpWeapons) /* f188c64: 96040004 */ lhu $a0,0x4($s0) .L0f188c68: /* f188c68: 308e007f */ andi $t6,$a0,0x7f @@ -1560,43 +1560,21 @@ glabel mpGetWeaponLabel /* f188d14: 27bd0028 */ addiu $sp,$sp,0x28 ); -GLOBAL_ASM( -glabel mpSetWeaponSlot -/* f188d18: 27bdffd8 */ addiu $sp,$sp,-40 -/* f188d1c: afb20020 */ sw $s2,0x20($sp) -/* f188d20: afb1001c */ sw $s1,0x1c($sp) -/* f188d24: 00a08825 */ or $s1,$a1,$zero -/* f188d28: afbf0024 */ sw $ra,0x24($sp) -/* f188d2c: afb00018 */ sw $s0,0x18($sp) -/* f188d30: afa40028 */ sw $a0,0x28($sp) -/* f188d34: 04a0000d */ bltz $a1,.L0f188d6c -/* f188d38: 00009025 */ or $s2,$zero,$zero -/* f188d3c: 3c108008 */ lui $s0,%hi(mpweaponstable) -/* f188d40: 26107268 */ addiu $s0,$s0,%lo(mpweaponstable) -.L0f188d44: -/* f188d44: 96040004 */ lhu $a0,0x4($s0) -/* f188d48: 308e007f */ andi $t6,$a0,0x7f -/* f188d4c: 0fc67244 */ jal mpIsChallengeComplete -/* f188d50: 01c02025 */ or $a0,$t6,$zero -/* f188d54: 14400002 */ bnez $v0,.L0f188d60 -/* f188d58: 26520001 */ addiu $s2,$s2,0x1 -/* f188d5c: 26310001 */ addiu $s1,$s1,0x1 -.L0f188d60: -/* f188d60: 0232082a */ slt $at,$s1,$s2 -/* f188d64: 1020fff7 */ beqz $at,.L0f188d44 -/* f188d68: 2610000a */ addiu $s0,$s0,0xa -.L0f188d6c: -/* f188d6c: 8faf0028 */ lw $t7,0x28($sp) -/* f188d70: 3c01800b */ lui $at,%hi(g_MpSetup+0x18) -/* f188d74: 8fbf0024 */ lw $ra,0x24($sp) -/* f188d78: 002f0821 */ addu $at,$at,$t7 -/* f188d7c: a031cba0 */ sb $s1,%lo(g_MpSetup+0x18)($at) -/* f188d80: 8fb1001c */ lw $s1,0x1c($sp) -/* f188d84: 8fb00018 */ lw $s0,0x18($sp) -/* f188d88: 8fb20020 */ lw $s2,0x20($sp) -/* f188d8c: 03e00008 */ jr $ra -/* f188d90: 27bd0028 */ addiu $sp,$sp,0x28 -); +void mpSetWeaponSlot(s32 slot, s32 mpweaponnum) +{ + s32 optionindex = mpweaponnum; + s32 i; + + for (i = 0; i <= mpweaponnum; i++) { + if (mpIsChallengeComplete(g_MpWeapons[i].unlock & 0x7f) == 0) { + mpweaponnum++; + } + + optionindex = mpweaponnum; + } + + g_MpSetup.weapons[slot] = optionindex; +} GLOBAL_ASM( glabel mpGetWeaponSlot @@ -1613,8 +1591,8 @@ glabel mpGetWeaponSlot /* f188dbc: 00009025 */ or $s2,$zero,$zero /* f188dc0: 19e00010 */ blez $t7,.L0f188e04 /* f188dc4: 00008825 */ or $s1,$zero,$zero -/* f188dc8: 3c108008 */ lui $s0,%hi(mpweaponstable) -/* f188dcc: 26107268 */ addiu $s0,$s0,%lo(mpweaponstable) +/* f188dc8: 3c108008 */ lui $s0,%hi(g_MpWeapons) +/* f188dcc: 26107268 */ addiu $s0,$s0,%lo(g_MpWeapons) /* f188dd0: 96040004 */ lhu $a0,0x4($s0) .L0f188dd4: /* f188dd4: 3098007f */ andi $t8,$a0,0x7f @@ -1648,10 +1626,10 @@ glabel func0f188e24 /* f188e2c: 00c01025 */ or $v0,$a2,$zero /* f188e30: 18c0001e */ blez $a2,.L0f188eac /* f188e34: 00002825 */ or $a1,$zero,$zero -/* f188e38: 3c088008 */ lui $t0,%hi(mpweaponstable) +/* f188e38: 3c088008 */ lui $t0,%hi(g_MpWeapons) /* f188e3c: 3c04800b */ lui $a0,%hi(g_MpSetup) /* f188e40: 2484cb88 */ addiu $a0,$a0,%lo(g_MpSetup) -/* f188e44: 25087268 */ addiu $t0,$t0,%lo(mpweaponstable) +/* f188e44: 25087268 */ addiu $t0,$t0,%lo(g_MpWeapons) /* f188e48: 2409000a */ addiu $t1,$zero,0xa /* f188e4c: 2407005c */ addiu $a3,$zero,0x5c /* f188e50: 00857021 */ addu $t6,$a0,$a1 @@ -1684,9 +1662,9 @@ glabel func0f188e24 .L0f188eac: /* f188eac: 93a30003 */ lbu $v1,0x3($sp) /* f188eb0: 2409000a */ addiu $t1,$zero,0xa -/* f188eb4: 3c088008 */ lui $t0,%hi(mpweaponstable) +/* f188eb4: 3c088008 */ lui $t0,%hi(g_MpWeapons) /* f188eb8: 00690019 */ multu $v1,$t1 -/* f188ebc: 25087268 */ addiu $t0,$t0,%lo(mpweaponstable) +/* f188ebc: 25087268 */ addiu $t0,$t0,%lo(g_MpWeapons) /* f188ec0: 27bd0010 */ addiu $sp,$sp,0x10 /* f188ec4: 00005012 */ mflo $t2 /* f188ec8: 010a1021 */ addu $v0,$t0,$t2 @@ -1865,7 +1843,7 @@ glabel func0f18913c /* f189150: afb60030 */ sw $s6,0x30($sp) /* f189154: afb40028 */ sw $s4,0x28($sp) /* f189158: 25ef73f0 */ addiu $t7,$t7,%lo(g_MpWeaponSets) -/* f18915c: 3c158008 */ lui $s5,%hi(mpweaponstable) +/* f18915c: 3c158008 */ lui $s5,%hi(g_MpWeapons) /* f189160: 3c17800b */ lui $s7,%hi(g_MpSetup+0x6) /* f189164: 00007100 */ sll $t6,$zero,0x4 /* f189168: afbf003c */ sw $ra,0x3c($sp) @@ -1876,7 +1854,7 @@ glabel func0f18913c /* f18917c: afa00040 */ sw $zero,0x40($sp) /* f189180: 01cff021 */ addu $s8,$t6,$t7 /* f189184: 26f7cb8e */ addiu $s7,$s7,%lo(g_MpSetup+0x6) -/* f189188: 26b57268 */ addiu $s5,$s5,%lo(mpweaponstable) +/* f189188: 26b57268 */ addiu $s5,$s5,%lo(g_MpWeapons) /* f18918c: 2414005b */ addiu $s4,$zero,0x5b /* f189190: 2416000a */ addiu $s6,$zero,0xa /* f189194: afa00044 */ sw $zero,0x44($sp) @@ -2050,8 +2028,8 @@ glabel func0f1892dc /* f1893f8: 1040006b */ beqz $v0,.L0f1895a8 /* f1893fc: 00405825 */ or $t3,$v0,$zero /* f189400: 3c0a800b */ lui $t2,%hi(g_MpSetup) -/* f189404: 3c088008 */ lui $t0,%hi(mpweaponstable) -/* f189408: 25087268 */ addiu $t0,$t0,%lo(mpweaponstable) +/* f189404: 3c088008 */ lui $t0,%hi(g_MpWeapons) +/* f189408: 25087268 */ addiu $t0,$t0,%lo(g_MpWeapons) /* f18940c: 254acb88 */ addiu $t2,$t2,%lo(g_MpSetup) /* f189410: 2410005b */ addiu $s0,$zero,0x5b /* f189414: 2409000a */ addiu $t1,$zero,0xa @@ -2069,8 +2047,8 @@ glabel func0f1892dc /* f189440: afaa0024 */ sw $t2,0x24($sp) /* f189444: 0fc67244 */ jal mpIsChallengeComplete /* f189448: afab0028 */ sw $t3,0x28($sp) -/* f18944c: 3c088008 */ lui $t0,%hi(mpweaponstable) -/* f189450: 25087268 */ addiu $t0,$t0,%lo(mpweaponstable) +/* f18944c: 3c088008 */ lui $t0,%hi(g_MpWeapons) +/* f189450: 25087268 */ addiu $t0,$t0,%lo(g_MpWeapons) /* f189454: 8fa30044 */ lw $v1,0x44($sp) /* f189458: 8fa50040 */ lw $a1,0x40($sp) /* f18945c: 8fa60038 */ lw $a2,0x38($sp) diff --git a/src/include/game/data/data_02a0e0.h b/src/include/game/data/data_02a0e0.h index 20284c0c1..2321d114e 100644 --- a/src/include/game/data/data_02a0e0.h +++ b/src/include/game/data/data_02a0e0.h @@ -81,7 +81,7 @@ extern struct mpscenariooverview g_MpScenarioOverviews[]; extern u32 var8008716c; extern u32 var800871fc; extern u32 var80087264; -extern struct mpweapon mpweaponstable[]; +extern struct mpweapon g_MpWeapons[]; extern struct mpweaponset g_MpWeaponSets[12]; extern u32 var800874c8; extern u32 var800874cc; diff --git a/src/include/game/mplayer.h b/src/include/game/mplayer.h index 8d5e7cca4..d79bbac8b 100644 --- a/src/include/game/mplayer.h +++ b/src/include/game/mplayer.h @@ -22,7 +22,7 @@ s32 func0f188a84(struct mpteaminfo *info); u32 func0f188bcc(void); u32 mpGetNumWeaponOptions(void); char *mpGetWeaponLabel(s32 weaponnum); -void mpSetWeaponSlot(s32 slot, s32 weaponnum); +void mpSetWeaponSlot(s32 slot, s32 mpweaponnum); s32 mpGetWeaponSlot(s32 slot); u32 func0f188e24(void); s32 mpCountWeaponSetThing(s32 weaponsetindex); diff --git a/src/include/types.h b/src/include/types.h index 97c5cb070..ec7c30694 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4299,8 +4299,7 @@ struct mpsetup { * Bits 0xf000 are probably not used */ /*0x800acb9e*/ u16 chrslots; - /*0x800acba0*/ u32 unk18; - /*0x800acba4*/ u16 unk1c; + /*0x800acba0*/ u8 weapons[6]; /*0x800acba6*/ u8 paused; /*0x800acba8*/ bool saved; /*0x800acbac*/ u16 unk24; @@ -5981,7 +5980,7 @@ struct mpweapon { u8 unk01; u8 unk02; u8 unk03; - u16 unk04; + u16 unlock; u16 model; u8 unk08; u8 unk09;