diff --git a/src/files/setup/setupold.c b/src/files/setup/setupold.c index d9b4740e0..9f41b43cf 100644 --- a/src/files/setup/setupold.c +++ b/src/files/setup/setupold.c @@ -40,25 +40,24 @@ struct path paths[] = { }; /** - * Some kind of camera movement test? When you press a button it jumps forward - * to the next camera animation rather than ending the cutscene. + * This function is an old and unused method of programming the title screen. */ u8 func0c00_017c[] = { set_chr_chrflag(CHR_COOP, CHRCFLAG_HIDDEN) set_chr_chrflag(CHR_ANTI, CHRCFLAG_HIDDEN) set_music_track(MUSIC_G5_INTRO) camera_movement(0x045d) - cmd01c8(2) + title_init_mode(TITLEAIMODE_RARELOGO) beginloop(0x12) - cmd01c9(/*goto*/ 0x59) + try_exit_title(/*goto*/ 0x59) endloop(0x12) label(0x59) - cmd01c8(3) + title_init_mode(TITLEAIMODE_NINTENDOLOGO) beginloop(0x13) - cmd01c9(/*goto*/ 0x59) + try_exit_title(/*goto*/ 0x59) endloop(0x13) label(0x59) @@ -149,10 +148,10 @@ u8 func0c00_017c[] = { label(0x59) unset_chr_chrflag(CHR_COOP, CHRCFLAG_HIDDEN) unset_chr_chrflag(CHR_ANTI, CHRCFLAG_HIDDEN) - cmd01c8(5) + title_init_mode(TITLEAIMODE_PDLOGO) beginloop(0x15) - cmd01c9(/*goto*/ 0x59) + try_exit_title(/*goto*/ 0x59) endloop(0x15) label(0x59) diff --git a/src/game/chr/chrai.c b/src/game/chr/chrai.c index 0b12e94af..f78302d6b 100644 --- a/src/game/chr/chrai.c +++ b/src/game/chr/chrai.c @@ -474,8 +474,8 @@ bool (*g_CommandPointers[])(void) = { /*0x01c5*/ ai01c5, /*0x01c6*/ aiSetDodgeRating, /*0x01c7*/ aiSetUnarmedDodgeRating, - /*0x01c8*/ ai01c8, - /*0x01c9*/ ai01c9, + /*0x01c8*/ aiTitleInitMode, + /*0x01c9*/ aiTryExitTitle, /*0x01ca*/ aiChrSetCutsceneWeapon, /*0x01cb*/ aiFadeScreen, /*0x01cc*/ aiIfFadeComplete, diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 14018526e..cd7117dd7 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -10906,11 +10906,11 @@ bool ai01c5(void) /** * @cmd 01c8 */ -bool ai01c8(void) +bool aiTitleInitMode(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; g_Vars.aioffset += 3; - func0f01aca8(cmd[2]); + titleInitFromAiCmd(cmd[2]); return false; } @@ -10918,12 +10918,12 @@ bool ai01c8(void) /** * @cmd 01c9 */ -bool ai01c9(void) +bool aiTryExitTitle(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - if (func0f01ab94()) { - func0f01abf0(); + if (titleIsChangingMode()) { + titleExit(); g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); } else { g_Vars.aioffset = g_Vars.aioffset + 3; diff --git a/src/game/data/data_0083d0.c b/src/game/data/data_0083d0.c index f632d9e0f..5e41c94f4 100644 --- a/src/game/data/data_0083d0.c +++ b/src/game/data/data_0083d0.c @@ -75,9 +75,9 @@ u32 var800624a8 = 0x00000000; u32 var800624ac = 0x00000000; u32 var800624b0 = 0x00000000; s32 g_TitleMode = -1; -s32 var800624b8 = -1; -u32 var800624bc = 0x00000002; -s32 var800624c0 = -1; +s32 g_TitleNextMode = -1; +u32 g_TitleDelayedTimer = 2; +s32 g_TitleDelayedMode = -1; s32 g_TitleTimer = 0; u32 var800624c8 = 0x00000000; u32 var800624cc = 0x00000000; diff --git a/src/game/game_000090.c b/src/game/game_000090.c index 1bda9f351..27cee48d0 100644 --- a/src/game/game_000090.c +++ b/src/game/game_000090.c @@ -17,7 +17,7 @@ void func0f000090(void) { g_TitleMode = -1; - var800624b8 = 0; + g_TitleNextMode = TITLEMODE_LEGAL; g_TitleTimer = 0; var800624e4 = -1; var800624e0 = 0; diff --git a/src/game/game_00b480.c b/src/game/game_00b480.c index 43505294a..c0e5cdd1c 100644 --- a/src/game/game_00b480.c +++ b/src/game/game_00b480.c @@ -24,13 +24,13 @@ glabel func0f00b480 /* f00b498: ac2024d8 */ sw $zero,%lo(var800624d8)($at) /* f00b49c: 3c018006 */ lui $at,%hi(var800624dc) /* f00b4a0: ac2024dc */ sw $zero,%lo(var800624dc)($at) -/* f00b4a4: 3c018006 */ lui $at,%hi(var800624bc) +/* f00b4a4: 3c018006 */ lui $at,%hi(g_TitleDelayedTimer) /* f00b4a8: 240e0002 */ addiu $t6,$zero,0x2 -/* f00b4ac: ac2e24bc */ sw $t6,%lo(var800624bc)($at) +/* f00b4ac: ac2e24bc */ sw $t6,%lo(g_TitleDelayedTimer)($at) /* f00b4b0: 3c188006 */ lui $t8,%hi(var800624f0) /* f00b4b4: 8f1824f0 */ lw $t8,%lo(var800624f0)($t8) -/* f00b4b8: 3c018006 */ lui $at,%hi(var800624c0) -/* f00b4bc: ac2224c0 */ sw $v0,%lo(var800624c0)($at) +/* f00b4b8: 3c018006 */ lui $at,%hi(g_TitleDelayedMode) +/* f00b4bc: ac2224c0 */ sw $v0,%lo(g_TitleDelayedMode)($at) /* f00b4c0: 27bdffe8 */ addiu $sp,$sp,-24 /* f00b4c4: 3c018006 */ lui $at,%hi(var800624f4) /* f00b4c8: 240f0001 */ addiu $t7,$zero,0x1 @@ -38,8 +38,8 @@ glabel func0f00b480 /* f00b4d0: 13000004 */ beqz $t8,.L0f00b4e4 /* f00b4d4: ac2f24f4 */ sw $t7,%lo(var800624f4)($at) /* f00b4d8: 24190005 */ addiu $t9,$zero,0x5 -/* f00b4dc: 3c018006 */ lui $at,%hi(var800624b8) -/* f00b4e0: ac3924b8 */ sw $t9,%lo(var800624b8)($at) +/* f00b4dc: 3c018006 */ lui $at,%hi(g_TitleNextMode) +/* f00b4e0: ac3924b8 */ sw $t9,%lo(g_TitleNextMode)($at) .L0f00b4e4: /* f00b4e4: 3c040004 */ lui $a0,0x4 /* f00b4e8: 34847800 */ ori $a0,$a0,0x7800 diff --git a/src/game/game_016100.c b/src/game/game_016100.c index fb9d89008..45002867a 100644 --- a/src/game/game_016100.c +++ b/src/game/game_016100.c @@ -239,7 +239,7 @@ glabel func0f01616c /* f016400: a0980012 */ sb $t8,0x12($a0) ); -void func0f016404(void) +void titleInitLegal(void) { func0f16d3d0(); var800624f4 = 1; @@ -248,12 +248,12 @@ void func0f016404(void) var800624ac = 0; } -void func0f016444(void) +void titleExitLegal(void) { // empty } -void func0f01644c(void) +void titleTickLegal(void) { func0000bd30(60); func0000bd7c(1.33333333f); @@ -263,25 +263,25 @@ void func0f01644c(void) g_TitleTimer += g_Vars.lvupdate240_60; if (g_TitleTimer > 180) { - func0f01a7e4(1); + titleSetNextMode(TITLEMODE_CHECKCONTROLLERS); } } -void func0f0164c8(void) +void titleInitCheckControllers(void) { g_TitleTimer = 0; - func00009ec4(1); + func00009ec4(true); } -void func0f0164f0(void) +void titleExitCheckControllers(void) { var800624e8 = 0; func00009ab0(); func0000aab0(2); - func00009ec4(0); + func00009ec4(false); } -void func0f016524(void) +void titleTickCheckControllers(void) { g_TitleTimer++; func0000be84(100, 10000); @@ -289,15 +289,15 @@ void func0f016524(void) if (g_TitleTimer > 6) { if ((func0001404c() % 2) == 0) { - func0f01a7e4(TITLEMODE_NOCONTROLLER); + titleSetNextMode(TITLEMODE_NOCONTROLLER); } else { - func0f01a7e4(TITLEMODE_RARELOGO); + titleSetNextMode(TITLEMODE_RARELOGO); } } } GLOBAL_ASM( -glabel titleRenderMode1 +glabel titleRenderCheckControllers /* f0165ac: 3c028006 */ lui $v0,%hi(g_TitleTimer) /* f0165b0: 8c4224c4 */ lw $v0,%lo(g_TitleTimer)($v0) /* f0165b4: 27bdffe8 */ addiu $sp,$sp,-24 @@ -818,7 +818,7 @@ glabel var7f1a83e4 ); GLOBAL_ASM( -glabel func0f016d34 +glabel titleInitPdLogo /* f016d34: 27bdff90 */ addiu $sp,$sp,-112 /* f016d38: 3c018006 */ lui $at,%hi(g_TitleTimer) /* f016d3c: 3c0f8006 */ lui $t7,%hi(var80062738) @@ -1028,7 +1028,7 @@ glabel func0f016d34 /* f017068: 27bd0070 */ addiu $sp,$sp,0x70 ); -void func0f01706c(void) +void titleExitPdLogo(void) { func0f0b30cc(var800624f8); func0f0b30cc(var800624fc); @@ -1038,7 +1038,7 @@ void func0f01706c(void) } GLOBAL_ASM( -glabel func0f0170bc +glabel titleTickPdLogo .late_rodata glabel var7f1a83e8 .word 0x3faaaaab @@ -1111,7 +1111,7 @@ glabel var7f1a83ec /* f0171b8: 10000003 */ beqz $zero,.L0f0171c8 /* f0171bc: 00000000 */ sll $zero,$zero,0x0 .L0f0171c0: -/* f0171c0: 0fc069f9 */ jal func0f01a7e4 +/* f0171c0: 0fc069f9 */ jal titleSetNextMode /* f0171c4: 24040005 */ addiu $a0,$zero,0x5 .L0f0171c8: /* f0171c8: 3c0f8006 */ lui $t7,%hi(var800624a8) @@ -1123,7 +1123,7 @@ glabel var7f1a83ec /* f0171e0: 2b01029b */ slti $at,$t8,0x29b /* f0171e4: 54200004 */ bnezl $at,.L0f0171f8 /* f0171e8: 00002025 */ or $a0,$zero,$zero -/* f0171ec: 0fc069f9 */ jal func0f01a7e4 +/* f0171ec: 0fc069f9 */ jal titleSetNextMode /* f0171f0: 24040005 */ addiu $a0,$zero,0x5 /* f0171f4: 00002025 */ or $a0,$zero,$zero .L0f0171f8: @@ -1141,7 +1141,7 @@ glabel var7f1a83ec /* f017224: 29210225 */ slti $at,$t1,0x225 /* f017228: 50200004 */ beqzl $at,.L0f01723c /* f01722c: 8fbf0014 */ lw $ra,0x14($sp) -/* f017230: 0fc069f9 */ jal func0f01a7e4 +/* f017230: 0fc069f9 */ jal titleSetNextMode /* f017234: 24040002 */ addiu $a0,$zero,0x2 .L0f017238: /* f017238: 8fbf0014 */ lw $ra,0x14($sp) @@ -3076,7 +3076,7 @@ glabel var7f1a8468 /* f018dac: 00000000 */ sll $zero,$zero,0x0 ); -void func0f018db0(void) +void titleInitRarePresents(void) { g_TitleTimer = 0; func00014810(0); @@ -3084,7 +3084,7 @@ void func0f018db0(void) } GLOBAL_ASM( -glabel func0f018ddc +glabel titleExitRarePresents /* f018ddc: 3c048006 */ lui $a0,%hi(var80062864) /* f018de0: 8c842864 */ lw $a0,%lo(var80062864)($a0) /* f018de4: 27bdffe8 */ addiu $sp,$sp,-24 @@ -3105,7 +3105,7 @@ glabel func0f018ddc ); GLOBAL_ASM( -glabel func0f018e1c +glabel titleTickRarePresents .late_rodata glabel var7f1a846c .word 0x3faaaaab @@ -3138,7 +3138,7 @@ glabel var7f1a8470 /* f018e78: 2b01012d */ slti $at,$t8,0x12d /* f018e7c: 14200005 */ bnez $at,.L0f018e94 /* f018e80: ac580000 */ sw $t8,0x0($v0) -/* f018e84: 0fc069f9 */ jal func0f01a7e4 +/* f018e84: 0fc069f9 */ jal titleSetNextMode /* f018e88: 24040002 */ addiu $a0,$zero,0x2 /* f018e8c: 10000008 */ beqz $zero,.L0f018eb0 /* f018e90: 8fbf0014 */ lw $ra,0x14($sp) @@ -3147,7 +3147,7 @@ glabel var7f1a8470 /* f018e98: 3405ffff */ dli $a1,0xffff /* f018e9c: 50400004 */ beqzl $v0,.L0f018eb0 /* f018ea0: 8fbf0014 */ lw $ra,0x14($sp) -/* f018ea4: 0fc069f9 */ jal func0f01a7e4 +/* f018ea4: 0fc069f9 */ jal titleSetNextMode /* f018ea8: 24040005 */ addiu $a0,$zero,0x5 /* f018eac: 8fbf0014 */ lw $ra,0x14($sp) .L0f018eb0: @@ -3519,7 +3519,7 @@ glabel titleRenderRarePresents ); GLOBAL_ASM( -glabel func0f0193fc +glabel titleInitNintendoLogo /* f0193fc: 3c0e8006 */ lui $t6,%hi(var800624a8) /* f019400: 8dce24a8 */ lw $t6,%lo(var800624a8)($t6) /* f019404: 27bdffd8 */ addiu $sp,$sp,-40 @@ -3581,14 +3581,14 @@ glabel func0f0193fc /* f0194dc: 00000000 */ sll $zero,$zero,0x0 ); -void func0f0194e0(void) +void titleExitNintendoLogo(void) { func0f0b30cc(var800624f8); func00014810(1); } GLOBAL_ASM( -glabel func0f01950c +glabel titleTickNintendoLogo .late_rodata glabel var7f1a8474 .word 0x3faaaaab @@ -3640,7 +3640,7 @@ glabel var7f1a8478 /* f0195b0: 14490009 */ bne $v0,$t1,.L0f0195d8 /* f0195b4: 3c0a8006 */ lui $t2,%hi(var800624a8) /* f0195b8: ac2224a8 */ sw $v0,%lo(var800624a8)($at) -/* f0195bc: 0fc069f9 */ jal func0f01a7e4 +/* f0195bc: 0fc069f9 */ jal titleSetNextMode /* f0195c0: 24040002 */ addiu $a0,$zero,0x2 /* f0195c4: 3c038006 */ lui $v1,%hi(g_TitleTimer) /* f0195c8: 3c068006 */ lui $a2,%hi(var800624ac) @@ -3668,7 +3668,7 @@ glabel var7f1a8478 /* f019614: 14200006 */ bnez $at,.L0f019630 /* f019618: 3c018006 */ lui $at,%hi(var800624a8) /* f01961c: ac2224a8 */ sw $v0,%lo(var800624a8)($at) -/* f019620: 0fc069f9 */ jal func0f01a7e4 +/* f019620: 0fc069f9 */ jal titleSetNextMode /* f019624: acc00000 */ sw $zero,0x0($a2) /* f019628: 3c038006 */ lui $v1,%hi(g_TitleTimer) /* f01962c: 246324c4 */ addiu $v1,$v1,%lo(g_TitleTimer) @@ -3678,7 +3678,7 @@ glabel var7f1a8478 /* f019634: 29c100f1 */ slti $at,$t6,0xf1 /* f019638: 54200004 */ bnezl $at,.L0f01964c /* f01963c: 8fbf0014 */ lw $ra,0x14($sp) -/* f019640: 0fc069f9 */ jal func0f01a7e4 +/* f019640: 0fc069f9 */ jal titleSetNextMode /* f019644: 24040002 */ addiu $a0,$zero,0x2 /* f019648: 8fbf0014 */ lw $ra,0x14($sp) .L0f01964c: @@ -3988,7 +3988,7 @@ glabel var7f1a84a0 ); GLOBAL_ASM( -glabel func0f019a80 +glabel titleInitRareLogo /* f019a80: 27bdffd8 */ addiu $sp,$sp,-40 /* f019a84: 240efffd */ addiu $t6,$zero,-3 /* f019a88: 3c018006 */ lui $at,%hi(g_TitleTimer) @@ -4053,14 +4053,14 @@ glabel func0f019a80 /* f019b70: 00000000 */ sll $zero,$zero,0x0 ); -void func0f019b74(void) +void titleExitRareLogo(void) { func0f0b30cc(var800624f8); func00014810(1); } GLOBAL_ASM( -glabel func0f019ba0 +glabel titleTickRareLogo .late_rodata glabel var7f1a84a4 .word 0x3faaaaab @@ -4119,7 +4119,7 @@ glabel var7f1a84a8 /* f019c5c: 248424a8 */ addiu $a0,$a0,%lo(var800624a8) /* f019c60: 3c018006 */ lui $at,%hi(var800624a8) /* f019c64: ac2324a8 */ sw $v1,%lo(var800624a8)($at) -/* f019c68: 0fc069f9 */ jal func0f01a7e4 +/* f019c68: 0fc069f9 */ jal titleSetNextMode /* f019c6c: 24040002 */ addiu $a0,$zero,0x2 /* f019c70: 3c088006 */ lui $t0,%hi(g_TitleTimer) /* f019c74: 10000010 */ beqz $zero,.L0f019cb8 @@ -4159,7 +4159,7 @@ glabel var7f1a84a8 /* f019cec: 54200004 */ bnezl $at,.L0f019d00 /* f019cf0: 8fbf0014 */ lw $ra,0x14($sp) .L0f019cf4: -/* f019cf4: 0fc069f9 */ jal func0f01a7e4 +/* f019cf4: 0fc069f9 */ jal titleSetNextMode /* f019cf8: 24040003 */ addiu $a0,$zero,0x3 .L0f019cfc: /* f019cfc: 8fbf0014 */ lw $ra,0x14($sp) @@ -4645,7 +4645,7 @@ glabel func0f01a360 ); GLOBAL_ASM( -glabel func0f01a3b8 +glabel titleInitModeSkip .late_rodata glabel var7f1a84c0 .word 0x3fba2e8c @@ -4709,17 +4709,17 @@ glabel var7f1a84c0 /* f01a490: 00000000 */ sll $zero,$zero,0x0 ); -void func0f01a494(void) +void titleInitNoController(void) { g_TitleTimer = 0; } -void func0f01a4a0(void) +void titleExitNoController(void) { // empty } -void func0f01a4a8(void) +void titleTickNoController(void) { func0000bd30(60); func0000bd7c(1.33333333f); @@ -4920,10 +4920,10 @@ glabel titleRenderNoController /* f01a7e0: 00000000 */ sll $zero,$zero,0x0 ); -void func0f01a7e4(s32 arg0) +void titleSetNextMode(s32 mode) { - if (var800624c0 != arg0) { - var800624b8 = arg0; + if (g_TitleDelayedMode != mode) { + g_TitleNextMode = mode; } } @@ -4932,7 +4932,7 @@ s32 titleGetMode(void) return g_TitleMode; } -void func0f01a810(void) +void titleTick(void) { func0000bd7c(576.0f / var800624a0); func0000bbe4(576, var800624a0); @@ -4942,191 +4942,196 @@ void func0f01a810(void) currentPlayerSetViewPosition(0, 0); func0000bca8(0, 0); - if (var800624b8 >= 0) { - var800624bc = 3; - var800624c0 = var800624b8; + // If there's a new mode to transition to, schedule it to apply in 3 ticks + // time and call the exit function for the current mode. + if (g_TitleNextMode >= 0) { + g_TitleDelayedTimer = 3; + g_TitleDelayedMode = g_TitleNextMode; switch (g_TitleMode) { case TITLEMODE_LEGAL: - func0f016444(); + titleExitLegal(); break; - case TITLEMODE_1: - func0f0164f0(); + case TITLEMODE_CHECKCONTROLLERS: + titleExitCheckControllers(); break; case TITLEMODE_PDLOGO: - func0f01706c(); + titleExitPdLogo(); break; case TITLEMODE_NINTENDOLOGO: - func0f0194e0(); + titleExitNintendoLogo(); break; case TITLEMODE_RARELOGO: - func0f019b74(); + titleExitRareLogo(); break; case TITLEMODE_NOCONTROLLER: - func0f01a4a0(); + titleExitNoController(); break; } - if (g_TitleMode != 1) { - func00009ec4(1); + if (g_TitleMode != TITLEMODE_CHECKCONTROLLERS) { + func00009ec4(true); } - var800624b8 = -1; + g_TitleNextMode = -1; } - if (var800624bc != 0) { - var800624bc--; + // If there's a new mode scheduled, tick the timer down + if (g_TitleDelayedTimer != 0) { + g_TitleDelayedTimer--; if (g_TitleMode == -1) { - var800624bc = 0; + g_TitleDelayedTimer = 0; } - if (var800624bc == 0 && var800624c0 != -1) { - var800624b8 = var800624c0; - var800624c0 = -1; + if (g_TitleDelayedTimer == 0 && g_TitleDelayedMode != -1) { + g_TitleNextMode = g_TitleDelayedMode; + g_TitleDelayedMode = -1; } } - if (var800624b8 >= 0) { - g_TitleMode = var800624b8; - var800624b8 = -1; + // Apply new mode + if (g_TitleNextMode >= 0) { + g_TitleMode = g_TitleNextMode; + g_TitleNextMode = -1; var800624ac = 0; switch (g_TitleMode) { case TITLEMODE_LEGAL: - func0f016404(); + titleInitLegal(); break; - case TITLEMODE_1: - func0f0164c8(); + case TITLEMODE_CHECKCONTROLLERS: + titleInitCheckControllers(); break; case TITLEMODE_PDLOGO: - func0f016d34(); + titleInitPdLogo(); break; case TITLEMODE_NINTENDOLOGO: - func0f0193fc(); + titleInitNintendoLogo(); break; case TITLEMODE_RARELOGO: - func0f019a80(); + titleInitRareLogo(); break; - case TITLEMODE_5: - func0f01a3b8(); + case TITLEMODE_SKIP: + titleInitModeSkip(); break; case TITLEMODE_NOCONTROLLER: - func0f01a494(); + titleInitNoController(); break; } - if (g_TitleMode != TITLEMODE_1 && g_TitleMode != TITLEMODE_5) { - func00009ec4(0); + if (g_TitleMode != TITLEMODE_CHECKCONTROLLERS && g_TitleMode != TITLEMODE_SKIP) { + func00009ec4(false); } } + // Run the current mode's tick function switch (g_TitleMode) { case TITLEMODE_LEGAL: - func0f01644c(); + titleTickLegal(); break; - case TITLEMODE_1: - func0f016524(); + case TITLEMODE_CHECKCONTROLLERS: + titleTickCheckControllers(); break; case TITLEMODE_PDLOGO: - func0f0170bc(); + titleTickPdLogo(); break; case TITLEMODE_NINTENDOLOGO: - func0f01950c(); + titleTickNintendoLogo(); break; case TITLEMODE_RARELOGO: - func0f019ba0(); + titleTickRareLogo(); break; case TITLEMODE_NOCONTROLLER: - func0f01a4a8(); + titleTickNoController(); break; - case TITLEMODE_5: + case TITLEMODE_SKIP: func0000bd20(0); - func0f01a7e4(4); + titleSetNextMode(TITLEMODE_RARELOGO); break; } } -bool func0f01ab94(void) +bool titleIsChangingMode(void) { - return var800624b8 >= 0; + return g_TitleNextMode >= 0; } -bool func0f01aba8(void) +bool titleIsKeepingMode(void) { - if (var800624b8 >= 0) { + if (g_TitleNextMode >= 0) { return false; } - if (g_TitleMode == -1 || g_TitleMode == TITLEMODE_5) { + if (g_TitleMode == -1 || g_TitleMode == TITLEMODE_SKIP) { return false; } return true; } -void func0f01abf0(void) +void titleExit(void) { switch (g_TitleMode) { case TITLEMODE_LEGAL: - func0f016444(); + titleExitLegal(); break; - case TITLEMODE_1: - func0f0164f0(); + case TITLEMODE_CHECKCONTROLLERS: + titleExitCheckControllers(); break; case TITLEMODE_PDLOGO: - func0f01706c(); + titleExitPdLogo(); break; case TITLEMODE_NINTENDOLOGO: - func0f0194e0(); + titleExitNintendoLogo(); break; case TITLEMODE_RARELOGO: - func0f019b74(); + titleExitRareLogo(); break; case TITLEMODE_NOCONTROLLER: - func0f01a4a0(); + titleExitNoController(); break; case TITLEMODE_RAREPRESENTS1: case TITLEMODE_RAREPRESENTS2: - func0f018ddc(); + titleExitRarePresents(); break; } - var800624b8 = -1; + g_TitleNextMode = -1; g_TitleMode = -1; } -void func0f01aca8(u32 value) +void titleInitFromAiCmd(u32 value) { switch (value) { - case 1: + case TITLEAIMODE_RAREPRESENTS1: g_TitleMode = TITLEMODE_RAREPRESENTS1; - func0f018db0(); + titleInitRarePresents(); break; - case 2: + case TITLEAIMODE_RARELOGO: g_TitleMode = TITLEMODE_RARELOGO; - func0f019a80(); + titleInitRareLogo(); break; - case 4: + case TITLEAIMODE_RAREPRESENTS2: g_TitleMode = TITLEMODE_RAREPRESENTS2; - func0f018db0(); + titleInitRarePresents(); break; - case 3: + case TITLEAIMODE_NINTENDOLOGO: g_TitleMode = TITLEMODE_NINTENDOLOGO; - func0f0193fc(); + titleInitNintendoLogo(); break; - case 5: + case TITLEAIMODE_PDLOGO: g_TitleMode = TITLEMODE_PDLOGO; - func0f016d34(); + titleInitPdLogo(); break; } - var800624b8 = -1; + g_TitleNextMode = -1; } bool func0f01ad5c(void) { - if (!func0f01aba8()) { + if (!titleIsKeepingMode()) { return false; } @@ -5154,29 +5159,29 @@ void func0f01adb8(void) void func0f01ae30(void) { - if (func0f01aba8()) { + if (titleIsKeepingMode()) { func00014810(0); - if (var800624bc == 0) { + if (g_TitleDelayedTimer == 0) { switch (g_TitleMode) { case TITLEMODE_LEGAL: - func0f01644c(); + titleTickLegal(); break; - case TITLEMODE_1: - func0f016524(); + case TITLEMODE_CHECKCONTROLLERS: + titleTickCheckControllers(); break; case TITLEMODE_PDLOGO: - func0f0170bc(); + titleTickPdLogo(); break; case TITLEMODE_NINTENDOLOGO: - func0f01950c(); + titleTickNintendoLogo(); break; case TITLEMODE_RAREPRESENTS1: case TITLEMODE_RAREPRESENTS2: - func0f018e1c(); + titleTickRarePresents(); break; case TITLEMODE_RARELOGO: - func0f019ba0(); + titleTickRareLogo(); break; } } @@ -5185,13 +5190,13 @@ void func0f01ae30(void) Gfx *titleRender(Gfx *gdl) { - if (var800624bc == 0) { + if (g_TitleDelayedTimer == 0) { switch (g_TitleMode) { case TITLEMODE_LEGAL: gdl = titleRenderLegal(gdl); break; - case TITLEMODE_1: - gdl = titleRenderMode1(gdl); + case TITLEMODE_CHECKCONTROLLERS: + gdl = titleRenderCheckControllers(gdl); break; case TITLEMODE_PDLOGO: gdl = titleRenderPdLogo(gdl); diff --git a/src/game/game_01bea0.c b/src/game/game_01bea0.c index 69fb5825f..e41e6fc5f 100644 --- a/src/game/game_01bea0.c +++ b/src/game/game_01bea0.c @@ -1164,7 +1164,7 @@ glabel var7f1a863c /* f01cdc4: 0004ce42 */ srl $t9,$a0,0x19 /* f01cdc8: 0fc5b36a */ jal setDifficulty /* f01cdcc: 03202025 */ or $a0,$t9,$zero -/* f01cdd0: 0fc069f9 */ jal func0f01a7e4 +/* f01cdd0: 0fc069f9 */ jal titleSetNextMode /* f01cdd4: 24040005 */ addiu $a0,$zero,0x5 /* f01cdd8: 0c003a57 */ jal func0000e95c /* f01cddc: 92440001 */ lbu $a0,0x1($s2) @@ -1532,7 +1532,7 @@ glabel var7f1a863c /* f01d2f8: 24040026 */ addiu $a0,$zero,0x26 /* f01d2fc: 0fc068d5 */ jal setNumPlayers /* f01d300: 02c02025 */ or $a0,$s6,$zero -/* f01d304: 0fc069f9 */ jal func0f01a7e4 +/* f01d304: 0fc069f9 */ jal titleSetNextMode /* f01d308: 24040005 */ addiu $a0,$zero,0x5 /* f01d30c: 0c003a57 */ jal func0000e95c /* f01d310: 24040026 */ addiu $a0,$zero,0x26 @@ -1543,7 +1543,7 @@ glabel var7f1a863c /* f01d320: 2404005d */ addiu $a0,$zero,0x5d /* f01d324: 0fc068d5 */ jal setNumPlayers /* f01d328: 02c02025 */ or $a0,$s6,$zero -/* f01d32c: 0fc069f9 */ jal func0f01a7e4 +/* f01d32c: 0fc069f9 */ jal titleSetNextMode /* f01d330: 24040005 */ addiu $a0,$zero,0x5 /* f01d334: 0c003a57 */ jal func0000e95c /* f01d338: 2404005d */ addiu $a0,$zero,0x5d @@ -1562,7 +1562,7 @@ glabel var7f1a863c /* f01d368: 24040026 */ addiu $a0,$zero,0x26 /* f01d36c: 0fc068d5 */ jal setNumPlayers /* f01d370: 02c02025 */ or $a0,$s6,$zero -/* f01d374: 0fc069f9 */ jal func0f01a7e4 +/* f01d374: 0fc069f9 */ jal titleSetNextMode /* f01d378: 24040005 */ addiu $a0,$zero,0x5 /* f01d37c: 0c003a57 */ jal func0000e95c /* f01d380: 24040026 */ addiu $a0,$zero,0x26 diff --git a/src/game/game_102240.c b/src/game/game_102240.c index f399b8489..82f81d2b3 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -757,7 +757,7 @@ glabel menuhandlerAcceptMission /* f103514: 00046642 */ srl $t4,$a0,0x19 /* f103518: 0fc5b36a */ jal setDifficulty /* f10351c: 01802025 */ or $a0,$t4,$zero -/* f103520: 0fc069f9 */ jal func0f01a7e4 +/* f103520: 0fc069f9 */ jal titleSetNextMode /* f103524: 24040005 */ addiu $a0,$zero,0x5 /* f103528: 3c04800a */ lui $a0,%hi(g_MissionConfig+0x1) /* f10352c: 0c003a57 */ jal func0000e95c @@ -818,7 +818,7 @@ glabel menuhandlerAcceptMission // } // // setDifficulty(g_MissionConfig.difficulty); -// func0f01a7e4(5); +// titleSetNextMode(TITLEMODE_SKIP); // func0000e95c(g_MissionConfig.stagenum); // func00009ec4(1); // } diff --git a/src/game/game_10ccd0.c b/src/game/game_10ccd0.c index f499099f4..349d8da7a 100644 --- a/src/game/game_10ccd0.c +++ b/src/game/game_10ccd0.c @@ -677,7 +677,7 @@ glabel func0f10d910 /* f10db34: 0004c642 */ srl $t8,$a0,0x19 /* f10db38: 0fc5b36a */ jal setDifficulty /* f10db3c: 03002025 */ or $a0,$t8,$zero -/* f10db40: 0fc069f9 */ jal func0f01a7e4 +/* f10db40: 0fc069f9 */ jal titleSetNextMode /* f10db44: 24040005 */ addiu $a0,$zero,0x5 /* f10db48: 3c04800a */ lui $a0,%hi(g_MissionConfig+0x1) /* f10db4c: 0c003a57 */ jal func0000e95c @@ -699,7 +699,7 @@ glabel func0f10d910 /* f10db88: 00044642 */ srl $t0,$a0,0x19 /* f10db8c: 0fc5b36a */ jal setDifficulty /* f10db90: 01002025 */ or $a0,$t0,$zero -/* f10db94: 0fc069f9 */ jal func0f01a7e4 +/* f10db94: 0fc069f9 */ jal titleSetNextMode /* f10db98: 24040005 */ addiu $a0,$zero,0x5 /* f10db9c: 3c04800a */ lui $a0,%hi(g_MissionConfig+0x1) /* f10dba0: 0c003a57 */ jal func0000e95c diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index f7ab8f696..324743446 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -1579,7 +1579,7 @@ glabel var7f1b7868 /* f1693d0: 2401004e */ addiu $at,$zero,0x4e /* f1693d4: 54410060 */ bnel $v0,$at,.L0f169558 /* f1693d8: 8e6204b4 */ lw $v0,0x4b4($s3) -/* f1693dc: 0fc06aea */ jal func0f01aba8 +/* f1693dc: 0fc06aea */ jal titleIsKeepingMode /* f1693e0: 00000000 */ sll $zero,$zero,0x0 /* f1693e4: 1040005b */ beqz $v0,.L0f169554 .L0f1693e8: @@ -3486,7 +3486,7 @@ glabel var7f1b7868 /* f16af9c: a20a0003 */ sb $t2,0x3($s0) /* f16afa0: 0fc068d5 */ jal setNumPlayers /* f16afa4: a26f04d2 */ sb $t7,0x4d2($s3) -/* f16afa8: 0fc069f9 */ jal func0f01a7e4 +/* f16afa8: 0fc069f9 */ jal titleSetNextMode /* f16afac: 24040005 */ addiu $a0,$zero,0x5 /* f16afb0: 920e0000 */ lbu $t6,0x0($s0) /* f16afb4: 00002025 */ or $a0,$zero,$zero @@ -4844,7 +4844,7 @@ glabel func0f16b96c /* f16c1d4: 2401005a */ addiu $at,$zero,0x5a /* f16c1d8: 51810006 */ beql $t4,$at,.L0f16c1f4 /* f16c1dc: ae000000 */ sw $zero,0x0($s0) -/* f16c1e0: 0fc069f9 */ jal func0f01a7e4 +/* f16c1e0: 0fc069f9 */ jal titleSetNextMode /* f16c1e4: 24040005 */ addiu $a0,$zero,0x5 /* f16c1e8: 0c003a57 */ jal func0000e95c /* f16c1ec: 2404005a */ addiu $a0,$zero,0x5a @@ -5323,7 +5323,7 @@ glabel func0f16b96c .L0f16c8a4: /* f16c8a4: 5441000a */ bnel $v0,$at,.L0f16c8d0 /* f16c8a8: 2401005b */ addiu $at,$zero,0x5b -/* f16c8ac: 0fc06a04 */ jal func0f01a810 +/* f16c8ac: 0fc06a04 */ jal titleTick /* f16c8b0: 00000000 */ sll $zero,$zero,0x0 /* f16c8b4: 0fc07618 */ jal func0f01d860 /* f16c8b8: 00000000 */ sll $zero,$zero,0x0 @@ -5648,7 +5648,7 @@ glabel func0f16b96c // || func00014eb8(3) > 10 // || func00014eb8(3) < -10) && var800624a4) { // if (g_Vars.stagenum != STAGE_TITLE) { -// func0f01a7e4(5); +// titleSetNextMode(TITLEMODE_SKIP); // func0000e95c(STAGE_TITLE); // } // @@ -5777,7 +5777,7 @@ glabel func0f16b96c // } // // if (g_Vars.stagenum == STAGE_TITLE) { -// func0f01a810(); +// titleTick(); // func0f01d860(); // func00011d84(); // } else if (g_Vars.stagenum == STAGE_BOOTPAKMENU) { diff --git a/src/game/mplayer.c b/src/game/mplayer.c index f233a5ff1..092ed87be 100644 --- a/src/game/mplayer.c +++ b/src/game/mplayer.c @@ -138,7 +138,7 @@ glabel func0f187864 /* f187914: 8fa40024 */ lw $a0,0x24($sp) /* f187918: 0fc068d5 */ jal setNumPlayers /* f18791c: 02002025 */ or $a0,$s0,$zero -/* f187920: 0fc069f9 */ jal func0f01a7e4 +/* f187920: 0fc069f9 */ jal titleSetNextMode /* f187924: 24040005 */ addiu $a0,$zero,0x5 /* f187928: 8fbf001c */ lw $ra,0x1c($sp) /* f18792c: 240b0001 */ addiu $t3,$zero,0x1 diff --git a/src/include/commands.h b/src/include/commands.h index f79c73e87..dbdb786e3 100644 --- a/src/include/commands.h +++ b/src/include/commands.h @@ -3818,18 +3818,21 @@ mkshort(0x01c7), \ value, -// Only used in test levels. Value can be 0-4. -// Looks up the index in a pointer array and calls the function at the pointer. -// If passed a value > 4, sets 800624b8 to -1. -// Related to cmd01c9 -#define cmd01c8(value) \ +/** + * Sets the title mode (legal, Rare logo, etc). This is an unused feature - it + * appears that at one point the title screen could be controlled via AI + * commands. + * + * Expects a TITLEAIMODE constant. + */ +#define title_init_mode(mode) \ mkshort(0x01c8), \ - value, + mode, -// Test levels only. Checks if value at 800624b8 is >= 0. -// If so, runs some function and goes to label. -// Related to cmd01c8. -#define cmd01c9(label) \ +/** + * Exits the title screen. This is an unused feature. + */ +#define try_exit_title(label) \ mkshort(0x01c9), \ label, diff --git a/src/include/constants.h b/src/include/constants.h index 5359c6569..9fda55ae9 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -2610,15 +2610,21 @@ #define TILEFLAG_0020 0x0020 #define TILEFLAG_0200 0x0200 -#define TITLEMODE_LEGAL 0 -#define TITLEMODE_1 1 -#define TITLEMODE_PDLOGO 2 -#define TITLEMODE_NINTENDOLOGO 3 -#define TITLEMODE_RARELOGO 4 -#define TITLEMODE_5 5 -#define TITLEMODE_NOCONTROLLER 6 -#define TITLEMODE_RAREPRESENTS1 7 -#define TITLEMODE_RAREPRESENTS2 8 +#define TITLEMODE_LEGAL 0 +#define TITLEMODE_CHECKCONTROLLERS 1 +#define TITLEMODE_PDLOGO 2 +#define TITLEMODE_NINTENDOLOGO 3 +#define TITLEMODE_RARELOGO 4 +#define TITLEMODE_SKIP 5 +#define TITLEMODE_NOCONTROLLER 6 +#define TITLEMODE_RAREPRESENTS1 7 +#define TITLEMODE_RAREPRESENTS2 8 + +#define TITLEAIMODE_RAREPRESENTS1 1 +#define TITLEAIMODE_RARELOGO 2 +#define TITLEAIMODE_NINTENDOLOGO 3 +#define TITLEAIMODE_RAREPRESENTS2 4 +#define TITLEAIMODE_PDLOGO 5 #define VISIONMODE_NORMAL 0 #define VISIONMODE_XRAY 1 diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index 2d2205554..1e8b6eca0 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -419,8 +419,8 @@ /*0x01c5*/ bool ai01c5(void); /*0x01c6*/ bool aiSetDodgeRating(void); /*0x01c7*/ bool aiSetUnarmedDodgeRating(void); -/*0x01c8*/ bool ai01c8(void); -/*0x01c9*/ bool ai01c9(void); +/*0x01c8*/ bool aiTitleInitMode(void); +/*0x01c9*/ bool aiTryExitTitle(void); /*0x01ca*/ bool aiChrSetCutsceneWeapon(void); /*0x01cb*/ bool aiFadeScreen(void); /*0x01cc*/ bool aiIfFadeComplete(void); diff --git a/src/include/game/data/data_0083d0.h b/src/include/game/data/data_0083d0.h index 7d5219251..c1331ada5 100644 --- a/src/include/game/data/data_0083d0.h +++ b/src/include/game/data/data_0083d0.h @@ -22,9 +22,9 @@ extern u32 var800624a8; extern u32 var800624ac; extern u32 var800624b0; extern s32 g_TitleMode; -extern s32 var800624b8; -extern u32 var800624bc; -extern s32 var800624c0; +extern s32 g_TitleNextMode; +extern u32 g_TitleDelayedTimer; +extern s32 g_TitleDelayedMode; extern s32 g_TitleTimer; extern u32 var800624e0; extern s32 var800624e4; diff --git a/src/include/game/game_016100.h b/src/include/game/game_016100.h index c6d3b47e6..133eaf9c2 100644 --- a/src/include/game/game_016100.h +++ b/src/include/game/game_016100.h @@ -5,50 +5,50 @@ char *mpPlayerGetWeaponOfChoiceName(u32 playernum, u32 slot); u32 func0f01616c(void); -void func0f016404(void); -void func0f01644c(void); -void func0f0164c8(void); -void func0f0164f0(void); -void func0f016524(void); -Gfx *titleRenderMode1(Gfx *gdl); +void titleInitLegal(void); +void titleTickLegal(void); +void titleInitCheckControllers(void); +void titleExitCheckControllers(void); +void titleTickCheckControllers(void); +Gfx *titleRenderCheckControllers(Gfx *gdl); Gfx *titleRenderLegal(Gfx *gdl); -void func0f016d34(void); -void func0f01706c(void); -void func0f0170bc(void); +void titleInitPdLogo(void); +void titleExitPdLogo(void); +void titleTickPdLogo(void); u32 func0f017248(void); u32 func0f017980(void); Gfx *titleRenderPdLogo(Gfx *gdl); -void func0f018db0(void); -void func0f018ddc(void); -void func0f018e1c(void); +void titleInitRarePresents(void); +void titleExitRarePresents(void); +void titleTickRarePresents(void); u32 func0f018ebc(void); Gfx *titleRenderRarePresents(Gfx *gdl); -void func0f0193fc(void); -void func0f0194e0(void); -void func0f01950c(void); +void titleInitNintendoLogo(void); +void titleExitNintendoLogo(void); +void titleTickNintendoLogo(void); Gfx *titleRenderNintendoLogo(Gfx *gdl); -void func0f019a80(void); -void func0f019b74(void); -void func0f019ba0(void); +void titleInitRareLogo(void); +void titleExitRareLogo(void); +void titleTickRareLogo(void); u32 func0f019d0c(void); Gfx *titleRenderRareLogo(Gfx *gdl); -u32 func0f01a3b8(void); -void func0f01a494(void); -void func0f01a4a8(void); +void titleInitModeSkip(void); +void titleInitNoController(void); +void titleTickNoController(void); Gfx *titleRenderNoController(Gfx *gdl); -void func0f01a7e4(s32 arg0); -void func0f01a810(void); -bool func0f01ab94(void); -bool func0f01aba8(void); -void func0f01abf0(void); -void func0f01aca8(u32 arg0); +void titleSetNextMode(s32 mode); +void titleTick(void); +bool titleIsChangingMode(void); +bool titleIsKeepingMode(void); +void titleExit(void); +void titleInitFromAiCmd(u32 arg0); bool func0f01ad5c(void); void func0f01adb8(void); void func0f01ae30(void); Gfx *titleRender(Gfx *gdl); -void func0f016444(void); +void titleExitLegal(void); s32 getNumPlayers(void); void setNumPlayers(s32 numplayers); -void func0f01a4a0(void); +void titleExitNoController(void); #endif diff --git a/src/include/lib/lib_09660.h b/src/include/lib/lib_09660.h index 8d951cd38..93ebee806 100644 --- a/src/include/lib/lib_09660.h +++ b/src/include/lib/lib_09660.h @@ -16,7 +16,7 @@ u32 func00009ab0(void); u32 func00009b50(void); u32 func00009bf8(void); u32 func00009c3c(void); -void func00009ec4(s32 arg0); +void func00009ec4(bool arg0); u32 func00009ed4(void); u32 func0000a044(void); u32 func0000aa50(void); diff --git a/src/lib/lib_0d520.c b/src/lib/lib_0d520.c index dfe2163f7..813f13e39 100644 --- a/src/lib/lib_0d520.c +++ b/src/lib/lib_0d520.c @@ -1272,7 +1272,7 @@ glabel func0000e324 /* e4e8: 2401004e */ addiu $at,$zero,0x4e /* e4ec: 55c10006 */ bnel $t6,$at,.L0000e508 /* e4f0: 8e300284 */ lw $s0,0x284($s1) -/* e4f4: 0fc06aea */ jal func0f01aba8 +/* e4f4: 0fc06aea */ jal titleIsKeepingMode /* e4f8: 00000000 */ sll $zero,$zero,0x0 /* e4fc: 1440000b */ bnez $v0,.L0000e52c /* e500: 00000000 */ sll $zero,$zero,0x0