Attempt to decompile menuhandlerMissionList

This commit is contained in:
Ryan Dwyer
2022-06-08 20:38:07 +10:00
parent 5805fb3c7a
commit 983a36f2f5
4 changed files with 416 additions and 144 deletions
+406 -135
View File
@@ -1821,8 +1821,6 @@ struct menudialogdef g_AntiOptionsMenuDialog = {
NULL,
};
const char var7f1b2d50[] = "\n";
s32 menuhandlerCoopDifficulty(s32 operation, struct menuitem *item, union handlerdata *data)
{
switch (operation) {
@@ -1960,74 +1958,36 @@ s32 func0f104720(s32 value)
return 20;
}
struct mission missions[] = {
// first stage index, name
{ 0, L_OPTIONS_123 }, // "Mission 1"
{ 3, L_OPTIONS_124 }, // "Mission 2"
{ 4, L_OPTIONS_125 }, // "Mission 3"
{ 6, L_OPTIONS_126 }, // "Mission 4"
{ 9, L_OPTIONS_127 }, // "Mission 5"
{ 12, L_OPTIONS_128 }, // "Mission 6"
{ 14, L_OPTIONS_129 }, // "Mission 7"
{ 15, L_OPTIONS_130 }, // "Mission 8"
{ 16, L_OPTIONS_131 }, // "Mission 9"
{ 99, L_OPTIONS_132 }, // "Special Assignments"
};
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel menuhandler0010476c
glabel menuhandlerMissionList
.late_rodata
glabel var7f1b2d9c
.word menuhandler0010476c+0x80 # f1047ec
glabel var7f1b2da0
.word menuhandler0010476c+0x394 # f104b00
glabel var7f1b2da4
.word menuhandler0010476c+0x144 # f1048b0
glabel var7f1b2da8
.word menuhandler0010476c+0x400 # f104b6c
glabel var7f1b2dac
.word menuhandler0010476c+0x434 # f104ba0
glabel var7f1b2db0
.word menuhandler0010476c+0x1d0 # f10493c
glabel var7f1b2db4
.word menuhandler0010476c+0x2a8 # f104a14
glabel var7f1b2db8
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dbc
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dc0
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dc4
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dc8
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dcc
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dd0
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dd4
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dd8
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2ddc
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2de0
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2de4
.word menuhandler0010476c+0x47c # f104be8
glabel var7f1b2de8
.word menuhandler0010476c+0xe10 # f10557c
glabel var7f1b2dec
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2df0
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2df4
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2df8
.word menuhandler0010476c+0xe18 # f105584
glabel var7f1b2dfc
.word menuhandler0010476c+0x2b8 # f104a24
glabel jtbl_var7f1b2d9c
.word .L0f1047ec
.word .L0f104b00
.word .L0f1048b0
.word .L0f104b6c
.word .L0f104ba0
.word .L0f10493c
.word .L0f104a14
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f104be8
.word .L0f10557c
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f105584
.word .L0f104a24
.text
/* f10476c: 27bdfe08 */ addiu $sp,$sp,-504
/* f104770: 3c0e8007 */ lui $t6,%hi(missions)
@@ -2057,11 +2017,12 @@ glabel var7f1b2dfc
/* f1047cc: 1020036d */ beqz $at,.L0f105584
/* f1047d0: af190004 */ sw $t9,0x4($t8)
/* f1047d4: 000f7880 */ sll $t7,$t7,0x2
/* f1047d8: 3c017f1b */ lui $at,%hi(var7f1b2d9c)
/* f1047d8: 3c017f1b */ lui $at,%hi(jtbl_var7f1b2d9c)
/* f1047dc: 002f0821 */ addu $at,$at,$t7
/* f1047e0: 8c2f2d9c */ lw $t7,%lo(var7f1b2d9c)($at)
/* f1047e0: 8c2f2d9c */ lw $t7,%lo(jtbl_var7f1b2d9c)($at)
/* f1047e4: 01e00008 */ jr $t7
/* f1047e8: 00000000 */ nop
.L0f1047ec:
/* f1047ec: 3c0a800a */ lui $t2,%hi(g_GameFile)
/* f1047f0: 3c09800a */ lui $t1,%hi(g_GameFile)
/* f1047f4: 3c08800a */ lui $t0,%hi(g_MissionConfig)
@@ -2118,12 +2079,13 @@ glabel var7f1b2dfc
/* f1048a4: 01c2c021 */ addu $t8,$t6,$v0
/* f1048a8: 10000336 */ b .L0f105584
/* f1048ac: ae180000 */ sw $t8,0x0($s0)
.L0f1048b0:
/* f1048b0: 8e050004 */ lw $a1,0x4($s0)
/* f1048b4: 24040001 */ addiu $a0,$zero,0x1
/* f1048b8: 27a6018c */ addiu $a2,$sp,0x18c
/* f1048bc: 54a00009 */ bnezl $a1,.L0f1048e4
/* f1048c0: 8e030000 */ lw $v1,0x0($s0)
/* f1048c4: 0fc411db */ jal menuhandler0010476c
/* f1048c4: 0fc411db */ jal menuhandlerMissionList
/* f1048c8: 8fa501fc */ lw $a1,0x1fc($sp)
/* f1048cc: 0fc41199 */ jal getNumUnlockedSpecialStages
/* f1048d0: 00000000 */ nop
@@ -2155,11 +2117,12 @@ glabel var7f1b2dfc
/* f104930: 94841e72 */ lhu $a0,%lo(g_StageNames+0x6)($a0)
/* f104934: 10000315 */ b .L0f10558c
/* f104938: 8fbf003c */ lw $ra,0x3c($sp)
.L0f10493c:
/* f10493c: 8e070000 */ lw $a3,0x0($s0)
/* f104940: 24040001 */ addiu $a0,$zero,0x1
/* f104944: 8fa501fc */ lw $a1,0x1fc($sp)
/* f104948: 27a60178 */ addiu $a2,$sp,0x178
/* f10494c: 0fc411db */ jal menuhandler0010476c
/* f10494c: 0fc411db */ jal menuhandlerMissionList
/* f104950: afa70188 */ sw $a3,0x188($sp)
/* f104954: 0fc41199 */ jal getNumUnlockedSpecialStages
/* f104958: 00000000 */ nop
@@ -2212,10 +2175,12 @@ glabel var7f1b2dfc
/* f104a08: 24841c00 */ addiu $a0,$a0,%lo(g_SoloMissionDifficultyMenuDialog)
/* f104a0c: 100002de */ b .L0f105588
/* f104a10: 00001025 */ or $v0,$zero,$zero
.L0f104a14:
/* f104a14: 3c0f000f */ lui $t7,0xf
/* f104a18: 35efffff */ ori $t7,$t7,0xffff
/* f104a1c: 100002d9 */ b .L0f105584
/* f104a20: ae0f0000 */ sw $t7,0x0($s0)
.L0f104a24:
/* f104a24: 8e0e0004 */ lw $t6,0x4($s0)
/* f104a28: 3c08800a */ lui $t0,%hi(g_MissionConfig)
/* f104a2c: 2508dfe8 */ addiu $t0,$t0,%lo(g_MissionConfig)
@@ -2234,7 +2199,7 @@ glabel var7f1b2dfc
/* f104a60: 24040001 */ addiu $a0,$zero,0x1
/* f104a64: 27a60168 */ addiu $a2,$sp,0x168
/* f104a68: ae190000 */ sw $t9,0x0($s0)
/* f104a6c: 0fc411db */ jal menuhandler0010476c
/* f104a6c: 0fc411db */ jal menuhandlerMissionList
/* f104a70: 8fa501fc */ lw $a1,0x1fc($sp)
/* f104a74: 0fc41199 */ jal getNumUnlockedSpecialStages
/* f104a78: 00000000 */ nop
@@ -2273,9 +2238,10 @@ glabel var7f1b2dfc
/* f104af4: afa30164 */ sw $v1,0x164($sp)
/* f104af8: 100002a3 */ b .L0f105588
/* f104afc: 00001025 */ or $v0,$zero,$zero
.L0f104b00:
/* f104b00: 24040001 */ addiu $a0,$zero,0x1
/* f104b04: 8fa501fc */ lw $a1,0x1fc($sp)
/* f104b08: 0fc411db */ jal menuhandler0010476c
/* f104b08: 0fc411db */ jal menuhandlerMissionList
/* f104b0c: 27a60150 */ addiu $a2,$sp,0x150
/* f104b10: 0fc41199 */ jal getNumUnlockedSpecialStages
/* f104b14: 00000000 */ nop
@@ -2302,6 +2268,7 @@ glabel var7f1b2dfc
/* f104b60: 25d90001 */ addiu $t9,$t6,0x1
/* f104b64: 10000287 */ b .L0f105584
/* f104b68: ae190000 */ sw $t9,0x0($s0)
.L0f104b6c:
/* f104b6c: 8e030000 */ lw $v1,0x0($s0)
/* f104b70: 8e0f000c */ lw $t7,0xc($s0)
/* f104b74: 0003c0c0 */ sll $t8,$v1,0x3
@@ -2316,13 +2283,14 @@ glabel var7f1b2dfc
/* f104b94: 95c40004 */ lhu $a0,0x4($t6)
/* f104b98: 1000027c */ b .L0f10558c
/* f104b9c: 8fbf003c */ lw $ra,0x3c($sp)
.L0f104ba0:
/* f104ba0: 8e030000 */ lw $v1,0x0($s0)
/* f104ba4: 8e19000c */ lw $t9,0xc($s0)
/* f104ba8: 24040001 */ addiu $a0,$zero,0x1
/* f104bac: 8fa501fc */ lw $a1,0x1fc($sp)
/* f104bb0: 14790009 */ bne $v1,$t9,.L0f104bd8
/* f104bb4: 000370c0 */ sll $t6,$v1,0x3
/* f104bb8: 0fc411db */ jal menuhandler0010476c
/* f104bb8: 0fc411db */ jal menuhandlerMissionList
/* f104bbc: 27a6013c */ addiu $a2,$sp,0x13c
/* f104bc0: 0fc41199 */ jal getNumUnlockedSpecialStages
/* f104bc4: 00000000 */ nop
@@ -2335,6 +2303,7 @@ glabel var7f1b2dfc
/* f104bdc: 8f2f0000 */ lw $t7,0x0($t9)
/* f104be0: 10000268 */ b .L0f105584
/* f104be4: ae0f0008 */ sw $t7,0x8($s0)
.L0f104be8:
/* f104be8: 8e180000 */ lw $t8,0x0($s0)
/* f104bec: afb80138 */ sw $t8,0x138($sp)
/* f104bf0: 8e0a0008 */ lw $t2,0x8($s0)
@@ -2346,7 +2315,7 @@ glabel var7f1b2dfc
/* f104c08: 24040001 */ addiu $a0,$zero,0x1
/* f104c0c: 8fa501fc */ lw $a1,0x1fc($sp)
/* f104c10: 27a600dc */ addiu $a2,$sp,0xdc
/* f104c14: 0fc411db */ jal menuhandler0010476c
/* f104c14: 0fc411db */ jal menuhandlerMissionList
/* f104c18: afaa0134 */ sw $t2,0x134($sp)
/* f104c1c: 0fc41199 */ jal getNumUnlockedSpecialStages
/* f104c20: 00000000 */ nop
@@ -2965,6 +2934,7 @@ glabel var7f1b2dfc
/* f105570: 00402025 */ or $a0,$v0,$zero
/* f105574: 10000005 */ b .L0f10558c
/* f105578: 8fbf003c */ lw $ra,0x3c($sp)
.L0f10557c:
/* f10557c: 240e002a */ addiu $t6,$zero,0x2a
/* f105580: ae0e0000 */ sw $t6,0x0($s0)
.L0f105584:
@@ -2979,58 +2949,34 @@ glabel var7f1b2dfc
);
#else
GLOBAL_ASM(
glabel menuhandler0010476c
glabel menuhandlerMissionList
.late_rodata
glabel var7f1ad09cnb
.word menuhandler0010476c+0x080
glabel var7f1ad0a0nb
.word menuhandler0010476c+0x394
glabel var7f1ad0a4nb
.word menuhandler0010476c+0x144
glabel var7f1ad0a8nb
.word menuhandler0010476c+0x400
glabel var7f1ad0acnb
.word menuhandler0010476c+0x434
glabel var7f1ad0b0nb
.word menuhandler0010476c+0x1d0
glabel var7f1ad0b4nb
.word menuhandler0010476c+0x2a8
glabel var7f1ad0b8nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0bcnb
.word menuhandler0010476c+0xd68
glabel var7f1ad0c0nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0c4nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0c8nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0ccnb
.word menuhandler0010476c+0xd68
glabel var7f1ad0d0nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0d4nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0d8nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0dcnb
.word menuhandler0010476c+0xd68
glabel var7f1ad0e0nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0e4nb
.word menuhandler0010476c+0x47c
glabel var7f1ad0e8nb
.word menuhandler0010476c+0xd60
glabel var7f1ad0ecnb
.word menuhandler0010476c+0xd68
glabel var7f1ad0f0nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0f4nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0f8nb
.word menuhandler0010476c+0xd68
glabel var7f1ad0fcnb
.word menuhandler0010476c+0x2b8
glabel jtbl_var7f1ad09cnb
.word .NB0f1005ec
.word .NB0f100900
.word .NB0f1006b0
.word .NB0f10096c
.word .NB0f1009a0
.word .NB0f10073c
.word .NB0f100814
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1009e8
.word .NB0f1012cc
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f1012d4
.word .NB0f100824
.text
/* f10056c: 27bdfe10 */ addiu $sp,$sp,-496
/* f100570: 3c0e8007 */ lui $t6,0x8007
@@ -3060,11 +3006,12 @@ glabel var7f1ad0fcnb
/* f1005cc: 10200341 */ beqz $at,.NB0f1012d4
/* f1005d0: af190004 */ sw $t9,0x4($t8)
/* f1005d4: 000f7880 */ sll $t7,$t7,0x2
/* f1005d8: 3c017f1b */ lui $at,0x7f1b
/* f1005d8: 3c017f1b */ lui $at,%hi(jtbl_var7f1ad09cnb)
/* f1005dc: 002f0821 */ addu $at,$at,$t7
/* f1005e0: 8c2fd09c */ lw $t7,-0x2f64($at)
/* f1005e0: 8c2fd09c */ lw $t7,%lo(jtbl_var7f1ad09cnb)($at)
/* f1005e4: 01e00008 */ jr $t7
/* f1005e8: 00000000 */ sll $zero,$zero,0x0
.NB0f1005ec:
/* f1005ec: 3c0a800a */ lui $t2,0x800a
/* f1005f0: 3c09800a */ lui $t1,0x800a
/* f1005f4: 3c08800a */ lui $t0,0x800a
@@ -3121,12 +3068,13 @@ glabel var7f1ad0fcnb
/* f1006a4: 01c2c021 */ addu $t8,$t6,$v0
/* f1006a8: 1000030a */ beqz $zero,.NB0f1012d4
/* f1006ac: ae180000 */ sw $t8,0x0($s0)
.NB0f1006b0:
/* f1006b0: 8e050004 */ lw $a1,0x4($s0)
/* f1006b4: 24040001 */ addiu $a0,$zero,0x1
/* f1006b8: 27a60184 */ addiu $a2,$sp,0x184
/* f1006bc: 54a00009 */ bnezl $a1,.NB0f1006e4
/* f1006c0: 8e030000 */ lw $v1,0x0($s0)
/* f1006c4: 0fc4015b */ jal menuhandler0010476c
/* f1006c4: 0fc4015b */ jal menuhandlerMissionList
/* f1006c8: 8fa501f4 */ lw $a1,0x1f4($sp)
/* f1006cc: 0fc40119 */ jal getNumUnlockedSpecialStages
/* f1006d0: 00000000 */ sll $zero,$zero,0x0
@@ -3158,11 +3106,12 @@ glabel var7f1ad0fcnb
/* f100730: 94844402 */ lhu $a0,0x4402($a0)
/* f100734: 100002e9 */ beqz $zero,.NB0f1012dc
/* f100738: 8fbf003c */ lw $ra,0x3c($sp)
.NB0f10073c:
/* f10073c: 8e070000 */ lw $a3,0x0($s0)
/* f100740: 24040001 */ addiu $a0,$zero,0x1
/* f100744: 8fa501f4 */ lw $a1,0x1f4($sp)
/* f100748: 27a60170 */ addiu $a2,$sp,0x170
/* f10074c: 0fc4015b */ jal menuhandler0010476c
/* f10074c: 0fc4015b */ jal menuhandlerMissionList
/* f100750: afa70180 */ sw $a3,0x180($sp)
/* f100754: 0fc40119 */ jal getNumUnlockedSpecialStages
/* f100758: 00000000 */ sll $zero,$zero,0x0
@@ -3215,10 +3164,12 @@ glabel var7f1ad0fcnb
/* f100808: 24844190 */ addiu $a0,$a0,0x4190
/* f10080c: 100002b2 */ beqz $zero,.NB0f1012d8
/* f100810: 00001025 */ or $v0,$zero,$zero
.NB0f100814:
/* f100814: 3c0f000f */ lui $t7,0xf
/* f100818: 35efffff */ ori $t7,$t7,0xffff
/* f10081c: 100002ad */ beqz $zero,.NB0f1012d4
/* f100820: ae0f0000 */ sw $t7,0x0($s0)
.NB0f100824:
/* f100824: 8e0e0004 */ lw $t6,0x4($s0)
/* f100828: 3c08800a */ lui $t0,0x800a
/* f10082c: 250827a8 */ addiu $t0,$t0,0x27a8
@@ -3237,7 +3188,7 @@ glabel var7f1ad0fcnb
/* f100860: 24040001 */ addiu $a0,$zero,0x1
/* f100864: 27a60160 */ addiu $a2,$sp,0x160
/* f100868: ae190000 */ sw $t9,0x0($s0)
/* f10086c: 0fc4015b */ jal menuhandler0010476c
/* f10086c: 0fc4015b */ jal menuhandlerMissionList
/* f100870: 8fa501f4 */ lw $a1,0x1f4($sp)
/* f100874: 0fc40119 */ jal getNumUnlockedSpecialStages
/* f100878: 00000000 */ sll $zero,$zero,0x0
@@ -3276,9 +3227,10 @@ glabel var7f1ad0fcnb
/* f1008f4: afa3015c */ sw $v1,0x15c($sp)
/* f1008f8: 10000277 */ beqz $zero,.NB0f1012d8
/* f1008fc: 00001025 */ or $v0,$zero,$zero
.NB0f100900:
/* f100900: 24040001 */ addiu $a0,$zero,0x1
/* f100904: 8fa501f4 */ lw $a1,0x1f4($sp)
/* f100908: 0fc4015b */ jal menuhandler0010476c
/* f100908: 0fc4015b */ jal menuhandlerMissionList
/* f10090c: 27a60148 */ addiu $a2,$sp,0x148
/* f100910: 0fc40119 */ jal getNumUnlockedSpecialStages
/* f100914: 00000000 */ sll $zero,$zero,0x0
@@ -3305,6 +3257,7 @@ glabel var7f1ad0fcnb
/* f100960: 25d90001 */ addiu $t9,$t6,0x1
/* f100964: 1000025b */ beqz $zero,.NB0f1012d4
/* f100968: ae190000 */ sw $t9,0x0($s0)
.NB0f10096c:
/* f10096c: 8e030000 */ lw $v1,0x0($s0)
/* f100970: 8e0f000c */ lw $t7,0xc($s0)
/* f100974: 0003c0c0 */ sll $t8,$v1,0x3
@@ -3319,13 +3272,14 @@ glabel var7f1ad0fcnb
/* f100994: 95c40004 */ lhu $a0,0x4($t6)
/* f100998: 10000250 */ beqz $zero,.NB0f1012dc
/* f10099c: 8fbf003c */ lw $ra,0x3c($sp)
.NB0f1009a0:
/* f1009a0: 8e030000 */ lw $v1,0x0($s0)
/* f1009a4: 8e19000c */ lw $t9,0xc($s0)
/* f1009a8: 24040001 */ addiu $a0,$zero,0x1
/* f1009ac: 8fa501f4 */ lw $a1,0x1f4($sp)
/* f1009b0: 14790009 */ bne $v1,$t9,.NB0f1009d8
/* f1009b4: 000370c0 */ sll $t6,$v1,0x3
/* f1009b8: 0fc4015b */ jal menuhandler0010476c
/* f1009b8: 0fc4015b */ jal menuhandlerMissionList
/* f1009bc: 27a60134 */ addiu $a2,$sp,0x134
/* f1009c0: 0fc40119 */ jal getNumUnlockedSpecialStages
/* f1009c4: 00000000 */ sll $zero,$zero,0x0
@@ -3338,6 +3292,7 @@ glabel var7f1ad0fcnb
/* f1009dc: 8f2f0000 */ lw $t7,0x0($t9)
/* f1009e0: 1000023c */ beqz $zero,.NB0f1012d4
/* f1009e4: ae0f0008 */ sw $t7,0x8($s0)
.NB0f1009e8:
/* f1009e8: 8e180000 */ lw $t8,0x0($s0)
/* f1009ec: afb80130 */ sw $t8,0x130($sp)
/* f1009f0: 8e0a0008 */ lw $t2,0x8($s0)
@@ -3349,7 +3304,7 @@ glabel var7f1ad0fcnb
/* f100a08: 24040001 */ addiu $a0,$zero,0x1
/* f100a0c: 8fa501f4 */ lw $a1,0x1f4($sp)
/* f100a10: 27a600d4 */ addiu $a2,$sp,0xd4
/* f100a14: 0fc4015b */ jal menuhandler0010476c
/* f100a14: 0fc4015b */ jal menuhandlerMissionList
/* f100a18: afaa012c */ sw $t2,0x12c($sp)
/* f100a1c: 0fc40119 */ jal getNumUnlockedSpecialStages
/* f100a20: 00000000 */ sll $zero,$zero,0x0
@@ -3924,6 +3879,7 @@ glabel var7f1ad0fcnb
/* f1012c0: 00402025 */ or $a0,$v0,$zero
/* f1012c4: 10000005 */ beqz $zero,.NB0f1012dc
/* f1012c8: 8fbf003c */ lw $ra,0x3c($sp)
.NB0f1012cc:
/* f1012cc: 2418002a */ addiu $t8,$zero,0x2a
/* f1012d0: ae180000 */ sw $t8,0x0($s0)
.NB0f1012d4:
@@ -3938,6 +3894,321 @@ glabel var7f1ad0fcnb
);
#endif
const char var7f1b2d50[] = "\n";
struct optiongroup missions[] = {
{ 0, L_OPTIONS_123 }, // "Mission 1"
{ 3, L_OPTIONS_124 }, // "Mission 2"
{ 4, L_OPTIONS_125 }, // "Mission 3"
{ 6, L_OPTIONS_126 }, // "Mission 4"
{ 9, L_OPTIONS_127 }, // "Mission 5"
{ 12, L_OPTIONS_128 }, // "Mission 6"
{ 14, L_OPTIONS_129 }, // "Mission 7"
{ 15, L_OPTIONS_130 }, // "Mission 8"
{ 16, L_OPTIONS_131 }, // "Mission 9"
{ 99, L_OPTIONS_132 }, // "Special Assignments"
};
// Mismatch: sp124 and the solo mission star loop is handled differently
//s32 menuhandlerMissionList(s32 operation, struct menuitem *item, union handlerdata *data)
//{
// struct optiongroup groups[] = { // 1a8
// { 0, L_OPTIONS_123 }, // "Mission 1"
// { 3, L_OPTIONS_124 }, // "Mission 2"
// { 4, L_OPTIONS_125 }, // "Mission 3"
// { 6, L_OPTIONS_126 }, // "Mission 4"
// { 9, L_OPTIONS_127 }, // "Mission 5"
// { 12, L_OPTIONS_128 }, // "Mission 6"
// { 14, L_OPTIONS_129 }, // "Mission 7"
// { 15, L_OPTIONS_130 }, // "Mission 8"
// { 16, L_OPTIONS_131 }, // "Mission 9"
// { 99, L_OPTIONS_132 }, // "Special Assignments"
// };
//
// s32 i;
// s32 j;
// bool stageiscomplete;
// union handlerdata sp18c;
// u32 sp188;
// union handlerdata sp178;
// union handlerdata sp168;
// s32 sp164;
// s32 sp160;
// union handlerdata sp150;
// s32 stack2;
// union handlerdata sp13c;
// Gfx *gdl; // 138
// struct menuitemrenderdata *renderdata; // 134
// s32 x; // 130
// s32 y; // 12c
// s32 sp124;
// s32 stack3;
// char text[50]; // f0
// s32 stageindex; // ec
// union handlerdata spdc;
// s32 extra;
// u32 stack[2];
//
// switch (operation) {
// case MENUOP_GETOPTIONCOUNT:
// data->list.value = 0;
//
// for (i = 0; i < 17; i++) {
// stageiscomplete = false;
//
// for (j = 0; j < 3; j++) {
// if (g_GameFile.besttimes[i][j] != 0) {
// stageiscomplete = true;
// }
//
// if ((g_MissionConfig.iscoop || g_MissionConfig.isanti)
// && (g_GameFile.coopcompletions[j] & (1 << i))) {
// stageiscomplete = true;
// }
// }
//
// data->list.value++;
//
// if (!stageiscomplete) {
// break;
// }
// }
//
// data->list.value += getNumUnlockedSpecialStages();
// break;
// case MENUOP_GETOPTIONTEXT:
// // 8b0
// if (data->list.unk04u32 == 0) {
// menuhandlerMissionList(MENUOP_GETOPTIONCOUNT, item, &sp18c);
// data->list.unk04u32 = sp18c.list.value - getNumUnlockedSpecialStages();
// }
//
// if (data->list.value < data->list.unk04u32) {
// // Regular stage such as "dataDyne Central - Defection"
// // Return the name before the dash, such as "dataDyne Central"
// return (s32)langGet(g_StageNames[data->list.value].name1);
// }
//
// // Special stages have no dash and suffix, so just return the name
// return (s32)langGet(g_StageNames[func0f104720(data->list.value - data->list.unk04u32)].name1);
// case MENUOP_SET:
// sp188 = data->list.value;
// menuhandlerMissionList(MENUOP_GETOPTIONCOUNT, item, &sp178);
// sp178.list.value -= getNumUnlockedSpecialStages();
//
// if (data->list.value >= sp178.list.value) {
// sp188 = func0f104720(data->list.value - sp178.list.value);
// }
//
// g_Vars.mplayerisrunning = false;
// g_Vars.normmplayerisrunning = false;
// g_MissionConfig.stagenum = g_StageNames[sp188].stagenum;
// g_MissionConfig.stageindex = sp188;
//
// if (g_MissionConfig.iscoop) {
// menuPushDialog(&g_CoopMissionDifficultyMenuDialog);
// } else if (g_MissionConfig.isanti) {
// menuPushDialog(&g_AntiMissionDifficultyMenuDialog);
// } else {
// menuPushDialog(&g_SoloMissionDifficultyMenuDialog);
// }
//
// break;
// case MENUOP_GETOPTIONVALUE:
// data->list.value = 0xfffff;
// break;
// case MENUOP_25:
// if (data->list.unk04 == 0 && !g_MissionConfig.iscoop && !g_MissionConfig.isanti) {
// data->list.value = g_GameFile.autostageindex;
//
// menuhandlerMissionList(MENUOP_GETOPTIONCOUNT, item, &sp168);
// sp168.list.value -= getNumUnlockedSpecialStages();
//
// if (data->list.value >= sp168.list.value) {
// sp164 = getNumUnlockedSpecialStages();
//
// data->list.value = sp168.list.value - 1;
//
// for (sp160 = 0; sp160 < sp164; sp160++) {
// if (func0f104720(sp160) == g_GameFile.autostageindex) {
// data->list.value = sp168.list.values32 + sp160;
// }
// }
// }
// }
// break;
// case MENUOP_GETOPTGROUPCOUNT:
// menuhandlerMissionList(MENUOP_GETOPTIONCOUNT, item, &sp150);
// sp150.list.value -= getNumUnlockedSpecialStages();
//
// data->list.unk0c = 0;
//
// for (i = 0; i < ARRAYCOUNT(groups); i++) {
// if (groups[i].offset < sp150.list.value) {
// data->list.unk0c++;
// }
// }
//
// data->list.value = data->list.unk0c + 1;
// break;
// case MENUOP_GETOPTGROUPTEXT:
// if (data->list.unk0c == data->list.value) {
// return (s32)langGet(groups[9].name); // "Special Assignments"
// }
// return (s32)langGet(groups[data->list.value].name);
// case MENUOP_GETGROUPSTARTINDEX:
// if (data->list.unk0c == data->list.value) {
// menuhandlerMissionList(MENUOP_GETOPTIONCOUNT, item, &sp13c);
// data->list.groupstartindex = sp13c.list.value - getNumUnlockedSpecialStages();
// } else {
// data->list.groupstartindex = groups[data->list.value].offset;
// }
// break;
// case MENUOP_RENDER:
// gdl = data->type19.gdl;
// renderdata = data->type19.renderdata2;
// stageindex = data->type19.unk04;
// sp124 = 0;
//
// if (data->list.unk0c == 0) {
// menuhandlerMissionList(MENUOP_GETOPTIONCOUNT, item, &spdc);
// data->list.unk0c = spdc.list.value - getNumUnlockedSpecialStages();
// }
//
// if (data->type19.unk04 >= data->type19.unk0c) {
// stageindex = func0f104720(data->type19.unk04 - data->type19.unk0c);
// }
//
// // Draw the thumbnail
// gDPPipeSync(gdl++);
// gDPSetTexturePersp(gdl++, G_TP_NONE);
// gDPSetAlphaCompare(gdl++, G_AC_NONE);
// gDPSetTextureLOD(gdl++, G_TL_TILE);
// gDPSetTextureConvert(gdl++, G_TC_FILT);
//
//#if VERSION >= VERSION_NTSC_1_0
// texSelect(&gdl, g_TexGeneralConfigs + 13 + stageindex, 2, 0, 2, 1, 0);
//#else
// texSelect(&gdl, g_TexGeneralConfigs + 13 + stageindex, 1, 0, 2, 1, 0);
//#endif
//
// gDPSetCycleType(gdl++, G_CYC_1CYCLE);
// gDPSetCombineLERP(gdl++, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0);
// gDPSetTextureFilter(gdl++, G_TF_POINT);
//
//#if VERSION >= VERSION_NTSC_1_0
// gDPSetEnvColorViaWord(gdl++, 0xffffff00 | ((renderdata->colour & 0xff) * 255 / 256));
//#endif
//
// gSPTextureRectangle(gdl++,
// ((renderdata->x + 4) << 2) * g_ScaleX, (renderdata->y + 3) << 2,
// ((renderdata->x + 60) << 2) * g_ScaleX, (renderdata->y + 39) << 2,
// G_TX_RENDERTILE, 0, 0x0480, 1024 / g_ScaleX, -1024);
//
// if (g_MissionConfig.isanti) {
// // No stars
// } else if (g_MissionConfig.iscoop) {
// // f0c
// texSelect(&gdl, &g_TexGeneralConfigs[36], 2, 0, 2, 1, 0);
//
// gDPSetCycleType(gdl++, G_CYC_1CYCLE);
// gDPSetTextureFilter(gdl++, G_TF_POINT);
//
// for (i = 0, extra = 63; i < 3; i++, extra += 17) {
// if ((g_GameFile.coopcompletions[i] & (1 << stageindex)) == 0) {
//#if VERSION >= VERSION_NTSC_1_0
// gDPSetEnvColorViaWord(gdl++, 0xffffff00 | ((renderdata->colour & 0xff) * 63 / 256));
//#else
// gDPSetEnvColorViaWord(gdl++, 0xffffff3f);
//#endif
// gDPSetCombineLERP(gdl++,
// TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0,
// TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0);
// } else {
// // 020
//#if VERSION >= VERSION_NTSC_1_0
// gDPSetEnvColorViaWord(gdl++, 0xffffff00 | ((renderdata->colour & 0xff) * 207 / 256));
//#else
// gDPSetEnvColorViaWord(gdl++, 0xffffffcf);
//#endif
// gDPSetCombineMode(gdl++, G_CC_DECALRGBA, G_CC_DECALRGBA);
// }
//
// gSPTextureRectangle(gdl++,
// ((renderdata->x + extra) << 2) * g_ScaleX, (renderdata->y + 25) << 2,
// ((renderdata->x + extra + 14) << 2) * g_ScaleX, (renderdata->y + 39) << 2,
// G_TX_RENDERTILE, 0x0010, 0x01C0, 1024 / g_ScaleX, -1024);
// }
// } else {
// // 190
// texSelect(&gdl, &g_TexGeneralConfigs[34], 2, 0, 2, 1, 0);
//
// gDPSetCycleType(gdl++, G_CYC_1CYCLE);
// gDPSetTextureFilter(gdl++, G_TF_POINT);
// gDPSetCombineMode(gdl++, G_CC_DECALRGBA, G_CC_DECALRGBA);
//
//#if VERSION >= VERSION_NTSC_1_0
// gDPSetEnvColorViaWord(gdl++, 0xffffff00 | ((renderdata->colour & 0xff) * 175 / 256));
//#else
// gDPSetEnvColorViaWord(gdl++, 0xffffffaf);
//#endif
//
// sp124 = 0;
//
// for (i = 0; i < 3; i++) {
// if (g_GameFile.besttimes[stageindex][i] != 0) {
// sp124 = i + 1;
// }
// }
//
// for (i = 0; i < 3; i++) {
// if (i == sp124) {
//#if VERSION >= VERSION_NTSC_1_0
// gDPSetEnvColorViaWord(gdl++, 0xffffff00 | ((renderdata->colour & 0xff) * 63 / 256));
//#else
// gDPSetEnvColorViaWord(gdl++, 0xffffff3f);
//#endif
// gDPSetCombineLERP(gdl++,
// TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0,
// TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0);
// }
//
// gSPTextureRectangle(gdl++,
// ((renderdata->x + (63 + i * 17)) << 2) * g_ScaleX, (renderdata->y + 25) << 2,
// ((renderdata->x + (63 + i * 17) + 14) << 2) * g_ScaleX, (renderdata->y + 39) << 2,
// G_TX_RENDERTILE, 0x0010, 0x01C0, 1024 / g_ScaleX, -1024);
// }
// }
//
// x = renderdata->x + 62;
// y = renderdata->y + 3;
//
// gdl = func0f153628(gdl);
//
// // Draw first part of name
// strcpy(text, langGet(g_StageNames[stageindex].name1));
// strcat(text, "\n");
//
// gdl = textRenderProjected(gdl, &x, &y, text, g_CharsHandelGothicMd, g_FontHandelGothicMd,
// renderdata->colour, viGetWidth(), viGetHeight(), 0, 0);
//
// // Draw last part of name
// strcpy(text, langGet(g_StageNames[stageindex].name2));
//
// gdl = textRenderProjected(gdl, &x, &y, text, g_CharsHandelGothicSm, g_FontHandelGothicSm,
// renderdata->colour, viGetWidth(), viGetHeight(), 0, 0);
//
// gdl = func0f153780(gdl);
//
// return (s32)gdl;
// case MENUOP_GETOPTIONHEIGHT:
// data->list.value = 42;
// break;
// }
//
// return 0;
//}
s32 menudialog0010559c(s32 operation, struct menudialogdef *dialogdef, union handlerdata *data)
{
switch (operation) {
@@ -5659,7 +5930,7 @@ struct menudialogdef g_CinemaMenuDialog = {
};
struct menuitem g_SelectMissionMenuItems[] = {
{ MENUITEMTYPE_LIST, 0, 0x00200000, 0x000000eb, 0x00000000, menuhandler0010476c },
{ MENUITEMTYPE_LIST, 0, 0x00200000, 0x000000eb, 0x00000000, menuhandlerMissionList },
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL },
};
-1
View File
@@ -288,7 +288,6 @@ extern u32 g_MpNumJoined;
extern u16 g_ControlStyleOptions[];
extern struct menudialogdef g_PreAndPostMissionBriefingMenuDialog;
extern struct stageoverviewentry g_StageNames[NUM_SOLOSTAGES];
extern struct mission missions[];
extern struct menudialogdef g_SoloMissionControlStyleMenuDialog;
extern struct menudialogdef g_CiControlStyleMenuDialog;
extern struct menudialogdef g_CiControlStylePlayer2MenuDialog;
+1 -1
View File
@@ -44,7 +44,7 @@ s32 menuhandlerAcceptPdModeSettings(s32 operation, struct menuitem *item, union
s32 menuhandlerBuddyOptionsContinue(s32 operation, struct menuitem *item, union handlerdata *data);
s32 menuhandlerCoopDifficulty(s32 operation, struct menuitem *item, union handlerdata *data);
s32 menuhandlerAntiDifficulty(s32 operation, struct menuitem *item, union handlerdata *data);
s32 menuhandler0010476c(s32 operation, struct menuitem *item, union handlerdata *data);
s32 menuhandlerMissionList(s32 operation, struct menuitem *item, union handlerdata *data);
s32 menuhandlerControlStyle(s32 operation, struct menuitem *item, union handlerdata *data);
s32 menuhandlerInventoryList(s32 operation, struct menuitem *item, union handlerdata *data);
s32 menuhandler00106178(s32 operation, struct menuitem *item, union handlerdata *data);
+9 -7
View File
@@ -3116,11 +3116,6 @@ struct stagemusic {
s16 xtrack;
};
struct mission {
u32 first_stage_index;
u16 name;
};
struct var800a6600 {
f32 znear;
f32 zfar;
@@ -3326,7 +3321,10 @@ struct handlerdata_list {
u32 value;
s32 values32;
};
s32 unk04;
union {
s32 unk04;
u32 unk04u32;
};
s32 groupstartindex;
s32 unk0c;
};
@@ -3360,8 +3358,12 @@ struct menuitemrenderdata {
struct handlerdata_type19 {
Gfx *gdl;
s32 unk04;
union {
s32 unk04;
u32 unk04u32;
};
struct menuitemrenderdata *renderdata2;
s32 unk0c;
};
struct handlerdata_dialog1 {