From 6a094462f2c478f1f1a650022de59af3005860cb Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 4 Jan 2020 22:48:19 +1000 Subject: [PATCH] Decompile mpSetChallengeCompletionStatus --- src/game/game_00b200.c | 4 +- src/game/game_187770.c | 6 +-- src/game/game_1999b0.c | 88 +++++++++++--------------------- src/include/game/game_1999b0.h | 4 +- src/include/setup/setup_020df0.h | 4 +- src/include/types.h | 19 +++++++ src/setup/setup_020df0.c | 64 +++++++++++------------ 7 files changed, 90 insertions(+), 99 deletions(-) diff --git a/src/game/game_00b200.c b/src/game/game_00b200.c index 97b47be5a..cebf4cf04 100644 --- a/src/game/game_00b200.c +++ b/src/game/game_00b200.c @@ -27,11 +27,11 @@ glabel func0f00b210 /* f00b218: afb00014 */ sw $s0,0x14($sp) /* f00b21c: afb30020 */ sw $s3,0x20($sp) /* f00b220: afb10018 */ sw $s1,0x18($sp) -/* f00b224: 3c108009 */ lui $s0,%hi(challenges) +/* f00b224: 3c108009 */ lui $s0,%hi(g_MpChallenges) /* f00b228: 3c128009 */ lui $s2,%hi(var80090018) /* f00b22c: afbf0024 */ sw $ra,0x24($sp) /* f00b230: 265284c1 */ addiu $s2,$s2,-31551 -/* f00b234: 261084b8 */ addiu $s0,$s0,%lo(challenges) +/* f00b234: 261084b8 */ addiu $s0,$s0,%lo(g_MpChallenges) /* f00b238: 00008825 */ or $s1,$zero,$zero /* f00b23c: 27b30038 */ addiu $s3,$sp,0x38 .L0f00b240: diff --git a/src/game/game_187770.c b/src/game/game_187770.c index 332f02092..2581b8cd3 100644 --- a/src/game/game_187770.c +++ b/src/game/game_187770.c @@ -955,7 +955,7 @@ glabel func0f18800c .L0f188154: /* f188154: 02202825 */ or $a1,$s1,$zero /* f188158: 02003025 */ or $a2,$s0,$zero -/* f18815c: 0fc6712e */ jal func0f19c4b8 +/* f18815c: 0fc6712e */ jal mpSetChallengeCompletionStatus /* f188160: 00003825 */ or $a3,$zero,$zero /* f188164: 26100001 */ addiu $s0,$s0,0x1 /* f188168: 5612fffa */ bnel $s0,$s2,.L0f188154 @@ -5135,7 +5135,7 @@ glabel func0f18b9e4 /* f18bae0: 24010005 */ addiu $at,$zero,0x5 /* f18bae4: 55c10004 */ bnel $t6,$at,.L0f18baf8 /* f18bae8: 00002025 */ or $a0,$zero,$zero -/* f18baec: 0fc671af */ jal func0f19c6bc +/* f18baec: 0fc671af */ jal mpConsiderMarkingCurrentChallengeComplete /* f18baf0: 00000000 */ sll $zero,$zero,0x0 /* f18baf4: 00002025 */ or $a0,$zero,$zero .L0f18baf8: @@ -7195,7 +7195,7 @@ glabel func0f18d2b8 /* f18d554: 02802025 */ or $a0,$s4,$zero /* f18d558: 02202825 */ or $a1,$s1,$zero /* f18d55c: 02003025 */ or $a2,$s0,$zero -/* f18d560: 0fc6712e */ jal func0f19c4b8 +/* f18d560: 0fc6712e */ jal mpSetChallengeCompletionStatus /* f18d564: 00403825 */ or $a3,$v0,$zero /* f18d568: 26100001 */ addiu $s0,$s0,0x1 /* f18d56c: 5612fff7 */ bnel $s0,$s2,.L0f18d54c diff --git a/src/game/game_1999b0.c b/src/game/game_1999b0.c index eabbc91e9..eec775894 100644 --- a/src/game/game_1999b0.c +++ b/src/game/game_1999b0.c @@ -1687,7 +1687,7 @@ GLOBAL_ASM( glabel func0f19afdc /* f19afdc: 27bdffc8 */ addiu $sp,$sp,-56 /* f19afe0: afb1001c */ sw $s1,0x1c($sp) -/* f19afe4: 3c118009 */ lui $s1,%hi(challenges) +/* f19afe4: 3c118009 */ lui $s1,%hi(g_MpChallenges) /* f19afe8: 3c028009 */ lui $v0,%hi(var800887c4) /* f19afec: afbf0034 */ sw $ra,0x34($sp) /* f19aff0: afb60030 */ sw $s6,0x30($sp) @@ -1697,15 +1697,15 @@ glabel func0f19afdc /* f19b000: afb20020 */ sw $s2,0x20($sp) /* f19b004: afb00018 */ sw $s0,0x18($sp) /* f19b008: 244287c4 */ addiu $v0,$v0,%lo(var800887c4) -/* f19b00c: 263184b8 */ addiu $s1,$s1,%lo(challenges) +/* f19b00c: 263184b8 */ addiu $s1,$s1,%lo(g_MpChallenges) .L0f19b010: /* f19b010: 2631001a */ addiu $s1,$s1,0x1a /* f19b014: 0222082b */ sltu $at,$s1,$v0 /* f19b018: 1420fffd */ bnez $at,.L0f19b010 /* f19b01c: a220ffea */ sb $zero,-0x16($s1) -/* f19b020: 3c118009 */ lui $s1,%hi(challenges) +/* f19b020: 3c118009 */ lui $s1,%hi(g_MpChallenges) /* f19b024: 0000a025 */ or $s4,$zero,$zero -/* f19b028: 263184b8 */ addiu $s1,$s1,%lo(challenges) +/* f19b028: 263184b8 */ addiu $s1,$s1,%lo(g_MpChallenges) /* f19b02c: 0000a825 */ or $s5,$zero,$zero .L0f19b030: /* f19b030: 00009025 */ or $s2,$zero,$zero @@ -1772,8 +1772,8 @@ glabel func0f19afdc /* f19b10c: 00009825 */ or $s3,$zero,$zero /* f19b110: 0000c080 */ sll $t8,$zero,0x2 /* f19b114: 0300c023 */ subu $t8,$t8,$zero -/* f19b118: 3c198009 */ lui $t9,%hi(challenges) -/* f19b11c: 273984b8 */ addiu $t9,$t9,%lo(challenges) +/* f19b118: 3c198009 */ lui $t9,%hi(g_MpChallenges) +/* f19b11c: 273984b8 */ addiu $t9,$t9,%lo(g_MpChallenges) /* f19b120: 0018c0c0 */ sll $t8,$t8,0x3 /* f19b124: 3c038009 */ lui $v1,%hi(var800887c4) /* f19b128: 246387c4 */ addiu $v1,$v1,%lo(var800887c4) @@ -1795,9 +1795,9 @@ glabel func0f19afdc /* f19b15c: 3c168009 */ lui $s6,%hi(var800887c4) /* f19b160: 26d687c4 */ addiu $s6,$s6,%lo(var800887c4) .L0f19b164: -/* f19b164: 3c118009 */ lui $s1,%hi(challenges) +/* f19b164: 3c118009 */ lui $s1,%hi(g_MpChallenges) /* f19b168: 0000a025 */ or $s4,$zero,$zero -/* f19b16c: 263184b8 */ addiu $s1,$s1,%lo(challenges) +/* f19b16c: 263184b8 */ addiu $s1,$s1,%lo(g_MpChallenges) /* f19b170: 0000a825 */ or $s5,$zero,$zero .L0f19b174: /* f19b174: 00009025 */ or $s2,$zero,$zero @@ -1877,8 +1877,8 @@ glabel func0f19afdc /* f19b288: 10200013 */ beqz $at,.L0f19b2d8 /* f19b28c: 00004080 */ sll $t0,$zero,0x2 /* f19b290: 01004023 */ subu $t0,$t0,$zero -/* f19b294: 3c098009 */ lui $t1,%hi(challenges) -/* f19b298: 252984b8 */ addiu $t1,$t1,%lo(challenges) +/* f19b294: 3c098009 */ lui $t1,%hi(g_MpChallenges) +/* f19b298: 252984b8 */ addiu $t1,$t1,%lo(g_MpChallenges) /* f19b29c: 000840c0 */ sll $t0,$t0,0x3 /* f19b2a0: 240a0002 */ addiu $t2,$zero,0x2 /* f19b2a4: 026a1804 */ sllv $v1,$t2,$s3 @@ -1918,8 +1918,8 @@ glabel func0f19afdc /* f19b318: 01b56823 */ subu $t5,$t5,$s5 /* f19b31c: 000d6880 */ sll $t5,$t5,0x2 /* f19b320: 01b56821 */ addu $t5,$t5,$s5 -/* f19b324: 3c0e8009 */ lui $t6,%hi(challenges) -/* f19b328: 25ce84b8 */ addiu $t6,$t6,%lo(challenges) +/* f19b324: 3c0e8009 */ lui $t6,%hi(g_MpChallenges) +/* f19b328: 25ce84b8 */ addiu $t6,$t6,%lo(g_MpChallenges) /* f19b32c: 000d6840 */ sll $t5,$t5,0x1 /* f19b330: 01ae1821 */ addu $v1,$t5,$t6 /* f19b334: 00001025 */ or $v0,$zero,$zero @@ -1962,8 +1962,8 @@ glabel func0f19afdc /* f19b3ac: 01755823 */ subu $t3,$t3,$s5 /* f19b3b0: 000b5880 */ sll $t3,$t3,0x2 /* f19b3b4: 01755821 */ addu $t3,$t3,$s5 -/* f19b3b8: 3c0c8009 */ lui $t4,%hi(challenges) -/* f19b3bc: 258c84b8 */ addiu $t4,$t4,%lo(challenges) +/* f19b3b8: 3c0c8009 */ lui $t4,%hi(g_MpChallenges) +/* f19b3bc: 258c84b8 */ addiu $t4,$t4,%lo(g_MpChallenges) /* f19b3c0: 000b5840 */ sll $t3,$t3,0x1 /* f19b3c4: 016c1821 */ addu $v1,$t3,$t4 /* f19b3c8: 00001025 */ or $v0,$zero,$zero @@ -3216,8 +3216,8 @@ glabel func0f19c40c /* f19c41c: 000e7080 */ sll $t6,$t6,0x2 /* f19c420: 01c47021 */ addu $t6,$t6,$a0 /* f19c424: 000e7040 */ sll $t6,$t6,0x1 -/* f19c428: 3c188009 */ lui $t8,%hi(challenges) -/* f19c42c: 271884b8 */ addiu $t8,$t8,%lo(challenges) +/* f19c428: 3c188009 */ lui $t8,%hi(g_MpChallenges) +/* f19c42c: 271884b8 */ addiu $t8,$t8,%lo(g_MpChallenges) /* f19c430: 01c57821 */ addu $t7,$t6,$a1 /* f19c434: 01f81021 */ addu $v0,$t7,$t8 /* f19c438: 90590004 */ lbu $t9,0x4($v0) @@ -3229,8 +3229,8 @@ glabel func0f19c40c /* f19c44c: 00094880 */ sll $t1,$t1,0x2 /* f19c450: 01244821 */ addu $t1,$t1,$a0 /* f19c454: 00094840 */ sll $t1,$t1,0x1 -/* f19c458: 3c0b8009 */ lui $t3,%hi(challenges) -/* f19c45c: 256b84b8 */ addiu $t3,$t3,%lo(challenges) +/* f19c458: 3c0b8009 */ lui $t3,%hi(g_MpChallenges) +/* f19c45c: 256b84b8 */ addiu $t3,$t3,%lo(g_MpChallenges) /* f19c460: 01255021 */ addu $t2,$t1,$a1 /* f19c464: 014b1021 */ addu $v0,$t2,$t3 /* f19c468: 904c0004 */ lbu $t4,0x4($v0) @@ -3259,43 +3259,15 @@ glabel func0f19c47c /* f19c4b4: 01201025 */ or $v0,$t1,$zero ); -GLOBAL_ASM( -glabel func0f19c4b8 -/* f19c4b8: 10e00010 */ beqz $a3,.L0f19c4fc -/* f19c4bc: 00055880 */ sll $t3,$a1,0x2 -/* f19c4c0: 00057080 */ sll $t6,$a1,0x2 -/* f19c4c4: 01c57023 */ subu $t6,$t6,$a1 -/* f19c4c8: 000e7080 */ sll $t6,$t6,0x2 -/* f19c4cc: 01c57021 */ addu $t6,$t6,$a1 -/* f19c4d0: 000e7040 */ sll $t6,$t6,0x1 -/* f19c4d4: 3c188009 */ lui $t8,%hi(challenges) -/* f19c4d8: 271884b8 */ addiu $t8,$t8,%lo(challenges) -/* f19c4dc: 01c67821 */ addu $t7,$t6,$a2 -/* f19c4e0: 01f81021 */ addu $v0,$t7,$t8 -/* f19c4e4: 90590004 */ lbu $t9,0x4($v0) -/* f19c4e8: 24080002 */ addiu $t0,$zero,0x2 -/* f19c4ec: 00884804 */ sllv $t1,$t0,$a0 -/* f19c4f0: 03295025 */ or $t2,$t9,$t1 -/* f19c4f4: 03e00008 */ jr $ra -/* f19c4f8: a04a0004 */ sb $t2,0x4($v0) -.L0f19c4fc: -/* f19c4fc: 01655823 */ subu $t3,$t3,$a1 -/* f19c500: 000b5880 */ sll $t3,$t3,0x2 -/* f19c504: 01655821 */ addu $t3,$t3,$a1 -/* f19c508: 000b5840 */ sll $t3,$t3,0x1 -/* f19c50c: 3c0d8009 */ lui $t5,%hi(challenges) -/* f19c510: 25ad84b8 */ addiu $t5,$t5,%lo(challenges) -/* f19c514: 01666021 */ addu $t4,$t3,$a2 -/* f19c518: 018d1021 */ addu $v0,$t4,$t5 -/* f19c51c: 904e0004 */ lbu $t6,0x4($v0) -/* f19c520: 240f0002 */ addiu $t7,$zero,0x2 -/* f19c524: 008fc004 */ sllv $t8,$t7,$a0 -/* f19c528: 03004027 */ nor $t0,$t8,$zero -/* f19c52c: 01c8c824 */ and $t9,$t6,$t0 -/* f19c530: a0590004 */ sb $t9,0x4($v0) -/* f19c534: 03e00008 */ jr $ra -/* f19c538: 00000000 */ sll $zero,$zero,0x0 -); +void mpSetChallengeCompletionStatus(u32 mpchrnum, s32 index, s32 numplayers, bool completed) +{ + if (completed) { + g_MpChallenges[index].completions[numplayers] |= 2 << mpchrnum; + return; + } + + g_MpChallenges[index].completions[numplayers] &= ~(2 << mpchrnum); +} GLOBAL_ASM( glabel func0f19c53c @@ -3438,7 +3410,7 @@ glabel func0f19c53c // return result; //} -void func0f19c6bc(void) +void mpConsiderMarkingCurrentChallengeComplete(void) { bool result = func0f19c53c(); @@ -3446,12 +3418,12 @@ void func0f19c6bc(void) u32 prevplayernum; s32 i; - func0f19c40c(var800884b0, PLAYERCOUNT(), 1); + func0f19c40c(g_MpChallengeIndex, PLAYERCOUNT(), 1); prevplayernum = g_Vars.currentplayernum; for (i = 0; i < PLAYERCOUNT(); i++) { setCurrentPlayerNum(i); - func0f19c4b8(g_Vars.unk000288->mpchrnum, var800884b0, PLAYERCOUNT(), 1); + mpSetChallengeCompletionStatus(g_Vars.unk000288->mpchrnum, g_MpChallengeIndex, PLAYERCOUNT(), true); } setCurrentPlayerNum(prevplayernum); diff --git a/src/include/game/game_1999b0.h b/src/include/game/game_1999b0.h index eb4cefecf..1970f7544 100644 --- a/src/include/game/game_1999b0.h +++ b/src/include/game/game_1999b0.h @@ -56,9 +56,9 @@ u32 func0f19c3bc(void); u32 func0f19c3dc(void); void func0f19c40c(s32 arg0, s32 numplayers, s32 arg2); u32 func0f19c47c(void); -void func0f19c4b8(s32 arg0, s32 arg1, s32 numplayers, s32 arg3); +void mpSetChallengeCompletionStatus(u32 mpchrnum, s32 index, s32 numplayers, bool completed); bool func0f19c53c(void); -void func0f19c6bc(void); +void mpConsiderMarkingCurrentChallengeComplete(void); bool mpIsChallengeComplete(s32 challenge); #endif diff --git a/src/include/setup/setup_020df0.h b/src/include/setup/setup_020df0.h index 99d92397b..f62e5f97e 100644 --- a/src/include/setup/setup_020df0.h +++ b/src/include/setup/setup_020df0.h @@ -313,8 +313,8 @@ extern u32 var80087eb0; extern u32 var80088490; extern u32 var80088494; extern u32 var800884a4; -extern u32 var800884b0; -extern u16 challenges[]; +extern u32 g_MpChallengeIndex; +extern struct challenge g_MpChallenges[]; extern u32 var800887c4; extern u32 var80088800; extern u32 var80088808; diff --git a/src/include/types.h b/src/include/types.h index d921314a8..770eb0b8b 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4273,4 +4273,23 @@ struct savelocation { /*0x2d2*/ s8 unk2d2[4]; }; +struct challenge { + /*0x00*/ u16 name; + /*0x02*/ u16 unk02; + + // One byte for each player's profile, and 4 bits in each + // to mark how many players it wash completed with + /*0x04*/ u8 completions[4]; + + /*0x08*/ u16 unk08; + /*0x0a*/ u16 unk0a; + /*0x0c*/ u16 unk0c; + /*0x0e*/ u16 unk0e; + /*0x10*/ u16 unk10; + /*0x12*/ u16 unk12; + /*0x14*/ u16 unk14; + /*0x16*/ u16 unk16; + /*0x18*/ u16 unk18; +}; + #endif diff --git a/src/setup/setup_020df0.c b/src/setup/setup_020df0.c index 3ef0c4b15..35b422ebe 100644 --- a/src/setup/setup_020df0.c +++ b/src/setup/setup_020df0.c @@ -12709,41 +12709,41 @@ u32 var800884a0 = 0x00000000; u32 var800884a4 = 0x00000000; u32 var800884a8 = 0x00000000; u32 var800884ac = 0x00000000; -u32 var800884b0 = 0x00000000; +u32 g_MpChallengeIndex = 0; u32 var800884b4 = 0x00000000; // 2e4d8 -u16 challenges[] = { - 0x5796, 0x0e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x5797, 0x0f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x5798, 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x5799, 0x11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x579a, 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x579b, 0x13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x579c, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x579d, 0x15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x579e, 0x16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x579f, 0x17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a0, 0x18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a1, 0x19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a2, 0x1a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a3, 0x1b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a4, 0x1c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a5, 0x1d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a6, 0x1e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a7, 0x1f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a8, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57a9, 0x21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57aa, 0x22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57ab, 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57ac, 0x24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57ad, 0x25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57ae, 0x26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57af, 0x27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57b0, 0x28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57b1, 0x29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57b2, 0x2a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x57b3, 0x2b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +struct challenge g_MpChallenges[] = { + { 0x5796, 0x0e }, + { 0x5797, 0x0f }, + { 0x5798, 0x10 }, + { 0x5799, 0x11 }, + { 0x579a, 0x12 }, + { 0x579b, 0x13 }, + { 0x579c, 0x14 }, + { 0x579d, 0x15 }, + { 0x579e, 0x16 }, + { 0x579f, 0x17 }, + { 0x57a0, 0x18 }, + { 0x57a1, 0x19 }, + { 0x57a2, 0x1a }, + { 0x57a3, 0x1b }, + { 0x57a4, 0x1c }, + { 0x57a5, 0x1d }, + { 0x57a6, 0x1e }, + { 0x57a7, 0x1f }, + { 0x57a8, 0x20 }, + { 0x57a9, 0x21 }, + { 0x57aa, 0x22 }, + { 0x57ab, 0x23 }, + { 0x57ac, 0x24 }, + { 0x57ad, 0x25 }, + { 0x57ae, 0x26 }, + { 0x57af, 0x27 }, + { 0x57b0, 0x28 }, + { 0x57b1, 0x29 }, + { 0x57b2, 0x2a }, + { 0x57b3, 0x2b }, }; u32 var800887c4 = 0x007d1c20;