Decompile func0f19c1cc

This commit is contained in:
Ryan Dwyer 2020-04-13 18:30:04 +10:00
parent 4ea763d52f
commit 1ed6533829
11 changed files with 129 additions and 97 deletions

View File

@ -67,20 +67,20 @@ struct mptrack g_MpTracks[NUM_MPTRACKS] = {
// 2db8c
struct mppreset g_MpPresets[NUM_MPPRESETS] = {
{ L_MPWEAPONS(25), 0x07, {0} }, // "No Shield"
{ L_MPWEAPONS(26), 0x0c, {0} }, // "Automatics"
{ L_MPWEAPONS(27), 0x0d, {0} }, // "Rocket Launcher"
{ L_MPWEAPONS(28), 0x0b, {0} }, // "Simulants"
{ L_MPWEAPONS(29), 0x09, {0} }, // "King of the Hill"
{ L_MPWEAPONS(30), 0x02, {0} }, // "Complex FarSight"
{ L_MPWEAPONS(31), 0x08, {0} }, // "Hold the Briefcase"
{ L_MPWEAPONS(32), 0x01, {0} }, // "Pistol One-Hit Kills"
{ L_MPWEAPONS(33), 0x0a, {0} }, // "Capture the Case"
{ L_MPWEAPONS(34), 0x05, {0} }, // "Cloaking"
{ L_MPWEAPONS(35), 0x00, {0} }, // "Temple Explosives"
{ L_MPWEAPONS(36), 0x04, {0} }, // "Slayer"
{ L_MPWEAPONS(37), 0x03, {0} }, // "Tranquilizr"
{ L_MPWEAPONS(38), 0x06, {0} }, // "Slow Motion"
{ L_MPWEAPONS(25), MPCONFIG_NOSHIELD }, // "No Shield"
{ L_MPWEAPONS(26), MPCONFIG_AUTOMATICS }, // "Automatics"
{ L_MPWEAPONS(27), MPCONFIG_ROCKETS }, // "Rocket Launcher"
{ L_MPWEAPONS(28), MPCONFIG_SIMULANTS }, // "Simulants"
{ L_MPWEAPONS(29), MPCONFIG_SKEDARKING }, // "King of the Hill"
{ L_MPWEAPONS(30), MPCONFIG_FARSIGHT }, // "Complex FarSight"
{ L_MPWEAPONS(31), MPCONFIG_BRIEFCASE }, // "Hold the Briefcase"
{ L_MPWEAPONS(32), MPCONFIG_PISTOLS }, // "Pistol One-Hit Kills"
{ L_MPWEAPONS(33), MPCONFIG_FLAGS }, // "Capture the Case"
{ L_MPWEAPONS(34), MPCONFIG_CLOAKING }, // "Cloaking"
{ L_MPWEAPONS(35), MPCONFIG_TEMPLE }, // "Temple Explosives"
{ L_MPWEAPONS(36), MPCONFIG_SLAYER }, // "Slayer"
{ L_MPWEAPONS(37), MPCONFIG_DRUGGUN }, // "Tranquilizr"
{ L_MPWEAPONS(38), MPCONFIG_SLOWMO }, // "Slow Motion"
};
u32 var80087cbc = 0x00000000;
@ -564,36 +564,36 @@ u32 var800884b4 = 0;
// 2e4d8
struct challenge g_MpChallenges[NUM_CHALLENGES] = {
{ L_OPTIONS(406), 0x0e }, // "Challenge 1"
{ L_OPTIONS(407), 0x0f }, // "Challenge 2"
{ L_OPTIONS(408), 0x10 }, // "Challenge 3"
{ L_OPTIONS(409), 0x11 }, // "Challenge 4"
{ L_OPTIONS(410), 0x12 }, // "Challenge 5"
{ L_OPTIONS(411), 0x13 }, // "Challenge 6"
{ L_OPTIONS(412), 0x14 }, // "Challenge 7"
{ L_OPTIONS(413), 0x15 }, // "Challenge 8"
{ L_OPTIONS(414), 0x16 }, // "Challenge 9"
{ L_OPTIONS(415), 0x17 }, // "Challenge 10"
{ L_OPTIONS(416), 0x18 }, // "Challenge 11"
{ L_OPTIONS(417), 0x19 }, // "Challenge 12"
{ L_OPTIONS(418), 0x1a }, // "Challenge 13"
{ L_OPTIONS(419), 0x1b }, // "Challenge 14"
{ L_OPTIONS(420), 0x1c }, // "Challenge 15"
{ L_OPTIONS(421), 0x1d }, // "Challenge 16"
{ L_OPTIONS(422), 0x1e }, // "Challenge 17"
{ L_OPTIONS(423), 0x1f }, // "Challenge 18"
{ L_OPTIONS(424), 0x20 }, // "Challenge 19"
{ L_OPTIONS(425), 0x21 }, // "Challenge 20"
{ L_OPTIONS(426), 0x22 }, // "Challenge 21"
{ L_OPTIONS(427), 0x23 }, // "Challenge 22"
{ L_OPTIONS(428), 0x24 }, // "Challenge 23"
{ L_OPTIONS(429), 0x25 }, // "Challenge 24"
{ L_OPTIONS(430), 0x26 }, // "Challenge 25"
{ L_OPTIONS(431), 0x27 }, // "Challenge 26"
{ L_OPTIONS(432), 0x28 }, // "Challenge 27"
{ L_OPTIONS(433), 0x29 }, // "Challenge 28"
{ L_OPTIONS(434), 0x2a }, // "Challenge 29"
{ L_OPTIONS(435), 0x2b }, // "Challenge 30"
{ 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;

View File

@ -34,7 +34,7 @@ glabel func0f00b210
/* f00b250: a2000008 */ sb $zero,0x8($s0)
/* f00b254: 02202025 */ or $a0,$s1,$zero
/* f00b258: 02602825 */ or $a1,$s3,$zero
/* f00b25c: 0fc66e96 */ jal func0f19ba58
/* f00b25c: 0fc66e96 */ jal mpLoadChallenge
/* f00b260: 240601ca */ addiu $a2,$zero,0x1ca
/* f00b264: 00402025 */ or $a0,$v0,$zero
/* f00b268: 02402825 */ or $a1,$s2,$zero
@ -59,7 +59,7 @@ glabel func0f00b210
/* f00b2b4: 8e040004 */ lw $a0,0x4($s0)
.L0f00b2b8:
/* f00b2b8: 02602825 */ or $a1,$s3,$zero
/* f00b2bc: 0fc66e45 */ jal func0f19b914
/* f00b2bc: 0fc66e45 */ jal mpLoadConfig
/* f00b2c0: 240601ca */ addiu $a2,$zero,0x1ca
/* f00b2c4: 00402025 */ or $a0,$v0,$zero
/* f00b2c8: 02402825 */ or $a1,$s2,$zero

View File

@ -106,7 +106,7 @@ bool menudialog4MbMainMenu(u32 operation, struct menu_dialog *dialog, struct men
g_Vars.mpquickteam = MPQUICKTEAM_5;
g_Vars.unk00049c = 0;
mpResetVar800884b4();
func0f19c220();
mpRemoveLock();
}
return false;

View File

@ -5683,7 +5683,7 @@ s32 menuhandlerMpAbortChallenge(u32 operation, struct menu_item *item, s32 *valu
}
if (operation == MENUOP_SET) {
func0f19c220();
mpRemoveLock();
}
return 0;

View File

@ -88,7 +88,7 @@ bool menudialogCombatSimulator(u32 operation, struct menu_dialog *dialog, struct
g_Vars.mpquickteam = MPQUICKTEAM_5;
g_Vars.unk00049c = 0;
mpResetVar800884b4();
func0f19c220();
mpRemoveLock();
}
return false;

View File

@ -1036,7 +1036,7 @@ glabel func0f19b800
);
GLOBAL_ASM(
glabel func0f19b914
glabel mpLoadConfig
/* f19b914: 27bdfe38 */ addiu $sp,$sp,-456
/* f19b918: afbf0014 */ sw $ra,0x14($sp)
/* f19b91c: afa401c8 */ sw $a0,0x1c8($sp)
@ -1122,12 +1122,12 @@ glabel func0f19b914
/* f19ba54: 00000000 */ sll $zero,$zero,0x0
);
s32 func0f19ba58(s32 challengeindex, s32 arg1, s32 arg2)
s32 mpLoadChallenge(s32 challengeindex, char *buffer, s32 len)
{
return func0f19b914(g_MpChallenges[challengeindex].unk02, arg1, arg2);
return mpLoadConfig(g_MpChallenges[challengeindex].confignum, buffer, len);
}
s32 mpGetNthAvailableChallengeSomething(s32 n, s32 arg1, s32 arg2)
s32 mpGetNthAvailableChallengeSomething(s32 n, char *buffer, s32 len)
{
s32 numavailable = 0;
s32 challengeindex;
@ -1135,7 +1135,7 @@ s32 mpGetNthAvailableChallengeSomething(s32 n, s32 arg1, s32 arg2)
for (challengeindex = 0; challengeindex != NUM_CHALLENGES; challengeindex++) {
if (mpIsChallengeAvailable(challengeindex)) {
if (numavailable == n) {
return func0f19ba58(challengeindex, arg1, arg2);
return mpLoadChallenge(challengeindex, buffer, len);
}
numavailable++;
@ -1145,9 +1145,9 @@ s32 mpGetNthAvailableChallengeSomething(s32 n, s32 arg1, s32 arg2)
return 0;
}
s32 func0f19bb20(s32 arg0, s32 arg1)
s32 mpLoadCurrentChallenge(char *buffer, s32 len)
{
return func0f19ba58(g_MpChallengeIndex, arg0, arg1);
return mpLoadChallenge(g_MpChallengeIndex, buffer, len);
}
GLOBAL_ASM(
@ -1617,40 +1617,27 @@ void func0f19c190(void)
func0f19afdc();
}
GLOBAL_ASM(
glabel func0f19c1cc
/* f19c1cc: 27bdfe10 */ addiu $sp,$sp,-496
/* f19c1d0: afbf0014 */ sw $ra,0x14($sp)
/* f19c1d4: 27a40020 */ addiu $a0,$sp,0x20
/* f19c1d8: 0fc66ec8 */ jal func0f19bb20
/* f19c1dc: 240501ca */ addiu $a1,$zero,0x1ca
/* f19c1e0: 0fc6373b */ jal func0f18dcec
/* f19c1e4: 00402025 */ or $a0,$v0,$zero
/* f19c1e8: 24040005 */ addiu $a0,$zero,0x5
/* f19c1ec: 0fc62fdc */ jal mpSetLock
/* f19c1f0: 24050005 */ addiu $a1,$zero,0x5
/* f19c1f4: 3c03800b */ lui $v1,%hi(g_MpPlayers)
/* f19c1f8: 3c02800b */ lui $v0,%hi(g_MpPlayers+0x280)
/* f19c1fc: 2442ca38 */ addiu $v0,$v0,%lo(g_MpPlayers+0x280)
/* f19c200: 2463c7b8 */ addiu $v1,$v1,%lo(g_MpPlayers)
.L0f19c204:
/* f19c204: 246300a0 */ addiu $v1,$v1,0xa0
/* f19c208: 1462fffe */ bne $v1,$v0,.L0f19c204
/* f19c20c: a060ff71 */ sb $zero,-0x8f($v1)
/* f19c210: 8fbf0014 */ lw $ra,0x14($sp)
/* f19c214: 27bd01f0 */ addiu $sp,$sp,0x1f0
/* f19c218: 03e00008 */ jr $ra
/* f19c21c: 00000000 */ sll $zero,$zero,0x0
);
s32 func0f19c220(void)
void func0f19c1cc(void)
{
return mpSetLock(0, 0);
s32 i;
char buffer[458];
func0f18dcec(mpLoadCurrentChallenge(buffer, 458));
mpSetLock(MPLOCKTYPE_CHALLENGE, 5);
for (i = 0; i < 4; i++) {
g_MpPlayers[i].base.team = 0;
}
}
void mpCalculateVar800884b4(s32 arg0, s32 arg1)
s32 mpRemoveLock(void)
{
var800884b4 = func0f19bb20(arg0, arg1);
return mpSetLock(MPLOCKTYPE_NONE, 0);
}
void mpCalculateVar800884b4(char *buffer, s32 len)
{
var800884b4 = mpLoadCurrentChallenge(buffer, len);
}
void mpResetVar800884b4(void)

View File

@ -7318,7 +7318,7 @@ glabel func0f18dec4
.L0f18df2c:
/* f18df2c: 8fa4002c */ lw $a0,0x2c($sp)
/* f18df30: 27a50030 */ addiu $a1,$sp,0x30
/* f18df34: 0fc66e45 */ jal func0f19b914
/* f18df34: 0fc66e45 */ jal mpLoadConfig
/* f18df38: 240601ca */ addiu $a2,$zero,0x1ca
/* f18df3c: 0fc6373b */ jal func0f18dcec
/* f18df40: 00402025 */ or $a0,$v0,$zero

View File

@ -1378,6 +1378,51 @@
#define MOVEMODE_GRAB 4
#define MOVEMODE_CUTSCENE 5
#define MPCONFIG_TEMPLE 0x00
#define MPCONFIG_PISTOLS 0x01
#define MPCONFIG_FARSIGHT 0x02
#define MPCONFIG_DRUGGUN 0x03
#define MPCONFIG_SLAYER 0x04
#define MPCONFIG_CLOAKING 0x05
#define MPCONFIG_SLOWMO 0x06
#define MPCONFIG_NOSHIELD 0x07
#define MPCONFIG_BRIEFCASE 0x08
#define MPCONFIG_SKEDARKING 0x09
#define MPCONFIG_FLAGS 0x0a
#define MPCONFIG_SIMULANTS 0x0b
#define MPCONFIG_AUTOMATICS 0x0c
#define MPCONFIG_ROCKETS 0x0d
#define MPCONFIG_CHALLENGE01 0x0e
#define MPCONFIG_CHALLENGE02 0x0f
#define MPCONFIG_CHALLENGE03 0x10
#define MPCONFIG_CHALLENGE04 0x11
#define MPCONFIG_CHALLENGE05 0x12
#define MPCONFIG_CHALLENGE06 0x13
#define MPCONFIG_CHALLENGE07 0x14
#define MPCONFIG_CHALLENGE08 0x15
#define MPCONFIG_CHALLENGE09 0x16
#define MPCONFIG_CHALLENGE10 0x17
#define MPCONFIG_CHALLENGE11 0x18
#define MPCONFIG_CHALLENGE12 0x19
#define MPCONFIG_CHALLENGE13 0x1a
#define MPCONFIG_CHALLENGE14 0x1b
#define MPCONFIG_CHALLENGE15 0x1c
#define MPCONFIG_CHALLENGE16 0x1d
#define MPCONFIG_CHALLENGE17 0x1e
#define MPCONFIG_CHALLENGE18 0x1f
#define MPCONFIG_CHALLENGE19 0x20
#define MPCONFIG_CHALLENGE20 0x21
#define MPCONFIG_CHALLENGE21 0x22
#define MPCONFIG_CHALLENGE22 0x23
#define MPCONFIG_CHALLENGE23 0x24
#define MPCONFIG_CHALLENGE24 0x25
#define MPCONFIG_CHALLENGE25 0x26
#define MPCONFIG_CHALLENGE26 0x27
#define MPCONFIG_CHALLENGE27 0x28
#define MPCONFIG_CHALLENGE28 0x29
#define MPCONFIG_CHALLENGE29 0x2a
#define MPCONFIG_CHALLENGE30 0x2b
#define MPLOCKTYPE_NONE 0
#define MPLOCKTYPE_LASTWINNER 1
#define MPLOCKTYPE_LASTLOSER 2

View File

@ -9,12 +9,12 @@ void func0f19afdc(void);
void func0f19b540(void);
u32 func0f19b6f8(void);
u32 func0f19b800(void);
s32 func0f19b914(s16 arg0, s32 arg1, s32 arg2);
s32 mpLoadConfig(s16 arg0, char *buffer, s32 len);
u32 func0f19bb50(void);
u32 func0f19bb98(void);
u32 func0f19bd4c(void);
u32 func0f19bfa0(void);
u32 func0f19c1cc(void);
void func0f19c1cc(void);
u32 func0f19c288(void);
u32 func0f19c2b0(void);
bool mpIsChallengeCompleteForEndscreen(void);
@ -26,12 +26,12 @@ s32 mpGetNumAvailableChallenges(void);
char *mpChallengeGetName(s32 challengeindex);
void mpSetCurrentChallenge(s32 slotnum);
s32 mpGetCurrentChallengeIndex(void);
s32 func0f19ba58(s32 challengeindex, s32 arg1, s32 arg2);
s32 mpGetNthAvailableChallengeSomething(s32 n, s32 arg1, s32 arg2);
s32 func0f19bb20(s32 arg0, s32 arg1);
s32 mpLoadChallenge(s32 challengeindex, char *buffer, s32 len);
s32 mpGetNthAvailableChallengeSomething(s32 n, char *buffer, s32 len);
s32 mpLoadCurrentChallenge(char *buffer, s32 len);
void func0f19c190(void);
s32 func0f19c220(void);
void mpCalculateVar800884b4(s32 arg0, s32 arg1);
s32 mpRemoveLock(void);
void mpCalculateVar800884b4(char *buffer, s32 len);
void mpResetVar800884b4(void);
bool mpIsVar800884b4NonZero(void);
s32 mpGetNumChallengesAvailable(s32 mpchrnum);

View File

@ -107,7 +107,7 @@ u32 mpGetNumPresets(void);
bool mpIsPresetUnlocked(s32 presetnum);
s32 mpGetNumUnlockedPresets(void);
char *mpGetPresetNameBySlot(s32 slot);
u32 func0f18dcec(void);
void func0f18dcec(s32 arg0);
u32 func0f18dec4(void);
u32 func0f18df5c(void);
u32 func0f18e16c(void);

View File

@ -4109,7 +4109,7 @@ struct savelocation {
struct challenge {
/*0x00*/ u16 name;
/*0x02*/ s16 unk02;
/*0x02*/ s16 confignum;
// One byte for each number of players,
// and 4 bits in each to mark which players completed it
@ -4373,7 +4373,7 @@ struct objectivething {
struct mppreset {
u16 name;
u32 unk04;
u32 confignum;
u8 challenges[16];
};