diff --git a/asm/non_matchings/game_ui/func_800A277C.s b/asm/non_matchings/game_ui/func_800A277C.s index dba24b90..c2d12b1a 100644 --- a/asm/non_matchings/game_ui/func_800A277C.s +++ b/asm/non_matchings/game_ui/func_800A277C.s @@ -361,7 +361,7 @@ glabel func_800A277C /* 0A3860 800A2C60 0000C812 */ mflo $t9 /* 0A3864 800A2C64 272C7FF8 */ addiu $t4, $t9, 0x7ff8 /* 0A3868 800A2C68 A54C0444 */ sh $t4, 0x444($t2) -/* 0A386C 800A2C6C 0C00382C */ jal func_8000E0B0 +/* 0A386C 800A2C6C 0C00382C */ jal get_contpak_error /* 0A3870 800A2C70 AFA900A8 */ sw $t1, 0xa8($sp) /* 0A3874 800A2C74 8FA900A8 */ lw $t1, 0xa8($sp) /* 0A3878 800A2C78 1C40000D */ bgtz $v0, .L800A2CB0 @@ -420,7 +420,7 @@ glabel func_800A277C /* 0A3938 800A2D38 C4480350 */ lwc1 $f8, 0x350($v0) /* 0A393C 800A2D3C 00000000 */ nop /* 0A3940 800A2D40 460A4100 */ add.s $f4, $f8, $f10 -/* 0A3944 800A2D44 0C00382C */ jal func_8000E0B0 +/* 0A3944 800A2D44 0C00382C */ jal get_contpak_error /* 0A3948 800A2D48 E4440450 */ swc1 $f4, 0x450($v0) /* 0A394C 800A2D4C 1C40000A */ bgtz $v0, .L800A2D78 /* 0A3950 800A2D50 8FAF0098 */ lw $t7, 0x98($sp) @@ -884,11 +884,11 @@ glabel func_800A277C /* 0A4020 800A3420 8FA500C8 */ lw $a1, 0xc8($sp) /* 0A4024 800A3424 0C028E21 */ jal render_speedometer /* 0A4028 800A3428 00000000 */ nop -/* 0A402C 800A342C 0C00382C */ jal func_8000E0B0 +/* 0A402C 800A342C 0C00382C */ jal get_contpak_error /* 0A4030 800A3430 00000000 */ nop /* 0A4034 800A3434 1840009D */ blez $v0, .L800A36AC /* 0A4038 800A3438 00000000 */ nop -/* 0A403C 800A343C 0C00382C */ jal func_8000E0B0 +/* 0A403C 800A343C 0C00382C */ jal get_contpak_error /* 0A4040 800A3440 00000000 */ nop /* 0A4044 800A3444 24010001 */ li $at, 1 /* 0A4048 800A3448 10410008 */ beq $v0, $at, .L800A346C diff --git a/asm/non_matchings/menu/func_80094D28.s b/asm/non_matchings/menu/func_80094D28.s index 0402aea8..644e3331 100644 --- a/asm/non_matchings/menu/func_80094D28.s +++ b/asm/non_matchings/menu/func_80094D28.s @@ -1,636 +1,636 @@ -.late_rodata -glabel jpt_800E8508 -.word L80094DD0, L80094FB0, L80095084, L80095588, L80095110, L800951CC -glabel D_800E8520 -.float 1.2 - -.text -glabel func_80094D28 -/* 095928 80094D28 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 09592C 80094D2C AFBF002C */ sw $ra, 0x2c($sp) -/* 095930 80094D30 AFB30028 */ sw $s3, 0x28($sp) -/* 095934 80094D34 AFB20024 */ sw $s2, 0x24($sp) -/* 095938 80094D38 AFB10020 */ sw $s1, 0x20($sp) -/* 09593C 80094D3C AFB0001C */ sw $s0, 0x1c($sp) -/* 095940 80094D40 0C01BAA4 */ jal get_settings -/* 095944 80094D44 AFA40060 */ sw $a0, 0x60($sp) -/* 095948 80094D48 3C0E800E */ lui $t6, %hi(gNumberOfActivePlayers) # $t6, 0x800e -/* 09594C 80094D4C 8DCEF4BC */ lw $t6, %lo(gNumberOfActivePlayers)($t6) -/* 095950 80094D50 24010001 */ li $at, 1 -/* 095954 80094D54 15C10006 */ bne $t6, $at, .L80094D70 -/* 095958 80094D58 00408025 */ move $s0, $v0 -/* 09595C 80094D5C 3C048012 */ lui $a0, %hi(sMenuCurrDisplayList) # $a0, 0x8012 -/* 095960 80094D60 3C058012 */ lui $a1, %hi(sMenuCurrHudMat) # $a1, 0x8012 -/* 095964 80094D64 24A563A8 */ addiu $a1, %lo(sMenuCurrHudMat) # addiu $a1, $a1, 0x63a8 -/* 095968 80094D68 0C019FCB */ jal set_ortho_matrix_view -/* 09596C 80094D6C 248463A0 */ addiu $a0, %lo(sMenuCurrDisplayList) # addiu $a0, $a0, 0x63a0 -.L80094D70: -/* 095970 80094D70 00002025 */ move $a0, $zero -/* 095974 80094D74 0C019A25 */ jal camDisableUserView -/* 095978 80094D78 24050001 */ li $a1, 1 -/* 09597C 80094D7C 3C138012 */ lui $s3, %hi(gOptionBlinkTimer) # $s3, 0x8012 -/* 095980 80094D80 8E7363BC */ lw $s3, %lo(gOptionBlinkTimer)($s3) -/* 095984 80094D84 3C198012 */ lui $t9, %hi(gMenuOptionCount) # $t9, 0x8012 -/* 095988 80094D88 001378C0 */ sll $t7, $s3, 3 -/* 09598C 80094D8C 29E10100 */ slti $at, $t7, 0x100 -/* 095990 80094D90 14200003 */ bnez $at, .L80094DA0 -/* 095994 80094D94 01E09825 */ move $s3, $t7 -/* 095998 80094D98 241801FF */ li $t8, 511 -/* 09599C 80094D9C 03139823 */ subu $s3, $t8, $s3 -.L80094DA0: -/* 0959A0 80094DA0 8F3963E0 */ lw $t9, %lo(gMenuOptionCount)($t9) -/* 0959A4 80094DA4 00000000 */ nop -/* 0959A8 80094DA8 272AFFFF */ addiu $t2, $t9, -1 -/* 0959AC 80094DAC 2D410006 */ sltiu $at, $t2, 6 -/* 0959B0 80094DB0 102001F5 */ beqz $at, .L80095588 -/* 0959B4 80094DB4 000A5080 */ sll $t2, $t2, 2 -/* 0959B8 80094DB8 3C01800F */ lui $at, %hi(jpt_800E8508) # $at, 0x800f -/* 0959BC 80094DBC 002A0821 */ addu $at, $at, $t2 -/* 0959C0 80094DC0 8C2A8508 */ lw $t2, %lo(jpt_800E8508)($at) -/* 0959C4 80094DC4 00000000 */ nop -/* 0959C8 80094DC8 01400008 */ jr $t2 -/* 0959CC 80094DCC 00000000 */ nop -glabel L80094DD0 -/* 0959D0 80094DD0 3C108012 */ lui $s0, %hi(D_80126A94) # $s0, 0x8012 -/* 0959D4 80094DD4 8E106A94 */ lw $s0, %lo(D_80126A94)($s0) -/* 0959D8 80094DD8 3C118012 */ lui $s1, %hi(gTrackSelectViewPortHalfY) # $s1, 0x8012 -/* 0959DC 80094DDC 2A01003D */ slti $at, $s0, 0x3d -/* 0959E0 80094DE0 14200002 */ bnez $at, .L80094DEC -/* 0959E4 80094DE4 26316478 */ addiu $s1, %lo(gTrackSelectViewPortHalfY) # addiu $s1, $s1, 0x6478 -/* 0959E8 80094DE8 2410003C */ li $s0, 60 -.L80094DEC: -/* 0959EC 80094DEC 8E220000 */ lw $v0, ($s1) -/* 0959F0 80094DF0 24090005 */ li $t1, 5 -/* 0959F4 80094DF4 00025880 */ sll $t3, $v0, 2 -/* 0959F8 80094DF8 0169001A */ div $zero, $t3, $t1 -/* 0959FC 80094DFC 2403003C */ li $v1, 60 -/* 095A00 80094E00 15200002 */ bnez $t1, .L80094E0C -/* 095A04 80094E04 00000000 */ nop -/* 095A08 80094E08 0007000D */ break 7 -.L80094E0C: -/* 095A0C 80094E0C 2401FFFF */ li $at, -1 -/* 095A10 80094E10 15210004 */ bne $t1, $at, .L80094E24 -/* 095A14 80094E14 3C018000 */ lui $at, 0x8000 -/* 095A18 80094E18 15610002 */ bne $t3, $at, .L80094E24 -/* 095A1C 80094E1C 00000000 */ nop -/* 095A20 80094E20 0006000D */ break 6 -.L80094E24: -/* 095A24 80094E24 3C0F8012 */ lui $t7, %hi(gTrackSelectViewportY) # $t7, 0x8012 -/* 095A28 80094E28 8DEF6480 */ lw $t7, %lo(gTrackSelectViewportY)($t7) -/* 095A2C 80094E2C 00002025 */ move $a0, $zero -/* 095A30 80094E30 00006012 */ mflo $t4 -/* 095A34 80094E34 004C6823 */ subu $t5, $v0, $t4 -/* 095A38 80094E38 00106080 */ sll $t4, $s0, 2 -/* 095A3C 80094E3C 01B00019 */ multu $t5, $s0 -/* 095A40 80094E40 01906021 */ addu $t4, $t4, $s0 -/* 095A44 80094E44 000C6100 */ sll $t4, $t4, 4 -/* 095A48 80094E48 240D0140 */ li $t5, 320 -/* 095A4C 80094E4C 00007012 */ mflo $t6 -/* 095A50 80094E50 00000000 */ nop -/* 095A54 80094E54 00000000 */ nop -/* 095A58 80094E58 01C3001A */ div $zero, $t6, $v1 -/* 095A5C 80094E5C 14600002 */ bnez $v1, .L80094E68 -/* 095A60 80094E60 00000000 */ nop -/* 095A64 80094E64 0007000D */ break 7 -.L80094E68: -/* 095A68 80094E68 2401FFFF */ li $at, -1 -/* 095A6C 80094E6C 14610004 */ bne $v1, $at, .L80094E80 -/* 095A70 80094E70 3C018000 */ lui $at, 0x8000 -/* 095A74 80094E74 15C10002 */ bne $t6, $at, .L80094E80 -/* 095A78 80094E78 00000000 */ nop -/* 095A7C 80094E7C 0006000D */ break 6 -.L80094E80: -/* 095A80 80094E80 00009012 */ mflo $s2 -/* 095A84 80094E84 02403025 */ move $a2, $s2 -/* 095A88 80094E88 00000000 */ nop -/* 095A8C 80094E8C 0049001A */ div $zero, $v0, $t1 -/* 095A90 80094E90 15200002 */ bnez $t1, .L80094E9C -/* 095A94 80094E94 00000000 */ nop -/* 095A98 80094E98 0007000D */ break 7 -.L80094E9C: -/* 095A9C 80094E9C 2401FFFF */ li $at, -1 -/* 095AA0 80094EA0 15210004 */ bne $t1, $at, .L80094EB4 -/* 095AA4 80094EA4 3C018000 */ lui $at, 0x8000 -/* 095AA8 80094EA8 14410002 */ bne $v0, $at, .L80094EB4 -/* 095AAC 80094EAC 00000000 */ nop -/* 095AB0 80094EB0 0006000D */ break 6 -.L80094EB4: -/* 095AB4 80094EB4 0000C012 */ mflo $t8 -/* 095AB8 80094EB8 0058C823 */ subu $t9, $v0, $t8 -/* 095ABC 80094EBC 00000000 */ nop -/* 095AC0 80094EC0 03300019 */ multu $t9, $s0 -/* 095AC4 80094EC4 00005012 */ mflo $t2 -/* 095AC8 80094EC8 00000000 */ nop -/* 095ACC 80094ECC 00000000 */ nop -/* 095AD0 80094ED0 0143001A */ div $zero, $t2, $v1 -/* 095AD4 80094ED4 14600002 */ bnez $v1, .L80094EE0 -/* 095AD8 80094ED8 00000000 */ nop -/* 095ADC 80094EDC 0007000D */ break 7 -.L80094EE0: -/* 095AE0 80094EE0 2401FFFF */ li $at, -1 -/* 095AE4 80094EE4 14610004 */ bne $v1, $at, .L80094EF8 -/* 095AE8 80094EE8 3C018000 */ lui $at, 0x8000 -/* 095AEC 80094EEC 15410002 */ bne $t2, $at, .L80094EF8 -/* 095AF0 80094EF0 00000000 */ nop -/* 095AF4 80094EF4 0006000D */ break 6 -.L80094EF8: -/* 095AF8 80094EF8 00005812 */ mflo $t3 -/* 095AFC 80094EFC 01EB4023 */ subu $t0, $t7, $t3 -/* 095B00 80094F00 AFA80010 */ sw $t0, 0x10($sp) -/* 095B04 80094F04 0183001A */ div $zero, $t4, $v1 -/* 095B08 80094F08 AFA80050 */ sw $t0, 0x50($sp) -/* 095B0C 80094F0C 14600002 */ bnez $v1, .L80094F18 -/* 095B10 80094F10 00000000 */ nop -/* 095B14 80094F14 0007000D */ break 7 -.L80094F18: -/* 095B18 80094F18 2401FFFF */ li $at, -1 -/* 095B1C 80094F1C 14610004 */ bne $v1, $at, .L80094F30 -/* 095B20 80094F20 3C018000 */ lui $at, 0x8000 -/* 095B24 80094F24 15810002 */ bne $t4, $at, .L80094F30 -/* 095B28 80094F28 00000000 */ nop -/* 095B2C 80094F2C 0006000D */ break 6 -.L80094F30: -/* 095B30 80094F30 00002812 */ mflo $a1 -/* 095B34 80094F34 01A53823 */ subu $a3, $t5, $a1 -/* 095B38 80094F38 0C019A50 */ jal resize_viewport -/* 095B3C 80094F3C 00000000 */ nop -/* 095B40 80094F40 3C02800E */ lui $v0, %hi(gMenuImageStack) # $v0, 0x800e -/* 095B44 80094F44 44905000 */ mtc1 $s0, $f10 -/* 095B48 80094F48 2442F75C */ addiu $v0, %lo(gMenuImageStack) # addiu $v0, $v0, -0x8a4 -/* 095B4C 80094F4C 8C4E0000 */ lw $t6, ($v0) -/* 095B50 80094F50 44802000 */ mtc1 $zero, $f4 -/* 095B54 80094F54 46805420 */ cvt.s.w $f16, $f10 -/* 095B58 80094F58 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 095B5C 80094F5C 44819000 */ mtc1 $at, $f18 -/* 095B60 80094F60 E5C4008C */ swc1 $f4, 0x8c($t6) -/* 095B64 80094F64 46128103 */ div.s $f4, $f16, $f18 -/* 095B68 80094F68 8FB90050 */ lw $t9, 0x50($sp) -/* 095B6C 80094F6C 8E380000 */ lw $t8, ($s1) -/* 095B70 80094F70 02595021 */ addu $t2, $s2, $t9 -/* 095B74 80094F74 000A7843 */ sra $t7, $t2, 1 -/* 095B78 80094F78 030F5823 */ subu $t3, $t8, $t7 -/* 095B7C 80094F7C 448B3000 */ mtc1 $t3, $f6 -/* 095B80 80094F80 8C4C0000 */ lw $t4, ($v0) -/* 095B84 80094F84 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 095B88 80094F88 46803220 */ cvt.s.w $f8, $f6 -/* 095B8C 80094F8C 44813000 */ mtc1 $at, $f6 -/* 095B90 80094F90 3C01800E */ lui $at, %hi(sMenuImageProperties+0x88) # $at, 0x800e -/* 095B94 80094F94 E5880090 */ swc1 $f8, 0x90($t4) -/* 095B98 80094F98 C42AF598 */ lwc1 $f10, %lo(sMenuImageProperties+0x88)($at) -/* 095B9C 80094F9C 46043201 */ sub.s $f8, $f6, $f4 -/* 095BA0 80094FA0 8C4D0000 */ lw $t5, ($v0) -/* 095BA4 80094FA4 46085402 */ mul.s $f16, $f10, $f8 -/* 095BA8 80094FA8 10000177 */ b .L80095588 -/* 095BAC 80094FAC E5B00088 */ swc1 $f16, 0x88($t5) -glabel L80094FB0 -/* 095BB0 80094FB0 3C02800E */ lui $v0, %hi(D_800E0BEC) # $v0, 0x800e -/* 095BB4 80094FB4 24420BEC */ addiu $v0, %lo(D_800E0BEC) # addiu $v0, $v0, 0xbec -/* 095BB8 80094FB8 00002825 */ move $a1, $zero -/* 095BBC 80094FBC 240800FF */ li $t0, 255 -/* 095BC0 80094FC0 240700FF */ li $a3, 255 -/* 095BC4 80094FC4 240600C0 */ li $a2, 192 -/* 095BC8 80094FC8 240400C0 */ li $a0, 192 -/* 095BCC 80094FCC 24030003 */ li $v1, 3 -.L80094FD0: -/* 095BD0 80094FD0 820E0117 */ lb $t6, 0x117($s0) -/* 095BD4 80094FD4 240A0001 */ li $t2, 1 -/* 095BD8 80094FD8 11C0000E */ beqz $t6, .L80095014 -/* 095BDC 80094FDC 00000000 */ nop -/* 095BE0 80094FE0 82190058 */ lb $t9, 0x58($s0) -/* 095BE4 80094FE4 00AAC004 */ sllv $t8, $t2, $a1 -/* 095BE8 80094FE8 03387824 */ and $t7, $t9, $t8 -/* 095BEC 80094FEC 11E00009 */ beqz $t7, .L80095014 -/* 095BF0 80094FF0 00000000 */ nop -/* 095BF4 80094FF4 02630019 */ multu $s3, $v1 -/* 095BF8 80094FF8 01137023 */ subu $t6, $t0, $s3 -/* 095BFC 80094FFC A04E006E */ sb $t6, 0x6e($v0) -/* 095C00 80095000 00005812 */ mflo $t3 -/* 095C04 80095004 000B6083 */ sra $t4, $t3, 2 -/* 095C08 80095008 008C6823 */ subu $t5, $a0, $t4 -/* 095C0C 8009500C 10000003 */ b .L8009501C -/* 095C10 80095010 A04D006D */ sb $t5, 0x6d($v0) -.L80095014: -/* 095C14 80095014 A046006D */ sb $a2, 0x6d($v0) -/* 095C18 80095018 A047006E */ sb $a3, 0x6e($v0) -.L8009501C: -/* 095C1C 8009501C 24A50001 */ addiu $a1, $a1, 1 -/* 095C20 80095020 14A3FFEB */ bne $a1, $v1, .L80094FD0 -/* 095C24 80095024 24420020 */ addiu $v0, $v0, 0x20 -/* 095C28 80095028 820A0117 */ lb $t2, 0x117($s0) -/* 095C2C 8009502C 00000000 */ nop -/* 095C30 80095030 1140000D */ beqz $t2, .L80095068 -/* 095C34 80095034 00000000 */ nop -/* 095C38 80095038 82190058 */ lb $t9, 0x58($s0) -/* 095C3C 8009503C 3C02800E */ lui $v0, %hi(D_800E0BEC) # $v0, 0x800e -/* 095C40 80095040 33380080 */ andi $t8, $t9, 0x80 -/* 095C44 80095044 13000008 */ beqz $t8, .L80095068 -/* 095C48 80095048 24420BEC */ addiu $v0, %lo(D_800E0BEC) # addiu $v0, $v0, 0xbec -/* 095C4C 8009504C 00137843 */ sra $t7, $s3, 1 -/* 095C50 80095050 25EB0080 */ addiu $t3, $t7, 0x80 -/* 095C54 80095054 01131823 */ subu $v1, $t0, $s3 -/* 095C58 80095058 A04B00CC */ sb $t3, 0xcc($v0) -/* 095C5C 8009505C A04300CD */ sb $v1, 0xcd($v0) -/* 095C60 80095060 10000149 */ b .L80095588 -/* 095C64 80095064 A04300CE */ sb $v1, 0xce($v0) -.L80095068: -/* 095C68 80095068 3C02800E */ lui $v0, %hi(D_800E0BEC) # $v0, 0x800e -/* 095C6C 8009506C 24420BEC */ addiu $v0, %lo(D_800E0BEC) # addiu $v0, $v0, 0xbec -/* 095C70 80095070 240C0080 */ li $t4, 128 -/* 095C74 80095074 A04C00CC */ sb $t4, 0xcc($v0) -/* 095C78 80095078 A04700CD */ sb $a3, 0xcd($v0) -/* 095C7C 8009507C 10000142 */ b .L80095588 -/* 095C80 80095080 A04700CE */ sb $a3, 0xce($v0) -glabel L80095084 -/* 095C84 80095084 3C06800E */ lui $a2, %hi(D_800E0CEC+224) # $a2, 0x800e -/* 095C88 80095088 24C60DCC */ addiu $a2, %lo(D_800E0CEC+224) # addiu $a2, $a2, 0xdcc -/* 095C8C 8009508C 00002825 */ move $a1, $zero -/* 095C90 80095090 24110008 */ li $s1, 8 -.L80095094: -/* 095C94 80095094 240300FF */ li $v1, 255 -/* 095C98 80095098 AFA3003C */ sw $v1, 0x3c($sp) -/* 095C9C 8009509C AFA50040 */ sw $a1, 0x40($sp) -/* 095CA0 800950A0 AFA50044 */ sw $a1, 0x44($sp) -/* 095CA4 800950A4 0C027B20 */ jal is_in_two_player_adventure -/* 095CA8 800950A8 AFA60034 */ sw $a2, 0x34($sp) -/* 095CAC 800950AC 8FA3003C */ lw $v1, 0x3c($sp) -/* 095CB0 800950B0 8FA40040 */ lw $a0, 0x40($sp) -/* 095CB4 800950B4 8FA50044 */ lw $a1, 0x44($sp) -/* 095CB8 800950B8 8FA60034 */ lw $a2, 0x34($sp) -/* 095CBC 800950BC 10400007 */ beqz $v0, .L800950DC -/* 095CC0 800950C0 00000000 */ nop -/* 095CC4 800950C4 820D0072 */ lb $t5, 0x72($s0) -/* 095CC8 800950C8 24A4FFFF */ addiu $a0, $a1, -1 -/* 095CCC 800950CC 148D0003 */ bne $a0, $t5, .L800950DC -/* 095CD0 800950D0 00000000 */ nop -/* 095CD4 800950D4 00131843 */ sra $v1, $s3, 1 -/* 095CD8 800950D8 24630080 */ addiu $v1, $v1, 0x80 -.L800950DC: -/* 095CDC 800950DC 820E005A */ lb $t6, 0x5a($s0) -/* 095CE0 800950E0 24A50001 */ addiu $a1, $a1, 1 -/* 095CE4 800950E4 148E0003 */ bne $a0, $t6, .L800950F4 -/* 095CE8 800950E8 00000000 */ nop -/* 095CEC 800950EC 00131843 */ sra $v1, $s3, 1 -/* 095CF0 800950F0 24630080 */ addiu $v1, $v1, 0x80 -.L800950F4: -/* 095CF4 800950F4 24C6FFE0 */ addiu $a2, $a2, -0x20 -/* 095CF8 800950F8 A0C3002C */ sb $v1, 0x2c($a2) -/* 095CFC 800950FC A0C3002D */ sb $v1, 0x2d($a2) -/* 095D00 80095100 14B1FFE4 */ bne $a1, $s1, .L80095094 -/* 095D04 80095104 A0C3002E */ sb $v1, 0x2e($a2) -/* 095D08 80095108 1000011F */ b .L80095588 -/* 095D0C 8009510C 00000000 */ nop -glabel L80095110 -/* 095D10 80095110 820A0117 */ lb $t2, 0x117($s0) -/* 095D14 80095114 3C02800E */ lui $v0, %hi(D_800E0E4C) # $v0, 0x800e -/* 095D18 80095118 11400014 */ beqz $t2, .L8009516C -/* 095D1C 8009511C 24420E4C */ addiu $v0, %lo(D_800E0E4C) # addiu $v0, $v0, 0xe4c -/* 095D20 80095120 82190058 */ lb $t9, 0x58($s0) -/* 095D24 80095124 24030003 */ li $v1, 3 -/* 095D28 80095128 3338007F */ andi $t8, $t9, 0x7f -/* 095D2C 8009512C 13000010 */ beqz $t8, .L80095170 -/* 095D30 80095130 240700FF */ li $a3, 255 -/* 095D34 80095134 02630019 */ multu $s3, $v1 -/* 095D38 80095138 3C02800E */ lui $v0, %hi(D_800E0E4C) # $v0, 0x800e -/* 095D3C 8009513C 24420E4C */ addiu $v0, %lo(D_800E0E4C) # addiu $v0, $v0, 0xe4c -/* 095D40 80095140 240400C0 */ li $a0, 192 -/* 095D44 80095144 240800FF */ li $t0, 255 -/* 095D48 80095148 240700FF */ li $a3, 255 -/* 095D4C 8009514C 01136823 */ subu $t5, $t0, $s3 -/* 095D50 80095150 A04700CC */ sb $a3, 0xcc($v0) -/* 095D54 80095154 A04D00CE */ sb $t5, 0xce($v0) -/* 095D58 80095158 00007812 */ mflo $t7 -/* 095D5C 8009515C 000F5883 */ sra $t3, $t7, 2 -/* 095D60 80095160 008B6023 */ subu $t4, $a0, $t3 -/* 095D64 80095164 10000007 */ b .L80095184 -/* 095D68 80095168 A04C00CD */ sb $t4, 0xcd($v0) -.L8009516C: -/* 095D6C 8009516C 240700FF */ li $a3, 255 -.L80095170: -/* 095D70 80095170 240600C0 */ li $a2, 192 -/* 095D74 80095174 A04700CC */ sb $a3, 0xcc($v0) -/* 095D78 80095178 A04600CD */ sb $a2, 0xcd($v0) -/* 095D7C 8009517C A04700CE */ sb $a3, 0xce($v0) -/* 095D80 80095180 240800FF */ li $t0, 255 -.L80095184: -/* 095D84 80095184 820E0117 */ lb $t6, 0x117($s0) -/* 095D88 80095188 240B0080 */ li $t3, 128 -/* 095D8C 8009518C 11C0000B */ beqz $t6, .L800951BC -/* 095D90 80095190 00000000 */ nop -/* 095D94 80095194 820A0058 */ lb $t2, 0x58($s0) -/* 095D98 80095198 0013C043 */ sra $t8, $s3, 1 -/* 095D9C 8009519C 31590080 */ andi $t9, $t2, 0x80 -/* 095DA0 800951A0 13200006 */ beqz $t9, .L800951BC -/* 095DA4 800951A4 270F0080 */ addiu $t7, $t8, 0x80 -/* 095DA8 800951A8 01131823 */ subu $v1, $t0, $s3 -/* 095DAC 800951AC A04F006C */ sb $t7, 0x6c($v0) -/* 095DB0 800951B0 A043006D */ sb $v1, 0x6d($v0) -/* 095DB4 800951B4 100000F4 */ b .L80095588 -/* 095DB8 800951B8 A043006E */ sb $v1, 0x6e($v0) -.L800951BC: -/* 095DBC 800951BC A04B006C */ sb $t3, 0x6c($v0) -/* 095DC0 800951C0 A047006D */ sb $a3, 0x6d($v0) -/* 095DC4 800951C4 100000F0 */ b .L80095588 -/* 095DC8 800951C8 A047006E */ sb $a3, 0x6e($v0) -glabel L800951CC -/* 095DCC 800951CC 0C0315B4 */ jal func_800C56D0 -/* 095DD0 800951D0 24040007 */ li $a0, 7 -/* 095DD4 800951D4 0C031525 */ jal assign_dialogue_box_id -/* 095DD8 800951D8 24040007 */ li $a0, 7 -/* 095DDC 800951DC 24040007 */ li $a0, 7 -/* 095DE0 800951E0 0C0313DF */ jal set_dialogue_font -/* 095DE4 800951E4 00002825 */ move $a1, $zero -/* 095DE8 800951E8 24040007 */ li $a0, 7 -/* 095DEC 800951EC 00002825 */ move $a1, $zero -/* 095DF0 800951F0 00003025 */ move $a2, $zero -/* 095DF4 800951F4 00003825 */ move $a3, $zero -/* 095DF8 800951F8 0C031414 */ jal set_current_text_background_colour -/* 095DFC 800951FC AFA00010 */ sw $zero, 0x10($sp) -/* 095E00 80095200 3C118012 */ lui $s1, %hi(D_80126A98) # $s1, 0x8012 -/* 095E04 80095204 26316A98 */ addiu $s1, %lo(D_80126A98) # addiu $s1, $s1, 0x6a98 -/* 095E08 80095208 8E2C0000 */ lw $t4, ($s1) -/* 095E0C 8009520C 24040007 */ li $a0, 7 -/* 095E10 80095210 11800003 */ beqz $t4, .L80095220 -/* 095E14 80095214 00002825 */ move $a1, $zero -/* 095E18 80095218 1000000C */ b .L8009524C -/* 095E1C 8009521C 24100001 */ li $s0, 1 -.L80095220: -/* 095E20 80095220 3C0D8012 */ lui $t5, %hi(D_80126C1C) # $t5, 0x8012 -/* 095E24 80095224 8DAD6C1C */ lw $t5, %lo(D_80126C1C)($t5) -/* 095E28 80095228 3C108012 */ lui $s0, %hi(gResultOptionCount) # $s0, 0x8012 -/* 095E2C 8009522C 11A00005 */ beqz $t5, .L80095244 -/* 095E30 80095230 00000000 */ nop -/* 095E34 80095234 3C108012 */ lui $s0, %hi(D_80126C24) # $s0, 0x8012 -/* 095E38 80095238 8E106C24 */ lw $s0, %lo(D_80126C24)($s0) -/* 095E3C 8009523C 10000004 */ b .L80095250 -/* 095E40 80095240 2A010005 */ slti $at, $s0, 5 -.L80095244: -/* 095E44 80095244 8E106C14 */ lw $s0, %lo(gResultOptionCount)($s0) -/* 095E48 80095248 00000000 */ nop -.L8009524C: -/* 095E4C 8009524C 2A010005 */ slti $at, $s0, 5 -.L80095250: -/* 095E50 80095250 14200005 */ bnez $at, .L80095268 -/* 095E54 80095254 24070140 */ li $a3, 320 -/* 095E58 80095258 240E000D */ li $t6, 13 -/* 095E5C 8009525C 24020002 */ li $v0, 2 -/* 095E60 80095260 10000004 */ b .L80095274 -/* 095E64 80095264 AFAE0050 */ sw $t6, 0x50($sp) -.L80095268: -/* 095E68 80095268 240A0010 */ li $t2, 16 -/* 095E6C 8009526C 00001025 */ move $v0, $zero -/* 095E70 80095270 AFAA0050 */ sw $t2, 0x50($sp) -.L80095274: -/* 095E74 80095274 8FB90050 */ lw $t9, 0x50($sp) -/* 095E78 80095278 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000 -/* 095E7C 8009527C 02190019 */ multu $s0, $t9 -/* 095E80 80095280 8DEF0300 */ lw $t7, %lo(osTvType)($t7) -/* 095E84 80095284 241000C0 */ li $s0, 192 -/* 095E88 80095288 00009012 */ mflo $s2 -/* 095E8C 8009528C 26520001 */ addiu $s2, $s2, 1 -/* 095E90 80095290 0012C043 */ sra $t8, $s2, 1 -/* 095E94 80095294 15E00002 */ bnez $t7, .L800952A0 -/* 095E98 80095298 03009025 */ move $s2, $t8 -/* 095E9C 8009529C 241000DA */ li $s0, 218 -.L800952A0: -/* 095EA0 800952A0 02126021 */ addu $t4, $s0, $s2 -/* 095EA4 800952A4 01826821 */ addu $t5, $t4, $v0 -/* 095EA8 800952A8 02125823 */ subu $t3, $s0, $s2 -/* 095EAC 800952AC 01623023 */ subu $a2, $t3, $v0 -/* 095EB0 800952B0 25AE0004 */ addiu $t6, $t5, 4 -/* 095EB4 800952B4 AFAE0010 */ sw $t6, 0x10($sp) -/* 095EB8 800952B8 0C0313B7 */ jal set_current_dialogue_box_coords -/* 095EBC 800952BC 24C6FFFC */ addiu $a2, $a2, -4 -/* 095EC0 800952C0 24040007 */ li $a0, 7 -/* 095EC4 800952C4 24050040 */ li $a1, 64 -/* 095EC8 800952C8 24060040 */ li $a2, 64 -/* 095ECC 800952CC 240700FF */ li $a3, 255 -/* 095ED0 800952D0 0C0313EF */ jal set_current_dialogue_background_colour -/* 095ED4 800952D4 AFA00010 */ sw $zero, 0x10($sp) -/* 095ED8 800952D8 240A0040 */ li $t2, 64 -/* 095EDC 800952DC 241900FF */ li $t9, 255 -/* 095EE0 800952E0 AFB90014 */ sw $t9, 0x14($sp) -/* 095EE4 800952E4 AFAA0010 */ sw $t2, 0x10($sp) -/* 095EE8 800952E8 24040007 */ li $a0, 7 -/* 095EEC 800952EC 240500FF */ li $a1, 255 -/* 095EF0 800952F0 00003025 */ move $a2, $zero -/* 095EF4 800952F4 0C031400 */ jal set_current_text_colour -/* 095EF8 800952F8 240700FF */ li $a3, 255 -/* 095EFC 800952FC 8E380000 */ lw $t8, ($s1) -/* 095F00 80095300 3C028012 */ lui $v0, %hi(D_80126C1C) # $v0, 0x8012 -/* 095F04 80095304 1300000E */ beqz $t8, .L80095340 -/* 095F08 80095308 24426C1C */ addiu $v0, %lo(D_80126C1C) # addiu $v0, $v0, 0x6c1c -/* 095F0C 8009530C 3C0F800E */ lui $t7, %hi(gMenuText) # $t7, 0x800e -/* 095F10 80095310 8DEFF4A0 */ lw $t7, %lo(gMenuText)($t7) -/* 095F14 80095314 240B0001 */ li $t3, 1 -/* 095F18 80095318 8DE701F0 */ lw $a3, 0x1f0($t7) -/* 095F1C 8009531C 240C000C */ li $t4, 12 -/* 095F20 80095320 AFAC0014 */ sw $t4, 0x14($sp) -/* 095F24 80095324 AFAB0010 */ sw $t3, 0x10($sp) -/* 095F28 80095328 24040007 */ li $a0, 7 -/* 095F2C 8009532C 24058000 */ li $a1, -32768 -/* 095F30 80095330 0C03145A */ jal render_dialogue_text -/* 095F34 80095334 2406000C */ li $a2, 12 -/* 095F38 80095338 10000091 */ b .L80095580 -/* 095F3C 8009533C 00000000 */ nop -.L80095340: -/* 095F40 80095340 8C4D0000 */ lw $t5, ($v0) -/* 095F44 80095344 3C11800E */ lui $s1, %hi(gMenuSubOption) # $s1, 0x800e -/* 095F48 80095348 11A00020 */ beqz $t5, .L800953CC -/* 095F4C 8009534C 26310988 */ addiu $s1, %lo(gMenuSubOption) # addiu $s1, $s1, 0x988 -/* 095F50 80095350 3C0E8012 */ lui $t6, %hi(D_80126C24) # $t6, 0x8012 -/* 095F54 80095354 8DCE6C24 */ lw $t6, %lo(D_80126C24)($t6) -/* 095F58 80095358 2412000C */ li $s2, 12 -/* 095F5C 8009535C 19C00088 */ blez $t6, .L80095580 -/* 095F60 80095360 00008025 */ move $s0, $zero -/* 095F64 80095364 8FB10050 */ lw $s1, 0x50($sp) -/* 095F68 80095368 00001825 */ move $v1, $zero -.L8009536C: -/* 095F6C 8009536C 3C028012 */ lui $v0, %hi(D_80126C1C) # $v0, 0x8012 -/* 095F70 80095370 24426C1C */ addiu $v0, %lo(D_80126C1C) # addiu $v0, $v0, 0x6c1c -/* 095F74 80095374 8C4A0000 */ lw $t2, ($v0) -/* 095F78 80095378 24180001 */ li $t8, 1 -/* 095F7C 8009537C 0143C821 */ addu $t9, $t2, $v1 -/* 095F80 80095380 8F270000 */ lw $a3, ($t9) -/* 095F84 80095384 240F000C */ li $t7, 12 -/* 095F88 80095388 AFAF0014 */ sw $t7, 0x14($sp) -/* 095F8C 8009538C AFA30034 */ sw $v1, 0x34($sp) -/* 095F90 80095390 AFB80010 */ sw $t8, 0x10($sp) -/* 095F94 80095394 24040007 */ li $a0, 7 -/* 095F98 80095398 24058000 */ li $a1, -32768 -/* 095F9C 8009539C 0C03145A */ jal render_dialogue_text -/* 095FA0 800953A0 02403025 */ move $a2, $s2 -/* 095FA4 800953A4 3C0B8012 */ lui $t3, %hi(D_80126C24) # $t3, 0x8012 -/* 095FA8 800953A8 8D6B6C24 */ lw $t3, %lo(D_80126C24)($t3) -/* 095FAC 800953AC 8FA30034 */ lw $v1, 0x34($sp) -/* 095FB0 800953B0 26100001 */ addiu $s0, $s0, 1 -/* 095FB4 800953B4 020B082A */ slt $at, $s0, $t3 -/* 095FB8 800953B8 02519021 */ addu $s2, $s2, $s1 -/* 095FBC 800953BC 1420FFEB */ bnez $at, .L8009536C -/* 095FC0 800953C0 24630004 */ addiu $v1, $v1, 4 -/* 095FC4 800953C4 1000006E */ b .L80095580 -/* 095FC8 800953C8 00000000 */ nop -.L800953CC: -/* 095FCC 800953CC 8E2C0000 */ lw $t4, ($s1) -/* 095FD0 800953D0 2652FFE8 */ addiu $s2, $s2, -0x18 -/* 095FD4 800953D4 1180003E */ beqz $t4, .L800954D0 -/* 095FD8 800953D8 3C0F8012 */ lui $t7, %hi(gResultOptionCount) # $t7, 0x8012 -/* 095FDC 800953DC 3C0D800E */ lui $t5, %hi(gMenuText) # $t5, 0x800e -/* 095FE0 800953E0 8DADF4A0 */ lw $t5, %lo(gMenuText)($t5) -/* 095FE4 800953E4 240E0001 */ li $t6, 1 -/* 095FE8 800953E8 8DA70210 */ lw $a3, 0x210($t5) -/* 095FEC 800953EC 240A000C */ li $t2, 12 -/* 095FF0 800953F0 AFAA0014 */ sw $t2, 0x14($sp) -/* 095FF4 800953F4 AFAE0010 */ sw $t6, 0x10($sp) -/* 095FF8 800953F8 24040007 */ li $a0, 7 -/* 095FFC 800953FC 24058000 */ li $a1, -32768 -/* 096000 80095400 0C03145A */ jal render_dialogue_text -/* 096004 80095404 26460008 */ addiu $a2, $s2, 8 -/* 096008 80095408 8E390000 */ lw $t9, ($s1) -/* 09600C 8009540C 24010001 */ li $at, 1 -/* 096010 80095410 17210002 */ bne $t9, $at, .L8009541C -/* 096014 80095414 00008025 */ move $s0, $zero -/* 096018 80095418 02608025 */ move $s0, $s3 -.L8009541C: -/* 09601C 8009541C AFB00010 */ sw $s0, 0x10($sp) -/* 096020 80095420 241800FF */ li $t8, 255 -/* 096024 80095424 AFB80014 */ sw $t8, 0x14($sp) -/* 096028 80095428 00008025 */ move $s0, $zero -/* 09602C 8009542C 24040007 */ li $a0, 7 -/* 096030 80095430 240500FF */ li $a1, 255 -/* 096034 80095434 240600FF */ li $a2, 255 -/* 096038 80095438 0C031400 */ jal set_current_text_colour -/* 09603C 8009543C 240700FF */ li $a3, 255 -/* 096040 80095440 3C0F800E */ lui $t7, %hi(gMenuText) # $t7, 0x800e -/* 096044 80095444 8DEFF4A0 */ lw $t7, %lo(gMenuText)($t7) -/* 096048 80095448 240B0001 */ li $t3, 1 -/* 09604C 8009544C 8DE70218 */ lw $a3, 0x218($t7) -/* 096050 80095450 240C000C */ li $t4, 12 -/* 096054 80095454 AFAC0014 */ sw $t4, 0x14($sp) -/* 096058 80095458 AFAB0010 */ sw $t3, 0x10($sp) -/* 09605C 8009545C 24040007 */ li $a0, 7 -/* 096060 80095460 24058000 */ li $a1, -32768 -/* 096064 80095464 0C03145A */ jal render_dialogue_text -/* 096068 80095468 2646001A */ addiu $a2, $s2, 0x1a -/* 09606C 8009546C 8E2D0000 */ lw $t5, ($s1) -/* 096070 80095470 24010002 */ li $at, 2 -/* 096074 80095474 15A10002 */ bne $t5, $at, .L80095480 -/* 096078 80095478 24040007 */ li $a0, 7 -/* 09607C 8009547C 02608025 */ move $s0, $s3 -.L80095480: -/* 096080 80095480 240E00FF */ li $t6, 255 -/* 096084 80095484 AFAE0014 */ sw $t6, 0x14($sp) -/* 096088 80095488 240500FF */ li $a1, 255 -/* 09608C 8009548C 240600FF */ li $a2, 255 -/* 096090 80095490 240700FF */ li $a3, 255 -/* 096094 80095494 0C031400 */ jal set_current_text_colour -/* 096098 80095498 AFB00010 */ sw $s0, 0x10($sp) -/* 09609C 8009549C 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e -/* 0960A0 800954A0 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) -/* 0960A4 800954A4 24190001 */ li $t9, 1 -/* 0960A8 800954A8 8D470154 */ lw $a3, 0x154($t2) -/* 0960AC 800954AC 2418000C */ li $t8, 12 -/* 0960B0 800954B0 AFB80014 */ sw $t8, 0x14($sp) -/* 0960B4 800954B4 AFB90010 */ sw $t9, 0x10($sp) -/* 0960B8 800954B8 24040007 */ li $a0, 7 -/* 0960BC 800954BC 24058000 */ li $a1, -32768 -/* 0960C0 800954C0 0C03145A */ jal render_dialogue_text -/* 0960C4 800954C4 2646002A */ addiu $a2, $s2, 0x2a -/* 0960C8 800954C8 1000002D */ b .L80095580 -/* 0960CC 800954CC 00000000 */ nop -.L800954D0: -/* 0960D0 800954D0 8DEF6C14 */ lw $t7, %lo(gResultOptionCount)($t7) -/* 0960D4 800954D4 2412000C */ li $s2, 12 -/* 0960D8 800954D8 19E00029 */ blez $t7, .L80095580 -/* 0960DC 800954DC 00008025 */ move $s0, $zero -/* 0960E0 800954E0 3C118012 */ lui $s1, %hi(gResultOptionText) # $s1, 0x8012 -/* 0960E4 800954E4 26316BF0 */ addiu $s1, %lo(gResultOptionText) # addiu $s1, $s1, 0x6bf0 -.L800954E8: -/* 0960E8 800954E8 3C0B8012 */ lui $t3, %hi(gMenuOption) # $t3, 0x8012 -/* 0960EC 800954EC 8D6B6A68 */ lw $t3, %lo(gMenuOption)($t3) -/* 0960F0 800954F0 24040007 */ li $a0, 7 -/* 0960F4 800954F4 160B000B */ bne $s0, $t3, .L80095524 -/* 0960F8 800954F8 240500FF */ li $a1, 255 -/* 0960FC 800954FC 240C00FF */ li $t4, 255 -/* 096100 80095500 AFAC0014 */ sw $t4, 0x14($sp) -/* 096104 80095504 24040007 */ li $a0, 7 -/* 096108 80095508 240500FF */ li $a1, 255 -/* 09610C 8009550C 240600FF */ li $a2, 255 -/* 096110 80095510 240700FF */ li $a3, 255 -/* 096114 80095514 0C031400 */ jal set_current_text_colour -/* 096118 80095518 AFB30010 */ sw $s3, 0x10($sp) -/* 09611C 8009551C 10000008 */ b .L80095540 -/* 096120 80095520 8E270000 */ lw $a3, ($s1) -.L80095524: -/* 096124 80095524 240D00FF */ li $t5, 255 -/* 096128 80095528 AFAD0014 */ sw $t5, 0x14($sp) -/* 09612C 8009552C 240600FF */ li $a2, 255 -/* 096130 80095530 240700FF */ li $a3, 255 -/* 096134 80095534 0C031400 */ jal set_current_text_colour -/* 096138 80095538 AFA00010 */ sw $zero, 0x10($sp) -/* 09613C 8009553C 8E270000 */ lw $a3, ($s1) -.L80095540: -/* 096140 80095540 240E0001 */ li $t6, 1 -/* 096144 80095544 240A000C */ li $t2, 12 -/* 096148 80095548 AFAA0014 */ sw $t2, 0x14($sp) -/* 09614C 8009554C AFAE0010 */ sw $t6, 0x10($sp) -/* 096150 80095550 24040007 */ li $a0, 7 -/* 096154 80095554 240500A0 */ li $a1, 160 -/* 096158 80095558 0C03145A */ jal render_dialogue_text -/* 09615C 8009555C 02403025 */ move $a2, $s2 -/* 096160 80095560 3C188012 */ lui $t8, %hi(gResultOptionCount) # $t8, 0x8012 -/* 096164 80095564 8F186C14 */ lw $t8, %lo(gResultOptionCount)($t8) -/* 096168 80095568 8FB90050 */ lw $t9, 0x50($sp) -/* 09616C 8009556C 26100001 */ addiu $s0, $s0, 1 -/* 096170 80095570 0218082A */ slt $at, $s0, $t8 -/* 096174 80095574 26310004 */ addiu $s1, $s1, 4 -/* 096178 80095578 1420FFDB */ bnez $at, .L800954E8 -/* 09617C 8009557C 02599021 */ addu $s2, $s2, $t9 -.L80095580: -/* 096180 80095580 0C03157D */ jal open_dialogue_box -/* 096184 80095584 24040007 */ li $a0, 7 -.L80095588: -glabel L80095588 -/* 096188 80095588 0C01B683 */ jal get_render_context -/* 09618C 8009558C 00000000 */ nop -/* 096190 80095590 1440001D */ bnez $v0, .L80095608 -/* 096194 80095594 3C0F800E */ lui $t7, %hi(gNumberOfActivePlayers) # $t7, 0x800e -/* 096198 80095598 8DEFF4BC */ lw $t7, %lo(gNumberOfActivePlayers)($t7) -/* 09619C 8009559C 24010001 */ li $at, 1 -/* 0961A0 800955A0 15E10019 */ bne $t7, $at, .L80095608 -/* 0961A4 800955A4 3C0B800E */ lui $t3, %hi(gTrophyRaceWorldId) # $t3, 0x800e -/* 0961A8 800955A8 8D6B0FE8 */ lw $t3, %lo(gTrophyRaceWorldId)($t3) -/* 0961AC 800955AC 00002025 */ move $a0, $zero -/* 0961B0 800955B0 15600016 */ bnez $t3, .L8009560C -/* 0961B4 800955B4 8FBF002C */ lw $ra, 0x2c($sp) -/* 0961B8 800955B8 0C019A06 */ jal camEnableUserView -/* 0961BC 800955BC 24050001 */ li $a1, 1 -/* 0961C0 800955C0 3C0C8000 */ lui $t4, %hi(osTvType) # $t4, 0x8000 -/* 0961C4 800955C4 8D8C0300 */ lw $t4, %lo(osTvType)($t4) -/* 0961C8 800955C8 3C01800F */ lui $at, %hi(D_800E8520) # $at, 0x800f -/* 0961CC 800955CC 15800004 */ bnez $t4, .L800955E0 -/* 0961D0 800955D0 3C0D8012 */ lui $t5, %hi(gMenuOptionCount) # $t5, 0x8012 -/* 0961D4 800955D4 C4328520 */ lwc1 $f18, %lo(D_800E8520)($at) -/* 0961D8 800955D8 3C01800E */ lui $at, %hi(D_800DF454) # $at, 0x800e -/* 0961DC 800955DC E432F454 */ swc1 $f18, %lo(D_800DF454)($at) -.L800955E0: -/* 0961E0 800955E0 8DAD63E0 */ lw $t5, %lo(gMenuOptionCount)($t5) -/* 0961E4 800955E4 00000000 */ nop -/* 0961E8 800955E8 19A00004 */ blez $t5, .L800955FC -/* 0961EC 800955EC 3C013F80 */ lui $at, 0x3f80 -/* 0961F0 800955F0 0C027298 */ jal func_8009CA60 -/* 0961F4 800955F4 24040004 */ li $a0, 4 -/* 0961F8 800955F8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L800955FC: -/* 0961FC 800955FC 44813000 */ mtc1 $at, $f6 -/* 096200 80095600 3C01800E */ lui $at, %hi(D_800DF454) # $at, 0x800e -/* 096204 80095604 E426F454 */ swc1 $f6, %lo(D_800DF454)($at) -.L80095608: -/* 096208 80095608 8FBF002C */ lw $ra, 0x2c($sp) -.L8009560C: -/* 09620C 8009560C 8FB0001C */ lw $s0, 0x1c($sp) -/* 096210 80095610 8FB10020 */ lw $s1, 0x20($sp) -/* 096214 80095614 8FB20024 */ lw $s2, 0x24($sp) -/* 096218 80095618 8FB30028 */ lw $s3, 0x28($sp) -/* 09621C 8009561C 03E00008 */ jr $ra -/* 096220 80095620 27BD0060 */ addiu $sp, $sp, 0x60 - +.late_rodata +glabel jpt_800E8508 +.word L80094DD0, L80094FB0, L80095084, L80095588, L80095110, L800951CC +glabel D_800E8520 +.float 1.2 + +.text +glabel func_80094D28 +/* 095928 80094D28 27BDFFA0 */ addiu $sp, $sp, -0x60 +/* 09592C 80094D2C AFBF002C */ sw $ra, 0x2c($sp) +/* 095930 80094D30 AFB30028 */ sw $s3, 0x28($sp) +/* 095934 80094D34 AFB20024 */ sw $s2, 0x24($sp) +/* 095938 80094D38 AFB10020 */ sw $s1, 0x20($sp) +/* 09593C 80094D3C AFB0001C */ sw $s0, 0x1c($sp) +/* 095940 80094D40 0C01BAA4 */ jal get_settings +/* 095944 80094D44 AFA40060 */ sw $a0, 0x60($sp) +/* 095948 80094D48 3C0E800E */ lui $t6, %hi(gNumberOfActivePlayers) # $t6, 0x800e +/* 09594C 80094D4C 8DCEF4BC */ lw $t6, %lo(gNumberOfActivePlayers)($t6) +/* 095950 80094D50 24010001 */ li $at, 1 +/* 095954 80094D54 15C10006 */ bne $t6, $at, .L80094D70 +/* 095958 80094D58 00408025 */ move $s0, $v0 +/* 09595C 80094D5C 3C048012 */ lui $a0, %hi(sMenuCurrDisplayList) # $a0, 0x8012 +/* 095960 80094D60 3C058012 */ lui $a1, %hi(sMenuCurrHudMat) # $a1, 0x8012 +/* 095964 80094D64 24A563A8 */ addiu $a1, %lo(sMenuCurrHudMat) # addiu $a1, $a1, 0x63a8 +/* 095968 80094D68 0C019FCB */ jal set_ortho_matrix_view +/* 09596C 80094D6C 248463A0 */ addiu $a0, %lo(sMenuCurrDisplayList) # addiu $a0, $a0, 0x63a0 +.L80094D70: +/* 095970 80094D70 00002025 */ move $a0, $zero +/* 095974 80094D74 0C019A25 */ jal camDisableUserView +/* 095978 80094D78 24050001 */ li $a1, 1 +/* 09597C 80094D7C 3C138012 */ lui $s3, %hi(gOptionBlinkTimer) # $s3, 0x8012 +/* 095980 80094D80 8E7363BC */ lw $s3, %lo(gOptionBlinkTimer)($s3) +/* 095984 80094D84 3C198012 */ lui $t9, %hi(gMenuOptionCount) # $t9, 0x8012 +/* 095988 80094D88 001378C0 */ sll $t7, $s3, 3 +/* 09598C 80094D8C 29E10100 */ slti $at, $t7, 0x100 +/* 095990 80094D90 14200003 */ bnez $at, .L80094DA0 +/* 095994 80094D94 01E09825 */ move $s3, $t7 +/* 095998 80094D98 241801FF */ li $t8, 511 +/* 09599C 80094D9C 03139823 */ subu $s3, $t8, $s3 +.L80094DA0: +/* 0959A0 80094DA0 8F3963E0 */ lw $t9, %lo(gMenuOptionCount)($t9) +/* 0959A4 80094DA4 00000000 */ nop +/* 0959A8 80094DA8 272AFFFF */ addiu $t2, $t9, -1 +/* 0959AC 80094DAC 2D410006 */ sltiu $at, $t2, 6 +/* 0959B0 80094DB0 102001F5 */ beqz $at, .L80095588 +/* 0959B4 80094DB4 000A5080 */ sll $t2, $t2, 2 +/* 0959B8 80094DB8 3C01800F */ lui $at, %hi(jpt_800E8508) # $at, 0x800f +/* 0959BC 80094DBC 002A0821 */ addu $at, $at, $t2 +/* 0959C0 80094DC0 8C2A8508 */ lw $t2, %lo(jpt_800E8508)($at) +/* 0959C4 80094DC4 00000000 */ nop +/* 0959C8 80094DC8 01400008 */ jr $t2 +/* 0959CC 80094DCC 00000000 */ nop +glabel L80094DD0 +/* 0959D0 80094DD0 3C108012 */ lui $s0, %hi(D_80126A94) # $s0, 0x8012 +/* 0959D4 80094DD4 8E106A94 */ lw $s0, %lo(D_80126A94)($s0) +/* 0959D8 80094DD8 3C118012 */ lui $s1, %hi(gTrackSelectViewPortHalfY) # $s1, 0x8012 +/* 0959DC 80094DDC 2A01003D */ slti $at, $s0, 0x3d +/* 0959E0 80094DE0 14200002 */ bnez $at, .L80094DEC +/* 0959E4 80094DE4 26316478 */ addiu $s1, %lo(gTrackSelectViewPortHalfY) # addiu $s1, $s1, 0x6478 +/* 0959E8 80094DE8 2410003C */ li $s0, 60 +.L80094DEC: +/* 0959EC 80094DEC 8E220000 */ lw $v0, ($s1) +/* 0959F0 80094DF0 24090005 */ li $t1, 5 +/* 0959F4 80094DF4 00025880 */ sll $t3, $v0, 2 +/* 0959F8 80094DF8 0169001A */ div $zero, $t3, $t1 +/* 0959FC 80094DFC 2403003C */ li $v1, 60 +/* 095A00 80094E00 15200002 */ bnez $t1, .L80094E0C +/* 095A04 80094E04 00000000 */ nop +/* 095A08 80094E08 0007000D */ break 7 +.L80094E0C: +/* 095A0C 80094E0C 2401FFFF */ li $at, -1 +/* 095A10 80094E10 15210004 */ bne $t1, $at, .L80094E24 +/* 095A14 80094E14 3C018000 */ lui $at, 0x8000 +/* 095A18 80094E18 15610002 */ bne $t3, $at, .L80094E24 +/* 095A1C 80094E1C 00000000 */ nop +/* 095A20 80094E20 0006000D */ break 6 +.L80094E24: +/* 095A24 80094E24 3C0F8012 */ lui $t7, %hi(gTrackSelectViewportY) # $t7, 0x8012 +/* 095A28 80094E28 8DEF6480 */ lw $t7, %lo(gTrackSelectViewportY)($t7) +/* 095A2C 80094E2C 00002025 */ move $a0, $zero +/* 095A30 80094E30 00006012 */ mflo $t4 +/* 095A34 80094E34 004C6823 */ subu $t5, $v0, $t4 +/* 095A38 80094E38 00106080 */ sll $t4, $s0, 2 +/* 095A3C 80094E3C 01B00019 */ multu $t5, $s0 +/* 095A40 80094E40 01906021 */ addu $t4, $t4, $s0 +/* 095A44 80094E44 000C6100 */ sll $t4, $t4, 4 +/* 095A48 80094E48 240D0140 */ li $t5, 320 +/* 095A4C 80094E4C 00007012 */ mflo $t6 +/* 095A50 80094E50 00000000 */ nop +/* 095A54 80094E54 00000000 */ nop +/* 095A58 80094E58 01C3001A */ div $zero, $t6, $v1 +/* 095A5C 80094E5C 14600002 */ bnez $v1, .L80094E68 +/* 095A60 80094E60 00000000 */ nop +/* 095A64 80094E64 0007000D */ break 7 +.L80094E68: +/* 095A68 80094E68 2401FFFF */ li $at, -1 +/* 095A6C 80094E6C 14610004 */ bne $v1, $at, .L80094E80 +/* 095A70 80094E70 3C018000 */ lui $at, 0x8000 +/* 095A74 80094E74 15C10002 */ bne $t6, $at, .L80094E80 +/* 095A78 80094E78 00000000 */ nop +/* 095A7C 80094E7C 0006000D */ break 6 +.L80094E80: +/* 095A80 80094E80 00009012 */ mflo $s2 +/* 095A84 80094E84 02403025 */ move $a2, $s2 +/* 095A88 80094E88 00000000 */ nop +/* 095A8C 80094E8C 0049001A */ div $zero, $v0, $t1 +/* 095A90 80094E90 15200002 */ bnez $t1, .L80094E9C +/* 095A94 80094E94 00000000 */ nop +/* 095A98 80094E98 0007000D */ break 7 +.L80094E9C: +/* 095A9C 80094E9C 2401FFFF */ li $at, -1 +/* 095AA0 80094EA0 15210004 */ bne $t1, $at, .L80094EB4 +/* 095AA4 80094EA4 3C018000 */ lui $at, 0x8000 +/* 095AA8 80094EA8 14410002 */ bne $v0, $at, .L80094EB4 +/* 095AAC 80094EAC 00000000 */ nop +/* 095AB0 80094EB0 0006000D */ break 6 +.L80094EB4: +/* 095AB4 80094EB4 0000C012 */ mflo $t8 +/* 095AB8 80094EB8 0058C823 */ subu $t9, $v0, $t8 +/* 095ABC 80094EBC 00000000 */ nop +/* 095AC0 80094EC0 03300019 */ multu $t9, $s0 +/* 095AC4 80094EC4 00005012 */ mflo $t2 +/* 095AC8 80094EC8 00000000 */ nop +/* 095ACC 80094ECC 00000000 */ nop +/* 095AD0 80094ED0 0143001A */ div $zero, $t2, $v1 +/* 095AD4 80094ED4 14600002 */ bnez $v1, .L80094EE0 +/* 095AD8 80094ED8 00000000 */ nop +/* 095ADC 80094EDC 0007000D */ break 7 +.L80094EE0: +/* 095AE0 80094EE0 2401FFFF */ li $at, -1 +/* 095AE4 80094EE4 14610004 */ bne $v1, $at, .L80094EF8 +/* 095AE8 80094EE8 3C018000 */ lui $at, 0x8000 +/* 095AEC 80094EEC 15410002 */ bne $t2, $at, .L80094EF8 +/* 095AF0 80094EF0 00000000 */ nop +/* 095AF4 80094EF4 0006000D */ break 6 +.L80094EF8: +/* 095AF8 80094EF8 00005812 */ mflo $t3 +/* 095AFC 80094EFC 01EB4023 */ subu $t0, $t7, $t3 +/* 095B00 80094F00 AFA80010 */ sw $t0, 0x10($sp) +/* 095B04 80094F04 0183001A */ div $zero, $t4, $v1 +/* 095B08 80094F08 AFA80050 */ sw $t0, 0x50($sp) +/* 095B0C 80094F0C 14600002 */ bnez $v1, .L80094F18 +/* 095B10 80094F10 00000000 */ nop +/* 095B14 80094F14 0007000D */ break 7 +.L80094F18: +/* 095B18 80094F18 2401FFFF */ li $at, -1 +/* 095B1C 80094F1C 14610004 */ bne $v1, $at, .L80094F30 +/* 095B20 80094F20 3C018000 */ lui $at, 0x8000 +/* 095B24 80094F24 15810002 */ bne $t4, $at, .L80094F30 +/* 095B28 80094F28 00000000 */ nop +/* 095B2C 80094F2C 0006000D */ break 6 +.L80094F30: +/* 095B30 80094F30 00002812 */ mflo $a1 +/* 095B34 80094F34 01A53823 */ subu $a3, $t5, $a1 +/* 095B38 80094F38 0C019A50 */ jal resize_viewport +/* 095B3C 80094F3C 00000000 */ nop +/* 095B40 80094F40 3C02800E */ lui $v0, %hi(gMenuImageStack) # $v0, 0x800e +/* 095B44 80094F44 44905000 */ mtc1 $s0, $f10 +/* 095B48 80094F48 2442F75C */ addiu $v0, %lo(gMenuImageStack) # addiu $v0, $v0, -0x8a4 +/* 095B4C 80094F4C 8C4E0000 */ lw $t6, ($v0) +/* 095B50 80094F50 44802000 */ mtc1 $zero, $f4 +/* 095B54 80094F54 46805420 */ cvt.s.w $f16, $f10 +/* 095B58 80094F58 3C014270 */ li $at, 0x42700000 # 60.000000 +/* 095B5C 80094F5C 44819000 */ mtc1 $at, $f18 +/* 095B60 80094F60 E5C4008C */ swc1 $f4, 0x8c($t6) +/* 095B64 80094F64 46128103 */ div.s $f4, $f16, $f18 +/* 095B68 80094F68 8FB90050 */ lw $t9, 0x50($sp) +/* 095B6C 80094F6C 8E380000 */ lw $t8, ($s1) +/* 095B70 80094F70 02595021 */ addu $t2, $s2, $t9 +/* 095B74 80094F74 000A7843 */ sra $t7, $t2, 1 +/* 095B78 80094F78 030F5823 */ subu $t3, $t8, $t7 +/* 095B7C 80094F7C 448B3000 */ mtc1 $t3, $f6 +/* 095B80 80094F80 8C4C0000 */ lw $t4, ($v0) +/* 095B84 80094F84 3C014000 */ li $at, 0x40000000 # 2.000000 +/* 095B88 80094F88 46803220 */ cvt.s.w $f8, $f6 +/* 095B8C 80094F8C 44813000 */ mtc1 $at, $f6 +/* 095B90 80094F90 3C01800E */ lui $at, %hi(sMenuImageProperties+0x88) # $at, 0x800e +/* 095B94 80094F94 E5880090 */ swc1 $f8, 0x90($t4) +/* 095B98 80094F98 C42AF598 */ lwc1 $f10, %lo(sMenuImageProperties+0x88)($at) +/* 095B9C 80094F9C 46043201 */ sub.s $f8, $f6, $f4 +/* 095BA0 80094FA0 8C4D0000 */ lw $t5, ($v0) +/* 095BA4 80094FA4 46085402 */ mul.s $f16, $f10, $f8 +/* 095BA8 80094FA8 10000177 */ b .L80095588 +/* 095BAC 80094FAC E5B00088 */ swc1 $f16, 0x88($t5) +glabel L80094FB0 +/* 095BB0 80094FB0 3C02800E */ lui $v0, %hi(D_800E0BEC) # $v0, 0x800e +/* 095BB4 80094FB4 24420BEC */ addiu $v0, %lo(D_800E0BEC) # addiu $v0, $v0, 0xbec +/* 095BB8 80094FB8 00002825 */ move $a1, $zero +/* 095BBC 80094FBC 240800FF */ li $t0, 255 +/* 095BC0 80094FC0 240700FF */ li $a3, 255 +/* 095BC4 80094FC4 240600C0 */ li $a2, 192 +/* 095BC8 80094FC8 240400C0 */ li $a0, 192 +/* 095BCC 80094FCC 24030003 */ li $v1, 3 +.L80094FD0: +/* 095BD0 80094FD0 820E0117 */ lb $t6, 0x117($s0) +/* 095BD4 80094FD4 240A0001 */ li $t2, 1 +/* 095BD8 80094FD8 11C0000E */ beqz $t6, .L80095014 +/* 095BDC 80094FDC 00000000 */ nop +/* 095BE0 80094FE0 82190058 */ lb $t9, 0x58($s0) +/* 095BE4 80094FE4 00AAC004 */ sllv $t8, $t2, $a1 +/* 095BE8 80094FE8 03387824 */ and $t7, $t9, $t8 +/* 095BEC 80094FEC 11E00009 */ beqz $t7, .L80095014 +/* 095BF0 80094FF0 00000000 */ nop +/* 095BF4 80094FF4 02630019 */ multu $s3, $v1 +/* 095BF8 80094FF8 01137023 */ subu $t6, $t0, $s3 +/* 095BFC 80094FFC A04E006E */ sb $t6, 0x6e($v0) +/* 095C00 80095000 00005812 */ mflo $t3 +/* 095C04 80095004 000B6083 */ sra $t4, $t3, 2 +/* 095C08 80095008 008C6823 */ subu $t5, $a0, $t4 +/* 095C0C 8009500C 10000003 */ b .L8009501C +/* 095C10 80095010 A04D006D */ sb $t5, 0x6d($v0) +.L80095014: +/* 095C14 80095014 A046006D */ sb $a2, 0x6d($v0) +/* 095C18 80095018 A047006E */ sb $a3, 0x6e($v0) +.L8009501C: +/* 095C1C 8009501C 24A50001 */ addiu $a1, $a1, 1 +/* 095C20 80095020 14A3FFEB */ bne $a1, $v1, .L80094FD0 +/* 095C24 80095024 24420020 */ addiu $v0, $v0, 0x20 +/* 095C28 80095028 820A0117 */ lb $t2, 0x117($s0) +/* 095C2C 8009502C 00000000 */ nop +/* 095C30 80095030 1140000D */ beqz $t2, .L80095068 +/* 095C34 80095034 00000000 */ nop +/* 095C38 80095038 82190058 */ lb $t9, 0x58($s0) +/* 095C3C 8009503C 3C02800E */ lui $v0, %hi(D_800E0BEC) # $v0, 0x800e +/* 095C40 80095040 33380080 */ andi $t8, $t9, 0x80 +/* 095C44 80095044 13000008 */ beqz $t8, .L80095068 +/* 095C48 80095048 24420BEC */ addiu $v0, %lo(D_800E0BEC) # addiu $v0, $v0, 0xbec +/* 095C4C 8009504C 00137843 */ sra $t7, $s3, 1 +/* 095C50 80095050 25EB0080 */ addiu $t3, $t7, 0x80 +/* 095C54 80095054 01131823 */ subu $v1, $t0, $s3 +/* 095C58 80095058 A04B00CC */ sb $t3, 0xcc($v0) +/* 095C5C 8009505C A04300CD */ sb $v1, 0xcd($v0) +/* 095C60 80095060 10000149 */ b .L80095588 +/* 095C64 80095064 A04300CE */ sb $v1, 0xce($v0) +.L80095068: +/* 095C68 80095068 3C02800E */ lui $v0, %hi(D_800E0BEC) # $v0, 0x800e +/* 095C6C 8009506C 24420BEC */ addiu $v0, %lo(D_800E0BEC) # addiu $v0, $v0, 0xbec +/* 095C70 80095070 240C0080 */ li $t4, 128 +/* 095C74 80095074 A04C00CC */ sb $t4, 0xcc($v0) +/* 095C78 80095078 A04700CD */ sb $a3, 0xcd($v0) +/* 095C7C 8009507C 10000142 */ b .L80095588 +/* 095C80 80095080 A04700CE */ sb $a3, 0xce($v0) +glabel L80095084 +/* 095C84 80095084 3C06800E */ lui $a2, %hi(D_800E0CEC+224) # $a2, 0x800e +/* 095C88 80095088 24C60DCC */ addiu $a2, %lo(D_800E0CEC+224) # addiu $a2, $a2, 0xdcc +/* 095C8C 8009508C 00002825 */ move $a1, $zero +/* 095C90 80095090 24110008 */ li $s1, 8 +.L80095094: +/* 095C94 80095094 240300FF */ li $v1, 255 +/* 095C98 80095098 AFA3003C */ sw $v1, 0x3c($sp) +/* 095C9C 8009509C AFA50040 */ sw $a1, 0x40($sp) +/* 095CA0 800950A0 AFA50044 */ sw $a1, 0x44($sp) +/* 095CA4 800950A4 0C027B20 */ jal is_in_two_player_adventure +/* 095CA8 800950A8 AFA60034 */ sw $a2, 0x34($sp) +/* 095CAC 800950AC 8FA3003C */ lw $v1, 0x3c($sp) +/* 095CB0 800950B0 8FA40040 */ lw $a0, 0x40($sp) +/* 095CB4 800950B4 8FA50044 */ lw $a1, 0x44($sp) +/* 095CB8 800950B8 8FA60034 */ lw $a2, 0x34($sp) +/* 095CBC 800950BC 10400007 */ beqz $v0, .L800950DC +/* 095CC0 800950C0 00000000 */ nop +/* 095CC4 800950C4 820D0072 */ lb $t5, 0x72($s0) +/* 095CC8 800950C8 24A4FFFF */ addiu $a0, $a1, -1 +/* 095CCC 800950CC 148D0003 */ bne $a0, $t5, .L800950DC +/* 095CD0 800950D0 00000000 */ nop +/* 095CD4 800950D4 00131843 */ sra $v1, $s3, 1 +/* 095CD8 800950D8 24630080 */ addiu $v1, $v1, 0x80 +.L800950DC: +/* 095CDC 800950DC 820E005A */ lb $t6, 0x5a($s0) +/* 095CE0 800950E0 24A50001 */ addiu $a1, $a1, 1 +/* 095CE4 800950E4 148E0003 */ bne $a0, $t6, .L800950F4 +/* 095CE8 800950E8 00000000 */ nop +/* 095CEC 800950EC 00131843 */ sra $v1, $s3, 1 +/* 095CF0 800950F0 24630080 */ addiu $v1, $v1, 0x80 +.L800950F4: +/* 095CF4 800950F4 24C6FFE0 */ addiu $a2, $a2, -0x20 +/* 095CF8 800950F8 A0C3002C */ sb $v1, 0x2c($a2) +/* 095CFC 800950FC A0C3002D */ sb $v1, 0x2d($a2) +/* 095D00 80095100 14B1FFE4 */ bne $a1, $s1, .L80095094 +/* 095D04 80095104 A0C3002E */ sb $v1, 0x2e($a2) +/* 095D08 80095108 1000011F */ b .L80095588 +/* 095D0C 8009510C 00000000 */ nop +glabel L80095110 +/* 095D10 80095110 820A0117 */ lb $t2, 0x117($s0) +/* 095D14 80095114 3C02800E */ lui $v0, %hi(D_800E0E4C) # $v0, 0x800e +/* 095D18 80095118 11400014 */ beqz $t2, .L8009516C +/* 095D1C 8009511C 24420E4C */ addiu $v0, %lo(D_800E0E4C) # addiu $v0, $v0, 0xe4c +/* 095D20 80095120 82190058 */ lb $t9, 0x58($s0) +/* 095D24 80095124 24030003 */ li $v1, 3 +/* 095D28 80095128 3338007F */ andi $t8, $t9, 0x7f +/* 095D2C 8009512C 13000010 */ beqz $t8, .L80095170 +/* 095D30 80095130 240700FF */ li $a3, 255 +/* 095D34 80095134 02630019 */ multu $s3, $v1 +/* 095D38 80095138 3C02800E */ lui $v0, %hi(D_800E0E4C) # $v0, 0x800e +/* 095D3C 8009513C 24420E4C */ addiu $v0, %lo(D_800E0E4C) # addiu $v0, $v0, 0xe4c +/* 095D40 80095140 240400C0 */ li $a0, 192 +/* 095D44 80095144 240800FF */ li $t0, 255 +/* 095D48 80095148 240700FF */ li $a3, 255 +/* 095D4C 8009514C 01136823 */ subu $t5, $t0, $s3 +/* 095D50 80095150 A04700CC */ sb $a3, 0xcc($v0) +/* 095D54 80095154 A04D00CE */ sb $t5, 0xce($v0) +/* 095D58 80095158 00007812 */ mflo $t7 +/* 095D5C 8009515C 000F5883 */ sra $t3, $t7, 2 +/* 095D60 80095160 008B6023 */ subu $t4, $a0, $t3 +/* 095D64 80095164 10000007 */ b .L80095184 +/* 095D68 80095168 A04C00CD */ sb $t4, 0xcd($v0) +.L8009516C: +/* 095D6C 8009516C 240700FF */ li $a3, 255 +.L80095170: +/* 095D70 80095170 240600C0 */ li $a2, 192 +/* 095D74 80095174 A04700CC */ sb $a3, 0xcc($v0) +/* 095D78 80095178 A04600CD */ sb $a2, 0xcd($v0) +/* 095D7C 8009517C A04700CE */ sb $a3, 0xce($v0) +/* 095D80 80095180 240800FF */ li $t0, 255 +.L80095184: +/* 095D84 80095184 820E0117 */ lb $t6, 0x117($s0) +/* 095D88 80095188 240B0080 */ li $t3, 128 +/* 095D8C 8009518C 11C0000B */ beqz $t6, .L800951BC +/* 095D90 80095190 00000000 */ nop +/* 095D94 80095194 820A0058 */ lb $t2, 0x58($s0) +/* 095D98 80095198 0013C043 */ sra $t8, $s3, 1 +/* 095D9C 8009519C 31590080 */ andi $t9, $t2, 0x80 +/* 095DA0 800951A0 13200006 */ beqz $t9, .L800951BC +/* 095DA4 800951A4 270F0080 */ addiu $t7, $t8, 0x80 +/* 095DA8 800951A8 01131823 */ subu $v1, $t0, $s3 +/* 095DAC 800951AC A04F006C */ sb $t7, 0x6c($v0) +/* 095DB0 800951B0 A043006D */ sb $v1, 0x6d($v0) +/* 095DB4 800951B4 100000F4 */ b .L80095588 +/* 095DB8 800951B8 A043006E */ sb $v1, 0x6e($v0) +.L800951BC: +/* 095DBC 800951BC A04B006C */ sb $t3, 0x6c($v0) +/* 095DC0 800951C0 A047006D */ sb $a3, 0x6d($v0) +/* 095DC4 800951C4 100000F0 */ b .L80095588 +/* 095DC8 800951C8 A047006E */ sb $a3, 0x6e($v0) +glabel L800951CC +/* 095DCC 800951CC 0C0315B4 */ jal func_800C56D0 +/* 095DD0 800951D0 24040007 */ li $a0, 7 +/* 095DD4 800951D4 0C031525 */ jal assign_dialogue_box_id +/* 095DD8 800951D8 24040007 */ li $a0, 7 +/* 095DDC 800951DC 24040007 */ li $a0, 7 +/* 095DE0 800951E0 0C0313DF */ jal set_dialogue_font +/* 095DE4 800951E4 00002825 */ move $a1, $zero +/* 095DE8 800951E8 24040007 */ li $a0, 7 +/* 095DEC 800951EC 00002825 */ move $a1, $zero +/* 095DF0 800951F0 00003025 */ move $a2, $zero +/* 095DF4 800951F4 00003825 */ move $a3, $zero +/* 095DF8 800951F8 0C031414 */ jal set_current_text_background_colour +/* 095DFC 800951FC AFA00010 */ sw $zero, 0x10($sp) +/* 095E00 80095200 3C118012 */ lui $s1, %hi(D_80126A98) # $s1, 0x8012 +/* 095E04 80095204 26316A98 */ addiu $s1, %lo(D_80126A98) # addiu $s1, $s1, 0x6a98 +/* 095E08 80095208 8E2C0000 */ lw $t4, ($s1) +/* 095E0C 8009520C 24040007 */ li $a0, 7 +/* 095E10 80095210 11800003 */ beqz $t4, .L80095220 +/* 095E14 80095214 00002825 */ move $a1, $zero +/* 095E18 80095218 1000000C */ b .L8009524C +/* 095E1C 8009521C 24100001 */ li $s0, 1 +.L80095220: +/* 095E20 80095220 3C0D8012 */ lui $t5, %hi(D_80126C1C) # $t5, 0x8012 +/* 095E24 80095224 8DAD6C1C */ lw $t5, %lo(D_80126C1C)($t5) +/* 095E28 80095228 3C108012 */ lui $s0, %hi(gResultOptionCount) # $s0, 0x8012 +/* 095E2C 8009522C 11A00005 */ beqz $t5, .L80095244 +/* 095E30 80095230 00000000 */ nop +/* 095E34 80095234 3C108012 */ lui $s0, %hi(D_80126C24) # $s0, 0x8012 +/* 095E38 80095238 8E106C24 */ lw $s0, %lo(D_80126C24)($s0) +/* 095E3C 8009523C 10000004 */ b .L80095250 +/* 095E40 80095240 2A010005 */ slti $at, $s0, 5 +.L80095244: +/* 095E44 80095244 8E106C14 */ lw $s0, %lo(gResultOptionCount)($s0) +/* 095E48 80095248 00000000 */ nop +.L8009524C: +/* 095E4C 8009524C 2A010005 */ slti $at, $s0, 5 +.L80095250: +/* 095E50 80095250 14200005 */ bnez $at, .L80095268 +/* 095E54 80095254 24070140 */ li $a3, 320 +/* 095E58 80095258 240E000D */ li $t6, 13 +/* 095E5C 8009525C 24020002 */ li $v0, 2 +/* 095E60 80095260 10000004 */ b .L80095274 +/* 095E64 80095264 AFAE0050 */ sw $t6, 0x50($sp) +.L80095268: +/* 095E68 80095268 240A0010 */ li $t2, 16 +/* 095E6C 8009526C 00001025 */ move $v0, $zero +/* 095E70 80095270 AFAA0050 */ sw $t2, 0x50($sp) +.L80095274: +/* 095E74 80095274 8FB90050 */ lw $t9, 0x50($sp) +/* 095E78 80095278 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000 +/* 095E7C 8009527C 02190019 */ multu $s0, $t9 +/* 095E80 80095280 8DEF0300 */ lw $t7, %lo(osTvType)($t7) +/* 095E84 80095284 241000C0 */ li $s0, 192 +/* 095E88 80095288 00009012 */ mflo $s2 +/* 095E8C 8009528C 26520001 */ addiu $s2, $s2, 1 +/* 095E90 80095290 0012C043 */ sra $t8, $s2, 1 +/* 095E94 80095294 15E00002 */ bnez $t7, .L800952A0 +/* 095E98 80095298 03009025 */ move $s2, $t8 +/* 095E9C 8009529C 241000DA */ li $s0, 218 +.L800952A0: +/* 095EA0 800952A0 02126021 */ addu $t4, $s0, $s2 +/* 095EA4 800952A4 01826821 */ addu $t5, $t4, $v0 +/* 095EA8 800952A8 02125823 */ subu $t3, $s0, $s2 +/* 095EAC 800952AC 01623023 */ subu $a2, $t3, $v0 +/* 095EB0 800952B0 25AE0004 */ addiu $t6, $t5, 4 +/* 095EB4 800952B4 AFAE0010 */ sw $t6, 0x10($sp) +/* 095EB8 800952B8 0C0313B7 */ jal set_current_dialogue_box_coords +/* 095EBC 800952BC 24C6FFFC */ addiu $a2, $a2, -4 +/* 095EC0 800952C0 24040007 */ li $a0, 7 +/* 095EC4 800952C4 24050040 */ li $a1, 64 +/* 095EC8 800952C8 24060040 */ li $a2, 64 +/* 095ECC 800952CC 240700FF */ li $a3, 255 +/* 095ED0 800952D0 0C0313EF */ jal set_current_dialogue_background_colour +/* 095ED4 800952D4 AFA00010 */ sw $zero, 0x10($sp) +/* 095ED8 800952D8 240A0040 */ li $t2, 64 +/* 095EDC 800952DC 241900FF */ li $t9, 255 +/* 095EE0 800952E0 AFB90014 */ sw $t9, 0x14($sp) +/* 095EE4 800952E4 AFAA0010 */ sw $t2, 0x10($sp) +/* 095EE8 800952E8 24040007 */ li $a0, 7 +/* 095EEC 800952EC 240500FF */ li $a1, 255 +/* 095EF0 800952F0 00003025 */ move $a2, $zero +/* 095EF4 800952F4 0C031400 */ jal set_current_text_colour +/* 095EF8 800952F8 240700FF */ li $a3, 255 +/* 095EFC 800952FC 8E380000 */ lw $t8, ($s1) +/* 095F00 80095300 3C028012 */ lui $v0, %hi(D_80126C1C) # $v0, 0x8012 +/* 095F04 80095304 1300000E */ beqz $t8, .L80095340 +/* 095F08 80095308 24426C1C */ addiu $v0, %lo(D_80126C1C) # addiu $v0, $v0, 0x6c1c +/* 095F0C 8009530C 3C0F800E */ lui $t7, %hi(gMenuText) # $t7, 0x800e +/* 095F10 80095310 8DEFF4A0 */ lw $t7, %lo(gMenuText)($t7) +/* 095F14 80095314 240B0001 */ li $t3, 1 +/* 095F18 80095318 8DE701F0 */ lw $a3, 0x1f0($t7) +/* 095F1C 8009531C 240C000C */ li $t4, 12 +/* 095F20 80095320 AFAC0014 */ sw $t4, 0x14($sp) +/* 095F24 80095324 AFAB0010 */ sw $t3, 0x10($sp) +/* 095F28 80095328 24040007 */ li $a0, 7 +/* 095F2C 8009532C 24058000 */ li $a1, -32768 +/* 095F30 80095330 0C03145A */ jal render_dialogue_text +/* 095F34 80095334 2406000C */ li $a2, 12 +/* 095F38 80095338 10000091 */ b .L80095580 +/* 095F3C 8009533C 00000000 */ nop +.L80095340: +/* 095F40 80095340 8C4D0000 */ lw $t5, ($v0) +/* 095F44 80095344 3C11800E */ lui $s1, %hi(gMenuSubOption) # $s1, 0x800e +/* 095F48 80095348 11A00020 */ beqz $t5, .L800953CC +/* 095F4C 8009534C 26310988 */ addiu $s1, %lo(gMenuSubOption) # addiu $s1, $s1, 0x988 +/* 095F50 80095350 3C0E8012 */ lui $t6, %hi(D_80126C24) # $t6, 0x8012 +/* 095F54 80095354 8DCE6C24 */ lw $t6, %lo(D_80126C24)($t6) +/* 095F58 80095358 2412000C */ li $s2, 12 +/* 095F5C 8009535C 19C00088 */ blez $t6, .L80095580 +/* 095F60 80095360 00008025 */ move $s0, $zero +/* 095F64 80095364 8FB10050 */ lw $s1, 0x50($sp) +/* 095F68 80095368 00001825 */ move $v1, $zero +.L8009536C: +/* 095F6C 8009536C 3C028012 */ lui $v0, %hi(D_80126C1C) # $v0, 0x8012 +/* 095F70 80095370 24426C1C */ addiu $v0, %lo(D_80126C1C) # addiu $v0, $v0, 0x6c1c +/* 095F74 80095374 8C4A0000 */ lw $t2, ($v0) +/* 095F78 80095378 24180001 */ li $t8, 1 +/* 095F7C 8009537C 0143C821 */ addu $t9, $t2, $v1 +/* 095F80 80095380 8F270000 */ lw $a3, ($t9) +/* 095F84 80095384 240F000C */ li $t7, 12 +/* 095F88 80095388 AFAF0014 */ sw $t7, 0x14($sp) +/* 095F8C 8009538C AFA30034 */ sw $v1, 0x34($sp) +/* 095F90 80095390 AFB80010 */ sw $t8, 0x10($sp) +/* 095F94 80095394 24040007 */ li $a0, 7 +/* 095F98 80095398 24058000 */ li $a1, -32768 +/* 095F9C 8009539C 0C03145A */ jal render_dialogue_text +/* 095FA0 800953A0 02403025 */ move $a2, $s2 +/* 095FA4 800953A4 3C0B8012 */ lui $t3, %hi(D_80126C24) # $t3, 0x8012 +/* 095FA8 800953A8 8D6B6C24 */ lw $t3, %lo(D_80126C24)($t3) +/* 095FAC 800953AC 8FA30034 */ lw $v1, 0x34($sp) +/* 095FB0 800953B0 26100001 */ addiu $s0, $s0, 1 +/* 095FB4 800953B4 020B082A */ slt $at, $s0, $t3 +/* 095FB8 800953B8 02519021 */ addu $s2, $s2, $s1 +/* 095FBC 800953BC 1420FFEB */ bnez $at, .L8009536C +/* 095FC0 800953C0 24630004 */ addiu $v1, $v1, 4 +/* 095FC4 800953C4 1000006E */ b .L80095580 +/* 095FC8 800953C8 00000000 */ nop +.L800953CC: +/* 095FCC 800953CC 8E2C0000 */ lw $t4, ($s1) +/* 095FD0 800953D0 2652FFE8 */ addiu $s2, $s2, -0x18 +/* 095FD4 800953D4 1180003E */ beqz $t4, .L800954D0 +/* 095FD8 800953D8 3C0F8012 */ lui $t7, %hi(gResultOptionCount) # $t7, 0x8012 +/* 095FDC 800953DC 3C0D800E */ lui $t5, %hi(gMenuText) # $t5, 0x800e +/* 095FE0 800953E0 8DADF4A0 */ lw $t5, %lo(gMenuText)($t5) +/* 095FE4 800953E4 240E0001 */ li $t6, 1 +/* 095FE8 800953E8 8DA70210 */ lw $a3, 0x210($t5) +/* 095FEC 800953EC 240A000C */ li $t2, 12 +/* 095FF0 800953F0 AFAA0014 */ sw $t2, 0x14($sp) +/* 095FF4 800953F4 AFAE0010 */ sw $t6, 0x10($sp) +/* 095FF8 800953F8 24040007 */ li $a0, 7 +/* 095FFC 800953FC 24058000 */ li $a1, -32768 +/* 096000 80095400 0C03145A */ jal render_dialogue_text +/* 096004 80095404 26460008 */ addiu $a2, $s2, 8 +/* 096008 80095408 8E390000 */ lw $t9, ($s1) +/* 09600C 8009540C 24010001 */ li $at, 1 +/* 096010 80095410 17210002 */ bne $t9, $at, .L8009541C +/* 096014 80095414 00008025 */ move $s0, $zero +/* 096018 80095418 02608025 */ move $s0, $s3 +.L8009541C: +/* 09601C 8009541C AFB00010 */ sw $s0, 0x10($sp) +/* 096020 80095420 241800FF */ li $t8, 255 +/* 096024 80095424 AFB80014 */ sw $t8, 0x14($sp) +/* 096028 80095428 00008025 */ move $s0, $zero +/* 09602C 8009542C 24040007 */ li $a0, 7 +/* 096030 80095430 240500FF */ li $a1, 255 +/* 096034 80095434 240600FF */ li $a2, 255 +/* 096038 80095438 0C031400 */ jal set_current_text_colour +/* 09603C 8009543C 240700FF */ li $a3, 255 +/* 096040 80095440 3C0F800E */ lui $t7, %hi(gMenuText) # $t7, 0x800e +/* 096044 80095444 8DEFF4A0 */ lw $t7, %lo(gMenuText)($t7) +/* 096048 80095448 240B0001 */ li $t3, 1 +/* 09604C 8009544C 8DE70218 */ lw $a3, 0x218($t7) +/* 096050 80095450 240C000C */ li $t4, 12 +/* 096054 80095454 AFAC0014 */ sw $t4, 0x14($sp) +/* 096058 80095458 AFAB0010 */ sw $t3, 0x10($sp) +/* 09605C 8009545C 24040007 */ li $a0, 7 +/* 096060 80095460 24058000 */ li $a1, -32768 +/* 096064 80095464 0C03145A */ jal render_dialogue_text +/* 096068 80095468 2646001A */ addiu $a2, $s2, 0x1a +/* 09606C 8009546C 8E2D0000 */ lw $t5, ($s1) +/* 096070 80095470 24010002 */ li $at, 2 +/* 096074 80095474 15A10002 */ bne $t5, $at, .L80095480 +/* 096078 80095478 24040007 */ li $a0, 7 +/* 09607C 8009547C 02608025 */ move $s0, $s3 +.L80095480: +/* 096080 80095480 240E00FF */ li $t6, 255 +/* 096084 80095484 AFAE0014 */ sw $t6, 0x14($sp) +/* 096088 80095488 240500FF */ li $a1, 255 +/* 09608C 8009548C 240600FF */ li $a2, 255 +/* 096090 80095490 240700FF */ li $a3, 255 +/* 096094 80095494 0C031400 */ jal set_current_text_colour +/* 096098 80095498 AFB00010 */ sw $s0, 0x10($sp) +/* 09609C 8009549C 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e +/* 0960A0 800954A0 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) +/* 0960A4 800954A4 24190001 */ li $t9, 1 +/* 0960A8 800954A8 8D470154 */ lw $a3, 0x154($t2) +/* 0960AC 800954AC 2418000C */ li $t8, 12 +/* 0960B0 800954B0 AFB80014 */ sw $t8, 0x14($sp) +/* 0960B4 800954B4 AFB90010 */ sw $t9, 0x10($sp) +/* 0960B8 800954B8 24040007 */ li $a0, 7 +/* 0960BC 800954BC 24058000 */ li $a1, -32768 +/* 0960C0 800954C0 0C03145A */ jal render_dialogue_text +/* 0960C4 800954C4 2646002A */ addiu $a2, $s2, 0x2a +/* 0960C8 800954C8 1000002D */ b .L80095580 +/* 0960CC 800954CC 00000000 */ nop +.L800954D0: +/* 0960D0 800954D0 8DEF6C14 */ lw $t7, %lo(gResultOptionCount)($t7) +/* 0960D4 800954D4 2412000C */ li $s2, 12 +/* 0960D8 800954D8 19E00029 */ blez $t7, .L80095580 +/* 0960DC 800954DC 00008025 */ move $s0, $zero +/* 0960E0 800954E0 3C118012 */ lui $s1, %hi(gResultOptionText) # $s1, 0x8012 +/* 0960E4 800954E4 26316BF0 */ addiu $s1, %lo(gResultOptionText) # addiu $s1, $s1, 0x6bf0 +.L800954E8: +/* 0960E8 800954E8 3C0B8012 */ lui $t3, %hi(gMenuOption) # $t3, 0x8012 +/* 0960EC 800954EC 8D6B6A68 */ lw $t3, %lo(gMenuOption)($t3) +/* 0960F0 800954F0 24040007 */ li $a0, 7 +/* 0960F4 800954F4 160B000B */ bne $s0, $t3, .L80095524 +/* 0960F8 800954F8 240500FF */ li $a1, 255 +/* 0960FC 800954FC 240C00FF */ li $t4, 255 +/* 096100 80095500 AFAC0014 */ sw $t4, 0x14($sp) +/* 096104 80095504 24040007 */ li $a0, 7 +/* 096108 80095508 240500FF */ li $a1, 255 +/* 09610C 8009550C 240600FF */ li $a2, 255 +/* 096110 80095510 240700FF */ li $a3, 255 +/* 096114 80095514 0C031400 */ jal set_current_text_colour +/* 096118 80095518 AFB30010 */ sw $s3, 0x10($sp) +/* 09611C 8009551C 10000008 */ b .L80095540 +/* 096120 80095520 8E270000 */ lw $a3, ($s1) +.L80095524: +/* 096124 80095524 240D00FF */ li $t5, 255 +/* 096128 80095528 AFAD0014 */ sw $t5, 0x14($sp) +/* 09612C 8009552C 240600FF */ li $a2, 255 +/* 096130 80095530 240700FF */ li $a3, 255 +/* 096134 80095534 0C031400 */ jal set_current_text_colour +/* 096138 80095538 AFA00010 */ sw $zero, 0x10($sp) +/* 09613C 8009553C 8E270000 */ lw $a3, ($s1) +.L80095540: +/* 096140 80095540 240E0001 */ li $t6, 1 +/* 096144 80095544 240A000C */ li $t2, 12 +/* 096148 80095548 AFAA0014 */ sw $t2, 0x14($sp) +/* 09614C 8009554C AFAE0010 */ sw $t6, 0x10($sp) +/* 096150 80095550 24040007 */ li $a0, 7 +/* 096154 80095554 240500A0 */ li $a1, 160 +/* 096158 80095558 0C03145A */ jal render_dialogue_text +/* 09615C 8009555C 02403025 */ move $a2, $s2 +/* 096160 80095560 3C188012 */ lui $t8, %hi(gResultOptionCount) # $t8, 0x8012 +/* 096164 80095564 8F186C14 */ lw $t8, %lo(gResultOptionCount)($t8) +/* 096168 80095568 8FB90050 */ lw $t9, 0x50($sp) +/* 09616C 8009556C 26100001 */ addiu $s0, $s0, 1 +/* 096170 80095570 0218082A */ slt $at, $s0, $t8 +/* 096174 80095574 26310004 */ addiu $s1, $s1, 4 +/* 096178 80095578 1420FFDB */ bnez $at, .L800954E8 +/* 09617C 8009557C 02599021 */ addu $s2, $s2, $t9 +.L80095580: +/* 096180 80095580 0C03157D */ jal open_dialogue_box +/* 096184 80095584 24040007 */ li $a0, 7 +.L80095588: +glabel L80095588 +/* 096188 80095588 0C01B683 */ jal get_game_mode +/* 09618C 8009558C 00000000 */ nop +/* 096190 80095590 1440001D */ bnez $v0, .L80095608 +/* 096194 80095594 3C0F800E */ lui $t7, %hi(gNumberOfActivePlayers) # $t7, 0x800e +/* 096198 80095598 8DEFF4BC */ lw $t7, %lo(gNumberOfActivePlayers)($t7) +/* 09619C 8009559C 24010001 */ li $at, 1 +/* 0961A0 800955A0 15E10019 */ bne $t7, $at, .L80095608 +/* 0961A4 800955A4 3C0B800E */ lui $t3, %hi(gTrophyRaceWorldId) # $t3, 0x800e +/* 0961A8 800955A8 8D6B0FE8 */ lw $t3, %lo(gTrophyRaceWorldId)($t3) +/* 0961AC 800955AC 00002025 */ move $a0, $zero +/* 0961B0 800955B0 15600016 */ bnez $t3, .L8009560C +/* 0961B4 800955B4 8FBF002C */ lw $ra, 0x2c($sp) +/* 0961B8 800955B8 0C019A06 */ jal camEnableUserView +/* 0961BC 800955BC 24050001 */ li $a1, 1 +/* 0961C0 800955C0 3C0C8000 */ lui $t4, %hi(osTvType) # $t4, 0x8000 +/* 0961C4 800955C4 8D8C0300 */ lw $t4, %lo(osTvType)($t4) +/* 0961C8 800955C8 3C01800F */ lui $at, %hi(D_800E8520) # $at, 0x800f +/* 0961CC 800955CC 15800004 */ bnez $t4, .L800955E0 +/* 0961D0 800955D0 3C0D8012 */ lui $t5, %hi(gMenuOptionCount) # $t5, 0x8012 +/* 0961D4 800955D4 C4328520 */ lwc1 $f18, %lo(D_800E8520)($at) +/* 0961D8 800955D8 3C01800E */ lui $at, %hi(D_800DF454) # $at, 0x800e +/* 0961DC 800955DC E432F454 */ swc1 $f18, %lo(D_800DF454)($at) +.L800955E0: +/* 0961E0 800955E0 8DAD63E0 */ lw $t5, %lo(gMenuOptionCount)($t5) +/* 0961E4 800955E4 00000000 */ nop +/* 0961E8 800955E8 19A00004 */ blez $t5, .L800955FC +/* 0961EC 800955EC 3C013F80 */ lui $at, 0x3f80 +/* 0961F0 800955F0 0C027298 */ jal func_8009CA60 +/* 0961F4 800955F4 24040004 */ li $a0, 4 +/* 0961F8 800955F8 3C013F80 */ li $at, 0x3F800000 # 1.000000 +.L800955FC: +/* 0961FC 800955FC 44813000 */ mtc1 $at, $f6 +/* 096200 80095600 3C01800E */ lui $at, %hi(D_800DF454) # $at, 0x800e +/* 096204 80095604 E426F454 */ swc1 $f6, %lo(D_800DF454)($at) +.L80095608: +/* 096208 80095608 8FBF002C */ lw $ra, 0x2c($sp) +.L8009560C: +/* 09620C 8009560C 8FB0001C */ lw $s0, 0x1c($sp) +/* 096210 80095610 8FB10020 */ lw $s1, 0x20($sp) +/* 096214 80095614 8FB20024 */ lw $s2, 0x24($sp) +/* 096218 80095618 8FB30028 */ lw $s3, 0x28($sp) +/* 09621C 8009561C 03E00008 */ jr $ra +/* 096220 80095620 27BD0060 */ addiu $sp, $sp, 0x60 + diff --git a/asm/non_matchings/objects/func_8000CC7C.s b/asm/non_matchings/objects/func_8000CC7C.s index e3feae33..f25794da 100644 --- a/asm/non_matchings/objects/func_8000CC7C.s +++ b/asm/non_matchings/objects/func_8000CC7C.s @@ -79,7 +79,7 @@ glabel func_8000CC7C /* 00D974 8000CD74 AFB90130 */ sw $t9, 0x130($sp) /* 00D978 8000CD78 A04D003B */ sb $t5, 0x3b($v0) .L8000CD7C: -/* 00D97C 8000CD7C 0C01B683 */ jal get_render_context +/* 00D97C 8000CD7C 0C01B683 */ jal get_game_mode /* 00D980 8000CD80 00000000 */ nop /* 00D984 8000CD84 0C01BAA4 */ jal get_settings /* 00D988 8000CD88 AFA20138 */ sw $v0, 0x138($sp) @@ -122,8 +122,8 @@ glabel func_8000CC7C /* 00DA14 8000CE14 AC80FFFC */ sw $zero, -4($a0) /* 00DA18 8000CE18 1420FFF9 */ bnez $at, .L8000CE00 /* 00DA1C 8000CE1C AC40FFFC */ sw $zero, -4($v0) -/* 00DA20 8000CE20 3C028012 */ lui $v0, %hi(objCount) # $v0, 0x8012 -/* 00DA24 8000CE24 8C42AE5C */ lw $v0, %lo(objCount)($v0) +/* 00DA20 8000CE20 3C028012 */ lui $v0, %hi(gObjectCount) # $v0, 0x8012 +/* 00DA24 8000CE24 8C42AE5C */ lw $v0, %lo(gObjectCount)($v0) /* 00DA28 8000CE28 00009025 */ move $s2, $zero /* 00DA2C 8000CE2C 18400050 */ blez $v0, .L8000CF70 /* 00DA30 8000CE30 0000A825 */ move $s5, $zero @@ -967,11 +967,11 @@ glabel L8000D98C /* 00E5D4 8000D9D4 3C018012 */ lui $at, %hi(D_8011AD20) # $at, 0x8012 /* 00E5D8 8000D9D8 A020AD20 */ sb $zero, %lo(D_8011AD20)($at) .L8000D9DC: -/* 00E5DC 8000D9DC 0C01B683 */ jal get_render_context +/* 00E5DC 8000D9DC 0C01B683 */ jal get_game_mode /* 00E5E0 8000D9E0 00000000 */ nop /* 00E5E4 8000D9E4 1440002D */ bnez $v0, .L8000DA9C -/* 00E5E8 8000D9E8 3C028012 */ lui $v0, %hi(objCount) # $v0, 0x8012 -/* 00E5EC 8000D9EC 8C42AE5C */ lw $v0, %lo(objCount)($v0) +/* 00E5E8 8000D9E8 3C028012 */ lui $v0, %hi(gObjectCount) # $v0, 0x8012 +/* 00E5EC 8000D9EC 8C42AE5C */ lw $v0, %lo(gObjectCount)($v0) /* 00E5F0 8000D9F0 0000A825 */ move $s5, $zero /* 00E5F4 8000D9F4 18400029 */ blez $v0, .L8000DA9C /* 00E5F8 8000D9F8 3C138012 */ lui $s3, %hi(gObjPtrList) # $s3, 0x8012 @@ -995,8 +995,8 @@ glabel L8000D98C /* 00E63C 8000DA3C 00000000 */ nop /* 00E640 8000DA40 0C003FEE */ jal free_object /* 00E644 8000DA44 02202025 */ move $a0, $s1 -/* 00E648 8000DA48 3C028012 */ lui $v0, %hi(objCount) # $v0, 0x8012 -/* 00E64C 8000DA4C 8C42AE5C */ lw $v0, %lo(objCount)($v0) +/* 00E648 8000DA48 3C028012 */ lui $v0, %hi(gObjectCount) # $v0, 0x8012 +/* 00E64C 8000DA4C 8C42AE5C */ lw $v0, %lo(gObjectCount)($v0) /* 00E650 8000DA50 1000000E */ b .L8000DA8C /* 00E654 8000DA54 26520001 */ addiu $s2, $s2, 1 .L8000DA58: @@ -1009,8 +1009,8 @@ glabel L8000D98C /* 00E670 8000DA70 00000000 */ nop /* 00E674 8000DA74 0C003FEE */ jal free_object /* 00E678 8000DA78 02202025 */ move $a0, $s1 -/* 00E67C 8000DA7C 3C028012 */ lui $v0, %hi(objCount) # $v0, 0x8012 -/* 00E680 8000DA80 8C42AE5C */ lw $v0, %lo(objCount)($v0) +/* 00E67C 8000DA7C 3C028012 */ lui $v0, %hi(gObjectCount) # $v0, 0x8012 +/* 00E680 8000DA80 8C42AE5C */ lw $v0, %lo(gObjectCount)($v0) /* 00E684 8000DA84 00000000 */ nop .L8000DA88: /* 00E688 8000DA88 26520001 */ addiu $s2, $s2, 1 diff --git a/asm/non_matchings/objects/func_8000E5EC.s b/asm/non_matchings/objects/func_8000E5EC.s index a9ff6c16..6698b77e 100644 --- a/asm/non_matchings/objects/func_8000E5EC.s +++ b/asm/non_matchings/objects/func_8000E5EC.s @@ -73,10 +73,10 @@ glabel func_8000E5EC .L8000E6F0: /* 00F2F0 8000E6F0 01681821 */ addu $v1, $t3, $t0 /* 00F2F4 8000E6F4 8C790000 */ lw $t9, ($v1) -/* 00F2F8 8000E6F8 3C068012 */ lui $a2, %hi(objCount) # $a2, 0x8012 +/* 00F2F8 8000E6F8 3C068012 */ lui $a2, %hi(gObjectCount) # $a2, 0x8012 /* 00F2FC 8000E6FC 03226023 */ subu $t4, $t9, $v0 /* 00F300 8000E700 AC6C0000 */ sw $t4, ($v1) -/* 00F304 8000E704 8CC6AE5C */ lw $a2, %lo(objCount)($a2) +/* 00F304 8000E704 8CC6AE5C */ lw $a2, %lo(gObjectCount)($a2) /* 00F308 8000E708 00004025 */ move $t0, $zero /* 00F30C 8000E70C 18C00021 */ blez $a2, .L8000E794 /* 00F310 8000E710 00002825 */ move $a1, $zero @@ -100,16 +100,16 @@ glabel func_8000E5EC /* 00F354 8000E754 10200006 */ beqz $at, .L8000E770 /* 00F358 8000E758 01227823 */ subu $t7, $t1, $v0 /* 00F35C 8000E75C AC6F003C */ sw $t7, 0x3c($v1) -/* 00F360 8000E760 3C068012 */ lui $a2, %hi(objCount) # $a2, 0x8012 -/* 00F364 8000E764 8CC6AE5C */ lw $a2, %lo(objCount)($a2) +/* 00F360 8000E760 3C068012 */ lui $a2, %hi(gObjectCount) # $a2, 0x8012 +/* 00F364 8000E764 8CC6AE5C */ lw $a2, %lo(gObjectCount)($a2) /* 00F368 8000E768 10000008 */ b .L8000E78C /* 00F36C 8000E76C 00A6082A */ slt $at, $a1, $a2 .L8000E770: /* 00F370 8000E770 148A0006 */ bne $a0, $t2, .L8000E78C /* 00F374 8000E774 00A6082A */ slt $at, $a1, $a2 /* 00F378 8000E778 AC60003C */ sw $zero, 0x3c($v1) -/* 00F37C 8000E77C 3C068012 */ lui $a2, %hi(objCount) # $a2, 0x8012 -/* 00F380 8000E780 8CC6AE5C */ lw $a2, %lo(objCount)($a2) +/* 00F37C 8000E77C 3C068012 */ lui $a2, %hi(gObjectCount) # $a2, 0x8012 +/* 00F380 8000E780 8CC6AE5C */ lw $a2, %lo(gObjectCount)($a2) /* 00F384 8000E784 00000000 */ nop .L8000E788: /* 00F388 8000E788 00A6082A */ slt $at, $a1, $a2 diff --git a/asm/non_matchings/objects/func_8000FD54.s b/asm/non_matchings/objects/func_8000FD54.s index 79aa9ba5..d416d448 100644 --- a/asm/non_matchings/objects/func_8000FD54.s +++ b/asm/non_matchings/objects/func_8000FD54.s @@ -12,7 +12,7 @@ glabel func_8000FD54 /* 01097C 8000FD7C AFB00018 */ sw $s0, 0x18($sp) /* 010980 8000FD80 00002025 */ move $a0, $zero .L8000FD84: -/* 010984 8000FD84 0C0031C6 */ jal func_8000C718 +/* 010984 8000FD84 0C0031C6 */ jal load_object_header /* 010988 8000FD88 AFA40038 */ sw $a0, 0x38($sp) /* 01098C 8000FD8C 14400003 */ bnez $v0, .L8000FD9C /* 010990 8000FD90 00409825 */ move $s3, $v0 @@ -28,7 +28,7 @@ glabel func_8000FD54 /* 0109B4 8000FDB4 14400006 */ bnez $v0, .L8000FDD0 /* 0109B8 8000FDB8 00409025 */ move $s2, $v0 /* 0109BC 8000FDBC 8FA40038 */ lw $a0, 0x38($sp) -/* 0109C0 8000FDC0 0C003211 */ jal func_8000C844 +/* 0109C0 8000FDC0 0C003211 */ jal try_free_object_header /* 0109C4 8000FDC4 00000000 */ nop /* 0109C8 8000FDC8 10000073 */ b .L8000FF98 /* 0109CC 8000FDCC 00001025 */ move $v0, $zero @@ -153,7 +153,7 @@ glabel func_8000FD54 /* 010B74 8000FF74 0C003D92 */ jal objFreeAssets /* 010B78 8000FF78 02802825 */ move $a1, $s4 /* 010B7C 8000FF7C 8FA40038 */ lw $a0, 0x38($sp) -/* 010B80 8000FF80 0C003211 */ jal func_8000C844 +/* 010B80 8000FF80 0C003211 */ jal try_free_object_header /* 010B84 8000FF84 00000000 */ nop /* 010B88 8000FF88 0C01C450 */ jal free_from_memory_pool /* 010B8C 8000FF8C 02402025 */ move $a0, $s2 diff --git a/asm/non_matchings/objects/func_800101AC.s b/asm/non_matchings/objects/func_800101AC.s index 320daefb..94fa5737 100644 --- a/asm/non_matchings/objects/func_800101AC.s +++ b/asm/non_matchings/objects/func_800101AC.s @@ -23,8 +23,8 @@ glabel func_800101AC /* 010DE4 800101E4 00000000 */ nop /* 010DE8 800101E8 0C02C810 */ jal func_800B2040 /* 010DEC 800101EC 00000000 */ nop -/* 010DF0 800101F0 3C028012 */ lui $v0, %hi(D_8011AE64) # $v0, 0x8012 -/* 010DF4 800101F4 2442AE64 */ addiu $v0, %lo(D_8011AE64) # addiu $v0, $v0, -0x519c +/* 010DF0 800101F0 3C028012 */ lui $v0, %hi(gParticleCount) # $v0, 0x8012 +/* 010DF4 800101F4 2442AE64 */ addiu $v0, %lo(gParticleCount) # addiu $v0, $v0, -0x519c /* 010DF8 800101F8 8C580000 */ lw $t8, ($v0) /* 010DFC 800101FC 00000000 */ nop /* 010E00 80010200 2719FFFF */ addiu $t9, $t8, -1 @@ -80,7 +80,7 @@ glabel func_800101AC .L800102B4: /* 010EB4 800102B4 8624002C */ lh $a0, 0x2c($s1) .L800102B8: -/* 010EB8 800102B8 0C003211 */ jal func_8000C844 +/* 010EB8 800102B8 0C003211 */ jal try_free_object_header /* 010EBC 800102BC 00000000 */ nop /* 010EC0 800102C0 0C01C450 */ jal free_from_memory_pool /* 010EC4 800102C4 02202025 */ move $a0, $s1 @@ -131,8 +131,8 @@ glabel func_800101AC /* 010F6C 8001036C 01800008 */ jr $t4 /* 010F70 80010370 00000000 */ nop glabel L80010374 -/* 010F74 80010374 3C038012 */ lui $v1, %hi(objCount) # $v1, 0x8012 -/* 010F78 80010378 8C63AE5C */ lw $v1, %lo(objCount)($v1) +/* 010F74 80010374 3C038012 */ lui $v1, %hi(gObjectCount) # $v1, 0x8012 +/* 010F78 80010378 8C63AE5C */ lw $v1, %lo(gObjectCount)($v1) /* 010F7C 8001037C 0000A825 */ move $s5, $zero /* 010F80 80010380 1860001D */ blez $v1, .L800103F8 /* 010F84 80010384 0000A025 */ move $s4, $zero @@ -157,8 +157,8 @@ glabel L80010374 /* 010FCC 800103CC 02A3082A */ slt $at, $s5, $v1 /* 010FD0 800103D0 AC400100 */ sw $zero, 0x100($v0) /* 010FD4 800103D4 A04500FD */ sb $a1, 0xfd($v0) -/* 010FD8 800103D8 3C038012 */ lui $v1, %hi(objCount) # $v1, 0x8012 -/* 010FDC 800103DC 8C63AE5C */ lw $v1, %lo(objCount)($v1) +/* 010FD8 800103D8 3C038012 */ lui $v1, %hi(gObjectCount) # $v1, 0x8012 +/* 010FDC 800103DC 8C63AE5C */ lw $v1, %lo(gObjectCount)($v1) /* 010FE0 800103E0 00000000 */ nop /* 010FE4 800103E4 02A3082A */ slt $at, $s5, $v1 .L800103E8: @@ -412,8 +412,8 @@ glabel L80010664 .L80010738: /* 011338 80010738 0C001AB2 */ jal func_80006AC8 /* 01133C 8001073C 02C02025 */ move $a0, $s6 -/* 011340 80010740 3C158012 */ lui $s5, %hi(objCount) # $s5, 0x8012 -/* 011344 80010744 26B5AE5C */ addiu $s5, %lo(objCount) # addiu $s5, $s5, -0x51a4 +/* 011340 80010740 3C158012 */ lui $s5, %hi(gObjectCount) # $s5, 0x8012 +/* 011344 80010744 26B5AE5C */ addiu $s5, %lo(gObjectCount) # addiu $s5, $s5, -0x51a4 /* 011348 80010748 8EA80000 */ lw $t0, ($s5) /* 01134C 8001074C 00008025 */ move $s0, $zero /* 011350 80010750 19000027 */ blez $t0, .L800107F0 @@ -564,7 +564,7 @@ glabel L80010664 /* 011554 80010954 00000000 */ nop .L80010958: /* 011558 80010958 86C4002C */ lh $a0, 0x2c($s6) -/* 01155C 8001095C 0C003211 */ jal func_8000C844 +/* 01155C 8001095C 0C003211 */ jal try_free_object_header /* 011560 80010960 00000000 */ nop /* 011564 80010964 0C01C450 */ jal free_from_memory_pool /* 011568 80010968 02C02025 */ move $a0, $s6 diff --git a/asm/non_matchings/objects/func_80010994.s b/asm/non_matchings/objects/func_80010994.s index a26aae2a..03f9d33c 100644 --- a/asm/non_matchings/objects/func_80010994.s +++ b/asm/non_matchings/objects/func_80010994.s @@ -144,9 +144,9 @@ glabel func_80010994 /* 0117AC 80010BAC 1420FFF6 */ bnez $at, .L80010B88 /* 0117B0 80010BB0 26520004 */ addiu $s2, $s2, 4 .L80010BB4: -/* 0117B4 80010BB4 3C138012 */ lui $s3, %hi(objCount) # $s3, 0x8012 +/* 0117B4 80010BB4 3C138012 */ lui $s3, %hi(gObjectCount) # $s3, 0x8012 /* 0117B8 80010BB8 3C118012 */ lui $s1, %hi(D_8011AE60) # $s1, 0x8012 -/* 0117BC 80010BBC 8E73AE5C */ lw $s3, %lo(objCount)($s3) +/* 0117BC 80010BBC 8E73AE5C */ lw $s3, %lo(gObjectCount)($s3) /* 0117C0 80010BC0 8E31AE60 */ lw $s1, %lo(D_8011AE60)($s1) /* 0117C4 80010BC4 00000000 */ nop /* 0117C8 80010BC8 0233082A */ slt $at, $s1, $s3 @@ -333,8 +333,8 @@ glabel func_80010994 /* 011A50 80010E50 1420FFE6 */ bnez $at, .L80010DEC /* 011A54 80010E54 00000000 */ nop .L80010E58: -/* 011A58 80010E58 3C188012 */ lui $t8, %hi(D_8011AE64) # $t8, 0x8012 -/* 011A5C 80010E5C 8F18AE64 */ lw $t8, %lo(D_8011AE64)($t8) +/* 011A58 80010E58 3C188012 */ lui $t8, %hi(gParticleCount) # $t8, 0x8012 +/* 011A5C 80010E5C 8F18AE64 */ lw $t8, %lo(gParticleCount)($t8) /* 011A60 80010E60 00000000 */ nop /* 011A64 80010E64 1B000018 */ blez $t8, .L80010EC8 /* 011A68 80010E68 3C118012 */ lui $s1, %hi(D_8011AE60) # $s1, 0x8012 @@ -370,8 +370,8 @@ glabel func_80010994 /* 011AD4 80010ED4 00000000 */ nop /* 011AD8 80010ED8 1840001F */ blez $v0, .L80010F58 /* 011ADC 80010EDC 3C118012 */ lui $s1, %hi(D_8011AE60) # $s1, 0x8012 -/* 011AE0 80010EE0 3C028012 */ lui $v0, %hi(objCount) # $v0, 0x8012 -/* 011AE4 80010EE4 8C42AE5C */ lw $v0, %lo(objCount)($v0) +/* 011AE0 80010EE0 3C028012 */ lui $v0, %hi(gObjectCount) # $v0, 0x8012 +/* 011AE4 80010EE4 8C42AE5C */ lw $v0, %lo(gObjectCount)($v0) /* 011AE8 80010EE8 8E31AE60 */ lw $s1, %lo(D_8011AE60)($s1) /* 011AEC 80010EEC 00000000 */ nop /* 011AF0 80010EF0 0222082A */ slt $at, $s1, $v0 @@ -394,8 +394,8 @@ glabel func_80010994 /* 011B30 80010F30 00000000 */ nop /* 011B34 80010F34 0C00CB1F */ jal func_80032C7C /* 011B38 80010F38 02002025 */ move $a0, $s0 -/* 011B3C 80010F3C 3C028012 */ lui $v0, %hi(objCount) # $v0, 0x8012 -/* 011B40 80010F40 8C42AE5C */ lw $v0, %lo(objCount)($v0) +/* 011B3C 80010F3C 3C028012 */ lui $v0, %hi(gObjectCount) # $v0, 0x8012 +/* 011B40 80010F40 8C42AE5C */ lw $v0, %lo(gObjectCount)($v0) /* 011B44 80010F44 00000000 */ nop .L80010F48: /* 011B48 80010F48 26310001 */ addiu $s1, $s1, 1 diff --git a/asm/non_matchings/objects/func_80014814.s b/asm/non_matchings/objects/func_80014814.s index d454567e..5355e06c 100644 --- a/asm/non_matchings/objects/func_80014814.s +++ b/asm/non_matchings/objects/func_80014814.s @@ -1,6 +1,6 @@ glabel func_80014814 -/* 015414 80014814 3C068012 */ lui $a2, %hi(objCount) # $a2, 0x8012 -/* 015418 80014818 24C6AE5C */ addiu $a2, %lo(objCount) # addiu $a2, $a2, -0x51a4 +/* 015414 80014814 3C068012 */ lui $a2, %hi(gObjectCount) # $a2, 0x8012 +/* 015418 80014818 24C6AE5C */ addiu $a2, %lo(gObjectCount) # addiu $a2, $a2, -0x51a4 /* 01541C 8001481C 8CCE0000 */ lw $t6, ($a2) /* 015420 80014820 3C0A8012 */ lui $t2, %hi(D_8011AE7C) # $t2, 0x8012 /* 015424 80014824 254AAE7C */ addiu $t2, %lo(D_8011AE7C) # addiu $t2, $t2, -0x5184 diff --git a/asm/non_matchings/objects/func_80017E98.s b/asm/non_matchings/objects/func_80017E98.s index 263f8fc6..99120adc 100644 --- a/asm/non_matchings/objects/func_80017E98.s +++ b/asm/non_matchings/objects/func_80017E98.s @@ -1,7 +1,7 @@ glabel func_80017E98 /* 018A98 80017E98 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 018A9C 80017E9C 3C038012 */ lui $v1, %hi(objCount) # $v1, 0x8012 -/* 018AA0 80017EA0 8C63AE5C */ lw $v1, %lo(objCount)($v1) +/* 018A9C 80017E9C 3C038012 */ lui $v1, %hi(gObjectCount) # $v1, 0x8012 +/* 018AA0 80017EA0 8C63AE5C */ lw $v1, %lo(gObjectCount)($v1) /* 018AA4 80017EA4 AFB30044 */ sw $s3, 0x44($sp) /* 018AA8 80017EA8 3C018012 */ lui $at, %hi(gNumberOfCheckpoints) # $at, 0x8012 /* 018AAC 80017EAC AFBF005C */ sw $ra, 0x5c($sp) @@ -74,7 +74,7 @@ glabel func_80017E98 /* 018BB0 80017FB0 8E8B0000 */ lw $t3, ($s4) /* 018BB4 80017FB4 01850019 */ multu $t4, $a1 /* 018BB8 80017FB8 240FFFFF */ li $t7, -1 -/* 018BBC 80017FBC 3C038012 */ lui $v1, %hi(objCount) # $v1, 0x8012 +/* 018BBC 80017FBC 3C038012 */ lui $v1, %hi(gObjectCount) # $v1, 0x8012 /* 018BC0 80017FC0 00006812 */ mflo $t5 /* 018BC4 80017FC4 016D7021 */ addu $t6, $t3, $t5 /* 018BC8 80017FC8 A5C4002C */ sh $a0, 0x2c($t6) @@ -88,7 +88,7 @@ glabel func_80017E98 /* 018BE8 80017FE8 00000000 */ nop /* 018BEC 80017FEC 25AE0001 */ addiu $t6, $t5, 1 /* 018BF0 80017FF0 ACEE0000 */ sw $t6, ($a3) -/* 018BF4 80017FF4 8C63AE5C */ lw $v1, %lo(objCount)($v1) +/* 018BF4 80017FF4 8C63AE5C */ lw $v1, %lo(gObjectCount)($v1) /* 018BF8 80017FF8 00000000 */ nop /* 018BFC 80017FFC 0263082A */ slt $at, $s3, $v1 .L80018000: diff --git a/asm/non_matchings/objects/func_80018CE0.s b/asm/non_matchings/objects/func_80018CE0.s index 5eedec74..f5e9ddb7 100644 --- a/asm/non_matchings/objects/func_80018CE0.s +++ b/asm/non_matchings/objects/func_80018CE0.s @@ -36,8 +36,8 @@ glabel func_80018CE0 /* 019968 80018D68 144001E4 */ bnez $v0, .L800194FC /* 01996C 80018D6C 3C0C8012 */ lui $t4, %hi(D_8011AE60) # $t4, 0x8012 /* 019970 80018D70 8D8CAE60 */ lw $t4, %lo(D_8011AE60)($t4) -/* 019974 80018D74 3C0D8012 */ lui $t5, %hi(objCount) # $t5, 0x8012 -/* 019978 80018D78 8DADAE5C */ lw $t5, %lo(objCount)($t5) +/* 019974 80018D74 3C0D8012 */ lui $t5, %hi(gObjectCount) # $t5, 0x8012 +/* 019978 80018D78 8DADAE5C */ lw $t5, %lo(gObjectCount)($t5) /* 01997C 80018D7C AFAC00F4 */ sw $t4, 0xf4($sp) /* 019980 80018D80 018D082A */ slt $at, $t4, $t5 /* 019984 80018D84 10200135 */ beqz $at, .L8001925C @@ -357,8 +357,8 @@ glabel func_80018CE0 .L80019234: /* 019E34 80019234 8FAA00F4 */ lw $t2, 0xf4($sp) .L80019238: -/* 019E38 80019238 3C188012 */ lui $t8, %hi(objCount) # $t8, 0x8012 -/* 019E3C 8001923C 8F18AE5C */ lw $t8, %lo(objCount)($t8) +/* 019E38 80019238 3C188012 */ lui $t8, %hi(gObjectCount) # $t8, 0x8012 +/* 019E3C 8001923C 8F18AE5C */ lw $t8, %lo(gObjectCount)($t8) /* 019E40 80019240 8FAD0098 */ lw $t5, 0x98($sp) /* 019E44 80019244 254B0001 */ addiu $t3, $t2, 1 /* 019E48 80019248 0178082A */ slt $at, $t3, $t8 diff --git a/asm/non_matchings/objects/func_80019808.s b/asm/non_matchings/objects/func_80019808.s index fa8777da..50148715 100644 --- a/asm/non_matchings/objects/func_80019808.s +++ b/asm/non_matchings/objects/func_80019808.s @@ -604,7 +604,7 @@ glabel func_80019808 /* 01ACA0 8001A0A0 00000000 */ nop /* 01ACA4 8001A0A4 AFBF0064 */ sw $ra, 0x64($sp) /* 01ACA8 8001A0A8 AFA80080 */ sw $t0, 0x80($sp) -/* 01ACAC 8001A0AC 0C01B683 */ jal get_render_context +/* 01ACAC 8001A0AC 0C01B683 */ jal get_game_mode /* 01ACB0 8001A0B0 AFAA0044 */ sw $t2, 0x44($sp) /* 01ACB4 8001A0B4 8FA80080 */ lw $t0, 0x80($sp) /* 01ACB8 8001A0B8 8FAA0044 */ lw $t2, 0x44($sp) diff --git a/asm/non_matchings/objects/func_8001A8F4.s b/asm/non_matchings/objects/func_8001A8F4.s index 280868e5..f8de8a96 100644 --- a/asm/non_matchings/objects/func_8001A8F4.s +++ b/asm/non_matchings/objects/func_8001A8F4.s @@ -4,7 +4,7 @@ glabel func_8001A8F4 /* 01B4FC 8001A8FC AFA40040 */ sw $a0, 0x40($sp) /* 01B500 8001A900 AFB10018 */ sw $s1, 0x18($sp) /* 01B504 8001A904 AFB00014 */ sw $s0, 0x14($sp) -/* 01B508 8001A908 0C01BCE2 */ jal func_8006F388 +/* 01B508 8001A908 0C01BCE2 */ jal set_pause_lockout_timer /* 01B50C 8001A90C 24040001 */ li $a0, 1 /* 01B510 8001A910 3C108012 */ lui $s0, %hi(D_8011AD4E) # $s0, 0x8012 /* 01B514 8001A914 2610AD4E */ addiu $s0, %lo(D_8011AD4E) # addiu $s0, $s0, -0x52b2 diff --git a/asm/non_matchings/objects/func_8001BF20.s b/asm/non_matchings/objects/func_8001BF20.s index cd2c9e6f..5e449ad6 100644 --- a/asm/non_matchings/objects/func_8001BF20.s +++ b/asm/non_matchings/objects/func_8001BF20.s @@ -33,8 +33,8 @@ glabel func_8001BF20 /* 01CB7C 8001BF7C 2BC10200 */ slti $at, $fp, 0x200 /* 01CB80 8001BF80 1420FFFA */ bnez $at, .L8001BF6C /* 01CB84 8001BF84 AF000000 */ sw $zero, ($t8) -/* 01CB88 8001BF88 3C048012 */ lui $a0, %hi(objCount) # $a0, 0x8012 -/* 01CB8C 8001BF8C 8C84AE5C */ lw $a0, %lo(objCount)($a0) +/* 01CB88 8001BF88 3C048012 */ lui $a0, %hi(gObjectCount) # $a0, 0x8012 +/* 01CB8C 8001BF8C 8C84AE5C */ lw $a0, %lo(gObjectCount)($a0) /* 01CB90 8001BF90 A7A00186 */ sh $zero, 0x186($sp) /* 01CB94 8001BF94 1880002D */ blez $a0, .L8001C04C /* 01CB98 8001BF98 00003825 */ move $a3, $zero @@ -66,7 +66,7 @@ glabel func_8001BF20 /* 01CBFC 8001BFFC 15E00010 */ bnez $t7, .L8001C040 /* 01CC00 8001C000 0003C880 */ sll $t9, $v1, 2 /* 01CC04 8001C004 8D580000 */ lw $t8, ($t2) -/* 01CC08 8001C008 3C048012 */ lui $a0, %hi(objCount) # $a0, 0x8012 +/* 01CC08 8001C008 3C048012 */ lui $a0, %hi(gObjectCount) # $a0, 0x8012 /* 01CC0C 8001C00C 03195821 */ addu $t3, $t8, $t9 /* 01CC10 8001C010 AD730000 */ sw $s3, ($t3) /* 01CC14 8001C014 87AD0186 */ lh $t5, 0x186($sp) @@ -78,7 +78,7 @@ glabel func_8001BF20 /* 01CC2C 8001C02C 31F80003 */ andi $t8, $t7, 3 /* 01CC30 8001C030 A3380000 */ sb $t8, ($t9) /* 01CC34 8001C034 25AB0001 */ addiu $t3, $t5, 1 -/* 01CC38 8001C038 8C84AE5C */ lw $a0, %lo(objCount)($a0) +/* 01CC38 8001C038 8C84AE5C */ lw $a0, %lo(gObjectCount)($a0) /* 01CC3C 8001C03C A7AB0186 */ sh $t3, 0x186($sp) .L8001C040: /* 01CC40 8001C040 00E4082A */ slt $at, $a3, $a0 diff --git a/asm/non_matchings/objects/func_8001E4C4.s b/asm/non_matchings/objects/func_8001E4C4.s index fb665024..354d4917 100644 --- a/asm/non_matchings/objects/func_8001E4C4.s +++ b/asm/non_matchings/objects/func_8001E4C4.s @@ -1,6 +1,6 @@ glabel func_8001E4C4 -/* 01F0C4 8001E4C4 3C088012 */ lui $t0, %hi(objCount) # $t0, 0x8012 -/* 01F0C8 8001E4C8 2508AE5C */ addiu $t0, %lo(objCount) # addiu $t0, $t0, -0x51a4 +/* 01F0C4 8001E4C4 3C088012 */ lui $t0, %hi(gObjectCount) # $t0, 0x8012 +/* 01F0C8 8001E4C8 2508AE5C */ addiu $t0, %lo(gObjectCount) # addiu $t0, $t0, -0x51a4 /* 01F0CC 8001E4CC 8D030000 */ lw $v1, ($t0) /* 01F0D0 8001E4D0 00001025 */ move $v0, $zero /* 01F0D4 8001E4D4 18600013 */ blez $v1, .L8001E524 diff --git a/asm/non_matchings/objects/func_8001E93C.s b/asm/non_matchings/objects/func_8001E93C.s index 3ec271ad..c942904b 100644 --- a/asm/non_matchings/objects/func_8001E93C.s +++ b/asm/non_matchings/objects/func_8001E93C.s @@ -56,8 +56,8 @@ glabel func_8001E93C .L8001EA08: /* 01F608 8001EA08 0C007931 */ jal func_8001E4C4 /* 01F60C 8001EA0C 00000000 */ nop -/* 01F610 8001EA10 3C068012 */ lui $a2, %hi(objCount) # $a2, 0x8012 -/* 01F614 8001EA14 8CC6AE5C */ lw $a2, %lo(objCount)($a2) +/* 01F610 8001EA10 3C068012 */ lui $a2, %hi(gObjectCount) # $a2, 0x8012 +/* 01F614 8001EA14 8CC6AE5C */ lw $a2, %lo(gObjectCount)($a2) /* 01F618 8001EA18 3C0D8012 */ lui $t5, %hi(D_8011AE74) # $t5, 0x8012 /* 01F61C 8001EA1C 18C00023 */ blez $a2, .L8001EAAC /* 01F620 8001EA20 25ADAE74 */ addiu $t5, %lo(D_8011AE74) # addiu $t5, $t5, -0x518c @@ -133,10 +133,10 @@ glabel func_8001E93C /* 01F724 8001EB24 14990008 */ bne $a0, $t9, .L8001EB48 /* 01F728 8001EB28 0186082A */ slt $at, $t4, $a2 /* 01F72C 8001EB2C 8DAE0000 */ lw $t6, ($t5) -/* 01F730 8001EB30 3C068012 */ lui $a2, %hi(objCount) # $a2, 0x8012 +/* 01F730 8001EB30 3C068012 */ lui $a2, %hi(gObjectCount) # $a2, 0x8012 /* 01F734 8001EB34 01CFC021 */ addu $t8, $t6, $t7 /* 01F738 8001EB38 AF020000 */ sw $v0, ($t8) -/* 01F73C 8001EB3C 8CC6AE5C */ lw $a2, %lo(objCount)($a2) +/* 01F73C 8001EB3C 8CC6AE5C */ lw $a2, %lo(gObjectCount)($a2) /* 01F740 8001EB40 26730001 */ addiu $s3, $s3, 1 /* 01F744 8001EB44 0186082A */ slt $at, $t4, $a2 .L8001EB48: diff --git a/asm/non_matchings/objects/func_8001F460.s b/asm/non_matchings/objects/func_8001F460.s index be798d31..c0615441 100644 --- a/asm/non_matchings/objects/func_8001F460.s +++ b/asm/non_matchings/objects/func_8001F460.s @@ -288,7 +288,7 @@ glabel func_8001F460 /* 02044C 8001F84C 00002025 */ move $a0, $zero /* 020450 8001F850 00007012 */ mflo $t6 /* 020454 8001F854 AFAE0018 */ sw $t6, 0x18($sp) -/* 020458 8001F858 0C00C378 */ jal func_80030DE0 +/* 020458 8001F858 0C00C378 */ jal slowly_change_fog /* 02045C 8001F85C 00000000 */ nop /* 020460 8001F860 10000048 */ b .L8001F984 /* 020464 8001F864 241800FF */ li $t8, 255 diff --git a/asm/non_matchings/objects/func_80022948.s b/asm/non_matchings/objects/func_80022948.s index 56c6af79..661c150d 100644 --- a/asm/non_matchings/objects/func_80022948.s +++ b/asm/non_matchings/objects/func_80022948.s @@ -200,8 +200,8 @@ glabel func_80022948 /* 023854 80022C54 240D0002 */ li $t5, 2 /* 023858 80022C58 A18D0012 */ sb $t5, 0x12($t4) /* 02385C 80022C5C 3C048012 */ lui $a0, %hi(D_8011AE60) # $a0, 0x8012 -/* 023860 80022C60 3C058012 */ lui $a1, %hi(objCount) # $a1, 0x8012 -/* 023864 80022C64 8CA5AE5C */ lw $a1, %lo(objCount)($a1) +/* 023860 80022C60 3C058012 */ lui $a1, %hi(gObjectCount) # $a1, 0x8012 +/* 023864 80022C64 8CA5AE5C */ lw $a1, %lo(gObjectCount)($a1) /* 023868 80022C68 8C84AE60 */ lw $a0, %lo(D_8011AE60)($a0) /* 02386C 80022C6C 2407003E */ li $a3, 62 /* 023870 80022C70 0085082A */ slt $at, $a0, $a1 @@ -225,15 +225,15 @@ glabel func_80022948 /* 0238B4 80022CB4 14E90006 */ bne $a3, $t1, .L80022CD0 /* 0238B8 80022CB8 0085082A */ slt $at, $a0, $a1 /* 0238BC 80022CBC AE020154 */ sw $v0, 0x154($s0) -/* 0238C0 80022CC0 3C058012 */ lui $a1, %hi(objCount) # $a1, 0x8012 -/* 0238C4 80022CC4 8CA5AE5C */ lw $a1, %lo(objCount)($a1) +/* 0238C0 80022CC0 3C058012 */ lui $a1, %hi(gObjectCount) # $a1, 0x8012 +/* 0238C4 80022CC4 8CA5AE5C */ lw $a1, %lo(gObjectCount)($a1) /* 0238C8 80022CC8 00000000 */ nop /* 0238CC 80022CCC 0085082A */ slt $at, $a0, $a1 .L80022CD0: /* 0238D0 80022CD0 1420FFEC */ bnez $at, .L80022C84 /* 0238D4 80022CD4 24630004 */ addiu $v1, $v1, 4 .L80022CD8: -/* 0238D8 80022CD8 0C01BCE2 */ jal func_8006F388 +/* 0238D8 80022CD8 0C01BCE2 */ jal set_pause_lockout_timer /* 0238DC 80022CDC 24040014 */ li $a0, 20 /* 0238E0 80022CE0 3C04800E */ lui $a0, %hi(D_800DC6F0) # $a0, 0x800e /* 0238E4 80022CE4 0C030076 */ jal transition_begin diff --git a/asm/non_matchings/objects/func_80022E18.s b/asm/non_matchings/objects/func_80022E18.s index e2390606..88a87636 100644 --- a/asm/non_matchings/objects/func_80022E18.s +++ b/asm/non_matchings/objects/func_80022E18.s @@ -53,8 +53,8 @@ glabel func_80022E18 /* 023AE0 80022EE0 ADCD0000 */ sw $t5, ($t6) /* 023AE4 80022EE4 ACCF0000 */ sw $t7, ($a2) /* 023AE8 80022EE8 3C058012 */ lui $a1, %hi(D_8011AE60) # $a1, 0x8012 -/* 023AEC 80022EEC 3C038012 */ lui $v1, %hi(objCount) # $v1, 0x8012 -/* 023AF0 80022EF0 8C63AE5C */ lw $v1, %lo(objCount)($v1) +/* 023AEC 80022EEC 3C038012 */ lui $v1, %hi(gObjectCount) # $v1, 0x8012 +/* 023AF0 80022EF0 8C63AE5C */ lw $v1, %lo(gObjectCount)($v1) /* 023AF4 80022EF4 8CA5AE60 */ lw $a1, %lo(D_8011AE60)($a1) /* 023AF8 80022EF8 3C188012 */ lui $t8, %hi(gObjPtrList) # $t8, 0x8012 /* 023AFC 80022EFC 00A3082A */ slt $at, $a1, $v1 diff --git a/asm/non_matchings/objects/func_800230D0.s b/asm/non_matchings/objects/func_800230D0.s index af7aa8ab..d4f3ec32 100644 --- a/asm/non_matchings/objects/func_800230D0.s +++ b/asm/non_matchings/objects/func_800230D0.s @@ -8,8 +8,8 @@ glabel func_800230D0 /* 023CE8 800230E8 00A08825 */ move $s1, $a1 /* 023CEC 800230EC 14400032 */ bnez $v0, .L800231B8 /* 023CF0 800230F0 AFBF001C */ sw $ra, 0x1c($sp) -/* 023CF4 800230F4 3C078012 */ lui $a3, %hi(objCount) # $a3, 0x8012 -/* 023CF8 800230F8 24E7AE5C */ addiu $a3, %lo(objCount) # addiu $a3, $a3, -0x51a4 +/* 023CF4 800230F4 3C078012 */ lui $a3, %hi(gObjectCount) # $a3, 0x8012 +/* 023CF8 800230F8 24E7AE5C */ addiu $a3, %lo(gObjectCount) # addiu $a3, $a3, -0x51a4 /* 023CFC 800230FC 8CE40000 */ lw $a0, ($a3) /* 023D00 80023100 00004025 */ move $t0, $zero /* 023D04 80023104 1880002A */ blez $a0, .L800231B0 diff --git a/asm/non_matchings/objects/spawn_object.s b/asm/non_matchings/objects/spawn_object.s index de7dbebc..0996a6bb 100644 --- a/asm/non_matchings/objects/spawn_object.s +++ b/asm/non_matchings/objects/spawn_object.s @@ -61,7 +61,7 @@ glabel spawn_object /* 00F71C 8000EB1C 24190002 */ li $t9, 2 /* 00F720 8000EB20 A6590006 */ sh $t9, 6($s2) /* 00F724 8000EB24 A7A4004E */ sh $a0, 0x4e($sp) -/* 00F728 8000EB28 0C0031C6 */ jal func_8000C718 +/* 00F728 8000EB28 0C0031C6 */ jal load_object_header /* 00F72C 8000EB2C AFA3002C */ sw $v1, 0x2c($sp) /* 00F730 8000EB30 14400003 */ bnez $v0, .L8000EB40 /* 00F734 8000EB34 AE420040 */ sw $v0, 0x40($s2) @@ -459,7 +459,7 @@ glabel L8000EDE0 /* 00FCD0 8000F0D0 0C003D92 */ jal objFreeAssets /* 00FCD4 8000F0D4 02602825 */ move $a1, $s3 /* 00FCD8 8000F0D8 87A4004E */ lh $a0, 0x4e($sp) -/* 00FCDC 8000F0DC 0C003211 */ jal func_8000C844 +/* 00FCDC 8000F0DC 0C003211 */ jal try_free_object_header /* 00FCE0 8000F0E0 00000000 */ nop /* 00FCE4 8000F0E4 10000151 */ b .L8000F62C /* 00FCE8 8000F0E8 00001025 */ move $v0, $zero @@ -504,7 +504,7 @@ glabel L8000EDE0 /* 00FD7C 8000F17C 0C003D92 */ jal objFreeAssets /* 00FD80 8000F180 02602825 */ move $a1, $s3 /* 00FD84 8000F184 87A4004E */ lh $a0, 0x4e($sp) -/* 00FD88 8000F188 0C003211 */ jal func_8000C844 +/* 00FD88 8000F188 0C003211 */ jal try_free_object_header /* 00FD8C 8000F18C 00000000 */ nop /* 00FD90 8000F190 10000126 */ b .L8000F62C /* 00FD94 8000F194 00001025 */ move $v0, $zero @@ -514,7 +514,7 @@ glabel L8000EDE0 /* 00FDA0 8000F1A0 330E0004 */ andi $t6, $t8, 4 /* 00FDA4 8000F1A4 11C00016 */ beqz $t6, .L8000F200 /* 00FDA8 8000F1A8 00C02825 */ move $a1, $a2 -/* 00FDAC 8000F1AC 0C003F1B */ jal func_8000FC6C +/* 00FDAC 8000F1AC 0C003F1B */ jal init_object_water_effect /* 00FDB0 8000F1B0 AFA60048 */ sw $a2, 0x48($sp) /* 00FDB4 8000F1B4 8FA60048 */ lw $a2, 0x48($sp) /* 00FDB8 8000F1B8 14400011 */ bnez $v0, .L8000F200 @@ -532,7 +532,7 @@ glabel L8000EDE0 /* 00FDE4 8000F1E4 0C003D92 */ jal objFreeAssets /* 00FDE8 8000F1E8 02602825 */ move $a1, $s3 /* 00FDEC 8000F1EC 87A4004E */ lh $a0, 0x4e($sp) -/* 00FDF0 8000F1F0 0C003211 */ jal func_8000C844 +/* 00FDF0 8000F1F0 0C003211 */ jal try_free_object_header /* 00FDF4 8000F1F4 00000000 */ nop /* 00FDF8 8000F1F8 1000010C */ b .L8000F62C /* 00FDFC 8000F1FC 00001025 */ move $v0, $zero @@ -619,7 +619,7 @@ glabel L8000EDE0 /* 00FF20 8000F320 0C003D92 */ jal objFreeAssets /* 00FF24 8000F324 02602825 */ move $a1, $s3 /* 00FF28 8000F328 87A4004E */ lh $a0, 0x4e($sp) -/* 00FF2C 8000F32C 0C003211 */ jal func_8000C844 +/* 00FF2C 8000F32C 0C003211 */ jal try_free_object_header /* 00FF30 8000F330 00000000 */ nop /* 00FF34 8000F334 100000BD */ b .L8000F62C /* 00FF38 8000F338 00001025 */ move $v0, $zero @@ -703,9 +703,9 @@ glabel L8000EDE0 /* 01004C 8000F44C AC4A005C */ sw $t2, 0x5c($v0) .L8000F450: /* 010050 8000F450 8C430060 */ lw $v1, 0x60($v0) -/* 010054 8000F454 3C108012 */ lui $s0, %hi(objCount) # $s0, 0x8012 +/* 010054 8000F454 3C108012 */ lui $s0, %hi(gObjectCount) # $s0, 0x8012 /* 010058 8000F458 10600005 */ beqz $v1, .L8000F470 -/* 01005C 8000F45C 2610AE5C */ addiu $s0, %lo(objCount) # addiu $s0, $s0, -0x51a4 +/* 01005C 8000F45C 2610AE5C */ addiu $s0, %lo(gObjectCount) # addiu $s0, $s0, -0x51a4 /* 010060 8000F460 8CAB0000 */ lw $t3, ($a1) /* 010064 8000F464 0043C821 */ addu $t9, $v0, $v1 /* 010068 8000F468 032B6023 */ subu $t4, $t9, $t3 @@ -750,10 +750,10 @@ glabel L8000EDE0 /* 0100F8 8000F4F8 25590001 */ addiu $t9, $t2, 1 /* 0100FC 8000F4FC AE190000 */ sw $t9, ($s0) .L8000F500: -/* 010100 8000F500 3C108012 */ lui $s0, %hi(objCount) # $s0, 0x8012 +/* 010100 8000F500 3C108012 */ lui $s0, %hi(gObjectCount) # $s0, 0x8012 /* 010104 8000F504 8FA50068 */ lw $a1, 0x68($sp) /* 010108 8000F508 0C008E2F */ jal run_object_init_func -/* 01010C 8000F50C 2610AE5C */ addiu $s0, %lo(objCount) # addiu $s0, $s0, -0x51a4 +/* 01010C 8000F50C 2610AE5C */ addiu $s0, %lo(gObjectCount) # addiu $s0, $s0, -0x51a4 /* 010110 8000F510 8E42004C */ lw $v0, 0x4c($s2) /* 010114 8000F514 00000000 */ nop /* 010118 8000F518 1040000C */ beqz $v0, .L8000F54C @@ -802,7 +802,7 @@ glabel L8000EDE0 /* 0101B8 8000F5B8 0C003D92 */ jal objFreeAssets /* 0101BC 8000F5BC 02602825 */ move $a1, $s3 /* 0101C0 8000F5C0 87A4004E */ lh $a0, 0x4e($sp) -/* 0101C4 8000F5C4 0C003211 */ jal func_8000C844 +/* 0101C4 8000F5C4 0C003211 */ jal try_free_object_header /* 0101C8 8000F5C8 00000000 */ nop /* 0101CC 8000F5CC 0C01C450 */ jal free_from_memory_pool /* 0101D0 8000F5D0 02402025 */ move $a0, $s2 diff --git a/asm/non_matchings/tracks/func_8002F440.s b/asm/non_matchings/tracks/func_8002F440.s index 59a28c2e..df166cde 100644 --- a/asm/non_matchings/tracks/func_8002F440.s +++ b/asm/non_matchings/tracks/func_8002F440.s @@ -1,413 +1,413 @@ -.late_rodata -glabel D_800E5F54 -.float 1.4142 -glabel D_800E5F58 -.float 0.005 - -.text -glabel func_8002F440 -/* 030040 8002F440 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 030044 8002F444 3C0C8012 */ lui $t4, %hi(D_8011D0C4) # $t4, 0x8012 -/* 030048 8002F448 258CD0C4 */ addiu $t4, %lo(D_8011D0C4) # addiu $t4, $t4, -0x2f3c -/* 03004C 8002F44C 8D8E0000 */ lw $t6, ($t4) -/* 030050 8002F450 AFBF003C */ sw $ra, 0x3c($sp) -/* 030054 8002F454 AFBE0038 */ sw $fp, 0x38($sp) -/* 030058 8002F458 AFB70034 */ sw $s7, 0x34($sp) -/* 03005C 8002F45C AFB60030 */ sw $s6, 0x30($sp) -/* 030060 8002F460 AFB5002C */ sw $s5, 0x2c($sp) -/* 030064 8002F464 AFB40028 */ sw $s4, 0x28($sp) -/* 030068 8002F468 AFB30024 */ sw $s3, 0x24($sp) -/* 03006C 8002F46C AFB20020 */ sw $s2, 0x20($sp) -/* 030070 8002F470 AFB1001C */ sw $s1, 0x1c($sp) -/* 030074 8002F474 AFB00018 */ sw $s0, 0x18($sp) -/* 030078 8002F478 85C40000 */ lh $a0, ($t6) -/* 03007C 8002F47C 0C01C1F1 */ jal sins_f -/* 030080 8002F480 241700FF */ li $s7, 255 -/* 030084 8002F484 3C0C8012 */ lui $t4, %hi(D_8011D0C4) # $t4, 0x8012 -/* 030088 8002F488 258CD0C4 */ addiu $t4, %lo(D_8011D0C4) # addiu $t4, $t4, -0x2f3c -/* 03008C 8002F48C 8D8F0000 */ lw $t7, ($t4) -/* 030090 8002F490 00000000 */ nop -/* 030094 8002F494 85E40000 */ lh $a0, ($t7) -/* 030098 8002F498 0C01C1FE */ jal coss_f -/* 03009C 8002F49C E7A00074 */ swc1 $f0, 0x74($sp) -/* 0300A0 8002F4A0 3C188012 */ lui $t8, %hi(D_8011D0C0) # $t8, 0x8012 -/* 0300A4 8002F4A4 8F18D0C0 */ lw $t8, %lo(D_8011D0C0)($t8) -/* 0300A8 8002F4A8 3C018012 */ lui $at, %hi(D_8011D0DC) # $at, 0x8012 -/* 0300AC 8002F4AC 93190000 */ lbu $t9, ($t8) -/* 0300B0 8002F4B0 C426D0DC */ lwc1 $f6, %lo(D_8011D0DC)($at) -/* 0300B4 8002F4B4 00197100 */ sll $t6, $t9, 4 -/* 0300B8 8002F4B8 448E2000 */ mtc1 $t6, $f4 -/* 0300BC 8002F4BC 3C01800E */ lui $at, %hi(D_800E5F54) # $at, 0x800e -/* 0300C0 8002F4C0 468024A0 */ cvt.s.w $f18, $f4 -/* 0300C4 8002F4C4 C4285F54 */ lwc1 $f8, %lo(D_800E5F54)($at) -/* 0300C8 8002F4C8 3C018012 */ lui $at, %hi(D_8011D0F0) # $at, 0x8012 -/* 0300CC 8002F4CC 46069383 */ div.s $f14, $f18, $f6 -/* 0300D0 8002F4D0 C42CD0F0 */ lwc1 $f12, %lo(D_8011D0F0)($at) -/* 0300D4 8002F4D4 44805000 */ mtc1 $zero, $f10 -/* 0300D8 8002F4D8 3C0C8012 */ lui $t4, %hi(D_8011D0C4) # $t4, 0x8012 -/* 0300DC 8002F4DC 460C503C */ c.lt.s $f10, $f12 -/* 0300E0 8002F4E0 C7B00074 */ lwc1 $f16, 0x74($sp) -/* 0300E4 8002F4E4 3C0D8012 */ lui $t5, %hi(D_8011C238) # $t5, 0x8012 -/* 0300E8 8002F4E8 3C1E8012 */ lui $fp, %hi(D_8011D364) # $fp, 0x8012 -/* 0300EC 8002F4EC 258CD0C4 */ addiu $t4, %lo(D_8011D0C4) # addiu $t4, $t4, -0x2f3c -/* 0300F0 8002F4F0 3C188012 */ lui $t8, %hi(D_8011D0D0) # $t8, 0x8012 -/* 0300F4 8002F4F4 27DED364 */ addiu $fp, %lo(D_8011D364) # addiu $fp, $fp, -0x2c9c -/* 0300F8 8002F4F8 25ADC238 */ addiu $t5, %lo(D_8011C238) # addiu $t5, $t5, -0x3dc8 -/* 0300FC 8002F4FC 46087382 */ mul.s $f14, $f14, $f8 -/* 030100 8002F500 4500002E */ bc1f .L8002F5BC -/* 030104 8002F504 24160040 */ li $s6, 64 -/* 030108 8002F508 8718D0D0 */ lh $t8, %lo(D_8011D0D0)($t8) -/* 03010C 8002F50C 8D8F0000 */ lw $t7, ($t4) -/* 030110 8002F510 44983000 */ mtc1 $t8, $f6 -/* 030114 8002F514 C5E40010 */ lwc1 $f4, 0x10($t7) -/* 030118 8002F518 46803220 */ cvt.s.w $f8, $f6 -/* 03011C 8002F51C 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 030120 8002F520 46082081 */ sub.s $f2, $f4, $f8 -/* 030124 8002F524 4602603C */ c.lt.s $f12, $f2 -/* 030128 8002F528 00000000 */ nop -/* 03012C 8002F52C 45000015 */ bc1f .L8002F584 -/* 030130 8002F530 00000000 */ nop -/* 030134 8002F534 44815000 */ mtc1 $at, $f10 -/* 030138 8002F538 460C1181 */ sub.s $f6, $f2, $f12 -/* 03013C 8002F53C 3C018012 */ lui $at, %hi(D_8011D0F4) # $at, 0x8012 -/* 030140 8002F540 46065102 */ mul.s $f4, $f10, $f6 -/* 030144 8002F544 C428D0F4 */ lwc1 $f8, %lo(D_8011D0F4)($at) -/* 030148 8002F548 240F00FF */ li $t7, 255 -/* 03014C 8002F54C 46082283 */ div.s $f10, $f4, $f8 -/* 030150 8002F550 4459F800 */ cfc1 $t9, $31 -/* 030154 8002F554 00000000 */ nop -/* 030158 8002F558 37210003 */ ori $at, $t9, 3 -/* 03015C 8002F55C 38210002 */ xori $at, $at, 2 -/* 030160 8002F560 44C1F800 */ ctc1 $at, $31 -/* 030164 8002F564 00000000 */ nop -/* 030168 8002F568 460051A4 */ cvt.w.s $f6, $f10 -/* 03016C 8002F56C 440E3000 */ mfc1 $t6, $f6 -/* 030170 8002F570 44D9F800 */ ctc1 $t9, $31 -/* 030174 8002F574 01EEB823 */ subu $s7, $t7, $t6 -/* 030178 8002F578 06E10002 */ bgez $s7, .L8002F584 -/* 03017C 8002F57C 00000000 */ nop -/* 030180 8002F580 0000B825 */ move $s7, $zero -.L8002F584: -/* 030184 8002F584 44802000 */ mtc1 $zero, $f4 -/* 030188 8002F588 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 03018C 8002F58C 4602203C */ c.lt.s $f4, $f2 -/* 030190 8002F590 00000000 */ nop -/* 030194 8002F594 45000009 */ bc1f .L8002F5BC -/* 030198 8002F598 00000000 */ nop -/* 03019C 8002F59C 44814000 */ mtc1 $at, $f8 -/* 0301A0 8002F5A0 3C01800E */ lui $at, %hi(D_800E5F58) # $at, 0x800e -/* 0301A4 8002F5A4 C42A5F58 */ lwc1 $f10, %lo(D_800E5F58)($at) -/* 0301A8 8002F5A8 00000000 */ nop -/* 0301AC 8002F5AC 46025182 */ mul.s $f6, $f10, $f2 -/* 0301B0 8002F5B0 46064100 */ add.s $f4, $f8, $f6 -/* 0301B4 8002F5B4 46047382 */ mul.s $f14, $f14, $f4 -/* 0301B8 8002F5B8 00000000 */ nop -.L8002F5BC: -/* 0301BC 8002F5BC 44975000 */ mtc1 $s7, $f10 -/* 0301C0 8002F5C0 3C018012 */ lui $at, %hi(D_8011D0D4) # $at, 0x8012 -/* 0301C4 8002F5C4 46805220 */ cvt.s.w $f8, $f10 -/* 0301C8 8002F5C8 C426D0D4 */ lwc1 $f6, %lo(D_8011D0D4)($at) -/* 0301CC 8002F5CC 3C198012 */ lui $t9, %hi(D_8011C230) # $t9, 0x8012 -/* 0301D0 8002F5D0 46064102 */ mul.s $f4, $f8, $f6 -/* 0301D4 8002F5D4 8F39C230 */ lw $t9, %lo(D_8011C230)($t9) -/* 0301D8 8002F5D8 3C158012 */ lui $s5, %hi(D_8011D330) # $s5, 0x8012 -/* 0301DC 8002F5DC 3C148012 */ lui $s4, %hi(D_8011D348) # $s4, 0x8012 -/* 0301E0 8002F5E0 4458F800 */ cfc1 $t8, $31 -/* 0301E4 8002F5E4 24120019 */ li $s2, 25 -/* 0301E8 8002F5E8 37010003 */ ori $at, $t8, 3 -/* 0301EC 8002F5EC 38210002 */ xori $at, $at, 2 -/* 0301F0 8002F5F0 44C1F800 */ ctc1 $at, $31 -/* 0301F4 8002F5F4 2694D348 */ addiu $s4, %lo(D_8011D348) # addiu $s4, $s4, -0x2cb8 -/* 0301F8 8002F5F8 460022A4 */ cvt.w.s $f10, $f4 -/* 0301FC 8002F5FC 26B5D330 */ addiu $s5, %lo(D_8011D330) # addiu $s5, $s5, -0x2cd0 -/* 030200 8002F600 44175000 */ mfc1 $s7, $f10 -/* 030204 8002F604 44D8F800 */ ctc1 $t8, $31 -/* 030208 8002F608 1B20010A */ blez $t9, .L8002FA34 -/* 03020C 8002F60C AFA000AC */ sw $zero, 0xac($sp) -/* 030210 8002F610 3C118012 */ lui $s1, %hi(D_8011D0C8) # $s1, 0x8012 -/* 030214 8002F614 3C108012 */ lui $s0, %hi(D_8011D36C) # $s0, 0x8012 -/* 030218 8002F618 3C1F8012 */ lui $ra, %hi(D_8011D368) # $ra, 0x8012 -/* 03021C 8002F61C 3C0A8012 */ lui $t2, %hi(D_8011B120) # $t2, 0x8012 -/* 030220 8002F620 3C098012 */ lui $t1, %hi(D_8011B330) # $t1, 0x8012 -/* 030224 8002F624 2529B330 */ addiu $t1, %lo(D_8011B330) # addiu $t1, $t1, -0x4cd0 -/* 030228 8002F628 254AB120 */ addiu $t2, %lo(D_8011B120) # addiu $t2, $t2, -0x4ee0 -/* 03022C 8002F62C 27FFD368 */ addiu $ra, %lo(D_8011D368) # addiu $ra, $ra, -0x2c98 -/* 030230 8002F630 2610D36C */ addiu $s0, %lo(D_8011D36C) # addiu $s0, $s0, -0x2c94 -/* 030234 8002F634 2631D0C8 */ addiu $s1, %lo(D_8011D0C8) # addiu $s1, $s1, -0x2f38 -/* 030238 8002F638 2413000A */ li $s3, 10 -/* 03023C 8002F63C 240B00FF */ li $t3, 255 -.L8002F640: -/* 030240 8002F640 91A20000 */ lbu $v0, ($t5) -/* 030244 8002F644 3C038012 */ lui $v1, %hi(D_8011D360) # $v1, 0x8012 -/* 030248 8002F648 00527821 */ addu $t7, $v0, $s2 -/* 03024C 8002F64C 29E10018 */ slti $at, $t7, 0x18 -/* 030250 8002F650 14200019 */ bnez $at, .L8002F6B8 -/* 030254 8002F654 2463D360 */ addiu $v1, %lo(D_8011D360) # addiu $v1, $v1, -0x2ca0 -/* 030258 8002F658 8FD90000 */ lw $t9, ($fp) -/* 03025C 8002F65C 8C780000 */ lw $t8, ($v1) -/* 030260 8002F660 3C0E8012 */ lui $t6, %hi(D_8011D0C0) # $t6, 0x8012 -/* 030264 8002F664 8DCED0C0 */ lw $t6, %lo(D_8011D0C0)($t6) -/* 030268 8002F668 001978C0 */ sll $t7, $t9, 3 -/* 03026C 8002F66C 030FC821 */ addu $t9, $t8, $t7 -/* 030270 8002F670 AF2E0000 */ sw $t6, ($t9) -/* 030274 8002F674 8FCE0000 */ lw $t6, ($fp) -/* 030278 8002F678 8C6F0000 */ lw $t7, ($v1) -/* 03027C 8002F67C 8FF80000 */ lw $t8, ($ra) -/* 030280 8002F680 000EC8C0 */ sll $t9, $t6, 3 -/* 030284 8002F684 01F97021 */ addu $t6, $t7, $t9 -/* 030288 8002F688 A5D80004 */ sh $t8, 4($t6) -/* 03028C 8002F68C 8FD80000 */ lw $t8, ($fp) -/* 030290 8002F690 8C790000 */ lw $t9, ($v1) -/* 030294 8002F694 8E0F0000 */ lw $t7, ($s0) -/* 030298 8002F698 001870C0 */ sll $t6, $t8, 3 -/* 03029C 8002F69C 032EC021 */ addu $t8, $t9, $t6 -/* 0302A0 8002F6A0 A70F0006 */ sh $t7, 6($t8) -/* 0302A4 8002F6A4 8FD90000 */ lw $t9, ($fp) -/* 0302A8 8002F6A8 91A20000 */ lbu $v0, ($t5) -/* 0302AC 8002F6AC 272E0001 */ addiu $t6, $t9, 1 -/* 0302B0 8002F6B0 AFCE0000 */ sw $t6, ($fp) -/* 0302B4 8002F6B4 00009025 */ move $s2, $zero -.L8002F6B8: -/* 0302B8 8002F6B8 91A80001 */ lbu $t0, 1($t5) -/* 0302BC 8002F6BC 184000AA */ blez $v0, .L8002F968 -/* 0302C0 8002F6C0 00003825 */ move $a3, $zero -/* 0302C4 8002F6C4 8FAF00AC */ lw $t7, 0xac($sp) -/* 0302C8 8002F6C8 3C198012 */ lui $t9, %hi(D_8011C238) # $t9, 0x8012 -/* 0302CC 8002F6CC 000FC080 */ sll $t8, $t7, 2 -/* 0302D0 8002F6D0 030FC023 */ subu $t8, $t8, $t7 -/* 0302D4 8002F6D4 0018C080 */ sll $t8, $t8, 2 -/* 0302D8 8002F6D8 2739C238 */ addiu $t9, %lo(D_8011C238) # addiu $t9, $t9, -0x3dc8 -/* 0302DC 8002F6DC 03191821 */ addu $v1, $t8, $t9 -/* 0302E0 8002F6E0 27A50090 */ addiu $a1, $sp, 0x90 -/* 0302E4 8002F6E4 27A60080 */ addiu $a2, $sp, 0x80 -.L8002F6E8: -/* 0302E8 8002F6E8 8E040000 */ lw $a0, ($s0) -/* 0302EC 8002F6EC 8E8F0000 */ lw $t7, ($s4) -/* 0302F0 8002F6F0 00930019 */ multu $a0, $s3 -/* 0302F4 8002F6F4 31190001 */ andi $t9, $t0, 1 -/* 0302F8 8002F6F8 24980001 */ addiu $t8, $a0, 1 -/* 0302FC 8002F6FC AE180000 */ sw $t8, ($s0) -/* 030300 8002F700 00007012 */ mflo $t6 -/* 030304 8002F704 01CF1021 */ addu $v0, $t6, $t7 -/* 030308 8002F708 13200037 */ beqz $t9, .L8002F7E8 -/* 03030C 8002F70C 00000000 */ nop -/* 030310 8002F710 906E0002 */ lbu $t6, 2($v1) -/* 030314 8002F714 4459F800 */ cfc1 $t9, $31 -/* 030318 8002F718 000E7940 */ sll $t7, $t6, 5 -/* 03031C 8002F71C 37210003 */ ori $at, $t9, 3 -/* 030320 8002F720 38210002 */ xori $at, $at, 2 -/* 030324 8002F724 012FC021 */ addu $t8, $t1, $t7 -/* 030328 8002F728 C7080000 */ lwc1 $f8, ($t8) -/* 03032C 8002F72C 44C1F800 */ ctc1 $at, $31 -/* 030330 8002F730 00000000 */ nop -/* 030334 8002F734 460041A4 */ cvt.w.s $f6, $f8 -/* 030338 8002F738 440E3000 */ mfc1 $t6, $f6 -/* 03033C 8002F73C 44D9F800 */ ctc1 $t9, $31 -/* 030340 8002F740 A44E0000 */ sh $t6, ($v0) -/* 030344 8002F744 906F0002 */ lbu $t7, 2($v1) -/* 030348 8002F748 8D990000 */ lw $t9, ($t4) -/* 03034C 8002F74C 000FC140 */ sll $t8, $t7, 5 -/* 030350 8002F750 01382021 */ addu $a0, $t1, $t8 -/* 030354 8002F754 C4840000 */ lwc1 $f4, ($a0) -/* 030358 8002F758 C72A000C */ lwc1 $f10, 0xc($t9) -/* 03035C 8002F75C C4880004 */ lwc1 $f8, 4($a0) -/* 030360 8002F760 C6260000 */ lwc1 $f6, ($s1) -/* 030364 8002F764 460A2081 */ sub.s $f2, $f4, $f10 -/* 030368 8002F768 46064100 */ add.s $f4, $f8, $f6 -/* 03036C 8002F76C 444EF800 */ cfc1 $t6, $31 -/* 030370 8002F770 00000000 */ nop -/* 030374 8002F774 35C10003 */ ori $at, $t6, 3 -/* 030378 8002F778 38210002 */ xori $at, $at, 2 -/* 03037C 8002F77C 44C1F800 */ ctc1 $at, $31 -/* 030380 8002F780 00000000 */ nop -/* 030384 8002F784 460022A4 */ cvt.w.s $f10, $f4 -/* 030388 8002F788 440F5000 */ mfc1 $t7, $f10 -/* 03038C 8002F78C 44CEF800 */ ctc1 $t6, $31 -/* 030390 8002F790 A44F0002 */ sh $t7, 2($v0) -/* 030394 8002F794 90780002 */ lbu $t8, 2($v1) -/* 030398 8002F798 444FF800 */ cfc1 $t7, $31 -/* 03039C 8002F79C 0018C940 */ sll $t9, $t8, 5 -/* 0303A0 8002F7A0 35E10003 */ ori $at, $t7, 3 -/* 0303A4 8002F7A4 38210002 */ xori $at, $at, 2 -/* 0303A8 8002F7A8 01397021 */ addu $t6, $t1, $t9 -/* 0303AC 8002F7AC C5C80008 */ lwc1 $f8, 8($t6) -/* 0303B0 8002F7B0 44C1F800 */ ctc1 $at, $31 -/* 0303B4 8002F7B4 00000000 */ nop -/* 0303B8 8002F7B8 460041A4 */ cvt.w.s $f6, $f8 -/* 0303BC 8002F7BC 44183000 */ mfc1 $t8, $f6 -/* 0303C0 8002F7C0 44CFF800 */ ctc1 $t7, $31 -/* 0303C4 8002F7C4 A4580004 */ sh $t8, 4($v0) -/* 0303C8 8002F7C8 90790002 */ lbu $t9, 2($v1) -/* 0303CC 8002F7CC 8D980000 */ lw $t8, ($t4) -/* 0303D0 8002F7D0 00197140 */ sll $t6, $t9, 5 -/* 0303D4 8002F7D4 012E7821 */ addu $t7, $t1, $t6 -/* 0303D8 8002F7D8 C5E40008 */ lwc1 $f4, 8($t7) -/* 0303DC 8002F7DC C70A0014 */ lwc1 $f10, 0x14($t8) -/* 0303E0 8002F7E0 10000037 */ b .L8002F8C0 -/* 0303E4 8002F7E4 460A2301 */ sub.s $f12, $f4, $f10 -.L8002F7E8: -/* 0303E8 8002F7E8 90790002 */ lbu $t9, 2($v1) -/* 0303EC 8002F7EC 4458F800 */ cfc1 $t8, $31 -/* 0303F0 8002F7F0 00197100 */ sll $t6, $t9, 4 -/* 0303F4 8002F7F4 37010003 */ ori $at, $t8, 3 -/* 0303F8 8002F7F8 38210002 */ xori $at, $at, 2 -/* 0303FC 8002F7FC 014E7821 */ addu $t7, $t2, $t6 -/* 030400 8002F800 C5E80000 */ lwc1 $f8, ($t7) -/* 030404 8002F804 44C1F800 */ ctc1 $at, $31 -/* 030408 8002F808 00000000 */ nop -/* 03040C 8002F80C 460041A4 */ cvt.w.s $f6, $f8 -/* 030410 8002F810 44193000 */ mfc1 $t9, $f6 -/* 030414 8002F814 44D8F800 */ ctc1 $t8, $31 -/* 030418 8002F818 A4590000 */ sh $t9, ($v0) -/* 03041C 8002F81C 906E0002 */ lbu $t6, 2($v1) -/* 030420 8002F820 8D980000 */ lw $t8, ($t4) -/* 030424 8002F824 000E7900 */ sll $t7, $t6, 4 -/* 030428 8002F828 014F2021 */ addu $a0, $t2, $t7 -/* 03042C 8002F82C C4840000 */ lwc1 $f4, ($a0) -/* 030430 8002F830 C70A000C */ lwc1 $f10, 0xc($t8) -/* 030434 8002F834 C4880004 */ lwc1 $f8, 4($a0) -/* 030438 8002F838 C6260000 */ lwc1 $f6, ($s1) -/* 03043C 8002F83C 460A2081 */ sub.s $f2, $f4, $f10 -/* 030440 8002F840 46064100 */ add.s $f4, $f8, $f6 -/* 030444 8002F844 4459F800 */ cfc1 $t9, $31 -/* 030448 8002F848 00000000 */ nop -/* 03044C 8002F84C 37210003 */ ori $at, $t9, 3 -/* 030450 8002F850 38210002 */ xori $at, $at, 2 -/* 030454 8002F854 44C1F800 */ ctc1 $at, $31 -/* 030458 8002F858 00000000 */ nop -/* 03045C 8002F85C 460022A4 */ cvt.w.s $f10, $f4 -/* 030460 8002F860 440E5000 */ mfc1 $t6, $f10 -/* 030464 8002F864 44D9F800 */ ctc1 $t9, $31 -/* 030468 8002F868 A44E0002 */ sh $t6, 2($v0) -/* 03046C 8002F86C 906F0002 */ lbu $t7, 2($v1) -/* 030470 8002F870 444EF800 */ cfc1 $t6, $31 -/* 030474 8002F874 000FC100 */ sll $t8, $t7, 4 -/* 030478 8002F878 35C10003 */ ori $at, $t6, 3 -/* 03047C 8002F87C 38210002 */ xori $at, $at, 2 -/* 030480 8002F880 0158C821 */ addu $t9, $t2, $t8 -/* 030484 8002F884 C7280008 */ lwc1 $f8, 8($t9) -/* 030488 8002F888 44C1F800 */ ctc1 $at, $31 -/* 03048C 8002F88C 00000000 */ nop -/* 030490 8002F890 460041A4 */ cvt.w.s $f6, $f8 -/* 030494 8002F894 440F3000 */ mfc1 $t7, $f6 -/* 030498 8002F898 44CEF800 */ ctc1 $t6, $31 -/* 03049C 8002F89C A44F0004 */ sh $t7, 4($v0) -/* 0304A0 8002F8A0 90780002 */ lbu $t8, 2($v1) -/* 0304A4 8002F8A4 8D8F0000 */ lw $t7, ($t4) -/* 0304A8 8002F8A8 0018C900 */ sll $t9, $t8, 4 -/* 0304AC 8002F8AC 01597021 */ addu $t6, $t2, $t9 -/* 0304B0 8002F8B0 C5C40008 */ lwc1 $f4, 8($t6) -/* 0304B4 8002F8B4 C5EA0014 */ lwc1 $f10, 0x14($t7) -/* 0304B8 8002F8B8 00000000 */ nop -/* 0304BC 8002F8BC 460A2301 */ sub.s $f12, $f4, $f10 -.L8002F8C0: -/* 0304C0 8002F8C0 46001202 */ mul.s $f8, $f2, $f0 -/* 0304C4 8002F8C4 0008C043 */ sra $t8, $t0, 1 -/* 0304C8 8002F8C8 A04B0006 */ sb $t3, 6($v0) -/* 0304CC 8002F8CC A04B0007 */ sb $t3, 7($v0) -/* 0304D0 8002F8D0 46106182 */ mul.s $f6, $f12, $f16 -/* 0304D4 8002F8D4 A04B0008 */ sb $t3, 8($v0) -/* 0304D8 8002F8D8 A0570009 */ sb $s7, 9($v0) -/* 0304DC 8002F8DC 91A20000 */ lbu $v0, ($t5) -/* 0304E0 8002F8E0 46064101 */ sub.s $f4, $f8, $f6 -/* 0304E4 8002F8E4 03004025 */ move $t0, $t8 -/* 0304E8 8002F8E8 460E2282 */ mul.s $f10, $f4, $f14 -/* 0304EC 8002F8EC 24E70001 */ addiu $a3, $a3, 1 -/* 0304F0 8002F8F0 24630001 */ addiu $v1, $v1, 1 -/* 0304F4 8002F8F4 24A50002 */ addiu $a1, $a1, 2 -/* 0304F8 8002F8F8 46125200 */ add.s $f8, $f10, $f18 -/* 0304FC 8002F8FC 24C60002 */ addiu $a2, $a2, 2 -/* 030500 8002F900 4459F800 */ cfc1 $t9, $31 -/* 030504 8002F904 00000000 */ nop -/* 030508 8002F908 37210003 */ ori $at, $t9, 3 -/* 03050C 8002F90C 38210002 */ xori $at, $at, 2 -/* 030510 8002F910 44C1F800 */ ctc1 $at, $31 -/* 030514 8002F914 00000000 */ nop -/* 030518 8002F918 460041A4 */ cvt.w.s $f6, $f8 -/* 03051C 8002F91C 44D9F800 */ ctc1 $t9, $31 -/* 030520 8002F920 440E3000 */ mfc1 $t6, $f6 -/* 030524 8002F924 46006102 */ mul.s $f4, $f12, $f0 -/* 030528 8002F928 A4AEFFFE */ sh $t6, -2($a1) -/* 03052C 8002F92C 46101282 */ mul.s $f10, $f2, $f16 -/* 030530 8002F930 460A2200 */ add.s $f8, $f4, $f10 -/* 030534 8002F934 460E4182 */ mul.s $f6, $f8, $f14 -/* 030538 8002F938 46123100 */ add.s $f4, $f6, $f18 -/* 03053C 8002F93C 444FF800 */ cfc1 $t7, $31 -/* 030540 8002F940 00000000 */ nop -/* 030544 8002F944 35E10003 */ ori $at, $t7, 3 -/* 030548 8002F948 38210002 */ xori $at, $at, 2 -/* 03054C 8002F94C 44C1F800 */ ctc1 $at, $31 -/* 030550 8002F950 00E2082A */ slt $at, $a3, $v0 -/* 030554 8002F954 460022A4 */ cvt.w.s $f10, $f4 -/* 030558 8002F958 44185000 */ mfc1 $t8, $f10 -/* 03055C 8002F95C 44CFF800 */ ctc1 $t7, $31 -/* 030560 8002F960 1420FF61 */ bnez $at, .L8002F6E8 -/* 030564 8002F964 A4D8FFFE */ sh $t8, -2($a2) -.L8002F968: -/* 030568 8002F968 2459FFFF */ addiu $t9, $v0, -1 -/* 03056C 8002F96C 2B210002 */ slti $at, $t9, 2 -/* 030570 8002F970 14200027 */ bnez $at, .L8002FA10 -/* 030574 8002F974 24070001 */ li $a3, 1 -/* 030578 8002F978 26440001 */ addiu $a0, $s2, 1 -/* 03057C 8002F97C 24880001 */ addiu $t0, $a0, 1 -/* 030580 8002F980 27A50092 */ addiu $a1, $sp, 0x92 -/* 030584 8002F984 27A60082 */ addiu $a2, $sp, 0x82 -.L8002F988: -/* 030588 8002F988 8FE30000 */ lw $v1, ($ra) -/* 03058C 8002F98C 8EAF0000 */ lw $t7, ($s5) -/* 030590 8002F990 00037100 */ sll $t6, $v1, 4 -/* 030594 8002F994 24780001 */ addiu $t8, $v1, 1 -/* 030598 8002F998 AFF80000 */ sw $t8, ($ra) -/* 03059C 8002F99C 01CF1021 */ addu $v0, $t6, $t7 -/* 0305A0 8002F9A0 A0560000 */ sb $s6, ($v0) -/* 0305A4 8002F9A4 A0440001 */ sb $a0, 1($v0) -/* 0305A8 8002F9A8 A0480002 */ sb $t0, 2($v0) -/* 0305AC 8002F9AC A0520003 */ sb $s2, 3($v0) -/* 0305B0 8002F9B0 84B90000 */ lh $t9, ($a1) -/* 0305B4 8002F9B4 24E70001 */ addiu $a3, $a3, 1 -/* 0305B8 8002F9B8 A4590004 */ sh $t9, 4($v0) -/* 0305BC 8002F9BC 84CE0000 */ lh $t6, ($a2) -/* 0305C0 8002F9C0 25080001 */ addiu $t0, $t0, 1 -/* 0305C4 8002F9C4 A44E0006 */ sh $t6, 6($v0) -/* 0305C8 8002F9C8 84AF0002 */ lh $t7, 2($a1) -/* 0305CC 8002F9CC 24840001 */ addiu $a0, $a0, 1 -/* 0305D0 8002F9D0 A44F0008 */ sh $t7, 8($v0) -/* 0305D4 8002F9D4 84D80002 */ lh $t8, 2($a2) -/* 0305D8 8002F9D8 24A50002 */ addiu $a1, $a1, 2 -/* 0305DC 8002F9DC A458000A */ sh $t8, 0xa($v0) -/* 0305E0 8002F9E0 87B90090 */ lh $t9, 0x90($sp) -/* 0305E4 8002F9E4 24C60002 */ addiu $a2, $a2, 2 -/* 0305E8 8002F9E8 A459000C */ sh $t9, 0xc($v0) -/* 0305EC 8002F9EC 87AE0080 */ lh $t6, 0x80($sp) -/* 0305F0 8002F9F0 00000000 */ nop -/* 0305F4 8002F9F4 A44E000E */ sh $t6, 0xe($v0) -/* 0305F8 8002F9F8 91A20000 */ lbu $v0, ($t5) -/* 0305FC 8002F9FC 00000000 */ nop -/* 030600 8002FA00 244FFFFF */ addiu $t7, $v0, -1 -/* 030604 8002FA04 00EF082A */ slt $at, $a3, $t7 -/* 030608 8002FA08 1420FFDF */ bnez $at, .L8002F988 -/* 03060C 8002FA0C 00000000 */ nop -.L8002FA10: -/* 030610 8002FA10 8FA300AC */ lw $v1, 0xac($sp) -/* 030614 8002FA14 3C188012 */ lui $t8, %hi(D_8011C230) # $t8, 0x8012 -/* 030618 8002FA18 8F18C230 */ lw $t8, %lo(D_8011C230)($t8) -/* 03061C 8002FA1C 24630001 */ addiu $v1, $v1, 1 -/* 030620 8002FA20 0078082A */ slt $at, $v1, $t8 -/* 030624 8002FA24 AFA300AC */ sw $v1, 0xac($sp) -/* 030628 8002FA28 25AD000C */ addiu $t5, $t5, 0xc -/* 03062C 8002FA2C 1420FF04 */ bnez $at, .L8002F640 -/* 030630 8002FA30 02429021 */ addu $s2, $s2, $v0 -.L8002FA34: -/* 030634 8002FA34 8FBF003C */ lw $ra, 0x3c($sp) -/* 030638 8002FA38 8FB00018 */ lw $s0, 0x18($sp) -/* 03063C 8002FA3C 8FB1001C */ lw $s1, 0x1c($sp) -/* 030640 8002FA40 8FB20020 */ lw $s2, 0x20($sp) -/* 030644 8002FA44 8FB30024 */ lw $s3, 0x24($sp) -/* 030648 8002FA48 8FB40028 */ lw $s4, 0x28($sp) -/* 03064C 8002FA4C 8FB5002C */ lw $s5, 0x2c($sp) -/* 030650 8002FA50 8FB60030 */ lw $s6, 0x30($sp) -/* 030654 8002FA54 8FB70034 */ lw $s7, 0x34($sp) -/* 030658 8002FA58 8FBE0038 */ lw $fp, 0x38($sp) -/* 03065C 8002FA5C 03E00008 */ jr $ra -/* 030660 8002FA60 27BD00B0 */ addiu $sp, $sp, 0xb0 - +.late_rodata +glabel D_800E5F54 +.float 1.4142 +glabel D_800E5F58 +.float 0.005 + +.text +glabel func_8002F440 +/* 030040 8002F440 27BDFF50 */ addiu $sp, $sp, -0xb0 +/* 030044 8002F444 3C0C8012 */ lui $t4, %hi(D_8011D0C4) # $t4, 0x8012 +/* 030048 8002F448 258CD0C4 */ addiu $t4, %lo(D_8011D0C4) # addiu $t4, $t4, -0x2f3c +/* 03004C 8002F44C 8D8E0000 */ lw $t6, ($t4) +/* 030050 8002F450 AFBF003C */ sw $ra, 0x3c($sp) +/* 030054 8002F454 AFBE0038 */ sw $fp, 0x38($sp) +/* 030058 8002F458 AFB70034 */ sw $s7, 0x34($sp) +/* 03005C 8002F45C AFB60030 */ sw $s6, 0x30($sp) +/* 030060 8002F460 AFB5002C */ sw $s5, 0x2c($sp) +/* 030064 8002F464 AFB40028 */ sw $s4, 0x28($sp) +/* 030068 8002F468 AFB30024 */ sw $s3, 0x24($sp) +/* 03006C 8002F46C AFB20020 */ sw $s2, 0x20($sp) +/* 030070 8002F470 AFB1001C */ sw $s1, 0x1c($sp) +/* 030074 8002F474 AFB00018 */ sw $s0, 0x18($sp) +/* 030078 8002F478 85C40000 */ lh $a0, ($t6) +/* 03007C 8002F47C 0C01C1F1 */ jal sins_f +/* 030080 8002F480 241700FF */ li $s7, 255 +/* 030084 8002F484 3C0C8012 */ lui $t4, %hi(D_8011D0C4) # $t4, 0x8012 +/* 030088 8002F488 258CD0C4 */ addiu $t4, %lo(D_8011D0C4) # addiu $t4, $t4, -0x2f3c +/* 03008C 8002F48C 8D8F0000 */ lw $t7, ($t4) +/* 030090 8002F490 00000000 */ nop +/* 030094 8002F494 85E40000 */ lh $a0, ($t7) +/* 030098 8002F498 0C01C1FE */ jal coss_f +/* 03009C 8002F49C E7A00074 */ swc1 $f0, 0x74($sp) +/* 0300A0 8002F4A0 3C188012 */ lui $t8, %hi(D_8011D0C0) # $t8, 0x8012 +/* 0300A4 8002F4A4 8F18D0C0 */ lw $t8, %lo(D_8011D0C0)($t8) +/* 0300A8 8002F4A8 3C018012 */ lui $at, %hi(D_8011D0DC) # $at, 0x8012 +/* 0300AC 8002F4AC 93190000 */ lbu $t9, ($t8) +/* 0300B0 8002F4B0 C426D0DC */ lwc1 $f6, %lo(D_8011D0DC)($at) +/* 0300B4 8002F4B4 00197100 */ sll $t6, $t9, 4 +/* 0300B8 8002F4B8 448E2000 */ mtc1 $t6, $f4 +/* 0300BC 8002F4BC 3C01800E */ lui $at, %hi(D_800E5F54) # $at, 0x800e +/* 0300C0 8002F4C0 468024A0 */ cvt.s.w $f18, $f4 +/* 0300C4 8002F4C4 C4285F54 */ lwc1 $f8, %lo(D_800E5F54)($at) +/* 0300C8 8002F4C8 3C018012 */ lui $at, %hi(D_8011D0F0) # $at, 0x8012 +/* 0300CC 8002F4CC 46069383 */ div.s $f14, $f18, $f6 +/* 0300D0 8002F4D0 C42CD0F0 */ lwc1 $f12, %lo(D_8011D0F0)($at) +/* 0300D4 8002F4D4 44805000 */ mtc1 $zero, $f10 +/* 0300D8 8002F4D8 3C0C8012 */ lui $t4, %hi(D_8011D0C4) # $t4, 0x8012 +/* 0300DC 8002F4DC 460C503C */ c.lt.s $f10, $f12 +/* 0300E0 8002F4E0 C7B00074 */ lwc1 $f16, 0x74($sp) +/* 0300E4 8002F4E4 3C0D8012 */ lui $t5, %hi(D_8011C238) # $t5, 0x8012 +/* 0300E8 8002F4E8 3C1E8012 */ lui $fp, %hi(D_8011D364) # $fp, 0x8012 +/* 0300EC 8002F4EC 258CD0C4 */ addiu $t4, %lo(D_8011D0C4) # addiu $t4, $t4, -0x2f3c +/* 0300F0 8002F4F0 3C188012 */ lui $t8, %hi(D_8011D0D0) # $t8, 0x8012 +/* 0300F4 8002F4F4 27DED364 */ addiu $fp, %lo(D_8011D364) # addiu $fp, $fp, -0x2c9c +/* 0300F8 8002F4F8 25ADC238 */ addiu $t5, %lo(D_8011C238) # addiu $t5, $t5, -0x3dc8 +/* 0300FC 8002F4FC 46087382 */ mul.s $f14, $f14, $f8 +/* 030100 8002F500 4500002E */ bc1f .L8002F5BC +/* 030104 8002F504 24160040 */ li $s6, 64 +/* 030108 8002F508 8718D0D0 */ lh $t8, %lo(D_8011D0D0)($t8) +/* 03010C 8002F50C 8D8F0000 */ lw $t7, ($t4) +/* 030110 8002F510 44983000 */ mtc1 $t8, $f6 +/* 030114 8002F514 C5E40010 */ lwc1 $f4, 0x10($t7) +/* 030118 8002F518 46803220 */ cvt.s.w $f8, $f6 +/* 03011C 8002F51C 3C01437F */ li $at, 0x437F0000 # 255.000000 +/* 030120 8002F520 46082081 */ sub.s $f2, $f4, $f8 +/* 030124 8002F524 4602603C */ c.lt.s $f12, $f2 +/* 030128 8002F528 00000000 */ nop +/* 03012C 8002F52C 45000015 */ bc1f .L8002F584 +/* 030130 8002F530 00000000 */ nop +/* 030134 8002F534 44815000 */ mtc1 $at, $f10 +/* 030138 8002F538 460C1181 */ sub.s $f6, $f2, $f12 +/* 03013C 8002F53C 3C018012 */ lui $at, %hi(D_8011D0F4) # $at, 0x8012 +/* 030140 8002F540 46065102 */ mul.s $f4, $f10, $f6 +/* 030144 8002F544 C428D0F4 */ lwc1 $f8, %lo(D_8011D0F4)($at) +/* 030148 8002F548 240F00FF */ li $t7, 255 +/* 03014C 8002F54C 46082283 */ div.s $f10, $f4, $f8 +/* 030150 8002F550 4459F800 */ cfc1 $t9, $31 +/* 030154 8002F554 00000000 */ nop +/* 030158 8002F558 37210003 */ ori $at, $t9, 3 +/* 03015C 8002F55C 38210002 */ xori $at, $at, 2 +/* 030160 8002F560 44C1F800 */ ctc1 $at, $31 +/* 030164 8002F564 00000000 */ nop +/* 030168 8002F568 460051A4 */ cvt.w.s $f6, $f10 +/* 03016C 8002F56C 440E3000 */ mfc1 $t6, $f6 +/* 030170 8002F570 44D9F800 */ ctc1 $t9, $31 +/* 030174 8002F574 01EEB823 */ subu $s7, $t7, $t6 +/* 030178 8002F578 06E10002 */ bgez $s7, .L8002F584 +/* 03017C 8002F57C 00000000 */ nop +/* 030180 8002F580 0000B825 */ move $s7, $zero +.L8002F584: +/* 030184 8002F584 44802000 */ mtc1 $zero, $f4 +/* 030188 8002F588 3C013F80 */ li $at, 0x3F800000 # 1.000000 +/* 03018C 8002F58C 4602203C */ c.lt.s $f4, $f2 +/* 030190 8002F590 00000000 */ nop +/* 030194 8002F594 45000009 */ bc1f .L8002F5BC +/* 030198 8002F598 00000000 */ nop +/* 03019C 8002F59C 44814000 */ mtc1 $at, $f8 +/* 0301A0 8002F5A0 3C01800E */ lui $at, %hi(D_800E5F58) # $at, 0x800e +/* 0301A4 8002F5A4 C42A5F58 */ lwc1 $f10, %lo(D_800E5F58)($at) +/* 0301A8 8002F5A8 00000000 */ nop +/* 0301AC 8002F5AC 46025182 */ mul.s $f6, $f10, $f2 +/* 0301B0 8002F5B0 46064100 */ add.s $f4, $f8, $f6 +/* 0301B4 8002F5B4 46047382 */ mul.s $f14, $f14, $f4 +/* 0301B8 8002F5B8 00000000 */ nop +.L8002F5BC: +/* 0301BC 8002F5BC 44975000 */ mtc1 $s7, $f10 +/* 0301C0 8002F5C0 3C018012 */ lui $at, %hi(gShadowOpacity) # $at, 0x8012 +/* 0301C4 8002F5C4 46805220 */ cvt.s.w $f8, $f10 +/* 0301C8 8002F5C8 C426D0D4 */ lwc1 $f6, %lo(gShadowOpacity)($at) +/* 0301CC 8002F5CC 3C198012 */ lui $t9, %hi(D_8011C230) # $t9, 0x8012 +/* 0301D0 8002F5D0 46064102 */ mul.s $f4, $f8, $f6 +/* 0301D4 8002F5D4 8F39C230 */ lw $t9, %lo(D_8011C230)($t9) +/* 0301D8 8002F5D8 3C158012 */ lui $s5, %hi(gCurrentShadowTris) # $s5, 0x8012 +/* 0301DC 8002F5DC 3C148012 */ lui $s4, %hi(gCurrentShadowVerts) # $s4, 0x8012 +/* 0301E0 8002F5E0 4458F800 */ cfc1 $t8, $31 +/* 0301E4 8002F5E4 24120019 */ li $s2, 25 +/* 0301E8 8002F5E8 37010003 */ ori $at, $t8, 3 +/* 0301EC 8002F5EC 38210002 */ xori $at, $at, 2 +/* 0301F0 8002F5F0 44C1F800 */ ctc1 $at, $31 +/* 0301F4 8002F5F4 2694D348 */ addiu $s4, %lo(gCurrentShadowVerts) # addiu $s4, $s4, -0x2cb8 +/* 0301F8 8002F5F8 460022A4 */ cvt.w.s $f10, $f4 +/* 0301FC 8002F5FC 26B5D330 */ addiu $s5, %lo(gCurrentShadowTris) # addiu $s5, $s5, -0x2cd0 +/* 030200 8002F600 44175000 */ mfc1 $s7, $f10 +/* 030204 8002F604 44D8F800 */ ctc1 $t8, $31 +/* 030208 8002F608 1B20010A */ blez $t9, .L8002FA34 +/* 03020C 8002F60C AFA000AC */ sw $zero, 0xac($sp) +/* 030210 8002F610 3C118012 */ lui $s1, %hi(D_8011D0C8) # $s1, 0x8012 +/* 030214 8002F614 3C108012 */ lui $s0, %hi(D_8011D36C) # $s0, 0x8012 +/* 030218 8002F618 3C1F8012 */ lui $ra, %hi(D_8011D368) # $ra, 0x8012 +/* 03021C 8002F61C 3C0A8012 */ lui $t2, %hi(D_8011B120) # $t2, 0x8012 +/* 030220 8002F620 3C098012 */ lui $t1, %hi(D_8011B330) # $t1, 0x8012 +/* 030224 8002F624 2529B330 */ addiu $t1, %lo(D_8011B330) # addiu $t1, $t1, -0x4cd0 +/* 030228 8002F628 254AB120 */ addiu $t2, %lo(D_8011B120) # addiu $t2, $t2, -0x4ee0 +/* 03022C 8002F62C 27FFD368 */ addiu $ra, %lo(D_8011D368) # addiu $ra, $ra, -0x2c98 +/* 030230 8002F630 2610D36C */ addiu $s0, %lo(D_8011D36C) # addiu $s0, $s0, -0x2c94 +/* 030234 8002F634 2631D0C8 */ addiu $s1, %lo(D_8011D0C8) # addiu $s1, $s1, -0x2f38 +/* 030238 8002F638 2413000A */ li $s3, 10 +/* 03023C 8002F63C 240B00FF */ li $t3, 255 +.L8002F640: +/* 030240 8002F640 91A20000 */ lbu $v0, ($t5) +/* 030244 8002F644 3C038012 */ lui $v1, %hi(gCurrentShadowTexture) # $v1, 0x8012 +/* 030248 8002F648 00527821 */ addu $t7, $v0, $s2 +/* 03024C 8002F64C 29E10018 */ slti $at, $t7, 0x18 +/* 030250 8002F650 14200019 */ bnez $at, .L8002F6B8 +/* 030254 8002F654 2463D360 */ addiu $v1, %lo(gCurrentShadowTexture) # addiu $v1, $v1, -0x2ca0 +/* 030258 8002F658 8FD90000 */ lw $t9, ($fp) +/* 03025C 8002F65C 8C780000 */ lw $t8, ($v1) +/* 030260 8002F660 3C0E8012 */ lui $t6, %hi(D_8011D0C0) # $t6, 0x8012 +/* 030264 8002F664 8DCED0C0 */ lw $t6, %lo(D_8011D0C0)($t6) +/* 030268 8002F668 001978C0 */ sll $t7, $t9, 3 +/* 03026C 8002F66C 030FC821 */ addu $t9, $t8, $t7 +/* 030270 8002F670 AF2E0000 */ sw $t6, ($t9) +/* 030274 8002F674 8FCE0000 */ lw $t6, ($fp) +/* 030278 8002F678 8C6F0000 */ lw $t7, ($v1) +/* 03027C 8002F67C 8FF80000 */ lw $t8, ($ra) +/* 030280 8002F680 000EC8C0 */ sll $t9, $t6, 3 +/* 030284 8002F684 01F97021 */ addu $t6, $t7, $t9 +/* 030288 8002F688 A5D80004 */ sh $t8, 4($t6) +/* 03028C 8002F68C 8FD80000 */ lw $t8, ($fp) +/* 030290 8002F690 8C790000 */ lw $t9, ($v1) +/* 030294 8002F694 8E0F0000 */ lw $t7, ($s0) +/* 030298 8002F698 001870C0 */ sll $t6, $t8, 3 +/* 03029C 8002F69C 032EC021 */ addu $t8, $t9, $t6 +/* 0302A0 8002F6A0 A70F0006 */ sh $t7, 6($t8) +/* 0302A4 8002F6A4 8FD90000 */ lw $t9, ($fp) +/* 0302A8 8002F6A8 91A20000 */ lbu $v0, ($t5) +/* 0302AC 8002F6AC 272E0001 */ addiu $t6, $t9, 1 +/* 0302B0 8002F6B0 AFCE0000 */ sw $t6, ($fp) +/* 0302B4 8002F6B4 00009025 */ move $s2, $zero +.L8002F6B8: +/* 0302B8 8002F6B8 91A80001 */ lbu $t0, 1($t5) +/* 0302BC 8002F6BC 184000AA */ blez $v0, .L8002F968 +/* 0302C0 8002F6C0 00003825 */ move $a3, $zero +/* 0302C4 8002F6C4 8FAF00AC */ lw $t7, 0xac($sp) +/* 0302C8 8002F6C8 3C198012 */ lui $t9, %hi(D_8011C238) # $t9, 0x8012 +/* 0302CC 8002F6CC 000FC080 */ sll $t8, $t7, 2 +/* 0302D0 8002F6D0 030FC023 */ subu $t8, $t8, $t7 +/* 0302D4 8002F6D4 0018C080 */ sll $t8, $t8, 2 +/* 0302D8 8002F6D8 2739C238 */ addiu $t9, %lo(D_8011C238) # addiu $t9, $t9, -0x3dc8 +/* 0302DC 8002F6DC 03191821 */ addu $v1, $t8, $t9 +/* 0302E0 8002F6E0 27A50090 */ addiu $a1, $sp, 0x90 +/* 0302E4 8002F6E4 27A60080 */ addiu $a2, $sp, 0x80 +.L8002F6E8: +/* 0302E8 8002F6E8 8E040000 */ lw $a0, ($s0) +/* 0302EC 8002F6EC 8E8F0000 */ lw $t7, ($s4) +/* 0302F0 8002F6F0 00930019 */ multu $a0, $s3 +/* 0302F4 8002F6F4 31190001 */ andi $t9, $t0, 1 +/* 0302F8 8002F6F8 24980001 */ addiu $t8, $a0, 1 +/* 0302FC 8002F6FC AE180000 */ sw $t8, ($s0) +/* 030300 8002F700 00007012 */ mflo $t6 +/* 030304 8002F704 01CF1021 */ addu $v0, $t6, $t7 +/* 030308 8002F708 13200037 */ beqz $t9, .L8002F7E8 +/* 03030C 8002F70C 00000000 */ nop +/* 030310 8002F710 906E0002 */ lbu $t6, 2($v1) +/* 030314 8002F714 4459F800 */ cfc1 $t9, $31 +/* 030318 8002F718 000E7940 */ sll $t7, $t6, 5 +/* 03031C 8002F71C 37210003 */ ori $at, $t9, 3 +/* 030320 8002F720 38210002 */ xori $at, $at, 2 +/* 030324 8002F724 012FC021 */ addu $t8, $t1, $t7 +/* 030328 8002F728 C7080000 */ lwc1 $f8, ($t8) +/* 03032C 8002F72C 44C1F800 */ ctc1 $at, $31 +/* 030330 8002F730 00000000 */ nop +/* 030334 8002F734 460041A4 */ cvt.w.s $f6, $f8 +/* 030338 8002F738 440E3000 */ mfc1 $t6, $f6 +/* 03033C 8002F73C 44D9F800 */ ctc1 $t9, $31 +/* 030340 8002F740 A44E0000 */ sh $t6, ($v0) +/* 030344 8002F744 906F0002 */ lbu $t7, 2($v1) +/* 030348 8002F748 8D990000 */ lw $t9, ($t4) +/* 03034C 8002F74C 000FC140 */ sll $t8, $t7, 5 +/* 030350 8002F750 01382021 */ addu $a0, $t1, $t8 +/* 030354 8002F754 C4840000 */ lwc1 $f4, ($a0) +/* 030358 8002F758 C72A000C */ lwc1 $f10, 0xc($t9) +/* 03035C 8002F75C C4880004 */ lwc1 $f8, 4($a0) +/* 030360 8002F760 C6260000 */ lwc1 $f6, ($s1) +/* 030364 8002F764 460A2081 */ sub.s $f2, $f4, $f10 +/* 030368 8002F768 46064100 */ add.s $f4, $f8, $f6 +/* 03036C 8002F76C 444EF800 */ cfc1 $t6, $31 +/* 030370 8002F770 00000000 */ nop +/* 030374 8002F774 35C10003 */ ori $at, $t6, 3 +/* 030378 8002F778 38210002 */ xori $at, $at, 2 +/* 03037C 8002F77C 44C1F800 */ ctc1 $at, $31 +/* 030380 8002F780 00000000 */ nop +/* 030384 8002F784 460022A4 */ cvt.w.s $f10, $f4 +/* 030388 8002F788 440F5000 */ mfc1 $t7, $f10 +/* 03038C 8002F78C 44CEF800 */ ctc1 $t6, $31 +/* 030390 8002F790 A44F0002 */ sh $t7, 2($v0) +/* 030394 8002F794 90780002 */ lbu $t8, 2($v1) +/* 030398 8002F798 444FF800 */ cfc1 $t7, $31 +/* 03039C 8002F79C 0018C940 */ sll $t9, $t8, 5 +/* 0303A0 8002F7A0 35E10003 */ ori $at, $t7, 3 +/* 0303A4 8002F7A4 38210002 */ xori $at, $at, 2 +/* 0303A8 8002F7A8 01397021 */ addu $t6, $t1, $t9 +/* 0303AC 8002F7AC C5C80008 */ lwc1 $f8, 8($t6) +/* 0303B0 8002F7B0 44C1F800 */ ctc1 $at, $31 +/* 0303B4 8002F7B4 00000000 */ nop +/* 0303B8 8002F7B8 460041A4 */ cvt.w.s $f6, $f8 +/* 0303BC 8002F7BC 44183000 */ mfc1 $t8, $f6 +/* 0303C0 8002F7C0 44CFF800 */ ctc1 $t7, $31 +/* 0303C4 8002F7C4 A4580004 */ sh $t8, 4($v0) +/* 0303C8 8002F7C8 90790002 */ lbu $t9, 2($v1) +/* 0303CC 8002F7CC 8D980000 */ lw $t8, ($t4) +/* 0303D0 8002F7D0 00197140 */ sll $t6, $t9, 5 +/* 0303D4 8002F7D4 012E7821 */ addu $t7, $t1, $t6 +/* 0303D8 8002F7D8 C5E40008 */ lwc1 $f4, 8($t7) +/* 0303DC 8002F7DC C70A0014 */ lwc1 $f10, 0x14($t8) +/* 0303E0 8002F7E0 10000037 */ b .L8002F8C0 +/* 0303E4 8002F7E4 460A2301 */ sub.s $f12, $f4, $f10 +.L8002F7E8: +/* 0303E8 8002F7E8 90790002 */ lbu $t9, 2($v1) +/* 0303EC 8002F7EC 4458F800 */ cfc1 $t8, $31 +/* 0303F0 8002F7F0 00197100 */ sll $t6, $t9, 4 +/* 0303F4 8002F7F4 37010003 */ ori $at, $t8, 3 +/* 0303F8 8002F7F8 38210002 */ xori $at, $at, 2 +/* 0303FC 8002F7FC 014E7821 */ addu $t7, $t2, $t6 +/* 030400 8002F800 C5E80000 */ lwc1 $f8, ($t7) +/* 030404 8002F804 44C1F800 */ ctc1 $at, $31 +/* 030408 8002F808 00000000 */ nop +/* 03040C 8002F80C 460041A4 */ cvt.w.s $f6, $f8 +/* 030410 8002F810 44193000 */ mfc1 $t9, $f6 +/* 030414 8002F814 44D8F800 */ ctc1 $t8, $31 +/* 030418 8002F818 A4590000 */ sh $t9, ($v0) +/* 03041C 8002F81C 906E0002 */ lbu $t6, 2($v1) +/* 030420 8002F820 8D980000 */ lw $t8, ($t4) +/* 030424 8002F824 000E7900 */ sll $t7, $t6, 4 +/* 030428 8002F828 014F2021 */ addu $a0, $t2, $t7 +/* 03042C 8002F82C C4840000 */ lwc1 $f4, ($a0) +/* 030430 8002F830 C70A000C */ lwc1 $f10, 0xc($t8) +/* 030434 8002F834 C4880004 */ lwc1 $f8, 4($a0) +/* 030438 8002F838 C6260000 */ lwc1 $f6, ($s1) +/* 03043C 8002F83C 460A2081 */ sub.s $f2, $f4, $f10 +/* 030440 8002F840 46064100 */ add.s $f4, $f8, $f6 +/* 030444 8002F844 4459F800 */ cfc1 $t9, $31 +/* 030448 8002F848 00000000 */ nop +/* 03044C 8002F84C 37210003 */ ori $at, $t9, 3 +/* 030450 8002F850 38210002 */ xori $at, $at, 2 +/* 030454 8002F854 44C1F800 */ ctc1 $at, $31 +/* 030458 8002F858 00000000 */ nop +/* 03045C 8002F85C 460022A4 */ cvt.w.s $f10, $f4 +/* 030460 8002F860 440E5000 */ mfc1 $t6, $f10 +/* 030464 8002F864 44D9F800 */ ctc1 $t9, $31 +/* 030468 8002F868 A44E0002 */ sh $t6, 2($v0) +/* 03046C 8002F86C 906F0002 */ lbu $t7, 2($v1) +/* 030470 8002F870 444EF800 */ cfc1 $t6, $31 +/* 030474 8002F874 000FC100 */ sll $t8, $t7, 4 +/* 030478 8002F878 35C10003 */ ori $at, $t6, 3 +/* 03047C 8002F87C 38210002 */ xori $at, $at, 2 +/* 030480 8002F880 0158C821 */ addu $t9, $t2, $t8 +/* 030484 8002F884 C7280008 */ lwc1 $f8, 8($t9) +/* 030488 8002F888 44C1F800 */ ctc1 $at, $31 +/* 03048C 8002F88C 00000000 */ nop +/* 030490 8002F890 460041A4 */ cvt.w.s $f6, $f8 +/* 030494 8002F894 440F3000 */ mfc1 $t7, $f6 +/* 030498 8002F898 44CEF800 */ ctc1 $t6, $31 +/* 03049C 8002F89C A44F0004 */ sh $t7, 4($v0) +/* 0304A0 8002F8A0 90780002 */ lbu $t8, 2($v1) +/* 0304A4 8002F8A4 8D8F0000 */ lw $t7, ($t4) +/* 0304A8 8002F8A8 0018C900 */ sll $t9, $t8, 4 +/* 0304AC 8002F8AC 01597021 */ addu $t6, $t2, $t9 +/* 0304B0 8002F8B0 C5C40008 */ lwc1 $f4, 8($t6) +/* 0304B4 8002F8B4 C5EA0014 */ lwc1 $f10, 0x14($t7) +/* 0304B8 8002F8B8 00000000 */ nop +/* 0304BC 8002F8BC 460A2301 */ sub.s $f12, $f4, $f10 +.L8002F8C0: +/* 0304C0 8002F8C0 46001202 */ mul.s $f8, $f2, $f0 +/* 0304C4 8002F8C4 0008C043 */ sra $t8, $t0, 1 +/* 0304C8 8002F8C8 A04B0006 */ sb $t3, 6($v0) +/* 0304CC 8002F8CC A04B0007 */ sb $t3, 7($v0) +/* 0304D0 8002F8D0 46106182 */ mul.s $f6, $f12, $f16 +/* 0304D4 8002F8D4 A04B0008 */ sb $t3, 8($v0) +/* 0304D8 8002F8D8 A0570009 */ sb $s7, 9($v0) +/* 0304DC 8002F8DC 91A20000 */ lbu $v0, ($t5) +/* 0304E0 8002F8E0 46064101 */ sub.s $f4, $f8, $f6 +/* 0304E4 8002F8E4 03004025 */ move $t0, $t8 +/* 0304E8 8002F8E8 460E2282 */ mul.s $f10, $f4, $f14 +/* 0304EC 8002F8EC 24E70001 */ addiu $a3, $a3, 1 +/* 0304F0 8002F8F0 24630001 */ addiu $v1, $v1, 1 +/* 0304F4 8002F8F4 24A50002 */ addiu $a1, $a1, 2 +/* 0304F8 8002F8F8 46125200 */ add.s $f8, $f10, $f18 +/* 0304FC 8002F8FC 24C60002 */ addiu $a2, $a2, 2 +/* 030500 8002F900 4459F800 */ cfc1 $t9, $31 +/* 030504 8002F904 00000000 */ nop +/* 030508 8002F908 37210003 */ ori $at, $t9, 3 +/* 03050C 8002F90C 38210002 */ xori $at, $at, 2 +/* 030510 8002F910 44C1F800 */ ctc1 $at, $31 +/* 030514 8002F914 00000000 */ nop +/* 030518 8002F918 460041A4 */ cvt.w.s $f6, $f8 +/* 03051C 8002F91C 44D9F800 */ ctc1 $t9, $31 +/* 030520 8002F920 440E3000 */ mfc1 $t6, $f6 +/* 030524 8002F924 46006102 */ mul.s $f4, $f12, $f0 +/* 030528 8002F928 A4AEFFFE */ sh $t6, -2($a1) +/* 03052C 8002F92C 46101282 */ mul.s $f10, $f2, $f16 +/* 030530 8002F930 460A2200 */ add.s $f8, $f4, $f10 +/* 030534 8002F934 460E4182 */ mul.s $f6, $f8, $f14 +/* 030538 8002F938 46123100 */ add.s $f4, $f6, $f18 +/* 03053C 8002F93C 444FF800 */ cfc1 $t7, $31 +/* 030540 8002F940 00000000 */ nop +/* 030544 8002F944 35E10003 */ ori $at, $t7, 3 +/* 030548 8002F948 38210002 */ xori $at, $at, 2 +/* 03054C 8002F94C 44C1F800 */ ctc1 $at, $31 +/* 030550 8002F950 00E2082A */ slt $at, $a3, $v0 +/* 030554 8002F954 460022A4 */ cvt.w.s $f10, $f4 +/* 030558 8002F958 44185000 */ mfc1 $t8, $f10 +/* 03055C 8002F95C 44CFF800 */ ctc1 $t7, $31 +/* 030560 8002F960 1420FF61 */ bnez $at, .L8002F6E8 +/* 030564 8002F964 A4D8FFFE */ sh $t8, -2($a2) +.L8002F968: +/* 030568 8002F968 2459FFFF */ addiu $t9, $v0, -1 +/* 03056C 8002F96C 2B210002 */ slti $at, $t9, 2 +/* 030570 8002F970 14200027 */ bnez $at, .L8002FA10 +/* 030574 8002F974 24070001 */ li $a3, 1 +/* 030578 8002F978 26440001 */ addiu $a0, $s2, 1 +/* 03057C 8002F97C 24880001 */ addiu $t0, $a0, 1 +/* 030580 8002F980 27A50092 */ addiu $a1, $sp, 0x92 +/* 030584 8002F984 27A60082 */ addiu $a2, $sp, 0x82 +.L8002F988: +/* 030588 8002F988 8FE30000 */ lw $v1, ($ra) +/* 03058C 8002F98C 8EAF0000 */ lw $t7, ($s5) +/* 030590 8002F990 00037100 */ sll $t6, $v1, 4 +/* 030594 8002F994 24780001 */ addiu $t8, $v1, 1 +/* 030598 8002F998 AFF80000 */ sw $t8, ($ra) +/* 03059C 8002F99C 01CF1021 */ addu $v0, $t6, $t7 +/* 0305A0 8002F9A0 A0560000 */ sb $s6, ($v0) +/* 0305A4 8002F9A4 A0440001 */ sb $a0, 1($v0) +/* 0305A8 8002F9A8 A0480002 */ sb $t0, 2($v0) +/* 0305AC 8002F9AC A0520003 */ sb $s2, 3($v0) +/* 0305B0 8002F9B0 84B90000 */ lh $t9, ($a1) +/* 0305B4 8002F9B4 24E70001 */ addiu $a3, $a3, 1 +/* 0305B8 8002F9B8 A4590004 */ sh $t9, 4($v0) +/* 0305BC 8002F9BC 84CE0000 */ lh $t6, ($a2) +/* 0305C0 8002F9C0 25080001 */ addiu $t0, $t0, 1 +/* 0305C4 8002F9C4 A44E0006 */ sh $t6, 6($v0) +/* 0305C8 8002F9C8 84AF0002 */ lh $t7, 2($a1) +/* 0305CC 8002F9CC 24840001 */ addiu $a0, $a0, 1 +/* 0305D0 8002F9D0 A44F0008 */ sh $t7, 8($v0) +/* 0305D4 8002F9D4 84D80002 */ lh $t8, 2($a2) +/* 0305D8 8002F9D8 24A50002 */ addiu $a1, $a1, 2 +/* 0305DC 8002F9DC A458000A */ sh $t8, 0xa($v0) +/* 0305E0 8002F9E0 87B90090 */ lh $t9, 0x90($sp) +/* 0305E4 8002F9E4 24C60002 */ addiu $a2, $a2, 2 +/* 0305E8 8002F9E8 A459000C */ sh $t9, 0xc($v0) +/* 0305EC 8002F9EC 87AE0080 */ lh $t6, 0x80($sp) +/* 0305F0 8002F9F0 00000000 */ nop +/* 0305F4 8002F9F4 A44E000E */ sh $t6, 0xe($v0) +/* 0305F8 8002F9F8 91A20000 */ lbu $v0, ($t5) +/* 0305FC 8002F9FC 00000000 */ nop +/* 030600 8002FA00 244FFFFF */ addiu $t7, $v0, -1 +/* 030604 8002FA04 00EF082A */ slt $at, $a3, $t7 +/* 030608 8002FA08 1420FFDF */ bnez $at, .L8002F988 +/* 03060C 8002FA0C 00000000 */ nop +.L8002FA10: +/* 030610 8002FA10 8FA300AC */ lw $v1, 0xac($sp) +/* 030614 8002FA14 3C188012 */ lui $t8, %hi(D_8011C230) # $t8, 0x8012 +/* 030618 8002FA18 8F18C230 */ lw $t8, %lo(D_8011C230)($t8) +/* 03061C 8002FA1C 24630001 */ addiu $v1, $v1, 1 +/* 030620 8002FA20 0078082A */ slt $at, $v1, $t8 +/* 030624 8002FA24 AFA300AC */ sw $v1, 0xac($sp) +/* 030628 8002FA28 25AD000C */ addiu $t5, $t5, 0xc +/* 03062C 8002FA2C 1420FF04 */ bnez $at, .L8002F640 +/* 030630 8002FA30 02429021 */ addu $s2, $s2, $v0 +.L8002FA34: +/* 030634 8002FA34 8FBF003C */ lw $ra, 0x3c($sp) +/* 030638 8002FA38 8FB00018 */ lw $s0, 0x18($sp) +/* 03063C 8002FA3C 8FB1001C */ lw $s1, 0x1c($sp) +/* 030640 8002FA40 8FB20020 */ lw $s2, 0x20($sp) +/* 030644 8002FA44 8FB30024 */ lw $s3, 0x24($sp) +/* 030648 8002FA48 8FB40028 */ lw $s4, 0x28($sp) +/* 03064C 8002FA4C 8FB5002C */ lw $s5, 0x2c($sp) +/* 030650 8002FA50 8FB60030 */ lw $s6, 0x30($sp) +/* 030654 8002FA54 8FB70034 */ lw $s7, 0x34($sp) +/* 030658 8002FA58 8FBE0038 */ lw $fp, 0x38($sp) +/* 03065C 8002FA5C 03E00008 */ jr $ra +/* 030660 8002FA60 27BD00B0 */ addiu $sp, $sp, 0xb0 + diff --git a/include/structs.h b/include/structs.h index eedfc0d0..a42ccfd8 100644 --- a/include/structs.h +++ b/include/structs.h @@ -209,7 +209,7 @@ typedef struct Racer { /* Unknown Size */ typedef struct Settings4C { u8 unk0; //courseId? - u8 unk1; // This value + 8 is cutsceneId index? gGameCurrentCutscene = D_80121250[D_80121250[1] + 8]; + u8 unk1; // This value + 8 is cutsceneId index? gGameCurrentCutscene = gLevelSettings[gLevelSettings[1] + 8]; s8 unk2; //mapId? u8 pad3[0xC]; u8 unkF; //entranceId? @@ -714,7 +714,7 @@ typedef struct ObjectHeader24 { } ObjectHeader24; typedef struct ObjectHeader { - /* 0x00 */ s32 unk0; + /* 0x00 */ s32 unk0; // The one use I've seen for this so far is water effect animation speed. /* 0x04 */ f32 shadowScale; /* 0x08 */ f32 unk8; /* 0x0C */ f32 scale; @@ -727,9 +727,9 @@ typedef struct ObjectHeader { /* 0x28 */ f32 shadeBrightness; /* 0x2C */ f32 shadeAmbient; /* 0x30 */ u16 unk30; - /* 0x32 */ s16 unk32; + /* 0x32 */ s16 shadowGroup; /* 0x34 */ s16 unk34; - /* 0x36 */ s16 unk36; + /* 0x36 */ s16 waterEffectGroup; /* 0x38 */ s16 unk38; /* 0x3A */ u8 unk3A; /* 0x3B */ u8 unk3B; @@ -809,8 +809,8 @@ typedef struct ObjectInteraction { typedef struct ShadowData { f32 scale; TextureHeader *texture; - s16 unk8; - s16 unkA; + s16 meshStart; + s16 meshEnd; s16 unkC; s16 unkE; } ShadowData; @@ -818,10 +818,10 @@ typedef struct ShadowData { typedef struct WaterEffect { f32 scale; TextureHeader *texture; - s16 unk8; - s16 unkA; - s16 unkC; - s16 unkE; + s16 meshStart; + s16 meshEnd; + s16 textureFrame; + s16 animationSpeed; s16 unk10; s16 unk12; } WaterEffect; diff --git a/src/game.c b/src/game.c index 0177c248..1307999e 100644 --- a/src/game.c +++ b/src/game.c @@ -471,7 +471,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl load_asset_to_address(ASSET_LEVEL_HEADERS, (u32) gCurrentLevelHeader, offset, size); } free_from_memory_pool(gTempAssetTable); - func_8006BFC8((s8 *) &gCurrentLevelHeader->unk20); + set_ai_level((s8 *) &gCurrentLevelHeader->unk20); func_8000CBC0(); gMapId = levelId; for (var_s0 = 0; var_s0 < 7; var_s0++) { @@ -519,7 +519,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl if (settings->worldId == WORLD_CENTRAL_AREA && var_s0 > 0 && gCurrentDefaultVehicle != -1) { vehicleId = gCurrentDefaultVehicle; } - func_8006DB20(vehicleId); + set_vehicle_id_for_menu(vehicleId); if (gCurrentLevelHeader->race_type == RACETYPE_HUBWORLD) { if (settings->worldId - 1 >= 0) { var_s0 = 8 << (settings->worldId + 31); @@ -565,14 +565,14 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl cutsceneId = CUTSCENE_ID_UNK_64; } func_8001E450(cutsceneId); - func_800249F0(gCurrentLevelHeader->geometry, gCurrentLevelHeader->skybox, numberOfPlayers, vehicleId, entranceId, gCurrentLevelHeader->collectables, gCurrentLevelHeader->unkBA); + init_track(gCurrentLevelHeader->geometry, gCurrentLevelHeader->skybox, numberOfPlayers, vehicleId, entranceId, gCurrentLevelHeader->collectables, gCurrentLevelHeader->unkBA); if (gCurrentLevelHeader->fogNear == 0 && gCurrentLevelHeader->fogFar == 0 && gCurrentLevelHeader->fogR == 0 && gCurrentLevelHeader->fogG == 0 && gCurrentLevelHeader->fogB == 0) { for (var_s0 = 0; var_s0 < 4; var_s0++) { reset_fog(var_s0); } } else { for (var_s0 = 0; var_s0 < 4; var_s0++) { - func_80030664(var_s0, gCurrentLevelHeader->fogNear, gCurrentLevelHeader->fogFar, (u8) gCurrentLevelHeader->fogR, gCurrentLevelHeader->fogG, gCurrentLevelHeader->fogB); + set_fog(var_s0, gCurrentLevelHeader->fogNear, gCurrentLevelHeader->fogFar, (u8) gCurrentLevelHeader->fogR, gCurrentLevelHeader->fogG, gCurrentLevelHeader->fogB); } } settings = get_settings(); @@ -700,42 +700,42 @@ void clear_audio_and_track(void) { } } -void func_8006BFC8(s8 *arg0) { +/** + * Set the skill level of the AI. + * Apply offsets based on game mode. +*/ +void set_ai_level(s8 *arg0) { s32 temp; UNUSED s32 temp2; s16 phi_v1; - s8 phi_s0; + s8 aiLevel; Settings *settings; - phi_s0 = 0; - if (!is_in_tracks_mode()) { + aiLevel = 0; + if (is_in_tracks_mode() == FALSE) { settings = get_settings(); temp = settings->courseFlagsPtr[settings->courseId]; if (temp & 2) { - phi_s0 = 1; + aiLevel = 1; } if (temp & 4) { - phi_s0 = 2; + aiLevel = 2; } } else { - phi_s0 = 3; + aiLevel = 3; } - - if (get_trophy_race_world_id() != 0) { - phi_s0 = 4; + if (get_trophy_race_world_id()) { + aiLevel = 4; } - if (is_in_adventure_two()) { - phi_s0 += 5; + aiLevel += 5; } - - phi_s0 = arg0[phi_s0]; - + aiLevel = arg0[aiLevel]; if (get_filtered_cheats() & CHEAT_ULTIMATE_AI) { - phi_s0 = 9; + aiLevel = 9; } - if (get_render_context() == DRAW_MENU) { - phi_s0 = 5; + if (get_game_mode() == GAMEMODE_MENU) { + aiLevel = 5; } gTempAssetTable = (s32 *) load_asset_section_from_rom(ASSET_UNKNOWN_0_TABLE); phi_v1 = 0; @@ -743,11 +743,11 @@ void func_8006BFC8(s8 *arg0) { phi_v1++; } phi_v1--; - if (phi_s0 >= phi_v1) { - phi_s0 = 0; + if (aiLevel >= phi_v1) { + aiLevel = 0; } - temp2 = gTempAssetTable[phi_s0]; - temp = gTempAssetTable[phi_s0 + 1] - temp2; + temp2 = gTempAssetTable[aiLevel]; + temp = gTempAssetTable[aiLevel + 1] - temp2; D_801211C0 = allocate_from_main_pool_safe(temp, COLOUR_TAG_YELLOW); load_asset_to_address(ASSET_UNKNOWN_0, (u32) D_801211C0, temp2, temp); free_from_memory_pool(gTempAssetTable); diff --git a/src/game.h b/src/game.h index c0c9e427..a7ed1eec 100644 --- a/src/game.h +++ b/src/game.h @@ -47,7 +47,7 @@ LevelHeader *get_current_level_header(void); u8 get_total_level_header_count(void); char *get_level_name(s32 levelId); void clear_audio_and_track(void); -void func_8006BFC8(s8 *arg0); +void set_ai_level(s8 *arg0); void frontCleanupMultiSelect(void); TempStruct5 *func_8006C18C(void); s8 func_8006C19C(void); diff --git a/src/game_ui.c b/src/game_ui.c index 0a4688fb..e45eeb13 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -409,7 +409,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } } if (arg3 != NULL && !(gHudLevelHeader->unkBC & 2)) { - if (get_render_context() != DRAW_MENU) { + if (get_game_mode() != GAMEMODE_MENU) { gHUDCurrDisplayList = *dList; gHUDCurrMatrix = *mtx; gHUDCurrVertex = *vertexList; @@ -1034,12 +1034,12 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { stopwatchTimer = normalise_time(36000); } gCurrentHud->unk444 = ((stopwatchTimer * 0x444) + 0x7FF8); - if (func_8000E0B0() <= 0) { + if (get_contpak_error() <= 0) { func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &gCurrentHud->unk440); } gCurrentHud->unk444 = ((((stopwatchTimer / 60) + 30) % 60) * 0x444); gCurrentHud->unk450 = gCurrentHud->unk350 + 28.0f; - if (func_8000E0B0() <= 0) { + if (get_contpak_error() <= 0) { func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &gCurrentHud->unk440); } obj68->unk20 = 0; @@ -1139,8 +1139,8 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { render_wrong_way_text(curRacer, updateRate); render_race_start(arg0, updateRate); render_speedometer(playerRacerObj, updateRate); - if (func_8000E0B0() > 0) { - switch (func_8000E0B0()) { + if (get_contpak_error() > 0) { + switch (get_contpak_error()) { case 1: SWMessage[0] = "CAN'T"; SWMessage[1] = "SAVE"; diff --git a/src/lights.c b/src/lights.c index 8de1b688..658a649d 100644 --- a/src/lights.c +++ b/src/lights.c @@ -59,9 +59,9 @@ void setup_lights(s32 count) { temp_v0 = (ObjectLight **) allocate_from_main_pool_safe(gMaxLights * (sizeof(s32 *) + sizeof(ObjectLight) + sizeof(unk800DC960) + sizeof(Vec3f)), COLOUR_TAG_MAGENTA); newCount = gMaxLights; gActiveLights = temp_v0; - D_800DC954 = newCount + (0, temp_v0); //fakematch - D_800DC960 = newCount + (0, D_800DC954); //fakematch - D_800DC964 = newCount + (0, D_800DC960); //fakematch + D_800DC954 = (ObjectLight *) (newCount + (0, temp_v0)); //fakematch + D_800DC960 = (unk800DC960 *) (newCount + (0, D_800DC954)); //fakematch + D_800DC964 = (Vec3f *) (newCount + (0, D_800DC960)); //fakematch for (i = 0; i < gMaxLights; i++) { gActiveLights[i] = &D_800DC954[i]; } diff --git a/src/menu.c b/src/menu.c index 1e3d9601..8d09a685 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1949,8 +1949,8 @@ void menu_init(u32 menuId) { case MENU_TROPHY_RACE_RANKINGS: menu_trophy_race_rankings_init(); break; - case MENU_UNKNOWN_23: - menu_23_init(); + case MENU_NEWGAME_CINEMATIC: + menu_cinematic_init(); break; case MENU_GHOST_DATA: menu_ghost_data_init(); @@ -2026,8 +2026,8 @@ s32 menu_loop(Gfx **currDisplayList, MatrixS **currHudMat, Vertex **currHudVerts case MENU_TROPHY_RACE_RANKINGS: ret = menu_trophy_race_rankings_loop(updateRate); break; - case MENU_UNKNOWN_23: - ret = menu_23_loop(updateRate); + case MENU_NEWGAME_CINEMATIC: + ret = menu_cinematic_loop(updateRate); break; case MENU_GHOST_DATA: ret = menu_ghost_data_loop(updateRate); @@ -2566,7 +2566,7 @@ s32 menu_logo_screen_loop(s32 updateRate) { set_text_colour(0xFF, 0xFF, 0xFF, 0xFF, opacity); draw_text(&sMenuCurrDisplayList, POS_CENTRED, yOffsetShadow, gRareCopyrightString, ALIGN_MIDDLE_CENTER); } - return 0; + return MENU_RESULT_CONTINUE; } /** @@ -2838,15 +2838,15 @@ s32 menu_title_screen_loop(s32 updateRate) { load_level_for_menu(ASSET_LEVEL_CHARACTERSELECT, -1, sp28); func_8008AEB4(0, NULL); menu_init(MENU_CHARACTER_SELECT); - return 0; + return MENU_RESULT_CONTINUE; } D_800DF460 = 0; load_level_for_menu(ASSET_LEVEL_OPTIONSBACKGROUND, -1, 0); menu_init(MENU_OPTIONS); - return 0; + return MENU_RESULT_CONTINUE; } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } /** @@ -3002,26 +3002,26 @@ s32 menu_options_loop(s32 updateRate) { if (D_800DF460 == 2) { unload_big_font_1(); menu_init(MENU_AUDIO_OPTIONS); - return 0; + return MENU_RESULT_CONTINUE; } if (D_800DF460 == 3) { unload_big_font_1(); menu_init(MENU_SAVE_OPTIONS); - return 0; + return MENU_RESULT_CONTINUE; } unload_big_font_1(); menu_init(MENU_MAGIC_CODES); - return 0; + return MENU_RESULT_CONTINUE; } if (gMenuDelay < -30) { // Change screen back to the title screen. func_80000B28(); unload_big_font_1(); menu_init(MENU_TITLE); - return 0; + return MENU_RESULT_CONTINUE; } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } /** @@ -3635,7 +3635,7 @@ s32 menu_save_options_loop(s32 updateRate) { } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } void func_80087EB8(void) { @@ -4645,7 +4645,7 @@ s32 menu_magic_codes_loop(s32 updateRate) { menu_init(MENU_MAGIC_CODES_LIST); } } - return 0; + return MENU_RESULT_CONTINUE; } /** @@ -4842,10 +4842,10 @@ s32 menu_magic_codes_list_loop(s32 updateRate) { if (gMenuDelay < -30) { func_8008AD1C(); menu_init(MENU_MAGIC_CODES); - return 0; + return MENU_RESULT_CONTINUE; } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } void func_8008AD1C(void) { @@ -5290,7 +5290,7 @@ s32 menu_character_select_loop(s32 updateRate) { } else { func_80000B28(); func_800828B8(); - func_8006E5BC(); + init_racer_headers(); menu_init(MENU_TRACK_SELECT); } } @@ -5303,7 +5303,7 @@ s32 menu_character_select_loop(s32 updateRate) { menu_init(MENU_TITLE); } } - return 0; + return MENU_RESULT_CONTINUE; } void func_8008BFE8(s32 arg0, s8 *arg1, s32 arg2, u16 menuPickSoundId, u16 menuPickFailedSoundId) { @@ -5424,7 +5424,7 @@ s32 menu_caution_loop(s32 updateRate) { if (gIgnorePlayerInputTime > 0) { gIgnorePlayerInputTime -= updateRate; } - return 0; + return MENU_RESULT_CONTINUE; } /** @@ -5540,7 +5540,7 @@ s32 menu_game_select_loop(s32 updateRate) { if (D_800DF460 == gMenuOptionCount) { func_80000B28(); gIsInTracksMode = TRUE; - func_8006E5BC(); + init_racer_headers(); load_level_for_menu((s32)SPECIAL_MAP_ID_NO_LEVEL, -1, 0); menu_init(MENU_TRACK_SELECT); } else { @@ -5550,7 +5550,7 @@ s32 menu_game_select_loop(s32 updateRate) { set_level_default_vehicle(VEHICLE_CAR); menu_init(MENU_FILE_SELECT); } - return 0; + return MENU_RESULT_CONTINUE; } else if (gMenuDelay < -30) { func_8008CACC(); charSelectScene = 0; @@ -5563,7 +5563,7 @@ s32 menu_game_select_loop(s32 updateRate) { load_level_for_menu(ASSET_LEVEL_CHARACTERSELECT, -1, charSelectScene); func_8008AEB4(0, 0); menu_init(MENU_CHARACTER_SELECT); - return 0; + return MENU_RESULT_CONTINUE; } else { func_8008C698(updateRate); if ((gMenuDelay == 0) && (gOpacityDecayTimer == 0)) { @@ -5600,7 +5600,7 @@ s32 menu_game_select_loop(s32 updateRate) { } } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } } @@ -6177,15 +6177,15 @@ s32 menu_file_select_loop(s32 updateRate) { D_800E0FAC = 1; func_8008E428(); func_80000B28(); - func_8006E5BC(); + init_racer_headers(); gTrophyRaceWorldId = 0; if (settings->newGame) { if (gIsInAdventureTwo) { settings->cutsceneFlags |= CUTSCENE_ADVENTURE_TWO; } func_8009ABD8((s8 *)get_misc_asset(MISC_ASSET_UNK19), 0, gNumberOfActivePlayers, 0, 0, NULL); - menu_init(MENU_UNKNOWN_23); - return 0; + menu_init(MENU_NEWGAME_CINEMATIC); + return MENU_RESULT_CONTINUE; } if (settings->cutsceneFlags & CUTSCENE_ADVENTURE_TWO) { gIsInAdventureTwo = TRUE; @@ -6197,10 +6197,10 @@ s32 menu_file_select_loop(s32 updateRate) { if (gMenuDelay < -35) { func_8008E428(); menu_init(MENU_GAME_SELECT); - return 0; + return MENU_RESULT_CONTINUE; } else { - return 0; + return MENU_RESULT_CONTINUE; } } @@ -6515,11 +6515,11 @@ s32 menu_track_select_loop(s32 updateRate) { load_level_for_menu(ASSET_LEVEL_CHARACTERSELECT, -1, cutsceneId); func_8008AEB4(0, NULL); menu_init(MENU_CHARACTER_SELECT); - return 0; + return MENU_RESULT_CONTINUE; } load_level_for_menu(ASSET_LEVEL_OPTIONSBACKGROUND, -1, 0); menu_init(MENU_GAME_SELECT); - return 0; + return MENU_RESULT_CONTINUE; } if (D_801267D0 >= 2) { func_8008F534(); @@ -6536,10 +6536,10 @@ s32 menu_track_select_loop(s32 updateRate) { D_800DF450 = 0; gTrophyRaceRound = 0; menu_init(MENU_TROPHY_RACE_ROUND); - return 0; + return MENU_RESULT_CONTINUE; } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } void func_8008F534(void) { @@ -7430,7 +7430,7 @@ s32 menu_adventure_track_loop(s32 updateRate) { } } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } void func_80093A0C(void) { @@ -7770,7 +7770,7 @@ void func_80094688(s32 arg0, s32 arg1) { gMenuOptionCount = 8; gMenuDelay = 100; } - if (get_render_context() != DRAW_GAME) { + if (get_game_mode() != GAMEMODE_INGAME) { gMenuOptionCount = 7; } reset_controller_sticks(); @@ -7797,7 +7797,7 @@ void func_80094688(s32 arg0, s32 arg1) { D_80126BBC = 0; } D_80126BC0 = var_v1[2]; - if (get_render_context() == DRAW_GAME) { + if (get_game_mode() == GAMEMODE_INGAME) { func_80078170(D_80126BB8, D_80126BBC, D_80126BC0); } camEnableUserView(0, 1); @@ -8071,7 +8071,7 @@ s32 menu_results_loop(s32 updateRate) { close_dialogue_box(7); assign_dialogue_box_id(7); if (gResultOptionText[gMenuOption] == gMenuText[ASSET_MENU_TEXT_TRYAGAIN]) { - return (0x100 | 0x2); //This gets parsed in func_8006DCF8 as a flag and an ID from the bottom 7 bits. + return (0x100 | 0x2); //This gets parsed in menu_logic_loop as a flag and an ID from the bottom 7 bits. } if (gResultOptionText[gMenuOption] == gMenuText[ASSET_MENU_TEXT_SELECTTRACK]) { load_level_for_menu(SPECIAL_MAP_ID_NO_LEVEL, -1, 0); @@ -8082,7 +8082,7 @@ s32 menu_results_loop(s32 updateRate) { } } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } void func_800976CC(void) { @@ -8551,7 +8551,7 @@ s32 menu_trophy_race_round_loop(s32 updateRate) { return gNumberOfActivePlayers; } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } /** @@ -8703,7 +8703,7 @@ s32 menu_trophy_race_rankings_loop(s32 updateRate) { Settings *settings; s32 temp0; - ret = 0; + ret = MENU_RESULT_CONTINUE; settings = get_settings(); if ((gMenuDelay > -20) && (gMenuDelay < 20)) { func_80098EBC(updateRate); @@ -8800,14 +8800,14 @@ s32 menu_trophy_race_rankings_loop(s32 updateRate) { if (sp34 >= 3) { menu_init(MENU_TRACK_SELECT); } else { - ret = 0x105; + ret = MENU_RESULT_FLAGS_100 | MENU_RESULT_TRACKS_MODE; } } else { - ret = 1; + ret = MENU_RESULT_RETURN_TO_GAME; settings->courseId = get_hub_area_id(settings->worldId); if (D_800DF450 != 0) { D_800DF450 = 0; - ret = settings->courseId | 0x200; + ret = settings->courseId | MENU_RESULT_FLAGS_200; if (sp34 < 3) { temp0 = settings->worldId - 1; temp0 <<= 1; @@ -8825,8 +8825,8 @@ s32 menu_trophy_race_rankings_loop(s32 updateRate) { miscAsset31 = (s8 *) get_misc_asset(ASSET_MISC_31); temp0 = ((gTrophyRaceWorldId * 3) + sp34) - 3; func_8009ABD8(miscAsset31, temp0, ret, 0, 0, D_80126438); - ret = 0; - menu_init(MENU_UNKNOWN_23); + ret = MENU_RESULT_CONTINUE; + menu_init(MENU_NEWGAME_CINEMATIC); } gTrophyRaceWorldId = 0; } @@ -9021,7 +9021,7 @@ s32 menu_ghost_data_loop(s32 updateRate) { func_8009ABAC(); menu_init(MENU_SAVE_OPTIONS); } - return 0; + return MENU_RESULT_CONTINUE; } void func_8009ABAC(void) { @@ -9054,7 +9054,7 @@ void func_8009ABD8(s8 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s8 *arg5) { D_80126804 = arg5; } -void menu_23_init(void) { +void menu_cinematic_init(void) { if (D_80126804 != NULL) { func_8009C674(D_800E1768); assign_racer_portrait_textures(); @@ -9064,7 +9064,7 @@ void menu_23_init(void) { gMenuOptionCount = 0; } -s32 menu_23_loop(UNUSED s32 updateRate) { +s32 menu_cinematic_loop(UNUSED s32 updateRate) { s32 i; s32 buttonsPressed; @@ -9100,7 +9100,7 @@ s32 menu_23_loop(UNUSED s32 updateRate) { } } gIgnorePlayerInputTime = 0; - return 0; + return MENU_RESULT_CONTINUE; } @@ -9685,7 +9685,7 @@ s32 npc_dialogue_loop(u32 dialogueOption) { return 0; } if (dialogueOption != DIALOGUE_CHALLENGE) { - func_8006F388(1); + set_pause_lockout_timer(1); } result = 0; update_controller_sticks(); diff --git a/src/menu.h b/src/menu.h index 866a9075..8701a64c 100644 --- a/src/menu.h +++ b/src/menu.h @@ -90,7 +90,7 @@ typedef enum MENU_ID { MENU_TROPHY_RACE_ROUND, MENU_TROPHY_RACE_RANKINGS, MENU_UNUSED_22, - MENU_UNKNOWN_23, + MENU_NEWGAME_CINEMATIC, MENU_GHOST_DATA, MENU_CREDITS, MENU_BOOT, @@ -381,7 +381,7 @@ void func_80099600(void); s32 get_trophy_race_world_id(void); void func_8009ABAC(void); void func_8009ABD8(s8 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s8 *arg5); -void menu_23_init(void); +void menu_cinematic_init(void); void func_8009AF18(void); void menu_credits_init(void); void render_credits_fade(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); @@ -466,7 +466,7 @@ void render_adventure_track_setup(UNUSED s32 updateRate, s32 arg1, s32 arg2); void menu_trophy_race_round_init(void); void func_8008B358(void); s32 menu_save_options_loop(s32 updateRate); -s32 menu_23_loop(s32 updateRate); +s32 menu_cinematic_loop(s32 updateRate); s32 menu_magic_codes_list_loop(s32 updateRate); void menu_trophy_race_rankings_init(void); void calculate_and_display_rom_checksum(void); diff --git a/src/object_functions.c b/src/object_functions.c index 0ae0da02..09b3c677 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -1240,7 +1240,7 @@ void obj_loop_stopwatchman(Object *obj, s32 updateRate) { } obj->properties.npc.action = TT_MODE_APPROACH_PLAYER; get_fog_settings(PLAYER_ONE, &tt->fogNear, &tt->fogFar, &tt->fogR, &tt->fogG, &tt->fogB); - func_80030DE0(PLAYER_ONE, 128, 128, 255, 900, 998, 240); + slowly_change_fog(PLAYER_ONE, 128, 128, 255, 900, 998, 240); func_800012E8(); play_music(SEQUENCE_TTS_THEME); if (racerObj != NULL) { @@ -1293,7 +1293,7 @@ void obj_loop_stopwatchman(Object *obj, s32 updateRate) { obj->properties.npc.action = TT_MODE_TURN_TOWARDS_PLAYER; } move_object(obj, obj->segment.x_velocity * updateRateF, obj->segment.y_velocity * updateRateF, obj->segment.z_velocity * updateRateF); - func_8006F388(1); + set_pause_lockout_timer(1); break; case TT_MODE_TURN_TOWARDS_PLAYER: racer_set_dialogue_camera(); @@ -1335,7 +1335,7 @@ void obj_loop_stopwatchman(Object *obj, s32 updateRate) { } else { play_tt_voice_clip(SOUND_VOICE_TT_OK, 1); } - func_80030DE0(PLAYER_ONE, tt->fogR, tt->fogG, tt->fogB, tt->fogNear, tt->fogFar, 180); + slowly_change_fog(PLAYER_ONE, tt->fogR, tt->fogG, tt->fogB, tt->fogNear, tt->fogFar, 180); play_music(header->music); func_80001074(header->instruments); racer->unk118 = func_80004B40(racer->characterId, racer->vehicleID); @@ -2298,7 +2298,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { sp6B = 1; } get_fog_settings(PLAYER_ONE, &taj->fogNear, &taj->fogFar, &taj->fogR, &taj->fogG, &taj->fogB); - func_80030DE0(PLAYER_ONE, 255, 0, 120, 960, 1100, 240); + slowly_change_fog(PLAYER_ONE, 255, 0, 120, 960, 1100, 240); taj->animFrameF = 0.0f; } @@ -2332,7 +2332,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { case TAJ_MODE_SET_CHALLENGE: case TAJ_MODE_TELEPORT_AWAY_BEGIN: case TAJ_MODE_TELEPORT_AWAY_END: - func_8006F388(1); + set_pause_lockout_timer(1); break; } if (obj->properties.npc.action != TAJ_MODE_ROAM && dialogueID != 0 && obj->properties.npc.action < 4) { @@ -2428,7 +2428,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { obj->segment.object.animationID = 2; taj->unk1C = 0; play_taj_voice_clip(SOUND_VOICE_TAJ_BYE, TRUE); - func_80030DE0(PLAYER_ONE, taj->fogR, taj->fogG, taj->fogB, taj->fogNear, taj->fogFar, 180); + slowly_change_fog(PLAYER_ONE, taj->fogR, taj->fogG, taj->fogB, taj->fogNear, taj->fogFar, 180); set_music_player_voice_limit(levelHeader->voiceLimit); play_music(levelHeader->music); func_80001074(levelHeader->instruments); @@ -2591,7 +2591,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { obj->segment.object.opacity -= var_a2; } else { racer64->racer.unk118 = func_80004B40(racer64->racer.characterId, racer64->racer.vehicleID); - func_80030DE0(PLAYER_ONE, taj->fogR, taj->fogG, taj->fogB, taj->fogNear, taj->fogFar, 180); + slowly_change_fog(PLAYER_ONE, taj->fogR, taj->fogG, taj->fogB, taj->fogNear, taj->fogFar, 180); set_music_player_voice_limit(levelHeader->voiceLimit); play_music(levelHeader->music); func_80001074(levelHeader->instruments); @@ -5027,7 +5027,7 @@ void obj_loop_frog(Object *obj, s32 updateRate) { play_sound_at_position(SOUND_VOICE_DRUMSTICK_POSITIVE2, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); set_eeprom_settings_value(2); set_magic_code_flags(CHEAT_CONTROL_DRUMSTICK); - func_8006D8A4(); + set_drumstick_unlock_transition(); free_object(obj); break; } else { @@ -5109,7 +5109,7 @@ void obj_loop_frog(Object *obj, s32 updateRate) { play_sound_at_position(SOUND_VOICE_DRUMSTICK_POSITIVE2, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); set_eeprom_settings_value(2); set_magic_code_flags(CHEAT_CONTROL_DRUMSTICK); - func_8006D8A4(); + set_drumstick_unlock_transition(); free_object(obj); } else { frog->action = FROG_SQUISH; diff --git a/src/objects.c b/src/objects.c index 2e9272c8..94e7b82a 100644 --- a/src/objects.c +++ b/src/objects.c @@ -207,14 +207,14 @@ s8 D_8011AE01; s8 gIsNonCarRacers; s8 gIsSilverCoinRace; Object *D_8011AE08[16]; -ObjectHeader *(*D_8011AE48)[ASSET_OBJECT_HEADER_TABLE_LENGTH]; -u8 (*D_8011AE4C)[ASSET_OBJECT_HEADER_TABLE_LENGTH]; +ObjectHeader *(*gLoadedObjectHeaders)[ASSET_OBJECT_HEADER_TABLE_LENGTH]; +u8 (*gObjectHeaderReferences)[ASSET_OBJECT_HEADER_TABLE_LENGTH]; TextureHeader *D_8011AE50; TextureHeader *D_8011AE54; Object **gObjPtrList; // Not sure about the number of elements -s32 objCount; +s32 gObjectCount; s32 D_8011AE60; -s32 D_8011AE64; +s32 gParticleCount; Object *gObjectMemoryPool; Object **D_8011AE6C; s32 D_8011AE70; @@ -238,7 +238,7 @@ s16 *gAssetsLvlObjTranslationTable; s32 gAssetsLvlObjTranslationTableLength; s32 D_8011AEC0; Object **gParticlePtrList; -s32 gParticleCount; +s32 gFreeListCount; CheckpointNode *gTrackCheckpoints; // Array of structs, unknown number of members s32 gNumberOfCheckpoints; s32 D_8011AED4; @@ -258,7 +258,7 @@ s8 D_8011AEF7; s32 D_8011AEF8; s32 D_8011AEFC; s8 D_8011AF00; -Object *(*D_8011AF04)[64]; // Not sure about the number of elements +Object *(*D_8011AF04)[128]; s32 D_8011AF08[2]; s32 D_8011AF10[2]; f32 D_8011AF18[4]; @@ -383,11 +383,11 @@ void allocate_object_pools(void) { gAssetsObjectHeadersTableLength++; } gAssetsObjectHeadersTableLength--; - D_8011AE48 = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength * 4, COLOUR_TAG_WHITE); - D_8011AE4C = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength, COLOUR_TAG_WHITE); + gLoadedObjectHeaders = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength * 4, COLOUR_TAG_WHITE); + gObjectHeaderReferences = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength, COLOUR_TAG_WHITE); for (i = 0; i < gAssetsObjectHeadersTableLength; i++) { - (*D_8011AE4C)[i] = 0; + (*gObjectHeaderReferences)[i] = 0; } gAssetsMiscSection = (s32 *) load_asset_section_from_rom(ASSET_MISC); @@ -443,7 +443,7 @@ void clear_object_pointers(void) { D_8011AD26[0] = 1; D_8011AD5C = 0; D_8011AD60 = 0; - gParticleCount = 0; + gFreeListCount = 0; D_8011AE70 = 0; gNumberOfCheckpoints = 0; D_8011AED4 = 0; @@ -465,9 +465,9 @@ void clear_object_pointers(void) { D_8011AF08[0] = 0xFF; D_8011AF08[1] = 0xFF; - objCount = 0; + gObjectCount = 0; D_8011AE60 = 0; - D_8011AE64 = 0; + gParticleCount = 0; D_8011AE88 = 0; D_8011ADD4 = 0; D_8011AE7A = 0; @@ -496,26 +496,31 @@ void func_8000C604(void) { func_8006F398(); } gParticlePtrList_flush(); - len = objCount; + len = gObjectCount; for (i = 0; i < len; i++) { func_800101AC(gObjPtrList[i], 1); } - gParticleCount = 0; - objCount = 0; + gFreeListCount = 0; + gObjectCount = 0; D_8011AE60 = 0; clear_object_pointers(); free_from_memory_pool((void *) D_8011AEB0[0]); free_from_memory_pool((void *) D_8011AEB0[1]); } -ObjectHeader *func_8000C718(s32 index) { +/** + * Set the object's header. + * Search if the intended header is already loaded and use that. + * Otherwise, allocate space and load it into ROM and set it to that. +*/ +ObjectHeader *load_object_header(s32 index) { s32 assetOffset; s32 size; ObjectHeader *address; - if ((*D_8011AE4C)[index] != 0) { - (*D_8011AE4C)[index]++; - return (*D_8011AE48)[index]; + if ((*gObjectHeaderReferences)[index] != 0) { + (*gObjectHeaderReferences)[index]++; + return (*gLoadedObjectHeaders)[index]; } assetOffset = gAssetsObjectHeadersTable[index]; size = gAssetsObjectHeadersTable[index + 1] - assetOffset; @@ -527,19 +532,23 @@ ObjectHeader *func_8000C718(s32 index) { address->vehiclePartIds = (s32 *) ((uintptr_t) address + (uintptr_t) address->vehiclePartIds); address->vehiclePartIndices = (s8 *) ((uintptr_t) address + (uintptr_t) address->vehiclePartIndices); address->modelIds = (s32 *) ((uintptr_t) address + (uintptr_t) address->modelIds); - (*D_8011AE48)[index] = address; - (*D_8011AE4C)[index] = 1; + (*gLoadedObjectHeaders)[index] = address; + (*gObjectHeaderReferences)[index] = 1; } else { return NULL; } return address; } -void func_8000C844(s32 index) { - if ((*D_8011AE4C)[index] != 0) { - (*D_8011AE4C)[index]--; - if ((*D_8011AE4C)[index] == 0) { - free_from_memory_pool((void *) (*D_8011AE48)[index]); +/** + * Remove this object from the loaded header's references. + * If the reference number is zero, free the header. +*/ +void try_free_object_header(s32 index) { + if ((*gObjectHeaderReferences)[index] != 0) { + (*gObjectHeaderReferences)[index]--; + if ((*gObjectHeaderReferences)[index] == 0) { + free_from_memory_pool((void *) (*gLoadedObjectHeaders)[index]); } } } @@ -668,25 +677,29 @@ s32 func_8000CC20(Object *obj) { // Has a jump table GLOBAL_ASM("asm/non_matchings/objects/func_8000CC7C.s") -s32 func_8000E0B0(void) { +/** + * Return an error status for the controller pak. + * Categorises multiple different controller pak messages into one for fewer cases. +*/ +s32 get_contpak_error(void) { // D_8011AD38 is likely an SIDeviceStatus value, but not 100% sure yet. switch (D_8011AD38) { - case 1: //NO_CONTROLLER_PAK - return -1; - case 7: //RUMBLE_PAK - return 0; - case 2: //CONTROLLER_PAK_INCONSISTENT - case 3: //CONTROLLER_PAK_WITH_BAD_ID - return 3; - case 4: //CONTROLLER_PAK_FULL - case 6: //CONTROLLER_PAK_UNK6 - return 2; - case 0: //CONTROLLER_PAK_GOOD - case 5: //CONTROLLER_PAK_CHANGED - case 8: //CONTROLLER_PAK_UNK8 + case NO_CONTROLLER_PAK: + return CONTPAK_ERROR_MISSING; + case RUMBLE_PAK: + return CONTPAK_ERROR_NONE; + case CONTROLLER_PAK_INCONSISTENT: + case CONTROLLER_PAK_WITH_BAD_ID: + return CONTPAK_ERROR_DAMAGED; + case CONTROLLER_PAK_FULL: + case CONTROLLER_PAK_UNK6: + return CONTPAK_ERROR_FULL; + case CONTROLLER_PAK_GOOD: + case CONTROLLER_PAK_CHANGED: + case CONTROLLER_PAK_UNK8: return func_80059E20(); default: - return 0; + return CONTPAK_ERROR_NONE; } } @@ -894,7 +907,7 @@ UNUSED u8 *func_8000E898(u8 *arg0, s32 arg1) { * Official name: objGetObject */ Object *get_object(s32 index) { - if (index < 0 || index >= objCount) { + if (index < 0 || index >= gObjectCount) { return 0; } return gObjPtrList[index]; @@ -905,27 +918,30 @@ Object *get_object(s32 index) { */ Object **objGetObjList(s32 *arg0, s32 *cnt) { *arg0 = D_8011AE60; - *cnt = objCount; + *cnt = gObjectCount; return gObjPtrList; } /** * Return the number of objects currently existing. */ -UNUSED s32 getObjectCount(void) { - return objCount; +UNUSED s32 get_object_count(void) { + return gObjectCount; } -UNUSED s32 func_8000E9C0(void) { - return D_8011AE64; +/** + * Return the number of particles currently existing. +*/ +UNUSED s32 get_particle_count(void) { + return gParticleCount; } void func_8000E9D0(Object *arg0) { arg0->segment.trans.flags |= OBJ_FLAGS_DEACTIVATED; - func_800245B4(arg0->segment.object.unk2C | 0xC000); - gObjPtrList[objCount++] = arg0; + func_800245B4(arg0->segment.object.unk2C | (OBJ_FLAGS_DEACTIVATED | OBJ_FLAGS_INVISIBLE)); + gObjPtrList[gObjectCount++] = arg0; if (1) {} // Fakematch - D_8011AE64++; + gParticleCount++; } #ifdef NON_EQUIVALENT @@ -964,7 +980,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { } curObj = &(*gSpawnObjectHeap)[0]; curObj->segment.trans.flags = 2; - curObj->segment.header = func_8000C718(var_a0); + curObj->segment.header = load_object_header(var_a0); if (curObj->segment.header == NULL) { return NULL; } @@ -1092,7 +1108,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { } if (var_v1) { objFreeAssets(curObj, assetCount, objType); - func_8000C844(var_a0); + try_free_object_header(var_a0); return NULL; } address = (u32 *) &curObj->unk68[curObj->segment.header->numberOfModelIds]; @@ -1108,19 +1124,19 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { address = (u32 *) ((uintptr_t) address + sizeOfobj); if (sizeOfobj == 0) { objFreeAssets(curObj, assetCount, objType); - func_8000C844(var_a0); + try_free_object_header(var_a0); return NULL; } } if (sp50 & 4) { - sizeOfobj = func_8000FC6C(curObj, (ShadowData *) address); + sizeOfobj = init_object_water_effect(curObj, (ShadowData *) address); address = (u32 *) ((uintptr_t) address + sizeOfobj); if (sizeOfobj == 0) { if (D_8011AE50 != NULL) { free_texture((u32)D_8011AE50); } objFreeAssets(curObj, assetCount, objType); - func_8000C844(var_a0); + try_free_object_header(var_a0); return NULL; } } @@ -1152,7 +1168,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { free_texture((u32)D_8011AE54); } objFreeAssets(curObj, assetCount, objType); - func_8000C844(var_a0); + try_free_object_header(var_a0); return NULL; } if (sizeOfobj & 0xF) { @@ -1198,8 +1214,8 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { } newObj->unk68 = (Object_68 **)((uintptr_t) newObj + (uintptr_t) 0x80); if (arg1 & 1) { - gObjPtrList[objCount] = newObj; - objCount++; + gObjPtrList[gObjectCount] = newObj; + gObjectCount++; } run_object_init_func(newObj, entry, 0); if (newObj->interactObj != NULL) { @@ -1215,10 +1231,10 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { free_texture(D_8011AE54); } objFreeAssets(newObj, assetCount, objType); - func_8000C844(var_a0); + try_free_object_header(var_a0); free_from_memory_pool(newObj); if (arg1 & 1) { - objCount--; + gObjectCount--; } return NULL; } @@ -1325,7 +1341,7 @@ s32 func_8000F99C(Object *obj) { temp_v0 = obj60->unk4[i]; if (temp_v0 != NULL) { objFreeAssets(temp_v0, temp_v0->segment.header->numberOfModelIds, temp_v0->segment.header->modelType); - func_8000C844(temp_v0->segment.object.unk2C); + try_free_object_header(temp_v0->segment.object.unk2C); free_from_memory_pool(temp_v0); } } @@ -1367,31 +1383,35 @@ s32 init_object_shadow(Object *obj, ShadowData *shadow) { obj->shadow = shadow; shadow->texture = NULL; objHeader = ((ObjectSegment *) obj)->header; - if (objHeader->unk32) { + if (objHeader->shadowGroup) { shadow->texture = load_texture((s32) ((ObjectHeader *) objHeader)->unk34); objHeader = ((ObjectSegment *) obj)->header; } shadow->scale = objHeader->shadowScale; - shadow->unk8 = -1; + shadow->meshStart = -1; D_8011AE50 = shadow->texture; - if (((ObjectSegment *) obj)->header->unk32 && shadow->texture == NULL) { + if (((ObjectSegment *) obj)->header->shadowGroup && shadow->texture == NULL) { return 0; } return sizeof(ShadowData); } -s32 func_8000FC6C(Object *obj, WaterEffect *shadow) { - obj->waterEffect = shadow; - shadow->scale = obj->segment.header->unk8; - shadow->unkC = 0; - shadow->unkE = obj->segment.header->unk0 >> 8; - shadow->texture = NULL; - if (obj->segment.header->unk36) { - shadow->texture = load_texture(obj->segment.header->unk38); +/** + * Assigns water effect data to an object. Loads and assigns the effect texture, too. + * Returns zero if the texture is missing. +*/ +s32 init_object_water_effect(Object *obj, WaterEffect *waterEffect) { + obj->waterEffect = waterEffect; + waterEffect->scale = obj->segment.header->unk8; + waterEffect->textureFrame = 0; + waterEffect->animationSpeed = obj->segment.header->unk0 >> 8; + waterEffect->texture = NULL; + if (obj->segment.header->waterEffectGroup) { + waterEffect->texture = load_texture(obj->segment.header->unk38); } - shadow->unk8 = -1; - D_8011AE54 = shadow->texture; - if (obj->segment.header->unk36 && shadow->texture == NULL) { + waterEffect->meshStart = -1; + D_8011AE54 = waterEffect->texture; + if (obj->segment.header->waterEffectGroup && waterEffect->texture == NULL) { return 0; } return sizeof(WaterEffect); @@ -1407,19 +1427,24 @@ s32 init_object_interaction_data(Object *obj, ObjectInteraction *interactObj) { return sizeof(ObjectInteraction); } -s32 func_8000FD34(Object *arg0, Object_5C *arg1) { - arg0->unk5C = arg1; - func_80016BC4(arg0); +// Inits some matrix stuff for objects. It seems to be precomputing something, but not sure what. +s32 func_8000FD34(Object *obj, Object_5C *matrices) { + obj->unk5C = matrices; + func_80016BC4(obj); return sizeof(Object_5C); } GLOBAL_ASM("asm/non_matchings/objects/func_8000FD54.s") -//Official Name: objFreeObject +/** + * Adds the object to the free list. + * This object will be deallocated on the next update cycle. + * Official Name: objFreeObject +*/ void free_object(Object *object) { - func_800245B4(object->unk4A | 0x8000); - gParticlePtrList[gParticleCount] = object; - gParticleCount++; + func_800245B4(object->unk4A | OBJ_FLAGS_DEACTIVATED); + gParticlePtrList[gFreeListCount] = object; + gFreeListCount++; } UNUSED s32 func_80010018(void) { @@ -1438,11 +1463,11 @@ void gParticlePtrList_flush(void) { Object *searchObj; D_8011AE88 = 0; - for (i = 0; i < gParticleCount; i++) { + for (i = 0; i < gFreeListCount; i++) { search_indx = -1; searchObj = gParticlePtrList[i]; - for (j = 0; j < objCount; j++) { + for (j = 0; j < gObjectCount; j++) { if (searchObj == gObjPtrList[j]) search_indx = j; } @@ -1452,15 +1477,15 @@ void gParticlePtrList_flush(void) { if (search_indx < D_8011AE7C) { D_8011AE7C--; } - objCount--; + gObjectCount--; if (0) {} // Fakematch - for (j = search_indx; j < objCount; j++) { + for (j = search_indx; j < gObjectCount; j++) { gObjPtrList[j] = gObjPtrList[j + 1]; } } func_800101AC(searchObj, 0); } - gParticleCount = 0; + gFreeListCount = 0; } GLOBAL_ASM("asm/non_matchings/objects/func_800101AC.s") @@ -1508,7 +1533,7 @@ void func_80010994(s32 updateRate) { for (i = 0; i < D_8011AE70; i++) { func_8001709C(D_8011AE6C[i]); } - tempVal = objCount; + tempVal = gObjectCount; for (i = D_8011AE60; i < tempVal; i++) { obj = gObjPtrList[i]; if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { @@ -1558,7 +1583,7 @@ void func_80010994(s32 updateRate) { run_object_loop_func(obj, updateRate); } } - if (D_8011AE64 > 0) { + if (gParticleCount > 0) { for (i = D_8011AE60; i < tempVal; i++) { obj = gObjPtrList[i]; if (obj->segment.trans.flags & 0x8000) { @@ -1570,7 +1595,7 @@ void func_80010994(s32 updateRate) { do { //FAKEMATCH lightUpdateLights(updateRate); if (get_light_count() > 0) { - for (i = D_8011AE60; i < objCount; i++) { + for (i = D_8011AE60; i < gObjectCount; i++) { obj = gObjPtrList[i]; if (!(obj->segment.trans.flags & 0x8000) && (obj->shading != NULL)) { func_80032C7C(obj); @@ -2142,7 +2167,7 @@ void render_3d_model(Object *obj) { } if (obj->segment.header->unk71) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->shading->unk18, obj->shading->unk19, obj->shading->unk1A, alpha); - func_8007B43C(); + enable_primitive_colour(); } else if (hasOpacity) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, intensity, intensity, intensity, alpha); } else { @@ -2159,7 +2184,7 @@ void render_3d_model(Object *obj) { } else { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); } - func_8007B454(); + disable_primitive_colour(); } if (obj->unk60 != NULL) { obj60_unk0 = obj->unk60->unk0; @@ -2237,11 +2262,11 @@ void render_3d_model(Object *obj) { if (meshBatch != -1) { if (obj->segment.header->unk71) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->shading->unk18, obj->shading->unk19, obj->shading->unk1A, alpha); - func_8007B43C(); + enable_primitive_colour(); } func_800143A8(objModel, obj, meshBatch, 4, spB0); if (obj->segment.header->unk71) { - func_8007B454(); + disable_primitive_colour(); } } if (hasOpacity || obj->segment.header->unk71) { @@ -2709,7 +2734,7 @@ void func_800142B8(void) { Object *currObj; Object_68 *curr_68; - for (; i < objCount; i++) { + for (; i < gObjectCount; i++) { currObj = gObjPtrList[i]; if ((currObj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) == 0 && currObj->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) { for (j = 0; j < currObj->segment.header->numberOfModelIds; j++) { @@ -2810,12 +2835,12 @@ s32 func_80014814(s32 *retObjCount) { s32 maxObjCount; s32 curObjCount; - *retObjCount = objCount; + *retObjCount = gObjectCount; if (D_8011AE7C) { return D_8011AE7C; } curObjCount = D_8011AE60; - maxObjCount = objCount - 1; + maxObjCount = gObjectCount - 1; while (maxObjCount >= curObjCount) { for (i = 0; maxObjCount >= curObjCount && i == 0; i++) { if (!(gObjPtrList[curObjCount]->segment.trans.flags & 0x8000)) { @@ -2886,7 +2911,7 @@ void func_800155B8(void) { Object *objList[257]; //257 seems random, but it works for now. objsWithInteractives = 0; - for (i = D_8011AE60; i < objCount; i++) { + for (i = D_8011AE60; i < gObjectCount; i++) { obj = gObjPtrList[i]; if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { objInteract = obj->interactObj; @@ -2982,7 +3007,7 @@ Object *func_80016C68(f32 x, f32 y, f32 z, f32 maxDistCheck, s32 dontCheckYAxis) s32 i; Object *curObj; - for (i = 0; i < objCount; i++) { + for (i = 0; i < gObjectCount; i++) { curObj = gObjPtrList[i]; if (!(curObj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) && (curObj->behaviorId == BHV_ANIMATED_OBJECT_3)) { xDiff = curObj->segment.trans.x_position - x; @@ -3114,7 +3139,7 @@ GLOBAL_ASM("asm/non_matchings/objects/func_800185E4.s") Object *find_taj_object(void) { s32 i; Object *current_obj; - for (i = D_8011AE60; i < objCount; i++) { + for (i = D_8011AE60; i < gObjectCount; i++) { current_obj = gObjPtrList[i]; if (!(current_obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) && (current_obj->behaviorId == BHV_PARK_WARDEN)) { return current_obj; @@ -3485,7 +3510,7 @@ void func_8001BC54(void) { s32 i; gCameraObjCount = 0; - for (i = 0; i < objCount; i++) { + for (i = 0; i < gObjectCount; i++) { objPtr = gObjPtrList[i]; if (!(objPtr->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { if (objPtr->behaviorId == BHV_CAMERA_CONTROL) { @@ -3866,7 +3891,7 @@ UNUSED void set_racer_position_and_angle(s16 player, s16 *x, s16 *y, s16 *z, s16 Object_Racer *racer; s32 i; - for (i = 0; i < objCount; i++) { + for (i = 0; i < gObjectCount; i++) { obj = gObjPtrList[i]; if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { if (obj->behaviorId == BHV_RACER) { @@ -3878,7 +3903,7 @@ UNUSED void set_racer_position_and_angle(s16 player, s16 *x, s16 *y, s16 *z, s16 *angleZ = obj->segment.trans.z_rotation; *angleX = obj->segment.trans.x_rotation; *angleY = obj->segment.trans.y_rotation; - i = objCount; //Feels like it should be a break instead. + i = gObjectCount; //Feels like it should be a break instead. } } } @@ -3919,7 +3944,7 @@ void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3) { *arg1 = -32000.0f; *arg2 = -32000.0f; *arg3 = -32000.0f; - for (i = 0; i < objCount; i++) { + for (i = 0; i < gObjectCount; i++) { current_obj = gObjPtrList[i]; if (current_obj != NULL @@ -3946,7 +3971,7 @@ void func_8001E45C(s32 arg0) { D_8011AE7A = arg0; D_8011ADAC = 0; D_8011AE7E = 1; - if (get_render_context() == DRAW_MENU) { + if (get_game_mode() == GAMEMODE_MENU) { set_frame_blackout_timer(); } } @@ -4149,7 +4174,7 @@ void func_80021104(Object *obj, Object_Animation *animObj, LevelObjectEntry_Anim ObjectSegment *seg; ObjectTransform *animObjTrans; - animObjTrans = animObj->unk1C; + animObjTrans = (ObjectTransform *) animObj->unk1C; if (obj->behaviorId == BHV_CAMERA_ANIMATION) { animObj->unk44 = D_8011AD3E; D_8011AD3E++; @@ -4332,7 +4357,7 @@ void init_racer_for_challenge(s32 vehicleID) { racer->lap = 0; racer->unk1BA = 0; set_taj_challenge_type(vehicleID); - func_8006F388(10); + set_pause_lockout_timer(10); } GLOBAL_ASM("asm/non_matchings/objects/func_80022948.s") @@ -4342,7 +4367,7 @@ void func_80022CFC(s32 arg0, f32 x, f32 y, f32 z) { unk80022CFC_1 *obj; Settings *settings = get_settings(); - for (index = 0; index < objCount; index += 1) { + for (index = 0; index < gObjectCount; index += 1) { obj = ((unk80022CFC_1*) gObjPtrList[index]); if (obj->unk48 == 0x4D) { if (obj->unk3C != NULL) { @@ -4383,7 +4408,7 @@ Object *func_8002342C(f32 x, f32 z) { bestDist = 0.0f; i = 0; bestObj = NULL; - if (objCount > 0) { + if (gObjectCount > 0) { do { tempObj = gObjPtrList[i]; if (!(tempObj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) && tempObj->behaviorId == BHV_UNK_57) { @@ -4397,7 +4422,7 @@ Object *func_8002342C(f32 x, f32 z) { } } i += 1; - } while (i < objCount); + } while (i < gObjectCount); } return bestObj; } diff --git a/src/objects.h b/src/objects.h index cf0dfd13..01655f12 100644 --- a/src/objects.h +++ b/src/objects.h @@ -179,6 +179,14 @@ enum ObjectSpawnFlags { OBJECT_SPAWN_UNK20 = (1 << 5) }; +enum ContPakErrors { + CONTPAK_ERROR_MISSING = -1, + CONTPAK_ERROR_NONE, + CONTPAK_ERROR_UNKNOWN, + CONTPAK_ERROR_FULL, + CONTPAK_ERROR_DAMAGED +}; + typedef struct RacerShieldGfx { s16 x_position; s16 y_position; @@ -323,7 +331,7 @@ void func_8000C604(void); s32 normalise_time(s32 timer); void func_8000CBC0(void); s32 func_8000CC20(Object *arg0); -s32 func_8000E0B0(void); +s32 get_contpak_error(void); void instShowBearBar(void); s8 func_8000E138(void); s8 func_8000E148(void); @@ -339,8 +347,8 @@ u8 is_time_trial_enabled(void); u8 is_in_time_trial(void); Object *get_object(s32 index); Object **objGetObjList(s32 *arg0, s32 *cnt); -s32 getObjectCount(void); -s32 func_8000E9C0(void); +s32 get_object_count(void); +s32 get_particle_count(void); void func_8000E9D0(Object *arg0); void free_object(Object *); s32 func_80010018(void); @@ -425,7 +433,7 @@ Object *get_racer_object_by_port(s32 index); void render_racer_shield(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *obj); void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *obj); void update_envmap_position(f32 x, f32 y, f32 z); -s32 func_8000FC6C(Object *obj, WaterEffect *shadow); +s32 init_object_water_effect(Object *obj, WaterEffect *shadow); s32 func_8001B2F0(s32 mapId); void render_3d_billboard(Object *obj); void render_misc_model(Object *obj, Vertex *verts, u32 numVertices, Triangle *triangles, u32 numTriangles, TextureHeader *tex, u32 flags, u32 offset, f32 yScale); @@ -446,9 +454,9 @@ s32 func_800143A8(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, void render_bubble_trap(ObjectTransform *trans, Object_68 *gfxData, Object *obj, s32 flags); void gParticlePtrList_flush(void); s32 init_object_shading(Object *obj, ShadeProperties *shading); -ObjectHeader *func_8000C718(s32 index); +ObjectHeader *load_object_header(s32 index); s32 func_8000F99C(Object *); -void func_8000C844(s32 arg0); +void try_free_object_header(s32 arg0); s32 get_object_property_size(Object *obj, Object_64 *obj64); void light_setup_light_sources(Object *obj); s32 init_object_interaction_data(Object *arg0, ObjectInteraction *arg1); diff --git a/src/racer.c b/src/racer.c index 40180c6d..1eea0ef2 100644 --- a/src/racer.c +++ b/src/racer.c @@ -2287,7 +2287,7 @@ void update_player_racer(Object *obj, s32 updateRate) { if (is_taj_challenge()) { gDialogueCameraAngle = 0; } - context = get_render_context(); + context = get_game_mode(); if (gRaceStartTimer == 0) { if (D_8011D544 > 0.0) { D_8011D544 -= updateRateF; @@ -2346,7 +2346,7 @@ void update_player_racer(Object *obj, s32 updateRate) { gCameraObject = (ObjectCamera *) get_active_camera_segment_no_cutscenes(); tempRacer->miscAnimCounter++; //!@Delta gCurrentPlayerIndex = tempRacer->playerIndex; - if (tempRacer->raceFinished == TRUE || context == DRAW_MENU) { + if (tempRacer->raceFinished == TRUE || context == GAMEMODE_MENU) { tempRacer->unk1CA = 1; tempRacer->playerIndex = PLAYER_COMPUTER; tempRacer->unk1C9 = 0; @@ -2494,7 +2494,7 @@ void update_player_racer(Object *obj, s32 updateRate) { playerIDF = -(f32) playerID; CLAMP(tempRacer->velocity, playerIDF, playerID); } - if (context != DRAW_MENU || func_8000E148()) { + if (context != GAMEMODE_MENU || func_8000E148()) { func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); } lastCheckpointDist = tempRacer->checkpoint_distance; @@ -5587,8 +5587,8 @@ void allocate_ghost_data(void) { D_8011D5A0[0] = 0; D_8011D5A0[1] = 0; D_8011D5A0[2] = 0; - D_8011D5A8[0] = 0; - D_8011D5A8[1] = 0; + D_8011D5A8[0] = CONTPAK_ERROR_NONE; + D_8011D5A8[1] = CONTPAK_ERROR_NONE; D_8011D59D = 0; D_8011D5AC = -1; } @@ -5596,7 +5596,7 @@ void allocate_ghost_data(void) { void func_80059944(void) { D_8011D59C = D_8011D59D; D_8011D5A0[D_8011D59C] = 0; - D_8011D5A8[D_8011D59C] = 0; + D_8011D5A8[D_8011D59C] = CONTPAK_ERROR_NONE; D_8011D59E = 0; } @@ -5682,7 +5682,7 @@ void func_80059BF0(Object *obj, s32 updateRate) { D_8011D59E += 30; if (D_8011D5A0[D_8011D59C] >= 360) { if (!is_postrace_viewport_active()) { - D_8011D5A8[D_8011D59C] = 1; + D_8011D5A8[D_8011D59C] = CONTPAK_ERROR_UNKNOWN; } return; } @@ -5782,7 +5782,7 @@ void racer_enter_door(Object_Racer* racer, s32 updateRate) { } racer->transitionTimer = 60 - updateRate; } - func_8006F388(1); + set_pause_lockout_timer(1); if (racer->transitionTimer > 0) { racer->transitionTimer -= updateRate; if (racer->transitionTimer <= 0) { @@ -5816,7 +5816,7 @@ void update_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, f32 updat f32 temp_fv1_2; gCurrentPlayerIndex = -1; - renderContext = get_render_context(); + renderContext = get_game_mode(); levelHeader = get_current_level_header(); if (racer->unk1F6 > 0) { racer->unk1F6 -= updateRate; @@ -5954,7 +5954,7 @@ void update_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, f32 updat case VEHICLE_WIZPIG: update_wizpig(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; case VEHICLE_ROCKET: update_rocket(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; } - if (renderContext != DRAW_MENU) { + if (renderContext != GAMEMODE_MENU) { func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); } lastCheckpointDist = racer->checkpoint_distance; @@ -6007,7 +6007,7 @@ void update_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, f32 updat racer->unk70 = obj->segment.trans.z_position; } else { func_8005B818(obj, racer, updateRate, updateRateF); - if (renderContext != DRAW_MENU) { + if (renderContext != GAMEMODE_MENU) { func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); } } diff --git a/src/textures_sprites.c b/src/textures_sprites.c index 1f5c5643..0caeb2b8 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -162,7 +162,7 @@ Gfx dRenderSettingsSolidColour[][2] = { }; // Some kind of texture on top of a solid colour -Gfx D_800DF028[][2] = { +Gfx dRenderSettingsPrimOverlay[][2] = { // Opaque Surface DRAW_TABLE_ENTRY(DKR_CC_DECALFADEPRIM, DKR_CC_DECALFADEPRIM, DKR_OMH_1CYC_BILERP, G_RM_ZB_OPA_DECAL, G_RM_ZB_OPA_DECAL2), DRAW_TABLE_ENTRY(DKR_CC_DECALFADEPRIM, DKR_CC_DECALFADEPRIM, DKR_OMH_1CYC_BILERP, G_RM_AA_ZB_OPA_DECAL, G_RM_AA_ZB_OPA_DECAL2), @@ -178,7 +178,7 @@ Gfx D_800DF028[][2] = { }; // Not sure what it is specifically, but some onscreen actors like TT and Taj use it. -Gfx D_800DF0A8[][2] = { +Gfx dRenderSettingsPrimCol[][2] = { // Opaque Surface DRAW_TABLE_GROUP(DKR_CC_UNK5, DKR_CC_UNK6, DKR_OMH_2CYC_BILERP, G_RM_NOOP, G_RM_OPA_SURF2, G_RM_NOOP, G_RM_AA_OPA_SURF2, G_RM_NOOP, G_RM_ZB_OPA_SURF2, G_RM_NOOP, G_RM_AA_ZB_OPA_SURF2), @@ -292,10 +292,13 @@ s32 gBlockedRenderFlags; TextureHeader *gCurrentTextureHeader; s16 gUsingTexture; s16 gForceFlags; -s16 D_80126384; +s16 gUsePrimColour; /******************************/ +/** + * Load the texture table from ROM and allocate space for all the texture asset management. +*/ void tex_init_textures(void) { s32 i; @@ -531,18 +534,24 @@ void reset_render_settings(Gfx **dlist) { gUsingTexture = FALSE; gForceFlags = TRUE; gBlockedRenderFlags = RENDER_NONE; - D_80126384 = FALSE; + gUsePrimColour = FALSE; gDPPipeSync((*dlist)++); gSPSetGeometryMode((*dlist)++, G_SHADING_SMOOTH | G_SHADE | G_ZBUFFER); } -void func_8007B43C(void) { - D_80126384 = TRUE; +/** + * Enables usage of combiners utilising the indidual primitive colours. +*/ +void enable_primitive_colour(void) { + gUsePrimColour = TRUE; gForceFlags = TRUE; } -void func_8007B454(void) { - D_80126384 = FALSE; +/** + * Disables usage of combiners utilising the indidual primitive colours. +*/ +void disable_primitive_colour(void) { + gUsePrimColour = FALSE; gForceFlags = TRUE; } @@ -602,7 +611,7 @@ void load_and_set_texture(Gfx **dlist, TextureHeader *texhead, s32 flags, s32 te gUsingTexture = FALSE; } - flags = (D_80126384) ? (flags & (RENDER_DECAL | RENDER_COLOUR_INDEX | RENDER_ANTI_ALIASING | RENDER_Z_COMPARE | RENDER_SEMI_TRANSPARENT)) : + flags = (gUsePrimColour) ? (flags & (RENDER_DECAL | RENDER_COLOUR_INDEX | RENDER_ANTI_ALIASING | RENDER_Z_COMPARE | RENDER_SEMI_TRANSPARENT)) : (flags & (RENDER_VTX_ALPHA | RENDER_DECAL | RENDER_Z_UPDATE | RENDER_COLOUR_INDEX | RENDER_CUTOUT | RENDER_FOG_ACTIVE | RENDER_SEMI_TRANSPARENT | RENDER_Z_COMPARE | RENDER_ANTI_ALIASING)); flags &= ~gBlockedRenderFlags; flags = (flags & RENDER_VTX_ALPHA) ? flags & ~RENDER_FOG_ACTIVE : flags & ~RENDER_Z_UPDATE; @@ -613,7 +622,7 @@ void load_and_set_texture(Gfx **dlist, TextureHeader *texhead, s32 flags, s32 te } if (((flags & RENDER_VTX_ALPHA) != (gCurrentRenderFlags & RENDER_VTX_ALPHA)) || gForceFlags) { - if (flags & RENDER_VTX_ALPHA || D_80126384) { + if (flags & RENDER_VTX_ALPHA || gUsePrimColour) { gSPClearGeometryMode((*dlist)++, G_FOG); } else { gSPSetGeometryMode((*dlist)++, G_FOG); @@ -639,7 +648,7 @@ void load_and_set_texture(Gfx **dlist, TextureHeader *texhead, s32 flags, s32 te return; } - if (D_80126384) { + if (gUsePrimColour) { if (flags & RENDER_DECAL && flags & RENDER_Z_COMPARE) { dlIndex = 0; if (flags & RENDER_ANTI_ALIASING) { @@ -651,13 +660,13 @@ void load_and_set_texture(Gfx **dlist, TextureHeader *texhead, s32 flags, s32 te if (flags & RENDER_COLOUR_INDEX) { dlIndex |= 4; // Colour Index } - gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DF028[dlIndex]), numberOfGfxCommands(D_800DF028[0])); + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(dRenderSettingsPrimOverlay[dlIndex]), numberOfGfxCommands(dRenderSettingsPrimOverlay[0])); return; } if (flags & RENDER_COLOUR_INDEX) { flags = (flags ^ RENDER_COLOUR_INDEX) | RENDER_FOG_ACTIVE; } - gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(D_800DF0A8[flags]), numberOfGfxCommands(D_800DF0A8[0])); + gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(dRenderSettingsPrimCol[flags]), numberOfGfxCommands(dRenderSettingsPrimCol[0])); return; } diff --git a/src/textures_sprites.h b/src/textures_sprites.h index fce41ea0..46324b5c 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -115,8 +115,8 @@ s32 get_loaded_3D_textures(void); s32 func_8007AE64(void); void set_texture_colour_tag(s32 tagID); void reset_render_settings(Gfx **dlist); -void func_8007B43C(void); -void func_8007B454(void); +void enable_primitive_colour(void); +void disable_primitive_colour(void); void load_and_set_texture_no_offset(Gfx **dlist, TextureHeader *texhead, u32 flags); void func_8007BF1C(s32 arg0); s32 func_8007EF64(s16 arg0); diff --git a/src/thread3_main.c b/src/thread3_main.c index 0402a2d8..45e9f1d0 100644 --- a/src/thread3_main.c +++ b/src/thread3_main.c @@ -68,9 +68,9 @@ s32 gScreenStatus = OSMESG_SWAP_BUFFER; s32 sControllerStatus = 0; UNUSED s32 D_800DD388 = 0; s8 gSkipGfxTask = FALSE; -s8 D_800DD390 = 0; +s8 gDrumstickSceneLoadTimer = 0; s16 gLevelLoadTimer = 0; -s8 D_800DD398 = 0; +s8 gPauseLockTimer = 0; // If this is above zero, the player cannot pause the game. s8 gFutureFunLandLevelTarget = FALSE; s8 gDmemInvalid = FALSE; UNUSED s32 D_800DD3A4 = 0; @@ -84,7 +84,7 @@ s8 gDrawFrameTimer = 0; FadeTransition D_800DD3F4 = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_UNK2, FADE_COLOR_BLACK, 20, 0); UNUSED FadeTransition D_800DD3FC = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_WHITE, 20, -1); s32 sLogicUpdateRate = LOGIC_5FPS; -FadeTransition D_800DD408 = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_WHITE, 30, -1); +FadeTransition gDrumstickSceneTransition = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_WHITE, 30, -1); UNUSED char *D_800DD410[3] = { "CAR", "HOV", "PLN" }; @@ -105,11 +105,11 @@ Vertex *gGameCurrVertexList; TriangleList *gTriangleHeap[2]; TriangleList *gGameCurrTriList; UNUSED s32 D_80121230[8]; -s8 D_80121250[16]; +s8 gLevelSettings[16]; OSSched gMainSched; // 0x288 / 648 bytes u64 gSchedStack[0x400]; s32 gSPTaskNum; -s32 sRenderContext; +s32 gGameMode; s32 gRenderMenu; // I don't think this is ever not 1 // Similar to gMapId, but is 0 if not currently playing a level (e.g. start menu). s32 gPlayableMapId; @@ -124,7 +124,7 @@ s8 gIsLoading; s8 gIsPaused; s8 gPostRaceViewPort; Vehicle gLevelDefaultVehicleID; -Vehicle D_8012351C; // Looks to be the current level's vehicle ID. +Vehicle gMenuVehicleID; // Looks to be the current level's vehicle ID. s32 sBootDelayTimer; s8 gLevelLoadType; s8 gNextMap; @@ -137,7 +137,7 @@ OSScClient *gNMISched[3]; OSMesg gNMIOSMesg; OSMesgQueue gNMIMesgQueue; s32 gNMIMesgBuf; //Official Name: resetPressed -s32 D_80123568[6]; // BSS Padding +UNUSED s32 D_80123568[3]; // BSS Padding /******************************/ @@ -150,7 +150,7 @@ void thread3_main(UNUSED void *unused) { init_game(); gSaveDataFlags = handle_save_data_and_read_controller(gSaveDataFlags, 0); sBootDelayTimer = 0; - sRenderContext = DRAW_INTRO; + gGameMode = GAMEMODE_INTRO; while (1) { if (is_reset_pressed()) { func_80072708(); @@ -274,7 +274,7 @@ void main_game_loop(void) { gSaveDataFlags = handle_save_data_and_read_controller(gSaveDataFlags, sLogicUpdateRate); if (get_lockup_status()) { render_epc_lock_up_display(); - sRenderContext = DRAW_CRASH_SCREEN; + gGameMode = GAMEMODE_LOCKUP; } if (gDmemInvalid) { debugLoopCounter = 0; @@ -286,17 +286,17 @@ void main_game_loop(void) { } } - switch (sRenderContext) { - case DRAW_INTRO: // Pre-boot screen + switch (gGameMode) { + case GAMEMODE_INTRO: // Pre-boot screen pre_intro_loop(); break; - case DRAW_MENU: // In a menu - func_8006DCF8(sLogicUpdateRate); + case GAMEMODE_MENU: // In a menu + menu_logic_loop(sLogicUpdateRate); break; - case DRAW_GAME: // In game (Controlling a character) + case GAMEMODE_INGAME: // In game (Controlling a character) ingame_logic_loop(sLogicUpdateRate); break; - case DRAW_CRASH_SCREEN: // EPC (lockup display) + case GAMEMODE_LOCKUP: // EPC (lockup display) lockup_screen_loop(sLogicUpdateRate); break; } @@ -352,7 +352,10 @@ void main_game_loop(void) { } } -void func_8006CAE4(s32 numPlayers, s32 trackID, Vehicle vehicle) { +/** + * Loads a level for gameplay based on what the next track ID is, with the option to override. +*/ +void load_next_ingame_level(s32 numPlayers, s32 trackID, Vehicle vehicle) { gGameNumPlayers = numPlayers - 1; if (trackID == -1) { gPlayableMapId = get_track_id_to_load(); @@ -410,9 +413,9 @@ void unload_level_game(void) { * Involves the updating of all objects and setting up the render scene. */ void ingame_logic_loop(s32 updateRate) { - s32 buttonPressedInputs, buttonHeldInputs, i, sp40, sp3C; + s32 buttonPressedInputs, buttonHeldInputs, i, loadContext, sp3C; - sp40 = 0; + loadContext = LEVEL_CONTEXT_NONE; buttonHeldInputs = 0; buttonPressedInputs = 0; @@ -429,8 +432,8 @@ void ingame_logic_loop(s32 updateRate) { if (!gIsPaused) { func_80010994(updateRate); if (check_if_showing_cutscene_camera() == 0 || func_8001139C()) { - if ((buttonPressedInputs & START_BUTTON) && (get_level_property_stack_pos() == 0) && (D_800DD390 == 0) - && (sRenderContext == DRAW_GAME) && (gPostRaceViewPort == NULL) && (gLevelLoadTimer == 0) && (D_800DD398 == 0)) { + if (buttonPressedInputs & START_BUTTON && get_level_property_stack_pos() == 0 && gDrumstickSceneLoadTimer == 0 + && gGameMode == GAMEMODE_INGAME && gPostRaceViewPort == NULL && gLevelLoadTimer == 0 && gPauseLockTimer == 0) { buttonPressedInputs = 0; gIsPaused = TRUE; func_80093A40(); @@ -439,9 +442,9 @@ void ingame_logic_loop(s32 updateRate) { } else { set_anti_aliasing(TRUE); } - D_800DD398 -= updateRate; - if (D_800DD398 < 0) { - D_800DD398 = 0; + gPauseLockTimer -= updateRate; + if (gPauseLockTimer < 0) { + gPauseLockTimer = 0; } if (gPostRaceViewPort) { gIsPaused = FALSE; @@ -449,7 +452,7 @@ void ingame_logic_loop(s32 updateRate) { gParticlePtrList_flush(); func_8001BF20(); render_scene(&gCurrDisplayList, &gGameCurrMatrix, &gGameCurrVertexList, &gGameCurrTriList, updateRate); - if (sRenderContext == DRAW_GAME) { + if (gGameMode == GAMEMODE_INGAME) { // Ignore the user's L/R/Z buttons. buttonHeldInputs &= ~(L_TRIG | R_TRIG | Z_TRIG); } @@ -465,36 +468,36 @@ void ingame_logic_loop(s32 updateRate) { break; case 4: clear_level_property_stack(); - D_800DD390 = 0; + gDrumstickSceneLoadTimer = 0; buttonHeldInputs |= (L_TRIG | R_TRIG); break; case 5: buttonHeldInputs |= L_TRIG, - sp40 = 1; + loadContext = LEVEL_CONTEXT_TRACK_SELECT; break; case 8: buttonHeldInputs |= L_TRIG, - sp40 = 2; + loadContext = LEVEL_CONTEXT_RESULTS; break; case 9: buttonHeldInputs |= L_TRIG, - sp40 = 3; + loadContext = LEVEL_CONTEXT_TROPHY_ROUND; break; case 10: buttonHeldInputs |= L_TRIG, - sp40 = 4; + loadContext = LEVEL_CONTEXT_TROPHY_RESULTS; break; case 11: buttonHeldInputs |= L_TRIG, - sp40 = 5; + loadContext = LEVEL_CONTEXT_UNUSED; break; case 12: buttonHeldInputs |= L_TRIG, - sp40 = 6; + loadContext = LEVEL_CONTEXT_CHARACTER_SELECT; break; case 13: buttonHeldInputs |= L_TRIG, - sp40 = 7; + loadContext = LEVEL_CONTEXT_UNK7; break; } } @@ -532,12 +535,12 @@ void ingame_logic_loop(s32 updateRate) { buttonHeldInputs |= L_TRIG; break; case 4: - sp40 = 1; + loadContext = LEVEL_CONTEXT_TRACK_SELECT; func_800C314C(); buttonHeldInputs |= L_TRIG; break; case 11: - sp40 = 6; + loadContext = LEVEL_CONTEXT_CHARACTER_SELECT; func_800C314C(); buttonHeldInputs |= L_TRIG; break; @@ -549,7 +552,7 @@ void ingame_logic_loop(s32 updateRate) { gIsPaused = FALSE; break; case 3: - D_800DD390 = 0; + gDrumstickSceneLoadTimer = 0; func_80001050(); func_800C314C(); clear_level_property_stack(); @@ -564,16 +567,16 @@ void ingame_logic_loop(s32 updateRate) { if (gFutureFunLandLevelTarget) { if (func_800214C4() != 0) { gPlayableMapId = ASSET_LEVEL_FUTUREFUNLANDHUB; - D_801234F8 = 1; + D_801234F8 = TRUE; gGameCurrentEntrance = 0; gFutureFunLandLevelTarget = FALSE; } } sp3C = FALSE; - if (D_800DD390 != 0) { - D_800DD390 -= updateRate; - if (D_800DD390 <= 0) { - D_800DD390 = 0; + if (gDrumstickSceneLoadTimer) { + gDrumstickSceneLoadTimer -= updateRate; + if (gDrumstickSceneLoadTimer <= 0) { + gDrumstickSceneLoadTimer = 0; push_level_property_stack(ASSET_LEVEL_CENTRALAREAHUB, 0, VEHICLE_CAR, CUTSCENE_ID_NONE); push_level_property_stack(ASSET_LEVEL_WIZPIGAMULETSEQUENCE, 0, -1, CUTSCENE_ID_UNK_A); sp3C = TRUE; @@ -589,7 +592,7 @@ void ingame_logic_loop(s32 updateRate) { buttonHeldInputs = (L_TRIG | Z_TRIG); break; case LEVEL_LOAD_TROPHY_RACE: - sp40 = 3; + loadContext = LEVEL_CONTEXT_TROPHY_ROUND; func_80098208(); D_801234FC = 2; break; @@ -597,7 +600,7 @@ void ingame_logic_loop(s32 updateRate) { gFutureFunLandLevelTarget = TRUE; // fall-through case LEVEL_LOAD_FUTURE_FUN_LAND: - D_801234F8 = 1; + D_801234F8 = TRUE; gPlayableMapId = gNextMap; gGameCurrentEntrance = 0; gGameCurrentCutscene = 0; @@ -613,8 +616,8 @@ void ingame_logic_loop(s32 updateRate) { pop_level_property_stack(&gPlayableMapId, &gGameCurrentEntrance, &i, &gGameCurrentCutscene); set_frame_blackout_timer(); if (gPlayableMapId < 0) { - if (gPlayableMapId == (s32)SPECIAL_MAP_ID_NO_LEVEL || gPlayableMapId == (s32)SPECIAL_MAP_ID_UNK_NEG10) { - if (gPlayableMapId == (s32)SPECIAL_MAP_ID_UNK_NEG10 && is_in_two_player_adventure()) { + if (gPlayableMapId == SPECIAL_MAP_ID_NO_LEVEL || gPlayableMapId == SPECIAL_MAP_ID_UNK_NEG10) { + if (gPlayableMapId == SPECIAL_MAP_ID_UNK_NEG10 && is_in_two_player_adventure()) { func_8006F398(); } buttonHeldInputs |= L_TRIG; @@ -622,11 +625,11 @@ void ingame_logic_loop(s32 updateRate) { } else { buttonHeldInputs = 0; D_801234FC = 1; - sp40 = 8; + loadContext = LEVEL_CONTEXT_CREDITS; } } else { D_801234FC = 0; - D_801234F8 = 1; + D_801234F8 = TRUE; buttonHeldInputs = 0; } } @@ -651,42 +654,42 @@ void ingame_logic_loop(s32 updateRate) { } else { buttonHeldInputs = 0; D_801234FC = 1; - sp40 = 8; + loadContext = LEVEL_CONTEXT_CREDITS; } } else { - D_801234F8 = 1; + D_801234F8 = TRUE; } } } } } - if (((buttonHeldInputs & L_TRIG) && (sRenderContext == DRAW_GAME)) || (D_801234FC != 0)) { + if ((buttonHeldInputs & L_TRIG && gGameMode == GAMEMODE_INGAME) || D_801234FC != 0) { gIsPaused = FALSE; gLevelLoadTimer = 0; gPostRaceViewPort = NULL; unload_level_game(); safe_mark_write_save_file(get_save_file_index()); - if (sp40 != 0) { + if (loadContext) { gIsLoading = FALSE; - switch (sp40) { - case 1: + switch (loadContext) { + case LEVEL_CONTEXT_TRACK_SELECT: // Go to track select menu from "Select Track" option in tracks menu. load_menu_with_level_background(MENU_TRACK_SELECT, SPECIAL_MAP_ID_NO_LEVEL, 1); break; - case 2: + case LEVEL_CONTEXT_RESULTS: load_menu_with_level_background(MENU_RESULTS, ASSET_LEVEL_TROPHYRACE, 0); break; - case 3: + case LEVEL_CONTEXT_TROPHY_ROUND: load_menu_with_level_background(MENU_TROPHY_RACE_ROUND, ASSET_LEVEL_TROPHYRACE, 0); break; - case 4: + case LEVEL_CONTEXT_TROPHY_RESULTS: load_menu_with_level_background(MENU_TROPHY_RACE_RANKINGS, ASSET_LEVEL_TROPHYRACE, 0); break; - case 5: + case LEVEL_CONTEXT_UNUSED: // Trophy race related? load_menu_with_level_background(MENU_UNUSED_22, ASSET_LEVEL_TROPHYRACE, 0); break; - case 6: + case LEVEL_CONTEXT_CHARACTER_SELECT: // Go to character select menu from "Select Character" option in tracks menu. i = 0; if (is_drumstick_unlocked()) { @@ -698,17 +701,17 @@ void ingame_logic_loop(s32 updateRate) { func_8008AEB4(1, 0); load_menu_with_level_background(MENU_CHARACTER_SELECT, ASSET_LEVEL_CHARACTERSELECT, i); break; - case 7: + case LEVEL_CONTEXT_UNK7: gIsLoading = TRUE; - load_menu_with_level_background(MENU_UNKNOWN_23, SPECIAL_MAP_ID_NO_LEVEL, 0); + load_menu_with_level_background(MENU_NEWGAME_CINEMATIC, SPECIAL_MAP_ID_NO_LEVEL, 0); gIsLoading = FALSE; break; - case 8: + case LEVEL_CONTEXT_CREDITS: load_menu_with_level_background(MENU_CREDITS, SPECIAL_MAP_ID_NO_LEVEL, 0); break; } } else if (D_801234FC == 1) { - if (D_80121250[2] == -1) { + if (gLevelSettings[2] == -1) { load_menu_with_level_background(MENU_UNUSED_8, SPECIAL_MAP_ID_NO_LEVEL, 0); } else { gIsLoading = TRUE; @@ -716,9 +719,9 @@ void ingame_logic_loop(s32 updateRate) { } } else if (!(buttonHeldInputs & R_TRIG)) { if (!(buttonHeldInputs & Z_TRIG)) { - gPlayableMapId = D_80121250[0]; - gGameCurrentEntrance = D_80121250[15]; - gGameCurrentCutscene = D_80121250[D_80121250[1] + 8]; + gPlayableMapId = gLevelSettings[0]; + gGameCurrentEntrance = gLevelSettings[15]; + gGameCurrentCutscene = gLevelSettings[gLevelSettings[1] + 8]; gLevelDefaultVehicleID = get_map_default_vehicle(gPlayableMapId); if (gGameCurrentCutscene < 0) { gGameCurrentCutscene = CUTSCENE_ID_UNK_64; @@ -731,20 +734,23 @@ void ingame_logic_loop(s32 updateRate) { } D_801234FC = 0; } - if (D_801234F8 != 0) { + if (D_801234F8) { gPostRaceViewPort = NULL; unload_level_game(); load_level_game(gPlayableMapId, gGameNumPlayers, gGameCurrentEntrance, gLevelDefaultVehicleID); safe_mark_write_save_file(get_save_file_index()); - D_801234F8 = 0; + D_801234F8 = FALSE; } } -void func_8006D8A4(void) { - D_800DD390 = 0x2C; +/** + * Reset dialogue and set the transition effect for the cutscene showing an unlocked Drumstick. +*/ +void set_drumstick_unlock_transition(void) { + gDrumstickSceneLoadTimer = 44; gIsPaused = 0; n_alSeqpDelete(); - transition_begin(&D_800DD408); + transition_begin(&gDrumstickSceneTransition); } void func_8006D8E0(s32 arg0) { @@ -753,53 +759,53 @@ void func_8006D8E0(s32 arg0) { void func_8006D8F0(UNUSED s32 arg0) { s32 temp; - if (sRenderContext != DRAW_UNK_04) { - gPlayableMapId = D_80121250[0]; + if (gGameMode != GAMEMODE_UNUSED_4) { + gPlayableMapId = gLevelSettings[0]; gGameCurrentEntrance = 0; gGameCurrentCutscene = CUTSCENE_ID_UNK_64; - temp = D_80121250[1]; - if (D_80121250[15] >= 0) { - gGameCurrentEntrance = D_80121250[15]; + temp = gLevelSettings[1]; + if (gLevelSettings[15] >= 0) { + gGameCurrentEntrance = gLevelSettings[15]; } - if (D_80121250[temp + 8] >= 0) { - gGameCurrentCutscene = D_80121250[temp + 8]; + if (gLevelSettings[temp + 8] >= 0) { + gGameCurrentCutscene = gLevelSettings[temp + 8]; } - D_801234F8 = 1; + D_801234F8 = TRUE; } } void func_8006D968(s8 *arg0) { // Is arg0 LevelObjectEntry_Exit? s32 i; - if (sRenderContext != DRAW_UNK_04) { - D_80121250[0] = gPlayableMapId; + if (gGameMode != GAMEMODE_UNUSED_4) { + gLevelSettings[0] = gPlayableMapId; for (i = 0; i < 2; i++) { - D_80121250[i + 2] = arg0[i + 8]; //0x8-0x9 - destinationMapId - D_80121250[i + 4] = arg0[i + 10]; //0xA-0xB - overworldSpawnIndex - D_80121250[i + 6] = arg0[i + 12]; //0xC-0xD - ? - D_80121250[i + 8] = arg0[i + 14]; //0xE-0xF - ? - D_80121250[i + 10] = arg0[i + 18]; //0x12-0x13 - ? - D_80121250[i + 12] = arg0[i + 20]; //0x14-0x15 - ? + gLevelSettings[i + 2] = arg0[i + 8]; //0x8-0x9 - destinationMapId + gLevelSettings[i + 4] = arg0[i + 10]; //0xA-0xB - overworldSpawnIndex + gLevelSettings[i + 6] = arg0[i + 12]; //0xC-0xD - ? + gLevelSettings[i + 8] = arg0[i + 14]; //0xE-0xF - ? + gLevelSettings[i + 10] = arg0[i + 18]; //0x12-0x13 - ? + gLevelSettings[i + 12] = arg0[i + 20]; //0x14-0x15 - ? } - D_80121250[14] = arg0[22]; //0x16 - ? - D_80121250[15] = arg0[23]; //0x17 returnSpawnIndex + gLevelSettings[14] = arg0[22]; //0x16 - ? + gLevelSettings[15] = arg0[23]; //0x17 returnSpawnIndex D_801234FC = 1; } } /** - * Gets the render context from outside this file + * Returns the current game mode. */ -RenderContext get_render_context(void) { - return sRenderContext; +RenderContext get_game_mode(void) { + return gGameMode; } /** - * Unused function used to set the render context from outside this file + * Sets the current game mode. * Official Name: mainSetMode? */ -UNUSED void set_render_context(s32 changeTo) { - sRenderContext = changeTo; +UNUSED void set_game_mode(s32 changeTo) { + gGameMode = changeTo; } /** @@ -808,7 +814,7 @@ UNUSED void set_render_context(s32 changeTo) { */ void load_menu_with_level_background(s32 menuId, s32 levelId, s32 cutsceneId) { alloc_displaylist_heap(PLAYER_ONE); - sRenderContext = DRAW_MENU; + gGameMode = GAMEMODE_MENU; gRenderMenu = TRUE; set_sound_channel_volume(0, 32767); set_sound_channel_volume(1, 32767); @@ -837,9 +843,12 @@ void set_level_default_vehicle(Vehicle vehicleID) { gLevelDefaultVehicleID = vehicleID; } -void func_8006DB20(Vehicle vehicleId) { +/** + * Sets the vehicle option that the next level loaded for a menu may use. +*/ +void set_vehicle_id_for_menu(Vehicle vehicleId) { stubbed_printf("Swapping\n"); - D_8012351C = vehicleId; + gMenuVehicleID = vehicleId; } /** @@ -888,7 +897,7 @@ void unload_level_menu(void) { * In the tracks menu, this only runs if there's a track actively loaded. */ void update_menu_scene(s32 updateRate) { - if (get_thread30_level_id_to_load() == 0) { + if (get_thread30_level_id_to_load() == NULL) { func_80010994(updateRate); gParticlePtrList_flush(); func_8001BF20(); @@ -900,7 +909,11 @@ void update_menu_scene(s32 updateRate) { } } -void func_8006DCF8(s32 updateRate) { +/** + * Main function for handling behaviour in menus. + * Runs the menu code, with a simplified object update and scene rendering system. +*/ +void menu_logic_loop(s32 updateRate) { s32 menuLoopResult; s32 temp; s32 playerVehicle; @@ -917,7 +930,7 @@ void func_8006DCF8(s32 updateRate) { gRenderMenu = FALSE; return; } - if ((menuLoopResult != -1) && (menuLoopResult & 0x200)) { + if (menuLoopResult != -1 && menuLoopResult & MENU_RESULT_FLAGS_200) { unload_level_menu(); gCurrDisplayList = gDisplayLists[gSPTaskNum]; gDPFullSync(gCurrDisplayList++); @@ -926,54 +939,54 @@ void func_8006DCF8(s32 updateRate) { gLevelDefaultVehicleID = get_map_default_vehicle(gPlayableMapId); gGameCurrentEntrance = 0; gGameCurrentCutscene = CUTSCENE_ID_UNK_64; - sRenderContext = DRAW_GAME; + gGameMode = GAMEMODE_INGAME; gIsPaused = FALSE; gPostRaceViewPort = NULL; load_level_game(gPlayableMapId, gGameNumPlayers, gGameCurrentEntrance, gLevelDefaultVehicleID); safe_mark_write_save_file(get_save_file_index()); return; } - if ((menuLoopResult != -1) && (menuLoopResult & 0x100)) { + if (menuLoopResult != -1 && menuLoopResult & MENU_RESULT_FLAGS_100) { unload_level_game(); gIsPaused = FALSE; gPostRaceViewPort = NULL; switch (menuLoopResult & 0x7F) { - case 5: + case MENU_RESULT_TRACKS_MODE: load_menu_with_level_background(MENU_TRACK_SELECT, SPECIAL_MAP_ID_NO_LEVEL, 1); break; - case 14: + case MENU_RESULT_UNK14: gPlayableMapId = ASSET_LEVEL_CENTRALAREAHUB; gGameCurrentEntrance = 0; gGameCurrentCutscene = CUTSCENE_ID_UNK_64; - sRenderContext = DRAW_GAME; + gGameMode = GAMEMODE_INGAME; load_level_game(gPlayableMapId, gGameNumPlayers, gGameCurrentEntrance, gLevelDefaultVehicleID); safe_mark_write_save_file(get_save_file_index()); break; - case 1: + case MENU_RESULT_RETURN_TO_GAME: gGameCurrentEntrance = 0; - gPlayableMapId = D_80121250[0]; + gPlayableMapId = gLevelSettings[0]; gGameCurrentCutscene = CUTSCENE_ID_UNK_64; - sRenderContext = DRAW_GAME; - temp5 = D_80121250[1]; - if (D_80121250[15] >= 0) { - gGameCurrentEntrance = D_80121250[15]; + gGameMode = GAMEMODE_INGAME; + temp5 = gLevelSettings[1]; + if (gLevelSettings[15] >= 0) { + gGameCurrentEntrance = gLevelSettings[15]; } - temp = D_80121250[temp5 + 8]; + temp = gLevelSettings[temp5 + 8]; if (temp >= 0) { gGameCurrentCutscene = temp; } load_level_game(gPlayableMapId, gGameNumPlayers, gGameCurrentEntrance, gLevelDefaultVehicleID); safe_mark_write_save_file(get_save_file_index()); break; - case 2: - sRenderContext = DRAW_GAME; + case MENU_RESULT_UNK2: + gGameMode = GAMEMODE_INGAME; load_level_game(gPlayableMapId, gGameNumPlayers, gGameCurrentEntrance, gLevelDefaultVehicleID); break; - case 3: - sRenderContext = DRAW_GAME; - gPlayableMapId = D_80121250[0]; - gGameCurrentEntrance = D_80121250[15]; - gGameCurrentCutscene = D_80121250[D_80121250[1] + 8]; + case MENU_RESULT_UNK3: + gGameMode = GAMEMODE_INGAME; + gPlayableMapId = gLevelSettings[0]; + gGameCurrentEntrance = gLevelSettings[15]; + gGameCurrentCutscene = gLevelSettings[gLevelSettings[1] + 8]; gLevelDefaultVehicleID = get_map_default_vehicle(gPlayableMapId); load_level_game(gPlayableMapId, gGameNumPlayers, gGameCurrentEntrance, gLevelDefaultVehicleID); break; @@ -983,25 +996,25 @@ void func_8006DCF8(s32 updateRate) { } return; } - if ((menuLoopResult & 0x80) && (menuLoopResult != -1)) { + if (menuLoopResult & MENU_RESULT_FLAGS_80 && menuLoopResult != -1) { unload_level_menu(); gCurrDisplayList = gDisplayLists[gSPTaskNum]; gDPFullSync(gCurrDisplayList++); gSPEndDisplayList(gCurrDisplayList++); menuLoopResult &= 0x7f; - D_80121250[1] = menuLoopResult; - D_80121250[0] = gPlayableMapId; + gLevelSettings[1] = menuLoopResult; + gLevelSettings[0] = gPlayableMapId; - gPlayableMapId = D_80121250[menuLoopResult+2]; - gGameCurrentEntrance = D_80121250[menuLoopResult+4]; - sRenderContext = DRAW_GAME; - gGameCurrentCutscene = D_80121250[menuLoopResult+12]; - playerVehicle = get_player_selected_vehicle(0); + gPlayableMapId = gLevelSettings[menuLoopResult+2]; + gGameCurrentEntrance = gLevelSettings[menuLoopResult+4]; + gGameMode = GAMEMODE_INGAME; + gGameCurrentCutscene = gLevelSettings[menuLoopResult+12]; + playerVehicle = get_player_selected_vehicle(PLAYER_ONE); gGameNumPlayers = gSettingsPtr->gNumRacers - 1; load_level_game(gPlayableMapId, gGameNumPlayers, gGameCurrentEntrance, playerVehicle); D_801234FC = 0; - gLevelDefaultVehicleID = D_8012351C; + gLevelDefaultVehicleID = gMenuVehicleID; return; } if (menuLoopResult > 0) { @@ -1009,8 +1022,8 @@ void func_8006DCF8(s32 updateRate) { gCurrDisplayList = gDisplayLists[gSPTaskNum]; gDPFullSync(gCurrDisplayList++); gSPEndDisplayList(gCurrDisplayList++); - sRenderContext = DRAW_GAME; - func_8006CAE4(menuLoopResult, -1, gLevelDefaultVehicleID); + gGameMode = GAMEMODE_INGAME; + load_next_ingame_level(menuLoopResult, -1, gLevelDefaultVehicleID); if (gSettingsPtr->newGame && !is_in_tracks_mode()) { func_80000B28(); gSettingsPtr->newGame = FALSE; @@ -1018,6 +1031,10 @@ void func_8006DCF8(s32 updateRate) { } } +/** + * Loads a level, intended to be used in a menu. + * Skips loading many things, otherwise used in gameplay. +*/ void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId) { if (!gIsLoading) { unload_level_menu(); @@ -1036,6 +1053,10 @@ void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId) { gIsLoading = TRUE; } +/** + * Initialise global game settings data. + * Allocate space to accomodate it then set the start points for each data point. +*/ void calc_and_alloc_heap_for_settings(void) { s32 dataSize; u32 sizes[15]; @@ -1077,7 +1098,7 @@ void calc_and_alloc_heap_for_settings(void) { gSettingsPtr->courseTimesPtr[0] = (u16 *)((u8 *)gSettingsPtr + sizes[11]); gSettingsPtr->courseTimesPtr[1] = (u16 *)((u8 *)gSettingsPtr + sizes[12]); gSettingsPtr->courseTimesPtr[2] = (u16 *)((u8 *)gSettingsPtr + sizes[13]); - gSettingsPtr->unk4C = (Settings4C *) &D_80121250; + gSettingsPtr->unk4C = (Settings4C *) &gLevelSettings; gSaveDataFlags = // Set bits 0/1/2/8 and wipe out all others SAVE_DATA_FLAG_READ_FLAP_TIMES | SAVE_DATA_FLAG_READ_COURSE_TIMES | @@ -1085,7 +1106,11 @@ void calc_and_alloc_heap_for_settings(void) { SAVE_DATA_FLAG_READ_EEPROM_SETTINGS; } -void func_8006E5BC(void) { +/** + * Set the init values for each racer based on which character they are and which player they are. + * Then reset race status. +*/ +void init_racer_headers(void) { s32 i, j; gSettingsPtr->gNumRacers = get_number_of_active_players(); for (i = 0; i < 8; i++) { @@ -1282,7 +1307,7 @@ void force_mark_write_save_file(s32 saveFileIndex) { * Official Name: mainSaveGame2 */ void safe_mark_write_save_file(s32 saveFileIndex) { - if (sRenderContext == DRAW_GAME && !is_in_tracks_mode()) { + if (gGameMode == GAMEMODE_INGAME && !is_in_tracks_mode()) { gSaveDataFlags &= ~SAVE_DATA_FLAG_WRITE_SAVE_FILE_NUMBER_BITS; //Wipe out bits 10 and 11 gSaveDataFlags |= (SAVE_DATA_FLAG_WRITE_SAVE_DATA | ((saveFileIndex & 3) << 10));; //Set bit 6 and place saveFileIndex into bits 10 and 11 } @@ -1475,8 +1500,11 @@ void begin_level_teleport(s32 levelID) { } } -void func_8006F388(u8 time) { - D_800DD398 = time; +/** + * Set the nunber of frames to disallow pausing for. +*/ +void set_pause_lockout_timer(u8 time) { + gPauseLockTimer = time; } void func_8006F398(void) { diff --git a/src/thread3_main.h b/src/thread3_main.h index 66e44d62..c41a961d 100644 --- a/src/thread3_main.h +++ b/src/thread3_main.h @@ -7,13 +7,13 @@ #include "game.h" typedef enum RenderContext { - DRAW_INTRO = -1, - DRAW_GAME, - DRAW_MENU, - DRAW_UNK_02, - DRAW_UNK_03, - DRAW_UNK_04, - DRAW_CRASH_SCREEN + GAMEMODE_INTRO = -1, + GAMEMODE_INGAME, + GAMEMODE_MENU, + GAMEMODE_UNUSED_2, + GAMEMODE_UNUSED_3, + GAMEMODE_UNUSED_4, + GAMEMODE_LOCKUP } RenderContext; enum LevelLoadType { @@ -24,6 +24,54 @@ enum LevelLoadType { LEVEL_LOAD_FUTURE_FUN_LAND, }; +enum LevelLoadContext { + LEVEL_CONTEXT_NONE, + LEVEL_CONTEXT_TRACK_SELECT, + LEVEL_CONTEXT_RESULTS, + LEVEL_CONTEXT_TROPHY_ROUND, + LEVEL_CONTEXT_TROPHY_RESULTS, + LEVEL_CONTEXT_UNUSED, + LEVEL_CONTEXT_CHARACTER_SELECT, + LEVEL_CONTEXT_UNK7, + LEVEL_CONTEXT_CREDITS +}; + +enum MenuResult { + MENU_RESULT_CONTINUE, + MENU_RESULT_RETURN_TO_GAME, + MENU_RESULT_UNK2, + MENU_RESULT_UNK3, + MENU_RESULT_UNK4, + MENU_RESULT_TRACKS_MODE, + MENU_RESULT_UNK6, + MENU_RESULT_UNK7, + MENU_RESULT_UNK8, + MENU_RESULT_UNK9, + MENU_RESULT_UNK10, + MENU_RESULT_UNK11, + MENU_RESULT_UNK12, + MENU_RESULT_UNK13, + MENU_RESULT_UNK14, + MENU_RESULT_UNK15, + MENU_RESULT_UNK16, + MENU_RESULT_UNK17, + MENU_RESULT_UNK18, +}; + +enum MenuResultFlags { + MENU_RESULT_FLAGS_0, + MENU_RESULT_FLAGS_1 = (1 << 0), + MENU_RESULT_FLAGS_2 = (1 << 1), + MENU_RESULT_FLAGS_4 = (1 << 2), + MENU_RESULT_FLAGS_8 = (1 << 3), + MENU_RESULT_FLAGS_10 = (1 << 4), + MENU_RESULT_FLAGS_20 = (1 << 5), + MENU_RESULT_FLAGS_40 = (1 << 6), + MENU_RESULT_FLAGS_80 = (1 << 7), + MENU_RESULT_FLAGS_100 = (1 << 8), + MENU_RESULT_FLAGS_200 = (1 << 9), +}; + /** * Bit 00: Read Eeprom Data flap times * Bit 01: Read Eeprom Data course times @@ -62,24 +110,24 @@ extern s32 gSaveDataFlags; void thread3_main(UNUSED void *unused); void init_game(void); void main_game_loop(void); -void func_8006CAE4(s32 numPlayers, s32 trackID, Vehicle vehicle); +void load_next_ingame_level(s32 numPlayers, s32 trackID, Vehicle vehicle); void load_level_game(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicleId); void unload_level_game(void); -void func_8006D8A4(void); +void set_drumstick_unlock_transition(void); void func_8006D8E0(s32 arg0); void func_8006D8F0(s32 arg0); void func_8006D968(s8 *arg0); -RenderContext get_render_context(void); +RenderContext get_game_mode(void); void load_menu_with_level_background(s32 menuId, s32 levelId, s32 cutsceneId); void set_level_default_vehicle(Vehicle arg0); -void func_8006DB20(Vehicle vehicleId); +void set_vehicle_id_for_menu(Vehicle vehicleId); Vehicle get_level_default_vehicle(void); void load_level_menu(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicleId, s32 cutsceneId); void unload_level_menu(void); void update_menu_scene(s32 arg0); void load_level_for_menu(s32 levelId, s32 numberOfPlayers, s32 cutsceneId); void calc_and_alloc_heap_for_settings(void); -void func_8006E5BC(void); +void init_racer_headers(void); void func_8006E770(Settings *settings, s32 arg1); void func_8006E994(Settings *settings); void func_8006EA58(void); @@ -107,7 +155,7 @@ void func_8006F20C(void); void begin_trophy_race_teleport(void); void begin_lighthouse_rocket_cutscene(void); void begin_level_teleport(s32 arg0); -void func_8006F388(u8 arg0); +void set_pause_lockout_timer(u8 time); void func_8006F398(void); void set_frame_blackout_timer(void); void pre_intro_loop(void); @@ -118,6 +166,6 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl void init_level_globals(void); void alloc_displaylist_heap(s32 numberOfPlayers); void default_alloc_displaylist_heap(void); -void func_8006DCF8(s32 updateRate); +void menu_logic_loop(s32 updateRate); #endif diff --git a/src/tracks.c b/src/tracks.c index 966076f8..c0e5265c 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -71,11 +71,11 @@ ObjectSegment *gSceneActiveCamera; s32 gSceneCurrentPlayerID; Object *gSkydomeSegment; UNUSED s32 gIsNearCurrBBox; // Set to true if the current visible segment is close to the camera. Never actually used though. -s32 D_8011B0C0; -s32 D_8011B0C4; -s32 D_8011B0C8; +UNUSED s32 D_8011B0C0; // Set to 0 then never read. +UNUSED s32 gDisableShadows; // Never not 0. +s32 gShadowHeapFlip; // Flips between 0 and 1 to prevent incorrect access between frames. s32 D_8011B0CC; -s32 D_8011B0D0; +s32 gShadowIndex; s32 gSceneStartSegment; s32 D_8011B0D8; s32 gSceneRenderSkyDome; @@ -114,7 +114,7 @@ f32 D_8011D0C8; s16 D_8011D0CC; s16 D_8011D0CE; s16 D_8011D0D0; -f32 D_8011D0D4; +f32 gShadowOpacity; f32 D_8011D0D8; f32 D_8011D0DC; f32 D_8011D0E0; @@ -135,14 +135,14 @@ s32 *gLevelModelTable; UNUSED f32 gPrevCameraX; // Set but never read UNUSED f32 gPrevCameraY; // Set but never read UNUSED f32 gPrevCameraZ; // Set but never read -Triangle *D_8011D320[4]; -Triangle *D_8011D330; -s32 D_8011D334; -Vertex *D_8011D338[4]; -Vertex *D_8011D348; -s32 D_8011D34C; -DrawTexture *D_8011D350[4]; -DrawTexture *D_8011D360; +Triangle *gShadowHeapTris[4]; +Triangle *gCurrentShadowTris; +UNUSED s32 D_8011D334; +Vertex *gShadowHeapVerts[4]; +Vertex *gCurrentShadowVerts; +UNUSED s32 D_8011D34C; +DrawTexture *gShadowHeapTextures[4]; +DrawTexture *gCurrentShadowTexture; s32 D_8011D364; s32 D_8011D368; //xOffset? s32 D_8011D36C; //yOffset? @@ -187,8 +187,11 @@ s32 set_scene_viewport_num(s32 numPorts) { return 0; } -// track_init -void func_800249F0(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicle, u32 entranceId, u32 collectables, u32 arg6) { +/** + * Initialises the level. + * Allocates RAM to load generate the level geometry, spawn objects and generate shadows. +*/ +void init_track(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicle, u32 entranceId, u32 collectables, u32 arg6) { s32 i; gCurrentLevelHeader2 = get_current_level_header(); @@ -245,19 +248,19 @@ void func_800249F0(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicl numberOfPlayers = gScenePlayerViewports; gAntiAliasing = 0; - for (i = 0; i < ARRAY_COUNT(D_8011D350); i++) { - D_8011D350[i] = (DrawTexture *) allocate_from_main_pool_safe(3200, COLOUR_TAG_YELLOW); - D_8011D320[i] = (Triangle *) allocate_from_main_pool_safe(12800, COLOUR_TAG_YELLOW); - D_8011D338[i] = (Vertex *) allocate_from_main_pool_safe(20000, COLOUR_TAG_YELLOW); + for (i = 0; i < ARRAY_COUNT(gShadowHeapTextures); i++) { + gShadowHeapTextures[i] = (DrawTexture *) allocate_from_main_pool_safe(sizeof(DrawTexture) * 400, COLOUR_TAG_YELLOW); + gShadowHeapTris[i] = (Triangle *) allocate_from_main_pool_safe(sizeof(Triangle) * 800, COLOUR_TAG_YELLOW); + gShadowHeapVerts[i] = (Vertex *) allocate_from_main_pool_safe(sizeof(Vertex) * 2000, COLOUR_TAG_YELLOW); } - D_8011B0C8 = 0; - func_8002D8DC(1, 1, 0); - func_8002D8DC(2, 2, 0); - D_8011B0C8 = 1; - func_8002D8DC(1, 1, 0); - func_8002D8DC(2, 2, 0); - D_8011B0C8 = 0; + gShadowHeapFlip = 0; + update_shadows(SHADOW_SCENERY, SHADOW_SCENERY, LOGIC_NULL); + update_shadows(SHADOW_ACTORS, SHADOW_ACTORS, LOGIC_NULL); + gShadowHeapFlip = 1; + update_shadows(SHADOW_SCENERY, SHADOW_SCENERY, LOGIC_NULL); + update_shadows(SHADOW_ACTORS, SHADOW_ACTORS, LOGIC_NULL); + gShadowHeapFlip = 0; if (gCurrentLevelHeader2->unkB7) { D_8011B0E1 = gCurrentLevelHeader2->unkB4; D_8011B0E2 = gCurrentLevelHeader2->unkB5; @@ -284,9 +287,9 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, TriangleList **tris, gSceneCurrVertexList = *vtx; gSceneCurrTriList = *tris; gSceneRenderSkyDome = TRUE; - D_8011B0C4 = 0; + gDisableShadows = FALSE; D_8011B0C0 = 0; - gIsNearCurrBBox = 0; + gIsNearCurrBBox = FALSE; numViewports = set_active_viewports_and_max(gScenePlayerViewports); if (is_game_paused()) { tempUpdateRate = 0; @@ -296,13 +299,12 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, TriangleList **tris, if (D_8011D384) { func_800B9C18(tempUpdateRate); } - func_8002D8DC(2, 2, updateRate); + update_shadows(SHADOW_ACTORS, SHADOW_ACTORS, updateRate); for (i = 0; i < 7; i++) { if ((s32) gCurrentLevelHeader2->unk74[i] != -1) { update_colour_cycle(gCurrentLevelHeader2->unk74[i], tempUpdateRate); } } - if (gCurrentLevelHeader2->pulseLightData != (PulsatingLightData *) -1) { update_pulsating_light_data(gCurrentLevelHeader2->pulseLightData, tempUpdateRate); } @@ -339,7 +341,7 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, TriangleList **tris, update_fog(numViewports, tempUpdateRate); func_800AF404(tempUpdateRate); if (gCurrentLevelModel->numberOfAnimatedTextures > 0) { - func_80027E24(tempUpdateRate); + animate_level_textures(tempUpdateRate); } for (j = gSceneCurrentPlayerID = 0; j < numViewports; gSceneCurrentPlayerID++, j = gSceneCurrentPlayerID) { if (gCurrentLevelHeader2 && !gCurrentLevelHeader2 && !gCurrentLevelHeader2) {} // Fakematch @@ -421,7 +423,7 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, TriangleList **tris, func_800682AC(&gSceneCurrDisplayList); gDPPipeSync(gSceneCurrDisplayList++); gDkrDisableBillboard(gSceneCurrDisplayList++); - D_8011B0C8 = 1 - D_8011B0C8; + gShadowHeapFlip = 1 - gShadowHeapFlip; *dList = gSceneCurrDisplayList; *mtx = gSceneCurrMatrix; *vtx = gSceneCurrVertexList; @@ -621,7 +623,10 @@ GLOBAL_ASM("asm/non_matchings/tracks/func_80027184.s") GLOBAL_ASM("asm/non_matchings/tracks/func_80027568.s") GLOBAL_ASM("asm/non_matchings/tracks/func_800278E8.s") -void func_80027E24(s32 updateRate) { +/** + * Handle the flipbook effect for level geometry textures. +*/ +void animate_level_textures(s32 updateRate) { s32 segmentNumber, batchNumber; LevelModelSegment *segment; TextureHeader *texture; @@ -635,7 +640,7 @@ void func_80027E24(s32 updateRate) { if (batch[batchNumber].flags & BATCH_FLAGS_TEXTURE_ANIM) { if (batch[batchNumber].textureIndex != 0xFF) { texture = gCurrentLevelModel->textures[batch[batchNumber].textureIndex].texture; - if ((texture->numOfTextures != 0x100) && (texture->frameAdvanceDelay != 0)) { + if (texture->numOfTextures != 0x100 && texture->frameAdvanceDelay) { temp = batch[batchNumber].unk7 << 6; if (batch[batchNumber].flags & BATCH_FLAGS_UNK80000000) { temp |= batch[batchNumber].unk6; @@ -686,6 +691,7 @@ void set_skydome_visbility(s32 renderSky) { gSceneRenderSkyDome = renderSky; } +// init_skydome //https://decomp.me/scratch/jmbc1 GLOBAL_ASM("asm/non_matchings/tracks/func_80028050.s") @@ -1070,10 +1076,10 @@ void render_level_segment(s32 segmentId, s32 nonOpaque) { textureFlags = texture->flags; } batchFlags |= BATCH_FLAGS_UNK00000008 | BATCH_FLAGS_UNK00000002; - if (!(batchFlags & BATCH_FLAGS_DEPTH_WRITE) && !(batchFlags & BATCH_FLAGS_UNK00000800)) { + if (!(batchFlags & BATCH_FLAGS_DEPTH_WRITE) && !(batchFlags & BATCH_FLAGS_RECEIVE_SHADOWS)) { batchFlags |= gAntiAliasing; } - if ((!(textureFlags & RENDER_SEMI_TRANSPARENT) && !(batchFlags & BATCH_FLAGS_WATER)) || batchFlags & BATCH_FLAGS_UNK00000800) { + if ((!(textureFlags & RENDER_SEMI_TRANSPARENT) && !(batchFlags & BATCH_FLAGS_WATER)) || batchFlags & BATCH_FLAGS_RECEIVE_SHADOWS) { renderBatch = TRUE; } if (nonOpaque) { @@ -1643,6 +1649,7 @@ s32 func_8002B9BC(Object *obj, f32 *arg1, f32 *arg2, s32 arg3) { GLOBAL_ASM("asm/non_matchings/tracks/func_8002BAB0.s") #ifdef NON_MATCHING +// generate_track // Loads a level track from the index in the models table. // Has regalloc issues. void func_8002C0C4(s32 modelId) { @@ -1786,9 +1793,9 @@ void free_track(void) { free_from_memory_pool(D_8011D374); free_sprite((Sprite *) gCurrentLevelModel->minimapSpriteIndex); for (i = 0; i < MAXCONTROLLERS; i++) { - free_from_memory_pool(D_8011D350[i]); - free_from_memory_pool(D_8011D320[i]); - free_from_memory_pool(D_8011D338[i]); + free_from_memory_pool(gShadowHeapTextures[i]); + free_from_memory_pool(gShadowHeapTris[i]); + free_from_memory_pool(gShadowHeapVerts[i]); } func_800257D0(); if (gSkydomeSegment != NULL) { @@ -1833,7 +1840,7 @@ void func_8002C954(LevelModelSegment *segment, LevelModelSegmentBoundingBox *bbo minZ = 32000; minX = 32000; - for (l = 0; l != 3; l++) { + for (l = 0; l < 3; l++) { vert = &segment->vertices[segment->triangles[j].verticesArray[l + 1] + vertsOffset]; k = vert->x; vertX = k; // This is probably fake, but it matches. vertZ = vert->z; @@ -1850,13 +1857,13 @@ void func_8002C954(LevelModelSegment *segment, LevelModelSegmentBoundingBox *bbo minZ = vertZ; } } - boxDelta = ( (bbox->x2 - bbox->x1) >> 3) + 1; + boxDelta = ((bbox->x2 - bbox->x1) >> 3) + 1; bit = 1; boxMax = boxDelta + bbox->x1; boxMin = bbox->x1; val = 0; for (k = 0; k < 8; k++) { - if ((boxMax >= minX) && (maxX >= boxMin)) { + if (boxMax >= minX && maxX >= boxMin) { val |= bit; } boxMax += boxDelta; @@ -1867,7 +1874,7 @@ void func_8002C954(LevelModelSegment *segment, LevelModelSegmentBoundingBox *bbo boxMax = boxDelta + bbox->z1; boxMin = bbox->z1; for (k = 0; k < 8; k++) { - if ((boxMax >= minZ) && (maxZ >= boxMin)) { + if (boxMax >= minZ && maxZ >= boxMin) { val |= bit; } boxMax += boxDelta; @@ -1911,47 +1918,47 @@ void trackMakeAbsolute(unk8002D30C_a0 *arg0, s32 arg1) { */ void render_object_shadow(Object *obj, ShadowData *shadow) { s32 i; - s32 temp_a0; - s32 temp_a3; + s32 numVerts; + s32 numTris; Vertex *vtx; Triangle *tri; s32 flags; - UNUSED s32 temp2; - s32 temp3; - s32 new_var; - s32 new_var2; - s32 someAlpha; + UNUSED s32 offsetX_2; + s32 offsetY_2; + s32 offsetY; + s32 offsetX; + s32 alpha; - if (obj->segment.header->unk32 != 0) { - if (shadow->unk8 != -1 && D_8011B0C4 == 0) { - D_8011B0CC = D_8011B0C8; - if (obj->segment.header->unk32 == 1) { + if (obj->segment.header->shadowGroup) { + if (shadow->meshStart != -1 && gDisableShadows == FALSE) { + D_8011B0CC = gShadowHeapFlip; + if (obj->segment.header->shadowGroup == SHADOW_SCENERY) { D_8011B0CC += 2; } - i = shadow->unk8; - D_8011D360 = (DrawTexture *) D_8011D350[D_8011B0CC]; - D_8011D330 = (Triangle *) D_8011D320[D_8011B0CC]; - D_8011D348 = (Vertex *) D_8011D338[D_8011B0CC]; - someAlpha = D_8011D348[D_8011D360[i].yOffset].a; + i = shadow->meshStart; + gCurrentShadowTexture = gShadowHeapTextures[D_8011B0CC]; + gCurrentShadowTris = gShadowHeapTris[D_8011B0CC]; + gCurrentShadowVerts = gShadowHeapVerts[D_8011B0CC]; + alpha = gCurrentShadowVerts[gCurrentShadowTexture[i].yOffset].a; flags = RENDER_FOG_ACTIVE | RENDER_Z_COMPARE; - if (someAlpha == 0 || obj->segment.object.opacity == 0) { - i = shadow->unkA; - } else if (someAlpha != 255 || obj->segment.object.opacity != 255) { + if (alpha == 0 || obj->segment.object.opacity == 0) { + i = shadow->meshEnd; // It'd be easier to just return... + } else if (alpha != 255 || obj->segment.object.opacity != 255) { flags = RENDER_FOG_ACTIVE | RENDER_SEMI_TRANSPARENT | RENDER_Z_COMPARE; - someAlpha = (obj->segment.object.opacity * someAlpha) >> 8; - gDPSetPrimColor(gSceneCurrDisplayList++, 0, 0, 255, 255, 255, someAlpha); + alpha = (obj->segment.object.opacity * alpha) >> 8; + gDPSetPrimColor(gSceneCurrDisplayList++, 0, 0, 255, 255, 255, alpha); } - while (i < shadow->unkA) { - load_and_set_texture_no_offset(&gSceneCurrDisplayList, D_8011D360[i].texture, flags); + while (i < shadow->meshEnd) { + load_and_set_texture_no_offset(&gSceneCurrDisplayList, gCurrentShadowTexture[i].texture, flags); // I hope we can clean this part up. - temp2 = new_var2 = D_8011D360[i].xOffset; // Fakematch - temp3 = new_var = D_8011D360[i].yOffset; - temp_a3 = D_8011D360[i+1].xOffset - new_var2; - temp_a0 = D_8011D360[i+1].yOffset - new_var; - tri = (Triangle *) &D_8011D330[new_var2]; - vtx = (Vertex *) &D_8011D348[temp3]; - gSPVertexDKR(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(vtx), temp_a0, 0); - gSPPolygon(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(tri), temp_a3, 1); + offsetX_2 = offsetX = gCurrentShadowTexture[i].xOffset; // Fakematch + offsetY_2 = offsetY = gCurrentShadowTexture[i].yOffset; + numTris = gCurrentShadowTexture[i + 1].xOffset - offsetX; + numVerts = gCurrentShadowTexture[i + 1].yOffset - offsetY; + tri = &gCurrentShadowTris[offsetX]; + vtx = &gCurrentShadowVerts[offsetY_2]; + gSPVertexDKR(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(vtx), numVerts, 0); + gSPPolygon(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(tri), numTris, 1); i++; } @@ -1968,152 +1975,158 @@ void render_object_shadow(Object *obj, ShadowData *shadow) { */ void render_object_water_effects(Object *obj, WaterEffect *effect) { s32 i; - s32 temp_a0; - s32 temp_a3; + s32 numVerts; + s32 numTris; Vertex *vtx; Triangle *tri; s32 flags; - UNUSED s32 temp2; - UNUSED s32 temp3; + UNUSED s32 offsetX; + UNUSED s32 offsetY; - if (obj->segment.header->unk36 != 0) { - if ((effect->unk8 != -1) && (D_8011B0C4 == 0)) { - D_8011B0D0 = D_8011B0C8; - i = effect->unk8; - if (obj->segment.header->unk36 == 1) { - D_8011B0D0 = D_8011B0C8; - D_8011B0D0 += 2; + if (obj->segment.header->waterEffectGroup) { + if (effect->meshStart != -1 && gDisableShadows == FALSE) { + gShadowIndex = gShadowHeapFlip; + i = effect->meshStart; + if (obj->segment.header->waterEffectGroup == SHADOW_SCENERY) { + gShadowIndex = gShadowHeapFlip; + gShadowIndex += 2; if (get_distance_to_active_camera(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position) > 768.0f) { - i = effect->unkA; + i = effect->meshEnd; // Just return. } } flags = RENDER_FOG_ACTIVE | RENDER_Z_COMPARE; - D_8011D360 = (DrawTexture *) D_8011D350[D_8011B0D0]; - D_8011D330 = (Triangle *) D_8011D320[D_8011B0D0]; - D_8011D348 = (Vertex *) D_8011D338[D_8011B0D0]; - while (i < effect->unkA) { - load_and_set_texture_no_offset(&gSceneCurrDisplayList, D_8011D360[i].texture, flags); - temp2 = D_8011D360[i].xOffset; // Fakematch - temp3 = D_8011D360[i].yOffset; // Fakematch - temp_a3 = D_8011D360[i+1].xOffset - D_8011D360[i].xOffset; - temp_a0 = D_8011D360[i+1].yOffset - D_8011D360[i].yOffset; - tri = &((Triangle *) D_8011D330)[D_8011D360[i].xOffset]; - vtx = &((Vertex *) D_8011D348)[D_8011D360[i].yOffset]; - gSPVertexDKR(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(vtx), temp_a0, 0); - gSPPolygon(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(tri), temp_a3, 1); + gCurrentShadowTexture = gShadowHeapTextures[gShadowIndex]; + gCurrentShadowTris = gShadowHeapTris[gShadowIndex]; + gCurrentShadowVerts = gShadowHeapVerts[gShadowIndex]; + while (i < effect->meshEnd) { + load_and_set_texture_no_offset(&gSceneCurrDisplayList, gCurrentShadowTexture[i].texture, flags); + offsetX = gCurrentShadowTexture[i].xOffset; // Fakematch + offsetY = gCurrentShadowTexture[i].yOffset; // Fakematch + numTris = gCurrentShadowTexture[i + 1].xOffset - gCurrentShadowTexture[i].xOffset; + numVerts = gCurrentShadowTexture[i + 1].yOffset - gCurrentShadowTexture[i].yOffset; + tri = &gCurrentShadowTris[gCurrentShadowTexture[i].xOffset]; + vtx = &gCurrentShadowVerts[gCurrentShadowTexture[i].yOffset]; + gSPVertexDKR(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(vtx), numVerts, 0); + gSPPolygon(gSceneCurrDisplayList++, OS_K0_TO_PHYSICAL(tri), numTris, 1); i++; } } } } -void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { - s32 sp94; - s32 sp90; +/** + * Updates shadow and water effect properties for each relevant object in the scene. + * The first argument decides whether to update shadows for static objects or moving objects. + * Checks how many players there are before deciding whether to cast a shadow for that object. +*/ +void update_shadows(s32 group, s32 waterGroup, s32 updateRate) { + s32 objIndex; + s32 objectCount; Object *obj; ObjectHeader *objHeader; f32 dist; s32 radius; s32 numViewports; Object **objects; - s32 var_a0; - TextureHeader* shadowTex; + s32 skipShading; + TextureHeader* waterTex; ShadowData *shadow; - WaterEffect *obj58; + WaterEffect *waterEffect; s32 playerIndex; - D_8011B0CC = D_8011B0C8; - if (arg0 == 1) { + D_8011B0CC = gShadowHeapFlip; + if (group == SHADOW_SCENERY) { D_8011B0CC += 2; } - D_8011D330 = (Triangle *) D_8011D320[D_8011B0CC]; - D_8011D348 = (Vertex *) D_8011D338[D_8011B0CC]; - D_8011D360 = (DrawTexture *) D_8011D350[D_8011B0CC]; + gCurrentShadowTris = (Triangle *) gShadowHeapTris[D_8011B0CC]; + gCurrentShadowVerts = (Vertex *) gShadowHeapVerts[D_8011B0CC]; + gCurrentShadowTexture = (DrawTexture *) gShadowHeapTextures[D_8011B0CC]; D_8011D364 = 0; D_8011D368 = 0; D_8011D36C = 0; numViewports = get_viewport_count(); - objects = objGetObjList(&sp94, &sp90); - while (sp94 < sp90) { - obj = objects[sp94]; + objects = objGetObjList(&objIndex, &objectCount); + while (objIndex < objectCount) { + obj = objects[objIndex]; objHeader = obj->segment.header; - obj58 = obj->waterEffect; + waterEffect = obj->waterEffect; shadow = obj->shadow; - sp94 += 1; - if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { - if (shadow != NULL && shadow->scale > 0.0f && arg0 == objHeader->unk32) { - shadow->unk8 = -1; - } - if (obj->segment.trans.flags & OBJ_FLAGS_INVISIBLE) { - shadow = NULL; - } - if ((shadow != NULL && objHeader->unk32 == 2) || (obj58 != NULL && objHeader->unk36 == 2)) { - dist = get_distance_to_active_camera(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); + objIndex += 1; + if ((obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { + continue; + } + if (shadow != NULL && shadow->scale > 0.0f && group == objHeader->shadowGroup) { + shadow->meshStart = -1; + } + if (obj->segment.trans.flags & OBJ_FLAGS_INVISIBLE) { + shadow = NULL; + } + if ((shadow != NULL && objHeader->shadowGroup == SHADOW_ACTORS) || (waterEffect != NULL && objHeader->waterEffectGroup == SHADOW_ACTORS)) { + dist = get_distance_to_active_camera(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); } else { - dist = 0; - } - if (shadow != NULL && shadow->scale > 0.0f && arg0 == objHeader->unk32) { - D_8011D0D4 = 1.0f; - shadow->unk8 = -1; - var_a0 = FALSE; - if (objHeader->unk32 == 2 && numViewports > ONE_PLAYER && numViewports <= FOUR_PLAYERS) { - if (obj->behaviorId == BHV_RACER) { - playerIndex = obj->unk64->racer.playerIndex; - if (playerIndex != PLAYER_COMPUTER) { - func_8002E234(obj, FALSE); - var_a0 = TRUE; - } - } else if (obj->behaviorId == BHV_WEAPON) { + dist = 0; + } + if (shadow != NULL && shadow->scale > 0.0f && group == objHeader->shadowGroup) { + gShadowOpacity = 1.0f; + shadow->meshStart = -1; + skipShading = FALSE; + if (objHeader->shadowGroup == SHADOW_ACTORS && numViewports > ONE_PLAYER && numViewports <= FOUR_PLAYERS) { + if (obj->behaviorId == BHV_RACER) { + playerIndex = obj->unk64->racer.playerIndex; + if (playerIndex != PLAYER_COMPUTER) { func_8002E234(obj, FALSE); - var_a0 = TRUE; - } - } else { - radius = objHeader->unk4A; - if (dist < radius) { - if (objHeader->unk4C < dist) { - D_8011D0D4 = (radius - dist) / ( radius - objHeader->unk4C); - } - func_8002E234(obj, FALSE); - var_a0 = TRUE; + skipShading = TRUE; } + } else if (obj->behaviorId == BHV_WEAPON) { + func_8002E234(obj, FALSE); + skipShading = TRUE; } - if ((!var_a0) && (obj->shading != NULL)) { - func_8002DE30(obj); + } else { + radius = objHeader->unk4A; + if (dist < radius) { + if (objHeader->unk4C < dist) { + gShadowOpacity = (radius - dist) / ( radius - objHeader->unk4C); + } + func_8002E234(obj, FALSE); + skipShading = TRUE; } } - if (obj58 != NULL && obj58->scale > 0.0f && arg1 == objHeader->unk36) { - obj58->unk8 = -1; - D_8011D0D4 = 1.0f; - shadowTex = obj58->texture; - if (shadowTex != NULL && updateRate != 0 && shadowTex->numOfTextures != 0x100) { - obj58->unkC += obj58->unkE; - while (shadowTex->numOfTextures < obj58->unkC) { - obj58->unkC -= shadowTex->numOfTextures; - } - } + if (skipShading == FALSE && obj->shading != NULL) { + func_8002DE30(obj); + } + } + if (waterEffect != NULL && waterEffect->scale > 0.0f && waterGroup == objHeader->waterEffectGroup) { + waterEffect->meshStart = -1; + gShadowOpacity = 1.0f; + waterTex = waterEffect->texture; + if (waterTex != NULL && updateRate && waterTex->numOfTextures != 0x100) { + waterEffect->textureFrame += waterEffect->animationSpeed; + while (waterTex->numOfTextures < waterEffect->textureFrame) { + waterEffect->textureFrame -= waterTex->numOfTextures; + } + } - if (objHeader->unk32 == 2 && numViewports > ONE_PLAYER && numViewports <= FOUR_PLAYERS) { - if (obj->behaviorId == BHV_RACER) { - playerIndex = obj->unk64->racer.playerIndex; - if (playerIndex != PLAYER_COMPUTER) { - func_8002E234(obj, TRUE); - } - } else if (obj->behaviorId == BHV_WEAPON) { + if (objHeader->shadowGroup == SHADOW_ACTORS && numViewports > ONE_PLAYER && numViewports <= FOUR_PLAYERS) { + if (obj->behaviorId == BHV_RACER) { + playerIndex = obj->unk64->racer.playerIndex; + if (playerIndex != PLAYER_COMPUTER) { func_8002E234(obj, TRUE); } - } else { - if (dist < objHeader->unk4A) { - if (objHeader->unk4C < dist) { - D_8011D0D4 = (objHeader->unk4A - dist) / (objHeader->unk4A - objHeader->unk4C); - } - func_8002E234(obj, TRUE); + } else if (obj->behaviorId == BHV_WEAPON) { + func_8002E234(obj, TRUE); + } + } else { + if (dist < objHeader->unk4A) { + if (objHeader->unk4C < dist) { + gShadowOpacity = (objHeader->unk4A - dist) / (objHeader->unk4A - objHeader->unk4C); } + func_8002E234(obj, TRUE); } } } } - D_8011D360[D_8011D364].xOffset = D_8011D368; - D_8011D360[D_8011D364].yOffset = D_8011D36C; + gCurrentShadowTexture[D_8011D364].xOffset = D_8011D368; + gCurrentShadowTexture[D_8011D364].yOffset = D_8011D36C; } void func_8002DE30(Object *obj) { @@ -2144,8 +2157,8 @@ void func_8002DE30(Object *obj) { ); block = &gCurrentLevelModel->segments[blockId]; for(i = 0; i < block->numberOfBatches && !foundResult; i++) { - if (!(block->batches[i].flags & (BATCH_FLAGS_HIDDEN | BATCH_FLAGS_UNK00000800 | BATCH_FLAGS_WATER | BATCH_FLAGS_FORCE_NO_SHADOWS))) { - batchFlags = (block->batches[i].flags >> 0x13) & 7; + if (!(block->batches[i].flags & (BATCH_FLAGS_HIDDEN | BATCH_FLAGS_RECEIVE_SHADOWS | BATCH_FLAGS_WATER | BATCH_FLAGS_FORCE_NO_SHADOWS))) { + batchFlags = (block->batches[i].flags >> 19) & (BATCH_FLAGS_UNK00000001 | BATCH_FLAGS_UNK00000002 | BATCH_FLAGS_UNK00000004); vertices = &block->vertices[block->batches[i].verticesOffset]; for(j = block->batches[i].facesOffset; j < block->batches[i+1].facesOffset && !foundResult; j++) { blockId = block->unk10[j] & var_t3; @@ -2181,6 +2194,7 @@ void func_8002DE30(Object *obj) { } } +// Generate shadow #ifdef NON_EQUIVALENT void func_8002E234(Object *obj, s32 bool) { s32 *inSegs; @@ -2213,8 +2227,8 @@ void func_8002E234(Object *obj, s32 bool) { if (bool) { D_8011D0B8 = 0; - obj->waterEffect->unk8 = D_8011D364; - D_8011D0C0 = func_8007B46C(obj->waterEffect->texture, obj->waterEffect->unkC << 8); + obj->waterEffect->meshStart = D_8011D364; + D_8011D0C0 = func_8007B46C(obj->waterEffect->texture, obj->waterEffect->textureFrame << 8); D_8011D0CE = obj->segment.header->unk48 + yPos; D_8011D0CC = obj->segment.header->unk46 + yPos; if ((D_8011D384 == 0) || ((get_viewport_count() <= 0))) { @@ -2225,7 +2239,7 @@ void func_8002E234(Object *obj, s32 bool) { D_8011D0E0 = D_8011D0D8 * 10.0f; D_8011D0F0 = -1.0f; } else { - obj->shadow->unk8 = D_8011D364; + obj->shadow->meshStart = D_8011D364; D_8011D0C0 = obj->shadow->texture; D_8011D0CE = obj->segment.header->unk44 + yPos; D_8011D0CC = obj->segment.header->unk42 + yPos; @@ -2291,10 +2305,10 @@ void func_8002E234(Object *obj, s32 bool) { func_8002F440(); } if (!bool) { - obj->shadow->unkA = D_8011D364; + obj->shadow->meshEnd = D_8011D364; } else { - obj->waterEffect->unkA = D_8011D364; + obj->waterEffect->meshEnd = D_8011D364; } } #else @@ -2430,20 +2444,23 @@ GLOBAL_ASM("asm/non_matchings/tracks/func_8002FF6C.s") GLOBAL_ASM("asm/non_matchings/tracks/func_800304C8.s") -void func_80030664(s32 fogIdx, s16 near, s16 far, u8 red, u8 green, u8 blue) { - s32 temp; +/** + * Instantly update current fog properties. +*/ +void set_fog(s32 fogIdx, s16 near, s16 far, u8 red, u8 green, u8 blue) { + s32 tempNear; FogData *fogData; fogData = &gFogData[fogIdx]; if (far < near) { - temp = near; + tempNear = near; near = far; - far = temp; + far = tempNear; } - if (far >= 0x400) { - far = 0x3FF; + if (far > 1023) { + far = 1023; } if (near >= far - 5) { near = far - 5; @@ -2539,6 +2556,7 @@ void apply_fog(s32 playerID) { /** * Sets the active viewport's fog target when passed through. * Used in courses to make less, or more dense. + * @bug: Timer doesn't account for PAL, meaning fog will scroll 20% slower on PAL systems. */ void obj_loop_fogchanger(Object *obj) { s32 nearTemp; @@ -2629,7 +2647,11 @@ void obj_loop_fogchanger(Object *obj) { } } -void func_80030DE0(s32 fogIdx, s32 red, s32 green, s32 blue, s32 near, s32 far, s32 switchTimer) { +/** + * Set the fog properties from the current values to the target, over a time specified by switchTimer. + * @bug: Timer doesn't account for PAL, meaning fog will scroll 20% slower on PAL systems. +*/ +void slowly_change_fog(s32 fogIdx, s32 red, s32 green, s32 blue, s32 near, s32 far, s32 switchTimer) { s32 temp; FogData *fogData; @@ -2641,8 +2663,8 @@ void func_80030DE0(s32 fogIdx, s32 red, s32 green, s32 blue, s32 near, s32 far, far = temp; } - if (far >= 0x400) { - far= 0x3FF; + if (far > 1023) { + far = 1023; } if (near >= far - 5) { near = far - 5; diff --git a/src/tracks.h b/src/tracks.h index c43d8b27..06d50381 100644 --- a/src/tracks.h +++ b/src/tracks.h @@ -23,7 +23,7 @@ enum TriangleBatchFlags { BATCH_FLAGS_HIDDEN = (1 << 8), BATCH_FLAGS_UNK00000200 = (1 << 9), BATCH_FLAGS_UNK00000400 = (1 << 10), - BATCH_FLAGS_UNK00000800 = (1 << 11), + BATCH_FLAGS_RECEIVE_SHADOWS = (1 << 11), BATCH_FLAGS_UNK00001000 = (1 << 12), BATCH_FLAGS_WATER = (1 << 13), BATCH_FLAGS_FORCE_NO_SHADOWS = (1 << 14), @@ -46,6 +46,12 @@ enum TriangleBatchFlags { BATCH_FLAGS_UNK80000000 = (1 << 31), }; +enum ShadowUpdate { + SHADOW_NONE, + SHADOW_SCENERY, + SHADOW_ACTORS +}; + typedef struct unk8011B120_unkC { f32 unk0; f32 unk4; @@ -156,7 +162,7 @@ void reset_fog(s32 playerID); void update_fog(s32 playerID, s32 updateRate); void apply_fog(s32 playerID); void compute_scene_camera_transform_matrix(void); -void func_80027E24(s32 updateRate); +void animate_level_textures(s32 updateRate); s32 check_if_inside_segment(Object *obj, s32 segmentIndex); s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos); void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentIndex2, u8 *segmentsOrder, s32 *segmentsOrderIndex); @@ -167,14 +173,14 @@ s32 should_segment_be_visible(LevelModelSegmentBoundingBox *bb); s32 check_if_in_draw_range(Object *obj); void func_8002C954(LevelModelSegment *segment, LevelModelSegmentBoundingBox *bbox, s32 arg2); void draw_gradient_background(void); -void func_8002D8DC(s32 arg0, s32 arg1, s32 arg2); +void update_shadows(s32 group, s32 waterGroup, s32 arg2); void obj_loop_fogchanger(Object* obj); void initialise_player_viewport_vars(s32 updateRate); s32 get_wave_properties(f32 yPos, f32 *waterHeight, Vec3f *rotation); void render_level_segment(s32 segmentId, s32 nonOpaque); void render_scene(Gfx** dList, MatrixS** mtx, Vertex** vtx, TriangleList** tris, s32 updateRate); -void func_80030664(s32 fogIdx, s16 near, s16 far, u8 red, u8 green, u8 blue); -void func_80030DE0(s32 fogIdx, s32 red, s32 green, s32 blue, s32 near, s32 far, s32 switchTimer); +void set_fog(s32 fogIdx, s16 near, s16 far, u8 red, u8 green, u8 blue); +void slowly_change_fog(s32 fogIdx, s32 red, s32 green, s32 blue, s32 near, s32 far, s32 switchTimer); s32 func_8002FD74(f32 x0, f32 z0, f32 x1, f32 x2, s32 count, Vec4f *arg5); void free_track(void); @@ -197,7 +203,7 @@ void func_8002F2AC(void); void func_8002F440(void); f32 func_8002FA64(void); s32 func_8002BAB0(s16, f32, f32, f32*); -void func_800249F0(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicle, u32 entranceId, u32 collectables, u32 arg6); +void init_track(u32 geometry, u32 skybox, s32 numberOfPlayers, Vehicle vehicle, u32 entranceId, u32 collectables, u32 arg6); void func_800B82B4(LevelModel *, LevelHeader *, s32); void func_80025510(s32); void func_8002C0C4(s32 modelId); diff --git a/src/unused_string.c b/src/unused_string.c index 5d88332d..8aa5034d 100644 --- a/src/unused_string.c +++ b/src/unused_string.c @@ -4,6 +4,10 @@ #include "types.h" #include "macros.h" +/** + * Copy a string to a given location. + * Return the address of the destrination. +*/ UNUSED char *strcpy(char *src, const char *dest) { char *ret = src; @@ -11,6 +15,10 @@ UNUSED char *strcpy(char *src, const char *dest) { return ret; } +/** + * Append a string to the end of a given string. + * Return the address of the destrination. +*/ UNUSED char *strcat(char *dest, const char *src) { char *ret = dest; @@ -20,6 +28,10 @@ UNUSED char *strcat(char *dest, const char *src) { return ret; } +/** + * Compare two strings, with no case sensitivity. + * Return zero if they match. +*/ UNUSED int strcasecmp(const char *s1, const char *s2) { unsigned char c1; unsigned char c2; @@ -52,6 +64,10 @@ UNUSED int strcasecmp(const char *s1, const char *s2) { return 0; } +/** + * Compare an arbitrary amount of characters in two strings, with no case sensitivity. + * Return zero if they match. +*/ UNUSED int strncasecmp(const char *s1, const char *s2, size_t n) { unsigned char c1; unsigned char c2; diff --git a/src/weather.c b/src/weather.c index e913559c..989ec735 100644 --- a/src/weather.c +++ b/src/weather.c @@ -578,7 +578,7 @@ void func_800AD40C(void) { if (gWeatherType != WEATHER_SNOW && get_viewport_count() == VIEWPORTS_COUNT_1_PLAYER) { a = ((gLightningFrequency * -38) >> 16) + 1018; b = ((gLightningFrequency * -20) >> 16) + 1023; - func_80030664(0, a, b, 0x1CU, 0xFU, 0x24U); + set_fog(0, a, b, 28, 15, 36); } }