From 282ec7dcd4d350cff071382da8e850cf97aa9524 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 3 Jan 2021 14:16:33 +1000 Subject: [PATCH] Decompile mpPrepareScenario --- src/game/core.c | 2 +- src/game/mplayer/options.c | 268 ++++++++++--------------------- src/include/game/mplayer/setup.h | 14 +- 3 files changed, 97 insertions(+), 187 deletions(-) diff --git a/src/game/core.c b/src/game/core.c index 54b823ceb..c79f3cd33 100644 --- a/src/game/core.c +++ b/src/game/core.c @@ -360,7 +360,7 @@ void coreLoadStage(s32 stagenum) func0f011110(); func0f0108d0(); func0f00eb64(stagenum); - func0f18620c(); + mpPrepareScenario(); func0f00c240(); func0f00c490(); func0f00b510(); diff --git a/src/game/mplayer/options.c b/src/game/mplayer/options.c index fc2e5cd8b..7dc48e04e 100644 --- a/src/game/mplayer/options.c +++ b/src/game/mplayer/options.c @@ -908,185 +908,95 @@ f32 scenarioCallback2c(f32 arg0, struct coord *pos, s16 *rooms, struct prop *pro return func0f0b72a8(arg0, pos, rooms, prop); } -GLOBAL_ASM( -glabel func0f18620c -.late_rodata -glabel var7f1b89bc -.word func0f18620c+0xd8 # f1862e4 -glabel var7f1b89c0 -.word func0f18620c+0xc8 # f1862d4 -glabel var7f1b89c4 -.word func0f18620c+0xe0 # f1862ec -glabel var7f1b89c8 -.word func0f18620c+0x48 # f186254 -glabel var7f1b89cc -.word func0f18620c+0x54 # f186260 -glabel var7f1b89d0 -.word func0f18620c+0x114 # f186320 -glabel var7f1b89d4 -.word func0f18620c+0x194 # f1863a0 -glabel var7f1b89d8 -.word func0f18620c+0x19c # f1863a8 -glabel var7f1b89dc -.word func0f18620c+0x1a4 # f1863b0 -glabel var7f1b89e0 -.word func0f18620c+0x1ac # f1863b8 -glabel var7f1b89e4 -.word func0f18620c+0x1b4 # f1863c0 -glabel var7f1b89e8 -.word func0f18620c+0x1bc # f1863c8 -glabel var7f1b89ec -.word func0f18620c+0x1c4 # f1863d0 -glabel var7f1b89f0 -.word func0f18620c+0x1cc # f1863d8 -glabel var7f1b89f4 -.word func0f18620c+0x11c # f186328 -glabel var7f1b89f8 -.word func0f18620c+0x11c # f186328 -glabel var7f1b89fc -.word func0f18620c+0x174 # f186380 -.text -/* f18620c: 27bdffe0 */ addiu $sp,$sp,-32 -/* f186210: afb10018 */ sw $s1,0x18($sp) -/* f186214: 3c11800b */ lui $s1,%hi(g_MpSetup) -/* f186218: 2631cb88 */ addiu $s1,$s1,%lo(g_MpSetup) -/* f18621c: 922e0010 */ lbu $t6,0x10($s1) -/* f186220: afb00014 */ sw $s0,0x14($sp) -/* f186224: 3c10800a */ lui $s0,%hi(g_StageSetup+0xc) -/* f186228: 25cfffff */ addiu $t7,$t6,-1 -/* f18622c: 2de10005 */ sltiu $at,$t7,0x5 -/* f186230: afbf001c */ sw $ra,0x1c($sp) -/* f186234: 1020002d */ beqz $at,.L0f1862ec -/* f186238: 8e10d03c */ lw $s0,%lo(g_StageSetup+0xc)($s0) -/* f18623c: 000f7880 */ sll $t7,$t7,0x2 -/* f186240: 3c017f1c */ lui $at,%hi(var7f1b89bc) -/* f186244: 002f0821 */ addu $at,$at,$t7 -/* f186248: 8c2f89bc */ lw $t7,%lo(var7f1b89bc)($at) -/* f18624c: 01e00008 */ jr $t7 -/* f186250: 00000000 */ nop -/* f186254: 3c01800b */ lui $at,%hi(g_ScenarioData+0xc) -/* f186258: 10000024 */ b .L0f1862ec -/* f18625c: a420c11c */ sh $zero,%lo(g_ScenarioData+0xc)($at) -/* f186260: 3c18800b */ lui $t8,%hi(g_ScenarioData) -/* f186264: 2707c110 */ addiu $a3,$t8,%lo(g_ScenarioData) -/* f186268: 3c08800b */ lui $t0,%hi(g_ScenarioData+0x40) -/* f18626c: 2508c150 */ addiu $t0,$t0,%lo(g_ScenarioData+0x40) -/* f186270: 00e03025 */ or $a2,$a3,$zero -/* f186274: 2405ffff */ addiu $a1,$zero,-1 -/* f186278: 24040006 */ addiu $a0,$zero,0x6 -.L0f18627c: -/* f18627c: a4c50018 */ sh $a1,0x18($a2) -/* f186280: a4c0001a */ sh $zero,0x1a($a2) -/* f186284: 00001025 */ or $v0,$zero,$zero -/* f186288: 00e01825 */ or $v1,$a3,$zero -.L0f18628c: -/* f18628c: 24420001 */ addiu $v0,$v0,0x1 -/* f186290: 24630002 */ addiu $v1,$v1,0x2 -/* f186294: 1444fffd */ bne $v0,$a0,.L0f18628c -/* f186298: a465001a */ sh $a1,0x1a($v1) -/* f18629c: 24e70010 */ addiu $a3,$a3,0x10 -/* f1862a0: 00e8082b */ sltu $at,$a3,$t0 -/* f1862a4: 1420fff5 */ bnez $at,.L0f18627c -/* f1862a8: 24c60010 */ addiu $a2,$a2,0x10 -/* f1862ac: 3c02800b */ lui $v0,%hi(g_ScenarioData) -/* f1862b0: 3c03800b */ lui $v1,%hi(g_ScenarioData+0x8) -/* f1862b4: 2463c118 */ addiu $v1,$v1,%lo(g_ScenarioData+0x8) -/* f1862b8: 2442c110 */ addiu $v0,$v0,%lo(g_ScenarioData) -.L0f1862bc: -/* f1862bc: 24420002 */ addiu $v0,$v0,0x2 -/* f1862c0: a440fffe */ sh $zero,-0x2($v0) -/* f1862c4: 1443fffd */ bne $v0,$v1,.L0f1862bc -/* f1862c8: a4450006 */ sh $a1,0x6($v0) -/* f1862cc: 10000007 */ b .L0f1862ec -/* f1862d0: 00000000 */ nop -/* f1862d4: 0fc60afd */ jal func0f182bf4 -/* f1862d8: 00000000 */ nop -/* f1862dc: 10000003 */ b .L0f1862ec -/* f1862e0: 00000000 */ nop -/* f1862e4: 0fc6001e */ jal func0f180078 -/* f1862e8: 00000000 */ nop -.L0f1862ec: -/* f1862ec: 52000042 */ beqzl $s0,.L0f1863f8 -/* f1862f0: 8fbf001c */ lw $ra,0x1c($sp) -/* f1862f4: 8e020000 */ lw $v0,0x0($s0) -/* f1862f8: 2401000c */ addiu $at,$zero,0xc -/* f1862fc: 1041003d */ beq $v0,$at,.L0f1863f4 -/* f186300: 2c41000c */ sltiu $at,$v0,0xc -.L0f186304: -/* f186304: 10200036 */ beqz $at,.L0f1863e0 -/* f186308: 0002c880 */ sll $t9,$v0,0x2 -/* f18630c: 3c017f1c */ lui $at,%hi(var7f1b89d0) -/* f186310: 00390821 */ addu $at,$at,$t9 -/* f186314: 8c3989d0 */ lw $t9,%lo(var7f1b89d0)($at) -/* f186318: 03200008 */ jr $t9 -/* f18631c: 00000000 */ nop -/* f186320: 10000030 */ b .L0f1863e4 -/* f186324: 2610000c */ addiu $s0,$s0,12 -/* f186328: 92220010 */ lbu $v0,0x10($s1) -/* f18632c: 24010005 */ addiu $at,$zero,0x5 -/* f186330: 54410006 */ bnel $v0,$at,.L0f18634c -/* f186334: 24010002 */ addiu $at,$zero,0x2 -/* f186338: 0fc60600 */ jal func0f181800 -/* f18633c: 02002025 */ or $a0,$s0,$zero -/* f186340: 10000028 */ b .L0f1863e4 -/* f186344: 2610000c */ addiu $s0,$s0,0xc -/* f186348: 24010002 */ addiu $at,$zero,0x2 -.L0f18634c: -/* f18634c: 54410006 */ bnel $v0,$at,.L0f186368 -/* f186350: 24010001 */ addiu $at,$zero,0x1 -/* f186354: 0fc60ae9 */ jal func0f182ba4 -/* f186358: 8604000a */ lh $a0,0xa($s0) -/* f18635c: 10000021 */ b .L0f1863e4 -/* f186360: 2610000c */ addiu $s0,$s0,0xc -/* f186364: 24010001 */ addiu $at,$zero,0x1 -.L0f186368: -/* f186368: 14410003 */ bne $v0,$at,.L0f186378 -/* f18636c: 00000000 */ nop -/* f186370: 0fc5ffe3 */ jal func0f17ff8c -/* f186374: 8604000a */ lh $a0,0xa($s0) -.L0f186378: -/* f186378: 1000001a */ b .L0f1863e4 -/* f18637c: 2610000c */ addiu $s0,$s0,0xc -/* f186380: 92290010 */ lbu $t1,0x10($s1) -/* f186384: 24010004 */ addiu $at,$zero,0x4 -/* f186388: 15210003 */ bne $t1,$at,.L0f186398 -/* f18638c: 00000000 */ nop -/* f186390: 0fc60aab */ jal func0f182aac -/* f186394: 02002025 */ or $a0,$s0,$zero -.L0f186398: -/* f186398: 10000012 */ b .L0f1863e4 -/* f18639c: 26100008 */ addiu $s0,$s0,0x8 -/* f1863a0: 10000010 */ b .L0f1863e4 -/* f1863a4: 26100010 */ addiu $s0,$s0,0x10 -/* f1863a8: 1000000e */ b .L0f1863e4 -/* f1863ac: 26100010 */ addiu $s0,$s0,0x10 -/* f1863b0: 1000000c */ b .L0f1863e4 -/* f1863b4: 26100020 */ addiu $s0,$s0,0x20 -/* f1863b8: 1000000a */ b .L0f1863e4 -/* f1863bc: 26100008 */ addiu $s0,$s0,0x8 -/* f1863c0: 10000008 */ b .L0f1863e4 -/* f1863c4: 26100008 */ addiu $s0,$s0,0x8 -/* f1863c8: 10000006 */ b .L0f1863e4 -/* f1863cc: 26100028 */ addiu $s0,$s0,0x28 -/* f1863d0: 10000004 */ b .L0f1863e4 -/* f1863d4: 2610000c */ addiu $s0,$s0,0xc -/* f1863d8: 10000002 */ b .L0f1863e4 -/* f1863dc: 26100008 */ addiu $s0,$s0,0x8 -.L0f1863e0: -/* f1863e0: 26100004 */ addiu $s0,$s0,0x4 -.L0f1863e4: -/* f1863e4: 8e020000 */ lw $v0,0x0($s0) -/* f1863e8: 2401000c */ addiu $at,$zero,0xc -/* f1863ec: 5441ffc5 */ bnel $v0,$at,.L0f186304 -/* f1863f0: 2c41000c */ sltiu $at,$v0,0xc -.L0f1863f4: -/* f1863f4: 8fbf001c */ lw $ra,0x1c($sp) -.L0f1863f8: -/* f1863f8: 8fb00014 */ lw $s0,0x14($sp) -/* f1863fc: 8fb10018 */ lw $s1,0x18($sp) -/* f186400: 03e00008 */ jr $ra -/* f186404: 27bd0020 */ addiu $sp,$sp,0x20 -); +void mpPrepareScenario(void) +{ + s32 i; + s32 j; + s32 *cmd = g_StageSetup.intro; + + switch (g_MpSetup.scenario) { + case MPSCENARIO_KINGOFTHEHILL: + g_ScenarioData.koh.hillcount = 0; + break; + case MPSCENARIO_CAPTURETHECASE: + for (i = 0; i < ARRAYCOUNT(g_ScenarioData.ctc.spawnpadsperteam); i++) { + g_ScenarioData.ctc.spawnpadsperteam[i].teamindex = -1; + g_ScenarioData.ctc.spawnpadsperteam[i].numspawnpads = 0; + + for (j = 0; j < ARRAYCOUNT(g_ScenarioData.ctc.spawnpadsperteam[i].spawnpads); j++) { + g_ScenarioData.ctc.spawnpadsperteam[i].spawnpads[j] = -1; + } + } + + for (i = 0; i < ARRAYCOUNT(g_ScenarioData.ctc.unk00); i++) { + g_ScenarioData.ctc.unk00[i] = 0; + g_ScenarioData.ctc.teamindexes[i] = -1; + } + break; + case MPSCENARIO_HACKERCENTRAL: + func0f182bf4(); + break; + case MPSCENARIO_HOLDTHEBRIEFCASE: + func0f180078(); + break; + case MPSCENARIO_POPACAP: + break; + } + + if (cmd) { + while (cmd[0] != INTROCMD_END) { + switch (cmd[0]) { + case INTROCMD_SPAWN: + cmd += 3; + break; + case INTROCMD_CASE: + case INTROCMD_CASERESPAWN: + if (g_MpSetup.scenario == MPSCENARIO_CAPTURETHECASE) { + func0f181800(cmd); + } else if (g_MpSetup.scenario == MPSCENARIO_HACKERCENTRAL) { + func0f182ba4(cmd[2]); + } else if (g_MpSetup.scenario == MPSCENARIO_HOLDTHEBRIEFCASE) { + func0f17ff8c(cmd[2]); + } + cmd += 3; + break; + case INTROCMD_HILL: + if (g_MpSetup.scenario == MPSCENARIO_KINGOFTHEHILL) { + func0f182aac(cmd); + } + cmd += 2; + break; + case INTROCMD_WEAPON: + cmd += 4; + break; + case INTROCMD_AMMO: + cmd += 4; + break; + case INTROCMD_3: + cmd += 8; + break; + case INTROCMD_4: + cmd += 2; + break; + case INTROCMD_OUTFIT: + cmd += 2; + break; + case INTROCMD_6: + cmd += 10; + break; + case INTROCMD_WATCHTIME: + cmd += 3; + break; + case INTROCMD_CREDITOFFSET: + cmd += 2; + break; + default: + cmd++; + break; + } + } + } +} s32 scenarioGetMaxTeams(void) { diff --git a/src/include/game/mplayer/setup.h b/src/include/game/mplayer/setup.h index 05bd1753c..598c964fc 100644 --- a/src/include/game/mplayer/setup.h +++ b/src/include/game/mplayer/setup.h @@ -72,21 +72,21 @@ s32 menuhandler0017f74c(u32 operation, struct menuitem *item, union handlerdata u32 func0f17fa28(void); void func0f17fcb0(s32 silent); s32 menuhandlerMpSlowMotion(u32 operation, struct menuitem *item, union handlerdata *data); -u32 func0f17ff8c(void); +void func0f17ff8c(s16 padnum); u32 func0f17ffe4(void); -u32 func0f180078(void); +void func0f180078(void); void func0f1800a8(void); u32 scenarioHtbCallback18(void); void scenarioCtcReset(void); bool scenarioCtcHighlight(struct prop *prop, u32 *colour); -u32 func0f181800(void); +void func0f181800(s32 *cmd); void scenarioCtcCallback38(s16 arg0, s32 *arg1, s32 *arg2, s32 *arg3); void scenarioKohCallback10(void); u32 scenarioKohCallback18(void); -u32 func0f182aac(void); +void func0f182aac(s32 *cmd); void scenarioKohCallback38(s16 arg0, s32 *arg1, s32 *arg2, s32 *arg3); -u32 func0f182ba4(void); -u32 func0f182bf4(void); +void func0f182ba4(s16 padnum); +void func0f182bf4(void); void func0f182c98(void); void scenarioHtmReset(void); void scenarioHtmCallback14(struct chrdata *chr); @@ -107,7 +107,7 @@ void func0f185568(void); Gfx *func0f185774(Gfx *gdl); u32 func0f185c14(void); u32 func0f185e20(void); -void func0f18620c(void); +void mpPrepareScenario(void); u32 func0f186508(void); void func0f1866b8(s32 playernum, char *message); u32 func0f186780(void);