From d143d6b8fb4dcdf7a90faeb6ff5d59fc9af33e39 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 5 Jan 2020 08:34:24 +1000 Subject: [PATCH] Decompile mpGetNumChallengesAvailable --- src/game/game_176d70.c | 2 +- src/game/game_1999b0.c | 73 ++++++++++------------------------ src/include/game/game_1999b0.h | 2 +- 3 files changed, 23 insertions(+), 54 deletions(-) diff --git a/src/game/game_176d70.c b/src/game/game_176d70.c index 6bb691a98..0cab4c03d 100644 --- a/src/game/game_176d70.c +++ b/src/game/game_176d70.c @@ -4011,7 +4011,7 @@ glabel menuhandler0017a20c /* f17a264: 00001025 */ or $v0,$zero,$zero .L0f17a268: /* f17a268: 3c048007 */ lui $a0,0x8007 -/* f17a26c: 0fc670b3 */ jal func0f19c2cc +/* f17a26c: 0fc670b3 */ jal mpGetNumChallengesAvailable /* f17a270: 8c841448 */ lw $a0,0x1448($a0) /* f17a274: 100000eb */ beqz $zero,.L0f17a624 /* f17a278: ae020000 */ sw $v0,0x0($s0) diff --git a/src/game/game_1999b0.c b/src/game/game_1999b0.c index 67b1f10c6..69965cf77 100644 --- a/src/game/game_1999b0.c +++ b/src/game/game_1999b0.c @@ -3106,58 +3106,27 @@ glabel func0f19c2b0 /* f19c2c8: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f19c2cc -/* f19c2cc: 27bdffd8 */ addiu $sp,$sp,-40 -/* f19c2d0: afb20020 */ sw $s2,0x20($sp) -/* f19c2d4: afb1001c */ sw $s1,0x1c($sp) -/* f19c2d8: afb00018 */ sw $s0,0x18($sp) -/* f19c2dc: 00808825 */ or $s1,$a0,$zero -/* f19c2e0: afbf0024 */ sw $ra,0x24($sp) -/* f19c2e4: 00009025 */ or $s2,$zero,$zero -/* f19c2e8: 2410001d */ addiu $s0,$zero,0x1d -/* f19c2ec: 02202025 */ or $a0,$s1,$zero -.L0f19c2f0: -/* f19c2f0: 02002825 */ or $a1,$s0,$zero -/* f19c2f4: 0fc6711f */ jal mpIsChallengeCompletedByChrWithNumPlayers -/* f19c2f8: 24060001 */ addiu $a2,$zero,0x1 -/* f19c2fc: 14400010 */ bnez $v0,.L0f19c340 -/* f19c300: 02202025 */ or $a0,$s1,$zero -/* f19c304: 02002825 */ or $a1,$s0,$zero -/* f19c308: 0fc6711f */ jal mpIsChallengeCompletedByChrWithNumPlayers -/* f19c30c: 24060002 */ addiu $a2,$zero,0x2 -/* f19c310: 1440000b */ bnez $v0,.L0f19c340 -/* f19c314: 02202025 */ or $a0,$s1,$zero -/* f19c318: 02002825 */ or $a1,$s0,$zero -/* f19c31c: 0fc6711f */ jal mpIsChallengeCompletedByChrWithNumPlayers -/* f19c320: 24060003 */ addiu $a2,$zero,0x3 -/* f19c324: 14400006 */ bnez $v0,.L0f19c340 -/* f19c328: 02202025 */ or $a0,$s1,$zero -/* f19c32c: 02002825 */ or $a1,$s0,$zero -/* f19c330: 0fc6711f */ jal mpIsChallengeCompletedByChrWithNumPlayers -/* f19c334: 24060004 */ addiu $a2,$zero,0x4 -/* f19c338: 50400004 */ beqzl $v0,.L0f19c34c -/* f19c33c: 2610ffff */ addiu $s0,$s0,-1 -.L0f19c340: -/* f19c340: 10000004 */ beqz $zero,.L0f19c354 -/* f19c344: 26120001 */ addiu $s2,$s0,0x1 -/* f19c348: 2610ffff */ addiu $s0,$s0,-1 -.L0f19c34c: -/* f19c34c: 0603ffe8 */ bgezl $s0,.L0f19c2f0 -/* f19c350: 02202025 */ or $a0,$s1,$zero -.L0f19c354: -/* f19c354: 2a410004 */ slti $at,$s2,0x4 -/* f19c358: 10200002 */ beqz $at,.L0f19c364 -/* f19c35c: 8fb00018 */ lw $s0,0x18($sp) -/* f19c360: 24120004 */ addiu $s2,$zero,0x4 -.L0f19c364: -/* f19c364: 8fbf0024 */ lw $ra,0x24($sp) -/* f19c368: 02401025 */ or $v0,$s2,$zero -/* f19c36c: 8fb20020 */ lw $s2,0x20($sp) -/* f19c370: 8fb1001c */ lw $s1,0x1c($sp) -/* f19c374: 03e00008 */ jr $ra -/* f19c378: 27bd0028 */ addiu $sp,$sp,0x28 -); +s32 mpGetNumChallengesAvailable(s32 mpchrnum) +{ + s32 challengeindex; + s32 numavail = 0; + + for (challengeindex = 29; challengeindex >= 0; challengeindex--) { + if (mpIsChallengeCompletedByChrWithNumPlayers(mpchrnum, challengeindex, 1) || + mpIsChallengeCompletedByChrWithNumPlayers(mpchrnum, challengeindex, 2) || + mpIsChallengeCompletedByChrWithNumPlayers(mpchrnum, challengeindex, 3) || + mpIsChallengeCompletedByChrWithNumPlayers(mpchrnum, challengeindex, 4)) { + numavail = challengeindex + 1; + break; + } + } + + if (numavail < 4) { + numavail = 4; + } + + return numavail; +} char *mpChallengeGetName(s32 arg0, s32 challengeindex) { diff --git a/src/include/game/game_1999b0.h b/src/include/game/game_1999b0.h index ba1695860..c041720a1 100644 --- a/src/include/game/game_1999b0.h +++ b/src/include/game/game_1999b0.h @@ -50,7 +50,7 @@ void func0f19c268(void); u32 func0f19c274(void); u32 func0f19c288(void); u32 func0f19c2b0(void); -u32 func0f19c2cc(void); +s32 mpGetNumChallengesAvailable(s32 mpchrnum); char *mpChallengeGetName(s32 arg0, s32 challengeindex); bool func0f19c3bc(s32 mpchrnum, s32 index, s32 numplayers); bool mpIsChallengeCompletedByAnyChrWithNumPlayers(s32 index, s32 numplayers);