diff --git a/README.md b/README.md index 41d025e3..6a42db19 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ As of October 10, 2023, this is our current score:     Decomp progress: 58.00% -    Documentation progress: 31.11% +    Documentation progress: 33.35% --- @@ -144,14 +144,14 @@ As of October 10th, 2023, this is our current score: We are collecting silver coins in Pirate Lagoon. (2/8 silver coins) =================================================================== ADVENTURE TWO (Cleanup & Documentation) - ------------------------- 31.11% Complete ------------------------- - # Documented functions: 683 - # Undocumented remaining: 887 + ------------------------- 33.35% Complete ------------------------- + # Documented functions: 740 + # Undocumented remaining: 830 --------------------------- Game Status --------------------------- - Balloons: 16/47, Keys: 2/4, Trophies: 1/5 + Balloons: 17/47, Keys: 2/4, Trophies: 1/5 T.T. Amulets: 1/4, Wizpig Amulets: 1/4 ------------------------------------------------------------------- - We are racing in Frosty Village. (Lap 2/3) + We are battling in Icicle Pyramid. (3 opponents remain) =================================================================== ``` diff --git a/asm/non_matchings/game_ui/func_8009F034.s b/asm/non_matchings/game_ui/func_8009F034.s index 73418cd7..785bd5dc 100644 --- a/asm/non_matchings/game_ui/func_8009F034.s +++ b/asm/non_matchings/game_ui/func_8009F034.s @@ -143,7 +143,7 @@ glabel func_8009F034 /* 09FDE4 8009F1E4 25F8FFFC */ addiu $t8, $t7, -4 /* 09FDE8 8009F1E8 AC780000 */ sw $t8, ($v1) .L8009F1EC: -/* 09FDEC 8009F1EC 0C006D90 */ jal func_8001B640 +/* 09FDEC 8009F1EC 0C006D90 */ jal get_time_trial_ghost /* 09FDF0 8009F1F0 00000000 */ nop /* 09FDF4 8009F1F4 14400004 */ bnez $v0, .L8009F208 /* 09FDF8 8009F1F8 240C0001 */ li $t4, 1 diff --git a/asm/non_matchings/game_ui/func_800A277C.s b/asm/non_matchings/game_ui/func_800A277C.s index c2d12b1a..28a004fa 100644 --- a/asm/non_matchings/game_ui/func_800A277C.s +++ b/asm/non_matchings/game_ui/func_800A277C.s @@ -280,7 +280,7 @@ glabel func_800A277C /* 0A3738 800A2B38 AFAB0010 */ sw $t3, 0x10($sp) /* 0A373C 800A2B3C 24060004 */ li $a2, 4 /* 0A3740 800A2B40 24070001 */ li $a3, 1 -/* 0A3744 800A2B44 0C028DB3 */ jal func_800A36CC +/* 0A3744 800A2B44 0C028DB3 */ jal set_stopwatch_face /* 0A3748 800A2B48 AFA900A8 */ sw $t1, 0xa8($sp) /* 0A374C 800A2B4C 8FA900A8 */ lw $t1, 0xa8($sp) /* 0A3750 800A2B50 00000000 */ nop @@ -480,10 +480,10 @@ glabel func_800A277C /* 0A3A20 800A2E20 0C0165E4 */ jal get_timestamp_from_frames /* 0A3A24 800A2E24 27A700AC */ addiu $a3, $sp, 0xac /* 0A3A28 800A2E28 8FAC003C */ lw $t4, 0x3c($sp) -/* 0A3A2C 800A2E2C 3C01800E */ lui $at, %hi(D_800E2834) # $at, 0x800e +/* 0A3A2C 800A2E2C 3C01800E */ lui $at, %hi(gHudColour) # $at, 0x800e /* 0A3A30 800A2E30 8D8A0000 */ lw $t2, ($t4) /* 0A3A34 800A2E34 444DF800 */ cfc1 $t5, $31 -/* 0A3A38 800A2E38 AC2A2834 */ sw $t2, %lo(D_800E2834)($at) +/* 0A3A38 800A2E38 AC2A2834 */ sw $t2, %lo(gHudColour)($at) /* 0A3A3C 800A2E3C 8E2B0000 */ lw $t3, ($s1) /* 0A3A40 800A2E40 35A10003 */ ori $at, $t5, 3 /* 0A3A44 800A2E44 38210002 */ xori $at, $at, 2 @@ -498,11 +498,11 @@ glabel func_800A277C /* 0A3A68 800A2E68 24180001 */ li $t8, 1 /* 0A3A6C 800A2E6C 44CDF800 */ ctc1 $t5, $31 /* 0A3A70 800A2E70 AFB80014 */ sw $t8, 0x14($sp) -/* 0A3A74 800A2E74 0C029FEF */ jal func_800A7FBC +/* 0A3A74 800A2E74 0C029FEF */ jal render_timer /* 0A3A78 800A2E78 AFAE0010 */ sw $t6, 0x10($sp) /* 0A3A7C 800A2E7C 240FFFFE */ li $t7, -2 -/* 0A3A80 800A2E80 3C01800E */ lui $at, %hi(D_800E2834) # $at, 0x800e -/* 0A3A84 800A2E84 AC2F2834 */ sw $t7, %lo(D_800E2834)($at) +/* 0A3A80 800A2E80 3C01800E */ lui $at, %hi(gHudColour) # $at, 0x800e +/* 0A3A84 800A2E84 AC2F2834 */ sw $t7, %lo(gHudColour)($at) /* 0A3A88 800A2E88 8FB900B8 */ lw $t9, 0xb8($sp) /* 0A3A8C 800A2E8C 8E430000 */ lw $v1, ($s2) /* 0A3A90 800A2E90 272C000C */ addiu $t4, $t9, 0xc @@ -595,7 +595,7 @@ glabel func_800A277C /* 0A3BE4 800A2FE4 24050003 */ li $a1, 3 /* 0A3BE8 800A2FE8 00003025 */ move $a2, $zero /* 0A3BEC 800A2FEC 24070004 */ li $a3, 4 -/* 0A3BF0 800A2FF0 0C028DB3 */ jal func_800A36CC +/* 0A3BF0 800A2FF0 0C028DB3 */ jal set_stopwatch_face /* 0A3BF4 800A2FF4 AFA00010 */ sw $zero, 0x10($sp) /* 0A3BF8 800A2FF8 8FA900A0 */ lw $t1, 0xa0($sp) /* 0A3BFC 800A2FFC 2419003C */ li $t9, 60 @@ -832,7 +832,7 @@ glabel func_800A277C /* 0A3F60 800A3360 24050001 */ li $a1, 1 /* 0A3F64 800A3364 24060002 */ li $a2, 2 /* 0A3F68 800A3368 24070002 */ li $a3, 2 -/* 0A3F6C 800A336C 0C028DB3 */ jal func_800A36CC +/* 0A3F6C 800A336C 0C028DB3 */ jal set_stopwatch_face /* 0A3F70 800A3370 AFA00010 */ sw $zero, 0x10($sp) /* 0A3F74 800A3374 10000016 */ b .L800A33D0 /* 0A3F78 800A3378 8FA400A0 */ lw $a0, 0xa0($sp) @@ -844,7 +844,7 @@ glabel func_800A277C /* 0A3F8C 800A338C 24050002 */ li $a1, 2 /* 0A3F90 800A3390 24060003 */ li $a2, 3 /* 0A3F94 800A3394 24070002 */ li $a3, 2 -/* 0A3F98 800A3398 0C028DB3 */ jal func_800A36CC +/* 0A3F98 800A3398 0C028DB3 */ jal set_stopwatch_face /* 0A3F9C 800A339C AFA00010 */ sw $zero, 0x10($sp) /* 0A3FA0 800A33A0 1000000B */ b .L800A33D0 /* 0A3FA4 800A33A4 8FA400A0 */ lw $a0, 0xa0($sp) @@ -856,7 +856,7 @@ glabel func_800A277C /* 0A3FB8 800A33B8 24050003 */ li $a1, 3 /* 0A3FBC 800A33BC 24060001 */ li $a2, 1 /* 0A3FC0 800A33C0 24070004 */ li $a3, 4 -/* 0A3FC4 800A33C4 0C028DB3 */ jal func_800A36CC +/* 0A3FC4 800A33C4 0C028DB3 */ jal set_stopwatch_face /* 0A3FC8 800A33C8 AFA00010 */ sw $zero, 0x10($sp) .L800A33CC: /* 0A3FCC 800A33CC 8FA400A0 */ lw $a0, 0xa0($sp) diff --git a/asm/non_matchings/game_ui/func_800A6254.s b/asm/non_matchings/game_ui/func_800A6254.s index cc137c28..d20011ec 100644 --- a/asm/non_matchings/game_ui/func_800A6254.s +++ b/asm/non_matchings/game_ui/func_800A6254.s @@ -641,7 +641,7 @@ glabel L800A691C /* 0A7790 800A6B90 1000000A */ b .L800A6BBC /* 0A7794 800A6B94 00000000 */ nop .L800A6B98: -/* 0A7798 800A6B98 0C006D90 */ jal func_8001B640 +/* 0A7798 800A6B98 0C006D90 */ jal get_time_trial_ghost /* 0A779C 800A6B9C AFA70070 */ sw $a3, 0x70($sp) /* 0A77A0 800A6BA0 8FA70070 */ lw $a3, 0x70($sp) /* 0A77A4 800A6BA4 14400005 */ bnez $v0, .L800A6BBC diff --git a/asm/non_matchings/game_ui/func_800AA600.s b/asm/non_matchings/game_ui/func_800AA600.s index f22f6da6..30944210 100644 --- a/asm/non_matchings/game_ui/func_800AA600.s +++ b/asm/non_matchings/game_ui/func_800AA600.s @@ -369,8 +369,8 @@ glabel func_800AA600 /* 0AB748 800AAB48 3C01800F */ lui $at, %hi(D_800E87E0) # $at, 0x800f /* 0AB74C 800AAB4C C43387E0 */ lwc1 $f19, %lo(D_800E87E0)($at) /* 0AB750 800AAB50 C43287E4 */ lwc1 $f18, %lo(D_800E87E0 + 4)($at) -/* 0AB754 800AAB54 3C18800E */ lui $t8, %hi(D_800E2834) # $t8, 0x800e -/* 0AB758 800AAB58 8F182834 */ lw $t8, %lo(D_800E2834)($t8) +/* 0AB754 800AAB54 3C18800E */ lui $t8, %hi(gHudColour) # $t8, 0x800e +/* 0AB758 800AAB58 8F182834 */ lw $t8, %lo(gHudColour)($t8) /* 0AB75C 800AAB5C 240B0001 */ li $t3, 1 /* 0AB760 800AAB60 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0AB764 800AAB64 24846CFC */ addiu $a0, %lo(gHUDCurrDisplayList) # addiu $a0, $a0, 0x6cfc @@ -406,9 +406,9 @@ glabel func_800AA600 /* 0AB7D8 800AABD8 8DC30000 */ lw $v1, ($t6) /* 0AB7DC 800AABDC 860F0018 */ lh $t7, 0x18($s0) /* 0AB7E0 800AABE0 84790016 */ lh $t9, 0x16($v1) -/* 0AB7E4 800AABE4 3C02800E */ lui $v0, %hi(D_800E2834) # $v0, 0x800e +/* 0AB7E4 800AABE4 3C02800E */ lui $v0, %hi(gHudColour) # $v0, 0x800e /* 0AB7E8 800AABE8 01F90019 */ multu $t7, $t9 -/* 0AB7EC 800AABEC 8C422834 */ lw $v0, %lo(D_800E2834)($v0) +/* 0AB7EC 800AABEC 8C422834 */ lw $v0, %lo(gHudColour)($v0) /* 0AB7F0 800AABF0 2401FFFE */ li $at, -2 /* 0AB7F4 800AABF4 3C058012 */ lui $a1, %hi(D_80127180) # $a1, 0x8012 /* 0AB7F8 800AABF8 3C0D8012 */ lui $t5, %hi(gHudSprites) # $t5, 0x8012 @@ -498,8 +498,8 @@ glabel func_800AA600 /* 0AB940 800AAD40 016D0019 */ multu $t3, $t5 /* 0AB944 800AAD44 A7A0004E */ sh $zero, 0x4e($sp) /* 0AB948 800AAD48 AFA00050 */ sw $zero, 0x50($sp) -/* 0AB94C 800AAD4C 3C0E800E */ lui $t6, %hi(D_800E2834) # $t6, 0x800e -/* 0AB950 800AAD50 8DCE2834 */ lw $t6, %lo(D_800E2834)($t6) +/* 0AB94C 800AAD4C 3C0E800E */ lui $t6, %hi(gHudColour) # $t6, 0x800e +/* 0AB950 800AAD50 8DCE2834 */ lw $t6, %lo(gHudColour)($t6) /* 0AB954 800AAD54 240F0001 */ li $t7, 1 /* 0AB958 800AAD58 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0AB95C 800AAD5C 24846CFC */ addiu $a0, %lo(gHUDCurrDisplayList) # addiu $a0, $a0, 0x6cfc diff --git a/asm/non_matchings/menu/draw_menu_elements.s b/asm/non_matchings/menu/draw_menu_elements.s index 3d92b59f..7003c50b 100644 --- a/asm/non_matchings/menu/draw_menu_elements.s +++ b/asm/non_matchings/menu/draw_menu_elements.s @@ -287,7 +287,7 @@ glabel L80082608 .L80082618: /* 083218 80082618 0C01A142 */ jal func_80068508 /* 08321C 8008261C 24040001 */ li $a0, 1 -/* 083220 80082620 0C01EFC7 */ jal func_8007BF1C +/* 083220 80082620 0C01EFC7 */ jal sprite_opaque /* 083224 80082624 00002025 */ move $a0, $zero /* 083228 80082628 264BFF60 */ addiu $t3, $s2, -0xa0 /* 08322C 8008262C 448B2000 */ mtc1 $t3, $f4 @@ -362,7 +362,7 @@ glabel L80082608 /* 083340 80082740 00000000 */ nop /* 083344 80082744 0C01A142 */ jal func_80068508 /* 083348 80082748 00002025 */ move $a0, $zero -/* 08334C 8008274C 0C01EFC7 */ jal func_8007BF1C +/* 08334C 8008274C 0C01EFC7 */ jal sprite_opaque /* 083350 80082750 24040001 */ li $a0, 1 /* 083354 80082754 8FA40070 */ lw $a0, 0x70($sp) /* 083358 80082758 10000034 */ b .L8008282C diff --git a/asm/non_matchings/menu/func_80081C04.s b/asm/non_matchings/menu/func_80081C04.s index 215d57ee..71a788a7 100644 --- a/asm/non_matchings/menu/func_80081C04.s +++ b/asm/non_matchings/menu/func_80081C04.s @@ -111,7 +111,7 @@ glabel func_80081C04 /* 082984 80081D84 3C01800E */ lui $at, %hi(sMenuGuiOpacity) # $at, 0x800e /* 082988 80081D88 00002025 */ move $a0, $zero /* 08298C 80081D8C AFA60068 */ sw $a2, 0x68($sp) -/* 082990 80081D90 0C01EFC7 */ jal func_8007BF1C +/* 082990 80081D90 0C01EFC7 */ jal sprite_opaque /* 082994 80081D94 AC2FF764 */ sw $t7, %lo(sMenuGuiOpacity)($at) /* 082998 80081D98 0C01A142 */ jal func_80068508 /* 08299C 80081D9C 24040001 */ li $a0, 1 @@ -140,7 +140,7 @@ glabel func_80081C04 /* 0829F4 80081DF4 1613FFF4 */ bne $s0, $s3, .L80081DC8 /* 0829F8 80081DF8 2694000C */ addiu $s4, $s4, 0xc .L80081DFC: -/* 0829FC 80081DFC 0C01EFC7 */ jal func_8007BF1C +/* 0829FC 80081DFC 0C01EFC7 */ jal sprite_opaque /* 082A00 80081E00 24040001 */ li $a0, 1 /* 082A04 80081E04 0C01A142 */ jal func_80068508 /* 082A08 80081E08 00002025 */ move $a0, $zero diff --git a/asm/non_matchings/menu/func_800853D0.s b/asm/non_matchings/menu/func_800853D0.s index 97f58c72..552258bf 100644 --- a/asm/non_matchings/menu/func_800853D0.s +++ b/asm/non_matchings/menu/func_800853D0.s @@ -383,7 +383,7 @@ glabel L80085828 /* 086550 80085950 014FC821 */ addu $t9, $t2, $t7 /* 086554 80085954 E72A0010 */ swc1 $f10, 0x10($t9) /* 086558 80085958 01E08025 */ move $s0, $t7 -/* 08655C 8008595C 0C01EFC7 */ jal func_8007BF1C +/* 08655C 8008595C 0C01EFC7 */ jal sprite_opaque /* 086560 80085960 00002025 */ move $a0, $zero /* 086564 80085964 8FAB0084 */ lw $t3, 0x84($sp) /* 086568 80085968 3C02800E */ lui $v0, %hi(gMenuImageStack) # $v0, 0x800e @@ -411,7 +411,7 @@ glabel L80085828 /* 0865C0 800859C0 8FAB0074 */ lw $t3, 0x74($sp) /* 0865C4 800859C4 0C027298 */ jal func_8009CA60 /* 0865C8 800859C8 A58B0058 */ sh $t3, 0x58($t4) -/* 0865CC 800859CC 0C01EFC7 */ jal func_8007BF1C +/* 0865CC 800859CC 0C01EFC7 */ jal sprite_opaque /* 0865D0 800859D0 24040001 */ li $a0, 1 /* 0865D4 800859D4 8FAE0084 */ lw $t6, 0x84($sp) /* 0865D8 800859D8 3C0F800E */ lui $t7, %hi(gMenuImageStack) # $t7, 0x800e diff --git a/asm/non_matchings/menu/func_80086AFC.s b/asm/non_matchings/menu/func_80086AFC.s index 36199069..f71b8bf5 100644 --- a/asm/non_matchings/menu/func_80086AFC.s +++ b/asm/non_matchings/menu/func_80086AFC.s @@ -150,7 +150,7 @@ glabel L80086CDC /* 087924 80086D24 10000128 */ b .L800871C8 /* 087928 80086D28 AFA20038 */ sw $v0, 0x38($sp) .L80086D2C: -/* 08792C 80086D2C 0C01B9DC */ jal func_8006E770 +/* 08792C 80086D2C 0C01B9DC */ jal clear_lap_records /* 087930 80086D30 24050003 */ li $a1, 3 /* 087934 80086D34 0C01BAFF */ jal mark_to_write_flap_and_course_times /* 087938 80086D38 00000000 */ nop diff --git a/asm/non_matchings/menu/func_80092188.s b/asm/non_matchings/menu/func_80092188.s index b48c24f5..e288f8c3 100644 --- a/asm/non_matchings/menu/func_80092188.s +++ b/asm/non_matchings/menu/func_80092188.s @@ -36,7 +36,7 @@ glabel func_80092188 /* 092DF8 800921F8 AD8E0000 */ sw $t6, ($t4) /* 092DFC 800921FC 3C048012 */ lui $a0, %hi(D_801269CC) # $a0, 0x8012 /* 092E00 80092200 8C8469CC */ lw $a0, %lo(D_801269CC)($a0) -/* 092E04 80092204 0C030C7B */ jal func_800C31EC +/* 092E04 80092204 0C030C7B */ jal set_current_text /* 092E08 80092208 2484003C */ addiu $a0, $a0, 0x3c /* 092E0C 8009220C 3C028012 */ lui $v0, %hi(D_801269C8) # $v0, 0x8012 /* 092E10 80092210 3C06800E */ lui $a2, %hi(gTrackNameVoiceDelay) # $a2, 0x800e @@ -585,7 +585,7 @@ glabel L8009287C /* 0935C8 800929C8 24010005 */ li $at, 5 /* 0935CC 800929CC 17210004 */ bne $t9, $at, .L800929E0 /* 0935D0 800929D0 24180001 */ li $t8, 1 -/* 0935D4 800929D4 0C030C7B */ jal func_800C31EC +/* 0935D4 800929D4 0C030C7B */ jal set_current_text /* 0935D8 800929D8 24042710 */ li $a0, 10000 /* 0935DC 800929DC 24180001 */ li $t8, 1 .L800929E0: @@ -622,7 +622,7 @@ glabel L8009287C .L80092A50: /* 093650 80092A50 14410032 */ bne $v0, $at, .L80092B1C /* 093654 80092A54 8FAF003C */ lw $t7, 0x3c($sp) -/* 093658 80092A58 0C030C7B */ jal func_800C31EC +/* 093658 80092A58 0C030C7B */ jal set_current_text /* 09365C 80092A5C 24042710 */ li $a0, 10000 /* 093660 80092A60 1000002E */ b .L80092B1C /* 093664 80092A64 8FAF003C */ lw $t7, 0x3c($sp) diff --git a/asm/non_matchings/menu/func_80096978.s b/asm/non_matchings/menu/func_80096978.s index 600663b9..f0041037 100644 --- a/asm/non_matchings/menu/func_80096978.s +++ b/asm/non_matchings/menu/func_80096978.s @@ -240,7 +240,7 @@ glabel func_80096978 /* 09790C 80096D0C 248463A0 */ addiu $a0, %lo(sMenuCurrDisplayList) # addiu $a0, $a0, 0x63a0 /* 097910 80096D10 0C01A142 */ jal func_80068508 /* 097914 80096D14 24040001 */ li $a0, 1 -/* 097918 80096D18 0C01EFC7 */ jal func_8007BF1C +/* 097918 80096D18 0C01EFC7 */ jal sprite_opaque /* 09791C 80096D1C 00002025 */ move $a0, $zero /* 097920 80096D20 240200FF */ li $v0, 255 /* 097924 80096D24 3C01800E */ lui $at, %hi(sMenuGuiColourR) # $at, 0x800e @@ -385,7 +385,7 @@ glabel func_80096978 /* 097B28 80096F28 AFA800A8 */ sw $t0, 0xa8($sp) /* 097B2C 80096F2C 0C01A142 */ jal func_80068508 /* 097B30 80096F30 00002025 */ move $a0, $zero -/* 097B34 80096F34 0C01EFC7 */ jal func_8007BF1C +/* 097B34 80096F34 0C01EFC7 */ jal sprite_opaque /* 097B38 80096F38 24040001 */ li $a0, 1 /* 097B3C 80096F3C 240E00FF */ li $t6, 255 /* 097B40 80096F40 3C01800E */ lui $at, %hi(sMenuGuiColourG) # $at, 0x800e diff --git a/asm/non_matchings/menu/func_8009E3D0.s b/asm/non_matchings/menu/func_8009E3D0.s index 5f0b4aca..6215e1e3 100644 --- a/asm/non_matchings/menu/func_8009E3D0.s +++ b/asm/non_matchings/menu/func_8009E3D0.s @@ -56,7 +56,7 @@ glabel func_8009E3D0 /* 09F098 8009E498 02602025 */ move $a0, $s3 /* 09F09C 8009E49C 0C027298 */ jal func_8009CA60 /* 09F0A0 8009E4A0 E5EA0010 */ swc1 $f10, 0x10($t7) -/* 09F0A4 8009E4A4 0C01EFC7 */ jal func_8007BF1C +/* 09F0A4 8009E4A4 0C01EFC7 */ jal sprite_opaque /* 09F0A8 8009E4A8 00002025 */ move $a0, $zero /* 09F0AC 8009E4AC 2418FFE3 */ li $t8, -29 /* 09F0B0 8009E4B0 44988000 */ mtc1 $t8, $f16 @@ -143,7 +143,7 @@ glabel func_8009E3D0 /* 09F1E0 8009E5E0 8E4A0000 */ lw $t2, ($s2) /* 09F1E4 8009E5E4 0C027298 */ jal func_8009CA60 /* 09F1E8 8009E5E8 E5540150 */ swc1 $f20, 0x150($t2) -/* 09F1EC 8009E5EC 0C01EFC7 */ jal func_8007BF1C +/* 09F1EC 8009E5EC 0C01EFC7 */ jal sprite_opaque /* 09F1F0 8009E5F0 02802025 */ move $a0, $s4 /* 09F1F4 8009E5F4 240BFFA7 */ li $t3, -89 /* 09F1F8 8009E5F8 448B5000 */ mtc1 $t3, $f10 diff --git a/asm/non_matchings/menu/render_file_select_menu.s b/asm/non_matchings/menu/render_file_select_menu.s index fede0893..95c304af 100644 --- a/asm/non_matchings/menu/render_file_select_menu.s +++ b/asm/non_matchings/menu/render_file_select_menu.s @@ -101,7 +101,7 @@ glabel render_file_select_menu /* 08DAE8 8008CEE8 11E0006B */ beqz $t7, .L8008D098 /* 08DAEC 8008CEEC 240500FF */ li $a1, 255 /* 08DAF0 8008CEF0 00002025 */ move $a0, $zero -/* 08DAF4 8008CEF4 0C01EFC7 */ jal func_8007BF1C +/* 08DAF4 8008CEF4 0C01EFC7 */ jal sprite_opaque /* 08DAF8 8008CEF8 2412000B */ li $s2, 11 /* 08DAFC 8008CEFC 92380000 */ lbu $t8, ($s1) /* 08DB00 8008CF00 00003825 */ move $a3, $zero @@ -207,7 +207,7 @@ glabel render_file_select_menu /* 08DC7C 8008D07C A022F4A8 */ sb $v0, %lo(sMenuGuiColourG)($at) /* 08DC80 8008D080 3C01800E */ lui $at, %hi(sMenuGuiColourB) # $at, 0x800e /* 08DC84 8008D084 A022F4AC */ sb $v0, %lo(sMenuGuiColourB)($at) -/* 08DC88 8008D088 0C01EFC7 */ jal func_8007BF1C +/* 08DC88 8008D088 0C01EFC7 */ jal sprite_opaque /* 08DC8C 8008D08C 24040001 */ li $a0, 1 /* 08DC90 8008D090 10000014 */ b .L8008D0E4 /* 08DC94 8008D094 00000000 */ nop diff --git a/asm/non_matchings/menu/render_track_select_setup_ui.s b/asm/non_matchings/menu/render_track_select_setup_ui.s index 8b5e5425..a0734869 100644 --- a/asm/non_matchings/menu/render_track_select_setup_ui.s +++ b/asm/non_matchings/menu/render_track_select_setup_ui.s @@ -1011,7 +1011,7 @@ glabel render_track_select_setup_ui /* 092A0C 80091E0C 248463A0 */ addiu $a0, %lo(sMenuCurrDisplayList) # addiu $a0, $a0, 0x63a0 /* 092A10 80091E10 0C01A142 */ jal func_80068508 /* 092A14 80091E14 24040001 */ li $a0, 1 -/* 092A18 80091E18 0C01EFC7 */ jal func_8007BF1C +/* 092A18 80091E18 0C01EFC7 */ jal sprite_opaque /* 092A1C 80091E1C 00002025 */ move $a0, $zero /* 092A20 80091E20 3C15800E */ lui $s5, %hi(gMultiplayerSelectedNumberOfRacers) # $s5, 0x800e /* 092A24 80091E24 3C11800E */ lui $s1, %hi(sMenuGuiColourB) # $s1, 0x800e @@ -1071,7 +1071,7 @@ glabel render_track_select_setup_ui /* 092AEC 80091EEC A2130000 */ sb $s3, ($s0) /* 092AF0 80091EF0 1696FFD3 */ bne $s4, $s6, .L80091E40 /* 092AF4 80091EF4 A2330000 */ sb $s3, ($s1) -/* 092AF8 80091EF8 0C01EFC7 */ jal func_8007BF1C +/* 092AF8 80091EF8 0C01EFC7 */ jal sprite_opaque /* 092AFC 80091EFC 24040001 */ li $a0, 1 /* 092B00 80091F00 0C01A142 */ jal func_80068508 /* 092B04 80091F04 00002025 */ move $a0, $zero @@ -1082,7 +1082,7 @@ glabel render_track_select_setup_ui /* 092B14 80091F14 29210004 */ slti $at, $t1, 4 /* 092B18 80091F18 1020003D */ beqz $at, .L80092010 /* 092B1C 80091F1C 00000000 */ nop -/* 092B20 80091F20 0C01EFC7 */ jal func_8007BF1C +/* 092B20 80091F20 0C01EFC7 */ jal sprite_opaque /* 092B24 80091F24 00002025 */ move $a0, $zero /* 092B28 80091F28 3C0A800E */ lui $t2, %hi(gIsInAdventureTwo) # $t2, 0x800e /* 092B2C 80091F2C 8D4AF494 */ lw $t2, %lo(gIsInAdventureTwo)($t2) @@ -1145,7 +1145,7 @@ glabel render_track_select_setup_ui /* 092C00 80092000 0C027298 */ jal func_8009CA60 /* 092C04 80092004 E544000C */ swc1 $f4, 0xc($t2) .L80092008: -/* 092C08 80092008 0C01EFC7 */ jal func_8007BF1C +/* 092C08 80092008 0C01EFC7 */ jal sprite_opaque /* 092C0C 8009200C 24040001 */ li $a0, 1 .L80092010: /* 092C10 80092010 3C08800E */ lui $t0, %hi(gNumberOfActivePlayers) # $t0, 0x800e diff --git a/asm/non_matchings/object_functions/obj_loop_door.s b/asm/non_matchings/object_functions/obj_loop_door.s index 085491ce..1b2e9bc2 100644 --- a/asm/non_matchings/object_functions/obj_loop_door.s +++ b/asm/non_matchings/object_functions/obj_loop_door.s @@ -121,7 +121,7 @@ glabel obj_loop_door /* 03C740 8003BB40 81040013 */ lb $a0, 0x13($t0) /* 03C744 8003BB44 00000000 */ nop /* 03C748 8003BB48 309800FF */ andi $t8, $a0, 0xff -/* 03C74C 8003BB4C 0C030C7B */ jal func_800C31EC +/* 03C74C 8003BB4C 0C030C7B */ jal set_current_text /* 03C750 8003BB50 03002025 */ move $a0, $t8 /* 03C754 8003BB54 8FA80044 */ lw $t0, 0x44($sp) /* 03C758 8003BB58 8FA90040 */ lw $t1, 0x40($sp) diff --git a/asm/non_matchings/object_functions/obj_loop_weaponballoon.s b/asm/non_matchings/object_functions/obj_loop_weaponballoon.s index e1a4a1cd..94df5b24 100644 --- a/asm/non_matchings/object_functions/obj_loop_weaponballoon.s +++ b/asm/non_matchings/object_functions/obj_loop_weaponballoon.s @@ -255,7 +255,7 @@ glabel obj_loop_weaponballoon /* 03F0C8 8003E4C8 2404013E */ li $a0, 318 /* 03F0CC 8003E4CC 3C053F80 */ lui $a1, 0x3f80 /* 03F0D0 8003E4D0 00E03025 */ move $a2, $a3 -/* 03F0D4 8003E4D4 0C029D21 */ jal func_800A7484 +/* 03F0D4 8003E4D4 0C029D21 */ jal set_time_trial_start_voice /* 03F0D8 8003E4D8 AFA30038 */ sw $v1, 0x38($sp) /* 03F0DC 8003E4DC 8FA30038 */ lw $v1, 0x38($sp) /* 03F0E0 8003E4E0 00002825 */ move $a1, $zero @@ -290,7 +290,7 @@ glabel obj_loop_weaponballoon /* 03F148 8003E548 2404013E */ li $a0, 318 /* 03F14C 8003E54C 3C053F80 */ lui $a1, 0x3f80 /* 03F150 8003E550 00E03025 */ move $a2, $a3 -/* 03F154 8003E554 0C029D21 */ jal func_800A7484 +/* 03F154 8003E554 0C029D21 */ jal set_time_trial_start_voice /* 03F158 8003E558 AFA30038 */ sw $v1, 0x38($sp) /* 03F15C 8003E55C 8FA30038 */ lw $v1, 0x38($sp) /* 03F160 8003E560 00000000 */ nop diff --git a/asm/non_matchings/objects/func_8000CC7C.s b/asm/non_matchings/objects/func_8000CC7C.s index ec3da172..e9307ca6 100644 --- a/asm/non_matchings/objects/func_8000CC7C.s +++ b/asm/non_matchings/objects/func_8000CC7C.s @@ -17,9 +17,9 @@ glabel func_8000CC7C /* 00D884 8000CC84 A020AD20 */ sb $zero, %lo(D_8011AD20)($at) /* 00D888 8000CC88 3C018012 */ lui $at, %hi(D_8011ADB0) # $at, 0x8012 /* 00D88C 8000CC8C AC20ADB0 */ sw $zero, %lo(D_8011ADB0)($at) -/* 00D890 8000CC90 3C018012 */ lui $at, %hi(D_8011ADC4) # $at, 0x8012 +/* 00D890 8000CC90 3C018012 */ lui $at, %hi(gFirstTimeFinish) # $at, 0x8012 /* 00D894 8000CC94 AFB1001C */ sw $s1, 0x1c($sp) -/* 00D898 8000CC98 A020ADC4 */ sb $zero, %lo(D_8011ADC4)($at) +/* 00D898 8000CC98 A020ADC4 */ sb $zero, %lo(gFirstTimeFinish)($at) /* 00D89C 8000CC9C 3C118012 */ lui $s1, %hi(D_8011AF00) # $s1, 0x8012 /* 00D8A0 8000CCA0 AFBE0038 */ sw $fp, 0x38($sp) /* 00D8A4 8000CCA4 3C018012 */ lui $at, %hi(gNumRacers) # $at, 0x8012 @@ -37,7 +37,7 @@ glabel func_8000CC7C /* 00D8D4 8000CCD4 AFB40028 */ sw $s4, 0x28($sp) /* 00D8D8 8000CCD8 AFB20020 */ sw $s2, 0x20($sp) /* 00D8DC 8000CCDC A2200000 */ sb $zero, ($s1) -/* 00D8E0 8000CCE0 0C01486E */ jal func_800521B8 +/* 00D8E0 8000CCE0 0C01486E */ jal set_taj_status /* 00D8E4 8000CCE4 00002025 */ move $a0, $zero /* 00D8E8 8000CCE8 0C01AF6C */ jal get_current_level_header /* 00D8EC 8000CCEC 00000000 */ nop @@ -1020,8 +1020,8 @@ glabel L8000D98C /* 00E694 8000DA94 26B50004 */ addiu $s5, $s5, 4 /* 00E698 8000DA98 00009025 */ move $s2, $zero .L8000DA9C: -/* 00E69C 8000DA9C 3C15800E */ lui $s5, %hi(D_800DC718) # $s5, 0x800e -/* 00E6A0 8000DAA0 26B5C718 */ addiu $s5, %lo(D_800DC718) # addiu $s5, $s5, -0x38e8 +/* 00E69C 8000DA9C 3C15800E */ lui $s5, %hi(gGhostObj) # $s5, 0x800e +/* 00E6A0 8000DAA0 26B5C718 */ addiu $s5, %lo(gGhostObj) # addiu $s5, $s5, -0x38e8 /* 00E6A4 8000DAA4 0C0166D3 */ jal free_tt_ghost_data /* 00E6A8 8000DAA8 AEA00000 */ sw $zero, ($s5) /* 00E6AC 8000DAAC 3C118012 */ lui $s1, %hi(D_8011AD38) # $s1, 0x8012 @@ -1384,7 +1384,7 @@ glabel L8000D98C /* 00EBE8 8000DFE8 01D97804 */ sllv $t7, $t9, $t6 /* 00EBEC 8000DFEC 030F6825 */ or $t5, $t8, $t7 /* 00EBF0 8000DFF0 A6ED0014 */ sh $t5, 0x14($s7) -/* 00EBF4 8000DFF4 0C01486E */ jal func_800521B8 +/* 00EBF4 8000DFF4 0C01486E */ jal set_taj_status /* 00EBF8 8000DFF8 24040002 */ li $a0, 2 /* 00EBFC 8000DFFC 0C0274CC */ jal set_next_taj_challenge_menu /* 00EC00 8000E000 02402025 */ move $a0, $s2 @@ -1414,7 +1414,7 @@ glabel L8000D98C /* 00EC54 8000E054 AC20ADB0 */ sw $zero, %lo(D_8011ADB0)($at) /* 00EC58 8000E058 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 00EC5C 8000E05C 44816000 */ mtc1 $at, $f12 -/* 00EC60 8000E060 0C01AF44 */ jal func_8006BD10 +/* 00EC60 8000E060 0C01AF44 */ jal start_level_music /* 00EC64 8000E064 00000000 */ nop .L8000E068: /* 00EC68 8000E068 0C01C42C */ jal set_free_queue_state diff --git a/asm/non_matchings/objects/func_800101AC.s b/asm/non_matchings/objects/func_800101AC.s index 94fa5737..4b072f78 100644 --- a/asm/non_matchings/objects/func_800101AC.s +++ b/asm/non_matchings/objects/func_800101AC.s @@ -183,7 +183,7 @@ glabel L80010400 /* 011028 80010428 24140012 */ li $s4, 18 /* 01102C 8001042C 16850005 */ bne $s4, $a1, .L80010444 /* 011030 80010430 00000000 */ nop -/* 011034 80010434 0C00FC37 */ jal func_8003F0DC +/* 011034 80010434 0C00FC37 */ jal decrease_rocket_sound_timer /* 011038 80010438 00000000 */ nop /* 01103C 8001043C 86C50048 */ lh $a1, 0x48($s6) /* 011040 80010440 00000000 */ nop diff --git a/asm/non_matchings/objects/func_80010994.s b/asm/non_matchings/objects/func_80010994.s index 552fbed7..5de6811c 100644 --- a/asm/non_matchings/objects/func_80010994.s +++ b/asm/non_matchings/objects/func_80010994.s @@ -97,7 +97,7 @@ glabel func_80010994 /* 0116FC 80010AFC 3C158012 */ lui $s5, %hi(gRacers) # $s5, 0x8012 /* 011700 80010B00 0C0050AE */ jal func_800142B8 /* 011704 80010B04 26B5AEE4 */ addiu $s5, %lo(gRacers) # addiu $s5, $s5, -0x511c -/* 011708 80010B08 0C00556E */ jal func_800155B8 +/* 011708 80010B08 0C00556E */ jal process_object_interactions /* 01170C 80010B0C 00000000 */ nop /* 011710 80010B10 0C007A27 */ jal func_8001E89C /* 011714 80010B14 00000000 */ nop @@ -145,9 +145,9 @@ glabel func_80010994 /* 0117B0 80010BB0 26520004 */ addiu $s2, $s2, 4 .L80010BB4: /* 0117B4 80010BB4 3C138012 */ lui $s3, %hi(gObjectCount) # $s3, 0x8012 -/* 0117B8 80010BB8 3C118012 */ lui $s1, %hi(D_8011AE60) # $s1, 0x8012 +/* 0117B8 80010BB8 3C118012 */ lui $s1, %hi(gObjectListStart) # $s1, 0x8012 /* 0117BC 80010BBC 8E73AE5C */ lw $s3, %lo(gObjectCount)($s3) -/* 0117C0 80010BC0 8E31AE60 */ lw $s1, %lo(D_8011AE60)($s1) +/* 0117C0 80010BC0 8E31AE60 */ lw $s1, %lo(gObjectListStart)($s1) /* 0117C4 80010BC4 00000000 */ nop /* 0117C8 80010BC8 0233082A */ slt $at, $s1, $s3 /* 0117CC 80010BCC 1020004C */ beqz $at, .L80010D00 @@ -294,8 +294,8 @@ glabel func_80010994 .L80010DC8: /* 0119C8 80010DC8 0C002EB7 */ jal func_8000BADC /* 0119CC 80010DCC 02802025 */ move $a0, $s4 -/* 0119D0 80010DD0 3C118012 */ lui $s1, %hi(D_8011AE60) # $s1, 0x8012 -/* 0119D4 80010DD4 8E31AE60 */ lw $s1, %lo(D_8011AE60)($s1) +/* 0119D0 80010DD0 3C118012 */ lui $s1, %hi(gObjectListStart) # $s1, 0x8012 +/* 0119D4 80010DD4 8E31AE60 */ lw $s1, %lo(gObjectListStart)($s1) /* 0119D8 80010DD8 00000000 */ nop /* 0119DC 80010DDC 0233082A */ slt $at, $s1, $s3 /* 0119E0 80010DE0 1020001D */ beqz $at, .L80010E58 @@ -337,8 +337,8 @@ glabel func_80010994 /* 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 -/* 011A6C 80010E6C 8E31AE60 */ lw $s1, %lo(D_8011AE60)($s1) +/* 011A68 80010E68 3C118012 */ lui $s1, %hi(gObjectListStart) # $s1, 0x8012 +/* 011A6C 80010E6C 8E31AE60 */ lw $s1, %lo(gObjectListStart)($s1) /* 011A70 80010E70 00131080 */ sll $v0, $s3, 2 /* 011A74 80010E74 0233082A */ slt $at, $s1, $s3 /* 011A78 80010E78 10200013 */ beqz $at, .L80010EC8 @@ -369,10 +369,10 @@ glabel func_80010994 /* 011AD0 80010ED0 0C00CB1B */ jal get_light_count /* 011AD4 80010ED4 00000000 */ nop /* 011AD8 80010ED8 1840001F */ blez $v0, .L80010F58 -/* 011ADC 80010EDC 3C118012 */ lui $s1, %hi(D_8011AE60) # $s1, 0x8012 +/* 011ADC 80010EDC 3C118012 */ lui $s1, %hi(gObjectListStart) # $s1, 0x8012 /* 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) +/* 011AE8 80010EE8 8E31AE60 */ lw $s1, %lo(gObjectListStart)($s1) /* 011AEC 80010EEC 00000000 */ nop /* 011AF0 80010EF0 0222082A */ slt $at, $s1, $v0 /* 011AF4 80010EF4 10200018 */ beqz $at, .L80010F58 @@ -464,7 +464,7 @@ glabel func_80010994 /* 011C30 80011030 3C018012 */ lui $at, %hi(D_8011AD24) # $at, 0x8012 /* 011C34 80011034 A020AD24 */ sb $zero, %lo(D_8011AD24)($at) /* 011C38 80011038 3C018012 */ lui $at, %hi(D_8011AD53) # $at, 0x8012 -/* 011C3C 8001103C 0C0038AD */ jal func_8000E2B4 +/* 011C3C 8001103C 0C0038AD */ jal transform_player_vehicle /* 011C40 80011040 A020AD53 */ sb $zero, %lo(D_8011AD53)($at) /* 011C44 80011044 0C0273EC */ jal try_close_dialogue_box /* 011C48 80011048 00000000 */ nop @@ -479,8 +479,8 @@ glabel func_80010994 /* 011C6C 8001106C 8D4AADB0 */ lw $t2, %lo(D_8011ADB0)($t2) /* 011C70 80011070 24010050 */ li $at, 80 /* 011C74 80011074 15410025 */ bne $t2, $at, .L8001110C -/* 011C78 80011078 3C0B8012 */ lui $t3, %hi(D_8011AE7A) # $t3, 0x8012 -/* 011C7C 8001107C 856BAE7A */ lh $t3, %lo(D_8011AE7A)($t3) +/* 011C78 80011078 3C0B8012 */ lui $t3, %hi(gCutsceneID) # $t3, 0x8012 +/* 011C7C 8001107C 856BAE7A */ lh $t3, %lo(gCutsceneID)($t3) /* 011C80 80011080 00002825 */ move $a1, $zero /* 011C84 80011084 15600021 */ bnez $t3, .L8001110C /* 011C88 80011088 00009825 */ move $s3, $zero diff --git a/asm/non_matchings/objects/func_80014814.s b/asm/non_matchings/objects/func_80014814.s index 5355e06c..2b3c9507 100644 --- a/asm/non_matchings/objects/func_80014814.s +++ b/asm/non_matchings/objects/func_80014814.s @@ -14,8 +14,8 @@ glabel func_80014814 .L80014844: /* 015444 80014844 8CC20000 */ lw $v0, ($a2) -/* 015448 80014848 3C038012 */ lui $v1, %hi(D_8011AE60) # $v1, 0x8012 -/* 01544C 8001484C 8C63AE60 */ lw $v1, %lo(D_8011AE60)($v1) +/* 015448 80014848 3C038012 */ lui $v1, %hi(gObjectListStart) # $v1, 0x8012 +/* 01544C 8001484C 8C63AE60 */ lw $v1, %lo(gObjectListStart)($v1) /* 015450 80014850 2442FFFF */ addiu $v0, $v0, -1 /* 015454 80014854 0043082A */ slt $at, $v0, $v1 /* 015458 80014858 00402825 */ move $a1, $v0 diff --git a/asm/non_matchings/objects/func_80018CE0.s b/asm/non_matchings/objects/func_80018CE0.s index f5e9ddb7..05e2e688 100644 --- a/asm/non_matchings/objects/func_80018CE0.s +++ b/asm/non_matchings/objects/func_80018CE0.s @@ -34,8 +34,8 @@ glabel func_80018CE0 /* 019960 80018D60 0C019884 */ jal get_viewport_count /* 019964 80018D64 00000000 */ nop /* 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) +/* 01996C 80018D6C 3C0C8012 */ lui $t4, %hi(gObjectListStart) # $t4, 0x8012 +/* 019970 80018D70 8D8CAE60 */ lw $t4, %lo(gObjectListStart)($t4) /* 019974 80018D74 3C0D8012 */ lui $t5, %hi(gObjectCount) # $t5, 0x8012 /* 019978 80018D78 8DADAE5C */ lw $t5, %lo(gObjectCount)($t5) /* 01997C 80018D7C AFAC00F4 */ sw $t4, 0xf4($sp) diff --git a/asm/non_matchings/objects/func_80019808.s b/asm/non_matchings/objects/func_80019808.s index 50148715..f904b75c 100644 --- a/asm/non_matchings/objects/func_80019808.s +++ b/asm/non_matchings/objects/func_80019808.s @@ -320,8 +320,8 @@ glabel func_80019808 .L80019CA0: /* 01A8A0 80019CA0 1495FFC9 */ bne $a0, $s5, .L80019BC8 /* 01A8A4 80019CA4 00000000 */ nop -/* 01A8A8 80019CA8 3C13800E */ lui $s3, %hi(D_800DC744) # $s3, 0x800e -/* 01A8AC 80019CAC 2673C744 */ addiu $s3, %lo(D_800DC744) # addiu $s3, $s3, -0x38bc +/* 01A8A8 80019CA8 3C13800E */ lui $s3, %hi(gSwapLeadPlayer) # $s3, 0x800e +/* 01A8AC 80019CAC 2673C744 */ addiu $s3, %lo(gSwapLeadPlayer) # addiu $s3, $s3, -0x38bc /* 01A8B0 80019CB0 0C0270B4 */ jal is_in_tracks_mode /* 01A8B4 80019CB4 A2600000 */ sb $zero, ($s3) /* 01A8B8 80019CB8 14400024 */ bnez $v0, .L80019D4C @@ -439,7 +439,7 @@ glabel func_80019808 /* 01AA4C 80019E4C 3C0F800E */ lui $t7, %hi(D_800DC73C) # $t7, 0x800e /* 01AA50 80019E50 1320000A */ beqz $t9, .L80019E7C /* 01AA54 80019E54 00000000 */ nop -/* 01AA58 80019E58 0C01BCE6 */ jal func_8006F398 +/* 01AA58 80019E58 0C01BCE6 */ jal swap_lead_player /* 01AA5C 80019E5C A2600000 */ sb $zero, ($s3) /* 01AA60 80019E60 3C18800E */ lui $t8, %hi(D_800DC73C) # $t8, 0x800e /* 01AA64 80019E64 8318C73C */ lb $t8, %lo(D_800DC73C)($t8) @@ -841,7 +841,7 @@ glabel func_80019808 /* 01B008 8001A408 3C098012 */ lui $t1, %hi(gRacersByPosition) # $t1, 0x8012 /* 01B00C 8001A40C 14400007 */ bnez $v0, .L8001A42C /* 01B010 8001A410 2529AEE8 */ addiu $t1, %lo(gRacersByPosition) # addiu $t1, $t1, -0x5118 -/* 01B014 8001A414 0C0069F6 */ jal func_8001A7D8 +/* 01B014 8001A414 0C0069F6 */ jal set_course_finish_flags /* 01B018 8001A418 02C02025 */ move $a0, $s6 /* 01B01C 8001A41C 3C098012 */ lui $t1, %hi(gRacersByPosition) # $t1, 0x8012 /* 01B020 8001A420 10400002 */ beqz $v0, .L8001A42C @@ -942,9 +942,9 @@ glabel func_80019808 /* 01B170 8001A570 03202025 */ move $a0, $t9 .L8001A574: /* 01B174 8001A574 9318AEF5 */ lbu $t8, %lo(gIsTimeTrial)($t8) -/* 01B178 8001A578 3C13800E */ lui $s3, %hi(D_800DC744) # $s3, 0x800e +/* 01B178 8001A578 3C13800E */ lui $s3, %hi(gSwapLeadPlayer) # $s3, 0x800e /* 01B17C 8001A57C 17000016 */ bnez $t8, .L8001A5D8 -/* 01B180 8001A580 2673C744 */ addiu $s3, %lo(D_800DC744) # addiu $s3, $s3, -0x38bc +/* 01B180 8001A580 2673C744 */ addiu $s3, %lo(gSwapLeadPlayer) # addiu $s3, $s3, -0x38bc /* 01B184 8001A584 00008025 */ move $s0, $zero /* 01B188 8001A588 00005025 */ move $t2, $zero /* 01B18C 8001A58C 24020018 */ li $v0, 24 @@ -983,9 +983,9 @@ glabel func_80019808 /* 01B208 8001A608 A2740000 */ sb $s4, ($s3) .L8001A60C: /* 01B20C 8001A60C 8D2F0000 */ lw $t7, ($t1) -/* 01B210 8001A610 3C118012 */ lui $s1, %hi(D_8011ADC4) # $s1, 0x8012 +/* 01B210 8001A610 3C118012 */ lui $s1, %hi(gFirstTimeFinish) # $s1, 0x8012 /* 01B214 8001A614 8DEE0000 */ lw $t6, ($t7) -/* 01B218 8001A618 2631ADC4 */ addiu $s1, %lo(D_8011ADC4) # addiu $s1, $s1, -0x523c +/* 01B218 8001A618 2631ADC4 */ addiu $s1, %lo(gFirstTimeFinish) # addiu $s1, $s1, -0x523c /* 01B21C 8001A61C 8DC80064 */ lw $t0, 0x64($t6) /* 01B220 8001A620 A2200000 */ sb $zero, ($s1) /* 01B224 8001A624 92D9004A */ lbu $t9, 0x4a($s6) @@ -1018,7 +1018,7 @@ glabel func_80019808 /* 01B288 8001A688 00008025 */ move $s0, $zero /* 01B28C 8001A68C 15C00005 */ bnez $t6, .L8001A6A4 /* 01B290 8001A690 83B9005B */ lb $t9, 0x5b($sp) -/* 01B294 8001A694 0C0069F6 */ jal func_8001A7D8 +/* 01B294 8001A694 0C0069F6 */ jal set_course_finish_flags /* 01B298 8001A698 02C02025 */ move $a0, $s6 /* 01B29C 8001A69C 00408025 */ move $s0, $v0 .L8001A6A0: @@ -1047,7 +1047,7 @@ glabel func_80019808 /* 01B2EC 8001A6EC 3C19800E */ lui $t9, %hi(D_800DC73C) # $t9, 0x800e /* 01B2F0 8001A6F0 11E0000A */ beqz $t7, .L8001A71C /* 01B2F4 8001A6F4 00000000 */ nop -/* 01B2F8 8001A6F8 0C01BCE6 */ jal func_8006F398 +/* 01B2F8 8001A6F8 0C01BCE6 */ jal swap_lead_player /* 01B2FC 8001A6FC A2600000 */ sb $zero, ($s3) /* 01B300 8001A700 3C0E800E */ lui $t6, %hi(D_800DC73C) # $t6, 0x800e /* 01B304 8001A704 81CEC73C */ lb $t6, %lo(D_800DC73C)($t6) diff --git a/asm/non_matchings/objects/func_8001A8F4.s b/asm/non_matchings/objects/func_8001A8F4.s index 2375f837..dfbe9af0 100644 --- a/asm/non_matchings/objects/func_8001A8F4.s +++ b/asm/non_matchings/objects/func_8001A8F4.s @@ -108,7 +108,7 @@ glabel func_8001A8F4 /* 01B680 8001AA80 00000000 */ nop /* 01B684 8001AA84 0C0282DD */ jal func_800A0B74 /* 01B688 8001AA88 00000000 */ nop -/* 01B68C 8001AA8C 0C00FC34 */ jal func_8003F0D0 +/* 01B68C 8001AA8C 0C00FC34 */ jal reset_rocket_sound_timer /* 01B690 8001AA90 00000000 */ nop /* 01B694 8001AA94 0C001276 */ jal func_800049D8 /* 01B698 8001AA98 00000000 */ nop @@ -130,15 +130,15 @@ glabel func_8001A8F4 /* 01B6D8 8001AAD8 8C650064 */ lw $a1, 0x64($v1) /* 01B6DC 8001AADC AC830000 */ sw $v1, ($a0) /* 01B6E0 8001AAE0 8CF80000 */ lw $t8, ($a3) -/* 01B6E4 8001AAE4 3C08800E */ lui $t0, %hi(D_800DC744) # $t0, 0x800e -/* 01B6E8 8001AAE8 2508C744 */ addiu $t0, %lo(D_800DC744) # addiu $t0, $t0, -0x38bc +/* 01B6E4 8001AAE4 3C08800E */ lui $t0, %hi(gSwapLeadPlayer) # $t0, 0x800e +/* 01B6E8 8001AAE8 2508C744 */ addiu $t0, %lo(gSwapLeadPlayer) # addiu $t0, $t0, -0x38bc /* 01B6EC 8001AAEC AF060004 */ sw $a2, 4($t8) /* 01B6F0 8001AAF0 81190000 */ lb $t9, ($t0) /* 01B6F4 8001AAF4 00000000 */ nop /* 01B6F8 8001AAF8 13200007 */ beqz $t9, .L8001AB18 /* 01B6FC 8001AAFC 00000000 */ nop /* 01B700 8001AB00 A1000000 */ sb $zero, ($t0) -/* 01B704 8001AB04 0C01BCE6 */ jal func_8006F398 +/* 01B704 8001AB04 0C01BCE6 */ jal swap_lead_player /* 01B708 8001AB08 AFA50038 */ sw $a1, 0x38($sp) /* 01B70C 8001AB0C 8FA50038 */ lw $a1, 0x38($sp) /* 01B710 8001AB10 00000000 */ nop @@ -265,18 +265,18 @@ glabel func_8001A8F4 /* 01B8D0 8001ACD0 A029AD50 */ sb $t1, %lo(D_8011AD50)($at) /* 01B8D4 8001ACD4 0C007917 */ jal func_8001E45C /* 01B8D8 8001ACD8 2404000A */ li $a0, 10 -/* 01B8DC 8001ACDC 3C108012 */ lui $s0, %hi(D_8011ADC8) # $s0, 0x8012 -/* 01B8E0 8001ACE0 2610ADC8 */ addiu $s0, %lo(D_8011ADC8) # addiu $s0, $s0, -0x5238 +/* 01B8DC 8001ACDC 3C108012 */ lui $s0, %hi(gBalloonCutsceneTimer) # $s0, 0x8012 +/* 01B8E0 8001ACE0 2610ADC8 */ addiu $s0, %lo(gBalloonCutsceneTimer) # addiu $s0, $s0, -0x5238 /* 01B8E4 8001ACE4 0C007A4F */ jal func_8001E93C /* 01B8E8 8001ACE8 AE000000 */ sw $zero, ($s0) /* 01B8EC 8001ACEC 3C028012 */ lui $v0, %hi(D_8011AD50) # $v0, 0x8012 /* 01B8F0 8001ACF0 8042AD50 */ lb $v0, %lo(D_8011AD50)($v0) /* 01B8F4 8001ACF4 00000000 */ nop .L8001ACF8: -/* 01B8F8 8001ACF8 3C108012 */ lui $s0, %hi(D_8011ADC8) # $s0, 0x8012 +/* 01B8F8 8001ACF8 3C108012 */ lui $s0, %hi(gBalloonCutsceneTimer) # $s0, 0x8012 /* 01B8FC 8001ACFC 24010003 */ li $at, 3 /* 01B900 8001AD00 1441000C */ bne $v0, $at, .L8001AD34 -/* 01B904 8001AD04 2610ADC8 */ addiu $s0, %lo(D_8011ADC8) # addiu $s0, $s0, -0x5238 +/* 01B904 8001AD04 2610ADC8 */ addiu $s0, %lo(gBalloonCutsceneTimer) # addiu $s0, $s0, -0x5238 /* 01B908 8001AD08 3C04800E */ lui $a0, %hi(D_800DC860) # $a0, 0x800e /* 01B90C 8001AD0C 0C030076 */ jal transition_begin /* 01B910 8001AD10 2484C860 */ addiu $a0, %lo(D_800DC860) # addiu $a0, $a0, -0x37a0 diff --git a/asm/non_matchings/objects/func_8001AE64.s b/asm/non_matchings/objects/func_8001AE64.s index e3799207..e111127e 100644 --- a/asm/non_matchings/objects/func_8001AE64.s +++ b/asm/non_matchings/objects/func_8001AE64.s @@ -259,15 +259,15 @@ glabel func_8001AE64 /* 01BE24 8001B224 8FA40034 */ lw $a0, 0x34($sp) /* 01BE28 8001B228 0218082A */ slt $at, $s0, $t8 /* 01BE2C 8001B22C 10200010 */ beqz $at, .L8001B270 -/* 01BE30 8001B230 3C0F800E */ lui $t7, %hi(D_800DC734) # $t7, 0x800e -/* 01BE34 8001B234 91EFC734 */ lbu $t7, %lo(D_800DC734)($t7) +/* 01BE30 8001B230 3C0F800E */ lui $t7, %hi(gTimeTrialStaffGhost) # $t7, 0x800e +/* 01BE34 8001B234 91EFC734 */ lbu $t7, %lo(gTimeTrialStaffGhost)($t7) /* 01BE38 8001B238 8FA40034 */ lw $a0, 0x34($sp) /* 01BE3C 8001B23C 11E00008 */ beqz $t7, .L8001B260 /* 01BE40 8001B240 00000000 */ nop /* 01BE44 8001B244 0C01AF62 */ jal get_current_map_id /* 01BE48 8001B248 00000000 */ nop /* 01BE4C 8001B24C 8FA50034 */ lw $a1, 0x34($sp) -/* 01BE50 8001B250 0C006CF1 */ jal func_8001B3C4 +/* 01BE50 8001B250 0C006CF1 */ jal tt_ghost_beaten /* 01BE54 8001B254 00402025 */ move $a0, $v0 /* 01BE58 8001B258 10000008 */ b .L8001B27C /* 01BE5C 8001B25C 8FBF001C */ lw $ra, 0x1c($sp) diff --git a/asm/non_matchings/objects/func_8001B4FC.s b/asm/non_matchings/objects/func_8001B4FC.s index e0b2591d..c356444d 100644 --- a/asm/non_matchings/objects/func_8001B4FC.s +++ b/asm/non_matchings/objects/func_8001B4FC.s @@ -1,13 +1,13 @@ glabel func_8001B4FC /* 01C0FC 8001B4FC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 01C100 8001B500 3C01800E */ lui $at, %hi(D_800DC738) # $at, 0x800e -/* 01C104 8001B504 A020C738 */ sb $zero, %lo(D_800DC738)($at) +/* 01C100 8001B500 3C01800E */ lui $at, %hi(gBeatStaffGhost) # $at, 0x800e +/* 01C104 8001B504 A020C738 */ sb $zero, %lo(gBeatStaffGhost)($at) /* 01C108 8001B508 AFBF001C */ sw $ra, 0x1c($sp) /* 01C10C 8001B50C AFB00018 */ sw $s0, 0x18($sp) -/* 01C110 8001B510 3C01800E */ lui $at, %hi(D_800DC734) # $at, 0x800e +/* 01C110 8001B510 3C01800E */ lui $at, %hi(gTimeTrialStaffGhost) # $at, 0x800e /* 01C114 8001B514 00808025 */ move $s0, $a0 /* 01C118 8001B518 0C01BAA4 */ jal get_settings -/* 01C11C 8001B51C A020C734 */ sb $zero, %lo(D_800DC734)($at) +/* 01C11C 8001B51C A020C734 */ sb $zero, %lo(gTimeTrialStaffGhost)($at) /* 01C120 8001B520 AFA20020 */ sw $v0, 0x20($sp) /* 01C124 8001B524 0C01AC2B */ jal get_map_default_vehicle /* 01C128 8001B528 02002025 */ move $a0, $s0 @@ -69,20 +69,20 @@ glabel func_8001B4FC /* 01C1FC 8001B5FC 006D5824 */ and $t3, $v1, $t5 /* 01C200 8001B600 15600003 */ bnez $t3, .L8001B610 /* 01C204 8001B604 240F0001 */ li $t7, 1 -/* 01C208 8001B608 3C01800E */ lui $at, %hi(D_800DC738) # $at, 0x800e -/* 01C20C 8001B60C A02FC738 */ sb $t7, %lo(D_800DC738)($at) +/* 01C208 8001B608 3C01800E */ lui $at, %hi(gBeatStaffGhost) # $at, 0x800e +/* 01C20C 8001B60C A02FC738 */ sb $t7, %lo(gBeatStaffGhost)($at) .L8001B610: /* 01C210 8001B610 0C006CBC */ jal func_8001B2F0 /* 01C214 8001B614 02002025 */ move $a0, $s0 /* 01C218 8001B618 14400003 */ bnez $v0, .L8001B628 /* 01C21C 8001B61C 24090001 */ li $t1, 1 -/* 01C220 8001B620 3C01800E */ lui $at, %hi(D_800DC734) # $at, 0x800e -/* 01C224 8001B624 A029C734 */ sb $t1, %lo(D_800DC734)($at) +/* 01C220 8001B620 3C01800E */ lui $at, %hi(gTimeTrialStaffGhost) # $at, 0x800e +/* 01C224 8001B624 A029C734 */ sb $t1, %lo(gTimeTrialStaffGhost)($at) .L8001B628: /* 01C228 8001B628 8FBF001C */ lw $ra, 0x1c($sp) .L8001B62C: -/* 01C22C 8001B62C 3C02800E */ lui $v0, %hi(D_800DC734) # $v0, 0x800e -/* 01C230 8001B630 9042C734 */ lbu $v0, %lo(D_800DC734)($v0) +/* 01C22C 8001B62C 3C02800E */ lui $v0, %hi(gTimeTrialStaffGhost) # $v0, 0x800e +/* 01C230 8001B630 9042C734 */ lbu $v0, %lo(gTimeTrialStaffGhost)($v0) /* 01C234 8001B634 8FB00018 */ lw $s0, 0x18($sp) /* 01C238 8001B638 03E00008 */ jr $ra /* 01C23C 8001B63C 27BD0030 */ addiu $sp, $sp, 0x30 diff --git a/asm/non_matchings/objects/func_8001E4C4.s b/asm/non_matchings/objects/func_8001E4C4.s index 354d4917..a4fc1dd0 100644 --- a/asm/non_matchings/objects/func_8001E4C4.s +++ b/asm/non_matchings/objects/func_8001E4C4.s @@ -28,8 +28,8 @@ glabel func_8001E4C4 /* 01F124 8001E524 3C098012 */ lui $t1, %hi(gObjPtrList) # $t1, 0x8012 /* 01F128 8001E528 1860002C */ blez $v1, .L8001E5DC /* 01F12C 8001E52C 2529AE58 */ addiu $t1, %lo(gObjPtrList) # addiu $t1, $t1, -0x51a8 -/* 01F130 8001E530 3C0B8012 */ lui $t3, %hi(D_8011AE7A) # $t3, 0x8012 -/* 01F134 8001E534 256BAE7A */ addiu $t3, %lo(D_8011AE7A) # addiu $t3, $t3, -0x5186 +/* 01F130 8001E530 3C0B8012 */ lui $t3, %hi(gCutsceneID) # $t3, 0x8012 +/* 01F134 8001E534 256BAE7A */ addiu $t3, %lo(gCutsceneID) # addiu $t3, $t3, -0x5186 /* 01F138 8001E538 00002025 */ move $a0, $zero /* 01F13C 8001E53C 240C0014 */ li $t4, 20 /* 01F140 8001E540 240A0031 */ li $t2, 49 @@ -149,8 +149,8 @@ glabel func_8001E4C4 /* 01F2D0 8001E6D0 1020FFC6 */ beqz $at, .L8001E5EC /* 01F2D4 8001E6D4 00E2082A */ slt $at, $a3, $v0 .L8001E6D8: -/* 01F2D8 8001E6D8 3C018012 */ lui $at, %hi(D_8011AE60) # $at, 0x8012 -/* 01F2DC 8001E6DC AC22AE60 */ sw $v0, %lo(D_8011AE60)($at) +/* 01F2D8 8001E6D8 3C018012 */ lui $at, %hi(gObjectListStart) # $at, 0x8012 +/* 01F2DC 8001E6DC AC22AE60 */ sw $v0, %lo(gObjectListStart)($at) /* 01F2E0 8001E6E0 3C018012 */ lui $at, %hi(D_8011AE7C) # $at, 0x8012 /* 01F2E4 8001E6E4 03E00008 */ jr $ra /* 01F2E8 8001E6E8 A420AE7C */ sh $zero, %lo(D_8011AE7C)($at) diff --git a/asm/non_matchings/objects/func_8001E6EC.s b/asm/non_matchings/objects/func_8001E6EC.s index 4947b791..7ce319bb 100644 --- a/asm/non_matchings/objects/func_8001E6EC.s +++ b/asm/non_matchings/objects/func_8001E6EC.s @@ -14,8 +14,8 @@ glabel func_8001E6EC /* 01F31C 8001E71C 3C058012 */ lui $a1, %hi(D_8011ADD8) # $a1, 0x8012 /* 01F320 8001E720 3C128012 */ lui $s2, %hi(D_8011AE74) # $s2, 0x8012 /* 01F324 8001E724 3C118012 */ lui $s1, %hi(D_8011AE78) # $s1, 0x8012 -/* 01F328 8001E728 3C0C8012 */ lui $t4, %hi(D_8011AE7A) # $t4, 0x8012 -/* 01F32C 8001E72C 258CAE7A */ addiu $t4, %lo(D_8011AE7A) # addiu $t4, $t4, -0x5186 +/* 01F328 8001E728 3C0C8012 */ lui $t4, %hi(gCutsceneID) # $t4, 0x8012 +/* 01F32C 8001E72C 258CAE7A */ addiu $t4, %lo(gCutsceneID) # addiu $t4, $t4, -0x5186 /* 01F330 8001E730 2631AE78 */ addiu $s1, %lo(D_8011AE78) # addiu $s1, $s1, -0x5188 /* 01F334 8001E734 2652AE74 */ addiu $s2, %lo(D_8011AE74) # addiu $s2, $s2, -0x518c /* 01F338 8001E738 24A5ADD8 */ addiu $a1, %lo(D_8011ADD8) # addiu $a1, $a1, -0x5228 diff --git a/asm/non_matchings/objects/func_8001E93C.s b/asm/non_matchings/objects/func_8001E93C.s index c942904b..cb4d34c6 100644 --- a/asm/non_matchings/objects/func_8001E93C.s +++ b/asm/non_matchings/objects/func_8001E93C.s @@ -63,9 +63,9 @@ glabel func_8001E93C /* 01F620 8001EA20 25ADAE74 */ addiu $t5, %lo(D_8011AE74) # addiu $t5, $t5, -0x518c /* 01F624 8001EA24 3C058012 */ lui $a1, %hi(gObjPtrList) # $a1, 0x8012 /* 01F628 8001EA28 3C0B8012 */ lui $t3, %hi(D_8011ADD8) # $t3, 0x8012 -/* 01F62C 8001EA2C 3C098012 */ lui $t1, %hi(D_8011AE7A) # $t1, 0x8012 +/* 01F62C 8001EA2C 3C098012 */ lui $t1, %hi(gCutsceneID) # $t1, 0x8012 /* 01F630 8001EA30 8CA5AE58 */ lw $a1, %lo(gObjPtrList)($a1) -/* 01F634 8001EA34 2529AE7A */ addiu $t1, %lo(D_8011AE7A) # addiu $t1, $t1, -0x5186 +/* 01F634 8001EA34 2529AE7A */ addiu $t1, %lo(gCutsceneID) # addiu $t1, $t1, -0x5186 /* 01F638 8001EA38 256BADD8 */ addiu $t3, %lo(D_8011ADD8) # addiu $t3, $t3, -0x5228 /* 01F63C 8001EA3C 00005025 */ move $t2, $zero /* 01F640 8001EA40 00063880 */ sll $a3, $a2, 2 @@ -104,8 +104,8 @@ glabel func_8001E93C /* 01F6B4 8001EAB4 24120001 */ li $s2, 1 /* 01F6B8 8001EAB8 3C018012 */ lui $at, %hi(D_8011AE01) # $at, 0x8012 /* 01F6BC 8001EABC A032AE01 */ sb $s2, %lo(D_8011AE01)($at) -/* 01F6C0 8001EAC0 3C0C8012 */ lui $t4, %hi(D_8011AE60) # $t4, 0x8012 -/* 01F6C4 8001EAC4 8D8CAE60 */ lw $t4, %lo(D_8011AE60)($t4) +/* 01F6C0 8001EAC0 3C0C8012 */ lui $t4, %hi(gObjectListStart) # $t4, 0x8012 +/* 01F6C4 8001EAC4 8D8CAE60 */ lw $t4, %lo(gObjectListStart)($t4) /* 01F6C8 8001EAC8 3C018012 */ lui $at, %hi(D_8011AE78) # $at, 0x8012 /* 01F6CC 8001EACC A420AE78 */ sh $zero, %lo(D_8011AE78)($at) /* 01F6D0 8001EAD0 0186082A */ slt $at, $t4, $a2 diff --git a/asm/non_matchings/objects/func_8001F460.s b/asm/non_matchings/objects/func_8001F460.s index 9a149984..ff231d7c 100644 --- a/asm/non_matchings/objects/func_8001F460.s +++ b/asm/non_matchings/objects/func_8001F460.s @@ -10,8 +10,8 @@ glabel D_800E5680 .text glabel func_8001F460 /* 020060 8001F460 27BDFE68 */ addiu $sp, $sp, -0x198 -/* 020064 8001F464 3C0E8012 */ lui $t6, %hi(D_8011AE7A) # $t6, 0x8012 -/* 020068 8001F468 85CEAE7A */ lh $t6, %lo(D_8011AE7A)($t6) +/* 020064 8001F464 3C0E8012 */ lui $t6, %hi(gCutsceneID) # $t6, 0x8012 +/* 020068 8001F468 85CEAE7A */ lh $t6, %lo(gCutsceneID)($t6) /* 02006C 8001F46C AFB60050 */ sw $s6, 0x50($sp) /* 020070 8001F470 AFB40048 */ sw $s4, 0x48($sp) /* 020074 8001F474 00C0A025 */ move $s4, $a2 diff --git a/asm/non_matchings/objects/func_80021600.s b/asm/non_matchings/objects/func_80021600.s index 7e0bfe2a..e01b4852 100644 --- a/asm/non_matchings/objects/func_80021600.s +++ b/asm/non_matchings/objects/func_80021600.s @@ -1,7 +1,7 @@ glabel func_80021600 /* 022200 80021600 27BDFEA0 */ addiu $sp, $sp, -0x160 -/* 022204 80021604 3C0E8012 */ lui $t6, %hi(D_8011AE7A) # $t6, 0x8012 -/* 022208 80021608 85CEAE7A */ lh $t6, %lo(D_8011AE7A)($t6) +/* 022204 80021604 3C0E8012 */ lui $t6, %hi(gCutsceneID) # $t6, 0x8012 +/* 022208 80021608 85CEAE7A */ lh $t6, %lo(gCutsceneID)($t6) /* 02220C 8002160C AFBF0044 */ sw $ra, 0x44($sp) /* 022210 80021610 AFBE0040 */ sw $fp, 0x40($sp) /* 022214 80021614 AFB7003C */ sw $s7, 0x3c($sp) diff --git a/asm/non_matchings/objects/func_80022948.s b/asm/non_matchings/objects/func_80022948.s index 661c150d..124c7b9c 100644 --- a/asm/non_matchings/objects/func_80022948.s +++ b/asm/non_matchings/objects/func_80022948.s @@ -199,10 +199,10 @@ glabel func_80022948 /* 023850 80022C50 8C4C004C */ lw $t4, 0x4c($v0) /* 023854 80022C54 240D0002 */ li $t5, 2 /* 023858 80022C58 A18D0012 */ sb $t5, 0x12($t4) -/* 02385C 80022C5C 3C048012 */ lui $a0, %hi(D_8011AE60) # $a0, 0x8012 +/* 02385C 80022C5C 3C048012 */ lui $a0, %hi(gObjectListStart) # $a0, 0x8012 /* 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) +/* 023868 80022C68 8C84AE60 */ lw $a0, %lo(gObjectListStart)($a0) /* 02386C 80022C6C 2407003E */ li $a3, 62 /* 023870 80022C70 0085082A */ slt $at, $a0, $a1 /* 023874 80022C74 10200018 */ beqz $at, .L80022CD8 diff --git a/asm/non_matchings/objects/func_80022E18.s b/asm/non_matchings/objects/func_80022E18.s index 88a87636..cbd46732 100644 --- a/asm/non_matchings/objects/func_80022E18.s +++ b/asm/non_matchings/objects/func_80022E18.s @@ -52,10 +52,10 @@ glabel func_80022E18 /* 023ADC 80022EDC 240F0001 */ li $t7, 1 /* 023AE0 80022EE0 ADCD0000 */ sw $t5, ($t6) /* 023AE4 80022EE4 ACCF0000 */ sw $t7, ($a2) -/* 023AE8 80022EE8 3C058012 */ lui $a1, %hi(D_8011AE60) # $a1, 0x8012 +/* 023AE8 80022EE8 3C058012 */ lui $a1, %hi(gObjectListStart) # $a1, 0x8012 /* 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) +/* 023AF4 80022EF4 8CA5AE60 */ lw $a1, %lo(gObjectListStart)($a1) /* 023AF8 80022EF8 3C188012 */ lui $t8, %hi(gObjPtrList) # $t8, 0x8012 /* 023AFC 80022EFC 00A3082A */ slt $at, $a1, $v1 /* 023B00 80022F00 10200013 */ beqz $at, .L80022F50 @@ -143,7 +143,7 @@ glabel func_80022E18 .L80023030: /* 023C30 80023030 240A001F */ li $t2, 31 /* 023C34 80023034 24040002 */ li $a0, 2 -/* 023C38 80023038 0C01486E */ jal func_800521B8 +/* 023C38 80023038 0C01486E */ jal set_taj_status /* 023C3C 8002303C AD6A0078 */ sw $t2, 0x78($t3) /* 023C40 80023040 10000016 */ b .L8002309C /* 023C44 80023044 00000000 */ nop @@ -160,7 +160,7 @@ glabel func_80022E18 /* 023C6C 8002306C 24010002 */ li $at, 2 /* 023C70 80023070 15810003 */ bne $t4, $at, .L80023080 /* 023C74 80023074 00000000 */ nop -/* 023C78 80023078 0C030C7B */ jal func_800C31EC +/* 023C78 80023078 0C030C7B */ jal set_current_text /* 023C7C 8002307C 00002025 */ move $a0, $zero .L80023080: /* 023C80 80023080 3C018012 */ lui $at, %hi(D_8011ADB0) # $at, 0x8012 @@ -177,7 +177,7 @@ glabel func_80022E18 /* 023CA8 800230A8 00000000 */ nop /* 023CAC 800230AC 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 023CB0 800230B0 44816000 */ mtc1 $at, $f12 -/* 023CB4 800230B4 0C01AF44 */ jal func_8006BD10 +/* 023CB4 800230B4 0C01AF44 */ jal start_level_music /* 023CB8 800230B8 00000000 */ nop /* 023CBC 800230BC 8FBF0014 */ lw $ra, 0x14($sp) /* 023CC0 800230C0 3C018012 */ lui $at, %hi(gIsTajChallenge) # $at, 0x8012 diff --git a/asm/non_matchings/racer/func_80046524.s b/asm/non_matchings/racer/func_80046524.s index 84bdbac5..96334391 100644 --- a/asm/non_matchings/racer/func_80046524.s +++ b/asm/non_matchings/racer/func_80046524.s @@ -1082,8 +1082,8 @@ glabel func_80046524 /* 048020 80047420 240F0002 */ li $t7, 2 /* 048024 80047424 316E2000 */ andi $t6, $t3, 0x2000 /* 048028 80047428 11C00004 */ beqz $t6, .L8004743C -/* 04802C 8004742C 3C018012 */ lui $at, %hi(D_8011D582) # $at, 0x8012 -/* 048030 80047430 A02FD582 */ sb $t7, %lo(D_8011D582)($at) +/* 04802C 8004742C 3C018012 */ lui $at, %hi(gTajInteractStatus) # $at, 0x8012 +/* 048030 80047430 A02FD582 */ sb $t7, %lo(gTajInteractStatus)($at) /* 048034 80047434 820501E2 */ lb $a1, 0x1e2($s0) /* 048038 80047438 00000000 */ nop .L8004743C: diff --git a/asm/non_matchings/racer/func_80049794.s b/asm/non_matchings/racer/func_80049794.s index f0d0ffbf..41ceeb3b 100644 --- a/asm/non_matchings/racer/func_80049794.s +++ b/asm/non_matchings/racer/func_80049794.s @@ -832,8 +832,8 @@ glabel func_80049794 /* 04AEF0 8004A2F0 24190002 */ li $t9, 2 /* 04AEF4 8004A2F4 31F82000 */ andi $t8, $t7, 0x2000 /* 04AEF8 8004A2F8 13000002 */ beqz $t8, .L8004A304 -/* 04AEFC 8004A2FC 3C018012 */ lui $at, %hi(D_8011D582) # $at, 0x8012 -/* 04AF00 8004A300 A039D582 */ sb $t9, %lo(D_8011D582)($at) +/* 04AEFC 8004A2FC 3C018012 */ lui $at, %hi(gTajInteractStatus) # $at, 0x8012 +/* 04AF00 8004A300 A039D582 */ sb $t9, %lo(gTajInteractStatus)($at) .L8004A304: /* 04AF04 8004A304 8D6BD528 */ lw $t3, %lo(gCurrentRacerInput)($t3) /* 04AF08 8004A308 00000000 */ nop diff --git a/asm/non_matchings/racer/func_80050A28.s b/asm/non_matchings/racer/func_80050A28.s index 95034901..12a6e5e8 100644 --- a/asm/non_matchings/racer/func_80050A28.s +++ b/asm/non_matchings/racer/func_80050A28.s @@ -846,8 +846,8 @@ glabel func_80050A28 /* 0521A0 800515A0 240D0002 */ li $t5, 2 /* 0521A4 800515A4 332C2000 */ andi $t4, $t9, 0x2000 /* 0521A8 800515A8 11800002 */ beqz $t4, .L800515B4 -/* 0521AC 800515AC 3C018012 */ lui $at, %hi(D_8011D582) # $at, 0x8012 -/* 0521B0 800515B0 A02DD582 */ sb $t5, %lo(D_8011D582)($at) +/* 0521AC 800515AC 3C018012 */ lui $at, %hi(gTajInteractStatus) # $at, 0x8012 +/* 0521B0 800515B0 A02DD582 */ sb $t5, %lo(gTajInteractStatus)($at) .L800515B4: /* 0521B4 800515B4 C60800C0 */ lwc1 $f8, 0xc0($s0) /* 0521B8 800515B8 44802000 */ mtc1 $zero, $f4 diff --git a/asm/non_matchings/racer/set_ghost_position_and_rotation.s b/asm/non_matchings/racer/set_ghost_position_and_rotation.s index 33c4236f..55b7a359 100644 --- a/asm/non_matchings/racer/set_ghost_position_and_rotation.s +++ b/asm/non_matchings/racer/set_ghost_position_and_rotation.s @@ -14,7 +14,7 @@ glabel set_ghost_position_and_rotation /* 05AA54 80059E54 AFB00018 */ sw $s0, 0x18($sp) /* 05AA58 80059E58 30AE0001 */ andi $t6, $a1, 1 /* 05AA5C 80059E5C 00808025 */ move $s0, $a0 -/* 05AA60 80059E60 0C006CEB */ jal func_8001B3AC +/* 05AA60 80059E60 0C006CEB */ jal is_time_trial_ghost /* 05AA64 80059E64 AFAE005C */ sw $t6, 0x5c($sp) /* 05AA68 80059E68 8FA5005C */ lw $a1, 0x5c($sp) /* 05AA6C 80059E6C 10400002 */ beqz $v0, .L80059E78 diff --git a/asm/non_matchings/textures_sprites/func_8007BF34.s b/asm/non_matchings/textures_sprites/func_8007BF34.s index b07ae388..b004327e 100644 --- a/asm/non_matchings/textures_sprites/func_8007BF34.s +++ b/asm/non_matchings/textures_sprites/func_8007BF34.s @@ -72,8 +72,8 @@ glabel func_8007BF34 .L8007C038: /* 07CC38 8007C038 A5000000 */ sh $zero, ($t0) /* 07CC3C 8007C03C ACE50000 */ sw $a1, ($a3) -/* 07CC40 8007C040 3C19800E */ lui $t9, %hi(D_800DE7C4) # $t9, 0x800e -/* 07CC44 8007C044 8F39E7C4 */ lw $t9, %lo(D_800DE7C4)($t9) +/* 07CC40 8007C040 3C19800E */ lui $t9, %hi(gSpriteOpaque) # $t9, 0x800e +/* 07CC44 8007C044 8F39E7C4 */ lw $t9, %lo(gSpriteOpaque)($t9) /* 07CC48 8007C048 00A1C024 */ and $t8, $a1, $at /* 07CC4C 8007C04C 17200023 */ bnez $t9, .L8007C0DC /* 07CC50 8007C050 03002825 */ move $a1, $t8 diff --git a/asm/non_matchings/textures_sprites/func_8007C12C.s b/asm/non_matchings/textures_sprites/func_8007C12C.s index 1e277501..fb4f8cd2 100644 --- a/asm/non_matchings/textures_sprites/func_8007C12C.s +++ b/asm/non_matchings/textures_sprites/func_8007C12C.s @@ -11,8 +11,8 @@ glabel func_8007C12C /* 07CD50 8007C150 AFB00014 */ sw $s0, 0x14($sp) /* 07CD54 8007C154 04800007 */ bltz $a0, .L8007C174 /* 07CD58 8007C158 AC25635C */ sw $a1, %lo(D_8012635C)($at) -/* 07CD5C 8007C15C 3C0E8012 */ lui $t6, %hi(D_80126354) # $t6, 0x8012 -/* 07CD60 8007C160 8DCE6354 */ lw $t6, %lo(D_80126354)($t6) +/* 07CD5C 8007C15C 3C0E8012 */ lui $t6, %hi(gSpriteTableNum) # $t6, 0x8012 +/* 07CD60 8007C160 8DCE6354 */ lw $t6, %lo(gSpriteTableNum)($t6) /* 07CD64 8007C164 3C0A8012 */ lui $t2, %hi(D_80126358) # $t2, 0x8012 /* 07CD68 8007C168 008E082A */ slt $at, $a0, $t6 /* 07CD6C 8007C16C 14200003 */ bnez $at, .L8007C17C diff --git a/asm/non_matchings/textures_sprites/func_8007CA68.s b/asm/non_matchings/textures_sprites/func_8007CA68.s index b217d849..64f787b2 100644 --- a/asm/non_matchings/textures_sprites/func_8007CA68.s +++ b/asm/non_matchings/textures_sprites/func_8007CA68.s @@ -15,8 +15,8 @@ glabel func_8007CA68 /* 07D69C 8007CA9C AFA60048 */ sw $a2, 0x48($sp) /* 07D6A0 8007CAA0 04800007 */ bltz $a0, .L8007CAC0 /* 07D6A4 8007CAA4 AFA7004C */ sw $a3, 0x4c($sp) -/* 07D6A8 8007CAA8 3C0E8012 */ lui $t6, %hi(D_80126354) # $t6, 0x8012 -/* 07D6AC 8007CAAC 8DCE6354 */ lw $t6, %lo(D_80126354)($t6) +/* 07D6A8 8007CAA8 3C0E8012 */ lui $t6, %hi(gSpriteTableNum) # $t6, 0x8012 +/* 07D6AC 8007CAAC 8DCE6354 */ lw $t6, %lo(gSpriteTableNum)($t6) /* 07D6B0 8007CAB0 3C198012 */ lui $t9, %hi(gSpriteOffsetTable) # $t9, 0x8012 /* 07D6B4 8007CAB4 008E082A */ slt $at, $a0, $t6 /* 07D6B8 8007CAB8 14200007 */ bnez $at, .L8007CAD8 diff --git a/asm/non_matchings/tracks/func_80028050.s b/asm/non_matchings/tracks/func_80028050.s index 085de6ff..b32cbbe2 100644 --- a/asm/non_matchings/tracks/func_80028050.s +++ b/asm/non_matchings/tracks/func_80028050.s @@ -357,7 +357,7 @@ glabel func_80028050 /* 0291D0 800285D0 8CA5B110 */ lw $a1, %lo(D_8011B110)($a1) /* 0291D4 800285D4 8FA40074 */ lw $a0, 0x74($sp) /* 0291D8 800285D8 00057A00 */ sll $t7, $a1, 8 -/* 0291DC 800285DC 0C01ED1B */ jal func_8007B46C +/* 0291DC 800285DC 0C01ED1B */ jal set_animated_texture_header /* 0291E0 800285E0 01E02825 */ move $a1, $t7 /* 0291E4 800285E4 8E630000 */ lw $v1, ($s3) /* 0291E8 800285E8 3C010700 */ lui $at, 0x700 diff --git a/asm/non_matchings/tracks/func_8002E234.s b/asm/non_matchings/tracks/func_8002E234.s index 26154553..8f8d0fe5 100644 --- a/asm/non_matchings/tracks/func_8002E234.s +++ b/asm/non_matchings/tracks/func_8002E234.s @@ -71,7 +71,7 @@ glabel func_8002E234 /* 02EF18 8002E318 8C440004 */ lw $a0, 4($v0) /* 02EF1C 8002E31C 00055200 */ sll $t2, $a1, 8 /* 02EF20 8002E320 01402825 */ move $a1, $t2 -/* 02EF24 8002E324 0C01ED1B */ jal func_8007B46C +/* 02EF24 8002E324 0C01ED1B */ jal set_animated_texture_header /* 02EF28 8002E328 E7B2006C */ swc1 $f18, 0x6c($sp) /* 02EF2C 8002E32C 3C018012 */ lui $at, %hi(D_8011D0C0) # $at, 0x8012 /* 02EF30 8002E330 AC22D0C0 */ sw $v0, %lo(D_8011D0C0)($at) diff --git a/asm/non_matchings/vehicle_tricky/func_8005CB68.s b/asm/non_matchings/vehicle_tricky/func_8005CB68.s index adda2df5..744645ff 100644 --- a/asm/non_matchings/vehicle_tricky/func_8005CB68.s +++ b/asm/non_matchings/vehicle_tricky/func_8005CB68.s @@ -202,7 +202,7 @@ glabel func_8005CB68 /* 05DA50 8005CE50 00000000 */ nop /* 05DA54 8005CE54 10400004 */ beqz $v0, .L8005CE68 /* 05DA58 8005CE58 83AE0043 */ lb $t6, 0x43($sp) -/* 05DA5C 8005CE5C 0C01BCE6 */ jal func_8006F398 +/* 05DA5C 8005CE5C 0C01BCE6 */ jal swap_lead_player /* 05DA60 8005CE60 00000000 */ nop /* 05DA64 8005CE64 83AE0043 */ lb $t6, 0x43($sp) .L8005CE68: diff --git a/asm/non_matchings/waves/func_800BA8E4.s b/asm/non_matchings/waves/func_800BA8E4.s index 68432da7..e12c468a 100644 --- a/asm/non_matchings/waves/func_800BA8E4.s +++ b/asm/non_matchings/waves/func_800BA8E4.s @@ -71,7 +71,7 @@ glabel func_800BA8E4 /* 0BB5EC 800BA9EC 3C04800E */ lui $a0, %hi(D_800E30D0) # $a0, 0x800e /* 0BB5F0 800BA9F0 8C8430D0 */ lw $a0, %lo(D_800E30D0)($a0) /* 0BB5F4 800BA9F4 0005C200 */ sll $t8, $a1, 8 -/* 0BB5F8 800BA9F8 0C01ED1B */ jal func_8007B46C +/* 0BB5F8 800BA9F8 0C01ED1B */ jal set_animated_texture_header /* 0BB5FC 800BA9FC 03002825 */ move $a1, $t8 /* 0BB600 800BAA00 3C198013 */ lui $t9, %hi(gWaveBatch) # $t9, 0x8013 /* 0BB604 800BAA04 8F39A07C */ lw $t9, %lo(gWaveBatch)($t9) @@ -80,7 +80,7 @@ glabel func_800BA8E4 /* 0BB610 800BAA10 8C84A080 */ lw $a0, %lo(gWaveTexture)($a0) /* 0BB614 800BAA14 00057380 */ sll $t6, $a1, 0xe /* 0BB618 800BAA18 00408025 */ move $s0, $v0 -/* 0BB61C 800BAA1C 0C01ED1B */ jal func_8007B46C +/* 0BB61C 800BAA1C 0C01ED1B */ jal set_animated_texture_header /* 0BB620 800BAA20 01C02825 */ move $a1, $t6 /* 0BB624 800BAA24 00409025 */ move $s2, $v0 /* 0BB628 800BAA28 02002025 */ move $a0, $s0 @@ -184,7 +184,7 @@ glabel func_800BA8E4 /* 0BB7A0 800BABA0 91E50007 */ lbu $a1, 7($t7) /* 0BB7A4 800BABA4 8C84A080 */ lw $a0, %lo(gWaveTexture)($a0) /* 0BB7A8 800BABA8 00057380 */ sll $t6, $a1, 0xe -/* 0BB7AC 800BABAC 0C01ED1B */ jal func_8007B46C +/* 0BB7AC 800BABAC 0C01ED1B */ jal set_animated_texture_header /* 0BB7B0 800BABB0 01C02825 */ move $a1, $t6 /* 0BB7B4 800BABB4 8E270000 */ lw $a3, ($s1) /* 0BB7B8 800BABB8 3C010700 */ lui $at, 0x700 diff --git a/include/level_object_entries.h b/include/level_object_entries.h index 3fc4818f..7f3f0d7f 100644 --- a/include/level_object_entries.h +++ b/include/level_object_entries.h @@ -115,6 +115,7 @@ typedef struct LevelObjectEntry_SetupPoint { /* 0x08 */ u8 unk8; /* 0x09 */ u8 unk9; /* 0x0A */ u8 angleY; + /* 0x0B */ s8 vehicle; } LevelObjectEntry_SetupPoint; typedef struct LevelObjectEntry_Dino_Whale { diff --git a/include/object_properties.h b/include/object_properties.h index 2411a50f..1de924d6 100644 --- a/include/object_properties.h +++ b/include/object_properties.h @@ -149,6 +149,11 @@ typedef struct ObjPropertyRacer { s32 unk4; } ObjPropertyRacer; +typedef struct ObjPropertySetupPoint { + s32 unk0; + s32 unk4; +} ObjPropertySetupPoint; + typedef struct ObjProperties { union { ObjPropertyCommon common; @@ -179,6 +184,7 @@ typedef struct ObjProperties { ObjPropertyWorldKey worldKey; ObjPropertyWeaponBalloon weaponBalloon; ObjPropertyRacer racer; + ObjPropertySetupPoint setupPoint; }; } ObjProperties; diff --git a/include/structs.h b/include/structs.h index 1e38f3a0..b28ced15 100644 --- a/include/structs.h +++ b/include/structs.h @@ -726,7 +726,7 @@ typedef struct ObjectHeader { /* 0x24 */ ObjectHeader24 *unk24; /* 0x28 */ f32 shadeBrightness; /* 0x2C */ f32 shadeAmbient; - /* 0x30 */ u16 unk30; + /* 0x30 */ u16 flags; /* 0x32 */ s16 shadowGroup; /* 0x34 */ s16 unk34; /* 0x36 */ s16 waterEffectGroup; @@ -1277,7 +1277,7 @@ typedef struct Object_Racer { /* 0x1A8 */ s16 unk1A8; /* 0x1AA */ u16 unk1AA; /* 0x1AC */ s16 unk1AC; - /* 0x1AE */ s16 unk1AE; + /* 0x1AE */ s16 racePosition; /* 0x1B0 */ s16 unk1B0; /* 0x1B2 */ s16 unk1B2; /* 0x1B4 */ s32 unk1B4; diff --git a/src/camera.c b/src/camera.c index d9ded819..f66aac6c 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1167,7 +1167,7 @@ void render_ortho_triangle_image(Gfx **dList, MatrixS **mtx, Vertex **vtx, Objec gModelMatrixS[gModelMatrixStackPos] = *mtx; gSPMatrix((*dList)++, OS_PHYSICAL_TO_K0((*mtx)++), G_MTX_DKR_INDEX_2); gDkrEnableBillboard((*dList)++); - if (D_80120D0C == 0) { + if (D_80120D0C == FALSE) { index = (((u8) index) * sprite->baseTextureId) >> 8; } func_8007BF34(dList, sprite->unk6 | flags); diff --git a/src/game.c b/src/game.c index dbf8c2ec..7132df43 100644 --- a/src/game.c +++ b/src/game.c @@ -562,7 +562,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl if (gCurrentLevelHeader->race_type == RACETYPE_DEFAULT && numPlayers == 0 && is_time_trial_enabled()) { cutsceneId = CUTSCENE_ID_UNK_64; } - func_8001E450(cutsceneId); + set_cutscene_id(cutsceneId); 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++) { @@ -597,11 +597,14 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl func_8007AB24(gCurrentLevelHeader->unk4[numberOfPlayers]); } -void func_8006BD10(f32 arg0) { - if (gCurrentLevelHeader->music != 0) { +/** + * If the level's music ID is nonzero, set the current background music. +*/ +void start_level_music(f32 tempo) { + if (gCurrentLevelHeader->music != SEQUENCE_NONE) { func_800012E8(); play_music(gCurrentLevelHeader->music); - multiply_music_tempo(arg0); + multiply_music_tempo(tempo); func_80001074(gCurrentLevelHeader->instruments); } } diff --git a/src/game.h b/src/game.h index 388b6e9e..62d75afd 100644 --- a/src/game.h +++ b/src/game.h @@ -40,7 +40,7 @@ s8 get_map_world_id(s32 mapId); s32 get_hub_area_id(s32 worldId); void get_number_of_levels_and_worlds(s32 *outLevelCount, s32 *outWorldCount); s32 check_if_in_race(void); -void func_8006BD10(f32 arg0); +void start_level_music(f32 arg0); s32 get_current_map_id(void); u8 get_current_level_race_type(void); LevelHeader *get_current_level_header(void); diff --git a/src/game_text.c b/src/game_text.c index de099512..65e19720 100644 --- a/src/game_text.c +++ b/src/game_text.c @@ -12,8 +12,8 @@ s8 gTextTableExists = FALSE; s16 gTextDisplayNumber = 0; -s32 D_800E3678 = 0; -s32 D_800E367C = 0; +s32 gTextboxDelay = 0; +s32 gDelayedTextID = 0; s32 gSubtitleSetting = TRUE; /*******************************/ @@ -248,55 +248,65 @@ void set_textbox_display_value(s32 num) { gTextDisplayNumber = num; } -void func_800C314C(void) { - D_800E3678 = 0; +/** + * Sets the delayed text timer back to 0. +*/ +void reset_delayed_text(void) { + gTextboxDelay = 0; } -void func_800C3158(s32 arg0, f32 arg1) { +/** + * Set the delayed text ID and delay (in seconds) +*/ +void set_delayed_text(s32 textID, f32 delay) { if (osTvType == TV_TYPE_PAL) { - D_800E3678 = arg1 * 50.0; + gTextboxDelay = delay * 50.0; } else { - D_800E3678 = arg1 * 60.0; + gTextboxDelay = delay * 60.0; } - D_800E367C = arg0; + gDelayedTextID = textID; } -void func_800C31EC(s32 arg0) { +/** + * Set the current text index based on the entry. + * Start certain behaviours based on the header, + * like showing a subtitle, or opening an onscreen text box. +*/ +void set_current_text(s32 textID) { char **entries; UNUSED s32 pad; s32 size; s32 language; s32 temp; - if (gTextTableExists && arg0 >= 0) { - if (arg0 < gTextTableEntries) { + if (gTextTableExists && textID >= 0 && textID < gTextTableEntries) { language = get_language(); switch (language) { case LANGUAGE_GERMAN: - arg0 += 0x55; + textID += 85; break; case LANGUAGE_FRENCH: - arg0 += 0xAA; + textID += 170; break; case LANGUAGE_JAPANESE: - arg0 += 0xFF; + textID += 255; break; } - load_asset_to_address(ASSET_GAME_TEXT_TABLE, (u32) (*gGameTextTable)->entries, (arg0 & (~1)) << 2, 16); + load_asset_to_address(ASSET_GAME_TEXT_TABLE, (u32) (*gGameTextTable)->entries, (textID & (~1)) << 2, 16); entries = (*gGameTextTable)->entries; - temp = ((s32) entries[arg0 & 1]) & 0xFF000000; - size = (((s32) entries[(arg0 & 1) + 1]) & 0xFFFFFF) - (((s32) entries[arg0 & 1]) & 0xFFFFFF); + temp = ((s32) entries[textID & 1]) & 0xFF000000; + size = (((s32) entries[(textID & 1) + 1]) & 0xFFFFFF) - (((s32) entries[textID & 1]) & 0xFFFFFF); if (temp) { - load_asset_to_address(ASSET_GAME_TEXT, (u32) gCurrentMessageText[D_8012A7D4], ((s32) entries[arg0 & 1]) ^ temp, size); + load_asset_to_address(ASSET_GAME_TEXT, (u32) gCurrentMessageText[D_8012A7D4], ((s32) entries[textID & 1]) ^ temp, size); gCurrentTextProperties = gCurrentMessageText[D_8012A7D4]; find_next_subtitle(); D_8012A7D4 = (D_8012A7D4 + 1) & 1; return; } - load_asset_to_address(ASSET_GAME_TEXT, (u32) gGameTextTableEntries[D_8012A7A4], ((s32) entries[arg0 & 1]) ^ temp, size); + load_asset_to_address(ASSET_GAME_TEXT, (u32) gGameTextTableEntries[D_8012A7A4], ((s32) entries[textID & 1]) ^ temp, size); D_8012A7A0 = gGameTextTableEntries[D_8012A7A4]; D_8012A7A4 = (D_8012A7A4 + 1) & 1; D_8012A788 = 0; @@ -310,7 +320,6 @@ void func_800C31EC(s32 arg0) { gShowOnscreenMessage = TRUE; } return; - } } gCloseTextMessage = TRUE; } @@ -335,11 +344,11 @@ s32 func_800C3400(void) { void process_onscreen_textbox(s32 updateRate) { if (gTextTableExists) { if (!is_game_paused()) { - if (D_800E3678 > 0) { - D_800E3678 -= updateRate; - if (D_800E3678 <= 0) { - func_800C31EC(D_800E367C); - D_800E3678 = 0; + if (gTextboxDelay > 0) { + gTextboxDelay -= updateRate; + if (gTextboxDelay <= 0) { + set_current_text(gDelayedTextID); + gTextboxDelay = 0; } } } diff --git a/src/game_text.h b/src/game_text.h index 9c0da176..7107ffe6 100644 --- a/src/game_text.h +++ b/src/game_text.h @@ -58,14 +58,14 @@ void process_subtitles(s32 arg0); void load_game_text_table(void); void free_game_text_table(void); void set_textbox_display_value(s32 arg0); -void func_800C314C(void); -void func_800C3158(s32 arg0, f32 arg1); +void reset_delayed_text(void); +void set_delayed_text(s32 arg0, f32 arg1); s32 func_800C3400(void); void process_onscreen_textbox(s32 arg0); void find_next_subtitle(void); s32 func_800C38B4(s32 arg0, TextBox *textbox); void render_subtitles(void); -void func_800C31EC(s32 arg0); +void set_current_text(s32 arg0); s32 dialogue_challenge_loop(void); #endif diff --git a/src/game_ui.c b/src/game_ui.c index a22d8014..f8b00320 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -193,7 +193,7 @@ ByteColour gHudMinimapColours[40] = { { 0, 0, 0 }, }; -u32 D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); +u32 gHudColour = COLOUR_RGBA32(255, 255, 255, 254); f32 D_800E2838 = 0.0f; @@ -271,9 +271,9 @@ s8 D_80126D69; s32 gWrongWayNagTimer; u8 D_80126D70; u8 D_80126D71; -s32 D_80126D74; +s32 gTimeTrialVoiceDelay; s32 D_80126D78; -u16 D_80126D7C; +u16 gTimeTrialVoiceID; DrawTexture gHudSprites[128]; s32 D_80127180; Settings *gHudSettings; @@ -339,8 +339,8 @@ void init_hud(UNUSED s32 viewportCount) { D_80126D69 = 1; D_80126D68 = 1; D_80126D70 = 0; - D_80126D7C = 0; - D_80126D74 = 0; + gTimeTrialVoiceID = 0; + gTimeTrialVoiceDelay = 0; D_80126D3C = NULL; D_80126D44 = 0; D_80126CD3 = 0; @@ -396,7 +396,7 @@ u8 func_800A0190(void) { */ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s32 updateRate) { s32 sp2C; - Object_64* racer; + Object_Racer *racer; gHudCurrentViewport = get_current_viewport(); if (D_8012718A) { @@ -404,8 +404,8 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } gHudLevelHeader = get_current_level_header(); if (arg3 == NULL) { - if (func_8001E440() == 10) { - arg3 = get_racer_object_by_port(0); + if (get_cutscene_id() == 10) { + arg3 = get_racer_object_by_port(PLAYER_ONE); } } if (arg3 != NULL && !(gHudLevelHeader->unkBC & 2)) { @@ -426,16 +426,16 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } } if (gShowHUD == 0) { - racer = arg3->unk64; + racer = (Object_Racer *) arg3->unk64; if (D_8012718A) { - D_80126D10 = 1 - racer->racer.playerIndex; + D_80126D10 = 1 - racer->playerIndex; } else { - D_80126D10 = racer->racer.playerIndex; + D_80126D10 = racer->playerIndex; } gCurrentHud = gPlayerHud[gHudCurrentViewport]; - if (func_8001E440() != 10) { + if (get_cutscene_id() != 10) { if (gHUDNumPlayers == ONE_PLAYER) { - if (get_buttons_pressed_from_player(D_80126D10) & D_CBUTTONS && racer->racer.raceFinished == FALSE && ((gHudLevelHeader->race_type == RACETYPE_DEFAULT) || gHudLevelHeader->race_type == RACETYPE_HORSESHOE_GULCH) && D_80126D34) { + if (get_buttons_pressed_from_player(D_80126D10) & D_CBUTTONS && racer->raceFinished == FALSE && ((gHudLevelHeader->race_type == RACETYPE_DEFAULT) || gHudLevelHeader->race_type == RACETYPE_HORSESHOE_GULCH) && D_80126D34) { gShowCourseDirections = 1 - gShowCourseDirections; play_sound_global((SOUND_TING_HIGHER + gShowCourseDirections), NULL); if (gShowCourseDirections) { @@ -444,15 +444,15 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s D_800E27B8 = 0; } } - } else if (get_buttons_pressed_from_player(D_80126D10) & D_CBUTTONS && racer->racer.raceFinished == FALSE && !(gHudLevelHeader->race_type & RACETYPE_CHALLENGE) && D_80126D34) { - if (D_800E2794[gHUDNumPlayers][racer->racer.playerIndex] < PLAYER_FOUR) { - D_800E2794[gHUDNumPlayers][racer->racer.playerIndex]++; + } else if (get_buttons_pressed_from_player(D_80126D10) & D_CBUTTONS && racer->raceFinished == FALSE && !(gHudLevelHeader->race_type & RACETYPE_CHALLENGE) && D_80126D34) { + if (D_800E2794[gHUDNumPlayers][racer->playerIndex] < PLAYER_FOUR) { + D_800E2794[gHUDNumPlayers][racer->playerIndex]++; } else { - D_800E2794[gHUDNumPlayers][racer->racer.playerIndex] = PLAYER_ONE; + D_800E2794[gHUDNumPlayers][racer->playerIndex] = PLAYER_ONE; } - play_sound_global((SOUND_TING_HIGHEST - (D_800E2794[gHUDNumPlayers][racer->racer.playerIndex] == 0)), NULL); + play_sound_global((SOUND_TING_HIGHEST - (D_800E2794[gHUDNumPlayers][racer->playerIndex] == 0)), NULL); } - if (get_buttons_pressed_from_player(D_80126D10) & R_CBUTTONS && racer->racer.raceFinished == FALSE && D_80126D34 && D_80126CD0 == 0) { + if (get_buttons_pressed_from_player(D_80126D10) & R_CBUTTONS && racer->raceFinished == FALSE && D_80126D34 && D_80126CD0 == 0) { gHudToggleSettings[gHUDNumPlayers] = 1 - gHudToggleSettings[gHUDNumPlayers]; if (gHudToggleSettings[gHUDNumPlayers] == 0) { play_sound_global(SOUND_TING_LOW, NULL); @@ -470,7 +470,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s play_music(SEQUENCE_RACE_START_FANFARE); set_sound_channel_count(12); } else { - func_8006BD10(1.0f); + start_level_music(1.0f); } gRaceStartShowHudStep += 1; } @@ -479,8 +479,8 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s init_rdp_and_framebuffer(&gHUDCurrDisplayList); tex_enable_modes(0xFFFFFFFF); tex_disable_modes(RENDER_Z_COMPARE); - func_8007BF1C(FALSE); - if (check_if_showing_cutscene_camera() == FALSE && D_80126D34 == FALSE && racer->racer.playerIndex == PLAYER_ONE) { + sprite_opaque(FALSE); + if (check_if_showing_cutscene_camera() == FALSE && D_80126D34 == FALSE && racer->playerIndex == PLAYER_ONE) { if (D_80126D35 != 0) { D_80126D28 = sins_f(D_80126D2C) * D_80126D30 * 8.0f; D_80126D2C += updateRate << 0xB; @@ -509,35 +509,35 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); - func_800A7A60(arg3); + render_magnet_reticle(arg3); set_ortho_matrix_view(&gHUDCurrDisplayList, &gHUDCurrMatrix); gDPSetEnvColor(gHUDCurrDisplayList++, 255, 255, 255, 0); sp2C = func_8001139C() >> 1; if (is_in_time_trial()) { func_800A277C(sp2C, arg3, updateRate); } else { - if (func_8001E440() == 10) { + if (get_cutscene_id() == 10) { func_80068508(1); - func_800A718C(racer); + render_balloon_count(racer); func_80068508(0); } else { switch (get_current_level_race_type()) { case RACETYPE_DEFAULT: case RACETYPE_HORSESHOE_GULCH: - if (is_taj_challenge() != 0) { - func_800A263C(sp2C, arg3, updateRate); + if (is_taj_challenge()) { + render_hud_taj_race(sp2C, arg3, updateRate); } else { - func_800A0DC0(sp2C, arg3, updateRate); + render_hud_race(sp2C, arg3, updateRate); } break; case RACETYPE_BOSS: render_hud_race_boss(sp2C, arg3, updateRate); break; case RACETYPE_CHALLENGE_BANANAS: - func_800A1248(sp2C, arg3, updateRate); + render_hud_banana_challenge(sp2C, arg3, updateRate); break; case RACETYPE_CHALLENGE_BATTLE: - func_800A1C04(sp2C, arg3, updateRate); + render_hud_battle(sp2C, arg3, updateRate); break; case RACETYPE_CHALLENGE_EGGS: render_hud_challenge_eggs(sp2C, arg3, updateRate); @@ -548,11 +548,11 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } } } - if (racer->racer.raceFinished == 1) { + if (racer->raceFinished == TRUE) { func_80068508(1); if (is_in_time_trial()) { - func_800A6E30((Object_Racer *) racer, updateRate); - } else if (get_viewport_count() == VIEWPORTS_COUNT_1_PLAYER && racer->racer.unk1AC == 1) { + render_time_trial_finish((Object_Racer *) racer, updateRate); + } else if (get_viewport_count() == VIEWPORTS_COUNT_1_PLAYER && racer->unk1AC == 1) { if (is_in_two_player_adventure()) { if (get_current_level_race_type() == RACETYPE_BOSS) { goto showFinish; @@ -568,7 +568,7 @@ block_95: func_80068508(0); } D_80126CD1 = 0; - func_8007BF1C(TRUE); + sprite_opaque(TRUE); if (D_80127180) { gHudSprites[D_80127180].texture = NULL; render_textured_rectangle(&gHUDCurrDisplayList, (DrawTexture *) &gHudSprites, 0, 0, 255, 255, 255, 255); @@ -597,12 +597,12 @@ void func_800A0BD4(s32 updateRate) { s32 temp; s32 i; - if (D_80126D74 > 0) { - D_80126D74 -= updateRate; - if (D_80126D74 <= 0) { - D_80126D74 = 0; + if (gTimeTrialVoiceDelay > 0) { + gTimeTrialVoiceDelay -= updateRate; + if (gTimeTrialVoiceDelay <= 0) { + gTimeTrialVoiceDelay = 0; if (gHUDVoiceSoundMask == 0) { - play_sound_global(D_80126D7C, &gHUDVoiceSoundMask); + play_sound_global(gTimeTrialVoiceID, &gHUDVoiceSoundMask); } } } @@ -648,8 +648,11 @@ void func_800A0BD4(s32 updateRate) { } } -void func_800A0DC0(s32 arg0, Object *arg1, s32 updateRate) { - Object_Racer *racer = &arg1->unk64->racer; +/** + * In a race, render all of the race related HUD. +*/ +void render_hud_race(s32 arg0, Object *obj, s32 updateRate) { + Object_Racer *racer = &obj->unk64->racer; func_80068508(1); render_course_indicator_arrows(racer, updateRate); @@ -662,14 +665,14 @@ void func_800A0DC0(s32 arg0, Object *arg1, s32 updateRate) { render_racer_bananas(racer, updateRate); render_race_time(racer, updateRate); - func_800A4C44(racer, updateRate); - render_speedometer(arg1, updateRate); + render_race_position(racer, updateRate); + render_speedometer(obj, updateRate); if (gHudSilverCoinRace && racer->raceFinished == FALSE) { - func_800A47A0(racer, updateRate); + render_silver_coin_counter(racer, updateRate); } - render_weapon_hud(arg1, updateRate); + render_weapon_hud(obj, updateRate); func_80068508(0); } @@ -769,8 +772,11 @@ void render_course_indicator_arrows(Object_Racer *racer, s32 updateRate) { } } -// Renders the HUD for Smokey Castle -void func_800A1248(s32 arg0, Object *obj, s32 updateRate) { +/* + * Renders the HUD for the Smokey Castle challenge. + * Shows each players portrait and their aquired treasure. +*/ +void render_hud_banana_challenge(s32 arg0, Object *obj, s32 updateRate) { Object_Racer *racer; Object **racers; s32 numRacers; @@ -811,19 +817,19 @@ void func_800A1248(s32 arg0, Object *obj, s32 updateRate) { /** * The Egg Collector challenge mode displays the icons of each player and their score. */ -void render_hud_challenge_eggs(s32 arg0, Object *arg1, s32 updateRate) { - Object_Racer *racer = &arg1->unk64->racer; +void render_hud_challenge_eggs(s32 arg0, Object *obj, s32 updateRate) { + Object_Racer *racer = &obj->unk64->racer; if (racer->raceFinished == FALSE) { func_80068508(1); render_race_start(arg0, updateRate); - render_weapon_hud(arg1, updateRate); + render_weapon_hud(obj, updateRate); if ((127 - (updateRate * 2)) >= gCurrentHud->unk67A) { gCurrentHud->unk67A += updateRate * 2; } else { gCurrentHud->unk67A = (gCurrentHud->unk67A + (updateRate * 2)) - 255; } if (gNumActivePlayers != 2) { - func_800A14F0(arg1, updateRate); + func_800A14F0(obj, updateRate); } func_80068508(0); } @@ -870,7 +876,7 @@ void func_800A14F0(Object *racerObj, s32 updateRate) { if (((s32) gNumActivePlayers < 3) || (racer->playerIndex == curRacer->playerIndex)) { func_800A19A4(curRacer, updateRate); } - D_800E2834 = -2; + gHudColour = -2; if (gNumActivePlayers == 1) { gCurrentHud->unk64C += 68.0f; } else if (gNumActivePlayers == 2) { @@ -919,7 +925,7 @@ void func_800A19A4(Object_Racer *racer, UNUSED s32 updateRate) { func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk660); gCurrentHud->unk66C += 12.0f; } - D_800E2834 = sp44 | ~0xFF; + gHudColour = sp44 | ~0xFF; i2 = i; for (i = 0; (i < racer->eggHudCounter) && (i2 < 3); i++) { func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk660); @@ -930,8 +936,11 @@ void func_800A19A4(Object_Racer *racer, UNUSED s32 updateRate) { D_80126CD5 = 0; } - -void func_800A1C04(s32 arg0, Object *obj, s32 updateRate) { +/** + * Render the HUD for the battle mode challenge. + * Shows each players portrait and their remaining health. +*/ +void render_hud_battle(s32 arg0, Object *obj, s32 updateRate) { Object **racerObjs; Object_Racer *racer; s32 numRacers; @@ -995,11 +1004,11 @@ void func_800A22F4(Object_Racer *racer, UNUSED void *unused) { } if (gNumActivePlayers != 2) { func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk6A0); - func_8007BF1C(1); + sprite_opaque(TRUE); D_80126CD5 = TRUE; func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk680); D_80126CD5 = FALSE; - func_8007BF1C(0); + sprite_opaque(FALSE); } } @@ -1022,17 +1031,20 @@ void render_hud_race_boss(s32 arg0, Object *obj, s32 updateRate) { } render_speedometer(obj, updateRate); - func_800A4C44(racer, updateRate); + render_race_position(racer, updateRate); func_80068508(0); } -void func_800A263C(s32 arg0, Object *obj, s32 updateRate) { +/** + * When racing Taj in the overworld, render most of the basic race hud. +*/ +void render_hud_taj_race(s32 arg0, Object *obj, s32 updateRate) { Object_Racer *racer = (Object_Racer *) obj->unk64; func_80068508(1); render_wrong_way_text(racer, updateRate); render_lap_count(racer, updateRate); - func_800A4C44(racer, updateRate); + render_race_position(racer, updateRate); render_race_time(racer, updateRate); render_race_start(arg0, updateRate); render_speedometer(obj, updateRate); @@ -1044,13 +1056,13 @@ void func_800A263C(s32 arg0, Object *obj, s32 updateRate) { * In two player adventure, the icon of the character of the player sitting out is displayed. */ void render_hud_hubworld(Object *obj, s32 updateRate) { - Object_64 *obj64; + Object_Racer *racer; unk80126CDC *temp_a3; if (get_viewport_count() == 0) { - obj64 = obj->unk64; + racer = (Object_Racer *) obj->unk64; func_80068508(1); - func_800A718C(obj64); + render_balloon_count(racer); render_speedometer(obj, updateRate); if (is_in_two_player_adventure()) { temp_a3 = (unk80126CDC *) &gCurrentHud->unk720; @@ -1149,7 +1161,7 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { } else { ttSWBodyObject->segment.animFrame = 0; if (curRacer->unk1FC == 0 && curRacer->raceFinished == 0) { - func_800A36CC(4, 0, 4, 1, 1); + set_stopwatch_face(4, 0, 4, 1, 1); } } } @@ -1186,9 +1198,9 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { for (i = 0; i < curRacer->countLap && i < gHudLevelHeader->laps; i++) { // FAKEMATCH get_timestamp_from_frames(curRacer->lap_times[i] & 0xFFFFFFFFFFFFFFFF, &spB4, &spB0, &spAC); - D_800E2834 = D_800E27AC[i]; - func_800A7FBC(gCurrentHud->unk2EC, spB8, spB4, spB0, spAC, 1); - D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); + gHudColour = D_800E27AC[i]; + render_timer(gCurrentHud->unk2EC, spB8, spB4, spB0, spAC, 1); + gHudColour = COLOUR_RGBA32(255, 255, 255, 254); spB8 += 12; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); gCurrentHud->unk338 = i + 1; @@ -1202,7 +1214,7 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { gCurrentHud->unk330 -= posX; gCurrentHud->unk310 -= posX; if ((curRacer->boost_sound & BOOST_SOUND_UNK4) && (D_80126D4C <= 0)) { - func_800A36CC(7, 3, 0, 4, 0); + set_stopwatch_face(7, 3, 0, 4, 0); D_80126D4C = 60; curRacer->boost_sound &= ~BOOST_SOUND_UNK4; } @@ -1263,11 +1275,11 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { } } if ((curRacer->lap_times[curRacer->lap] < 30) && (curRacer->lap != 0)) { - func_800A36CC(5, 1, 2, 2, 0); + set_stopwatch_face(5, 1, 2, 2, 0); } else if (curRacer->boostTimer > 0) { - func_800A36CC(6, 2, 3, 2, 0); + set_stopwatch_face(6, 2, 3, 2, 0); } else if (curRacer->unk1FC > 120) { - func_800A36CC(6, 3, 1, 4, 0); + set_stopwatch_face(6, 3, 1, 4, 0); } render_lap_count(curRacer, updateRate); render_race_time(curRacer, updateRate); @@ -1315,7 +1327,7 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { GLOBAL_ASM("asm/non_matchings/game_ui/func_800A277C.s") #endif -void func_800A36CC(u8 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4) { +void set_stopwatch_face(u8 arg0, u8 arg1, u8 faceID, u8 arg3, u8 arg4) { s32 var_a3; s32 i; UNUSED u8 *temp_v0_2; @@ -1346,7 +1358,7 @@ void func_800A36CC(u8 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4) { } D_80126D66 = arg0; D_80126D65 = arg1; - gStopwatchFaceID = arg2; + gStopwatchFaceID = faceID; D_80126D69 = arg3; D_80126D68 = arg4; } @@ -1363,14 +1375,14 @@ void func_800A3870(void) { */ void render_speedometer(Object *obj, UNUSED s32 updateRate) { f32 vel; - Object_64* racer64; + Object_Racer *racer; s32 opacity; if (gNumActivePlayers == 1) { if (!check_if_showing_cutscene_camera()) { - racer64 = obj->unk64; - if (racer64->racer.raceFinished == FALSE) { - if (racer64->racer.vehicleID == VEHICLE_PLANE) { + racer = (Object_Racer *) obj->unk64; + if (racer->raceFinished == FALSE) { + if (racer->vehicleID == VEHICLE_PLANE) { vel = sqrtf((obj->segment.x_velocity * obj->segment.x_velocity) + (obj->segment.y_velocity * obj->segment.y_velocity) + (obj->segment.z_velocity * obj->segment.z_velocity)); } else { vel = sqrtf((obj->segment.x_velocity * obj->segment.x_velocity) + (obj->segment.z_velocity * obj->segment.z_velocity)); @@ -1379,13 +1391,13 @@ void render_speedometer(Object *obj, UNUSED s32 updateRate) { D_800E2838 = vel; } vel *= 4.0f; - if (racer64->racer.drift_direction != 0) { + if (racer->drift_direction != 0) { vel += 7.0f; } if (vel > 100.0f) { vel = 100.0f; } - if (racer64->racer.velocity > 0.0f) { + if (racer->velocity > 0.0f) { vel = 0.0f; } vel = 100.0f - vel; @@ -1408,10 +1420,10 @@ void render_speedometer(Object *obj, UNUSED s32 updateRate) { } func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk5A0); reset_render_settings(&gHUDCurrDisplayList); - func_8007BF1C(TRUE); + sprite_opaque(TRUE); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, opacity); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk4C0); - func_8007BF1C(FALSE); + sprite_opaque(FALSE); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk4E0); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk500); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk520); @@ -1437,7 +1449,7 @@ void render_race_start(s32 arg0, s32 updateRate) { D_800E2770[1].unk3 = -1; } if (gHUDNumPlayers == TWO_PLAYERS) { - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } if (arg0 > 0) { if (D_80126D34) { @@ -1477,7 +1489,7 @@ void render_race_start(s32 arg0, s32 updateRate) { if (get_viewport_count() > TWO_PLAYERS) { play_music(SEQUENCE_NONE); } else { - func_8006BD10(1.0f); + start_level_music(1.0f); } play_sound_global(SOUND_WHOOSH1, NULL); gRaceStartShowHudStep++; @@ -1486,15 +1498,15 @@ void render_race_start(s32 arg0, s32 updateRate) { } if (gRaceStartShowHudStep == 3) { play_sound_global(SOUND_VOICE_TT_GO, &gHUDVoiceSoundMask); - if ((func_8001B640() != 0) && (func_8001B650() == 0)) { - func_800A7484(0x24B, 1.7f, 0); - func_800C3158(0x52, 1.7f); + if (get_time_trial_ghost() && unbeaten_staff_time() == FALSE) { + set_time_trial_start_voice(SOUND_VOICE_TT_BEAT_MY_TIME, 1.7f, 0); + set_delayed_text(ASSET_GAME_TEXT_82, 1.7f); // Now try and beat my time! } D_80126D70 = 1; gRaceStartShowHudStep++; } } - func_8007BF1C(FALSE); + sprite_opaque(FALSE); } } @@ -1528,11 +1540,11 @@ void render_racer_bananas(Object_Racer *racer, s32 updateRate) { } } if (var_v1 == 0) { - func_8007BF1C(TRUE); + sprite_opaque(TRUE); set_viewport_tv_type(TV_TYPE_NTSC); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk360); set_viewport_tv_type(TV_TYPE_PAL); - func_8007BF1C(FALSE); + sprite_opaque(FALSE); gCurrentHud->unkF8 = var_v1; if (gCurrentHud->unk39B) { gCurrentHud->unk39A -= updateRate; @@ -1552,10 +1564,10 @@ void render_racer_bananas(Object_Racer *racer, s32 updateRate) { } else { gCurrentHud->unkF8 = var_v1 + 128; func_80068508(0); - func_8007BF1C(TRUE); + sprite_opaque(TRUE); set_viewport_tv_type(TV_TYPE_NTSC); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unkE0); - func_8007BF1C(FALSE); + sprite_opaque(FALSE); set_viewport_tv_type(TV_TYPE_PAL); func_80068508(1); gCurrentHud->unkF8 -= 128; @@ -1590,7 +1602,7 @@ void render_treasure_hud(Object_Racer *racer) { } for (i = 0; i < 10; i++) { if (i >= racer->lap) { - D_800E2834 = COLOUR_RGBA32(128, 128, 128, 128); + gHudColour = COLOUR_RGBA32(128, 128, 128, 128); } D_80126CD5 = TRUE; func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk400); @@ -1598,11 +1610,15 @@ void render_treasure_hud(Object_Racer *racer) { gCurrentHud->unk410 -= 3.0f; } gCurrentHud->unk410 = sp48; - D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); - D_80126CD5 = 0; + gHudColour = COLOUR_RGBA32(255, 255, 255, 254); + D_80126CD5 = FALSE; } -void func_800A47A0(Object_Racer *racer, s32 updateRate) { +/** + * Render the silver coin counter on the side of the screen. + * When the 8th coin is collected, wait a second then play an encouraging voice clip from T.T. +*/ +void render_silver_coin_counter(Object_Racer *racer, s32 updateRate) { s32 i; s32 prevUnk5D0; @@ -1610,7 +1626,7 @@ void func_800A47A0(Object_Racer *racer, s32 updateRate) { prevUnk5D0 = gCurrentHud->unk5D0; for(i = 0; i < 8; i++) { if (i >= racer->silverCoinCount) { - D_800E2834 = COLOUR_RGBA32(128, 128, 128, 128); + gHudColour = COLOUR_RGBA32(128, 128, 128, 128); } func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk5C0); gCurrentHud->unk5D0 -= gCurrentHud->unk5DC; @@ -1622,14 +1638,14 @@ void func_800A47A0(Object_Racer *racer, s32 updateRate) { if (gCurrentHud->unk5DA == 0) { if (gCurrentHud->unk5DB >= 30) { gCurrentHud->unk5DA = 1; - if (gHUDVoiceSoundMask == 0) { + if (gHUDVoiceSoundMask == NULL) { play_sound_global(SOUND_VOICE_TT_GO_FOR_IT, &gHUDVoiceSoundMask); } } } } gCurrentHud->unk5D0 = prevUnk5D0; - D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); + gHudColour = COLOUR_RGBA32(255, 255, 255, 254); } /** @@ -1637,7 +1653,7 @@ void func_800A47A0(Object_Racer *racer, s32 updateRate) { * in the middle of the screen. * Uses a 3 step process to play the sounds, display the position, then slide it offscreen. */ -void render_race_finish_position(Object_64 *obj, s32 updateRate) { +void render_race_finish_position(Object_Racer *racer, s32 updateRate) { unk800A497C *temp_a3; unk800A497C *temp_s0; s8 drawPosition; @@ -1654,7 +1670,7 @@ void render_race_finish_position(Object_64 *obj, s32 updateRate) { play_sound_global(SOUND_VOICE_TT_FINISH, &gHUDVoiceSoundMask); D_800E2770->unk2 = 127; D_800E2770->unk3 = 0; - D_800E2770->unkC = obj->racer.playerIndex; + D_800E2770->unkC = racer->playerIndex; temp_a3->unk1A = 1; break; case 1: @@ -1676,7 +1692,7 @@ void render_race_finish_position(Object_64 *obj, s32 updateRate) { if (temp_a3->unk1C == 2) { temp_a3->unk1A = 2; play_sound_global(SOUND_WHOOSH1, NULL); - if (D_800E2770->unkC == obj->racer.playerIndex) { + if (D_800E2770->unkC == racer->playerIndex) { D_800E2770->unk3 = -1; } } @@ -1705,62 +1721,67 @@ void render_race_finish_position(Object_64 *obj, s32 updateRate) { UNUSED void func_800A4C34(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) {} -void func_800A4C44(Object_Racer *racer, s32 updateRate) { - s32 sp34; +/** + * Render the current race position of the racer. + * Scales up and down when the position changes. +*/ +void render_race_position(Object_Racer *racer, s32 updateRate) { + s32 place; f32 prevCurrHudUnkC; - f32 temp; - s32 sp1C; + f32 scale; + s32 placeIndex; Settings *settings; - if (!racer->raceFinished) { - sp34 = racer->unk1AE; - if (func_8001139C() != 0) { - if ((get_current_level_race_type() == 8) || (is_taj_challenge())) { - sp34 = 2; - } else { - settings = get_settings(); - sp34 = settings->racers[D_80126D10].starting_position; - gCurrentHud->unk18 = sp34; - sp34++; - } + if (racer->raceFinished) { + return; + } + place = racer->racePosition; + if (func_8001139C()) { + if (get_current_level_race_type() == RACETYPE_BOSS || is_taj_challenge()) { + place = 2; + } else { + settings = get_settings(); + place = settings->racers[D_80126D10].starting_position; + gCurrentHud->unk18 = place; + place++; } - if (gHUDNumPlayers < 2) { - if (sp34 < 4) { - gCurrentHud->unk38 = sp34 - 1; - } else { - gCurrentHud->unk38 = 3; - } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk20); + } + if (gHUDNumPlayers < 2) { + if (place < 4) { + gCurrentHud->unk38 = place - 1; + } else { + gCurrentHud->unk38 = 3; } - temp = (gCurrentHud->unk1B + 129); - temp *= 128.0f; - temp = sins_f(temp); - sp1C = sp34 - 1; - gCurrentHud->unk8 = (gCurrentHud->unk1C / 127.0f) + (1.0 + (0.5 * temp)); - prevCurrHudUnkC = gCurrentHud->unkC; - gCurrentHud->unkC -= (24.0f * gCurrentHud->unk8); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk0); - gCurrentHud->unkC = prevCurrHudUnkC; - if (gCurrentHud->unk1A != 0) { - if (gCurrentHud->unk1B < (127 - (updateRate * 16))) { - gCurrentHud->unk1B += (updateRate * 16); - } else { - gCurrentHud->unk1B = 127; - } + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk20); + } + scale = (gCurrentHud->unk1B + 129); + scale *= 128.0f; + scale = sins_f(scale); + placeIndex = place - 1; + gCurrentHud->unk8 = (gCurrentHud->unk1C / 127.0f) + (1.0 + (0.5 * scale)); + prevCurrHudUnkC = gCurrentHud->unkC; + gCurrentHud->unkC -= (24.0f * gCurrentHud->unk8); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk0); + gCurrentHud->unkC = prevCurrHudUnkC; + if (gCurrentHud->unk1A) { + if (gCurrentHud->unk1B < 127 - (updateRate * 16)) { + gCurrentHud->unk1B += (updateRate * 16); + } else { + gCurrentHud->unk1B = 127; } - if (sp1C != gCurrentHud->unk18) { - if ((gCurrentHud->unk1A != 0) && (gCurrentHud->unk1B > 0)) { - gCurrentHud->unk1B = -gCurrentHud->unk1B; - } else { - gCurrentHud->unk1B = -127; - gCurrentHud->unk1A = 1; - } - } - gCurrentHud->unk18 = sp1C; - if ((gCurrentHud->unk1A != 0) && (gCurrentHud->unk1B == 127)) { - gCurrentHud->unk1A = 0; + } + if (placeIndex != gCurrentHud->unk18) { + if (gCurrentHud->unk1A && gCurrentHud->unk1B > 0) { + gCurrentHud->unk1B = -gCurrentHud->unk1B; + } else { + gCurrentHud->unk1B = -127; + gCurrentHud->unk1A = 1; } } + gCurrentHud->unk18 = placeIndex; + if (gCurrentHud->unk1A && gCurrentHud->unk1B == 127) { + gCurrentHud->unk1A = 0; + } } @@ -1795,7 +1816,7 @@ void render_lap_count(Object_Racer *racer, s32 updateRate) { func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unkC0); } if (gHUDNumPlayers == TWO_PLAYERS) { - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } if (is_game_paused() == FALSE) { if (racer->lap_times[racer->lap] < 30 && gCurrentHud->unk3DA == 0 && racer->raceFinished == FALSE) { @@ -1936,7 +1957,7 @@ void render_lap_count(Object_Racer *racer, s32 updateRate) { } } } - func_8007BF1C(FALSE); + sprite_opaque(FALSE); } /** @@ -1948,12 +1969,12 @@ void render_wrong_way_text(Object_Racer *obj, s32 updateRate) { f32 textPosTarget; if (gHUDNumPlayers == TWO_PLAYERS) { - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } if (obj->unk1FC > 120 && (gHUDNumPlayers || gCurrentHud->unk46C == gCurrentHud->unk47A[2]) && !is_game_paused()) { if ((gWrongWayNagPrefix || gWrongWayNagTimer == 0) && gHUDVoiceSoundMask == NULL) { // 20% chance that T.T decides not to precede his nagging with "No no no!" - if (gWrongWayNagPrefix || (get_random_number_from_range(1, 10) >= 8)) { + if (gWrongWayNagPrefix || get_random_number_from_range(1, 10) >= 8) { gWrongWayNagPrefix = FALSE; play_sound_global(SOUND_VOICE_TT_WRONG_WAY, &gHUDVoiceSoundMask); gWrongWayNagTimer = get_random_number_from_range(1, 480) + 120; @@ -2022,7 +2043,7 @@ void render_wrong_way_text(Object_Racer *obj, s32 updateRate) { gCurrentHud->unk46C = gCurrentHud->unk49C - 200; play_sound_global(SOUND_WHOOSH1, NULL); } - func_8007BF1C(FALSE); + sprite_opaque(FALSE); } void func_800A5F18(Object_Racer *racer) { @@ -2032,16 +2053,16 @@ void func_800A5F18(Object_Racer *racer) { func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk600); if (!(get_current_level_race_type() & 0x40) && (is_in_two_player_adventure() == 0)) { get_racer_objects(&sp24); - if (((s32) gNumActivePlayers >= 2) && ((is_in_two_player_adventure() == 0) || (is_postrace_viewport_active() == 0))) { - set_text_font(0); + if (gNumActivePlayers >= 2 && (is_in_two_player_adventure() == FALSE || is_postrace_viewport_active() == FALSE)) { + set_text_font(FONT_COLOURFUL); if (sp24 != racer->unk1AC) { set_text_colour(255, 255, 255, 0, 255); - draw_text(&gHUDCurrDisplayList, (s32) (gCurrentHud->unk16C - 40.0f), (s32) gCurrentHud->unk170, "RACE", ALIGN_TOP_LEFT); - func_800A7FBC((s32) gCurrentHud->unk16C, (s32) gCurrentHud->unk170, (s32) (s8) gCurrentHud->unk17A, (s32) (s8) gCurrentHud->unk17B, (s32) (s8) gCurrentHud->unk17C, 1); - draw_text(&gHUDCurrDisplayList, (s32) (gCurrentHud->unk2EC - 40.0f), (s32) gCurrentHud->unk2F0, "LAP", ALIGN_TOP_LEFT); - func_800A7FBC((s32) gCurrentHud->unk2EC, (s32) gCurrentHud->unk2F0, (s32) (s8) gCurrentHud->unk2FA, (s32) (s8) gCurrentHud->unk2FB, (s32) (s8) gCurrentHud->unk2FC, 1); + draw_text(&gHUDCurrDisplayList, gCurrentHud->unk16C - 40.0f, gCurrentHud->unk170, "RACE", ALIGN_TOP_LEFT); + render_timer(gCurrentHud->unk16C, gCurrentHud->unk170, gCurrentHud->unk17A, gCurrentHud->unk17B, gCurrentHud->unk17C, 1); + draw_text(&gHUDCurrDisplayList, gCurrentHud->unk2EC - 40.0f, gCurrentHud->unk2F0, "LAP", ALIGN_TOP_LEFT); + render_timer(gCurrentHud->unk2EC, gCurrentHud->unk2F0, gCurrentHud->unk2FA, gCurrentHud->unk2FB, gCurrentHud->unk2FC, 1); } else { - draw_text(&gHUDCurrDisplayList, (s32) (gCurrentHud->unk16C - 35.0f), (s32) gCurrentHud->unk170, "DID NOT FINISH", ALIGN_TOP_LEFT); + draw_text(&gHUDCurrDisplayList, gCurrentHud->unk16C - 35.0f, gCurrentHud->unk170, "DID NOT FINISH", ALIGN_TOP_LEFT); } } } @@ -2065,7 +2086,10 @@ void play_time_trial_end_message(s16 *playerID) { } } -void func_800A6E30(Object_Racer *racer, s32 updateRate) { +/** + * Render the finishing overlay after a time trial. +*/ +void render_time_trial_finish(Object_Racer *racer, s32 updateRate) { s32 temp; switch (gCurrentHud->unk1DA) { @@ -2074,7 +2098,7 @@ void func_800A6E30(Object_Racer *racer, s32 updateRate) { D_800E2770->unk3 = 0; D_800E2770->unkC = (s8) racer->playerIndex; play_sound_global(SOUND_WHOOSH1, NULL); - if ((gHUDNumPlayers == 0) || (gHUDNumPlayers == 1)) { + if (gHUDNumPlayers == 0 || gHUDNumPlayers == 1) { gCurrentHud->unk1CC = -200.0f; gCurrentHud->unk1DD = 0; } else { @@ -2136,51 +2160,53 @@ void func_800A6E30(Object_Racer *racer, s32 updateRate) { } } - -void func_800A718C(UNUSED Object_64 *arg0) { - s32 sp2C; +/** + * Render the icon, and the number of collectable balloons onscreen. +*/ +void render_balloon_count(UNUSED Object_Racer *racer) { + s32 balloonCount; s32 div; UNUSED s32 pad; - u32 sp20; + u32 balloonTickTimer; Settings *settings; settings = get_settings(); if (osTvType == TV_TYPE_PAL) { - sp20 = 646; + balloonTickTimer = 646; } else { - sp20 = 840; + balloonTickTimer = 840; } - if (settings->cutsceneFlags & 4) { - gCurrentHud->unk266 = 69; + if (settings->cutsceneFlags & CUTSCENE_ADVENTURE_TWO) { + gCurrentHud->unk266 = 69; // Use the adventure two balloon sprite. } - if (func_8001E440() == 10 && func_8001AE54() < sp20) { - sp2C = *settings->balloonsPtr - 1; + if (get_cutscene_id() == 10 && get_balloon_cutscene_timer() < balloonTickTimer) { + balloonCount = *settings->balloonsPtr - 1; } else { - sp2C = *settings->balloonsPtr; - if (func_8001E440() == 10) { - if (func_8001AE54() < sp20 + 8 && D_80126D44 == 0) { + balloonCount = *settings->balloonsPtr; + if (get_cutscene_id() == 10) { + if (get_balloon_cutscene_timer() < balloonTickTimer + 8 && D_80126D44 == 0) { play_sound_global(SOUND_HUD_LAP_TICK, &D_80126D44); } } } - if (sp2C < 0) { - sp2C = 0; + if (balloonCount < 0) { + balloonCount = 0; } - div = sp2C / 10; + div = balloonCount / 10; if (div != 0) { gCurrentHud->unk2B8 = div; - gCurrentHud->unk2D8 = sp2C % 10; + gCurrentHud->unk2D8 = balloonCount % 10; func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk2C0); } else { - gCurrentHud->unk2B8 = sp2C % 10; + gCurrentHud->unk2B8 = balloonCount % 10; } func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk2A0); set_viewport_tv_type(TV_TYPE_NTSC); if (osTvType == TV_TYPE_PAL) { - func_8007BF1C(1); + sprite_opaque(TRUE); } func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk260); - func_8007BF1C(0); + sprite_opaque(FALSE); set_viewport_tv_type(TV_TYPE_PAL); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk280); } @@ -2196,17 +2222,21 @@ UNUSED void play_hud_voice_line(u16 soundId) { } } -void func_800A7484(u16 arg0, f32 arg1, s32 arg2) { - if (D_80126D74 == 0) { - D_80126D7C = arg0; - D_80126D74 = arg1 * 60.0f; +/** + * Set the sound ID and delay (in seconds) of the voice clip that will be played + * after the time trial run starts. +*/ +void set_time_trial_start_voice(u16 soundID, f32 delay, s32 arg2) { + if (gTimeTrialVoiceDelay == 0) { + gTimeTrialVoiceID = soundID; + gTimeTrialVoiceDelay = delay * 60.0f; D_80126D78 = arg2; } } -void func_800A74EC(u16 arg0, s32 arg1) { - if (arg0 == D_80126D7C && D_80126D78 == arg1) { - D_80126D74 = 0; +void func_800A74EC(u16 soundID, s32 arg1) { + if (soundID == gTimeTrialVoiceID && D_80126D78 == arg1) { + gTimeTrialVoiceDelay = 0; } } @@ -2215,25 +2245,25 @@ void func_800A74EC(u16 arg0, s32 arg1) { * The icon will spin and grow as it appears, then spins and shrinks as it disappears. */ void render_weapon_hud(Object *obj, s32 updateRate) { - Object_64 *racerObj; + Object_Racer *racer; s32 temp_a0; - racerObj = obj->unk64; - if (racerObj->racer.raceFinished == FALSE) { + racer = (Object_Racer *) obj->unk64; + if (racer->raceFinished == FALSE) { set_viewport_tv_type(TV_TYPE_NTSC); - temp_a0 = (racerObj->racer.balloon_type * 3) + (racerObj->racer.balloon_level); - if (gCurrentHud->unk5D != racerObj->racer.balloon_level) { - if (racerObj->racer.balloon_level == 0) { + temp_a0 = (racer->balloon_type * 3) + (racer->balloon_level); + if (gCurrentHud->unk5D != racer->balloon_level) { + if (racer->balloon_level == 0) { gCurrentHud->unk5C = 120; } else if (gNumActivePlayers == 1) { gCurrentHud->unk5C = 0; } else { gCurrentHud->unk5C = 120; } - gCurrentHud->unk5D = racerObj->racer.balloon_level; + gCurrentHud->unk5D = racer->balloon_level; } - if (racerObj->racer.balloon_quantity > 0) { - if (gCurrentHud->unk5B < 16 && racerObj->racer.unk170 == 0) { + if (racer->balloon_quantity > 0) { + if (gCurrentHud->unk5B < 16 && racer->unk170 == 0) { gCurrentHud->unk44 = gCurrentHud->unk5B << 12; gCurrentHud->unk48 = (gCurrentHud->unk5B * 0.04687) + 0.25; } else { @@ -2255,19 +2285,19 @@ void render_weapon_hud(Object *obj, s32 updateRate) { gCurrentHud->unk48 *= 0.75; } if (gCurrentHud->unk48 != 1.0) { - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk40); - func_8007BF1C(FALSE); - if (racerObj->racer.balloon_quantity > 3) { + sprite_opaque(FALSE); + if (racer->balloon_quantity > 3) { gCurrentHud->unk63A = -128; } - if (racerObj->racer.balloon_quantity < 3) { + if (racer->balloon_quantity < 3) { gCurrentHud->unk63A -= updateRate; } - if (racerObj->racer.balloon_quantity >= 3 || ((((gCurrentHud->unk63A + 128) % 32) < 20) && racerObj->racer.balloon_quantity != 1)) { + if (racer->balloon_quantity >= 3 || ((((gCurrentHud->unk63A + 128) % 32) < 20) && racer->balloon_quantity != 1)) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - gCurrentHud->unk638 = racerObj->racer.balloon_quantity - 1; + gCurrentHud->unk638 = racer->balloon_quantity - 1; func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk620); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } @@ -2291,29 +2321,32 @@ void render_weapon_hud(Object *obj, s32 updateRate) { } } -void func_800A7A60(Object *racerObj) { +/** + * If currently using a magnet, render a reticle over the racer that's being targeted. +*/ +void render_magnet_reticle(Object *racerObj) { unk80068514_arg4 *entry; - unk80126CDC *temp; + unk80126CDC *hud; Object_Racer *racer; s32 hudElementIndex; if(entry){} // Fakematch racer = &racerObj->unk64->racer; if (racer->magnetTargetObj != NULL && get_current_viewport() == racer->playerIndex) { - temp = gCurrentHud; - temp->unk22C = racer->magnetTargetObj->segment.trans.x_position; - temp->unk230 = racer->magnetTargetObj->segment.trans.y_position; - temp->unk234 = racer->magnetTargetObj->segment.trans.z_position; - hudElementIndex = temp->unk226; + hud = gCurrentHud; + hud->unk22C = racer->magnetTargetObj->segment.trans.x_position; + hud->unk230 = racer->magnetTargetObj->segment.trans.y_position; + hud->unk234 = racer->magnetTargetObj->segment.trans.z_position; + hudElementIndex = hud->unk226; entry = gAssetHudElements->entry[hudElementIndex]; if (entry == NULL) { return; } gAssetHudElementStaleCounter[hudElementIndex] = 0; - temp = (unk80126CDC *) &temp->unk220; + hud = (unk80126CDC *) &hud->unk220; func_80066CDC(&gHUDCurrDisplayList, &gHUDCurrMatrix); func_80068408(&gHUDCurrDisplayList, &gHUDCurrMatrix); - render_sprite_billboard(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (Object *) temp, entry, RENDER_Z_UPDATE); + render_sprite_billboard(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (Object *) hud, entry, RENDER_Z_UPDATE); } } @@ -2382,16 +2415,19 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { } if (gNumActivePlayers == 1) { - func_800A7FBC(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 0); + render_timer(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 0); } else { - func_800A7FBC(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 1); + render_timer(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 1); } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } } -void func_800A7FBC(s32 arg0, s32 arg1, s32 minutes, s32 seconds, s32 hundredths, s32 someBool) { +/** + * Render a time in minutes, seconds and hundredths of a second. +*/ +void render_timer(s32 arg0, s32 arg1, s32 minutes, s32 seconds, s32 hundredths, s32 someBool) { UNUSED s32 pad; unk80126CDC_entry entry2; s32 unk14; @@ -2595,7 +2631,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u gCurrentHud->unk670 *= 1.1; } func_800A19A4(tempVar4, updateRate); - D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); + gHudColour = COLOUR_RGBA32(255, 255, 255, 254); gCurrentHud->unk64C = temp_s0; gCurrentHud->unk650 = temp_s1; gCurrentHud->unk66C = spF4; @@ -2607,12 +2643,12 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u // Show life counter and icons in 2 player. if (gNumActivePlayers == 2 && gHudToggleSettings[gHUDNumPlayers] == 0) { func_80068508(TRUE); - func_8007BF1C(FALSE); + sprite_opaque(FALSE); set_ortho_matrix_view(&gHUDCurrDisplayList, &gHUDCurrMatrix); func_800A1E48(0, updateRate); func_80068508(FALSE); reset_render_settings(&gHUDCurrDisplayList); - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } else { // In 3/4 player, just show the life counter. if (gNumActivePlayers == 3) { @@ -2626,7 +2662,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u gCurrentHud = gPlayerHud[PLAYER_FOUR]; spE4 = gCurrentHud->unk64C; spE0 = gCurrentHud->unk650; - func_8007BF1C(FALSE); + sprite_opaque(FALSE); set_ortho_matrix_view(&gHUDCurrDisplayList, &gHUDCurrMatrix); func_80068508(TRUE); gCurrentHud->unk64C = 225.0f; @@ -2680,7 +2716,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u gCurrentHud->unk250 += temp; gCurrentHud->unk64C = spE4; gCurrentHud->unk650 = spE0; - func_8007BF1C(TRUE); + sprite_opaque(TRUE); reset_render_settings(&gHUDCurrDisplayList); func_80068508(FALSE); } @@ -2757,9 +2793,9 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u sp113 = FALSE; } } - if((gHUDNumPlayers == THREE_PLAYERS && is_postrace_viewport_active()) || check_if_showing_cutscene_camera() || sp113) { + if ((gHUDNumPlayers == THREE_PLAYERS && is_postrace_viewport_active()) || check_if_showing_cutscene_camera() || sp113) { goto test; - } else if(gHudToggleSettings[gHUDNumPlayers] != 1) { + } else if (gHudToggleSettings[gHUDNumPlayers] != 1) { test: return; } else { @@ -2800,7 +2836,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u if (osTvType == TV_TYPE_PAL) { gMinimapScreenY *= 1.2; } - func_8007BF1C(FALSE); + sprite_opaque(FALSE); objTrans.trans.x_position = gMinimapScreenX + D_80126D24 + D_80126D28; objTrans.trans.y_position = gMinimapScreenY; if (osTvType == TV_TYPE_PAL) { @@ -2833,7 +2869,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u if (is_in_time_trial() && func_8001B288()) { temp_v0_8 = func_8001B2E0(); if (temp_v0_8 != NULL) { - func_800AA3EC(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); + minimap_marker_pos(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); gCurrentHud->unk1E6 = 14; gCurrentHud->unk1E4 = 0; gCurrentHud->unk1E8 = 1.0f; @@ -2842,9 +2878,9 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); } } - temp_v0_8 = func_8001B640(); + temp_v0_8 = get_time_trial_ghost(); if (temp_v0_8 != NULL) { - func_800AA3EC(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); + minimap_marker_pos(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); gCurrentHud->unk1E4 = 0; tempVar1 = (opacity * (f32) temp_v0_8->segment.object.opacity) * 0.0078125; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, gHudMinimapColours[8].red, gHudMinimapColours[8].green, gHudMinimapColours[8].blue, tempVar1); @@ -2857,7 +2893,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u temp_v0_8 = find_taj_object(); if (temp_v0_8 != NULL) { gCurrentHud->unk1E6 = 14; - func_800AA3EC(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); + minimap_marker_pos(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); gCurrentHud->unk1E4 = 0; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 0, 255, opacity); gCurrentHud->unk1E8 = 1.0f; @@ -2870,7 +2906,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u temp_v0_8 = objectGroup[i]; someRacer = (Object_Racer *) objectGroup[i]->unk64; if (someRacer != NULL) { - func_800AA3EC(objectGroup[i]->segment.trans.x_position, objectGroup[i]->segment.trans.z_position, sp114, sp118, sp11C); + minimap_marker_pos(objectGroup[i]->segment.trans.x_position, objectGroup[i]->segment.trans.z_position, sp114, sp118, sp11C); if (someRacer->playerIndex != PLAYER_COMPUTER) { gCurrentHud->unk1F0 -= 1.0f; gCurrentHud->unk1E6 = 27; @@ -2879,7 +2915,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u if (get_filtered_cheats() & CHEAT_MIRRORED_TRACKS) { gCurrentHud->unk1E4 = 0xFFFF - gCurrentHud->unk1E4; } - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } else { gCurrentHud->unk1E4 = 0; gCurrentHud->unk1E6 = 14; @@ -2911,12 +2947,12 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); } - func_8007BF1C(FALSE); + sprite_opaque(FALSE); } } gDPPipeSync(gHUDCurrDisplayList++); func_80068508(FALSE); - func_8007BF1C(TRUE); + sprite_opaque(TRUE); *dList = gHUDCurrDisplayList; *mtx = gHUDCurrMatrix; *vtx = gHUDCurrVertex; @@ -2924,7 +2960,11 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } } -void func_800AA3EC(f32 x, f32 z, f32 angleSin, f32 angleCos, f32 modelAspectRatio) { +/** + * Set the position of the minimap marker based on object position. + * Some markers can rotate, so account for that, too. +*/ +void minimap_marker_pos(f32 x, f32 z, f32 angleSin, f32 angleCos, f32 modelAspectRatio) { LevelModel* lvlMdl; UNUSED s32 pad24[2]; f32 scaledX; @@ -2936,8 +2976,8 @@ void func_800AA3EC(f32 x, f32 z, f32 angleSin, f32 angleCos, f32 modelAspectRati a = lvlMdl->upperXBounds - lvlMdl->lowerXBounds; b = lvlMdl->upperZBounds - lvlMdl->lowerZBounds; - scaledX = (60.0f * modelAspectRatio * lvlMdl->minimapXScale * (x - lvlMdl->lowerXBounds)) / (a); - scaledY = (lvlMdl->minimapYScale * -60.0f * (z - lvlMdl->lowerZBounds)) / (b); + scaledX = (60.0f * modelAspectRatio * lvlMdl->minimapXScale * (x - lvlMdl->lowerXBounds)) / a; + scaledY = (lvlMdl->minimapYScale * -60.0f * (z - lvlMdl->lowerZBounds)) / b; if (get_filtered_cheats() & CHEAT_MIRRORED_TRACKS) { // Is adventure 2? gCurrentHud->unk1EC = (((f32) gMinimapScreenX - ((scaledX * angleCos) + (scaledY * angleSin))) + (f32) lvlMdl->minimapOffsetXAdv2) - (f32) gMinimapDotOffsetX; diff --git a/src/game_ui.h b/src/game_ui.h index c361ff17..b5357adb 100644 --- a/src/game_ui.h +++ b/src/game_ui.h @@ -71,7 +71,7 @@ typedef struct { f32 unkC; } IndicatorArrow; -// Used in func_800A7FBC +// Used in render_timer typedef struct unk80126CDC_entry { s16 unk0; s16 unk2; @@ -441,55 +441,55 @@ extern u8 gGfxTaskYieldData[OS_YIELD_DATA_SIZE]; u8 func_800A0190(void); void func_800A0B74(void); -void func_800A0DC0(s32 arg0, Object *arg1, s32 updateRate); -void render_hud_challenge_eggs(s32 arg0, Object *arg1, s32 updateRate); -void render_hud_race_boss(s32 arg0, Object *arg1, s32 updateRate); -void func_800A263C(s32 arg0, Object *arg1, s32 updateRate); +void render_hud_race(s32 arg0, Object *obj, s32 updateRate); +void render_hud_challenge_eggs(s32 arg0, Object *obj, s32 updateRate); +void render_hud_race_boss(s32 arg0, Object *obj, s32 updateRate); +void render_hud_taj_race(s32 arg0, Object *obj, s32 updateRate); void func_800A3870(void); void play_time_trial_end_message(s16 *playerID); -void func_800A7484(u16 arg0, f32 arg1, s32 arg2); -void func_800A74EC(u16 arg0, s32 arg1); +void set_time_trial_start_voice(u16 soundID, f32 delay, s32 arg2); +void func_800A74EC(u16 soundID, s32 arg1); void minimap_init(LevelModel *model); s8 get_hud_setting(void); void func_800AB194(s32 arg0); void func_800AB1AC(s32 arg0); void func_800AB1C8(void); -void set_hud_visibility(u8 arg0); +void set_hud_visibility(u8 setting); void render_race_time(Object_Racer *obj, s32 updateRate); void render_wrong_way_text(Object_Racer *racer, s32 updateRate); void render_course_indicator_arrows(Object_Racer *racer, s32 updateRate); void render_hud_hubworld(Object *obj, s32 updateRate); -void render_hud(Gfx **dList, MatrixS **mtx, Vertex **tris, Object *arg3, s32 updateRate); +void render_hud(Gfx **dList, MatrixS **mtx, Vertex **tris, Object *obj, s32 updateRate); void render_weapon_hud(Object *obj, s32 updateRate); void render_race_start(s32 arg0, s32 updateRate); void render_racer_bananas(Object_Racer *obj, s32 updateRate); -void render_race_finish_position(Object_64 *obj, s32 updateRate); +void render_race_finish_position(Object_Racer *racer, s32 updateRate); void render_speedometer(Object *obj, s32 updateRate); void render_lap_count(Object_Racer *racer, s32 updateRate); void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtxList, s32 updateRate); void init_hud(s32 viewportCount); -void func_800A1C04(s32 arg0, Object *obj, s32 updateRate); +void render_hud_battle(s32 arg0, Object *obj, s32 updateRate); void func_800A22F4(Object_Racer *racer, void *unused); void free_hud(void); -void func_800A36CC(u8, u8, u8, u8, u8); +void set_stopwatch_face(u8, u8, u8, u8, u8); void func_800A0BD4(s32 updateRate); -void func_800A47A0(Object_Racer *racer, s32 updateRate); -void func_800A7A60(Object *racerObj); -void func_800A6E30(Object_Racer *racer, s32 updateRate); +void render_silver_coin_counter(Object_Racer *racer, s32 updateRate); +void render_magnet_reticle(Object *racerObj); +void render_time_trial_finish(Object_Racer *racer, s32 updateRate); void func_800A19A4(Object_Racer *racer, s32 updateRate); void func_800A14F0(Object *racerObj, s32 updateRate); -void func_800A4C44(Object_Racer *racer, s32 updateRate); -void func_800A1248(s32 arg0, Object *obj, s32 updateRate); +void render_race_position(Object_Racer *racer, s32 updateRate); +void render_hud_banana_challenge(s32 arg0, Object *obj, s32 updateRate); +void render_balloon_count(Object_Racer *racer); +void render_treasure_hud(Object_Racer *racer); +void minimap_marker_pos(f32 x, f32 z, f32 angleSin, f32 angleCos, f32 modelAspectRatio); +void render_timer(s32 arg0, s32 arg1, s32 minutes, s32 seconds, s32 hundredths, s32 someBool); // Non Matching -void func_800A718C(Object_64 *obj); void func_800AA600(Gfx **dList, MatrixS **mtx, Vertex **vtxList, unk80126CDC **arg3); -void func_800A7FBC(s32, s32, s32 minutes, s32 seconds, s32 hundredths, s32); void func_800A277C(s32, Object*, s32); -void func_800A6254(Object_64* obj, s32 updateRate); +void func_800A6254(Object_Racer *racer, s32 updateRate); void func_800A1E48(Object*, s32); -void render_treasure_hud(Object_Racer*); -void func_800AA3EC(f32, f32, f32, f32, f32); void func_8009F034(void); #endif diff --git a/src/menu.c b/src/menu.c index 09cdb015..4a6db759 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2083,7 +2083,7 @@ void show_timestamp(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green, u8 blu } get_timestamp_from_frames(frameCount, &minutes, &seconds, &hundredths); func_80068508(1); - func_8007BF1C(FALSE); + sprite_opaque(FALSE); gMenuImageStack[imageIndex].unk18 = minutes / 10; gMenuImageStack[imageIndex].unkC = xPos; @@ -2123,7 +2123,7 @@ void show_timestamp(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green, u8 blu func_8009CA60(imageIndex); func_80068508(0); - func_8007BF1C(TRUE); + sprite_opaque(TRUE); sMenuGuiColourR = (u8)255; sMenuGuiColourG = (u8)255; sMenuGuiColourB = (u8)255; @@ -2174,7 +2174,7 @@ void func_80081C04(s32 num, s32 x, s32 y, u8 red, u8 green, u8 blue, u8 alpha, u sMenuGuiColourG = green; sMenuGuiColourB = blue; sMenuGuiOpacity = alpha; - func_8007BF1C(0); + sprite_opaque(FALSE); func_80068508(1); gMenuImageStack->unk10 = y; for (var_s0_2 = 0; var_s0_2 < var_s3; var_s0_2++, var_s4_2 += 12) { @@ -2182,7 +2182,7 @@ void func_80081C04(s32 num, s32 x, s32 y, u8 red, u8 green, u8 blue, u8 alpha, u gMenuImageStack->unk18 = sp38[var_s0_2]; func_8009CA60(0); } - func_8007BF1C(1); + sprite_opaque(TRUE); func_80068508(0); sMenuGuiColourR = 255; sMenuGuiColourG = 255; @@ -2382,7 +2382,7 @@ void draw_menu_elements(s32 arg0, MenuElement *elem, f32 arg2) { reset_render_settings(&sMenuCurrDisplayList); } func_80068508(1); - func_8007BF1C(FALSE); + sprite_opaque(FALSE); gMenuImageStack[elem->unk14_a.value].unkC = xPos - 160; gMenuImageStack[elem->unk14_a.value].unk10 = (-yPos - D_800DF7A0) + 120; gMenuImageStack[elem->unk14_a.value].unk18 = elem->textFont; @@ -2397,7 +2397,7 @@ void draw_menu_elements(s32 arg0, MenuElement *elem, f32 arg2) { sMenuGuiOpacity = elem->opacity; func_8009CA60(elem->unk14_a.value); func_80068508(0); - func_8007BF1C(TRUE); + sprite_opaque(TRUE); break; case 6: func_80080E90( @@ -2453,7 +2453,7 @@ void func_800828B8(void) { get_number_of_levels_and_worlds(&numLevels, &numWorlds); for (i = 0; i < numLevels; i++) { - settings->courseFlagsPtr[i] = 0; + settings->courseFlagsPtr[i] = RACE_UNATTEMPTED; for (numWorlds = 0; numWorlds < 3; numWorlds++) { settings->courseFlagsPtr[i] |= gSavefileData[numWorlds]->courseFlagsPtr[i]; } @@ -5702,7 +5702,7 @@ void render_file_select_menu(UNUSED s32 updateRate) { for (i = 0; i < 3; i++) { if (gSavefileInfo[i].isStarted != 0) { s2 = 0xB; - func_8007BF1C(FALSE); + sprite_opaque(FALSE); if (gSavefileInfo[i].isAdventure2 != 0) { s2 = 0xC; } @@ -5718,7 +5718,7 @@ void render_file_select_menu(UNUSED s32 updateRate) { render_menu_image(s5, gFileSelectElementPos[8] + gFileSelectButtons[i].x, gFileSelectElementPos[9] + gFileSelectButtons[i].y, 0, 0, 0, 128); sMenuGuiColourG = 255; sMenuGuiColourB = 255; - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } else { set_text_colour(255, 255, 255, 64, 255); draw_text(&sMenuCurrDisplayList, gFileSelectElementPos[4] + gFileSelectButtons[i].x, gFileSelectElementPos[5] + gFileSelectButtons[i].y + y, gMenuText[ASSET_MENU_TEXT_NEW], ALIGN_MIDDLE_CENTER); @@ -7045,7 +7045,7 @@ void render_track_select_setup_ui(s32 updateRate) { set_text_colour(0xFF, 0xFF, 0xFF, 0, 0xFF); draw_text(&sMenuCurrDisplayList, gTwoPlayerRacerCountMenu.textPos[2] + gTwoPlayerRacerCountMenu.x - 1, gTwoPlayerRacerCountMenu.textPos[3] + gTwoPlayerRacerCountMenu.y - 1, gMenuText[ASSET_MENU_TEXT_NUMBEROFRACERS], ALIGN_MIDDLE_CENTER); func_80068508(1); - func_8007BF1C(FALSE); + sprite_opaque(FALSE); for (i = 0; i < 3; i++) { s32 index = i * 2; if (i == gMultiplayerSelectedNumberOfRacers) { @@ -7067,13 +7067,13 @@ void render_track_select_setup_ui(s32 updateRate) { sMenuGuiColourG = 0xFF; sMenuGuiColourB = 0xFF; } - func_8007BF1C(TRUE); + sprite_opaque(TRUE); func_80068508(0); } } } if (D_801269C8 < 4) { - func_8007BF1C(FALSE); + sprite_opaque(FALSE); i = 11; if (gIsInAdventureTwo) { i = 12; @@ -7087,7 +7087,7 @@ void render_track_select_setup_ui(s32 updateRate) { gMenuImageStack[i].unkC = 120.0f; func_8009CA60(i); } - func_8007BF1C(TRUE); + sprite_opaque(TRUE); } if ((gNumberOfActivePlayers == 1) && (gMenuOptionCount >= 0) && (func_80092BE0(gTrackIdForPreview) >= 0)) { // Render small T.T. icon. @@ -7160,7 +7160,7 @@ void menu_adventure_track_init(void) { mapId = settings->unk4C->unk2; gPlayerSelectVehicle[PLAYER_ONE] = get_map_default_vehicle(mapId); result = get_map_race_type(mapId); - if ((result == 5) || (result == 8) || (!(result & 0x40) && (!(settings->courseFlagsPtr[mapId] & 2)))) { + if ((result == 5) || (result == 8) || (!(result & 0x40) && (!(settings->courseFlagsPtr[mapId] & RACE_CLEARED)))) { temp = D_800E0758[mapId]; if (temp != -1) { func_80000FDC(temp, 0, 1.0f); @@ -7196,7 +7196,7 @@ void menu_adventure_track_init(void) { } assign_dialogue_box_id(7); if (get_map_race_type(mapId) & 0x40) { - func_800C31EC(get_map_world_id(mapId) + 0x3B); + set_current_text(get_map_world_id(mapId) + 0x3B); } } @@ -7334,13 +7334,13 @@ s32 menu_adventure_track_loop(s32 updateRate) { mapId = ((Settings4C *)((u8 *)settings->unk4C + gTrackIdForPreview))->unk2; sp28 = FALSE; sp1C = 0; - if (settings->courseFlagsPtr[mapId] & 2) { + if (settings->courseFlagsPtr[mapId] & RACE_CLEARED) { sp1C = 1; } - if (settings->courseFlagsPtr[mapId] & 4) { + if (settings->courseFlagsPtr[mapId] & RACE_CLEARED_SILVER_COINS) { sp1C = 2; } - if (get_map_race_type(mapId) & 0x40) { + if (get_map_race_type(mapId) & RACETYPE_CHALLENGE) { sp28 = TRUE; } sp20 = FALSE; @@ -7364,7 +7364,7 @@ s32 menu_adventure_track_loop(s32 updateRate) { if ((gMenuOptionCount != 0) || sp20 || sp28) { if (D_801267D8[0] & (A_BUTTON | START_BUTTON)) { if (sp28) { - func_800C31EC(0x2710); + set_current_text(0x2710); } gMenuDelay = 1; transition_begin(&sMenuTransitionFadeIn); @@ -7373,7 +7373,7 @@ s32 menu_adventure_track_loop(s32 updateRate) { play_sound_global(SOUND_MENU_BACK3, NULL); if (sp20 || sp28) { if (sp28) { - func_800C31EC(0x2710); + set_current_text(0x2710); } transition_begin(&sMenuTransitionFadeIn); gMenuDelay = -1; @@ -9833,7 +9833,7 @@ s32 taj_menu_loop(void) { switch (sCurrentMenuID) { case 0: - func_800C31EC(7); + set_current_text(ASSET_GAME_TEXT_7); sCurrentMenuID = 1; D_800DF4D8 = 1; break; @@ -9903,17 +9903,17 @@ s32 taj_menu_loop(void) { case -3: case -2: case -1: - func_800C31EC(ASSET_GAME_TEXT_8 - sCurrentMenuID); //Wouldn't this be ASSET_GAME_TEXT_9? + set_current_text(ASSET_GAME_TEXT_8 - sCurrentMenuID); //Wouldn't this be ASSET_GAME_TEXT_9? sCurrentMenuID = 4; break; case -4: - func_800C31EC(ASSET_GAME_TEXT_17); + set_current_text(ASSET_GAME_TEXT_17); gNextTajChallengeMenu = 0; sCurrentMenuID = 1; gDialogueSubmenu = 3; break; case -5: - func_800C31EC(ASSET_GAME_TEXT_21); + set_current_text(ASSET_GAME_TEXT_21); gNextTajChallengeMenu = 0; sCurrentMenuID = 7; gDialogueSubmenu = 0; @@ -9921,7 +9921,7 @@ s32 taj_menu_loop(void) { case -8: case -7: case -6: - func_800C31EC(ASSET_GAME_TEXT_12 - sCurrentMenuID); + set_current_text(ASSET_GAME_TEXT_12 - sCurrentMenuID); sCurrentMenuID = 6; gDialogueSubmenu = 0; break; diff --git a/src/object_functions.c b/src/object_functions.c index 6bb6cbb1..d93ff80a 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -124,8 +124,8 @@ VertexPosition D_800DCB28[6] = { f32 gNPCPosY; s32 gTajSoundMask; s32 gTTSoundMask; -s32 D_8011D4DC; -s8 D_8011D4E0; +s32 gRocketSoundTimer; +s8 gTajDialogueChoice; s16 gTajSoundID; // Taj Voice clips /******************************/ @@ -660,7 +660,7 @@ void obj_loop_trophycab(Object *obj, s32 updateRate) { func_800A3870(); } else { // Text for "TROPHY RACE" "TO ENTER THE TROPHY RACE, YOU MUST COMPLETE ALL THE TASKS FROM THIS WORLD. KEEP RACING!" - func_800C31EC(ASSET_GAME_TEXT_4); + set_current_text(ASSET_GAME_TEXT_4); gfxData->unk4 = 180; gfxData->unk0 = 140; set_sndfx_player_voice_limit(16); @@ -1129,6 +1129,10 @@ void obj_loop_characterflag(Object *obj, UNUSED s32 updateRate) { } } +/** + * If interacted by a racer, attach itself to the player and mark as invisible + * if the player is not already carrying an egg. +*/ void try_to_collect_egg(Object *obj, Object_CollectEgg *egg) { Object_64 *racer; Object *interactedObj; @@ -1140,7 +1144,7 @@ void try_to_collect_egg(Object *obj, Object_CollectEgg *egg) { if (interactedObj->segment.header->behaviorId == BHV_RACER) { racer = interactedObj->unk64; if (racer->racer.held_obj == NULL) { - egg->status = EGG_UNK_01; + egg->status = EGG_COLLECTED; obj->segment.trans.flags |= OBJ_FLAGS_INVISIBLE; racer->racer.held_obj = obj; transF.y_rotation = -interactedObj->segment.trans.y_rotation; @@ -1604,7 +1608,7 @@ void obj_init_animation(Object *obj, LevelObjectEntry_Animation *entry, s32 arg2 func_8001F3C8(entry->actorIndex); } if (entry->channel == -1) { - entry->channel = func_8001E440(); + entry->channel = get_cutscene_id(); } if (entry->channel == 20) { entry->actorIndex |= 0x80; @@ -1629,7 +1633,7 @@ void obj_init_animation(Object *obj, LevelObjectEntry_Animation *entry, s32 arg2 if (arg2 != 0 && (get_buttons_pressed_from_player(PLAYER_ONE) & R_CBUTTONS)) { obj->properties.animatedObj.action = 2; } - if (((func_8001E440() == entry->channel) || (entry->channel == 20)) && (obj->unk64 == NULL) && (entry->order == 0) && (entry->objectIdToSpawn != -1)) { + if (((get_cutscene_id() == entry->channel) || (entry->channel == 20)) && (obj->unk64 == NULL) && (entry->order == 0) && (entry->objectIdToSpawn != -1)) { func_8001F23C(obj, entry); } obj64 = &obj->unk64->animation; @@ -1906,7 +1910,7 @@ void obj_loop_infopoint(Object *obj, UNUSED s32 updateRate) { Object_InfoPoint *playerObj64 = &playerObj->unk64->info_point; player = playerObj64->unk0; if ((player != PLAYER_COMPUTER) && (get_buttons_pressed_from_player(player) & Z_TRIG)) { - func_800C31EC(obj->properties.infoPoint.radius & 0xFF); + set_current_text(obj->properties.infoPoint.radius & 0xFF); } } } @@ -2209,7 +2213,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { struct WaterProperties **water; Object *racerObj; s32 sp3C; - Object *temp_v0_12; + Object *telepoint; s32 var_a2; Object **racerObjs; s32 dialogueID; @@ -2274,7 +2278,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { } } obj->interactObj->flags = INTERACT_FLAGS_SOLID; - if ((func_80052188() || var_a2) && (obj->properties.npc.action == TAJ_MODE_ROAM || obj->properties.npc.action == TAJ_MODE_UNK1F)) { + if ((should_taj_teleport() || var_a2) && (obj->properties.npc.action == TAJ_MODE_ROAM || obj->properties.npc.action == TAJ_MODE_UNK1F)) { func_800012E8(); set_music_player_voice_limit(24); play_music(SEQUENCE_ENTRANCED); @@ -2436,8 +2440,8 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { func_80008168(); } if (dialogueID & 0x80) { - D_8011D4E0 = dialogueID & 0x7F; - if (D_8011D4E0 != racer64->racer.vehicleID) { + gTajDialogueChoice = dialogueID & 0x7F; + if (gTajDialogueChoice != racer64->racer.vehicleID) { obj->properties.npc.action = TAJ_MODE_TRANSFORM_BEGIN; taj->animFrameF = 0; // Voice clips: Abrakadabra, Alakazam, Alakazoom? @@ -2447,9 +2451,9 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { } } if (dialogueID & 0x40) { - D_8011D4E0 = dialogueID & 0xF; - if (D_8011D4E0 != racer64->racer.vehicleID) { - D_8011D4E0 |= 0x80; + gTajDialogueChoice = dialogueID & 0xF; + if (gTajDialogueChoice != racer64->racer.vehicleID) { + gTajDialogueChoice |= 0x80; obj->properties.npc.action = TAJ_MODE_TRANSFORM_BEGIN; taj->animFrameF = 0.0f; // Voice clips: Abrakadabra, Alakazam, Alakazoom? @@ -2479,7 +2483,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { racer64->racer.transparency -= (updateRate * 16); } else { racer64->racer.transparency = 0; - func_8000E1EC(racerObj, D_8011D4E0 & 0xF); + despawn_player_racer(racerObj, gTajDialogueChoice & 0xF); obj->properties.npc.action = TAJ_MODE_TRANSFORM_END; play_sound_global(SOUND_CYMBAL, NULL); transition_begin(&gTajTransformTransitionEnd); @@ -2502,7 +2506,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { } else { racer64->racer.transparency = 255; if (taj->animFrameF == 0.0) { - if (D_8011D4E0 & 0x80) { + if (gTajDialogueChoice & 0x80) { transition_begin(&gTajTransition); sp6B = 1; obj->properties.npc.action = TAJ_MODE_SET_CHALLENGE; @@ -2597,11 +2601,11 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { play_music(levelHeader->music); func_80001074(levelHeader->instruments); init_racer_for_challenge(racer64->racer.vehicleID); - temp_v0_12 = func_8002342C(obj->segment.trans.x_position, obj->segment.trans.z_position); - if (temp_v0_12 != NULL) { - obj->segment.trans.x_position = temp_v0_12->segment.trans.x_position; - obj->segment.trans.z_position = temp_v0_12->segment.trans.z_position; - obj->segment.object.segmentID = temp_v0_12->segment.object.segmentID; + telepoint = find_furthest_telepoint(obj->segment.trans.x_position, obj->segment.trans.z_position); + if (telepoint != NULL) { + obj->segment.trans.x_position = telepoint->segment.trans.x_position; + obj->segment.trans.z_position = telepoint->segment.trans.z_position; + obj->segment.object.segmentID = telepoint->segment.object.segmentID; obj->segment.trans.y_rotation = racerObj->segment.trans.y_rotation + 0x8000; } obj->properties.npc.action = TAJ_MODE_RACE; @@ -2624,11 +2628,11 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { } else { obj->segment.object.opacity = 0; obj->properties.npc.action = TAJ_MODE_TELEPORT_AWAY_END; - temp_v0_12 = func_8002342C(obj->segment.trans.x_position, obj->segment.trans.z_position); - if (temp_v0_12 != NULL) { - obj->segment.trans.x_position = temp_v0_12->segment.trans.x_position; - obj->segment.trans.z_position = temp_v0_12->segment.trans.z_position; - obj->segment.object.segmentID = temp_v0_12->segment.object.segmentID; + telepoint = find_furthest_telepoint(obj->segment.trans.x_position, obj->segment.trans.z_position); + if (telepoint != NULL) { + obj->segment.trans.x_position = telepoint->segment.trans.x_position; + obj->segment.trans.z_position = telepoint->segment.trans.z_position; + obj->segment.object.segmentID = telepoint->segment.object.segmentID; obj->segment.trans.y_rotation = racerObj->segment.trans.y_rotation + 0x8000; } } @@ -3213,7 +3217,7 @@ void obj_loop_ttdoor(Object *obj, s32 updateRate) { ttDoor->unk8 = 140; set_sndfx_player_voice_limit(16); play_sequence(SEQUENCE_NO_TROPHY_FOR_YOU); - func_800C31EC(ttDoor->unk13 & 0xFF); + set_current_text(ttDoor->unk13 & 0xFF); } ttDoor->unkC = 300; } @@ -3343,7 +3347,7 @@ void obj_loop_trigger(Object *obj, UNUSED s32 updateRate) { if (distance < 0.0f) { settings->courseFlagsPtr[settings->courseId] |= flags; if (triggerEntry->unkB != 0xFF) { - func_800C31EC(triggerEntry->unkB); + set_current_text(triggerEntry->unkB); } if (triggerEntry->unkC != 0xFF) { func_80021400(triggerEntry->unkC + 0x80); @@ -4110,7 +4114,7 @@ void obj_loop_weaponballoon(Object *obj, s32 updateRate) { if (levelMask == racer->balloon_level) { if (racer->raceFinished == FALSE) { if (prevQuantity != racer->balloon_quantity) { - func_800A7484(SOUND_VOICE_TT_POWERUP, 1.0f, racer->playerIndex); + set_time_trial_start_voice(SOUND_VOICE_TT_POWERUP, 1.0f, racer->playerIndex); newvar = racer->balloon_level; if (racer->balloon_level > 2) { newvar = 2; @@ -4123,7 +4127,7 @@ void obj_loop_weaponballoon(Object *obj, s32 updateRate) { } else if (racer->raceFinished == FALSE) { newvar = racer->balloon_level; if (newvar > 0) { - func_800A7484(SOUND_VOICE_TT_POWERUP, 1.0f, racer->playerIndex); + set_time_trial_start_voice(SOUND_VOICE_TT_POWERUP, 1.0f, racer->playerIndex); } play_sound_global(SOUND_COLLECT_ITEM + racer->balloon_level, NULL); } @@ -4449,12 +4453,18 @@ void homing_rocket_prevent_overshoot(Object *obj, s32 updateRate, Object_Weapon } } -void func_8003F0D0(void) { - D_8011D4DC = 0; +/** + * Set the rocket sound timer back to zero. +*/ +void reset_rocket_sound_timer(void) { + gRocketSoundTimer = 0; } -void func_8003F0DC(void) { - D_8011D4DC--; +/** + * Reduce the rocket sound timer by 1 increment. +*/ +void decrease_rocket_sound_timer(void) { + gRocketSoundTimer--; } /** @@ -4487,10 +4497,10 @@ void play_rocket_trailing_sound(Object *obj, struct Object_Weapon *weapon, u16 s } } if (shouldPlaySound) { - if (weapon->soundMask == 0) { - if (D_8011D4DC < 8) { + if (weapon->soundMask == NULL) { + if (gRocketSoundTimer < 8) { play_sound_at_position(soundID, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, &weapon->soundMask); - D_8011D4DC += 1; + gRocketSoundTimer++; } } else { update_spatial_audio_position(weapon->soundMask, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); @@ -4499,7 +4509,7 @@ void play_rocket_trailing_sound(Object *obj, struct Object_Weapon *weapon, u16 s if (weapon->soundMask) { func_800096F8(weapon->soundMask); weapon->soundMask = NULL; - D_8011D4DC -= 1; + gRocketSoundTimer -= 1; } } } diff --git a/src/object_functions.h b/src/object_functions.h index 02bc1f43..33d911e7 100644 --- a/src/object_functions.h +++ b/src/object_functions.h @@ -55,7 +55,7 @@ enum SilvereCoinBehaviours { enum EggPickupStatus { EGG_SPAWNED, - EGG_UNK_01, + EGG_COLLECTED, EGG_MOVING, EGG_IN_BASE, EGG_HATCHED @@ -351,8 +351,8 @@ void obj_init_wballoonpop(Object *obj, LevelObjectEntry_WBalloonPop *entry); void obj_loop_wballoonpop(Object *obj, s32 updateRate); void obj_init_weapon(Object *obj, LevelObjectEntry_Weapon *entry); void obj_loop_weapon(Object *obj, s32 updateRate); -void func_8003F0D0(void); -void func_8003F0DC(void); +void reset_rocket_sound_timer(void); +void decrease_rocket_sound_timer(void); void obj_init_audioline(Object *obj, LevelObjectEntry_AudioLine *entry); void obj_init_audioreverb(Object *obj, LevelObjectEntry_AudioReverb *entry); void obj_init_texscroll(Object *obj, LevelObjectEntry_TexScroll *entry, s32 arg2); diff --git a/src/objects.c b/src/objects.c index b03772b8..5b463f7b 100644 --- a/src/objects.c +++ b/src/objects.c @@ -46,18 +46,18 @@ s16 D_800DC708 = 0; s32 D_800DC70C = 0; // Currently unknown, might be a different type. s16 D_800DC710 = 1; s32 D_800DC714 = 0; // Currently unknown, might be a different type. -s32 D_800DC718 = 0; +Object *gGhostObj = NULL; s8 D_800DC71C = 0; -s32 D_800DC720 = 0; // Currently unknown, might be a different type. +s32 gObjectTexAnim = FALSE; s16 D_800DC724 = 0x2A30; s16 D_800DC728 = -1; s16 D_800DC72C = 0; u8 gHasGhostToSave = 0; -u8 D_800DC734 = 0; -u8 D_800DC738 = 0; +u8 gTimeTrialStaffGhost = 0; +u8 gBeatStaffGhost = FALSE; s8 D_800DC73C = 0; s8 D_800DC740 = 0; -s8 D_800DC744 = 0; +s8 gSwapLeadPlayer = FALSE; s8 D_800DC748 = 0; s32 D_800DC74C[2] = {0, 0}; // Have a feeling these are both the same array. s32 D_800DC754[2] = {0, 0}; @@ -80,7 +80,7 @@ u16 D_800DC7A8[8] = { s16 D_800DC7B8[52] = { 0x00ED, 0x00FF, BHV_TRIGGER, BHV_VEHICLE_ANIMATION, - BHV_ZIPPER_WATER, BHV_UNK_3A, BHV_UNK_57, BHV_SILVER_COIN, + BHV_ZIPPER_WATER, BHV_UNK_3A, BHV_TAJ_TELEPOINT, BHV_SILVER_COIN, BHV_BOOST, BHV_WARDEN_SMOKE, 0x00F3, 0x00FD, BHV_TREASURE_SUCKER, BHV_LOG, BHV_LAVA_SPURT, BHV_POS_ARROW, BHV_UNK_5B, BHV_UNK_5C, BHV_ZIPPER_AIR, BHV_UNK_5E, @@ -163,13 +163,13 @@ s32 D_8011AD38; //D_8011AD38 is ultimately set by func_80074B34, and is almost d s8 D_8011AD3C; s8 D_8011AD3D; s8 D_8011AD3E; -Object *D_8011AD40; -s8 D_8011AD44; +Object *gTransformObject; // Set but never read. +s8 gTransformTimer; s8 gOverworldVehicle; -s16 D_8011AD46; -s16 D_8011AD48; -s16 D_8011AD4A; -s16 D_8011AD4C; +s16 gTransformPosX; +s16 gTransformPosY; +s16 gTransformPosZ; +s16 gTransformAngleY; s16 D_8011AD4E; s8 D_8011AD50; s8 D_8011AD51; @@ -194,9 +194,9 @@ s32 D_8011ADB4; s32 gRaceStartCountdown; s32 D_8011ADBC; s32 D_8011ADC0; -s8 D_8011ADC4; +s8 gFirstTimeFinish; s8 D_8011ADC5; -u32 D_8011ADC8; +u32 gBalloonCutsceneTimer; s8 (*D_8011ADCC)[8]; f32 D_8011ADD0; s8 D_8011ADD4; @@ -213,14 +213,14 @@ TextureHeader *D_8011AE50; TextureHeader *D_8011AE54; Object **gObjPtrList; // Not sure about the number of elements s32 gObjectCount; -s32 D_8011AE60; +s32 gObjectListStart; s32 gParticleCount; Object *gObjectMemoryPool; Object **D_8011AE6C; s32 D_8011AE70; Object **D_8011AE74; s16 D_8011AE78; -s16 D_8011AE7A; +s16 gCutsceneID; s16 D_8011AE7C; s8 D_8011AE7E; s16 gTTGhostTimeToBeat; @@ -400,7 +400,7 @@ void allocate_object_pools(void) { decrypt_magic_codes(&gAssetsMiscSection[gAssetsMiscTable[ASSET_MISC_MAGIC_CODES]], (gAssetsMiscTable[ASSET_MISC_TITLE_SCREEN_DEMO_IDS] - gAssetsMiscTable[ASSET_MISC_MAGIC_CODES]) * sizeof(s32 *)); gObjPtrList = allocate_from_main_pool_safe(sizeof(uintptr_t) * OBJECT_SLOT_COUNT, COLOUR_TAG_BLUE); - D_8011ADC4 = 0; + gFirstTimeFinish = 0; gTimeTrialEnabled = 0; gIsTimeTrial = FALSE; gObjectUpdateRateF = 2.0f; @@ -466,14 +466,14 @@ void clear_object_pointers(void) { D_8011AF08[0] = 0xFF; D_8011AF08[1] = 0xFF; gObjectCount = 0; - D_8011AE60 = 0; + gObjectListStart = 0; gParticleCount = 0; D_8011AE88 = 0; D_8011ADD4 = 0; - D_8011AE7A = 0; + gCutsceneID = 0; D_8011AE7E = 1; D_8011AE7C = 0; - D_8011AD44 = 0; + gTransformTimer = 0; gIsTajChallenge = FALSE; D_8011AEF7 = 0; D_8011AF60[0] = 0; @@ -483,17 +483,21 @@ void clear_object_pointers(void) { D_8011ADD5 = 0; } -void func_8000C604(void) { +/** + * Clear all objects from memory. Also clear rumble. + * Swap lead player in adventure two if the other player finished ahead of the lead player. +*/ +void free_all_objects(void) { s32 i, len; free_tt_ghost_data(); D_800DC748 = 0; - if (D_800DC71C != 0) { + if (D_800DC71C) { func_80072298(1); } D_800DC71C = 0; - if (D_800DC744 && is_in_two_player_adventure()) { - D_800DC744 = 0; - func_8006F398(); + if (gSwapLeadPlayer && is_in_two_player_adventure()) { + gSwapLeadPlayer = FALSE; + swap_lead_player(); } gParticlePtrList_flush(); len = gObjectCount; @@ -502,7 +506,7 @@ void func_8000C604(void) { } gFreeListCount = 0; gObjectCount = 0; - D_8011AE60 = 0; + gObjectListStart = 0; clear_object_pointers(); free_from_memory_pool((void *) D_8011AEB0[0]); free_from_memory_pool((void *) D_8011AEB0[1]); @@ -753,62 +757,69 @@ s8 check_if_silver_coin_race(void) { return gIsSilverCoinRace; } -void func_8000E1EC(Object *obj, s32 vehicleID) { - D_8011AD40 = obj; - D_8011AD44 = 4; +/** + * Store some things about the racer object then remove it. +*/ +void despawn_player_racer(Object *obj, s32 vehicleID) { + gTransformObject = obj; + gTransformTimer = 4; gOverworldVehicle = vehicleID; - D_8011AD46 = obj->segment.trans.x_position; - D_8011AD48 = obj->segment.trans.y_position; - D_8011AD4A = obj->segment.trans.z_position; - D_8011AD4C = obj->segment.trans.y_rotation; + gTransformPosX = obj->segment.trans.x_position; + gTransformPosY = obj->segment.trans.y_position; + gTransformPosZ = obj->segment.trans.z_position; + gTransformAngleY = obj->segment.trans.y_rotation; free_object(obj); gNumRacers = 0; } -void func_8000E2B4(void) { +/** + * Spawn a new racer object and set the initial position and rotation to what was set + * before the old one was freed. +*/ +void transform_player_vehicle(void) { Object *player; LevelObjectEntry8000E2B4 spawnObj; Settings *settings; - Object_Racer *player_64; - s16 object_id; + Object_Racer *racer; + s16 objectID; - if (!D_8011AD44) { + if (gTransformTimer == 0) { return; } - D_8011AD44--; - if (D_8011AD44) { + gTransformTimer--; + if (gTransformTimer) { return; } settings = get_settings(); spawnObj.unkE = 0; spawnObj.common.size = 16; - if (gOverworldVehicle < 5) { - object_id = ((s16 *) D_800DC7A8)[settings->racers[0].character + gOverworldVehicle * 10]; + if (gOverworldVehicle < VEHICLE_TRICKY) { + objectID = ((s16 *) D_800DC7A8)[settings->racers[PLAYER_ONE].character + gOverworldVehicle * 10]; } else { - object_id = D_800DC7B8[gOverworldVehicle + 37]; + objectID = D_800DC7B8[gOverworldVehicle + 37]; } set_level_default_vehicle(gOverworldVehicle); - spawnObj.common.size = spawnObj.common.size | ((s32) (object_id & 0x100) >> 1); + spawnObj.common.size |= (objectID & 0x100) >> 1; spawnObj.unkA = 0; spawnObj.unk8 = 0; - spawnObj.common.objectID = object_id; - spawnObj.common.x = D_8011AD46; - spawnObj.common.y = D_8011AD48; - spawnObj.common.z = D_8011AD4A; - spawnObj.unkC = D_8011AD4C; - func_800521B8(1); - player = spawn_object((LevelObjectEntryCommon *) &spawnObj, 0x11); + spawnObj.common.objectID = objectID; + spawnObj.common.x = gTransformPosX; + spawnObj.common.y = gTransformPosY; + spawnObj.common.z = gTransformPosZ; + spawnObj.unkC = gTransformAngleY; + set_taj_status(TAJ_DIALOGUE); + player = spawn_object((LevelObjectEntryCommon *) &spawnObj, 0x10 | 0x1); gNumRacers = 1; - (*gRacers)[0] = player; - gRacersByPort[0] = player; + (*gRacers)[PLAYER_ONE] = player; + gRacersByPort[PLAYER_ONE] = player; *gRacersByPosition = player; - player_64 = &player->unk64->racer; - player_64->vehicleID = gOverworldVehicle; - player_64->vehicleIDPrev = gOverworldVehicle; - player_64->unk2 = 0; - player_64->characterId = (s8) settings->racers[0].character; - player_64->playerIndex = 0; - player_64->unk118 = 0; + racer = &player->unk64->racer; + racer->vehicleID = gOverworldVehicle; + racer->vehicleIDPrev = gOverworldVehicle; + racer->unk2 = 0; + racer->characterId = settings->racers[PLAYER_ONE].character; + racer->playerIndex = 0; + racer->unk118 = 0; if (get_filtered_cheats() & CHEAT_BIG_CHARACTERS) { player->segment.trans.scale *= 1.4f; } @@ -816,15 +827,15 @@ void func_8000E2B4(void) { player->segment.trans.scale *= 0.714f; } player->segment.level_entry = NULL; - player->segment.trans.y_rotation = D_8011AD4C; - player->segment.trans.y_position = D_8011AD48; + player->segment.trans.y_rotation = gTransformAngleY; + player->segment.trans.y_position = gTransformPosY; } /** * Enables or Disables time trial mode. */ -void set_time_trial_enabled(s32 arg0) { - gTimeTrialEnabled = arg0; +void set_time_trial_enabled(s32 status) { + gTimeTrialEnabled = status; } /** @@ -917,7 +928,7 @@ Object *get_object(s32 index) { * Return the standard object list index and how many objects are in that list. */ Object **objGetObjList(s32 *arg0, s32 *cnt) { - *arg0 = D_8011AE60; + *arg0 = gObjectListStart; *cnt = gObjectCount; return gObjPtrList; } @@ -984,7 +995,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { if (curObj->segment.header == NULL) { return NULL; } - sp50 = curObj->segment.header->unk30 & 0x80; + sp50 = curObj->segment.header->flags & 0x80; if (sp50) { curObj->segment.trans.flags |= OBJ_FLAGS_UNK_0080; } @@ -1249,15 +1260,19 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { GLOBAL_ASM("asm/non_matchings/objects/spawn_object.s") #endif +/** + * Run functions that will attempt to free the graphics data of the object + * if there are no other references. +*/ void objFreeAssets(Object *obj, s32 count, s32 objType) { s32 i; - if (objType == 0) { // 3D model + if (objType == OBJECT_MODEL_TYPE_3D_MODEL) { // 3D model for (i = 0; i < count; i++) { if (obj->unk68[i] != NULL) { func_8005FF40((ObjectModel **) (s32) obj->unk68[i]); } } - } else if (objType == 4) { + } else if (objType == OBJECT_MODEL_TYPE_MISC) { for (i = 0; i < count; i++) { if (obj->unk68[i] != NULL) { free_texture((TextureHeader *) (s32) obj->unk68[i]); @@ -1524,7 +1539,7 @@ void func_80010994(s32 updateRate) { } i = 1; //FAKEMATCH func_800142B8(); - func_800155B8(); + process_object_interactions(); func_8001E89C(); for (i = 0; i < D_8011AE70; i++) { run_object_loop_func(D_8011AE6C[i], updateRate); @@ -1534,7 +1549,7 @@ void func_80010994(s32 updateRate) { func_8001709C(D_8011AE6C[i]); } tempVal = gObjectCount; - for (i = D_8011AE60; i < tempVal; i++) { + for (i = gObjectListStart; i < tempVal; i++) { obj = gObjPtrList[i]; if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { if ((obj->behaviorId != BHV_LIGHT_RGBA) && (obj->behaviorId != BHV_WEAPON) && (obj->behaviorId != BHV_FOG_CHANGER)) { @@ -1577,14 +1592,14 @@ void func_80010994(s32 updateRate) { } } func_8000BADC(updateRate); - for (i = D_8011AE60; i < tempVal; i++) { + for (i = gObjectListStart; i < tempVal; i++) { obj = gObjPtrList[i]; if ((!(obj->segment.trans.flags & 0x8000) && (obj->behaviorId == BHV_WEAPON)) || (obj->behaviorId == BHV_FOG_CHANGER)) { run_object_loop_func(obj, updateRate); } } if (gParticleCount > 0) { - for (i = D_8011AE60; i < tempVal; i++) { + for (i = gObjectListStart; i < tempVal; i++) { obj = gObjPtrList[i]; if (obj->segment.trans.flags & 0x8000) { //Why is this object being treated as a Particle? @@ -1595,7 +1610,7 @@ void func_80010994(s32 updateRate) { do { //FAKEMATCH lightUpdateLights(updateRate); if (get_light_count() > 0) { - for (i = D_8011AE60; i < gObjectCount; i++) { + for (i = gObjectListStart; i < gObjectCount; i++) { obj = gObjPtrList[i]; if (!(obj->segment.trans.flags & 0x8000) && (obj->shading != NULL)) { func_80032C7C(obj); @@ -1624,12 +1639,12 @@ void func_80010994(s32 updateRate) { gObjectUpdateRateF = (f32) updateRate; D_8011AD24[0] = 0; D_8011AD53 = 0; - func_8000E2B4(); + transform_player_vehicle(); try_close_dialogue_box(); func_800179D0(); } while(0); //FAKEMATCH if (D_8011AF00 == 1) { - if ((D_8011ADB0 == 0x50) && (D_8011AE7A == 0)) { + if ((D_8011ADB0 == 0x50) && (gCutsceneID == 0)) { sp54 = 0; for (i = 0; i < MAXCONTROLLERS; i++) { tempVal = get_buttons_pressed_from_player(i); @@ -1796,6 +1811,7 @@ s32 play_footstep_sounds(Object *obj, s32 arg1, s32 frame, s32 oddSoundId, s32 e } return ret; } + /** * Make the next call of move_object never mark the object as out of bounds. * Official Name: objMoveXYZnocheck @@ -2174,9 +2190,9 @@ void render_3d_model(Object *obj) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); } if (alpha < 255) { - meshBatch = func_800143A8(objModel, obj, 0, RENDER_SEMI_TRANSPARENT, spB0); + meshBatch = render_mesh(objModel, obj, 0, RENDER_SEMI_TRANSPARENT, spB0); } else { - meshBatch = func_800143A8(objModel, obj, 0, RENDER_NONE, spB0); + meshBatch = render_mesh(objModel, obj, 0, RENDER_NONE, spB0); } if (obj->segment.header->unk71) { if (hasOpacity) { @@ -2264,7 +2280,7 @@ void render_3d_model(Object *obj) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->shading->unk18, obj->shading->unk19, obj->shading->unk1A, alpha); enable_primitive_colour(); } - func_800143A8(objModel, obj, meshBatch, 4, spB0); + render_mesh(objModel, obj, meshBatch, RENDER_SEMI_TRANSPARENT, spB0); if (obj->segment.header->unk71) { disable_primitive_colour(); } @@ -2653,7 +2669,7 @@ void render_racer_shield(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); } apply_object_shear_matrix(&gObjectCurrDisplayList, &gObjectCurrMatrix, gShieldEffectObject, obj, shear); - func_800143A8(mdl, gShieldEffectObject, 0, 4, 0); + render_mesh(mdl, gShieldEffectObject, 0, RENDER_SEMI_TRANSPARENT, 0); gDkrInsertMatrix(gObjectCurrDisplayList++, 0, G_MTX_DKR_INDEX_0); if (racer->shieldTimer < 64) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); @@ -2710,12 +2726,12 @@ void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o gfxData = *gMagnetEffectObject->unk68; mdl = gfxData->objModel; gMagnetEffectObject->unk44 = (Vertex *) gfxData->unk4[gfxData->unk1F]; - opacity = (((D_8011B078[(var_t0 * 4) + 1] * 8) & 0x7F) + 0x80); - func_8007F594(&gObjectCurrDisplayList, 2, 0xFFFFFF00 | opacity, gMagnetColours[racer->magnetModelID]); + opacity = ((D_8011B078[(var_t0 * 4) + 1] * 8) & 0x7F) + 0x80; + func_8007F594(&gObjectCurrDisplayList, 2, COLOUR_RGBA32(255, 255, 255, opacity), gMagnetColours[racer->magnetModelID]); apply_object_shear_matrix(&gObjectCurrDisplayList, &gObjectCurrMatrix, gMagnetEffectObject, obj, shear); - D_800DC720 = TRUE; - func_800143A8(mdl, gMagnetEffectObject, 0, 4, 0); - D_800DC720 = FALSE; + gObjectTexAnim = TRUE; + render_mesh(mdl, gMagnetEffectObject, 0, RENDER_SEMI_TRANSPARENT, 0); + gObjectTexAnim = FALSE; gDkrInsertMatrix(gObjectCurrDisplayList++, 0, G_MTX_DKR_INDEX_0); gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); reset_render_settings(&gObjectCurrDisplayList); @@ -2729,14 +2745,14 @@ void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o GLOBAL_ASM("asm/non_matchings/objects/func_80014090.s") void func_800142B8(void) { - s32 i = D_8011AE60; + s32 i = gObjectListStart; s32 j; Object *currObj; Object_68 *curr_68; 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) { + if (!(currObj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) && currObj->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) { for (j = 0; j < currObj->segment.header->numberOfModelIds; j++) { curr_68 = currObj->unk68[j]; if (curr_68 != NULL && curr_68->unk20 > 0) { @@ -2748,7 +2764,10 @@ void func_800142B8(void) { } } -s32 func_800143A8(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, s32 someBool) { +/** + * Renders every triangle batch in an objects mesh. +*/ +s32 render_mesh(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, s32 someBool) { s32 i; s32 textureIndex; s32 triOffset; @@ -2769,7 +2788,7 @@ s32 func_800143A8(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, i = startIndex; endLoop = FALSE; while (i < objModel->numberOfBatches && !endLoop) { - if ((objModel->batches[i].flags & 4) == 0 || (flags & 4)) { + if (!(objModel->batches[i].flags & BATCH_FLAGS_UNK00000004) || flags & RENDER_SEMI_TRANSPARENT) { //Hidden/Invisible geometry textureIndex = objModel->batches[i].flags & BATCH_FLAGS_HIDDEN; //Probably a fakematch to use textureIndex here, but it works. @@ -2796,10 +2815,10 @@ s32 func_800143A8(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, if (flags & RENDER_SEMI_TRANSPARENT && !(objModel->batches[i].flags & (flags & ~RENDER_SEMI_TRANSPARENT))) { texToSetFlags |= RENDER_SEMI_TRANSPARENT; } - if (D_800DC720 == 0) { + if (gObjectTexAnim == FALSE) { load_and_set_texture(&dlist, texToSet, texToSetFlags, texOffset); } else { - texToSet = func_8007B46C(texToSet, texOffset); + texToSet = set_animated_texture_header(texToSet, texOffset); gDkrDmaDisplayList(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(texToSet->cmd), texToSet->numberOfCommands); } if (offsetStartVertex == numVertices) { @@ -2839,12 +2858,12 @@ s32 func_80014814(s32 *retObjCount) { if (D_8011AE7C) { return D_8011AE7C; } - curObjCount = D_8011AE60; + curObjCount = gObjectListStart; maxObjCount = gObjectCount - 1; while (maxObjCount >= curObjCount) { for (i = 0; maxObjCount >= curObjCount && i == 0; i++) { if (!(gObjPtrList[curObjCount]->segment.trans.flags & 0x8000)) { - if (gObjPtrList[curObjCount]->segment.header->unk30 & 1) { + if (gObjPtrList[curObjCount]->segment.header->flags & 1) { curObjCount++; } i = -1; @@ -2855,7 +2874,7 @@ s32 func_80014814(s32 *retObjCount) { for (i = 0; maxObjCount >= curObjCount && i == 0; i++) { if (gObjPtrList[maxObjCount]->segment.trans.flags & 0x8000) { i = -1; - } else if (!(gObjPtrList[maxObjCount]->segment.header->unk30 & 1)) { + } else if (!(gObjPtrList[maxObjCount]->segment.header->flags & 1)) { maxObjCount--; } else { i = -1; @@ -2897,21 +2916,25 @@ UNUSED void func_800149C0(unk800149C0 *arg0, UNUSED s32 arg1, s32 arg2, s32 arg3 GLOBAL_ASM("asm/non_matchings/objects/func_80014B50.s") GLOBAL_ASM("asm/non_matchings/objects/func_80015348.s") -void func_800155B8(void) { +/** + * Go through each object and detect potential interactions between each. + * Add candidates to a list and calcualte their distances. +*/ +void process_object_interactions(void) { Object *obj2; Object *obj; ObjectInteraction *objInteract; ObjectInteraction *objInteract2; f32 xDiff; f32 zDiff; - f32 var_f12; + f32 radius; s32 j; s32 i; s32 objsWithInteractives; Object *objList[257]; //257 seems random, but it works for now. objsWithInteractives = 0; - for (i = D_8011AE60; i < gObjectCount; i++) { + for (i = gObjectListStart; i < gObjectCount; i++) { obj = gObjPtrList[i]; if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { objInteract = obj->interactObj; @@ -2921,7 +2944,7 @@ void func_800155B8(void) { if (objInteract->unk11 != 2) { objInteract->obj = NULL; objInteract->flags &= ~(INTERACT_FLAGS_COLLIDED | INTERACT_FLAGS_PUSHING); - objInteract->distance = 0xFF; + objInteract->distance = 255; } } } @@ -2932,7 +2955,7 @@ void func_800155B8(void) { for (i = 0; i < objsWithInteractives; i++) { obj = objList[i]; objInteract = obj->interactObj; - if ((objInteract->unk11 == 2) && (D_8011AE70 < 20)) { + if (objInteract->unk11 == 2 && D_8011AE70 < 20) { D_8011AE6C[D_8011AE70] = obj; D_8011AE70++; } @@ -2941,18 +2964,18 @@ void func_800155B8(void) { if (i != j) { obj2 = objList[j]; objInteract2 = obj2->interactObj; - if (objInteract2->flags & 3) { + if (objInteract2->flags & (INTERACT_FLAGS_SOLID | INTERACT_FLAGS_TANGIBLE)) { if (objInteract2->unk11 == 3) { func_80016748(obj, obj2); } else if (objInteract2->unk11 != 2) { xDiff = obj->segment.trans.x_position - obj2->segment.trans.x_position; zDiff = obj->segment.trans.z_position - obj2->segment.trans.z_position; if (objInteract2->flags & INTERACT_FLAGS_UNK_0020) { - var_f12 = 0x400000; //4194304.0f; + radius = 0x400000; //4194304.0f; } else { - var_f12 = 0x40000; //262144.0f; + radius = 0x40000; //262144.0f; } - if (((xDiff * xDiff) + (zDiff * zDiff)) < var_f12) { + if (((xDiff * xDiff) + (zDiff * zDiff)) < radius) { func_800159C8(obj, obj2); } } @@ -3139,7 +3162,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 < gObjectCount; i++) { + for (i = gObjectListStart; 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; @@ -3152,24 +3175,29 @@ GLOBAL_ASM("asm/non_matchings/objects/func_80018CE0.s") GLOBAL_ASM("asm/non_matchings/objects/func_8001955C.s") GLOBAL_ASM("asm/non_matchings/objects/func_80019808.s") -s8 func_8001A7D8(unk8001A7D8_arg0 *arg0) { +/** + * Mark the course as finished for the appropriate mode. + * Check if it's the first race or the silver coin race before deciding which flag to write. + * Return whether something was written. +*/ +s8 set_course_finish_flags(Settings *settings) { Object_Racer *racer; - racer = (Object_Racer *) gRacersByPosition[0]->unk64; + racer = (Object_Racer *) gRacersByPosition[PLAYER_ONE]->unk64; if (racer->playerIndex == PLAYER_COMPUTER) { - return 0; + return FALSE; } - D_8011ADC4 = 0; - if (!(arg0->unk4[arg0->unk49] & 2)) { - if (!gIsTimeTrial) { - D_8011ADC4 = 1; - arg0->unk4[arg0->unk49] |= 2; + gFirstTimeFinish = FALSE; + if (!(settings->courseFlagsPtr[settings->courseId] & RACE_CLEARED)) { + if (gIsTimeTrial == FALSE) { + gFirstTimeFinish = TRUE; + settings->courseFlagsPtr[settings->courseId] |= RACE_CLEARED; } - } else if (gIsSilverCoinRace && racer->silverCoinCount >= 8 && !gIsTimeTrial) { - D_8011ADC4 = 1; - arg0->unk4[arg0->unk49] |= 4; + } else if (gIsSilverCoinRace && racer->silverCoinCount >= 8 && gIsTimeTrial == FALSE) { + gFirstTimeFinish = TRUE; + settings->courseFlagsPtr[settings->courseId] |= RACE_CLEARED_SILVER_COINS; } - return D_8011ADC4; + return gFirstTimeFinish; } void func_8001A8D4(s32 arg0) { @@ -3184,8 +3212,11 @@ s16 func_8001AE44(void) { return D_8011AD4E; } -u32 func_8001AE54(void) { - return D_8011ADC8; +/** + * Return the timer used for the collectable balloon cutscene. +*/ +u32 get_balloon_cutscene_timer(void) { + return gBalloonCutsceneTimer; } GLOBAL_ASM("asm/non_matchings/objects/func_8001AE64.s") @@ -3240,23 +3271,31 @@ s32 func_8001B2F0(s32 mapId) { return ret; } -s32 func_8001B3AC(s32 arg0) { - return arg0 == D_800DC718; +/** + * Return true if this object is the time trial ghost. +*/ +s32 is_time_trial_ghost(Object* obj) { + return obj == gGhostObj; } -void func_8001B3C4(s32 arg0, s16 *playerId) { +/** + * Free ghost data then save the players victory. + * Check if the player has beaten every time and unlock TT. + * Otherwise, tell them to try another track. +*/ +void tt_ghost_beaten(s32 arg0, s16 *playerId) { s32 trackIdCount; s8 *mainTrackIds; - D_800DC718 = 0; + gGhostObj = NULL; free_tt_ghost_data(); - D_800DC734 = 0; + gTimeTrialStaffGhost = FALSE; mainTrackIds = (s8 *) get_misc_asset(ASSET_MISC_MAIN_TRACKS_IDS); trackIdCount = 0; while (mainTrackIds[trackIdCount] != -1 && mainTrackIds[trackIdCount] != arg0) { trackIdCount++; } - if (D_800DC738 != 0) { + if (gBeatStaffGhost) { //Save that TT has been beaten for this track. set_eeprom_settings_value(16 << trackIdCount); //Check if TT has been beaten for all tracks. @@ -3264,13 +3303,13 @@ void func_8001B3C4(s32 arg0, s16 *playerId) { set_magic_code_flags(CHEAT_CONTROL_TT); play_sound_global(SOUND_VOICE_TT_BEAT_ALL_TIMES, NULL); func_80000FDC(SOUND_VOICE_TT_UNLOCKED, 0, 1.5f); - func_800C31EC(ASSET_GAME_TEXT_84); //Text for "You have beaten all my times!" and then "Now you can PICK me!" + set_current_text(ASSET_GAME_TEXT_84); //Text for "You have beaten all my times!" and then "Now you can PICK me!" } else { play_sound_global(SOUND_VOICE_TT_WELL_DONE, NULL); func_80000FDC(SOUND_VOICE_TT_TRY_ANOTHER_TRACK, 0, 1.0f); - func_800C31EC(ASSET_GAME_TEXT_83); //Text for "Well Done! Now try another track." + set_current_text(ASSET_GAME_TEXT_83); //Text for "Well Done! Now try another track." } - D_800DC738 = 0; + gBeatStaffGhost = FALSE; return; } play_time_trial_end_message(playerId); @@ -3278,12 +3317,18 @@ void func_8001B3C4(s32 arg0, s16 *playerId) { GLOBAL_ASM("asm/non_matchings/objects/func_8001B4FC.s") -Object *func_8001B640(void) { - return (Object *) D_800DC718; +/** + * Return the time trial ghost object. +*/ +Object *get_time_trial_ghost(void) { + return gGhostObj; } -s32 func_8001B650(void) { - return D_800DC738 == 0; +/** + * Return true if the tt ghost is unbeaten for this track. +*/ +s32 unbeaten_staff_time(void) { + return gBeatStaffGhost == FALSE; } s32 func_8001B668(s32 arg0) { @@ -3958,17 +4003,23 @@ void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3) { } } -s16 func_8001E440(void) { - return D_8011AE7A; +/** + * Return the index of the currently active cutscene. +*/ +s16 get_cutscene_id(void) { + return gCutsceneID; } -void func_8001E450(s32 arg0) { - D_8011AE7A = arg0; +/** + * Set the current cutscene index. +*/ +void set_cutscene_id(s32 cutsceneID) { + gCutsceneID = cutsceneID; } -void func_8001E45C(s32 arg0) { - if (arg0 != D_8011AE7A) { - D_8011AE7A = arg0; +void func_8001E45C(s32 cutsceneID) { + if (cutsceneID != gCutsceneID) { + gCutsceneID = cutsceneID; D_8011ADAC = 0; D_8011AE7E = 1; if (get_game_mode() == GAMEMODE_MENU) { @@ -3982,7 +4033,7 @@ void func_8001E45C(s32 arg0) { * Goes unused, since objGetObjList exists */ UNUSED s32 get_object_list_index(void) { - return D_8011AE60; + return gObjectListStart; } GLOBAL_ASM("asm/non_matchings/objects/func_8001E4C4.s") @@ -4228,7 +4279,7 @@ void func_8002125C(Object *charSelectObj, LevelObjectEntry_CharacterSelect *entr charSelect->unk41 = entry->unk2F; charSelect->unk3C = entry->unk2B; if (entry->unk27 != 255) { - func_800C31EC(entry->unk27); + set_current_text(entry->unk27); } if (entry->unk2A >= 0) { func_8001E45C(entry->unk2A); @@ -4347,6 +4398,10 @@ UNUSED f32 func_800228B0(f32 *arg0, u32 arg1, f32 arg2, f32 *arg3) { UNUSED void func_800228DC(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) { } +/** + * Prepares the player racer for a Taj Challenge race. + * Prevents them from pausing for 10 frames. +*/ void init_racer_for_challenge(s32 vehicleID) { Object_Racer *racer; @@ -4396,7 +4451,10 @@ s8 is_taj_challenge(void) { return gIsTajChallenge; } -Object *func_8002342C(f32 x, f32 z) { +/** + * Searches for the furthest teleport anchor and returns it. +*/ +Object *find_furthest_telepoint(f32 x, f32 z) { Object *tempObj; Object *bestObj; f32 diffX; @@ -4411,7 +4469,7 @@ Object *func_8002342C(f32 x, f32 z) { if (gObjectCount > 0) { do { tempObj = gObjPtrList[i]; - if (!(tempObj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) && tempObj->behaviorId == BHV_UNK_57) { + if (!(tempObj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) && tempObj->behaviorId == BHV_TAJ_TELEPOINT) { diffX = tempObj->segment.trans.x_position - x; diffZ = tempObj->segment.trans.z_position - z; tempObj = gObjPtrList[i]; // fakematch diff --git a/src/objects.h b/src/objects.h index 44f6faf6..9c133bd3 100644 --- a/src/objects.h +++ b/src/objects.h @@ -106,7 +106,7 @@ enum ObjectBehaviours { BHV_WIZPIG_SHIP, BHV_ANIMATED_OBJECT_3, BHV_ANIMATED_OBJECT_4, - BHV_UNK_57, + BHV_TAJ_TELEPOINT, BHV_SILVER_COIN, BHV_BOOST, BHV_WARDEN_SMOKE, @@ -197,8 +197,8 @@ typedef struct RacerShieldGfx { } RacerShieldGfx; typedef struct BossRaceVehicles { - u8 playerVehicle; - u8 bossVehicle; + s8 playerVehicle; + s8 bossVehicle; } BossRaceVehicles; typedef struct AssetObjectHeaders { @@ -327,7 +327,7 @@ extern s32 osCicId; // Used for an Anti-Piracy check in render_3d_model Object *func_8000BF44(s32 arg0); void allocate_object_pools(void); void clear_object_pointers(void); -void func_8000C604(void); +void free_all_objects(void); s32 normalise_time(s32 timer); void func_8000CBC0(void); s32 func_8000CC20(Object *arg0); @@ -341,7 +341,7 @@ void func_8000E194(void); void fontUseFont(void); s8 find_non_car_racers(void); s8 check_if_silver_coin_race(void); -void func_8000E1EC(Object *obj, s32 vehicleID); +void despawn_player_racer(Object *obj, s32 vehicleID); void set_time_trial_enabled(s32 arg0); u8 is_time_trial_enabled(void); u8 is_in_time_trial(void); @@ -372,12 +372,12 @@ s16 get_taj_challenge_type(void); Object *find_taj_object(void); void func_8001A8D4(s32 arg0); s16 func_8001AE44(void); -u32 func_8001AE54(void); +u32 get_balloon_cutscene_timer(void); s32 func_8001B288(void); Object *func_8001B2E0(void); -s32 func_8001B3AC(s32 arg0); -Object *func_8001B640(void); -s32 func_8001B650(void); +s32 is_time_trial_ghost(Object* obj); +Object *get_time_trial_ghost(void); +s32 unbeaten_staff_time(void); s32 func_8001B738(s32 controllerIndex); u8 has_ghost_to_save(void); void set_ghost_none(void); @@ -402,8 +402,8 @@ s32 *get_misc_asset(s32 index); s32 func_8001E2EC(s32 arg0); void func_8001E344(s32 arg0); void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3); -s16 func_8001E440(void); -void func_8001E450(s32 arg0); +s16 get_cutscene_id(void); +void set_cutscene_id(s32 arg0); void func_8001E45C(s32 arg0); s32 get_object_list_index(void); s8 func_8001F3B8(void); @@ -450,7 +450,7 @@ s32 play_footstep_sounds(Object *obj, s32 arg1, s32 frame, s32 oddSoundId, s32 e void render_3d_misc(Object *this); Object *find_nearest_spectate_camera(Object *obj, s32 *cameraID); s32 init_object_shadow(Object *obj, ShadowData *shadow); -s32 func_800143A8(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, s32 someBool); +s32 render_mesh(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, s32 someBool); 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); @@ -462,11 +462,14 @@ void light_setup_light_sources(Object *obj); s32 init_object_interaction_data(Object *arg0, ObjectInteraction *arg1); s32 func_8000FAC4(Object *obj, Object_6C *arg1); s32 obj_init_property_flags(s32 behaviorId); -void func_8001B3C4(s32 arg0, s16 *playerId); +void tt_ghost_beaten(s32 arg0, s16 *playerId); void func_8001EFA4(Object *, Object *); Object *func_80016C68(f32 x, f32 y, f32 z, f32 maxDistCheck, s32 dontCheckYAxis); void func_8002125C(Object *charSelectObj, LevelObjectEntry_CharacterSelect *entry, Object_CharacterSelect *charSelect, UNUSED s32 index); void func_80021104(Object *obj, Object_Animation *animObj, LevelObjectEntry_Animation *entry); +s8 set_course_finish_flags(Settings *settings); +void process_object_interactions(void); +void render_3d_model(Object *obj); //Non Matching void calc_dynamic_lighting_for_object_1(Object *, ObjectModel *, s16, Object *, f32, f32); @@ -483,10 +486,9 @@ void func_80022E18(s32); /* extern */ void func_80018CE0(Object* obj, f32 xPos, f32 yPos, f32 zPos, s32 updateRate); /* extern */ s32 func_800185E4(s8, Object* obj, f32 xPos, f32 yPos, f32 zPos, f32* checkpointDistance, u8*); /* extern */ void func_80011134(Object *, s32); -Object *func_8002342C(f32 x, f32 z); +Object *find_furthest_telepoint(f32 x, f32 z); void func_8006017C(ObjectModel *); void func_80012F94(Object *); -void render_3d_model(Object *); void func_800101AC(Object *, s32); void func_800135B8(Object *); void func_8000CC7C(Vehicle, u32, s32); @@ -502,7 +504,6 @@ void func_80014090(Object*, s32, ObjectHeader*); void func_80008438(Object**, s32, s32); void func_8001E6EC(s8); void func_8001E89C(void); -void func_800155B8(void); void func_800230D0(Object*, Object_Racer*); s32 func_8001955C(Object*, s8, u8, s16, s32, f32, f32*, f32*, f32*); void func_80010994(s32 updateRate); diff --git a/src/racer.c b/src/racer.c index b2649e16..5d5c11ca 100644 --- a/src/racer.c +++ b/src/racer.c @@ -194,7 +194,7 @@ f32 gRacerMagnetVelX; f32 gRacerMagnetVelZ; u8 D_8011D580; s8 gCurrentSurfaceType; -s8 D_8011D582; +s8 gTajInteractStatus; s8 gRacerDialogueCamera; s8 gRacerInputBlocked; s8 gStartBoostTime; @@ -342,7 +342,7 @@ void func_80042D20(Object *obj, Object_Racer *racer, s32 updateRate) { } } if (D_8011D544 != 0.0f) { - racer->unk1CA = D_800DCDA0[racer->unk1AE]; + racer->unk1CA = D_800DCDA0[racer->racePosition]; } if ((f32) (s16) ((racer->aiSkill - 2) << 2) <= 300.0f - D_8011D544) { gCurrentRacerInput |= A_BUTTON; @@ -1040,7 +1040,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r } if (racer->playerIndex == PLAYER_ONE && racer->groundedWheels && var_t1 == 12 && gCurrentButtonsPressed & Z_TRIG) { - D_8011D582 = 2; + gTajInteractStatus = 2; } if ((racer->groundedWheels) || (racer->buoyancy > 0.0f)) { if (racer->unk1E0 != 0) { @@ -2137,7 +2137,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_Racer *racer) { obj->interactObj->z_position = obj->segment.trans.z_position; tempRacer->groundedWheels = 3; tempRacer->unk1AA = 1; - tempRacer->unk1AE = 1; + tempRacer->racePosition = 1; tempRacer->miscAnimCounter = tempRacer->playerIndex * 5; tempRacer->checkpoint_distance = 1.0f; tempRacer->unk1FD = 0; @@ -2147,7 +2147,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_Racer *racer) { tempRacer->weaponSoundMask = NULL; tempRacer->unk220 = 0; tempRacer->unk21C = 0; - if (tempRacer->playerIndex != PLAYER_COMPUTER && !D_8011D582) { + if (tempRacer->playerIndex != PLAYER_COMPUTER && gTajInteractStatus == TAJ_WANDER) { set_active_camera(player); gCameraObject = (ObjectCamera *) get_active_camera_segment_no_cutscenes(); gCameraObject->trans.z_rotation = 0; @@ -2161,7 +2161,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_Racer *racer) { gCameraObject->unk18 = 0.0f; update_player_camera(obj, tempRacer, 1.0f); } - if (!D_8011D582) { + if (gTajInteractStatus == TAJ_WANDER) { gRacerDialogueCamera = FALSE; gDialogueCameraAngle = 0; gRacerInputBlocked = FALSE; @@ -2171,7 +2171,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_Racer *racer) { obj->interactObj->hitboxRadius = 15; obj->interactObj->pushForce = 20; tempRacer->unk1EE = 0; - if (!D_8011D582) { + if (gTajInteractStatus == TAJ_WANDER) { tempRacer->transparency = 255; } D_8011D560 = 0; @@ -3093,7 +3093,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR } // If on the Taj pad and the horn is honked, summon Taj if (racer->playerIndex == PLAYER_ONE && racer->groundedWheels && surfaceType == SURFACE_TAJ_PAD && gCurrentButtonsPressed & Z_TRIG) { - D_8011D582 = 2; + gTajInteractStatus = 2; } // Set grip levels to basically zero when floating on water. if (racer->buoyancy != 0.0) { @@ -3292,18 +3292,22 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR GLOBAL_ASM("asm/non_matchings/racer/func_80050A28.s") #endif -// Loops for as long as Taj exists. After swapping vehicle once, will remain true until you enter a door. -s32 func_80052188(void) { - if (D_8011D582 == 2) { - D_8011D582 = 1; +/** + * Checks if Taj's interaction status is set to try make him teleport and return true. +*/ +s32 should_taj_teleport(void) { + if (gTajInteractStatus == TAJ_TELEPORT) { + gTajInteractStatus = TAJ_DIALOGUE; return TRUE; } return FALSE; } -// Called when Taj swaps the active vehicle, is set to 1, each time. -void func_800521B8(s32 arg0) { - D_8011D582 = arg0; +/** + * Sets Taj's interaction status. +*/ +void set_taj_status(s32 status) { + gTajInteractStatus = status; } /** @@ -4397,7 +4401,7 @@ void handle_racer_items(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) } magnetTarget = NULL; if (gCurrentButtonsPressed & Z_TRIG) { - func_800A74EC(318, racer->playerIndex); + func_800A74EC(SOUND_VOICE_TT_POWERUP, racer->playerIndex); } if (racer->magnetLevel3) { if (racer->magnetTimer == 0) { @@ -5087,7 +5091,7 @@ void second_racer_camera_update(Object *obj, Object_Racer *racer, s32 mode, f32 zPos = gCameraObject->trans.z_position; gCameraObject->mode = mode; update_player_camera(obj, racer, updateRateF); - if (gRaceStartTimer == 0 && D_8011D582 == 0) { + if (gRaceStartTimer == 0 && gTajInteractStatus == TAJ_WANDER) { gCameraObject->offsetX = xPos - gCameraObject->trans.x_position; gCameraObject->offsetY = yPos - (gCameraObject->trans.y_position + gCameraObject->unk30); gCameraObject->offsetZ = zPos - gCameraObject->trans.z_position; @@ -5803,7 +5807,7 @@ void racer_enter_door(Object_Racer* racer, s32 updateRate) { void update_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF) { s32 var_t2; Object **objects; - s32 renderContext; + s32 gameMode; s32 countOfObjects; f32 xPos; f32 yPos; @@ -5820,7 +5824,7 @@ void update_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, f32 updat f32 temp_fv1_2; gCurrentPlayerIndex = -1; - renderContext = get_game_mode(); + gameMode = get_game_mode(); levelHeader = get_current_level_header(); if (racer->unk1F6 > 0) { racer->unk1F6 -= updateRate; @@ -5958,7 +5962,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 != GAMEMODE_MENU) { + if (gameMode != GAMEMODE_MENU) { func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); } lastCheckpointDist = racer->checkpoint_distance; @@ -6011,7 +6015,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 != GAMEMODE_MENU) { + if (gameMode != GAMEMODE_MENU) { func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); } } diff --git a/src/racer.h b/src/racer.h index 6afb672f..ba513a36 100644 --- a/src/racer.h +++ b/src/racer.h @@ -111,6 +111,12 @@ typedef enum RacerAIBehaviours { AI_BLUE_BALLOON } RacerAIBehaviours; +typedef enum TajInteraction { + TAJ_WANDER, + TAJ_DIALOGUE, + TAJ_TELEPORT, +} TajInteraction; + #define AI_MIN 0 #define AI_MAX 1 #define AI_MIN_STEP 2 @@ -161,8 +167,8 @@ void apply_plane_tilt_anim(s32 updateRate, Object *obj, Object_Racer *racer); void racer_attack_handler_plane(Object *obj, Object_Racer *racer); void update_carpet(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer); void set_racer_tail_lights(Object_Racer *arg0); -s32 func_80052188(void); -void func_800521B8(s32 arg0); +s32 should_taj_teleport(void); +void set_taj_status(s32 arg0); void slowly_reset_head_angle(Object_Racer *racer); void func_80052988(Object *obj, Object_Racer *arg1, s32 action, s32 arg3, s32 duration, s32 arg5, s32 arg6, s32 arg7); void handle_car_steering(Object_Racer *racer); diff --git a/src/save_data.c b/src/save_data.c index 6d4293d2..6dd301f2 100644 --- a/src/save_data.c +++ b/src/save_data.c @@ -378,7 +378,7 @@ void populate_settings_from_save_data(Settings *settings, u8 *saveData) { s16 var_a0; u8 temp_v1; - func_8006E994(settings); + clear_game_progress(settings); get_number_of_levels_and_worlds(&levelCount, &worldCount); D_801241EC = saveData; D_801241F0 = D_801241F4 = 0; @@ -391,15 +391,15 @@ void populate_settings_from_save_data(Settings *settings, u8 *saveData) { temp_v1 = func_80072C54(2); if (temp_v1 > 0) { // Set Map Visited - settings->courseFlagsPtr[i] |= 1; + settings->courseFlagsPtr[i] |= RACE_VISITED; } if (temp_v1 >= 2) { // Set Map Completed - settings->courseFlagsPtr[i] |= 2; + settings->courseFlagsPtr[i] |= RACE_CLEARED; } if (temp_v1 >= 3) { // Set Map Silver Coin Challenge Completed - settings->courseFlagsPtr[i] |= 4; + settings->courseFlagsPtr[i] |= RACE_CLEARED_SILVER_COINS; } var_s1 += 2; } @@ -443,15 +443,15 @@ void func_800732E8(Settings *settings, u8 *saveData) { if ((temp_v0 == 0) || (temp_v0 & 0x40) || (temp_v0 == 8)) { courseStatus = 0; // Map visited - if (settings->courseFlagsPtr[i] & 1) { + if (settings->courseFlagsPtr[i] & RACE_VISITED) { courseStatus = 1; } // Map completed - if (settings->courseFlagsPtr[i] & 2) { + if (settings->courseFlagsPtr[i] & RACE_CLEARED) { courseStatus++; } // Map Silver coin challenge completed - if (settings->courseFlagsPtr[i] & 4) { + if (settings->courseFlagsPtr[i] & RACE_CLEARED_SILVER_COINS) { courseStatus++; } func_80072E28(2, courseStatus); @@ -492,7 +492,7 @@ void func_80073588(Settings *settings, u8 *saveData, u8 arg2) { s32 i; s16 sum; - func_8006E770(settings, arg2); + clear_lap_records(settings, arg2); get_number_of_levels_and_worlds(&levelCount, &worldCount); if (arg2 & 1) { diff --git a/src/textures_sprites.c b/src/textures_sprites.c index 0caeb2b8..721d2f4c 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -15,7 +15,7 @@ /************ .data ************/ u32 gTexColourTag = COLOUR_TAG_MAGENTA; -s32 D_800DE7C4 = 1; +s32 gSpriteOpaque = TRUE; // See "include/f3ddkr.h" for the defines @@ -278,7 +278,7 @@ s32 *gSpriteOffsetTable; s32 *gSpriteCache; Sprite *gCurrentSprite; -s32 D_80126354; +s32 gSpriteTableNum; s32 D_80126358; s32 D_8012635C; Vertex *D_80126360; @@ -319,11 +319,11 @@ void tex_init_textures(void) { gCurrentSprite = allocate_from_main_pool_safe(sizeof(Sprite) * 32, COLOUR_TAG_MAGENTA); D_80126358 = 0; gSpriteOffsetTable = (s32 *) load_asset_section_from_rom(ASSET_SPRITES_TABLE); - D_80126354 = 0; - while (gSpriteOffsetTable[D_80126354] != -1) { - D_80126354++; + gSpriteTableNum = 0; + while (gSpriteOffsetTable[gSpriteTableNum] != -1) { + gSpriteTableNum++; } - D_80126354--; + gSpriteTableNum--; gTempTextureHeader = allocate_from_main_pool_safe(0x28, COLOUR_TAG_MAGENTA); D_80126344 = 0; @@ -362,7 +362,7 @@ UNUSED s32 get_loaded_3D_textures(void) { } UNUSED s32 func_8007AE64(void) { - return D_80126354; + return gSpriteTableNum; } #ifdef NON_EQUIVALENT @@ -556,12 +556,13 @@ void disable_primitive_colour(void) { } /** + * Shift the texture header by the offset and return the result. * Official Name: texFrame */ -TextureHeader *func_8007B46C(TextureHeader *texHead, s32 arg1) { - if (arg1 > 0) { - if (arg1 < texHead->numOfTextures << 8) { - texHead = (TextureHeader *) (((u8 *)texHead) + ((arg1 >> 16) * texHead->textureSize)); +TextureHeader *set_animated_texture_header(TextureHeader *texHead, s32 offset) { + if (offset > 0) { + if (offset < texHead->numOfTextures << 8) { + texHead = (TextureHeader *) (((u8 *)texHead) + ((offset >> 16) * texHead->textureSize)); } else { texHead = (TextureHeader *) (((u8 *)texHead) + ((texHead->numOfTextures >> 8) - 1) * texHead->textureSize); } @@ -753,9 +754,11 @@ void load_blinking_lights_texture(Gfx **dlist, TextureHeader *texture_list, u32 gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(dRenderSettingsBlinkingLights[flags]), numberOfGfxCommands(dRenderSettingsBlinkingLights[0])); } - -void func_8007BF1C(s32 arg0) { - D_800DE7C4 = arg0; +/** + * Set whether to use an opaque render mode for sprites. +*/ +void sprite_opaque(s32 setting) { + gSpriteOpaque = setting; gForceFlags = TRUE; } @@ -783,7 +786,7 @@ void func_8007BF34(Gfx **dlist, s32 arg1) { gForceFlags = 0; gCurrentRenderFlags = temp_a1; temp_t8 = temp_a1 & ~0x800; - if (D_800DE7C4 == 0) { + if (gSpriteOpaque == 0) { if ((gCurrentRenderFlags & 0x200) != 0) { gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(dRenderSettingsSpriteCld[((temp_t8 >> 1) & 1) * 16]), numberOfGfxCommands(dRenderSettingsSpriteCld[0])); } else { @@ -865,7 +868,7 @@ UNUSED u8 func_8007C660(s32 arg0) { for (i = 0; i < gTextureAssetID[TEX_TABLE_2D]; i++) { D_80126370[i] = 0; } - for (i = 0; i < D_80126354; i++) { + for (i = 0; i < gSpriteTableNum; i++) { temp_s1 = gCurrentSprite; load_asset_to_address(ASSET_SPRITES, (u32) temp_s1, gSpriteOffsetTable[i], gSpriteOffsetTable[i + 1] - gSpriteOffsetTable[i]); temp_v1 = temp_s1->unkC.val[temp_s1->numberOfFrames]; @@ -900,7 +903,7 @@ s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 * s32 size; s32 new_var; - if ((spriteIndex < 0) || (spriteIndex >= D_80126354)) { + if ((spriteIndex < 0) || (spriteIndex >= gSpriteTableNum)) { textureCouldNotBeLoaded: *numOfInstancesOut = 0; *unkOut = 0; diff --git a/src/textures_sprites.h b/src/textures_sprites.h index 46324b5c..ed8019b3 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -118,7 +118,7 @@ void reset_render_settings(Gfx **dlist); 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); +void sprite_opaque(s32 setting); s32 func_8007EF64(s16 arg0); void load_and_set_texture(Gfx **dlist, TextureHeader *texhead, s32 flags, s32 offset); void free_sprite(Sprite *sprite); @@ -129,7 +129,7 @@ void tex_animate_texture(TextureHeader *texture, u32 *triangleBatchInfoFlags, s3 void func_8007F1E8(LevelHeader_70 *arg0); void init_pulsating_light_data(PulsatingLightData *data); void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta); -TextureHeader *func_8007B46C(TextureHeader *arg0, s32 arg1); +TextureHeader *set_animated_texture_header(TextureHeader *arg0, s32 arg1); TextureHeader *load_texture(s32 arg0); // Non Matching s32 get_texture_size_from_id(s32 arg0); // Non Matching s32 func_8007C860(s32 spriteIndex); // Non Matching diff --git a/src/thread3_main.c b/src/thread3_main.c index a45713d4..29baad00 100644 --- a/src/thread3_main.c +++ b/src/thread3_main.c @@ -520,28 +520,28 @@ void ingame_logic_loop(s32 updateRate) { break; case 1: func_80001050(); - func_800C314C(); + reset_delayed_text(); if (func_80023568() != 0 && is_in_two_player_adventure()) { - func_8006F398(); + swap_lead_player(); } buttonHeldInputs |= (L_TRIG | Z_TRIG); break; case 2: func_80001050(); - func_800C314C(); + reset_delayed_text(); if (func_80023568() != 0 && is_in_two_player_adventure()) { - func_8006F398(); + swap_lead_player(); } buttonHeldInputs |= L_TRIG; break; case 4: loadContext = LEVEL_CONTEXT_TRACK_SELECT; - func_800C314C(); + reset_delayed_text(); buttonHeldInputs |= L_TRIG; break; case 11: loadContext = LEVEL_CONTEXT_CHARACTER_SELECT; - func_800C314C(); + reset_delayed_text(); buttonHeldInputs |= L_TRIG; break; case 5: @@ -554,7 +554,7 @@ void ingame_logic_loop(s32 updateRate) { case 3: gDrumstickSceneLoadTimer = 0; func_80001050(); - func_800C314C(); + reset_delayed_text(); clear_level_property_stack(); buttonHeldInputs |= (L_TRIG | R_TRIG); break; @@ -618,7 +618,7 @@ void ingame_logic_loop(s32 updateRate) { if (gPlayableMapId < 0) { 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(); + swap_lead_player(); } buttonHeldInputs |= L_TRIG; D_801234FC = 2; @@ -647,7 +647,7 @@ void ingame_logic_loop(s32 updateRate) { if (gPlayableMapId < 0) { if (gPlayableMapId == -1 || gPlayableMapId == -10) { if (gPlayableMapId == -10 && is_in_two_player_adventure()) { - func_8006F398(); + swap_lead_player(); } buttonHeldInputs |= L_TRIG; D_801234FC = 2; @@ -796,7 +796,7 @@ void func_8006D968(s8 *arg0) { /** * Returns the current game mode. */ -RenderContext get_game_mode(void) { +GameMode get_game_mode(void) { return gGameMode; } @@ -1140,22 +1140,25 @@ void init_racer_headers(void) { gSettingsPtr->courseId = 0; } -void func_8006E770(Settings *settings, s32 arg1) { +/** + * Depending on flags, clear fastest lap times and/or overall course times. +*/ +void clear_lap_records(Settings *settings, s32 flags) { s32 i, j; s32 numWorlds, numLevels; s32 index; u16 *temp_v0; get_number_of_levels_and_worlds(&numLevels, &numWorlds); - temp_v0 = (u16 *)get_misc_asset(MISC_ASSET_UNK17); + temp_v0 = (u16 *) get_misc_asset(MISC_ASSET_UNK17); for (i = 0; i < NUMBER_OF_SAVE_FILES; i++) { for (j = 0; j < numLevels; j++) { index = (j * 12) + (i * 4); - if (arg1 & 1) { + if (flags & 1) { settings->flapInitialsPtr[i][j] = temp_v0[index + 3]; settings->flapTimesPtr[i][j] = temp_v0[index + 2]; } - if (arg1 & 2) { + if (flags & 2) { settings->courseInitialsPtr[i][j] = temp_v0[index + 1]; settings->courseTimesPtr[i][j] = temp_v0[index]; } @@ -1163,19 +1166,22 @@ void func_8006E770(Settings *settings, s32 arg1) { } } -void func_8006E994(Settings *settings) { +/** + * Set all game progression values to their default, as if it were a new game. +*/ +void clear_game_progress(Settings *settings) { s32 i; - s32 sp20; - s32 sp1C; + s32 worldCount; + s32 levelCount; - get_number_of_levels_and_worlds(&sp1C, &sp20); + get_number_of_levels_and_worlds(&levelCount, &worldCount); settings->newGame = TRUE; - for (i = 0; i < sp20; i++) { + for (i = 0; i < worldCount; i++) { settings->balloonsPtr[i] = 0; } - for (i = 0; i < sp1C; i++) { - settings->courseFlagsPtr[i] = 0; + for (i = 0; i < levelCount; i++) { + settings->courseFlagsPtr[i] = RACE_UNATTEMPTED; } settings->keys = 0; @@ -1188,9 +1194,12 @@ void func_8006E994(Settings *settings) { settings->wizpigAmulet = 0; } -UNUSED void func_8006EA58(void) { - func_8006E770(gSettingsPtr, 3); - func_8006E994(gSettingsPtr); +/** + * Call functions to set all game save data to the default. +*/ +UNUSED void reset_save_data(void) { + clear_lap_records(gSettingsPtr, 3); + clear_game_progress(gSettingsPtr); } /** @@ -1507,7 +1516,11 @@ void set_pause_lockout_timer(u8 time) { gPauseLockTimer = time; } -void func_8006F398(void) { +/** + * Switch the data around for player 1 and 2 for two player adventure, + * effectively passing the lead over to the other player. +*/ +void swap_lead_player(void) { s32 i; u8 temp; u8 *first_racer_data; @@ -1519,7 +1532,7 @@ void func_8006F398(void) { first_racer_data = (u8 *)(gSettingsPtr->racers); second_racer_data = (u8 *)(gSettingsPtr->racers + 1); - for (i = 0; i < (s32)sizeof(Racer); i++) { + for (i = 0; i < (s32) sizeof(Racer); i++) { temp = first_racer_data[i]; first_racer_data[i] = second_racer_data[i]; second_racer_data[i] = temp; diff --git a/src/thread3_main.h b/src/thread3_main.h index c41a961d..6ae390bb 100644 --- a/src/thread3_main.h +++ b/src/thread3_main.h @@ -6,7 +6,7 @@ #include "structs.h" #include "game.h" -typedef enum RenderContext { +typedef enum GameMode { GAMEMODE_INTRO = -1, GAMEMODE_INGAME, GAMEMODE_MENU, @@ -14,7 +14,7 @@ typedef enum RenderContext { GAMEMODE_UNUSED_3, GAMEMODE_UNUSED_4, GAMEMODE_LOCKUP -} RenderContext; +} GameMode; enum LevelLoadType { LEVEL_LOAD_NORMAL, @@ -72,6 +72,13 @@ enum MenuResultFlags { MENU_RESULT_FLAGS_200 = (1 << 9), }; +enum TrackFinishBits { + RACE_UNATTEMPTED, + RACE_VISITED = (1 << 0), + RACE_CLEARED = (1 << 1), + RACE_CLEARED_SILVER_COINS = (1 << 2), +}; + /** * Bit 00: Read Eeprom Data flap times * Bit 01: Read Eeprom Data course times @@ -117,7 +124,7 @@ void set_drumstick_unlock_transition(void); void func_8006D8E0(s32 arg0); void func_8006D8F0(s32 arg0); void func_8006D968(s8 *arg0); -RenderContext get_game_mode(void); +GameMode get_game_mode(void); void load_menu_with_level_background(s32 menuId, s32 levelId, s32 cutsceneId); void set_level_default_vehicle(Vehicle arg0); void set_vehicle_id_for_menu(Vehicle vehicleId); @@ -128,9 +135,9 @@ 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 init_racer_headers(void); -void func_8006E770(Settings *settings, s32 arg1); -void func_8006E994(Settings *settings); -void func_8006EA58(void); +void clear_lap_records(Settings *settings, s32 arg1); +void clear_game_progress(Settings *settings); +void reset_save_data(void); Settings *get_settings(void); s8 is_game_paused(void); s8 is_postrace_viewport_active(void); @@ -156,7 +163,7 @@ void begin_trophy_race_teleport(void); void begin_lighthouse_rocket_cutscene(void); void begin_level_teleport(s32 arg0); void set_pause_lockout_timer(u8 time); -void func_8006F398(void); +void swap_lead_player(void); void set_frame_blackout_timer(void); void pre_intro_loop(void); s32 is_controller_missing(void); diff --git a/src/tracks.c b/src/tracks.c index 5af6ba8a..10e7dea5 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -941,7 +941,7 @@ void render_level_geometry_and_objects(void) { render_object_shadow(obj, obj->shadow); } render_object(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, obj); - if (obj->waterEffect != NULL && obj->segment.header->unk30 & 0x10) { + if (obj->waterEffect != NULL && obj->segment.header->flags & 0x10) { render_object_water_effects(obj, obj->waterEffect); } } @@ -963,7 +963,7 @@ void render_level_geometry_and_objects(void) { render_object_shadow(obj, obj->shadow); } render_object(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, obj); - if ((obj->waterEffect != NULL) && (obj->segment.header->unk30 & 0x10)) { + if ((obj->waterEffect != NULL) && (obj->segment.header->flags & 0x10)) { render_object_water_effects(obj, obj->waterEffect); } } @@ -1008,7 +1008,7 @@ void render_level_geometry_and_objects(void) { render_object_shadow(obj, obj->shadow); } render_object(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, obj); - if ((obj->waterEffect != 0) && (obj->segment.header->unk30 & 0x10)) { + if ((obj->waterEffect != 0) && (obj->segment.header->flags & 0x10)) { render_object_water_effects(obj, obj->waterEffect); } } @@ -1802,7 +1802,7 @@ void free_track(void) { free_object(gSkydomeSegment); gParticlePtrList_flush(); } - func_8000C604(); + free_all_objects(); gCurrentLevelModel = NULL; } @@ -2228,7 +2228,7 @@ void func_8002E234(Object *obj, s32 bool) { if (bool) { D_8011D0B8 = 0; obj->waterEffect->meshStart = D_8011D364; - D_8011D0C0 = func_8007B46C(obj->waterEffect->texture, obj->waterEffect->textureFrame << 8); + D_8011D0C0 = set_animated_texture_header(obj->waterEffect->texture, obj->waterEffect->textureFrame << 8); D_8011D0CE = obj->segment.header->unk48 + yPos; D_8011D0CC = obj->segment.header->unk46 + yPos; if ((gWaveBlockCount == 0) || ((get_viewport_count() <= 0))) { diff --git a/src/vehicle_tricky.c b/src/vehicle_tricky.c index 15be8c61..6ece9f49 100644 --- a/src/vehicle_tricky.c +++ b/src/vehicle_tricky.c @@ -202,7 +202,7 @@ void update_tricky(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r } if (firstRacerObj->segment.trans.y_position + 400.0 < gTrickyRacerPeakHeight) { if (check_fadeout_transition() == 0 && is_in_two_player_adventure()) { - func_8006F398(); + swap_lead_player(); } func_8006F140(1); } @@ -334,7 +334,7 @@ void func_8005CB68(Object_Racer *racer, s8 *arg1) { } else { func_8006F140(3); if (is_in_two_player_adventure()) { - func_8006F398(); + swap_lead_player(); } } arg1_ret++;