From fd19949c14373b692151df5893d08440a65d8556 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 9 Oct 2020 17:39:28 +1000 Subject: [PATCH] Rename mainLoop to mainEntry, mainTick to mainLoop, func0000e324 to mainTick and decompile mainLoop --- src/boot/boot.c | 2 +- src/game/chr/chraction.c | 2 +- src/game/chr/chraicommands.c | 6 +- src/game/endscreen.c | 4 +- src/game/game_0109d0.c | 2 +- src/game/game_01bea0.c | 36 +- src/game/game_0b63b0.c | 14 +- src/game/game_0f09f0.c | 2 +- src/game/game_102240.c | 2 +- src/game/game_111600.c | 10 +- src/game/game_1371b0.c | 2 +- src/game/game_167ae0.c | 8 +- src/game/game_16e810.c | 2 +- src/game/mplayer.c | 2 +- src/game/propobj.c | 6 +- src/game/title.c | 4 +- src/game/training.c | 2 +- src/gvars/gvars.c | 7 +- src/include/game/data/data_000000.h | 6 +- src/include/game/game_01b0a0.h | 2 +- src/include/game/mplayer.h | 2 +- src/include/game/pak/pak.h | 2 +- src/include/gvars/gvars.h | 4 +- src/include/lib/lib_09660.h | 2 +- src/include/lib/lib_0d520.h | 10 +- src/include/lib/lib_126b0.h | 2 +- src/include/lib/lib_12dc0.h | 6 +- src/include/types.h | 4 +- src/lib/lib_0d520.c | 846 +++++++++------------------- src/lib/lib_12dc0.c | 2 +- 30 files changed, 331 insertions(+), 670 deletions(-) diff --git a/src/boot/boot.c b/src/boot/boot.c index 7f0bab991..95fcc92e5 100644 --- a/src/boot/boot.c +++ b/src/boot/boot.c @@ -808,7 +808,7 @@ void mainproc(u32 value) osSetThreadPri(0, 10); func000019f4(); - mainLoop(); + mainEntry(); } void func00001b10(u32 value) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 8629529f9..53710053b 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -5781,7 +5781,7 @@ glabel var7f1a8d98 /* f034650: 8c591c08 */ lw $t9,0x1c08($v0) /* f034654: 17200005 */ bnez $t9,.L0f03466c /* f034658: 00000000 */ nop -/* f03465c: 0c003a61 */ jal getCurrentStageId +/* f03465c: 0c003a61 */ jal mainGetStageNum /* f034660: afa7014c */ sw $a3,0x14c($sp) /* f034664: 24010026 */ addiu $at,$zero,0x26 /* f034668: 10410735 */ beq $v0,$at,.L0f036340 diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index dedcc7776..2a74897f0 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -2897,7 +2897,7 @@ bool aiIfStageIdLessThan(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - if (cmd[2] > getCurrentStageId()) { + if (cmd[2] > mainGetStageNum()) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); } else { g_Vars.aioffset += 4; @@ -2913,7 +2913,7 @@ bool aiIfStageIdGreaterThan(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - if (getCurrentStageId() > cmd[2]) { + if (mainGetStageNum() > cmd[2]) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]); } else { g_Vars.aioffset += 4; @@ -5004,7 +5004,7 @@ bool aiEndLevel(void) { if (debugAllowEndLevel()) { if (var800624a4) { - func0000e95c(STAGE_TITLE); + mainSetStageNum(STAGE_TITLE); } else if (g_Vars.unk0004d3) { g_Vars.unk0004d6 = 1; } else { diff --git a/src/game/endscreen.c b/src/game/endscreen.c index 85601124f..8a3cd8be7 100644 --- a/src/game/endscreen.c +++ b/src/game/endscreen.c @@ -511,7 +511,7 @@ void endscreenHandleContinue(s32 context) setDifficulty(g_MissionConfig.difficulty); titleSetNextMode(TITLEMODE_SKIP); - func0000e95c(g_MissionConfig.stagenum); + mainSetStageNum(g_MissionConfig.stagenum); func00009ec4(true); } } else if (g_Vars.stagenum == STAGE_SKEDARRUINS) { @@ -520,7 +520,7 @@ void endscreenHandleContinue(s32 context) titleSetNextStage(g_MissionConfig.stagenum); setDifficulty(g_MissionConfig.difficulty); titleSetNextMode(TITLEMODE_SKIP); - func0000e95c(g_MissionConfig.stagenum); + mainSetStageNum(g_MissionConfig.stagenum); func00009ec4(true); } } else { diff --git a/src/game/game_0109d0.c b/src/game/game_0109d0.c index 3d5021666..8c6c032e5 100644 --- a/src/game/game_0109d0.c +++ b/src/game/game_0109d0.c @@ -16,7 +16,7 @@ GLOBAL_ASM( glabel func0f0109d0 /* f0109d0: 27bdffe8 */ addiu $sp,$sp,-24 /* f0109d4: afbf0014 */ sw $ra,0x14($sp) -/* f0109d8: 0c003a61 */ jal getCurrentStageId +/* f0109d8: 0c003a61 */ jal mainGetStageNum /* f0109dc: 00000000 */ nop /* f0109e0: 2841005a */ slti $at,$v0,0x5a /* f0109e4: 1020000a */ beqz $at,.L0f010a10 diff --git a/src/game/game_01bea0.c b/src/game/game_01bea0.c index 2c5631c0f..2a88bb68c 100644 --- a/src/game/game_01bea0.c +++ b/src/game/game_01bea0.c @@ -1156,7 +1156,7 @@ glabel var7f1a863c /* f01cdcc: 03202025 */ or $a0,$t9,$zero /* f01cdd0: 0fc069f9 */ jal titleSetNextMode /* f01cdd4: 24040005 */ addiu $a0,$zero,0x5 -/* f01cdd8: 0c003a57 */ jal func0000e95c +/* f01cdd8: 0c003a57 */ jal mainSetStageNum /* f01cddc: 92440001 */ lbu $a0,0x1($s2) /* f01cde0: 1000002b */ b .L0f01ce90 /* f01cde4: 8fb80120 */ lw $t8,0x120($sp) @@ -1238,7 +1238,7 @@ glabel var7f1a863c /* f01cefc: 10000001 */ b .L0f01cf04 /* f01cf00: 2404005d */ addiu $a0,$zero,0x5d .L0f01cf04: -/* f01cf04: 0c003a57 */ jal func0000e95c +/* f01cf04: 0c003a57 */ jal mainSetStageNum /* f01cf08: 00000000 */ nop /* f01cf0c: 0fc5b4f4 */ jal func0f16d3d0 /* f01cf10: 00000000 */ nop @@ -1338,14 +1338,14 @@ glabel var7f1a863c /* f01d058: 8e6f046c */ lw $t7,0x46c($s3) /* f01d05c: 11e00007 */ beqz $t7,.L0f01d07c /* f01d060: 00000000 */ nop -/* f01d064: 0c003a61 */ jal getCurrentStageId +/* f01d064: 0c003a61 */ jal mainGetStageNum /* f01d068: 00000000 */ nop -/* f01d06c: 0c003a57 */ jal func0000e95c +/* f01d06c: 0c003a57 */ jal mainSetStageNum /* f01d070: 00402025 */ or $a0,$v0,$zero /* f01d074: 100000c8 */ b .L0f01d398 /* f01d078: 00000000 */ nop .L0f01d07c: -/* f01d07c: 0c003a57 */ jal func0000e95c +/* f01d07c: 0c003a57 */ jal mainSetStageNum /* f01d080: 2404005a */ addiu $a0,$zero,0x5a /* f01d084: 100000c4 */ b .L0f01d398 /* f01d088: 00000000 */ nop @@ -1495,9 +1495,9 @@ glabel var7f1a863c .L0f01d298: /* f01d298: 11e00007 */ beqz $t7,.L0f01d2b8 /* f01d29c: 00000000 */ nop -/* f01d2a0: 0c003a61 */ jal getCurrentStageId +/* f01d2a0: 0c003a61 */ jal mainGetStageNum /* f01d2a4: 00000000 */ nop -/* f01d2a8: 0c003a57 */ jal func0000e95c +/* f01d2a8: 0c003a57 */ jal mainSetStageNum /* f01d2ac: 00402025 */ or $a0,$v0,$zero /* f01d2b0: 10000039 */ b .L0f01d398 /* f01d2b4: 00000000 */ nop @@ -1524,7 +1524,7 @@ glabel var7f1a863c /* f01d300: 02c02025 */ or $a0,$s6,$zero /* f01d304: 0fc069f9 */ jal titleSetNextMode /* f01d308: 24040005 */ addiu $a0,$zero,0x5 -/* f01d30c: 0c003a57 */ jal func0000e95c +/* f01d30c: 0c003a57 */ jal mainSetStageNum /* f01d310: 24040026 */ addiu $a0,$zero,0x26 /* f01d314: 10000020 */ b .L0f01d398 /* f01d318: 00000000 */ nop @@ -1535,7 +1535,7 @@ glabel var7f1a863c /* f01d328: 02c02025 */ or $a0,$s6,$zero /* f01d32c: 0fc069f9 */ jal titleSetNextMode /* f01d330: 24040005 */ addiu $a0,$zero,0x5 -/* f01d334: 0c003a57 */ jal func0000e95c +/* f01d334: 0c003a57 */ jal mainSetStageNum /* f01d338: 2404005d */ addiu $a0,$zero,0x5d /* f01d33c: 10000016 */ b .L0f01d398 /* f01d340: 00000000 */ nop @@ -1554,7 +1554,7 @@ glabel var7f1a863c /* f01d370: 02c02025 */ or $a0,$s6,$zero /* f01d374: 0fc069f9 */ jal titleSetNextMode /* f01d378: 24040005 */ addiu $a0,$zero,0x5 -/* f01d37c: 0c003a57 */ jal func0000e95c +/* f01d37c: 0c003a57 */ jal mainSetStageNum /* f01d380: 24040026 */ addiu $a0,$zero,0x26 /* f01d384: 3c12800a */ lui $s2,%hi(g_MissionConfig) /* f01d388: 2652dfe8 */ addiu $s2,$s2,%lo(g_MissionConfig) @@ -2353,7 +2353,7 @@ glabel var7f1a863c // titleSetNextStage(g_MissionConfig.stagenum); // setDifficulty(g_MissionConfig.difficulty); // titleSetNextMode(TITLEMODE_SKIP); -// func0000e95c(g_MissionConfig.stagenum); +// mainSetStageNum(g_MissionConfig.stagenum); // } else { // // cde8 // s32 prevplayernum = g_Vars.currentplayernum; @@ -2386,7 +2386,7 @@ glabel var7f1a863c // var80062940 = 2; // savefileLoadDefaults(&g_SoloSaveFile); // savefileApplyOptions(&g_SoloSaveFile); -// func0000e95c(IS4MB() ? STAGE_4MBMENU : STAGE_CITRAINING); +// mainSetStageNum(IS4MB() ? STAGE_4MBMENU : STAGE_CITRAINING); // func0f16d3d0(); // } else { // // cf1c @@ -2427,9 +2427,9 @@ glabel var7f1a863c // switch (g_MenuData.root) { // case MENUROOT_ENDSCREEN: // d058 // if (g_Vars.restartlevel) { -// func0000e95c(getCurrentStageId()); +// mainSetStageNum(mainGetStageNum()); // } else { -// func0000e95c(STAGE_TITLE); +// mainSetStageNum(STAGE_TITLE); // } // break; // case MENUROOT_MPPAUSE: // d398 @@ -2458,7 +2458,7 @@ glabel var7f1a863c // && ((!g_CheatsActiveBank0 && !g_CheatsActiveBank1) || isStageDifficultyUnlocked(g_MissionConfig.stageindex + 1, g_MissionConfig.difficulty))) { // soloPushSoloModeEndscreen(); // } else if (g_Vars.restartlevel) { -// func0000e95c(getCurrentStageId()); +// mainSetStageNum(mainGetStageNum()); // } else { // mpSetPaused(0); // g_Vars.mplayerisrunning = false; @@ -2474,12 +2474,12 @@ glabel var7f1a863c // titleSetNextStage(STAGE_CITRAINING); // setNumPlayers(1); // titleSetNextMode(TITLEMODE_SKIP); -// func0000e95c(STAGE_CITRAINING); +// mainSetStageNum(STAGE_CITRAINING); // } else { // titleSetNextStage(STAGE_4MBMENU); // setNumPlayers(1); // titleSetNextMode(TITLEMODE_SKIP); -// func0000e95c(STAGE_4MBMENU); +// mainSetStageNum(STAGE_4MBMENU); // } // } // break; @@ -2492,7 +2492,7 @@ glabel var7f1a863c // titleSetNextStage(STAGE_CITRAINING); // setNumPlayers(1); // titleSetNextMode(TITLEMODE_SKIP); -// func0000e95c(STAGE_CITRAINING); +// mainSetStageNum(STAGE_CITRAINING); // g_MissionConfig.iscoop = false; // } // break; diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index 9b820bab9..f65e0e16c 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -3781,7 +3781,7 @@ void func0f0b9674(void) var8009dde0 = 0; var8009dde4 = 80; - func0f165eec(getCurrentStageId(), 0); + func0f165eec(mainGetStageNum(), 0); } GLOBAL_ASM( @@ -4023,7 +4023,7 @@ void func0f0b9a20(void) var80070744 = 0; currentPlayerSetMoveMode(MOVEMODE_WALK); - if (getCurrentStageId() == STAGE_TEST_LEN) { + if (mainGetStageNum() == STAGE_TEST_LEN) { currentPlayerSetFadeColour(0, 0, 0, 1); currentPlayerSetFadeFrac(0, 1); } else if (var80070748 != 0) { @@ -4031,7 +4031,7 @@ void func0f0b9a20(void) currentPlayerSetFadeFrac(60, 0); } - func0f165eec(getCurrentStageId(), 0); + func0f165eec(mainGetStageNum(), 0); currentPlayerEquipWeaponWrapper(1, g_DefaultWeaponArgument); currentPlayerEquipWeaponWrapper(0, g_DefaultWeapon); var8007074c = 0; @@ -4040,7 +4040,7 @@ void func0f0b9a20(void) void func0f0b9afc(void) { if (var800624a4) { - func0000e95c(STAGE_TITLE); + mainSetStageNum(STAGE_TITLE); } else if (g_Vars.unk0004d3) { g_Vars.unk0004d6 = 1; } else { @@ -9987,7 +9987,7 @@ glabel var7f1ad6ac /* f0bf5b8: 27a60078 */ addiu $a2,$sp,0x78 /* f0bf5bc: 0fc456ac */ jal padUnpack /* f0bf5c0: 85a41ba4 */ lh $a0,0x1ba4($t5) -/* f0bf5c4: 0c003a61 */ jal getCurrentStageId +/* f0bf5c4: 0c003a61 */ jal mainGetStageNum /* f0bf5c8: 00000000 */ nop /* f0bf5cc: 3c0c8008 */ lui $t4,%hi(g_Stages+0x310) /* f0bf5d0: 858cffd0 */ lh $t4,%lo(g_Stages+0x310)($t4) @@ -11211,7 +11211,7 @@ glabel var7f1ad6ac // func0f0b9538(); // padUnpack(g_Vars.currentplayer->autocontrol_aimpad, PADFIELD_POS, &pad); // -// if (getCurrentStageId() == g_Stages[STAGE_EXTRACTION].id +// if (mainGetStageNum() == g_Stages[STAGE_EXTRACTION].id // && g_Vars.currentplayer->autocontrol_aimpad == 0x19) { // pad.pos.x -= 100; // } @@ -12664,7 +12664,7 @@ Gfx *func0f0c07c8(Gfx *gdl) // the player could respawn on the other side of the exit trigger. // Additionally, the logic for coopcanrestart is different. if (totalhealth > 0.125f - && !(getCurrentStageId() == STAGE_DEEPSEA && chrHasStageFlag(NULL, 0x00000200))) { + && !(mainGetStageNum() == STAGE_DEEPSEA && chrHasStageFlag(NULL, 0x00000200))) { if (canrestart) { func0f0bb69c(); diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index c89a7c8fb..184c95be1 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -8156,7 +8156,7 @@ glabel func0f0f8040 .L0f0f8100: /* f0f8100: 54610004 */ bnel $v1,$at,.L0f0f8114 /* f0f8104: 8fbf0014 */ lw $ra,0x14($sp) -/* f0f8108: 0c003a57 */ jal func0000e95c +/* f0f8108: 0c003a57 */ jal mainSetStageNum /* f0f810c: 2404005a */ addiu $a0,$zero,0x5a /* f0f8110: 8fbf0014 */ lw $ra,0x14($sp) .L0f0f8114: diff --git a/src/game/game_102240.c b/src/game/game_102240.c index c85844621..b45584c96 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -689,7 +689,7 @@ s32 menuhandlerAcceptMission(u32 operation, struct menuitem *item, union handler setDifficulty(g_MissionConfig.difficulty); titleSetNextMode(TITLEMODE_SKIP); - func0000e95c(g_MissionConfig.stagenum); + mainSetStageNum(g_MissionConfig.stagenum); func00009ec4(1); } diff --git a/src/game/game_111600.c b/src/game/game_111600.c index 9d214be45..b32586d33 100644 --- a/src/game/game_111600.c +++ b/src/game/game_111600.c @@ -341,15 +341,15 @@ GLOBAL_ASM( glabel func0f111b88 /* f111b88: 27bdffe8 */ addiu $sp,$sp,-24 /* f111b8c: afbf0014 */ sw $ra,0x14($sp) -/* f111b90: 0c003a61 */ jal getCurrentStageId +/* f111b90: 0c003a61 */ jal mainGetStageNum /* f111b94: afa40018 */ sw $a0,0x18($sp) /* f111b98: 8fa30018 */ lw $v1,0x18($sp) -/* f111b9c: 0c003a61 */ jal getCurrentStageId +/* f111b9c: 0c003a61 */ jal mainGetStageNum /* f111ba0: afa30018 */ sw $v1,0x18($sp) /* f111ba4: 24010034 */ addiu $at,$zero,0x34 /* f111ba8: 1041000a */ beq $v0,$at,.L0f111bd4 /* f111bac: 8fa30018 */ lw $v1,0x18($sp) -/* f111bb0: 0c003a61 */ jal getCurrentStageId +/* f111bb0: 0c003a61 */ jal mainGetStageNum /* f111bb4: afa30018 */ sw $v1,0x18($sp) /* f111bb8: 2401002a */ addiu $at,$zero,0x2a /* f111bbc: 10410005 */ beq $v0,$at,.L0f111bd4 @@ -371,7 +371,7 @@ s32 currentStageForbidsSlayer(void) { bool forbids = false; - if (getCurrentStageId() != STAGE_ATTACKSHIP && getCurrentStageId() != STAGE_SKEDARRUINS) { + if (mainGetStageNum() != STAGE_ATTACKSHIP && mainGetStageNum() != STAGE_SKEDARRUINS) { forbids = true; } @@ -387,7 +387,7 @@ bool currentPlayerCanHaveAllGunsWeapon(s32 weaponnum) } // @bug: The stage conditions need an OR. This condition can never pass. - if ((getCurrentStageId() == STAGE_ATTACKSHIP && getCurrentStageId() == STAGE_SKEDARRUINS) + if ((mainGetStageNum() == STAGE_ATTACKSHIP && mainGetStageNum() == STAGE_SKEDARRUINS) && weaponnum == WEAPON_SLAYER) { canhave = true; } diff --git a/src/game/game_1371b0.c b/src/game/game_1371b0.c index af3c5c8b0..0133a8056 100644 --- a/src/game/game_1371b0.c +++ b/src/game/game_1371b0.c @@ -4835,7 +4835,7 @@ glabel var7f1b5948 /* f13b470: 0fc068d5 */ jal setNumPlayers /* f13b474: 24040001 */ addiu $a0,$zero,0x1 /* f13b478: 3c048006 */ lui $a0,%hi(g_TitleNextStage) -/* f13b47c: 0c003a57 */ jal func0000e95c +/* f13b47c: 0c003a57 */ jal mainSetStageNum /* f13b480: 8c8424e4 */ lw $a0,%lo(g_TitleNextStage)($a0) /* f13b484: 3c01800a */ lui $at,%hi(g_Vars+0x294) /* f13b488: ac20a254 */ sw $zero,%lo(g_Vars+0x294)($at) diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index f333e138f..3ea237bbb 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -3296,7 +3296,7 @@ glabel var7f1b7868 /* f16af0c: 826c04d5 */ lb $t4,0x4d5($s3) /* f16af10: 5d800004 */ bgtzl $t4,.L0f16af24 /* f16af14: 826b04d3 */ lb $t3,0x4d3($s3) -/* f16af18: 0c003a57 */ jal func0000e95c +/* f16af18: 0c003a57 */ jal mainSetStageNum /* f16af1c: 2404005a */ addiu $a0,$zero,0x5a .L0f16af20: /* f16af20: 826b04d3 */ lb $t3,0x4d3($s3) @@ -3354,7 +3354,7 @@ glabel var7f1b7868 /* f16afec: 01740019 */ multu $t3,$s4 /* f16aff0: 0000c812 */ mflo $t9 /* f16aff4: 02395021 */ addu $t2,$s1,$t9 -/* f16aff8: 0c003a57 */ jal func0000e95c +/* f16aff8: 0c003a57 */ jal mainSetStageNum /* f16affc: 85440000 */ lh $a0,0x0($t2) /* f16b000: 826e04d5 */ lb $t6,0x4d5($s3) /* f16b004: 25d8ffff */ addiu $t8,$t6,-1 @@ -4226,7 +4226,7 @@ void func0f16b96c(void) || func00014eb8(3) < -10) && var800624a4) { if (g_Vars.stagenum != STAGE_TITLE) { titleSetNextMode(TITLEMODE_SKIP); - func0000e95c(STAGE_TITLE); + mainSetStageNum(STAGE_TITLE); } var800624a4 = 0; @@ -4407,7 +4407,7 @@ void func0f16b96c(void) func0f01d860(); func0f063dcc(); - if (getCurrentStageId() == STAGE_CITRAINING) { + if (mainGetStageNum() == STAGE_CITRAINING) { struct trainingdata *trainingdata = dtGetData(); if ((g_Vars.currentplayer->prop->rooms[0] < CIROOM_HOLOSTART || g_Vars.currentplayer->prop->rooms[0] > CIROOM_HOLOEND) diff --git a/src/game/game_16e810.c b/src/game/game_16e810.c index 7b160b5d3..fe9e47480 100644 --- a/src/game/game_16e810.c +++ b/src/game/game_16e810.c @@ -5980,7 +5980,7 @@ glabel func0f1735c0 /* f1738a4: 00002825 */ or $a1,$zero,$zero /* f1738a8: 0fc5cbd7 */ jal func0f172f5c /* f1738ac: 00003025 */ or $a2,$zero,$zero -/* f1738b0: 0c003a61 */ jal getCurrentStageId +/* f1738b0: 0c003a61 */ jal mainGetStageNum /* f1738b4: 00000000 */ nop /* f1738b8: 3c098009 */ lui $t1,%hi(g_Is4Mb) /* f1738bc: 91290af0 */ lbu $t1,%lo(g_Is4Mb)($t1) diff --git a/src/game/mplayer.c b/src/game/mplayer.c index 6e188f812..8a6d8adae 100644 --- a/src/game/mplayer.c +++ b/src/game/mplayer.c @@ -114,7 +114,7 @@ void mpStartMatch(void) } titleSetNextStage(stagenum); - func0000e95c(stagenum); + mainSetStageNum(stagenum); setNumPlayers(numplayers); titleSetNextMode(TITLEMODE_SKIP); diff --git a/src/game/propobj.c b/src/game/propobj.c index 1acf715fc..b06df9dd5 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -46741,7 +46741,7 @@ glabel func0f09044c /* f09047c: c4880004 */ lwc1 $f8,0x4($a0) /* f090480: e4480004 */ swc1 $f8,0x4($v0) /* f090484: c48a0008 */ lwc1 $f10,0x8($a0) -/* f090488: 0c003a61 */ jal getCurrentStageId +/* f090488: 0c003a61 */ jal mainGetStageNum /* f09048c: e44a0008 */ swc1 $f10,0x8($v0) /* f090490: 24010020 */ addiu $at,$zero,0x20 /* f090494: 14410007 */ bne $v0,$at,.L0f0904b4 @@ -47429,8 +47429,8 @@ void alarmTick(void) // For G5, stop alarm after 55 seconds. // For all other levels, stop alarm after 30 seconds. - if ((g_AlarmTimer > 1800 && getCurrentStageId() != STAGE_G5BUILDING) - || (g_AlarmTimer > 3300 && getCurrentStageId() == STAGE_G5BUILDING)) { + if ((g_AlarmTimer > 1800 && mainGetStageNum() != STAGE_G5BUILDING) + || (g_AlarmTimer > 3300 && mainGetStageNum() == STAGE_G5BUILDING)) { alarmDeactivate(); } diff --git a/src/game/title.c b/src/game/title.c index 1ed640d3d..b95a463b6 100644 --- a/src/game/title.c +++ b/src/game/title.c @@ -1321,7 +1321,7 @@ void titleTickPdLogo(void) func0f13b660(); g_TitleNextStage = STAGE_CREDITS; // for alt title screen setNumPlayers(1); - func0000e95c(g_TitleNextStage); + mainSetStageNum(g_TitleNextStage); g_Vars.bondplayernum = 0; g_Vars.coopplayernum = -1; @@ -4452,7 +4452,7 @@ void titleInitSkip(void) viSetViewSize(320, 220); } - func0000e95c(g_TitleNextStage); + mainSetStageNum(g_TitleNextStage); g_Vars.bondplayernum = 0; g_Vars.coopplayernum = -1; diff --git a/src/game/training.c b/src/game/training.c index 9dcd163ae..bdd6352ba 100644 --- a/src/game/training.c +++ b/src/game/training.c @@ -4236,7 +4236,7 @@ s32 frIsInTraining(void) return g_Vars.currentplayer->prop->rooms[0] == CIROOM_FIRINGRANGE && g_FrIsValidWeapon - && getCurrentStageId() == STAGE_CITRAINING; + && mainGetStageNum() == STAGE_CITRAINING; } void frCalculateHit(struct defaultobj *obj, struct coord *hitpos, f32 maulercharge) diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 1205fe7c1..57cdae514 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -2565,12 +2565,7 @@ u32 var8008db20 = 0; u32 var8008db24 = 0; u32 var8008db28 = 0; u32 var8008db2c = 0; -u32 var8008db30 = 0; -u32 var8008db34 = 0; -u32 var8008db38 = 0; -u32 var8008db3c = 0; -u32 var8008db40 = 0; -u32 var8008db44 = 0; +OSMesgQueue var8008db30 = {0}; u32 var8008db48 = 0; u32 var8008db4c = 0; u32 var8008db50 = 0; diff --git a/src/include/game/data/data_000000.h b/src/include/game/data/data_000000.h index 14d9175a9..d9ae7eff0 100644 --- a/src/include/game/data/data_000000.h +++ b/src/include/game/data/data_000000.h @@ -87,14 +87,14 @@ extern u32 var8005d5bc; extern u32 var8005d880; extern u32 var8005d994; extern u8 var8005d9a0; -extern u32 var8005d9c8; +extern s32 var8005d9c8; extern u32 var8005d9cc; extern s32 var8005d9d0; -extern u32 var8005d9d4; +extern s32 var8005d9d4; extern u32 var8005dcc8; extern u32 var8005dcf0; extern u32 var8005dd1c; -extern s32 var8005dd54; +extern s32 g_MainStageNum; extern u32 var8005dd5c; extern u32 var8005dd7c; extern u32 var8005dda0; diff --git a/src/include/game/game_01b0a0.h b/src/include/game/game_01b0a0.h index b098e5dea..50024c50a 100644 --- a/src/include/game/game_01b0a0.h +++ b/src/include/game/game_01b0a0.h @@ -7,7 +7,7 @@ f32 pdmodeGetReaction(void); f32 pdmodeGetHealth(void); f32 pdmodeGetDamage(void); f32 pdmodeGetAccuracy(void); -u32 func0f01b148(void); +void func0f01b148(u32 arg0); void titleSetNextStage(s32 stagenum); void activemenuTick(void); diff --git a/src/include/game/mplayer.h b/src/include/game/mplayer.h index 97c24abb0..3083f0d8a 100644 --- a/src/include/game/mplayer.h +++ b/src/include/game/mplayer.h @@ -6,7 +6,7 @@ f32 func0f187770(u8 value); u32 func0f187838(void); void mpStartMatch(void); -u32 func0f187944(void); +void func0f187944(void); void func0f187e70(void); void func0f187fbc(s32 playernum); void func0f187fec(void); diff --git a/src/include/game/pak/pak.h b/src/include/game/pak/pak.h index 1cbccf130..6037e93d2 100644 --- a/src/include/game/pak/pak.h +++ b/src/include/game/pak/pak.h @@ -18,7 +18,7 @@ u32 func0f116888(void); s32 func0f1168c4(s8 arg0, u32 *arg1); u32 func0f116914(void); u32 func0f11693c(void); -u32 func0f116994(void); +void func0f116994(void); u32 func0f1169c8(void); u32 func0f116aec(void); u32 func0f116b5c(void); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 5aac1e38d..c4ce2370b 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -80,7 +80,7 @@ struct g_vars { /*000310*/ u32 unk000310; /*000314*/ bool mplayerisrunning; /*000318*/ bool normmplayerisrunning; - /*00031c*/ u32 unk00031c; + /*00031c*/ s32 lvmpbotlevel; /*000320*/ u32 unk000320; /*000324*/ s32 unk000324; /*000328*/ s32 unk000328; @@ -360,7 +360,7 @@ extern OSThread g_RmonThread; extern OSThread g_IdleThread; extern OSThread var8008d6d0; extern u32 var8008d900; -extern u32 var8008db30; +extern OSMesgQueue var8008db30; extern u32 var8008db48; extern u32 var8008dbd0; extern u32 var8008dca8; diff --git a/src/include/lib/lib_09660.h b/src/include/lib/lib_09660.h index c8fdbc48e..edbe83c69 100644 --- a/src/include/lib/lib_09660.h +++ b/src/include/lib/lib_09660.h @@ -15,7 +15,7 @@ Gfx *debugRenderSomething(Gfx *gdl); u32 func00009ab0(void); u32 func00009b50(void); u32 func00009bf8(void); -u32 func00009c3c(void); +void func00009c3c(s32 stagenum); void func00009ec4(s32 arg0); u32 func00009ed4(void); void func0000a044(void); diff --git a/src/include/lib/lib_0d520.h b/src/include/lib/lib_0d520.h index 1f6e51d52..0cfb1ea82 100644 --- a/src/include/lib/lib_0d520.h +++ b/src/include/lib/lib_0d520.h @@ -4,14 +4,14 @@ #include "types.h" u32 mainInit(void); -void mainLoop(void); +void mainEntry(void); void func0000db30(char *string, u32 *ptr); -u32 mainTick(void); -void func0000e324(void); +void mainLoop(void); +void mainTick(void); void mainEndStage(void); -void func0000e95c(s32 stagenum); +void mainSetStageNum(s32 stagenum); void func0000e990(void); void func0000e9c0(void); -s32 getCurrentStageId(void); +s32 mainGetStageNum(void); #endif diff --git a/src/include/lib/lib_126b0.h b/src/include/lib/lib_126b0.h index 0dbab2cea..c46eb75f3 100644 --- a/src/include/lib/lib_126b0.h +++ b/src/include/lib/lib_126b0.h @@ -10,7 +10,7 @@ u32 func000127b8(void); u32 func00012800(void); u32 func00012914(void); void func00012a0c(void); -u32 func00012a14(void); +void func00012a14(void *ptr, u32 arg1); void func00012a8c(void); void *func00012ab0(u32 size); // some kind of malloc for save files? u32 func00012c3c(void); diff --git a/src/include/lib/lib_12dc0.h b/src/include/lib/lib_12dc0.h index 151f9095f..8289d3995 100644 --- a/src/include/lib/lib_12dc0.h +++ b/src/include/lib/lib_12dc0.h @@ -3,13 +3,13 @@ #include #include "types.h" -u32 func00012e08(void); +void rngSetSeed(u32 amount); u32 func00012e1c(void); u32 func00012e60(void); -u32 func00012efc(void); +void func00012efc(char *string); s32 func00012f30(void); char *func00013010(s32 arg0, char *string); -u32 func000130d4(void); +void func000130d4(s32 *stagenum); u32 random(void); #endif diff --git a/src/include/types.h b/src/include/types.h index edab75e2c..23ecc5fcf 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6940,8 +6940,8 @@ struct bytelist { }; struct stageallocation { - u32 stagenum; - char *allocationstring; + s32 stagenum; + char *string; }; #endif diff --git a/src/lib/lib_0d520.c b/src/lib/lib_0d520.c index 043916a8e..1f110f831 100644 --- a/src/lib/lib_0d520.c +++ b/src/lib/lib_0d520.c @@ -69,16 +69,16 @@ #include "lib/lib_2fa00.h" #include "types.h" -u32 var8005d9b0 = 0x00000000; +s32 var8005d9b0 = 0; s32 g_StageNum = STAGE_TITLE; u32 var8005d9b8 = 0x0004b000; -u32 var8005d9bc = 0x00000000; -u32 var8005d9c0 = 0x00000000; -u32 var8005d9c4 = 0x00000000; -u32 var8005d9c8 = 0x00000001; -u32 var8005d9cc = 0x00000000; -s32 var8005d9d0 = 0x00000000; -u32 var8005d9d4 = 0x00000000; +s32 var8005d9bc = 0; +s32 var8005d9c0 = 0; +s32 var8005d9c4 = 0; +s32 var8005d9c8 = 1; +u32 var8005d9cc = 0; +s32 var8005d9d0 = 0; +s32 var8005d9d4 = 0; struct stageallocation g_StageAllocations8Mb[] = { { STAGE_CITRAINING, "-ml0 -me0 -mgfx120 -mvtx98 -ma400" }, @@ -182,17 +182,6 @@ struct stageallocation g_StageAllocations4Mb[] = { const char var70053a98[] = "-level_"; const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400"; -const char var70053ad4[] = "-hard"; -const char var70053adc[] = "-hard"; -const char var70053ae4[] = "-ma"; -const char var70053ae8[] = "-ma"; -const char var70053aec[] = "-play"; -const char var70053af4[] = "-play"; -const char var70053afc[] = "-coop"; -const char var70053b04[] = "-anti"; -const char var70053b0c[] = "-mpbots"; -const char var70053b14[] = "-play"; -const char var70053b1c[] = ""; u32 var8005dcc8 = 0xbc000006; u32 var8005dccc = 0x00000000; @@ -229,16 +218,8 @@ u32 var8005dd44 = 0x00000000; u32 var8005dd48 = 0x00000000; u32 var8005dd4c = 0x00000000; u32 var8005dd50 = 0x00000000; -s32 var8005dd54 = -1; +s32 g_MainStageNum = -1; u32 var8005dd58 = 0x00000000; -u32 var8005dd5c = 0x00020000; -u32 var8005dd60 = 0x00000000; -u32 var8005dd64 = 0x00000000; -u32 var8005dd68 = 0x00000000; -u32 var8005dd6c = 0x00000000; -u32 var8005dd70 = 0x00000000; -u32 var8005dd74 = 0x00000000; -u32 var8005dd78 = 0x00000000; GLOBAL_ASM( glabel mainInit @@ -635,14 +616,14 @@ glabel mainInit /* dae4: 27bd14d8 */ addiu $sp,$sp,0x14d8 ); -void mainLoop(void) +void mainEntry(void) { mainInit(); func0002f8a0(); func0000f804(); while (true) { - mainTick(); + mainLoop(); } } @@ -651,570 +632,255 @@ void func0000db30(char *string, u32 *ptr) // empty } -GLOBAL_ASM( -glabel mainTick -/* db3c: 27bdff78 */ addiu $sp,$sp,-136 -/* db40: 3c0f8006 */ lui $t7,%hi(var8005dd5c) -/* db44: afbf003c */ sw $ra,0x3c($sp) -/* db48: afbe0038 */ sw $s8,0x38($sp) -/* db4c: afb70034 */ sw $s7,0x34($sp) -/* db50: afb60030 */ sw $s6,0x30($sp) -/* db54: afb5002c */ sw $s5,0x2c($sp) -/* db58: afb40028 */ sw $s4,0x28($sp) -/* db5c: afb30024 */ sw $s3,0x24($sp) -/* db60: afb20020 */ sw $s2,0x20($sp) -/* db64: afb1001c */ sw $s1,0x1c($sp) -/* db68: afb00018 */ sw $s0,0x18($sp) -/* db6c: afa00084 */ sw $zero,0x84($sp) -/* db70: 25efdd5c */ addiu $t7,$t7,%lo(var8005dd5c) -/* db74: 8de10000 */ lw $at,0x0($t7) -/* db78: 8de80004 */ lw $t0,0x4($t7) -/* db7c: 27ae0064 */ addiu $t6,$sp,0x64 -/* db80: adc10000 */ sw $at,0x0($t6) -/* db84: adc80004 */ sw $t0,0x4($t6) -/* db88: 8de8000c */ lw $t0,0xc($t7) -/* db8c: 8de10008 */ lw $at,0x8($t7) -/* db90: adc8000c */ sw $t0,0xc($t6) -/* db94: adc10008 */ sw $at,0x8($t6) -/* db98: 8de10010 */ lw $at,0x10($t7) -/* db9c: 8de80014 */ lw $t0,0x14($t7) -/* dba0: adc10010 */ sw $at,0x10($t6) -/* dba4: adc80014 */ sw $t0,0x14($t6) -/* dba8: 8de8001c */ lw $t0,0x1c($t7) -/* dbac: 8de10018 */ lw $at,0x18($t7) -/* dbb0: adc8001c */ sw $t0,0x1c($t6) -/* dbb4: 0fc5d7e6 */ jal func0f175f98 -/* dbb8: adc10018 */ sw $at,0x18($t6) -/* dbbc: 3c018006 */ lui $at,%hi(var8005d9c4) -/* dbc0: 3c048006 */ lui $a0,%hi(g_StageNum) -/* dbc4: ac20d9c4 */ sw $zero,%lo(var8005d9c4)($at) -/* dbc8: 0c004c35 */ jal func000130d4 -/* dbcc: 2484d9b4 */ addiu $a0,$a0,%lo(g_StageNum) -/* dbd0: 3c098006 */ lui $t1,%hi(var8005d9d4) -/* dbd4: 8d29d9d4 */ lw $t1,%lo(var8005d9d4)($t1) -/* dbd8: 3c028006 */ lui $v0,%hi(g_StageNum) -/* dbdc: 2442d9b4 */ addiu $v0,$v0,%lo(g_StageNum) -/* dbe0: 11200006 */ beqz $t1,.L0000dbfc -/* dbe4: 3c12800a */ lui $s2,%hi(g_Vars) -/* dbe8: 26529fc0 */ addiu $s2,$s2,%lo(g_Vars) -/* dbec: 240a00fd */ addiu $t2,$zero,0xfd -/* dbf0: 240b005b */ addiu $t3,$zero,0x5b -/* dbf4: a64a04e4 */ sh $t2,0x4e4($s2) -/* dbf8: ac4b0000 */ sw $t3,0x0($v0) -.L0000dbfc: -/* dbfc: 3c028006 */ lui $v0,%hi(g_StageNum) -/* dc00: 2442d9b4 */ addiu $v0,$v0,%lo(g_StageNum) -/* dc04: 8c440000 */ lw $a0,0x0($v0) -/* dc08: 3c12800a */ lui $s2,%hi(g_Vars) -/* dc0c: 2401005a */ addiu $at,$zero,0x5a -/* dc10: 10810016 */ beq $a0,$at,.L0000dc6c -/* dc14: 26529fc0 */ addiu $s2,$s2,%lo(g_Vars) -/* dc18: 0fc06c55 */ jal titleSetNextStage -/* dc1c: 00000000 */ nop -/* dc20: 3c0c8006 */ lui $t4,%hi(g_StageNum) -/* dc24: 8d8cd9b4 */ lw $t4,%lo(g_StageNum)($t4) -/* dc28: 2981005a */ slti $at,$t4,0x5a -/* dc2c: 1020000f */ beqz $at,.L0000dc6c -/* dc30: 00000000 */ nop -/* dc34: 0fc06c52 */ jal func0f01b148 -/* dc38: 00002025 */ or $a0,$zero,$zero -/* dc3c: 3c057005 */ lui $a1,%hi(var70053ad4) -/* dc40: 24a53ad4 */ addiu $a1,$a1,%lo(var70053ad4) -/* dc44: 0c004c04 */ jal func00013010 -/* dc48: 24040001 */ addiu $a0,$zero,0x1 -/* dc4c: 10400007 */ beqz $v0,.L0000dc6c -/* dc50: 24040001 */ addiu $a0,$zero,0x1 -/* dc54: 3c057005 */ lui $a1,%hi(var70053adc) -/* dc58: 0c004c04 */ jal func00013010 -/* dc5c: 24a53adc */ addiu $a1,$a1,%lo(var70053adc) -/* dc60: 90440000 */ lbu $a0,0x0($v0) -/* dc64: 0fc5b36a */ jal setDifficulty -/* dc68: 2484ffd0 */ addiu $a0,$a0,-48 -.L0000dc6c: -/* dc6c: 3c028006 */ lui $v0,%hi(g_StageNum) -/* dc70: 2442d9b4 */ addiu $v0,$v0,%lo(g_StageNum) -/* dc74: 8c4d0000 */ lw $t5,0x0($v0) -/* dc78: 24010026 */ addiu $at,$zero,0x26 -/* dc7c: 3c198009 */ lui $t9,%hi(g_Is4Mb) -/* dc80: 15a10007 */ bne $t5,$at,.L0000dca0 -/* dc84: 00000000 */ nop -/* dc88: 93390af0 */ lbu $t9,%lo(g_Is4Mb)($t9) -/* dc8c: 24160001 */ addiu $s6,$zero,0x1 -/* dc90: 2418005d */ addiu $t8,$zero,0x5d -/* dc94: 16d90002 */ bne $s6,$t9,.L0000dca0 -/* dc98: 00000000 */ nop -/* dc9c: ac580000 */ sw $t8,0x0($v0) -.L0000dca0: -/* dca0: 0c012144 */ jal osGetCount -/* dca4: 24160001 */ addiu $s6,$zero,0x1 -/* dca8: 0c004b82 */ jal func00012e08 -/* dcac: 00402025 */ or $a0,$v0,$zero -/* dcb0: 3c178006 */ lui $s7,%hi(var8005dd54) -/* dcb4: 3c138009 */ lui $s3,%hi(var8008db30) -/* dcb8: 3c108006 */ lui $s0,%hi(var8005d9cc) -/* dcbc: 2610d9cc */ addiu $s0,$s0,%lo(var8005d9cc) -/* dcc0: 2673db30 */ addiu $s3,$s3,%lo(var8008db30) -/* dcc4: 26f7dd54 */ addiu $s7,$s7,%lo(var8005dd54) -/* dcc8: 241e0002 */ addiu $s8,$zero,0x2 -/* dccc: 2415ffff */ addiu $s5,$zero,-1 -/* dcd0: 27b40060 */ addiu $s4,$sp,0x60 -.L0000dcd4: -/* dcd4: ae000000 */ sw $zero,0x0($s0) -/* dcd8: 3c0e8006 */ lui $t6,%hi(var8005d9b0) -/* dcdc: 8dced9b0 */ lw $t6,%lo(var8005d9b0)($t6) -/* dce0: 3c018006 */ lui $at,%hi(var8005d9c8) -/* dce4: ac36d9c8 */ sw $s6,%lo(var8005d9c8)($at) -/* dce8: 3c018006 */ lui $at,%hi(var8005d9d0) -/* dcec: afa00060 */ sw $zero,0x60($sp) -/* dcf0: 11c0007b */ beqz $t6,.L0000dee0 -/* dcf4: ac20d9d0 */ sw $zero,%lo(var8005d9d0)($at) -/* dcf8: 3c0f8006 */ lui $t7,%hi(var8005d9c4) -/* dcfc: 8defd9c4 */ lw $t7,%lo(var8005d9c4)($t7) -/* dd00: 3c088009 */ lui $t0,%hi(g_Is4Mb) -/* dd04: 15e00076 */ bnez $t7,.L0000dee0 -/* dd08: 00000000 */ nop -/* dd0c: 91080af0 */ lbu $t0,%lo(g_Is4Mb)($t0) -/* dd10: 02a02825 */ or $a1,$s5,$zero -/* dd14: 3c098006 */ lui $t1,%hi(g_StageNum) -/* dd18: 16c8003a */ bne $s6,$t0,.L0000de04 -/* dd1c: 3c0f8006 */ lui $t7,%hi(g_StageNum) -/* dd20: 8d29d9b4 */ lw $t1,%lo(g_StageNum)($t1) -/* dd24: 2921005a */ slti $at,$t1,0x5a -/* dd28: 1020001e */ beqz $at,.L0000dda4 -/* dd2c: 00000000 */ nop -/* dd30: 0fc068d2 */ jal getNumPlayers -/* dd34: afa5005c */ sw $a1,0x5c($sp) -/* dd38: 28410002 */ slti $at,$v0,0x2 -/* dd3c: 14200019 */ bnez $at,.L0000dda4 -/* dd40: 8fa5005c */ lw $a1,0x5c($sp) -/* dd44: 3c0a8006 */ lui $t2,%hi(g_StageAllocations4Mb) -/* dd48: 8d4adbd0 */ lw $t2,%lo(g_StageAllocations4Mb)($t2) -/* dd4c: 00002825 */ or $a1,$zero,$zero -/* dd50: 3c048006 */ lui $a0,%hi(g_StageNum) -/* dd54: 1140000d */ beqz $t2,.L0000dd8c -/* dd58: 3c0d8006 */ lui $t5,%hi(g_StageAllocations4Mb) -/* dd5c: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -/* dd60: 3c0b8006 */ lui $t3,%hi(g_StageAllocations4Mb) -/* dd64: 2562dbd0 */ addiu $v0,$t3,%lo(g_StageAllocations4Mb) -/* dd68: 8c430000 */ lw $v1,0x0($v0) -/* dd6c: 24840190 */ addiu $a0,$a0,400 -.L0000dd70: -/* dd70: 50830007 */ beql $a0,$v1,.L0000dd90 -/* dd74: 000560c0 */ sll $t4,$a1,0x3 -/* dd78: 8c430008 */ lw $v1,0x8($v0) -/* dd7c: 24a50001 */ addiu $a1,$a1,0x1 -/* dd80: 24420008 */ addiu $v0,$v0,0x8 -/* dd84: 1460fffa */ bnez $v1,.L0000dd70 -/* dd88: 00000000 */ nop -.L0000dd8c: -/* dd8c: 000560c0 */ sll $t4,$a1,0x3 -.L0000dd90: -/* dd90: 01ac6821 */ addu $t5,$t5,$t4 -/* dd94: 8daddbd0 */ lw $t5,%lo(g_StageAllocations4Mb)($t5) -/* dd98: 15a00002 */ bnez $t5,.L0000dda4 -/* dd9c: 00000000 */ nop -/* dda0: 02a02825 */ or $a1,$s5,$zero -.L0000dda4: -/* dda4: 04a10010 */ bgez $a1,.L0000dde8 -/* dda8: 3c198006 */ lui $t9,%hi(g_StageAllocations4Mb) -/* ddac: 8f39dbd0 */ lw $t9,%lo(g_StageAllocations4Mb)($t9) -/* ddb0: 00002825 */ or $a1,$zero,$zero -/* ddb4: 3c048006 */ lui $a0,%hi(g_StageNum) -/* ddb8: 1320000b */ beqz $t9,.L0000dde8 -/* ddbc: 3c188006 */ lui $t8,%hi(g_StageAllocations4Mb) -/* ddc0: 2702dbd0 */ addiu $v0,$t8,%lo(g_StageAllocations4Mb) -/* ddc4: 8c430000 */ lw $v1,0x0($v0) -/* ddc8: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -.L0000ddcc: -/* ddcc: 50830007 */ beql $a0,$v1,.L0000ddec -/* ddd0: 000570c0 */ sll $t6,$a1,0x3 -/* ddd4: 8c430008 */ lw $v1,0x8($v0) -/* ddd8: 24a50001 */ addiu $a1,$a1,0x1 -/* dddc: 24420008 */ addiu $v0,$v0,0x8 -/* dde0: 1460fffa */ bnez $v1,.L0000ddcc -/* dde4: 00000000 */ nop -.L0000dde8: -/* dde8: 000570c0 */ sll $t6,$a1,0x3 -.L0000ddec: -/* ddec: 3c048006 */ lui $a0,%hi(g_StageAllocations4Mb+0x4) -/* ddf0: 008e2021 */ addu $a0,$a0,$t6 -/* ddf4: 0c004bbf */ jal func00012efc -/* ddf8: 8c84dbd4 */ lw $a0,%lo(g_StageAllocations4Mb+0x4)($a0) -/* ddfc: 10000038 */ b .L0000dee0 -/* de00: 00000000 */ nop -.L0000de04: -/* de04: 8defd9b4 */ lw $t7,%lo(g_StageNum)($t7) -/* de08: 29e1005a */ slti $at,$t7,0x5a -/* de0c: 1020001e */ beqz $at,.L0000de88 -/* de10: 00000000 */ nop -/* de14: 0fc068d2 */ jal getNumPlayers -/* de18: afa5005c */ sw $a1,0x5c($sp) -/* de1c: 28410002 */ slti $at,$v0,0x2 -/* de20: 14200019 */ bnez $at,.L0000de88 -/* de24: 8fa5005c */ lw $a1,0x5c($sp) -/* de28: 3c088006 */ lui $t0,%hi(g_StageAllocations8Mb) -/* de2c: 8d08d9d8 */ lw $t0,%lo(g_StageAllocations8Mb)($t0) -/* de30: 00002825 */ or $a1,$zero,$zero -/* de34: 3c048006 */ lui $a0,%hi(g_StageNum) -/* de38: 1100000d */ beqz $t0,.L0000de70 -/* de3c: 3c0b8006 */ lui $t3,%hi(g_StageAllocations8Mb) -/* de40: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -/* de44: 3c098006 */ lui $t1,%hi(g_StageAllocations8Mb) -/* de48: 2522d9d8 */ addiu $v0,$t1,%lo(g_StageAllocations8Mb) -/* de4c: 8c430000 */ lw $v1,0x0($v0) -/* de50: 24840190 */ addiu $a0,$a0,400 -.L0000de54: -/* de54: 50830007 */ beql $a0,$v1,.L0000de74 -/* de58: 000550c0 */ sll $t2,$a1,0x3 -/* de5c: 8c430008 */ lw $v1,0x8($v0) -/* de60: 24a50001 */ addiu $a1,$a1,0x1 -/* de64: 24420008 */ addiu $v0,$v0,0x8 -/* de68: 1460fffa */ bnez $v1,.L0000de54 -/* de6c: 00000000 */ nop -.L0000de70: -/* de70: 000550c0 */ sll $t2,$a1,0x3 -.L0000de74: -/* de74: 016a5821 */ addu $t3,$t3,$t2 -/* de78: 8d6bd9d8 */ lw $t3,%lo(g_StageAllocations8Mb)($t3) -/* de7c: 15600002 */ bnez $t3,.L0000de88 -/* de80: 00000000 */ nop -/* de84: 02a02825 */ or $a1,$s5,$zero -.L0000de88: -/* de88: 04a10010 */ bgez $a1,.L0000decc -/* de8c: 3c0c8006 */ lui $t4,%hi(g_StageAllocations8Mb) -/* de90: 8d8cd9d8 */ lw $t4,%lo(g_StageAllocations8Mb)($t4) -/* de94: 00002825 */ or $a1,$zero,$zero -/* de98: 3c048006 */ lui $a0,%hi(g_StageNum) -/* de9c: 1180000b */ beqz $t4,.L0000decc -/* dea0: 3c0d8006 */ lui $t5,%hi(g_StageAllocations8Mb) -/* dea4: 25a2d9d8 */ addiu $v0,$t5,%lo(g_StageAllocations8Mb) -/* dea8: 8c430000 */ lw $v1,0x0($v0) -/* deac: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -.L0000deb0: -/* deb0: 50830007 */ beql $a0,$v1,.L0000ded0 -/* deb4: 0005c8c0 */ sll $t9,$a1,0x3 -/* deb8: 8c430008 */ lw $v1,0x8($v0) -/* debc: 24a50001 */ addiu $a1,$a1,0x1 -/* dec0: 24420008 */ addiu $v0,$v0,0x8 -/* dec4: 1460fffa */ bnez $v1,.L0000deb0 -/* dec8: 00000000 */ nop -.L0000decc: -/* decc: 0005c8c0 */ sll $t9,$a1,0x3 -.L0000ded0: -/* ded0: 3c048006 */ lui $a0,%hi(g_StageAllocations8Mb+0x4) -/* ded4: 00992021 */ addu $a0,$a0,$t9 -/* ded8: 0c004bbf */ jal func00012efc -/* dedc: 8c84d9dc */ lw $a0,%lo(g_StageAllocations8Mb+0x4)($a0) -.L0000dee0: -/* dee0: 3c018006 */ lui $at,%hi(var8005d9c4) -/* dee4: ac20d9c4 */ sw $zero,%lo(var8005d9c4)($at) -/* dee8: 0c00494a */ jal func00012528 -/* deec: 24040007 */ addiu $a0,$zero,0x7 -/* def0: 0c00494a */ jal func00012528 -/* def4: 24040004 */ addiu $a0,$zero,0x4 -/* def8: 0fc59cbc */ jal func0f1672f0 -/* defc: 24040004 */ addiu $a0,$zero,0x4 -/* df00: 3c057005 */ lui $a1,%hi(var70053ae4) -/* df04: 24a53ae4 */ addiu $a1,$a1,%lo(var70053ae4) -/* df08: 0c004c04 */ jal func00013010 -/* df0c: 02c02025 */ or $a0,$s6,$zero -/* df10: 1040000b */ beqz $v0,.L0000df40 -/* df14: 02c02025 */ or $a0,$s6,$zero -/* df18: 3c057005 */ lui $a1,%hi(var70053ae8) -/* df1c: 0c004c04 */ jal func00013010 -/* df20: 24a53ae8 */ addiu $a1,$a1,%lo(var70053ae8) -/* df24: 00402025 */ or $a0,$v0,$zero -/* df28: 00002825 */ or $a1,$zero,$zero -/* df2c: 0c004d02 */ jal func00013408 -/* df30: 00003025 */ or $a2,$zero,$zero -/* df34: 0002c280 */ sll $t8,$v0,0xa -/* df38: 3c018006 */ lui $at,%hi(var8005d9b8) -/* df3c: ac38d9b8 */ sw $t8,%lo(var8005d9b8)($at) -.L0000df40: -/* df40: 3c048006 */ lui $a0,%hi(var8005d9b8) -/* df44: 8c84d9b8 */ lw $a0,%lo(var8005d9b8)($a0) -/* df48: 0c0048f2 */ jal malloc -/* df4c: 24050004 */ addiu $a1,$zero,0x4 -/* df50: 3c058006 */ lui $a1,%hi(var8005d9b8) -/* df54: 8ca5d9b8 */ lw $a1,%lo(var8005d9b8)($a1) -/* df58: 0c004a85 */ jal func00012a14 -/* df5c: 00402025 */ or $a0,$v0,$zero -/* df60: 3c048006 */ lui $a0,%hi(g_StageNum) -/* df64: 0fc02cc8 */ jal stageLoadCommonLang -/* df68: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -/* df6c: 0fc49e54 */ jal playersUnrefAll -/* df70: 00000000 */ nop -/* df74: 3c0e8006 */ lui $t6,%hi(g_StageNum) -/* df78: 8dced9b4 */ lw $t6,%lo(g_StageNum)($t6) -/* df7c: 02c02025 */ or $a0,$s6,$zero -/* df80: 3c057005 */ lui $a1,%hi(var70053aec) -/* df84: 29c1005a */ slti $at,$t6,0x5a -/* df88: 14200003 */ bnez $at,.L0000df98 -/* df8c: 00000000 */ nop -/* df90: 10000017 */ b .L0000dff0 -/* df94: 00008825 */ or $s1,$zero,$zero -.L0000df98: -/* df98: 0c004c04 */ jal func00013010 -/* df9c: 24a53aec */ addiu $a1,$a1,%lo(var70053aec) -/* dfa0: 1040000b */ beqz $v0,.L0000dfd0 -/* dfa4: 02c08825 */ or $s1,$s6,$zero -/* dfa8: 3c057005 */ lui $a1,%hi(var70053af4) -/* dfac: 24a53af4 */ addiu $a1,$a1,%lo(var70053af4) -/* dfb0: 0c004c04 */ jal func00013010 -/* dfb4: 02c02025 */ or $a0,$s6,$zero -/* dfb8: 00402025 */ or $a0,$v0,$zero -/* dfbc: 00002825 */ or $a1,$zero,$zero -/* dfc0: 0c004d02 */ jal func00013408 -/* dfc4: 00003025 */ or $a2,$zero,$zero -/* dfc8: 10000001 */ b .L0000dfd0 -/* dfcc: 00408825 */ or $s1,$v0,$zero -.L0000dfd0: -/* dfd0: 0fc068d2 */ jal getNumPlayers -/* dfd4: 00000000 */ nop -/* dfd8: 28410002 */ slti $at,$v0,0x2 -/* dfdc: 54200005 */ bnezl $at,.L0000dff4 -/* dfe0: 2a210002 */ slti $at,$s1,0x2 -/* dfe4: 0fc068d2 */ jal getNumPlayers -/* dfe8: 00000000 */ nop -/* dfec: 00408825 */ or $s1,$v0,$zero -.L0000dff0: -/* dff0: 2a210002 */ slti $at,$s1,0x2 -.L0000dff4: -/* dff4: 10200005 */ beqz $at,.L0000e00c -/* dff8: 02c02025 */ or $a0,$s6,$zero -/* dffc: ae400294 */ sw $zero,0x294($s2) -/* e000: ae550298 */ sw $s5,0x298($s2) -/* e004: 10000012 */ b .L0000e050 -/* e008: ae55029c */ sw $s5,0x29c($s2) -.L0000e00c: -/* e00c: 3c057005 */ lui $a1,%hi(var70053afc) -/* e010: 0c004c04 */ jal func00013010 -/* e014: 24a53afc */ addiu $a1,$a1,%lo(var70053afc) -/* e018: 10400005 */ beqz $v0,.L0000e030 -/* e01c: 02c02025 */ or $a0,$s6,$zero -/* e020: ae400294 */ sw $zero,0x294($s2) -/* e024: ae560298 */ sw $s6,0x298($s2) -/* e028: 10000009 */ b .L0000e050 -/* e02c: ae55029c */ sw $s5,0x29c($s2) -.L0000e030: -/* e030: 3c057005 */ lui $a1,%hi(var70053b04) -/* e034: 0c004c04 */ jal func00013010 -/* e038: 24a53b04 */ addiu $a1,$a1,%lo(var70053b04) -/* e03c: 10400004 */ beqz $v0,.L0000e050 -/* e040: 00000000 */ nop -/* e044: ae400294 */ sw $zero,0x294($s2) -/* e048: ae550298 */ sw $s5,0x298($s2) -/* e04c: ae56029c */ sw $s6,0x29c($s2) -.L0000e050: -/* e050: 0fc49e69 */ jal playersAllocate -/* e054: 02202025 */ or $a0,$s1,$zero -/* e058: 3c057005 */ lui $a1,%hi(var70053b0c) -/* e05c: 24a53b0c */ addiu $a1,$a1,%lo(var70053b0c) -/* e060: 0c004c04 */ jal func00013010 -/* e064: 02c02025 */ or $a0,$s6,$zero -/* e068: 10400002 */ beqz $v0,.L0000e074 -/* e06c: 24090003 */ addiu $t1,$zero,0x3 -/* e070: ae56031c */ sw $s6,0x31c($s2) -.L0000e074: -/* e074: 8e4f0298 */ lw $t7,0x298($s2) -/* e078: 3c01800b */ lui $at,%hi(g_MpSetup+0x16) -/* e07c: 05e10004 */ bgez $t7,.L0000e090 -/* e080: 00000000 */ nop -/* e084: 8e48029c */ lw $t0,0x29c($s2) -/* e088: 05020006 */ bltzl $t0,.L0000e0a4 -/* e08c: 8e4a0470 */ lw $t2,0x470($s2) -.L0000e090: -/* e090: 0fc61e51 */ jal func0f187944 -/* e094: a429cb9e */ sh $t1,%lo(g_MpSetup+0x16)($at) -/* e098: 10000033 */ b .L0000e168 -/* e09c: 00000000 */ nop -/* e0a0: 8e4a0470 */ lw $t2,0x470($s2) -.L0000e0a4: -/* e0a4: 51400006 */ beqzl $t2,.L0000e0c0 -/* e0a8: 8e4b0314 */ lw $t3,0x314($s2) -/* e0ac: 0fc61e51 */ jal func0f187944 -/* e0b0: 00000000 */ nop -/* e0b4: 1000002c */ b .L0000e168 -/* e0b8: 00000000 */ nop -/* e0bc: 8e4b0314 */ lw $t3,0x314($s2) -.L0000e0c0: -/* e0c0: 2a210002 */ slti $at,$s1,0x2 -/* e0c4: 15600028 */ bnez $t3,.L0000e168 -/* e0c8: 00000000 */ nop -/* e0cc: 5020000a */ beqzl $at,.L0000e0f8 -/* e0d0: 240d0001 */ addiu $t5,$zero,0x1 -/* e0d4: 8e4c031c */ lw $t4,0x31c($s2) -/* e0d8: 02c02025 */ or $a0,$s6,$zero -/* e0dc: 3c057005 */ lui $a1,%hi(var70053b14) -/* e0e0: 55800005 */ bnezl $t4,.L0000e0f8 -/* e0e4: 240d0001 */ addiu $t5,$zero,0x1 -/* e0e8: 0c004c04 */ jal func00013010 -/* e0ec: 24a53b14 */ addiu $a1,$a1,%lo(var70053b14) -/* e0f0: 1040001d */ beqz $v0,.L0000e168 -/* e0f4: 240d0001 */ addiu $t5,$zero,0x1 -.L0000e0f8: -/* e0f8: 3c01800b */ lui $at,%hi(g_MpSetup+0x16) -/* e0fc: a42dcb9e */ sh $t5,%lo(g_MpSetup+0x16)($at) -/* e100: 2a210002 */ slti $at,$s1,0x2 -/* e104: 14200006 */ bnez $at,.L0000e120 -/* e108: 3c0a8006 */ lui $t2,%hi(g_StageNum) -/* e10c: 3c02800b */ lui $v0,%hi(g_MpSetup) -/* e110: 2442cb88 */ addiu $v0,$v0,%lo(g_MpSetup) -/* e114: 94590016 */ lhu $t9,0x16($v0) -/* e118: 37380002 */ ori $t8,$t9,0x2 -/* e11c: a4580016 */ sh $t8,0x16($v0) -.L0000e120: -/* e120: 2a210003 */ slti $at,$s1,0x3 -/* e124: 14200005 */ bnez $at,.L0000e13c -/* e128: 3c02800b */ lui $v0,%hi(g_MpSetup) -/* e12c: 2442cb88 */ addiu $v0,$v0,%lo(g_MpSetup) -/* e130: 944e0016 */ lhu $t6,0x16($v0) -/* e134: 35cf0004 */ ori $t7,$t6,0x4 -/* e138: a44f0016 */ sh $t7,0x16($v0) -.L0000e13c: -/* e13c: 2a210004 */ slti $at,$s1,0x4 -/* e140: 14200005 */ bnez $at,.L0000e158 -/* e144: 3c08800b */ lui $t0,%hi(g_MpSetup+0x16) -/* e148: 9508cb9e */ lhu $t0,%lo(g_MpSetup+0x16)($t0) -/* e14c: 3c01800b */ lui $at,%hi(g_MpSetup+0x16) -/* e150: 35090008 */ ori $t1,$t0,0x8 -/* e154: a429cb9e */ sh $t1,%lo(g_MpSetup+0x16)($at) -.L0000e158: -/* e158: 8d4ad9b4 */ lw $t2,%lo(g_StageNum)($t2) -/* e15c: 3c01800b */ lui $at,%hi(g_MpSetup+0x11) -/* e160: 0fc61e51 */ jal func0f187944 -/* e164: a02acb99 */ sb $t2,%lo(g_MpSetup+0x11)($at) -.L0000e168: -/* e168: 0fc59cd4 */ jal func0f167350 -/* e16c: 00000000 */ nop -/* e170: 0c004f7f */ jal func00013dfc -/* e174: 00000000 */ nop -/* e178: 0c004de6 */ jal func00013798 -/* e17c: 00000000 */ nop -/* e180: 3c048006 */ lui $a0,%hi(g_StageNum) -/* e184: 0fc5d823 */ jal func0f17608c -/* e188: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -/* e18c: 3c048006 */ lui $a0,%hi(g_StageNum) -/* e190: 0fc59f9f */ jal func0f167e7c -/* e194: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -/* e198: 3c048006 */ lui $a0,%hi(g_StageNum) -/* e19c: 0c00270f */ jal func00009c3c -/* e1a0: 8c84d9b4 */ lw $a0,%lo(g_StageNum)($a0) -/* e1a4: 0fc5b3a5 */ jal func0f16ce94 -/* e1a8: 00000000 */ nop -/* e1ac: 0c0026a4 */ jal func00009a90 -/* e1b0: 00000000 */ nop -/* e1b4: 02602025 */ or $a0,$s3,$zero -/* e1b8: 02802825 */ or $a1,$s4,$zero -/* e1bc: 0c0121bc */ jal osRecvMesg -/* e1c0: 00003025 */ or $a2,$zero,$zero -/* e1c4: 10550006 */ beq $v0,$s5,.L0000e1e0 -/* e1c8: 02602025 */ or $a0,$s3,$zero -.L0000e1cc: -/* e1cc: 02802825 */ or $a1,$s4,$zero -/* e1d0: 0c0121bc */ jal osRecvMesg -/* e1d4: 00003025 */ or $a2,$zero,$zero -/* e1d8: 5455fffc */ bnel $v0,$s5,.L0000e1cc -/* e1dc: 02602025 */ or $a0,$s3,$zero -.L0000e1e0: -/* e1e0: 8eeb0000 */ lw $t3,0x0($s7) -/* e1e4: 05620004 */ bltzl $t3,.L0000e1f8 -/* e1e8: 02602025 */ or $a0,$s3,$zero -/* e1ec: 8e0c0000 */ lw $t4,0x0($s0) -/* e1f0: 1180002c */ beqz $t4,.L0000e2a4 -/* e1f4: 02602025 */ or $a0,$s3,$zero -.L0000e1f8: -/* e1f8: 02802825 */ or $a1,$s4,$zero -/* e1fc: 0c0121bc */ jal osRecvMesg -/* e200: 02c03025 */ or $a2,$s6,$zero -/* e204: 8fad0060 */ lw $t5,0x60($sp) -/* e208: 85a30000 */ lh $v1,0x0($t5) -/* e20c: 10760007 */ beq $v1,$s6,.L0000e22c -/* e210: 00000000 */ nop -/* e214: 107e0018 */ beq $v1,$s8,.L0000e278 -/* e218: 24010005 */ addiu $at,$zero,0x5 -/* e21c: 1061001a */ beq $v1,$at,.L0000e288 -/* e220: 240a0004 */ addiu $t2,$zero,0x4 -/* e224: 1000001a */ b .L0000e290 -/* e228: 8eeb0000 */ lw $t3,0x0($s7) -.L0000e22c: -/* e22c: 0c012144 */ jal osGetCount -/* e230: 00000000 */ nop -/* e234: 8e580028 */ lw $t8,0x28($s2) -/* e238: 3c01000b */ lui $at,0xb -/* e23c: 3421ebc2 */ ori $at,$at,0xebc2 -/* e240: 03010019 */ multu $t8,$at -/* e244: 8e590018 */ lw $t9,0x18($s2) -/* e248: 3c01fffa */ lui $at,0xfffa -/* e24c: 34210a1f */ ori $at,$at,0xa1f -/* e250: 00591823 */ subu $v1,$v0,$t9 -/* e254: 00007012 */ mflo $t6 -/* e258: 01c17821 */ addu $t7,$t6,$at -/* e25c: 006f082b */ sltu $at,$v1,$t7 -/* e260: 5420000b */ bnezl $at,.L0000e290 -/* e264: 8eeb0000 */ lw $t3,0x0($s7) -/* e268: 0c0038c9 */ jal func0000e324 -/* e26c: 00000000 */ nop -/* e270: 10000007 */ b .L0000e290 -/* e274: 8eeb0000 */ lw $t3,0x0($s7) -.L0000e278: -/* e278: 8e080000 */ lw $t0,0x0($s0) -/* e27c: 2509ffff */ addiu $t1,$t0,-1 -/* e280: 10000002 */ b .L0000e28c -/* e284: ae090000 */ sw $t1,0x0($s0) -.L0000e288: -/* e288: ae0a0000 */ sw $t2,0x0($s0) -.L0000e28c: -/* e28c: 8eeb0000 */ lw $t3,0x0($s7) -.L0000e290: -/* e290: 0562ffd9 */ bltzl $t3,.L0000e1f8 -/* e294: 02602025 */ or $a0,$s3,$zero -/* e298: 8e0c0000 */ lw $t4,0x0($s0) -/* e29c: 5580ffd6 */ bnezl $t4,.L0000e1f8 -/* e2a0: 02602025 */ or $a0,$s3,$zero -.L0000e2a4: -/* e2a4: 0fc5b2e8 */ jal stageLoad -/* e2a8: 00000000 */ nop -/* e2ac: 0c004965 */ jal func00012594 -/* e2b0: 24040004 */ addiu $a0,$zero,0x4 -/* e2b4: 0c004965 */ jal func00012594 -/* e2b8: 24040007 */ addiu $a0,$zero,0x7 -/* e2bc: 0fc59cbc */ jal func0f1672f0 -/* e2c0: 24040004 */ addiu $a0,$zero,0x4 -/* e2c4: 0c0027b1 */ jal func00009ec4 -/* e2c8: 02c02025 */ or $a0,$s6,$zero -/* e2cc: 0fc45a65 */ jal func0f116994 -/* e2d0: 00000000 */ nop -/* e2d4: 8eed0000 */ lw $t5,0x0($s7) -/* e2d8: 8fb90084 */ lw $t9,0x84($sp) -/* e2dc: 3c018006 */ lui $at,%hi(g_StageNum) -/* e2e0: ac2dd9b4 */ sw $t5,%lo(g_StageNum)($at) -/* e2e4: 1320fe7b */ beqz $t9,.L0000dcd4 -/* e2e8: aef50000 */ sw $s5,0x0($s7) -/* e2ec: 0fc5d7f2 */ jal func0f175fc8 -/* e2f0: 00000000 */ nop -/* e2f4: 8fbf003c */ lw $ra,0x3c($sp) -/* e2f8: 8fb00018 */ lw $s0,0x18($sp) -/* e2fc: 8fb1001c */ lw $s1,0x1c($sp) -/* e300: 8fb20020 */ lw $s2,0x20($sp) -/* e304: 8fb30024 */ lw $s3,0x24($sp) -/* e308: 8fb40028 */ lw $s4,0x28($sp) -/* e30c: 8fb5002c */ lw $s5,0x2c($sp) -/* e310: 8fb60030 */ lw $s6,0x30($sp) -/* e314: 8fb70034 */ lw $s7,0x34($sp) -/* e318: 8fbe0038 */ lw $s8,0x38($sp) -/* e31c: 03e00008 */ jr $ra -/* e320: 27bd0088 */ addiu $sp,$sp,0x88 -); +/** + * This function enters an infinite loop which iterates once per stage load. + * Within this loop is an inner loop which runs very frequently and decides + * whether to run mainTick on each iteration. + */ +void mainLoop(void) +{ + s32 ending = false; + u32 array[] = {0x20000, 0, 0, 0, 0, 0, 0, 0}; + OSMesg msg; + s32 index; + s32 numplayers; + s32 stagenum; -void func0000e324(void) + func0f175f98(); + + var8005d9c4 = 0; + func000130d4(&g_StageNum); + + if (var8005d9d4 != 0) { + g_Vars.unk0004e4 = 253; + g_StageNum = STAGE_BOOTPAKMENU; + } + + if (g_StageNum != STAGE_TITLE) { + titleSetNextStage(g_StageNum); + + if (g_StageNum < STAGE_TITLE) { + func0f01b148(0); + + if (func00013010(1, "-hard")) { + setDifficulty(func00013010(1, "-hard")[0] - '0'); + } + } + } + + if (g_StageNum == STAGE_CITRAINING && IS4MB()) { + g_StageNum = STAGE_4MBMENU; + } + + rngSetSeed(osGetCount()); + + // Outer loop - this is infinite because ending is never changed + while (!ending) { + var8005d9cc = 0; + var8005d9c8 = 1; + msg = NULL; + var8005d9d0 = 0; + + if (var8005d9b0 && var8005d9c4 == 0) { + index = -1; + + if (IS4MB()) { + if (g_StageNum < STAGE_TITLE && getNumPlayers() >= 2) { + index = 0; + + while (g_StageAllocations4Mb[index].stagenum) { + if (g_StageAllocations4Mb[index].stagenum == g_StageNum + 400) { + break; + } + + index++; + } + + if (g_StageAllocations4Mb[index].stagenum == 0) { + index = -1; + } + } + + if (index) { + // empty + } + + if (index < 0) { + index = 0; + + while (g_StageAllocations4Mb[index].stagenum) { + if (g_StageNum == g_StageAllocations4Mb[index].stagenum) { + break; + } + + index++; + } + } + + func00012efc(g_StageAllocations4Mb[index].string); + } else { + // 8MB + if (g_StageNum < STAGE_TITLE && getNumPlayers() >= 2) { + index = 0; + + while (g_StageAllocations8Mb[index].stagenum) { + if (g_StageNum + 400 == g_StageAllocations8Mb[index].stagenum) { + break; + } + + index++; + } + + if (g_StageAllocations8Mb[index].stagenum == 0) { + index = -1; + } + } + + if (index < 0) { + index = 0; + + while (g_StageAllocations8Mb[index].stagenum) { + if (g_StageNum == g_StageAllocations8Mb[index].stagenum) { + break; + } + + index++; + } + } + + func00012efc(g_StageAllocations8Mb[index].string); + } + } + + var8005d9c4 = 0; + + func00012528(7); + func00012528(4); + func0f1672f0(4); + + if (func00013010(1, "-ma")) { + var8005d9b8 = func00013408(func00013010(1, "-ma"), NULL, 0) * 1024; + } + + func00012a14(malloc(var8005d9b8, 4), var8005d9b8); + stageLoadCommonLang(g_StageNum); + playersUnrefAll(); + + if (g_StageNum >= STAGE_TITLE) { + numplayers = 0; + } else { + if (func00013010(1, "-play")) { + numplayers = func00013408(func00013010(1, "-play"), NULL, 0); + } else { + numplayers = 1; + } + + if (getNumPlayers() >= 2) { + numplayers = getNumPlayers(); + } + } + + if (numplayers < 2) { + g_Vars.bondplayernum = 0; + g_Vars.coopplayernum = -1; + g_Vars.antiplayernum = -1; + } else if (func00013010(1, "-coop")) { + g_Vars.bondplayernum = 0; + g_Vars.coopplayernum = 1; + g_Vars.antiplayernum = -1; + } else if (func00013010(1, "-anti")) { + g_Vars.bondplayernum = 0; + g_Vars.coopplayernum = -1; + g_Vars.antiplayernum = 1; + } + + playersAllocate(numplayers); + + if (func00013010(1, "-mpbots")) { + g_Vars.lvmpbotlevel = 1; + } + + if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { + g_MpSetup.chrslots = 0x03; + func0f187944(); + } else if (g_Vars.perfectbuddynum) { + func0f187944(); + } else if (g_Vars.mplayerisrunning == false + && (numplayers >= 2 || g_Vars.lvmpbotlevel || func00013010(1, "-play"))) { + g_MpSetup.chrslots = 1; + + if (numplayers >= 2) { + g_MpSetup.chrslots |= 1 << 1; + } + + if (numplayers >= 3) { + g_MpSetup.chrslots |= 1 << 2; + } + + if (numplayers >= 4) { + g_MpSetup.chrslots |= 1 << 3; + } + + g_MpSetup.stagenum = g_StageNum; + func0f187944(); + } + + func0f167350(); + func00013dfc(); + func00013798(); + func0f17608c(g_StageNum); + func0f167e7c(g_StageNum); + func00009c3c(g_StageNum); + func0f16ce94(); + func00009a90(); + + while (osRecvMesg(&var8008db30, &msg, OS_MESG_NOBLOCK) != -1) { + // empty + } + + while ((g_MainStageNum < 0 || var8005d9cc != 0)) { + s32 tmp; + osRecvMesg(&var8008db30, &msg, OS_MESG_BLOCK); + + switch (*(s16 *)msg) { + case 1: + tmp = osGetCount() - g_Vars.thisframetime; + if (tmp >= g_Vars.mininc60 * 781250 - 781250 / 2) { + mainTick(); + } + break; + case 2: + var8005d9cc--; + break; + case 5: + var8005d9cc = 4; + break; + } + } + + stageLoad(); + func00012594(4); + func00012594(7); + func0f1672f0(4); + func00009ec4(1); + func0f116994(); + + g_StageNum = g_MainStageNum; + g_MainStageNum = -1; + } + + // Unreachable + func0f175fc8(); +} + +void mainTick(void) { Gfx *gdl; Gfx *gdlstart; u32 array[] = {0x20000, 0, 0, 0, 0, 0, 0, 0}; s32 i; - if (var8005dd54 < 0 && var8005d9cc < 2) { + if (g_MainStageNum < 0 && var8005d9cc < 2) { func0f16ce94(); func00009a98(); func00009a90(); @@ -1312,14 +978,14 @@ void mainEndStage(void) var8005d9d0 = 1; } -void func0000e95c(s32 stagenum) +void mainSetStageNum(s32 stagenum) { func0f11c6d0(); - var8005dd54 = stagenum; + g_MainStageNum = stagenum; } -s32 getCurrentStageId(void) +s32 mainGetStageNum(void) { return g_StageNum; } diff --git a/src/lib/lib_12dc0.c b/src/lib/lib_12dc0.c index 5ac271ae2..c4c41dd22 100644 --- a/src/lib/lib_12dc0.c +++ b/src/lib/lib_12dc0.c @@ -54,7 +54,7 @@ glabel random //} GLOBAL_ASM( -glabel func00012e08 +glabel rngSetSeed /* 12e08: 64840001 */ daddiu $a0,$a0,0x1 /* 12e0c: 3c018006 */ lui $at,%hi(rand_seed) /* 12e10: fc24ee00 */ sd $a0,%lo(rand_seed)($at)