diff --git a/src/game/data/data_02da90.c b/src/game/data/data_02da90.c index 1270d37fe..bf386e2df 100644 --- a/src/game/data/data_02da90.c +++ b/src/game/data/data_02da90.c @@ -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; diff --git a/src/game/game_00b210.c b/src/game/game_00b210.c index b45dc22b9..b4d63bc4b 100644 --- a/src/game/game_00b210.c +++ b/src/game/game_00b210.c @@ -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 diff --git a/src/game/game_10c9c0.c b/src/game/game_10c9c0.c index 51a6f28a8..2b8f45526 100644 --- a/src/game/game_10c9c0.c +++ b/src/game/game_10c9c0.c @@ -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; diff --git a/src/game/game_179060.c b/src/game/game_179060.c index 2f86ec139..f30ad6868 100644 --- a/src/game/game_179060.c +++ b/src/game/game_179060.c @@ -5683,7 +5683,7 @@ s32 menuhandlerMpAbortChallenge(u32 operation, struct menu_item *item, s32 *valu } if (operation == MENUOP_SET) { - func0f19c220(); + mpRemoveLock(); } return 0; diff --git a/src/game/game_17f930.c b/src/game/game_17f930.c index 4a075669f..d1d4329ca 100644 --- a/src/game/game_17f930.c +++ b/src/game/game_17f930.c @@ -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; diff --git a/src/game/game_19aa80.c b/src/game/game_19aa80.c index 9d06f9a89..a6ff811d6 100644 --- a/src/game/game_19aa80.c +++ b/src/game/game_19aa80.c @@ -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) diff --git a/src/game/mplayer.c b/src/game/mplayer.c index 874a80211..c58c8c82c 100644 --- a/src/game/mplayer.c +++ b/src/game/mplayer.c @@ -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 diff --git a/src/include/constants.h b/src/include/constants.h index f38fa4764..c4f34afa8 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -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 diff --git a/src/include/game/game_19aa80.h b/src/include/game/game_19aa80.h index 116c7a95e..eb4f43752 100644 --- a/src/include/game/game_19aa80.h +++ b/src/include/game/game_19aa80.h @@ -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); diff --git a/src/include/game/mplayer.h b/src/include/game/mplayer.h index d2ccef719..96a646559 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); -u32 func0f18dcec(void); +void func0f18dcec(s32 arg0); u32 func0f18dec4(void); u32 func0f18df5c(void); u32 func0f18e16c(void); diff --git a/src/include/types.h b/src/include/types.h index ba5d7b971..60a7b7760 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -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]; };