Attempt to decompile mpLoadConfig

This commit is contained in:
Ryan Dwyer 2020-04-30 21:06:06 +10:00
parent 6f69f7deb5
commit f0522dbfcf
12 changed files with 171 additions and 95 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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:

View File

@ -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();
}

View File

@ -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:

View File

@ -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();
}

View File

@ -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

View File

@ -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

View File

@ -3,20 +3,24 @@
#include <ultra64.h>
#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);

View File

@ -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);

View File

@ -5647,4 +5647,9 @@ struct mpstrings {
char aibotnames[8][15];
};
struct mpconfigfull {
struct mpconfig config;
struct mpstrings strings;
};
#endif