From f0522dbfcfcecacdb6439fe58b02efaa69ecc6d0 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 30 Apr 2020 21:06:06 +1000 Subject: [PATCH] Attempt to decompile mpLoadConfig --- ld/pd.ld | 8 ++ src/game/data/data_02da90.c | 51 --------- src/game/game_0e5ce0.c | 6 +- src/game/game_0f09f0.c | 4 +- src/game/game_10c9c0.c | 2 +- src/game/game_179060.c | 8 +- src/game/game_17f930.c | 2 +- src/game/game_19aa80.c | 154 ++++++++++++++++++++++++---- src/include/game/data/data_02da90.h | 4 - src/include/game/game_19aa80.h | 20 ++-- src/include/game/mplayer.h | 2 +- src/include/types.h | 5 + 12 files changed, 171 insertions(+), 95 deletions(-) diff --git a/ld/pd.ld b/ld/pd.ld index ab84031eb..99c4c203f 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -27,6 +27,14 @@ SECTIONS _rspMicrocodeStart = 0x80059fe0; _rspMicrocodeStartPlusOne = 0x80059fe1; _rspMicrocodeEnd = 0x8005afe0; + _mpconfigsSegmentRomStart = 0x7d0a40; + _mpstringsESegmentRomStart = 0x007d1c20; _mpstringsESegmentRomEnd = 0x007d5320; + _mpstringsJSegmentRomStart = 0x007d5320; _mpstringsJSegmentRomEnd = 0x007d8a20; + _mpstringsPSegmentRomStart = 0x007d8a20; _mpstringsPSegmentRomEnd = 0x007dc120; + _mpstringsGSegmentRomStart = 0x007dc120; _mpstringsGSegmentRomEnd = 0x007df820; + _mpstringsFSegmentRomStart = 0x007df820; _mpstringsFSegmentRomEnd = 0x007e2f20; + _mpstringsSSegmentRomStart = 0x007e2f20; _mpstringsSSegmentRomEnd = 0x007e6620; + _mpstringsISegmentRomStart = 0x007e6620; _mpstringsISegmentRomEnd = 0x007e9d20; #if VERSION >= VERSION_NTSC_FINAL _bssSegmentEnd = 0x7f1b99e0; diff --git a/src/game/data/data_02da90.c b/src/game/data/data_02da90.c index bf386e2df..f2972c5bc 100644 --- a/src/game/data/data_02da90.c +++ b/src/game/data/data_02da90.c @@ -559,55 +559,4 @@ u32 var800884a0 = 0x00000000; u32 var800884a4 = 0x00000000; u32 var800884a8 = 0x00000000; u32 var800884ac = 0x00000000; -u32 g_MpChallengeIndex = 0; -u32 var800884b4 = 0; -// 2e4d8 -struct challenge g_MpChallenges[NUM_CHALLENGES] = { - { L_OPTIONS(406), MPCONFIG_CHALLENGE01 }, // "Challenge 1" - { L_OPTIONS(407), MPCONFIG_CHALLENGE02 }, // "Challenge 2" - { L_OPTIONS(408), MPCONFIG_CHALLENGE03 }, // "Challenge 3" - { L_OPTIONS(409), MPCONFIG_CHALLENGE04 }, // "Challenge 4" - { L_OPTIONS(410), MPCONFIG_CHALLENGE05 }, // "Challenge 5" - { L_OPTIONS(411), MPCONFIG_CHALLENGE06 }, // "Challenge 6" - { L_OPTIONS(412), MPCONFIG_CHALLENGE07 }, // "Challenge 7" - { L_OPTIONS(413), MPCONFIG_CHALLENGE08 }, // "Challenge 8" - { L_OPTIONS(414), MPCONFIG_CHALLENGE09 }, // "Challenge 9" - { L_OPTIONS(415), MPCONFIG_CHALLENGE10 }, // "Challenge 10" - { L_OPTIONS(416), MPCONFIG_CHALLENGE11 }, // "Challenge 11" - { L_OPTIONS(417), MPCONFIG_CHALLENGE12 }, // "Challenge 12" - { L_OPTIONS(418), MPCONFIG_CHALLENGE13 }, // "Challenge 13" - { L_OPTIONS(419), MPCONFIG_CHALLENGE14 }, // "Challenge 14" - { L_OPTIONS(420), MPCONFIG_CHALLENGE15 }, // "Challenge 15" - { L_OPTIONS(421), MPCONFIG_CHALLENGE16 }, // "Challenge 16" - { L_OPTIONS(422), MPCONFIG_CHALLENGE17 }, // "Challenge 17" - { L_OPTIONS(423), MPCONFIG_CHALLENGE18 }, // "Challenge 18" - { L_OPTIONS(424), MPCONFIG_CHALLENGE19 }, // "Challenge 19" - { L_OPTIONS(425), MPCONFIG_CHALLENGE20 }, // "Challenge 20" - { L_OPTIONS(426), MPCONFIG_CHALLENGE21 }, // "Challenge 21" - { L_OPTIONS(427), MPCONFIG_CHALLENGE22 }, // "Challenge 22" - { L_OPTIONS(428), MPCONFIG_CHALLENGE23 }, // "Challenge 23" - { L_OPTIONS(429), MPCONFIG_CHALLENGE24 }, // "Challenge 24" - { L_OPTIONS(430), MPCONFIG_CHALLENGE25 }, // "Challenge 25" - { L_OPTIONS(431), MPCONFIG_CHALLENGE26 }, // "Challenge 26" - { L_OPTIONS(432), MPCONFIG_CHALLENGE27 }, // "Challenge 27" - { L_OPTIONS(433), MPCONFIG_CHALLENGE28 }, // "Challenge 28" - { L_OPTIONS(434), MPCONFIG_CHALLENGE29 }, // "Challenge 29" - { L_OPTIONS(435), MPCONFIG_CHALLENGE30 }, // "Challenge 30" -}; - -u32 var800887c4 = 0x007d1c20; -u32 var800887c8 = 0x007d5320; -u32 var800887cc = 0x007d5320; -u32 var800887d0 = 0x007d8a20; -u32 var800887d4 = 0x007d8a20; -u32 var800887d8 = 0x007dc120; -u32 var800887dc = 0x007dc120; -u32 var800887e0 = 0x007df820; -u32 var800887e4 = 0x007df820; -u32 var800887e8 = 0x007e2f20; -u32 var800887ec = 0x007e2f20; -u32 var800887f0 = 0x007e6620; -u32 var800887f4 = 0x007e6620; -u32 var800887f8 = 0x007e9d20; -u32 var800887fc = 0x00000000; diff --git a/src/game/game_0e5ce0.c b/src/game/game_0e5ce0.c index 6caa3b6b2..b4e138da3 100644 --- a/src/game/game_0e5ce0.c +++ b/src/game/game_0e5ce0.c @@ -12010,11 +12010,11 @@ glabel var7f1b1e8c /* f0ecce4: 030fc023 */ subu $t8,$t8,$t7 /* f0ecce8: 0018c100 */ sll $t8,$t8,0x4 /* f0eccec: 00982021 */ addu $a0,$a0,$t8 -/* f0eccf0: 0fc670ac */ jal func0f19c2b0 +/* f0eccf0: 0fc670ac */ jal mpconfigGetDescription /* f0eccf4: 8c84ee20 */ lw $a0,%lo(g_MenuStack+0xe20)($a0) /* f0eccf8: 10000046 */ beqz $zero,.L0f0ece14 /* f0eccfc: 8fbf0014 */ lw $ra,0x14($sp) -/* f0ecd00: 0fc6709d */ jal mpIsVar800884b4NonZero +/* f0ecd00: 0fc6709d */ jal mpIsChallengeLoaded /* f0ecd04: 00000000 */ sll $zero,$zero,0x0 /* f0ecd08: 14400012 */ bnez $v0,.L0f0ecd54 /* f0ecd0c: 3c198007 */ lui $t9,%hi(g_MpPlayerNum) @@ -12033,7 +12033,7 @@ glabel var7f1b1e8c /* f0ecd40: 354a5ace */ ori $t2,$t2,0x5ace /* f0ecd44: ac4a0850 */ sw $t2,0x850($v0) /* f0ecd48: 8c440844 */ lw $a0,0x844($v0) -/* f0ecd4c: 0fc67091 */ jal mpCalculateVar800884b4 +/* f0ecd4c: 0fc67091 */ jal mpLoadAndStoreCurrentChallenge /* f0ecd50: 8c450848 */ lw $a1,0x848($v0) .L0f0ecd54: /* f0ecd54: 0fc670a2 */ jal func0f19c288 diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index 34dee4473..d7c66aad5 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -3581,7 +3581,7 @@ glabel func0f0f37a4 /* f0f37b4: 34215ace */ ori $at,$at,0x5ace /* f0f37b8: 55c10005 */ bnel $t6,$at,.L0f0f37d0 /* f0f37bc: 44800000 */ mtc1 $zero,$f0 -/* f0f37c0: 0fc6709a */ jal mpResetVar800884b4 +/* f0f37c0: 0fc6709a */ jal mpClearCurrentChallenge /* f0f37c4: afa40018 */ sw $a0,0x18($sp) /* f0f37c8: 8fa40018 */ lw $a0,0x18($sp) /* f0f37cc: 44800000 */ mtc1 $zero,$f0 @@ -3757,7 +3757,7 @@ glabel var7f1b2948 .L0f0f398c: /* f0f398c: 54610004 */ bnel $v1,$at,.L0f0f39a0 /* f0f3990: 92020000 */ lbu $v0,0x0($s0) -/* f0f3994: 0fc6709a */ jal mpResetVar800884b4 +/* f0f3994: 0fc6709a */ jal mpClearCurrentChallenge /* f0f3998: 00000000 */ sll $zero,$zero,0x0 /* f0f399c: 92020000 */ lbu $v0,0x0($s0) .L0f0f39a0: diff --git a/src/game/game_10c9c0.c b/src/game/game_10c9c0.c index 2b8f45526..23120b526 100644 --- a/src/game/game_10c9c0.c +++ b/src/game/game_10c9c0.c @@ -105,7 +105,7 @@ bool menudialog4MbMainMenu(u32 operation, struct menu_dialog *dialog, struct men g_Vars.unk000490 = 2; g_Vars.mpquickteam = MPQUICKTEAM_5; g_Vars.unk00049c = 0; - mpResetVar800884b4(); + mpClearCurrentChallenge(); mpRemoveLock(); } diff --git a/src/game/game_179060.c b/src/game/game_179060.c index 852fa7874..8c80c2179 100644 --- a/src/game/game_179060.c +++ b/src/game/game_179060.c @@ -5202,7 +5202,7 @@ glabel func0f17e318 s32 menuhandler0017e38c(u32 operation, struct menu_item *item, s32 *value) { if (operation == MENUOP_SET) { - mpResetVar800884b4(); + mpClearCurrentChallenge(); menuPopDialog(); mpSetCurrentChallenge(g_MenuStack[g_MpPlayerNum].slotindex); } @@ -5743,7 +5743,7 @@ glabel menudialog0017eb34 /* f17eb98: 8c480000 */ lw $t0,0x0($v0) /* f17eb9c: 54a80017 */ bnel $a1,$t0,.L0f17ebfc /* f17eba0: 8fad0018 */ lw $t5,0x18($sp) -/* f17eba4: 0fc6709d */ jal mpIsVar800884b4NonZero +/* f17eba4: 0fc6709d */ jal mpIsChallengeLoaded /* f17eba8: 00000000 */ sll $zero,$zero,0x0 /* f17ebac: 14400012 */ bnez $v0,.L0f17ebf8 /* f17ebb0: 3c098007 */ lui $t1,%hi(g_MpPlayerNum) @@ -5762,7 +5762,7 @@ glabel menudialog0017eb34 /* f17ebe4: 358c5ace */ ori $t4,$t4,0x5ace /* f17ebe8: ac4c0850 */ sw $t4,0x850($v0) /* f17ebec: 8c440844 */ lw $a0,0x844($v0) -/* f17ebf0: 0fc67091 */ jal mpCalculateVar800884b4 +/* f17ebf0: 0fc67091 */ jal mpLoadAndStoreCurrentChallenge /* f17ebf4: 8c450848 */ lw $a1,0x848($v0) .L0f17ebf8: /* f17ebf8: 8fad0018 */ lw $t5,0x18($sp) @@ -5786,7 +5786,7 @@ glabel menudialog0017eb34 /* f17ec3c: 34215ace */ ori $at,$at,0x5ace /* f17ec40: 57010004 */ bnel $t8,$at,.L0f17ec54 /* f17ec44: 8fbf0014 */ lw $ra,0x14($sp) -/* f17ec48: 0fc6709a */ jal mpResetVar800884b4 +/* f17ec48: 0fc6709a */ jal mpClearCurrentChallenge /* f17ec4c: 00000000 */ sll $zero,$zero,0x0 /* f17ec50: 8fbf0014 */ lw $ra,0x14($sp) .L0f17ec54: diff --git a/src/game/game_17f930.c b/src/game/game_17f930.c index 4a728d059..6ca59aa76 100644 --- a/src/game/game_17f930.c +++ b/src/game/game_17f930.c @@ -87,7 +87,7 @@ bool menudialogCombatSimulator(u32 operation, struct menu_dialog *dialog, struct g_Vars.unk000490 = 2; g_Vars.mpquickteam = MPQUICKTEAM_5; g_Vars.unk00049c = 0; - mpResetVar800884b4(); + mpClearCurrentChallenge(); mpRemoveLock(); } diff --git a/src/game/game_19aa80.c b/src/game/game_19aa80.c index ce972488c..e49f67882 100644 --- a/src/game/game_19aa80.c +++ b/src/game/game_19aa80.c @@ -24,6 +24,43 @@ #include "lib/lib_12dc0.h" #include "types.h" +u32 g_MpChallengeIndex = 0; +void *g_MpCurrentChallengeConfig = NULL; + +// 2e4d8 +struct challenge g_MpChallenges[NUM_CHALLENGES] = { + { L_OPTIONS(406), MPCONFIG_CHALLENGE01 }, // "Challenge 1" + { L_OPTIONS(407), MPCONFIG_CHALLENGE02 }, // "Challenge 2" + { L_OPTIONS(408), MPCONFIG_CHALLENGE03 }, // "Challenge 3" + { L_OPTIONS(409), MPCONFIG_CHALLENGE04 }, // "Challenge 4" + { L_OPTIONS(410), MPCONFIG_CHALLENGE05 }, // "Challenge 5" + { L_OPTIONS(411), MPCONFIG_CHALLENGE06 }, // "Challenge 6" + { L_OPTIONS(412), MPCONFIG_CHALLENGE07 }, // "Challenge 7" + { L_OPTIONS(413), MPCONFIG_CHALLENGE08 }, // "Challenge 8" + { L_OPTIONS(414), MPCONFIG_CHALLENGE09 }, // "Challenge 9" + { L_OPTIONS(415), MPCONFIG_CHALLENGE10 }, // "Challenge 10" + { L_OPTIONS(416), MPCONFIG_CHALLENGE11 }, // "Challenge 11" + { L_OPTIONS(417), MPCONFIG_CHALLENGE12 }, // "Challenge 12" + { L_OPTIONS(418), MPCONFIG_CHALLENGE13 }, // "Challenge 13" + { L_OPTIONS(419), MPCONFIG_CHALLENGE14 }, // "Challenge 14" + { L_OPTIONS(420), MPCONFIG_CHALLENGE15 }, // "Challenge 15" + { L_OPTIONS(421), MPCONFIG_CHALLENGE16 }, // "Challenge 16" + { L_OPTIONS(422), MPCONFIG_CHALLENGE17 }, // "Challenge 17" + { L_OPTIONS(423), MPCONFIG_CHALLENGE18 }, // "Challenge 18" + { L_OPTIONS(424), MPCONFIG_CHALLENGE19 }, // "Challenge 19" + { L_OPTIONS(425), MPCONFIG_CHALLENGE20 }, // "Challenge 20" + { L_OPTIONS(426), MPCONFIG_CHALLENGE21 }, // "Challenge 21" + { L_OPTIONS(427), MPCONFIG_CHALLENGE22 }, // "Challenge 22" + { L_OPTIONS(428), MPCONFIG_CHALLENGE23 }, // "Challenge 23" + { L_OPTIONS(429), MPCONFIG_CHALLENGE24 }, // "Challenge 24" + { L_OPTIONS(430), MPCONFIG_CHALLENGE25 }, // "Challenge 25" + { L_OPTIONS(431), MPCONFIG_CHALLENGE26 }, // "Challenge 26" + { L_OPTIONS(432), MPCONFIG_CHALLENGE27 }, // "Challenge 27" + { L_OPTIONS(433), MPCONFIG_CHALLENGE28 }, // "Challenge 28" + { L_OPTIONS(434), MPCONFIG_CHALLENGE29 }, // "Challenge 29" + { L_OPTIONS(435), MPCONFIG_CHALLENGE30 }, // "Challenge 30" +}; + /** * @cmd 0185 */ @@ -358,7 +395,7 @@ glabel func0f19afdc /* f19afdc: 27bdffc8 */ addiu $sp,$sp,-56 /* f19afe0: afb1001c */ sw $s1,0x1c($sp) /* f19afe4: 3c118009 */ lui $s1,%hi(g_MpChallenges) -/* f19afe8: 3c028009 */ lui $v0,%hi(var800887c4) +/* f19afe8: 3c028009 */ lui $v0,0x8009 /* f19afec: afbf0034 */ sw $ra,0x34($sp) /* f19aff0: afb60030 */ sw $s6,0x30($sp) /* f19aff4: afb5002c */ sw $s5,0x2c($sp) @@ -366,7 +403,7 @@ glabel func0f19afdc /* f19affc: afb30024 */ sw $s3,0x24($sp) /* f19b000: afb20020 */ sw $s2,0x20($sp) /* f19b004: afb00018 */ sw $s0,0x18($sp) -/* f19b008: 244287c4 */ addiu $v0,$v0,%lo(var800887c4) +/* f19b008: 244287c4 */ addiu $v0,$v0,-30780 /* f19b00c: 263184b8 */ addiu $s1,$s1,%lo(g_MpChallenges) .L0f19b010: /* f19b010: 2631001a */ addiu $s1,$s1,0x1a @@ -445,8 +482,8 @@ glabel func0f19afdc /* 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) +/* f19b124: 3c038009 */ lui $v1,0x8009 +/* f19b128: 246387c4 */ addiu $v1,$v1,-30780 /* f19b12c: 03198821 */ addu $s1,$t8,$t9 /* f19b130: 92220004 */ lbu $v0,0x4($s1) .L0f19b134: @@ -462,8 +499,8 @@ glabel func0f19afdc /* f19b154: 5623fff7 */ bnel $s1,$v1,.L0f19b134 /* f19b158: 92220004 */ lbu $v0,0x4($s1) .L0f19b15c: -/* f19b15c: 3c168009 */ lui $s6,%hi(var800887c4) -/* f19b160: 26d687c4 */ addiu $s6,$s6,%lo(var800887c4) +/* f19b15c: 3c168009 */ lui $s6,0x8009 +/* f19b160: 26d687c4 */ addiu $s6,$s6,-30780 .L0f19b164: /* f19b164: 3c118009 */ lui $s1,%hi(g_MpChallenges) /* f19b168: 0000a025 */ or $s4,$zero,$zero @@ -1007,6 +1044,36 @@ glabel func0f19b800 /* f19b910: 27bd0028 */ addiu $sp,$sp,0x28 ); +extern u32 _mpstringsESegmentRomStart; +extern u32 _mpstringsJSegmentRomStart; +extern u32 _mpstringsPSegmentRomStart; +extern u32 _mpstringsGSegmentRomStart; +extern u32 _mpstringsFSegmentRomStart; +extern u32 _mpstringsSSegmentRomStart; +extern u32 _mpstringsISegmentRomStart; +extern u32 _mpstringsESegmentRomEnd; +extern u32 _mpstringsJSegmentRomEnd; +extern u32 _mpstringsPSegmentRomEnd; +extern u32 _mpstringsGSegmentRomEnd; +extern u32 _mpstringsFSegmentRomEnd; +extern u32 _mpstringsSSegmentRomEnd; +extern u32 _mpstringsISegmentRomEnd; + +u32 *var800887c4 = &_mpstringsESegmentRomStart; +u32 *var800887c8 = &_mpstringsESegmentRomEnd; +u32 *var800887cc = &_mpstringsJSegmentRomStart; +u32 *var800887d0 = &_mpstringsJSegmentRomEnd; +u32 *var800887d4 = &_mpstringsPSegmentRomStart; +u32 *var800887d8 = &_mpstringsPSegmentRomEnd; +u32 *var800887dc = &_mpstringsGSegmentRomStart; +u32 *var800887e0 = &_mpstringsGSegmentRomEnd; +u32 *var800887e4 = &_mpstringsFSegmentRomStart; +u32 *var800887e8 = &_mpstringsFSegmentRomEnd; +u32 *var800887ec = &_mpstringsSSegmentRomStart; +u32 *var800887f0 = &_mpstringsSSegmentRomEnd; +u32 *var800887f4 = &_mpstringsISegmentRomStart; +u32 *var800887f8 = &_mpstringsISegmentRomEnd; + GLOBAL_ASM( glabel mpLoadConfig /* f19b914: 27bdfe38 */ addiu $sp,$sp,-456 @@ -1015,8 +1082,8 @@ glabel mpLoadConfig /* f19b920: afa501cc */ sw $a1,0x1cc($sp) /* f19b924: 0fc5b9b5 */ jal langGetLanguageId /* f19b928: afa601d0 */ sw $a2,0x1d0($sp) -/* f19b92c: 3c0f8009 */ lui $t7,%hi(var800887c4) -/* f19b930: 25ef87c4 */ addiu $t7,$t7,%lo(var800887c4) +/* f19b92c: 3c0f8009 */ lui $t7,0x8009 +/* f19b930: 25ef87c4 */ addiu $t7,$t7,-30780 /* f19b934: afa20050 */ sw $v0,0x50($sp) /* f19b938: 25e80030 */ addiu $t0,$t7,0x30 /* f19b93c: 27ae0018 */ addiu $t6,$sp,0x18 @@ -1094,12 +1161,59 @@ glabel mpLoadConfig /* f19ba54: 00000000 */ sll $zero,$zero,0x0 ); -s32 mpLoadChallenge(s32 challengeindex, char *buffer, s32 len) +// Mismatch because the arguments to an addu instruction are swapped. +// It's the addu for calculating &bank[confignum]. +//struct mpconfigfull *mpLoadConfig(s32 confignum, u8 *buffer, s32 len) +//{ +// struct mpconfigfull *mpconfig; +// u8 buffer2[sizeof(struct mpstrings) + 40]; +// struct mpstrings *loadedstrings; +// struct mpstrings *bank; +// u32 language_id = langGetLanguageId(); +// extern struct mpconfig _mpconfigsSegmentRomStart[]; +// extern struct mpstrings _mpstringsESegmentRomStart; +// extern struct mpstrings _mpstringsJSegmentRomStart; +// extern struct mpstrings _mpstringsPSegmentRomStart; +// extern struct mpstrings _mpstringsGSegmentRomStart; +// extern struct mpstrings _mpstringsFSegmentRomStart; +// extern struct mpstrings _mpstringsSSegmentRomStart; +// extern struct mpstrings _mpstringsISegmentRomStart; +// extern struct mpstrings _mpstringsESegmentRomEnd; +// extern struct mpstrings _mpstringsJSegmentRomEnd; +// extern struct mpstrings _mpstringsPSegmentRomEnd; +// extern struct mpstrings _mpstringsGSegmentRomEnd; +// extern struct mpstrings _mpstringsFSegmentRomEnd; +// extern struct mpstrings _mpstringsSSegmentRomEnd; +// extern struct mpstrings _mpstringsISegmentRomEnd; +// +// struct mpstrings *banks[][2] = { +// { &_mpstringsESegmentRomStart, &_mpstringsESegmentRomEnd }, +// { &_mpstringsJSegmentRomStart, &_mpstringsJSegmentRomEnd }, +// { &_mpstringsPSegmentRomStart, &_mpstringsPSegmentRomEnd }, +// { &_mpstringsGSegmentRomStart, &_mpstringsGSegmentRomEnd }, +// { &_mpstringsFSegmentRomStart, &_mpstringsFSegmentRomEnd }, +// { &_mpstringsSSegmentRomStart, &_mpstringsSSegmentRomEnd }, +// { &_mpstringsISegmentRomStart, &_mpstringsISegmentRomEnd }, +// }; +// +// // Load mpconfigs +// mpconfig = func0000d488(buffer, &_mpconfigsSegmentRomStart[confignum], sizeof(struct mpconfig)); +// +// // Load mpstrings +// bank = banks[language_id][0]; +// loadedstrings = func0000d488(buffer2, &bank[confignum], sizeof(struct mpstrings)); +// +// mpconfig->strings = *loadedstrings; +// +// return mpconfig; +//} + +struct mpconfigfull *mpLoadChallenge(s32 challengeindex, u8 *buffer, s32 len) { return mpLoadConfig(g_MpChallenges[challengeindex].confignum, buffer, len); } -s32 mpGetNthAvailableChallengeSomething(s32 n, char *buffer, s32 len) +struct mpconfigfull *mpGetNthAvailableChallengeSomething(s32 n, u8 *buffer, s32 len) { s32 numavailable = 0; s32 challengeindex; @@ -1117,7 +1231,7 @@ s32 mpGetNthAvailableChallengeSomething(s32 n, char *buffer, s32 len) return 0; } -s32 mpLoadCurrentChallenge(char *buffer, s32 len) +struct mpconfigfull *mpLoadCurrentChallenge(u8 *buffer, s32 len) { return mpLoadChallenge(g_MpChallengeIndex, buffer, len); } @@ -1592,7 +1706,7 @@ void func0f19c190(void) void func0f19c1cc(void) { s32 i; - char buffer[458]; + u8 buffer[458]; func0f18dcec(mpLoadCurrentChallenge(buffer, 458)); mpSetLock(MPLOCKTYPE_CHALLENGE, 5); @@ -1607,27 +1721,27 @@ s32 mpRemoveLock(void) return mpSetLock(MPLOCKTYPE_NONE, 0); } -void mpCalculateVar800884b4(char *buffer, s32 len) +void mpLoadAndStoreCurrentChallenge(u8 *buffer, s32 len) { - var800884b4 = mpLoadCurrentChallenge(buffer, len); + g_MpCurrentChallengeConfig = mpLoadCurrentChallenge(buffer, len); } -void mpResetVar800884b4(void) +void mpClearCurrentChallenge(void) { - var800884b4 = 0; + g_MpCurrentChallengeConfig = NULL; } -bool mpIsVar800884b4NonZero(void) +bool mpIsChallengeLoaded(void) { - return var800884b4 != 0; + return g_MpCurrentChallengeConfig != NULL; } const char var7f1b9174[] = ""; GLOBAL_ASM( glabel func0f19c288 -/* f19c288: 3c038009 */ lui $v1,%hi(var800884b4) -/* f19c28c: 8c6384b4 */ lw $v1,%lo(var800884b4)($v1) +/* f19c288: 3c038009 */ lui $v1,%hi(g_MpCurrentChallengeConfig) +/* f19c28c: 8c6384b4 */ lw $v1,%lo(g_MpCurrentChallengeConfig)($v1) /* f19c290: 3c027f1c */ lui $v0,%hi(var7f1b9174) /* f19c294: 24429174 */ addiu $v0,$v0,%lo(var7f1b9174) /* f19c298: 10600003 */ beqz $v1,.L0f19c2a8 diff --git a/src/include/game/data/data_02da90.h b/src/include/game/data/data_02da90.h index 8f55ac5c4..8ea400e38 100644 --- a/src/include/game/data/data_02da90.h +++ b/src/include/game/data/data_02da90.h @@ -16,9 +16,5 @@ extern u32 var80087eb0; extern u32 var80088490; extern u32 var80088494; extern u32 var800884a4; -extern u32 g_MpChallengeIndex; -extern u32 var800884b4; -extern struct challenge g_MpChallenges[NUM_CHALLENGES]; -extern u32 var800887c4; #endif diff --git a/src/include/game/game_19aa80.h b/src/include/game/game_19aa80.h index cf9e55b1c..3b78cc2ad 100644 --- a/src/include/game/game_19aa80.h +++ b/src/include/game/game_19aa80.h @@ -3,20 +3,24 @@ #include #include "types.h" +extern u32 g_MpChallengeIndex; +extern void *g_MpCurrentChallengeConfig; +extern struct challenge g_MpChallenges[NUM_CHALLENGES]; + bool ai0176(void); u32 func0f19ab70(void); void func0f19afdc(void); void func0f19b540(void); char *mpGetChallengeNameBySlot(s32 slot); u32 func0f19b800(void); -s32 mpLoadConfig(s16 arg0, char *buffer, s32 len); +struct mpconfigfull *mpLoadConfig(s32 confignum, u8 *buffer, s32 len); u32 func0f19bb50(void); u32 func0f19bb98(void); u32 func0f19bd4c(void); u32 func0f19bfa0(void); void func0f19c1cc(void); u32 func0f19c288(void); -u32 func0f19c2b0(void); +char *mpconfigGetDescription(struct mpconfigfull *mpconfig); bool mpIsChallengeCompleteForEndscreen(void); bool aiMpInitSimulants(void); void func0f19ab40(void); @@ -26,14 +30,14 @@ s32 mpGetNumAvailableChallenges(void); char *mpChallengeGetName(s32 challengeindex); void mpSetCurrentChallenge(s32 slotnum); s32 mpGetCurrentChallengeIndex(void); -s32 mpLoadChallenge(s32 challengeindex, char *buffer, s32 len); -s32 mpGetNthAvailableChallengeSomething(s32 n, char *buffer, s32 len); -s32 mpLoadCurrentChallenge(char *buffer, s32 len); +struct mpconfigfull *mpLoadChallenge(s32 challengeindex, u8 *buffer, s32 len); +struct mpconfigfull *mpGetNthAvailableChallengeSomething(s32 n, u8 *buffer, s32 len); +struct mpconfigfull *mpLoadCurrentChallenge(u8 *buffer, s32 len); void func0f19c190(void); s32 mpRemoveLock(void); -void mpCalculateVar800884b4(char *buffer, s32 len); -void mpResetVar800884b4(void); -bool mpIsVar800884b4NonZero(void); +void mpLoadAndStoreCurrentChallenge(u8 *buffer, s32 len); +void mpClearCurrentChallenge(void); +bool mpIsChallengeLoaded(void); s32 mpGetNumChallengesAvailable(s32 mpchrnum); char *mpChallengeGetNameWithArg(s32 arg0, s32 challengeindex); bool func0f19c3bc(s32 mpchrnum, s32 index, s32 numplayers); diff --git a/src/include/game/mplayer.h b/src/include/game/mplayer.h index 96a646559..b29d4645b 100644 --- a/src/include/game/mplayer.h +++ b/src/include/game/mplayer.h @@ -107,7 +107,7 @@ u32 mpGetNumPresets(void); bool mpIsPresetUnlocked(s32 presetnum); s32 mpGetNumUnlockedPresets(void); char *mpGetPresetNameBySlot(s32 slot); -void func0f18dcec(s32 arg0); +void func0f18dcec(struct mpconfigfull *mpconfig); u32 func0f18dec4(void); u32 func0f18df5c(void); u32 func0f18e16c(void); diff --git a/src/include/types.h b/src/include/types.h index bd2e63998..9f72fe6c8 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5647,4 +5647,9 @@ struct mpstrings { char aibotnames[8][15]; }; +struct mpconfigfull { + struct mpconfig config; + struct mpstrings strings; +}; + #endif