From 0e66af34f5d2bdfddad836202b8de942e656e552 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 19 Jan 2020 20:22:43 +1000 Subject: [PATCH] Decompile mpGetBodyUnk06 --- src/game/game_176d70.c | 12 +++++------ src/game/game_187770.c | 36 +++++++++++++------------------- src/game/game_1999b0.c | 4 ++-- src/include/constants.h | 1 + src/include/game/game_187770.h | 4 ++-- src/include/setup/setup_020df0.h | 2 +- src/include/types.h | 2 +- src/setup/setup_020df0.c | 2 +- 8 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/game/game_176d70.c b/src/game/game_176d70.c index b4636e380..8b94481b7 100644 --- a/src/game/game_176d70.c +++ b/src/game/game_176d70.c @@ -3624,7 +3624,7 @@ glabel func0f179da4 /* f179dcc: 8c2e8078 */ lw $t6,%lo(var7f1b8078)($at) /* f179dd0: 01c00008 */ jr $t6 /* f179dd4: 00000000 */ sll $zero,$zero,0x0 -/* f179dd8: 0fc62ee2 */ jal func0f18bb88 +/* f179dd8: 0fc62ee2 */ jal mpGetNumBodies /* f179ddc: afa60048 */ sw $a2,0x48($sp) /* f179de0: 8fa60048 */ lw $a2,0x48($sp) /* f179de4: 1000008b */ beqz $zero,.L0f17a014 @@ -3680,7 +3680,7 @@ glabel func0f179da4 /* f179ea0: ac400df4 */ sw $zero,0xdf4($v0) /* f179ea4: 1000005b */ beqz $zero,.L0f17a014 /* f179ea8: e4500d94 */ swc1 $f16,0xd94($v0) -/* f179eac: 0fc62f1c */ jal func0f18bc70 +/* f179eac: 0fc62f1c */ jal mpGetBodyUnk06 /* f179eb0: 90c40003 */ lbu $a0,0x3($a2) /* f179eb4: 0fc67244 */ jal mpIsChallengeComplete /* f179eb8: 00402025 */ or $a0,$v0,$zero @@ -6283,8 +6283,8 @@ glabel menuhandler0017c6a4 /* f17c714: 01000008 */ jr $t0 /* f17c718: 00000000 */ sll $zero,$zero,0x0 /* f17c71c: 3c108008 */ lui $s0,%hi(g_MpGeneralSimulants) -/* f17c720: 3c118008 */ lui $s1,%hi(mpbodytable) -/* f17c724: 263177bc */ addiu $s1,$s1,%lo(mpbodytable) +/* f17c720: 3c118008 */ lui $s1,%hi(g_MpBodies) +/* f17c724: 263177bc */ addiu $s1,$s1,%lo(g_MpBodies) /* f17c728: 2610772c */ addiu $s0,$s0,%lo(g_MpGeneralSimulants) .L0f17c72c: /* f17c72c: 0fc67244 */ jal mpIsChallengeComplete @@ -6298,8 +6298,8 @@ glabel menuhandler0017c6a4 /* f17c748: 100000b4 */ beqz $zero,.L0f17ca1c /* f17c74c: ae920000 */ sw $s2,0x0($s4) /* f17c750: 3c108008 */ lui $s0,%hi(g_MpGeneralSimulants) -/* f17c754: 3c118008 */ lui $s1,%hi(mpbodytable) -/* f17c758: 263177bc */ addiu $s1,$s1,%lo(mpbodytable) +/* f17c754: 3c118008 */ lui $s1,%hi(g_MpBodies) +/* f17c758: 263177bc */ addiu $s1,$s1,%lo(g_MpBodies) /* f17c75c: 2610772c */ addiu $s0,$s0,%lo(g_MpGeneralSimulants) .L0f17c760: /* f17c760: 0fc67244 */ jal mpIsChallengeComplete diff --git a/src/game/game_187770.c b/src/game/game_187770.c index b6f369737..d5d3965ef 100644 --- a/src/game/game_187770.c +++ b/src/game/game_187770.c @@ -5136,9 +5136,9 @@ glabel func0f18bb64 /* f18bb84: 24020005 */ addiu $v0,$zero,0x5 ); -u32 func0f18bb88(void) +u32 mpGetNumBodies(void) { - return 61; + return NUM_MPBODIES; } GLOBAL_ASM( @@ -5174,8 +5174,8 @@ glabel func0f18bbd8 /* f18bbe8: 03e00008 */ jr $ra /* f18bbec: 2402003e */ addiu $v0,$zero,0x3e .L0f18bbf0: -/* f18bbf0: 3c048008 */ lui $a0,%hi(mpbodytable) -/* f18bbf4: 248477bc */ addiu $a0,$a0,%lo(mpbodytable) +/* f18bbf0: 3c048008 */ lui $a0,%hi(g_MpBodies) +/* f18bbf4: 248477bc */ addiu $a0,$a0,%lo(g_MpBodies) /* f18bbf8: 00001825 */ or $v1,$zero,$zero /* f18bbfc: 2405003d */ addiu $a1,$zero,0x3d .L0f18bc00: @@ -5215,21 +5215,15 @@ glabel func0f18bc30 /* f18bc6c: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f18bc70 -/* f18bc70: 308e00ff */ andi $t6,$a0,0xff -/* f18bc74: afa40000 */ sw $a0,0x0($sp) -/* f18bc78: 29c1003e */ slti $at,$t6,0x3e -/* f18bc7c: 14200002 */ bnez $at,.L0f18bc88 -/* f18bc80: 01c02025 */ or $a0,$t6,$zero -/* f18bc84: 00002025 */ or $a0,$zero,$zero -.L0f18bc88: -/* f18bc88: 000478c0 */ sll $t7,$a0,0x3 -/* f18bc8c: 3c028008 */ lui $v0,0x8008 -/* f18bc90: 004f1021 */ addu $v0,$v0,$t7 -/* f18bc94: 03e00008 */ jr $ra -/* f18bc98: 904277c2 */ lbu $v0,0x77c2($v0) -); +u8 mpGetBodyUnk06(u8 bodynum) +{ + // Possible @bug: This should probably be >= + if (bodynum > NUM_MPBODIES) { + bodynum = 0; + } + + return g_MpBodies[bodynum].unk06; +} GLOBAL_ASM( glabel func0f18bc9c @@ -5240,8 +5234,8 @@ glabel func0f18bc9c /* f18bcac: 00003025 */ or $a2,$zero,$zero /* f18bcb0: 00002025 */ or $a0,$zero,$zero .L0f18bcb4: -/* f18bcb4: 3c0f8008 */ lui $t7,%hi(mpbodytable) -/* f18bcb8: 25ef77bc */ addiu $t7,$t7,%lo(mpbodytable) +/* f18bcb4: 3c0f8008 */ lui $t7,%hi(g_MpBodies) +/* f18bcb8: 25ef77bc */ addiu $t7,$t7,%lo(g_MpBodies) /* f18bcbc: 000470c0 */ sll $t6,$a0,0x3 /* f18bcc0: 01cf1021 */ addu $v0,$t6,$t7 /* f18bcc4: 84450004 */ lh $a1,0x4($v0) diff --git a/src/game/game_1999b0.c b/src/game/game_1999b0.c index 2eeba6f12..5d4b7577b 100644 --- a/src/game/game_1999b0.c +++ b/src/game/game_1999b0.c @@ -2781,11 +2781,11 @@ glabel func0f19bfa0 /* f19bfec: 3c11800b */ lui $s1,%hi(g_MpSimulants) /* f19bff0: 3c1e800b */ lui $s8,%hi(var800ac798) /* f19bff4: 3c178008 */ lui $s7,%hi(mpheadstable) -/* f19bff8: 3c168008 */ lui $s6,%hi(mpbodytable) +/* f19bff8: 3c168008 */ lui $s6,%hi(g_MpBodies) /* f19bffc: 3c148008 */ lui $s4,%hi(g_MpGeneralSimulants) /* f19c000: 00408025 */ or $s0,$v0,$zero /* f19c004: 2694772c */ addiu $s4,$s4,%lo(g_MpGeneralSimulants) -/* f19c008: 26d677bc */ addiu $s6,$s6,%lo(mpbodytable) +/* f19c008: 26d677bc */ addiu $s6,$s6,%lo(g_MpBodies) /* f19c00c: 26f7752c */ addiu $s7,$s7,%lo(mpheadstable) /* f19c010: 27dec798 */ addiu $s8,$s8,%lo(var800ac798) /* f19c014: 2631c538 */ addiu $s1,$s1,%lo(g_MpSimulants) diff --git a/src/include/constants.h b/src/include/constants.h index 2f237d1f3..c4d50f442 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -557,6 +557,7 @@ #define NUM_CHEATS 42 #define NUM_FIRESLOTS 20 #define NUM_MPBOTCOMMANDS 14 +#define NUM_MPBODIES 61 #define NUM_MPTRACKS 42 #define NUM_SOLONORMALSTAGES 17 #define NUM_SOLOSTAGES 21 diff --git a/src/include/game/game_187770.h b/src/include/game/game_187770.h index d9bbad2f1..4b0abd20d 100644 --- a/src/include/game/game_187770.h +++ b/src/include/game/game_187770.h @@ -50,11 +50,11 @@ s32 mpGetNumHeads(void); u32 func0f18bb2c(void); u32 func0f18bb48(void); u32 func0f18bb64(void); -u32 func0f18bb88(void); +u32 mpGetNumBodies(void); u32 func0f18bb90(void); u32 func0f18bbd8(void); u32 func0f18bc30(void); -u32 func0f18bc70(void); +u8 mpGetBodyUnk06(u8 bodynum); s32 func0f18bc9c(s32 arg0); u32 func0f18bee8(void); s32 mpSetLock(s32 arg0, s32 arg1); diff --git a/src/include/setup/setup_020df0.h b/src/include/setup/setup_020df0.h index 61aa1cfd9..84fe0ea0f 100644 --- a/src/include/setup/setup_020df0.h +++ b/src/include/setup/setup_020df0.h @@ -302,7 +302,7 @@ extern struct mpheadentry mpheadstable[]; extern u32 table_0x2d678[]; extern struct mpsimulant g_MpGeneralSimulants[]; extern struct mpsimulant mpspecialsimulants[]; -extern struct bodynum mpbodytable[]; +extern struct mpbody g_MpBodies[NUM_MPBODIES]; extern struct mptrack g_MpTracks[NUM_MPTRACKS]; extern u32 mppresets[]; extern u32 g_TeamColours[MAX_TEAMS]; diff --git a/src/include/types.h b/src/include/types.h index 376870cdf..7635ff812 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2873,7 +2873,7 @@ struct mpsimulant { u8 unlockvalue; }; -struct bodynum { +struct mpbody { u16 slot; u16 name; u16 unk04; diff --git a/src/setup/setup_020df0.c b/src/setup/setup_020df0.c index 9105eb06d..db4c49057 100644 --- a/src/setup/setup_020df0.c +++ b/src/setup/setup_020df0.c @@ -12051,7 +12051,7 @@ struct mpsimulant mpspecialsimulants[] = { }; // 2d7dc -struct bodynum mpbodytable[] = { +struct mpbody g_MpBodies[NUM_MPBODIES] = { // slot, name, unk04, unk06 /*0x00*/ { 0x0056, 0x5610, 0x0004, 0x00 }, /*0x01*/ { 0x0062, 0x5611, 0x0004, 0x46 },