From 173f919d74ad4ce1479d5de1089f4324edc3d3b6 Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Wed, 10 Apr 2024 19:53:55 +0100 Subject: [PATCH] Rework ingame hud struct (#442) * name some camera things * yea there * lots of audio * match a func * better * x * egg * all but one func in audio.c nopw * audio looks good for now * Update audio.c * correct taj thing * fix warnings * Update audiosfx.h * Update README.md * preliminary names * fix warnings * fix an oopsie * checkpoint * oh my god * Update README.md * run clang tidy * initial hud asset ids --- README.md | 16 +- .../audio_spatial/func_80008438.s | 2 +- .../audio_spatial/func_80009B7C.s | 2 +- .../audio_vehicle/func_800063EC.s | 2 +- asm/non_matchings/game_ui/func_8009F034.s | 56 +- asm/non_matchings/game_ui/func_800A277C.s | 56 +- asm/non_matchings/game_ui/func_800AA600.s | 42 +- asm/non_matchings/objects/func_80010994.s | 2 +- include/level_object_entries.h | 4 +- include/structs.h | 6 +- src/asset_loading.c | 2 +- src/audio_spatial.c | 64 +- src/audio_spatial.h | 6 +- src/audio_vehicle.c | 4 +- src/audio_vehicle.h | 2 +- src/font.c | 3 + src/game_ui.c | 1551 +++++++++-------- src/game_ui.h | 536 ++---- src/menu.c | 2 +- src/object_functions.c | 106 +- src/object_functions.h | 2 +- src/objects.c | 14 +- src/racer.c | 33 +- src/rcp.c | 4 +- src/textures_sprites.c | 1 + 25 files changed, 1191 insertions(+), 1327 deletions(-) diff --git a/README.md b/README.md index 7979d959..d0a89717 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ As of January 26, 2024, this is our current score:     Decomp progress: 66.48% -    Documentation progress: 35.36% +    Documentation progress: 35.49% --- @@ -125,15 +125,15 @@ s32 is_drumstick_unlocked(void) { ``` -As of January 26, 2024, this is our current score: +As of April 4, 2024, this is our current score: ``` ==================================================================== ADVENTURE ONE (ASM -> C Decompilation) - -------------- 66.48% Complete (69.44% NON_MATCHING) --------------- + -------------- 66.48% Complete (69.07% NON_MATCHING) --------------- # Decompiled functions: 1681 # GLOBAL_ASM remaining: 164 - # NON_MATCHING functions: 16 - # NON_EQUIVALENT WIP functions: 54 + # NON_MATCHING functions: 15 + # NON_EQUIVALENT WIP functions: 55 --------------------------- Game Status ---------------------------- Balloons: 31/47, Keys: 3/4, Trophies: 3/5 T.T. Amulets: 3/4, Wizpig Amulets: 3/4 @@ -141,9 +141,9 @@ As of January 26, 2024, this is our current score: We are racing in Windmill Plains. (Lap 3/3) ==================================================================== ADVENTURE TWO (Cleanup & Documentation) - ------------------------- 35.36% Complete -------------------------- - # Documented functions: 828 - # Undocumented remaining: 740 + ------------------------- 35.49% Complete -------------------------- + # Documented functions: 833 + # Undocumented remaining: 735 --------------------------- Game Status ---------------------------- Balloons: 17/47, Keys: 2/4, Trophies: 1/5 T.T. Amulets: 2/4, Wizpig Amulets: 1/4 diff --git a/asm/non_matchings/audio_spatial/func_80008438.s b/asm/non_matchings/audio_spatial/func_80008438.s index 03879549..8951795e 100644 --- a/asm/non_matchings/audio_spatial/func_80008438.s +++ b/asm/non_matchings/audio_spatial/func_80008438.s @@ -510,7 +510,7 @@ glabel func_80008438 /* 009790 80008B90 AFA90018 */ sw $t1, 0x18($sp) /* 009794 80008B94 AFA80014 */ sw $t0, 0x14($sp) /* 009798 80008B98 AFB90010 */ sw $t9, 0x10($sp) -/* 00979C 80008B9C 0C0024AA */ jal func_800092A8 +/* 00979C 80008B9C 0C0024AA */ jal audioline_distance /* 0097A0 80008BA0 02803825 */ move $a3, $s4 /* 0097A4 80008BA4 AE020000 */ sw $v0, ($s0) /* 0097A8 80008BA8 C66A0014 */ lwc1 $f10, 0x14($s3) diff --git a/asm/non_matchings/audio_spatial/func_80009B7C.s b/asm/non_matchings/audio_spatial/func_80009B7C.s index a861b4f9..2eb11a4b 100644 --- a/asm/non_matchings/audio_spatial/func_80009B7C.s +++ b/asm/non_matchings/audio_spatial/func_80009B7C.s @@ -54,7 +54,7 @@ glabel func_80009B7C /* 00A844 80009C44 AFB80010 */ sw $t8, 0x10($sp) /* 00A848 80009C48 4600B306 */ mov.s $f12, $f22 /* 00A84C 80009C4C 4600A386 */ mov.s $f14, $f20 -/* 00A850 80009C50 0C0024AA */ jal func_800092A8 +/* 00A850 80009C50 0C0024AA */ jal audioline_distance /* 00A854 80009C54 03C03825 */ move $a3, $fp /* 00A858 80009C58 0056082A */ slt $at, $v0, $s6 /* 00A85C 80009C5C 1020001D */ beqz $at, .L80009CD4 diff --git a/asm/non_matchings/audio_vehicle/func_800063EC.s b/asm/non_matchings/audio_vehicle/func_800063EC.s index 18eb3de0..117e717b 100644 --- a/asm/non_matchings/audio_vehicle/func_800063EC.s +++ b/asm/non_matchings/audio_vehicle/func_800063EC.s @@ -282,7 +282,7 @@ glabel func_800063EC /* 0073C0 800067C0 E46200A4 */ swc1 $f2, 0xa4($v1) .L800067C4: /* 0073C4 800067C4 E7AE0018 */ swc1 $f14, 0x18($sp) -/* 0073C8 800067C8 0C028064 */ jal func_800A0190 +/* 0073C8 800067C8 0C028064 */ jal race_starting /* 0073CC 800067CC E7B2002C */ swc1 $f18, 0x2c($sp) /* 0073D0 800067D0 3C098012 */ lui $t1, %hi(gRacerSound) # $t1, 0x8012 /* 0073D4 800067D4 C7AE0018 */ lwc1 $f14, 0x18($sp) diff --git a/asm/non_matchings/game_ui/func_8009F034.s b/asm/non_matchings/game_ui/func_8009F034.s index 785bd5dc..b917ec6f 100644 --- a/asm/non_matchings/game_ui/func_8009F034.s +++ b/asm/non_matchings/game_ui/func_8009F034.s @@ -54,38 +54,38 @@ glabel func_8009F034 /* 09FC9C 8009F09C 14410007 */ bne $v0, $at, .L8009F0BC /* 09FCA0 8009F0A0 3C0F8012 */ lui $t7, %hi(gHUDNumPlayers) # $t7, 0x8012 .L8009F0A4: -/* 09FCA4 8009F0A4 3C018012 */ lui $at, %hi(D_80126D24) # $at, 0x8012 -/* 09FCA8 8009F0A8 AC206D24 */ sw $zero, %lo(D_80126D24)($at) -/* 09FCAC 8009F0AC 3C018012 */ lui $at, %hi(D_80126D34) # $at, 0x8012 +/* 09FCA4 8009F0A4 3C018012 */ lui $at, %hi(gHudOffsetX) # $at, 0x8012 +/* 09FCA8 8009F0A8 AC206D24 */ sw $zero, %lo(gHudOffsetX)($at) +/* 09FCAC 8009F0AC 3C018012 */ lui $at, %hi(gHudRaceStart) # $at, 0x8012 /* 09FCB0 8009F0B0 240E0001 */ li $t6, 1 /* 09FCB4 8009F0B4 10000015 */ b .L8009F10C -/* 09FCB8 8009F0B8 A02E6D34 */ sb $t6, %lo(D_80126D34)($at) +/* 09FCB8 8009F0B8 A02E6D34 */ sb $t6, %lo(gHudRaceStart)($at) .L8009F0BC: /* 09FCBC 8009F0BC 8DEF6D0C */ lw $t7, %lo(gHUDNumPlayers)($t7) /* 09FCC0 8009F0C0 24180140 */ li $t8, 320 /* 09FCC4 8009F0C4 29E10002 */ slti $at, $t7, 2 /* 09FCC8 8009F0C8 10200008 */ beqz $at, .L8009F0EC /* 09FCCC 8009F0CC 241900C8 */ li $t9, 200 -/* 09FCD0 8009F0D0 3C018012 */ lui $at, %hi(D_80126D24) # $at, 0x8012 -/* 09FCD4 8009F0D4 AC386D24 */ sw $t8, %lo(D_80126D24)($at) +/* 09FCD0 8009F0D0 3C018012 */ lui $at, %hi(gHudOffsetX) # $at, 0x8012 +/* 09FCD4 8009F0D4 AC386D24 */ sw $t8, %lo(gHudOffsetX)($at) /* 09FCD8 8009F0D8 3C014000 */ li $at, 0x40000000 # 2.000000 /* 09FCDC 8009F0DC 44812000 */ mtc1 $at, $f4 -/* 09FCE0 8009F0E0 3C018012 */ lui $at, %hi(D_80126D30) # $at, 0x8012 +/* 09FCE0 8009F0E0 3C018012 */ lui $at, %hi(gHudBounceMag) # $at, 0x8012 /* 09FCE4 8009F0E4 10000007 */ b .L8009F104 -/* 09FCE8 8009F0E8 E4246D30 */ swc1 $f4, %lo(D_80126D30)($at) +/* 09FCE8 8009F0E8 E4246D30 */ swc1 $f4, %lo(gHudBounceMag)($at) .L8009F0EC: -/* 09FCEC 8009F0EC 3C018012 */ lui $at, %hi(D_80126D24) # $at, 0x8012 -/* 09FCF0 8009F0F0 AC396D24 */ sw $t9, %lo(D_80126D24)($at) +/* 09FCEC 8009F0EC 3C018012 */ lui $at, %hi(gHudOffsetX) # $at, 0x8012 +/* 09FCF0 8009F0F0 AC396D24 */ sw $t9, %lo(gHudOffsetX)($at) /* 09FCF4 8009F0F4 3C014000 */ li $at, 0x40000000 # 2.000000 /* 09FCF8 8009F0F8 44813000 */ mtc1 $at, $f6 -/* 09FCFC 8009F0FC 3C018012 */ lui $at, %hi(D_80126D30) # $at, 0x8012 -/* 09FD00 8009F100 E4266D30 */ swc1 $f6, %lo(D_80126D30)($at) +/* 09FCFC 8009F0FC 3C018012 */ lui $at, %hi(gHudBounceMag) # $at, 0x8012 +/* 09FD00 8009F100 E4266D30 */ swc1 $f6, %lo(gHudBounceMag)($at) .L8009F104: -/* 09FD04 8009F104 3C018012 */ lui $at, %hi(D_80126D34) # $at, 0x8012 -/* 09FD08 8009F108 A0206D34 */ sb $zero, %lo(D_80126D34)($at) +/* 09FD04 8009F104 3C018012 */ lui $at, %hi(gHudRaceStart) # $at, 0x8012 +/* 09FD08 8009F108 A0206D34 */ sb $zero, %lo(gHudRaceStart)($at) .L8009F10C: -/* 09FD0C 8009F10C 3C018012 */ lui $at, %hi(D_80126D2C) # $at, 0x8012 -/* 09FD10 8009F110 A4206D2C */ sh $zero, %lo(D_80126D2C)($at) +/* 09FD0C 8009F10C 3C018012 */ lui $at, %hi(gHudBounceTimer) # $at, 0x8012 +/* 09FD10 8009F110 A4206D2C */ sh $zero, %lo(gHudBounceTimer)($at) /* 09FD14 8009F114 3C018012 */ lui $at, %hi(gRaceStartShowHudStep) # $at, 0x8012 /* 09FD18 8009F118 A0206CD4 */ sb $zero, %lo(gRaceStartShowHudStep)($at) /* 09FD1C 8009F11C 3C018012 */ lui $at, %hi(gHideRaceTimer) # $at, 0x8012 @@ -94,24 +94,24 @@ glabel func_8009F034 /* 09FD28 8009F128 A0206D38 */ sb $zero, %lo(gWrongWayNagPrefix)($at) /* 09FD2C 8009F12C 3C018012 */ lui $at, %hi(D_80126D35) # $at, 0x8012 /* 09FD30 8009F130 A0206D35 */ sb $zero, %lo(D_80126D35)($at) -/* 09FD34 8009F134 3C018012 */ lui $at, %hi(D_80126CD0) # $at, 0x8012 +/* 09FD34 8009F134 3C018012 */ lui $at, %hi(gMinimapOpacity) # $at, 0x8012 /* 09FD38 8009F138 26100300 */ addiu $s0, %lo(osTvType) # addiu $s0, $s0, 0x300 -/* 09FD3C 8009F13C A0206CD0 */ sb $zero, %lo(D_80126CD0)($at) +/* 09FD3C 8009F13C A0206CD0 */ sb $zero, %lo(gMinimapOpacity)($at) /* 09FD40 8009F140 8E0E0000 */ lw $t6, ($s0) /* 09FD44 8009F144 2419FF9C */ li $t9, -100 /* 09FD48 8009F148 15C00005 */ bnez $t6, .L8009F160 /* 09FD4C 8009F14C 24040078 */ li $a0, 120 /* 09FD50 8009F150 240F003C */ li $t7, 60 -/* 09FD54 8009F154 3C018012 */ lui $at, %hi(D_8012718B) # $at, 0x8012 +/* 09FD54 8009F154 3C018012 */ lui $at, %hi(gMinimapOpacityTarget) # $at, 0x8012 /* 09FD58 8009F158 10000004 */ b .L8009F16C -/* 09FD5C 8009F15C A02F718B */ sb $t7, %lo(D_8012718B)($at) +/* 09FD5C 8009F15C A02F718B */ sb $t7, %lo(gMinimapOpacityTarget)($at) .L8009F160: /* 09FD60 8009F160 24180032 */ li $t8, 50 -/* 09FD64 8009F164 3C018012 */ lui $at, %hi(D_8012718B) # $at, 0x8012 -/* 09FD68 8009F168 A038718B */ sb $t8, %lo(D_8012718B)($at) +/* 09FD64 8009F164 3C018012 */ lui $at, %hi(gMinimapOpacityTarget) # $at, 0x8012 +/* 09FD68 8009F168 A038718B */ sb $t8, %lo(gMinimapOpacityTarget)($at) .L8009F16C: -/* 09FD6C 8009F16C 3C018012 */ lui $at, %hi(D_80126CD1) # $at, 0x8012 -/* 09FD70 8009F170 A0206CD1 */ sb $zero, %lo(D_80126CD1)($at) +/* 09FD6C 8009F16C 3C018012 */ lui $at, %hi(gMinimapFade) # $at, 0x8012 +/* 09FD70 8009F170 A0206CD1 */ sb $zero, %lo(gMinimapFade)($at) /* 09FD74 8009F174 3C018012 */ lui $at, %hi(gShowHUD) # $at, 0x8012 /* 09FD78 8009F178 A0206CD2 */ sb $zero, %lo(gShowHUD)($at) /* 09FD7C 8009F17C 3C018012 */ lui $at, %hi(D_80126CD5) # $at, 0x8012 @@ -128,10 +128,10 @@ glabel func_8009F034 /* 09FDA8 8009F1A8 3C018012 */ lui $at, %hi(D_8012718A) # $at, 0x8012 /* 09FDAC 8009F1AC A022718A */ sb $v0, %lo(D_8012718A)($at) /* 09FDB0 8009F1B0 8E180000 */ lw $t8, ($s0) -/* 09FDB4 8009F1B4 3C038012 */ lui $v1, %hi(D_8012718C) # $v1, 0x8012 -/* 09FDB8 8009F1B8 3C048012 */ lui $a0, %hi(D_80127190) # $a0, 0x8012 -/* 09FDBC 8009F1BC 24847190 */ addiu $a0, %lo(D_80127190) # addiu $a0, $a0, 0x7190 -/* 09FDC0 8009F1C0 2463718C */ addiu $v1, %lo(D_8012718C) # addiu $v1, $v1, 0x718c +/* 09FDB4 8009F1B4 3C038012 */ lui $v1, %hi(gStopwatchErrorX) # $v1, 0x8012 +/* 09FDB8 8009F1B8 3C048012 */ lui $a0, %hi(gStopwatchErrorY) # $a0, 0x8012 +/* 09FDBC 8009F1BC 24847190 */ addiu $a0, %lo(gStopwatchErrorY) # addiu $a0, $a0, 0x7190 +/* 09FDC0 8009F1C0 2463718C */ addiu $v1, %lo(gStopwatchErrorX) # addiu $v1, $v1, 0x718c /* 09FDC4 8009F1C4 240E0037 */ li $t6, 55 /* 09FDC8 8009F1C8 240F00B3 */ li $t7, 179 /* 09FDCC 8009F1CC AC6E0000 */ sw $t6, ($v1) diff --git a/asm/non_matchings/game_ui/func_800A277C.s b/asm/non_matchings/game_ui/func_800A277C.s index 9952957e..6e58f37c 100644 --- a/asm/non_matchings/game_ui/func_800A277C.s +++ b/asm/non_matchings/game_ui/func_800A277C.s @@ -942,16 +942,16 @@ glabel func_800A277C /* 0A40F8 800A34F8 00003025 */ move $a2, $zero /* 0A40FC 800A34FC 0C0310E1 */ jal set_text_colour /* 0A4100 800A3500 240700FF */ li $a3, 255 -/* 0A4104 800A3504 3C108012 */ lui $s0, %hi(D_8012718C) # $s0, 0x8012 -/* 0A4108 800A3508 3C118012 */ lui $s1, %hi(D_80126D24) # $s1, 0x8012 -/* 0A410C 800A350C 26316D24 */ addiu $s1, %lo(D_80126D24) # addiu $s1, $s1, 0x6d24 -/* 0A4110 800A3510 2610718C */ addiu $s0, %lo(D_8012718C) # addiu $s0, $s0, 0x718c +/* 0A4104 800A3504 3C108012 */ lui $s0, %hi(gStopwatchErrorX) # $s0, 0x8012 +/* 0A4108 800A3508 3C118012 */ lui $s1, %hi(gHudOffsetX) # $s1, 0x8012 +/* 0A410C 800A350C 26316D24 */ addiu $s1, %lo(gHudOffsetX) # addiu $s1, $s1, 0x6d24 +/* 0A4110 800A3510 2610718C */ addiu $s0, %lo(gStopwatchErrorX) # addiu $s0, $s0, 0x718c /* 0A4114 800A3514 8E190000 */ lw $t9, ($s0) /* 0A4118 800A3518 8E2B0000 */ lw $t3, ($s1) -/* 0A411C 800A351C 3C0D8012 */ lui $t5, %hi(D_80126D28) # $t5, 0x8012 -/* 0A4120 800A3520 8DAD6D28 */ lw $t5, %lo(D_80126D28)($t5) -/* 0A4124 800A3524 3C068012 */ lui $a2, %hi(D_80127190) # $a2, 0x8012 -/* 0A4128 800A3528 8CC67190 */ lw $a2, %lo(D_80127190)($a2) +/* 0A411C 800A351C 3C0D8012 */ lui $t5, %hi(gHudBounceX) # $t5, 0x8012 +/* 0A4120 800A3520 8DAD6D28 */ lw $t5, %lo(gHudBounceX)($t5) +/* 0A4124 800A3524 3C068012 */ lui $a2, %hi(gStopwatchErrorY) # $a2, 0x8012 +/* 0A4128 800A3528 8CC67190 */ lw $a2, %lo(gStopwatchErrorY)($a2) /* 0A412C 800A352C 032B6021 */ addu $t4, $t9, $t3 /* 0A4130 800A3530 8FA70060 */ lw $a3, 0x60($sp) /* 0A4134 800A3534 2418000C */ li $t8, 12 @@ -963,10 +963,10 @@ glabel func_800A277C /* 0A414C 800A354C 24C60001 */ addiu $a2, $a2, 1 /* 0A4150 800A3550 8E0F0000 */ lw $t7, ($s0) /* 0A4154 800A3554 8E2A0000 */ lw $t2, ($s1) -/* 0A4158 800A3558 3C198012 */ lui $t9, %hi(D_80126D28) # $t9, 0x8012 -/* 0A415C 800A355C 8F396D28 */ lw $t9, %lo(D_80126D28)($t9) -/* 0A4160 800A3560 3C068012 */ lui $a2, %hi(D_80127190) # $a2, 0x8012 -/* 0A4164 800A3564 8CC67190 */ lw $a2, %lo(D_80127190)($a2) +/* 0A4158 800A3558 3C198012 */ lui $t9, %hi(gHudBounceX) # $t9, 0x8012 +/* 0A415C 800A355C 8F396D28 */ lw $t9, %lo(gHudBounceX)($t9) +/* 0A4160 800A3560 3C068012 */ lui $a2, %hi(gStopwatchErrorY) # $a2, 0x8012 +/* 0A4164 800A3564 8CC67190 */ lw $a2, %lo(gStopwatchErrorY)($a2) /* 0A4168 800A3568 01EA7021 */ addu $t6, $t7, $t2 /* 0A416C 800A356C 8FA7005C */ lw $a3, 0x5c($sp) /* 0A4170 800A3570 240B000C */ li $t3, 12 @@ -978,10 +978,10 @@ glabel func_800A277C /* 0A4188 800A3588 24C6000F */ addiu $a2, $a2, 0xf /* 0A418C 800A358C 8E0C0000 */ lw $t4, ($s0) /* 0A4190 800A3590 8E2D0000 */ lw $t5, ($s1) -/* 0A4194 800A3594 3C0F8012 */ lui $t7, %hi(D_80126D28) # $t7, 0x8012 -/* 0A4198 800A3598 8DEF6D28 */ lw $t7, %lo(D_80126D28)($t7) -/* 0A419C 800A359C 3C068012 */ lui $a2, %hi(D_80127190) # $a2, 0x8012 -/* 0A41A0 800A35A0 8CC67190 */ lw $a2, %lo(D_80127190)($a2) +/* 0A4194 800A3594 3C0F8012 */ lui $t7, %hi(gHudBounceX) # $t7, 0x8012 +/* 0A4198 800A3598 8DEF6D28 */ lw $t7, %lo(gHudBounceX)($t7) +/* 0A419C 800A359C 3C068012 */ lui $a2, %hi(gStopwatchErrorY) # $a2, 0x8012 +/* 0A41A0 800A35A0 8CC67190 */ lw $a2, %lo(gStopwatchErrorY)($a2) /* 0A41A4 800A35A4 018DC021 */ addu $t8, $t4, $t5 /* 0A41A8 800A35A8 8FA70058 */ lw $a3, 0x58($sp) /* 0A41AC 800A35AC 240A000C */ li $t2, 12 @@ -1002,10 +1002,10 @@ glabel func_800A277C /* 0A41E8 800A35E8 AFAE0010 */ sw $t6, 0x10($sp) /* 0A41EC 800A35EC 8E190000 */ lw $t9, ($s0) /* 0A41F0 800A35F0 8E2B0000 */ lw $t3, ($s1) -/* 0A41F4 800A35F4 3C0D8012 */ lui $t5, %hi(D_80126D28) # $t5, 0x8012 -/* 0A41F8 800A35F8 8DAD6D28 */ lw $t5, %lo(D_80126D28)($t5) -/* 0A41FC 800A35FC 3C068012 */ lui $a2, %hi(D_80127190) # $a2, 0x8012 -/* 0A4200 800A3600 8CC67190 */ lw $a2, %lo(D_80127190)($a2) +/* 0A41F4 800A35F4 3C0D8012 */ lui $t5, %hi(gHudBounceX) # $t5, 0x8012 +/* 0A41F8 800A35F8 8DAD6D28 */ lw $t5, %lo(gHudBounceX)($t5) +/* 0A41FC 800A35FC 3C068012 */ lui $a2, %hi(gStopwatchErrorY) # $a2, 0x8012 +/* 0A4200 800A3600 8CC67190 */ lw $a2, %lo(gStopwatchErrorY)($a2) /* 0A4204 800A3604 8FA70060 */ lw $a3, 0x60($sp) /* 0A4208 800A3608 2418000C */ li $t8, 12 /* 0A420C 800A360C 032B6021 */ addu $t4, $t9, $t3 @@ -1015,10 +1015,10 @@ glabel func_800A277C /* 0A421C 800A361C 018D2821 */ addu $a1, $t4, $t5 /* 0A4220 800A3620 8E0F0000 */ lw $t7, ($s0) /* 0A4224 800A3624 8E2A0000 */ lw $t2, ($s1) -/* 0A4228 800A3628 3C198012 */ lui $t9, %hi(D_80126D28) # $t9, 0x8012 -/* 0A422C 800A362C 3C068012 */ lui $a2, %hi(D_80127190) # $a2, 0x8012 -/* 0A4230 800A3630 8CC67190 */ lw $a2, %lo(D_80127190)($a2) -/* 0A4234 800A3634 8F396D28 */ lw $t9, %lo(D_80126D28)($t9) +/* 0A4228 800A3628 3C198012 */ lui $t9, %hi(gHudBounceX) # $t9, 0x8012 +/* 0A422C 800A362C 3C068012 */ lui $a2, %hi(gStopwatchErrorY) # $a2, 0x8012 +/* 0A4230 800A3630 8CC67190 */ lw $a2, %lo(gStopwatchErrorY)($a2) +/* 0A4234 800A3634 8F396D28 */ lw $t9, %lo(gHudBounceX)($t9) /* 0A4238 800A3638 8FA7005C */ lw $a3, 0x5c($sp) /* 0A423C 800A363C 240B000C */ li $t3, 12 /* 0A4240 800A3640 01EA7021 */ addu $t6, $t7, $t2 @@ -1029,10 +1029,10 @@ glabel func_800A277C /* 0A4254 800A3654 01D92821 */ addu $a1, $t6, $t9 /* 0A4258 800A3658 8E0C0000 */ lw $t4, ($s0) /* 0A425C 800A365C 8E2D0000 */ lw $t5, ($s1) -/* 0A4260 800A3660 3C0F8012 */ lui $t7, %hi(D_80126D28) # $t7, 0x8012 -/* 0A4264 800A3664 3C068012 */ lui $a2, %hi(D_80127190) # $a2, 0x8012 -/* 0A4268 800A3668 8CC67190 */ lw $a2, %lo(D_80127190)($a2) -/* 0A426C 800A366C 8DEF6D28 */ lw $t7, %lo(D_80126D28)($t7) +/* 0A4260 800A3660 3C0F8012 */ lui $t7, %hi(gHudBounceX) # $t7, 0x8012 +/* 0A4264 800A3664 3C068012 */ lui $a2, %hi(gStopwatchErrorY) # $a2, 0x8012 +/* 0A4268 800A3668 8CC67190 */ lw $a2, %lo(gStopwatchErrorY)($a2) +/* 0A426C 800A366C 8DEF6D28 */ lw $t7, %lo(gHudBounceX)($t7) /* 0A4270 800A3670 8FA70058 */ lw $a3, 0x58($sp) /* 0A4274 800A3674 240A000C */ li $t2, 12 /* 0A4278 800A3678 018DC021 */ addu $t8, $t4, $t5 diff --git a/asm/non_matchings/game_ui/func_800AA600.s b/asm/non_matchings/game_ui/func_800AA600.s index 63489c26..c42aefbb 100644 --- a/asm/non_matchings/game_ui/func_800AA600.s +++ b/asm/non_matchings/game_ui/func_800AA600.s @@ -24,15 +24,15 @@ glabel func_800AA600 /* 0AB238 800AA638 00E08025 */ move $s0, $a3 /* 0AB23C 800AA63C 15420007 */ bne $t2, $v0, .L800AA65C /* 0AB240 800AA640 AFB80038 */ sw $t8, 0x38($sp) -/* 0AB244 800AA644 3C0B8012 */ lui $t3, %hi(D_80126CD0) # $t3, 0x8012 -/* 0AB248 800AA648 816B6CD0 */ lb $t3, %lo(D_80126CD0)($t3) +/* 0AB244 800AA644 3C0B8012 */ lui $t3, %hi(gMinimapOpacity) # $t3, 0x8012 +/* 0AB248 800AA648 816B6CD0 */ lb $t3, %lo(gMinimapOpacity)($t3) /* 0AB24C 800AA64C 00000000 */ nop /* 0AB250 800AA650 000B6023 */ negu $t4, $t3 /* 0AB254 800AA654 10000005 */ b .L800AA66C /* 0AB258 800AA658 AFAC00A4 */ sw $t4, 0xa4($sp) .L800AA65C: -/* 0AB25C 800AA65C 3C0D8012 */ lui $t5, %hi(D_80126CD0) # $t5, 0x8012 -/* 0AB260 800AA660 81AD6CD0 */ lb $t5, %lo(D_80126CD0)($t5) +/* 0AB25C 800AA65C 3C0D8012 */ lui $t5, %hi(gMinimapOpacity) # $t5, 0x8012 +/* 0AB260 800AA660 81AD6CD0 */ lb $t5, %lo(gMinimapOpacity)($t5) /* 0AB264 800AA664 00000000 */ nop /* 0AB268 800AA668 AFAD00A4 */ sw $t5, 0xa4($sp) .L800AA66C: @@ -145,7 +145,7 @@ glabel func_800AA600 /* 0AB400 800AA800 340AC000 */ li $t2, 49152 /* 0AB404 800AA804 2401000E */ li $at, 14 /* 0AB408 800AA808 11010014 */ beq $t0, $at, .L800AA85C -/* 0AB40C 800AA80C 3C0C8012 */ lui $t4, %hi(D_80126D24) # $t4, 0x8012 +/* 0AB40C 800AA80C 3C0C8012 */ lui $t4, %hi(gHudOffsetX) # $t4, 0x8012 /* 0AB410 800AA810 2401001B */ li $at, 27 /* 0AB414 800AA814 11010011 */ beq $t0, $at, .L800AA85C /* 0AB418 800AA818 2901002F */ slti $at, $t0, 0x2f @@ -155,8 +155,8 @@ glabel func_800AA600 .L800AA828: /* 0AB428 800AA828 2401002E */ li $at, 46 /* 0AB42C 800AA82C 1101000B */ beq $t0, $at, .L800AA85C -/* 0AB430 800AA830 3C188012 */ lui $t8, %hi(D_80126CD3) # $t8, 0x8012 -/* 0AB434 800AA834 83186CD3 */ lb $t8, %lo(D_80126CD3)($t8) +/* 0AB430 800AA830 3C188012 */ lui $t8, %hi(gMinimapXlu) # $t8, 0x8012 +/* 0AB434 800AA834 83186CD3 */ lb $t8, %lo(gMinimapXlu)($t8) /* 0AB438 800AA838 8FAD00A4 */ lw $t5, 0xa4($sp) /* 0AB43C 800AA83C 330B0001 */ andi $t3, $t8, 1 /* 0AB440 800AA840 11600006 */ beqz $t3, .L800AA85C @@ -167,9 +167,9 @@ glabel func_800AA600 /* 0AB454 800AA854 46082280 */ add.s $f10, $f4, $f8 /* 0AB458 800AA858 E60A0010 */ swc1 $f10, 0x10($s0) .L800AA85C: -/* 0AB45C 800AA85C 3C0E8012 */ lui $t6, %hi(D_80126D28) # $t6, 0x8012 -/* 0AB460 800AA860 8DCE6D28 */ lw $t6, %lo(D_80126D28)($t6) -/* 0AB464 800AA864 8D8C6D24 */ lw $t4, %lo(D_80126D24)($t4) +/* 0AB45C 800AA85C 3C0E8012 */ lui $t6, %hi(gHudBounceX) # $t6, 0x8012 +/* 0AB460 800AA860 8DCE6D28 */ lw $t6, %lo(gHudBounceX)($t6) +/* 0AB464 800AA864 8D8C6D24 */ lw $t4, %lo(gHudOffsetX)($t4) /* 0AB468 800AA868 C606000C */ lwc1 $f6, 0xc($s0) /* 0AB46C 800AA86C 018E7821 */ addu $t7, $t4, $t6 /* 0AB470 800AA870 448F8000 */ mtc1 $t7, $f16 @@ -195,7 +195,7 @@ glabel func_800AA600 /* 0AB4BC 800AA8BC 8C840300 */ lw $a0, %lo(osTvType)($a0) /* 0AB4C0 800AA8C0 3C014100 */ li $at, 0x41000000 # 8.000000 /* 0AB4C4 800AA8C4 14800009 */ bnez $a0, .L800AA8EC -/* 0AB4C8 800AA8C8 3C0C8012 */ lui $t4, %hi(D_80126CD3) # $t4, 0x8012 +/* 0AB4C8 800AA8C8 3C0C8012 */ lui $t4, %hi(gMinimapXlu) # $t4, 0x8012 /* 0AB4CC 800AA8CC C6080010 */ lwc1 $f8, 0x10($s0) /* 0AB4D0 800AA8D0 44815000 */ mtc1 $at, $f10 /* 0AB4D4 800AA8D4 3C048000 */ lui $a0, %hi(osTvType) # $a0, 0x8000 @@ -205,16 +205,16 @@ glabel func_800AA600 /* 0AB4E4 800AA8E4 8C840300 */ lw $a0, %lo(osTvType)($a0) /* 0AB4E8 800AA8E8 00000000 */ nop .L800AA8EC: -/* 0AB4EC 800AA8EC 818C6CD3 */ lb $t4, %lo(D_80126CD3)($t4) +/* 0AB4EC 800AA8EC 818C6CD3 */ lb $t4, %lo(gMinimapXlu)($t4) /* 0AB4F0 800AA8F0 3C01437F */ li $at, 0x437F0000 # 255.000000 /* 0AB4F4 800AA8F4 318E0002 */ andi $t6, $t4, 2 /* 0AB4F8 800AA8F8 11C0001E */ beqz $t6, .L800AA974 /* 0AB4FC 800AA8FC 240300FF */ li $v1, 255 -/* 0AB500 800AA900 3C0F8012 */ lui $t7, %hi(D_80126CD0) # $t7, 0x8012 -/* 0AB504 800AA904 81EF6CD0 */ lb $t7, %lo(D_80126CD0)($t7) +/* 0AB500 800AA900 3C0F8012 */ lui $t7, %hi(gMinimapOpacity) # $t7, 0x8012 +/* 0AB504 800AA904 81EF6CD0 */ lb $t7, %lo(gMinimapOpacity)($t7) /* 0AB508 800AA908 3C198012 */ lui $t9, %hi(D_80126CD5) # $t9, 0x8012 /* 0AB50C 800AA90C 448F3000 */ mtc1 $t7, $f6 -/* 0AB510 800AA910 9339718B */ lbu $t9, %lo(D_8012718B)($t9) +/* 0AB510 800AA910 9339718B */ lbu $t9, %lo(gMinimapOpacityTarget)($t9) /* 0AB514 800AA914 468034A0 */ cvt.s.w $f18, $f6 /* 0AB518 800AA918 44810000 */ mtc1 $at, $f0 /* 0AB51C 800AA91C 44994000 */ mtc1 $t9, $f8 @@ -618,7 +618,7 @@ glabel func_800AA600 /* 0ABB0C 800AAF0C 3C0B8012 */ lui $t3, %hi(gHUDCurrDisplayList) # $t3, 0x8012 /* 0ABB10 800AAF10 2401000E */ li $at, 14 /* 0ABB14 800AAF14 11010014 */ beq $t0, $at, .L800AAF68 -/* 0ABB18 800AAF18 3C198012 */ lui $t9, %hi(D_80126D24) # $t9, 0x8012 +/* 0ABB18 800AAF18 3C198012 */ lui $t9, %hi(gHudOffsetX) # $t9, 0x8012 /* 0ABB1C 800AAF1C 2401001B */ li $at, 27 /* 0ABB20 800AAF20 11010011 */ beq $t0, $at, .L800AAF68 /* 0ABB24 800AAF24 2901002F */ slti $at, $t0, 0x2f @@ -628,8 +628,8 @@ glabel func_800AA600 .L800AAF34: /* 0ABB34 800AAF34 2401002E */ li $at, 46 /* 0ABB38 800AAF38 1101000B */ beq $t0, $at, .L800AAF68 -/* 0ABB3C 800AAF3C 3C0D8012 */ lui $t5, %hi(D_80126CD3) # $t5, 0x8012 -/* 0ABB40 800AAF40 81AD6CD3 */ lb $t5, %lo(D_80126CD3)($t5) +/* 0ABB3C 800AAF3C 3C0D8012 */ lui $t5, %hi(gMinimapXlu) # $t5, 0x8012 +/* 0ABB40 800AAF40 81AD6CD3 */ lb $t5, %lo(gMinimapXlu)($t5) /* 0ABB44 800AAF44 8FAE00A4 */ lw $t6, 0xa4($sp) /* 0ABB48 800AAF48 31AC0001 */ andi $t4, $t5, 1 /* 0ABB4C 800AAF4C 11800006 */ beqz $t4, .L800AAF68 @@ -640,9 +640,9 @@ glabel func_800AA600 /* 0ABB60 800AAF60 460A4101 */ sub.s $f4, $f8, $f10 /* 0ABB64 800AAF64 E6040010 */ swc1 $f4, 0x10($s0) .L800AAF68: -/* 0ABB68 800AAF68 3C0F8012 */ lui $t7, %hi(D_80126D28) # $t7, 0x8012 -/* 0ABB6C 800AAF6C 8DEF6D28 */ lw $t7, %lo(D_80126D28)($t7) -/* 0ABB70 800AAF70 8F396D24 */ lw $t9, %lo(D_80126D24)($t9) +/* 0ABB68 800AAF68 3C0F8012 */ lui $t7, %hi(gHudBounceX) # $t7, 0x8012 +/* 0ABB6C 800AAF6C 8DEF6D28 */ lw $t7, %lo(gHudBounceX)($t7) +/* 0ABB70 800AAF70 8F396D24 */ lw $t9, %lo(gHudOffsetX)($t9) /* 0ABB74 800AAF74 C610000C */ lwc1 $f16, 0xc($s0) /* 0ABB78 800AAF78 032FC021 */ addu $t8, $t9, $t7 /* 0ABB7C 800AAF7C 44983000 */ mtc1 $t8, $f6 diff --git a/asm/non_matchings/objects/func_80010994.s b/asm/non_matchings/objects/func_80010994.s index 71b7254b..672f9c3e 100644 --- a/asm/non_matchings/objects/func_80010994.s +++ b/asm/non_matchings/objects/func_80010994.s @@ -16,7 +16,7 @@ glabel func_80010994 /* 0115CC 800109CC 3C018012 */ lui $at, %hi(gEventStartTimer) # $at, 0x8012 /* 0115D0 800109D0 1840000D */ blez $v0, .L80010A08 /* 0115D4 800109D4 AC22ADB8 */ sw $v0, %lo(gEventStartTimer)($at) -/* 0115D8 800109D8 0C028064 */ jal func_800A0190 +/* 0115D8 800109D8 0C028064 */ jal race_starting /* 0115DC 800109DC 00000000 */ nop /* 0115E0 800109E0 10400009 */ beqz $v0, .L80010A08 /* 0115E4 800109E4 3C038012 */ lui $v1, %hi(D_8011ADBC) # $v1, 0x8012 diff --git a/include/level_object_entries.h b/include/level_object_entries.h index 19d8ebaa..00809bc7 100644 --- a/include/level_object_entries.h +++ b/include/level_object_entries.h @@ -90,7 +90,7 @@ typedef struct LevelObjectEntry_AudioLine { /* 0x08 */ u8 unk8; /* 0x09 */ u8 unk9; /* 0x0A */ u16 soundID; - /* 0x0C */ u8 unkC; + /* 0x0C */ u8 lineID; /* 0x0D */ u8 unkD; /* 0x0E */ u16 unkE; /* 0x10 */ u8 unk10; @@ -214,7 +214,7 @@ typedef struct LevelObjectEntry_SkyControl { typedef struct LevelObjectEntry_AudioReverb { /* 0x00 */ LevelObjectEntryCommon common; /* 0x08 */ u8 unk8; - /* 0x09 */ u8 unk9; + /* 0x09 */ u8 lineID; /* 0x0A */ u8 unkA; } LevelObjectEntry_AudioReverb; diff --git a/include/structs.h b/include/structs.h index cc679440..f68060f2 100644 --- a/include/structs.h +++ b/include/structs.h @@ -1129,7 +1129,7 @@ typedef struct Object_AudioLine { } unk_struct; s32 unk8_word; } unk_union; - /* 0x0C */ u8 unkC; + /* 0x0C */ u8 lineID; /* 0x0D */ u8 unkD; /* 0x0E */ u8 unkE; /* 0x0F */ u8 unkF; @@ -1141,7 +1141,7 @@ typedef struct Object_AudioLine { typedef struct Object_AudioReverb { /* 0x0 */ u16 pad0; /* 0x2 */ s16 unk2; - /* 0x4 */ u8 unk4; + /* 0x4 */ u8 lineID; /* 0x5 */ u8 unk5; } Object_AudioReverb; @@ -1216,7 +1216,7 @@ typedef struct Object_Racer { /* 0x02A */ u16 unk2A; /* 0x02C */ f32 velocity; /* 0x030 */ f32 lateral_velocity; - /* 0x034 */ s32 unk34; // I think this is the engine pitch for the hovercraft and plane, but I cannot yet confirm. + /* 0x034 */ f32 unk34; // Vehicle pitch. /* 0x038 */ f32 ox1; /* 0x03C */ f32 oy1; /* 0x040 */ f32 oz1; diff --git a/src/asset_loading.c b/src/asset_loading.c index 85a8ece8..eeb6fb6c 100644 --- a/src/asset_loading.c +++ b/src/asset_loading.c @@ -3,7 +3,7 @@ #include "asset_loading.h" -//#include "assets.h" +// #include "assets.h" #include "macros.h" #include "ultra64.h" diff --git a/src/audio_spatial.c b/src/audio_spatial.c index 7219333d..013232de 100644 --- a/src/audio_spatial.c +++ b/src/audio_spatial.c @@ -45,6 +45,7 @@ extern unk8011A6D8 D_8011A6D8[]; /*******************************/ #ifdef NON_EQUIVALENT +// audioline_init void func_80008040(void) { s32 var_v0; @@ -81,6 +82,7 @@ void func_80008168(void) { extern f32 D_80119C60[672]; extern f32 D_8011A6E0[336]; //[7][48]; extern unk8011A6D8 **D_8011A6DC; +// audioline_reset void func_80008174(void) { s32 i; s32 j; @@ -99,7 +101,7 @@ void func_80008174(void) { gUsedMasks = 0; for (i = 0; i < ARRAY_COUNT(D_80119C60); i++) { - D_80119C58[i].unk16C = 0; + D_80119C58[i].soundID = 0; if (D_80119C58[i].unk178 != 0) { if (D_80119C58[i].unk0.unk0_02 == 0) { func_8000488C(D_80119C58[i].unk178); @@ -130,6 +132,7 @@ void func_80008174(void) { GLOBAL_ASM("asm/non_matchings/audio_spatial/func_80008174.s") #endif +// audioline_ambient GLOBAL_ASM("asm/non_matchings/audio_spatial/func_80008438.s") s32 func_800090C0(f32 arg0, f32 arg1, s32 arg2) { @@ -159,13 +162,17 @@ s32 func_800090C0(f32 arg0, f32 arg1, s32 arg2) { return ret; } -// Best I can figure, this measures the distance between XYZ values. -s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, f32 *outY, f32 *outZ) { +/** + * Calculates the position between two points, then the distance from the nearest point. + * Write the adjusted positions to the arguments. + * Returns the distance between the input and the nearest endpoint. + */ +s32 audioline_distance(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, f32 *outY, f32 *outZ) { f32 dx, dy, dz; f32 x1, y1, z1; f32 x2, y2, z2; - f32 temp; + f32 mag; f32 ret; x1 = floatXYZ->x1; @@ -174,19 +181,19 @@ s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, x2 = floatXYZ->x2; y2 = floatXYZ->y2; z2 = floatXYZ->z2; - temp = 0.0f; + mag = 0.0f; dx = x2 - x1; dy = y2 - y1; dz = z2 - z1; if (dx == 0.0 && dy == 0.0 && dz == 0.0) { - temp = 0.0f; + mag = 0.0f; } else { - temp = ((inX - x1) * dx + (inY - y1) * dy + (inZ - z1) * dz) / (dx * dx + dy * dy + dz * dz); + mag = ((inX - x1) * dx + (inY - y1) * dy + (inZ - z1) * dz) / (dx * dx + dy * dy + dz * dz); } - if (temp < 0.0f) { + if (mag < 0.0f) { *outX = x1; *outY = y1; *outZ = z1; @@ -194,7 +201,7 @@ s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, dy = y1 - inY; dz = z1 - inZ; ret = sqrtf(dx * dx + dy * dy + dz * dz); - } else if (temp > 1.0f) { + } else if (mag > 1.0f) { *outX = x2; *outY = y2; *outZ = z2; @@ -203,8 +210,8 @@ s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, dz = z2 - inZ; ret = sqrtf(dx * dx + dy * dy + dz * dz); } else { - *outX = temp * dx + x1, // Comma required here as this was likely all one line. - *outY = temp * dy + y1, *outZ = temp * dz + z1; + *outX = mag * dx + x1, // Comma required here as this was likely all one line. + *outY = mag * dy + y1, *outZ = mag * dz + z1; ret = sqrtf((*outX - inX) * (*outX - inX) + (*outY - inY) * (*outY - inY) + (*outZ - inZ) * (*outZ - inZ)); } @@ -275,35 +282,36 @@ void func_8000974C(u16 soundBite, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, u8 volu } } -void func_800098A4(u8 arg0, u16 soundId, f32 x, f32 y, f32 z, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u16 arg9, u8 argA, - u8 argB, u8 argC) { +void audioline_ambient_create(u8 arg0, u16 soundId, f32 x, f32 y, f32 z, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u16 arg9, + u8 argA, u8 lineID, u8 argC) { Vec3f *temp_a0; unk80119C58 *temp_v1; - if ((argB < 7) && (argC < 30)) { - temp_v1 = &D_80119C58[argB]; + if ((lineID < 7) && (argC < 30)) { + temp_v1 = &D_80119C58[lineID]; temp_a0 = (Vec3f *) (((u32 *) &temp_v1->unk4) + argC * 3); // This can't be right... temp_a0->x = x; temp_a0->y = y; temp_a0->z = z; if (argC == 0) { - (&D_80119C58[argB])->unk16C = soundId; - (&D_80119C58[argB])->unk0.unk0_02 = arg0; - (&D_80119C58[argB])->unk170 = arg9; - (&D_80119C58[argB])->unk17D = argA; - (&D_80119C58[argB])->unk174 = arg6; - (&D_80119C58[argB])->unk175 = arg5; - (&D_80119C58[argB])->unk176 = arg7; - (&D_80119C58[argB])->unk17E = arg8; + (&D_80119C58[lineID])->soundID = soundId; + (&D_80119C58[lineID])->unk0.unk0_02 = arg0; + (&D_80119C58[lineID])->unk170 = arg9; + (&D_80119C58[lineID])->unk17D = argA; + (&D_80119C58[lineID])->unk174 = arg6; + (&D_80119C58[lineID])->unk175 = arg5; + (&D_80119C58[lineID])->unk176 = arg7; + (&D_80119C58[lineID])->unk17E = arg8; } - if ((&D_80119C58[argB])->unk17C < argC) { - (&D_80119C58[argB])->unk17C = argC; + if ((&D_80119C58[lineID])->unk17C < argC) { + (&D_80119C58[lineID])->unk17C = argC; } } } #ifdef NON_MATCHING // single regalloc diff +// audioline_reverb_create void func_80009968(f32 x, f32 y, f32 z, u8 arg3, u8 arg4, u8 arg5) { Vec3f *temp_a1; s32 tempArg5 = arg5; @@ -375,7 +383,7 @@ s32 func_80009AB4(u8 arg0) { #ifdef NON_EQUIVALENT u8 func_80009D6C(unk8011A6D8 *, f32, f32, f32); - +// audioline_reverb void func_80009B7C(s32 *soundState, f32 x, f32 y, f32 z) { s32 j; f32 outX; @@ -398,7 +406,7 @@ void func_80009B7C(s32 *soundState, f32 x, f32 y, f32 z) { if (D_8011A6D8[i].unk0.unk0_02 != 0) { if (func_80009AB4(i) != 0) { for (j = 0; j < D_8011A6D8[i].unkB8; j++) { - distBetween = func_800092A8(x, y, z, &D_8011A6D8[i].unk4.unk4_02[j], &outX, &outY, &outZ); + distBetween = audioline_distance(x, y, z, &D_8011A6D8[i].unk4.unk4_02[j], &outX, &outY, &outZ); if (distBetween < var_s6) { numOfYVals = func_8002BAB0(levelSegmentIndex, x, z, yVals); for (k = 0; k < numOfYVals; k++) { @@ -433,7 +441,7 @@ void func_8000A184(Gfx **arg0, Vertex **arg1, Triangle **arg2) { s32 i, j; for (i = 0; i < 7; i++) { - if (D_80119C58[i].unk16C != 0) { + if (D_80119C58[i].soundID != 0) { for (j = 0; j < D_80119C58[i].unk17C; j++) { debug_render_line(arg0, arg1, arg2, (floatXYZVals *) &D_80119C5C[i], 0xFF, 0xFF, 0); } diff --git a/src/audio_spatial.h b/src/audio_spatial.h index 664f3b0f..76489e6c 100644 --- a/src/audio_spatial.h +++ b/src/audio_spatial.h @@ -59,15 +59,15 @@ void play_sound_at_position(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, SoundMask void func_8000A2E8(s32 arg0); s32 func_800090C0(f32, f32, s32); void func_800095E8(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, f32 arg6, SoundMask **soundMask); -void func_800098A4(u8 arg0, u16 soundId, f32 x, f32 y, f32 z, u8 arg5, u8 arg6, - u8 arg7, u8 arg8, u16 arg9, u8 argA, u8 argB, u8 argC); +void audioline_ambient_create(u8 arg0, u16 soundId, f32 x, f32 y, f32 z, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u16 arg9, + u8 argA, u8 lineID, u8 argC); s32 func_800099EC(u8 arg0); void debug_render_line(Gfx **dlist, Vertex **verts, Triangle **tris, floatXYZVals *coords, u8 red, u8 green, u8 blue); void func_80006BFC(Object *obj, ObjectSegment *segment, Object *obj2, s32 updateRate); void update_spatial_audio_position(SoundMask *arg0, f32 x, f32 y, f32 z); s32 func_80009AB4(u8 arg0); -s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, f32 *outY, f32 *outZ); +s32 audioline_distance(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, f32 *outY, f32 *outZ); void func_80009968(f32, f32, f32, u8, u8, u8); // Non Matching void func_80008174(void); // Non Matching void func_80008040(void); // Non Matching diff --git a/src/audio_vehicle.c b/src/audio_vehicle.c index 274a2785..f1f93a8e 100644 --- a/src/audio_vehicle.c +++ b/src/audio_vehicle.c @@ -416,7 +416,7 @@ void racer_sound_hovercraft(Object *obj, UNUSED u32 buttonsPressed, u32 buttonsH } else { var_f18 = 0.0f; } - if (func_800A0190() == FALSE) { + if (race_starting() == FALSE) { gRacerSound->throttlePitch = 0.0f; } if (velocity > 10.0) { @@ -521,7 +521,7 @@ void func_800063EC(Object *obj, UNUSED u32 buttonsPressed, u32 buttonsHeld, s32 if (gRacerSound->throttlePitch < 0) { gRacerSound->throttlePitch = 0; } - if (func_800A0190() == 0) { + if (race_starting() == 0) { gRacerSound->throttlePitch = 0.0f; } var_f14 += gRacerSound->throttlePitch; diff --git a/src/audio_vehicle.h b/src/audio_vehicle.h index a5bb0dfe..17801378 100644 --- a/src/audio_vehicle.h +++ b/src/audio_vehicle.h @@ -21,7 +21,7 @@ typedef struct unk80119C58 { } unk0; /* 0x004 */ Vec3f *unk4; /* 0x008 */ u8 pad9[0x164]; - /* 0x16C */ s32 unk16C; + /* 0x16C */ s32 soundID; /* 0x170 */ s32 unk170; /* 0x174 */ u8 unk174; /* 0x175 */ u8 unk175; diff --git a/src/font.c b/src/font.c index 72def2a0..74f8d7cf 100644 --- a/src/font.c +++ b/src/font.c @@ -220,6 +220,9 @@ UNUSED TextureHeader *get_loaded_font(s32 font, u8 index) { } } //!@bug: No return statement. The function will return whatever happens to be in v0 before this function was called. +#ifdef AVOID_UB + return NULL; +#endif } /** diff --git a/src/game_ui.c b/src/game_ui.c index e7d6031b..f69db989 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -144,7 +144,7 @@ ByteColour gHudMinimapColours[40] = { u32 gHudColour = COLOUR_RGBA32(255, 255, 255, 254); -f32 D_800E2838 = 0.0f; +UNUSED f32 sRecordVel = 0.0f; // Set to whatever the highest velocity recorded is, but never actually used. // Unused? s32 D_800E283C[5] = { 0x06FFFFFF, 0x000FFFFF, 0x06000000, 0x0014FFFF, 0x00000000 }; @@ -153,10 +153,10 @@ s32 D_800E283C[5] = { 0x06FFFFFF, 0x000FFFFF, 0x06000000, 0x0014FFFF, 0x00000000 /************ .bss ************/ -s8 D_80126CD0; -s8 D_80126CD1; +s8 gMinimapOpacity; +s8 gMinimapFade; s8 gShowHUD; -s8 D_80126CD3; +s8 gMinimapXlu; /** * gRaceStartShowHudStep counts up from 0->5 on race start, and is used to @@ -173,8 +173,8 @@ s8 gRaceStartShowHudStep; s8 D_80126CD5; u8 *gAssetHudElementStaleCounter; -unk80126CDC *gCurrentHud; -unk80126CDC *gPlayerHud[MAXCONTROLLERS]; // One per active player +HudData *gCurrentHud; +HudData *gPlayerHud[MAXCONTROLLERS]; // One per active player s16 *gAssetHudElementIds; HudElements *gAssetHudElements; s32 gAssetHudElementIdsCount; @@ -188,11 +188,11 @@ s32 D_80126D14; s32 D_80126D18; s32 gMinimapDotOffsetX; s32 gMinimapDotOffsetY; -s32 D_80126D24; -s32 D_80126D28; -u16 D_80126D2C; -f32 D_80126D30; -u8 D_80126D34; +s32 gHudOffsetX; // Offset value to do the slide in animation. +s32 gHudBounceX; // Offset value to do the bounce when the hud slides in. +u16 gHudBounceTimer; +f32 gHudBounceMag; +u8 gHudRaceStart; u8 D_80126D35; u8 gHideRaceTimer; u8 gNumActivePlayers; @@ -227,9 +227,9 @@ Settings *gHudSettings; u8 gHudSilverCoinRace; u8 D_80127189; u8 D_8012718A; -u8 D_8012718B; -s32 D_8012718C; -s32 D_80127190; +u8 gMinimapOpacityTarget; +s32 gStopwatchErrorX; +s32 gStopwatchErrorY; LevelHeader_70 *D_80127194; s32 D_80127198[6]; @@ -276,10 +276,10 @@ void init_hud(UNUSED s32 viewportCount) { } else { playerCount = 4; // Create four viewports if there are three players. } - gPlayerHud[PLAYER_ONE] = allocate_from_main_pool_safe(playerCount * sizeof(unk80126CDC), COLOUR_TAG_BLUE); - gPlayerHud[PLAYER_TWO] = (unk80126CDC *) ((u8 *) gPlayerHud[PLAYER_ONE] + sizeof(unk80126CDC)); - gPlayerHud[PLAYER_THREE] = (unk80126CDC *) ((u8 *) gPlayerHud[PLAYER_TWO] + sizeof(unk80126CDC)); - gPlayerHud[PLAYER_FOUR] = (unk80126CDC *) ((u8 *) gPlayerHud[PLAYER_THREE] + sizeof(unk80126CDC)); + gPlayerHud[PLAYER_ONE] = allocate_from_main_pool_safe(playerCount * sizeof(HudData), COLOUR_TAG_BLUE); + gPlayerHud[PLAYER_TWO] = (HudData *) ((u8 *) gPlayerHud[PLAYER_ONE] + sizeof(HudData)); + gPlayerHud[PLAYER_THREE] = (HudData *) ((u8 *) gPlayerHud[PLAYER_TWO] + sizeof(HudData)); + gPlayerHud[PLAYER_FOUR] = (HudData *) ((u8 *) gPlayerHud[PLAYER_THREE] + sizeof(HudData)); func_8009F034(); D_80126D64 = 0; gWrongWayNagTimer = 0; @@ -294,7 +294,7 @@ void init_hud(UNUSED s32 viewportCount) { gTimeTrialVoiceDelay = 0; D_80126D3C = NULL; D_80126D44 = 0; - D_80126CD3 = 0; + gMinimapXlu = 0; D_80127194 = (LevelHeader_70 *) get_misc_asset(ASSET_MISC_58); func_8007F1E8(D_80127194); set_sound_channel_volume(0, 32767); @@ -337,8 +337,11 @@ void free_hud(void) { gParticlePtrList_flush(); } -u8 func_800A0190(void) { - return D_80126D34; +/** + * Return whether the race has been started from the HUDs end. + */ +u8 race_starting(void) { + return gHudRaceStart; } /** @@ -365,15 +368,15 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s gHUDCurrMatrix = *mtx; gHUDCurrVertex = *vertexList; D_80127180 = 0; - if (D_80126CD1 != 0) { - D_80126CD0 += updateRate; - if (D_8012718B < D_80126CD0) { - D_80126CD0 = D_8012718B; + if (gMinimapFade) { + gMinimapOpacity += updateRate; + if (gMinimapOpacity > gMinimapOpacityTarget) { + gMinimapOpacity = gMinimapOpacityTarget; } } else { - D_80126CD0 -= updateRate; - if (D_80126CD0 < 0) { - D_80126CD0 = 0; + gMinimapOpacity -= updateRate; + if (gMinimapOpacity < 0) { + gMinimapOpacity = 0; } } if (gShowHUD == 0) { @@ -389,7 +392,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s 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) { + gHudRaceStart) { gShowCourseDirections = 1 - gShowCourseDirections; sound_play((SOUND_TING_HIGHER + gShowCourseDirections), NULL); if (gShowCourseDirections) { @@ -400,7 +403,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } } else if (get_buttons_pressed_from_player(D_80126D10) & D_CBUTTONS && racer->raceFinished == FALSE && !(gHudLevelHeader->race_type & RACETYPE_CHALLENGE) && - D_80126D34) { + gHudRaceStart) { if (D_800E2794[gHUDNumPlayers][racer->playerIndex] < PLAYER_FOUR) { D_800E2794[gHUDNumPlayers][racer->playerIndex]++; } else { @@ -409,7 +412,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s sound_play((SOUND_TING_HIGHEST - (D_800E2794[gHUDNumPlayers][racer->playerIndex] == 0)), NULL); } if (get_buttons_pressed_from_player(D_80126D10) & R_CBUTTONS && racer->raceFinished == FALSE && - D_80126D34 && D_80126CD0 == 0) { + gHudRaceStart && gMinimapOpacity == 0) { gHudToggleSettings[gHUDNumPlayers] = 1 - gHudToggleSettings[gHUDNumPlayers]; if (gHudToggleSettings[gHUDNumPlayers] == 0) { sound_play(SOUND_TING_LOW, NULL); @@ -440,17 +443,17 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s tex_enable_modes(RENDER_ALL); tex_disable_modes(RENDER_Z_COMPARE); sprite_opaque(FALSE); - if (check_if_showing_cutscene_camera() == FALSE && D_80126D34 == FALSE && + if (check_if_showing_cutscene_camera() == FALSE && gHudRaceStart == FALSE && racer->playerIndex == PLAYER_ONE) { if (D_80126D35 != 0) { - D_80126D28 = sins_f(D_80126D2C) * D_80126D30 * 8.0f; - D_80126D2C += updateRate << 0xB; - if (D_80126D2C >= 0x8000) { - D_80126D2C -= 0x8000; - D_80126D30 = D_80126D30 / 2; - if (D_80126D30 <= 0.125) { - D_80126D34 = TRUE; - D_80126D24 = 0; + gHudBounceX = sins_f(gHudBounceTimer) * gHudBounceMag * 8.0f; + gHudBounceTimer += updateRate << 0xB; + if (gHudBounceTimer >= 0x8000) { + gHudBounceTimer -= 0x8000; + gHudBounceMag = gHudBounceMag / 2; + if (gHudBounceMag <= 0.125) { + gHudRaceStart = TRUE; + gHudOffsetX = 0; } } } else { @@ -458,14 +461,14 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s sound_play(SOUND_WHOOSH1, NULL); gRaceStartShowHudStep += 1; } - D_80126D24 -= updateRate * 13; - if (D_80126D24 < 0) { - D_80126D24 = 0; + gHudOffsetX -= updateRate * 13; + if (gHudOffsetX < 0) { + gHudOffsetX = 0; } - if (D_80126D24 == 0) { + if (gHudOffsetX == 0) { D_80126D35 = 1; sound_play(SOUND_EXPLOSION2, NULL); - D_80126D28 = 0; + gHudBounceX = 0; } } } @@ -528,7 +531,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } func_80068508(FALSE); } - D_80126CD1 = 0; + gMinimapFade = FALSE; sprite_opaque(TRUE); if (D_80127180) { gHudSprites[D_80127180].texture = NULL; @@ -643,7 +646,7 @@ void render_hud_race(s32 arg0, Object *obj, s32 updateRate) { void render_course_indicator_arrows(Object_Racer *racer, s32 updateRate) { s32 timer; s32 type; - IndicatorArrow *indicator; + HudElement *indicator; if (gShowCourseDirections) { timer = racer->indicator_timer; @@ -651,58 +654,58 @@ void render_course_indicator_arrows(Object_Racer *racer, s32 updateRate) { type = racer->indicator_type; racer->indicator_timer = timer - updateRate; if (type) { - indicator = (IndicatorArrow *) &gCurrentHud->courseIndicator; + indicator = (HudElement *) &gCurrentHud->courseArrows; switch (type) { case INDICATOR_LEFT: - indicator->textureID = 33; - indicator->unk0 = 0; + indicator->spriteID = HUD_SPRITE_INDICATOR_TURN_45; + indicator->y_rotation = 0; break; case INDICATOR_LEFT_SHARP: - indicator->textureID = 32; - indicator->unk0 = 0; + indicator->spriteID = HUD_SPRITE_INDICATOR_TURN_90; + indicator->y_rotation = 0; break; case INDICATOR_LEFT_UTURN: - indicator->textureID = 31; - indicator->unk0 = 0; + indicator->spriteID = HUD_SPRITE_INDICATOR_U; + indicator->y_rotation = 0; break; case INDICATOR_RIGHT: - indicator->textureID = 33; - indicator->unk0 = -0x8000; + indicator->spriteID = HUD_SPRITE_INDICATOR_TURN_45; + indicator->y_rotation = -0x8000; break; case INDICATOR_RIGHT_SHARP: - indicator->textureID = 32; - indicator->unk0 = -0x8000; + indicator->spriteID = HUD_SPRITE_INDICATOR_TURN_90; + indicator->y_rotation = -0x8000; break; case INDICATOR_RIGHT_UTURN: - indicator->textureID = 31; - indicator->unk0 = -0x8000; + indicator->spriteID = HUD_SPRITE_INDICATOR_U; + indicator->y_rotation = -0x8000; break; case INDICATOR_UP: - indicator->textureID = 30; - indicator->unk0 = -0x8000; - indicator->unk2 = -0x8000; + indicator->spriteID = HUD_SPRITE_INDICATOR_DOWN; + indicator->y_rotation = -0x8000; + indicator->x_rotation = -0x8000; break; case INDICATOR_DOWN: - indicator->textureID = 30; - indicator->unk0 = 0; + indicator->spriteID = HUD_SPRITE_INDICATOR_DOWN; + indicator->y_rotation = 0; break; default: // INDICATOR_EXCLAMATION - indicator->textureID = 29; - indicator->unk0 = 0; + indicator->spriteID = HUD_SPRITE_INDICATOR_EXCLAMATION; + indicator->y_rotation = 0; break; } // Flip the arrow direction on adventure 2. if (get_filtered_cheats() & CHEAT_MIRRORED_TRACKS && racer->indicator_type < 30) { - indicator->unk0 = (s16) (0x8000 - indicator->unk0); + indicator->y_rotation = (s16) (0x8000 - indicator->y_rotation); } if (gHUDNumPlayers == ONE_PLAYER && racer->raceFinished == FALSE && racer->indicator_type && D_800E27B8 == 0) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) indicator); - indicator->unkC = -indicator->unkC; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) indicator); - indicator->unkC = -indicator->unkC; - indicator->unk2 = 0; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, indicator); + indicator->x = -indicator->x; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, indicator); + indicator->x = -indicator->x; + indicator->x_rotation = 0; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } @@ -712,17 +715,17 @@ void render_course_indicator_arrows(Object_Racer *racer, s32 updateRate) { if (D_800E27B8) { if (D_800E27B8 & 0x20) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - indicator = (IndicatorArrow *) &gCurrentHud->courseIndicator; - indicator->unk0 = 0; - indicator->unk2 = 0; - indicator->textureID = 29; + indicator = &gCurrentHud->courseArrows; + indicator->y_rotation = 0; + indicator->x_rotation = 0; + indicator->spriteID = HUD_SPRITE_INDICATOR_EXCLAMATION; if ((get_filtered_cheats() & CHEAT_MIRRORED_TRACKS) && ((s32) racer->indicator_type < 30)) { - indicator->unk0 = (s16) (0x8000 - indicator->unk0); + indicator->y_rotation = (s16) (0x8000 - indicator->y_rotation); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) indicator); - indicator->unkC = (f32) -indicator->unkC; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) indicator); - indicator->unkC = (f32) -indicator->unkC; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, indicator); + indicator->x = (f32) -indicator->x; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, indicator); + indicator->x = (f32) -indicator->x; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } if (updateRate < D_800E27B8) { @@ -754,15 +757,15 @@ void render_hud_banana_challenge(s32 arg0, Object *obj, s32 updateRate) { racer = &racers[i]->unk64->racer; render_treasure_hud(racer); if (i == 1) { - gCurrentHud->unk64C += 55.0f; - gCurrentHud->unk40C += 55.0f; + gCurrentHud->challengePortrait.x += 55.0f; + gCurrentHud->treasureMetre.x += 55.0f; } - gCurrentHud->unk64C += 55.0f; - gCurrentHud->unk40C += 55.0f; + gCurrentHud->challengePortrait.x += 55.0f; + gCurrentHud->treasureMetre.x += 55.0f; } if (1) {} // Fakematch - gCurrentHud->unk64C -= 275.0f; - gCurrentHud->unk40C -= 275.0f; + gCurrentHud->challengePortrait.x -= 275.0f; + gCurrentHud->treasureMetre.x -= 275.0f; break; case 3: case 4: @@ -785,10 +788,10 @@ void render_hud_challenge_eggs(s32 arg0, Object *obj, s32 updateRate) { func_80068508(TRUE); render_race_start(arg0, updateRate); render_weapon_hud(obj, updateRate); - if ((127 - (updateRate * 2)) >= gCurrentHud->unk67A) { - gCurrentHud->unk67A += updateRate * 2; + if ((127 - (updateRate * 2)) >= gCurrentHud->eggChallengeIcon.unk1A) { + gCurrentHud->eggChallengeIcon.unk1A += updateRate * 2; } else { - gCurrentHud->unk67A = (gCurrentHud->unk67A + (updateRate * 2)) - 255; + gCurrentHud->eggChallengeIcon.unk1A = (gCurrentHud->eggChallengeIcon.unk1A + (updateRate * 2)) - 255; } if (gNumActivePlayers != 2) { func_800A14F0(obj, updateRate); @@ -829,34 +832,34 @@ void func_800A14F0(Object *racerObj, s32 updateRate) { } if (numRacers == 4) { func_80068508(TRUE); - sp44 = (s32) gCurrentHud->unk64C; - sp3C = (s32) gCurrentHud->unk650; - sp40 = (s32) (gCurrentHud->unk66C - sp44); - sp38 = (s32) (gCurrentHud->unk670 - sp3C); + sp44 = gCurrentHud->challengePortrait.x; + sp3C = gCurrentHud->challengePortrait.y; + sp40 = (gCurrentHud->eggChallengeIcon.x - sp44); + sp38 = (gCurrentHud->eggChallengeIcon.y - sp3C); for (i = 0; i < 4; i++) { curRacer = &racers[i]->unk64->racer; - if (((s32) gNumActivePlayers < 3) || (racer->playerIndex == curRacer->playerIndex)) { + if ((gNumActivePlayers < 3) || (racer->playerIndex == curRacer->playerIndex)) { func_800A19A4(curRacer, updateRate); } gHudColour = -2; if (gNumActivePlayers == 1) { - gCurrentHud->unk64C += 68.0f; + gCurrentHud->challengePortrait.x += 68.0f; } else if (gNumActivePlayers == 2) { - gCurrentHud->unk64C = sp44; + gCurrentHud->challengePortrait.x = sp44; if (osTvType == 0) { - gCurrentHud->unk650 = (f32) ((f64) gCurrentHud->unk650 + 66.0); - gCurrentHud->unk670 = (f32) ((f64) gCurrentHud->unk670 + 66.0); + gCurrentHud->challengePortrait.y += 66.0; + gCurrentHud->eggChallengeIcon.y += 66.0; } else { - gCurrentHud->unk650 += 55.0f; - gCurrentHud->unk670 += 55.0f; + gCurrentHud->challengePortrait.y += 55.0f; + gCurrentHud->eggChallengeIcon.y += 55.0f; } } - gCurrentHud->unk66C = gCurrentHud->unk64C + sp40; + gCurrentHud->eggChallengeIcon.x = gCurrentHud->challengePortrait.x + sp40; } - gCurrentHud->unk64C = sp44; - gCurrentHud->unk66C = sp44 + sp40; - gCurrentHud->unk650 = sp3C; - gCurrentHud->unk670 = sp3C + sp38; + gCurrentHud->challengePortrait.x = sp44; + gCurrentHud->eggChallengeIcon.x = sp44 + sp40; + gCurrentHud->challengePortrait.y = sp3C; + gCurrentHud->eggChallengeIcon.y = sp3C + sp38; func_80068508(FALSE); } } @@ -865,35 +868,35 @@ void func_800A19A4(Object_Racer *racer, UNUSED s32 updateRate) { s32 i; UNUSED s32 pad; s32 sp44; - s32 sp40; + s32 prevY; s32 i2; - sp40 = (s32) gCurrentHud->unk66C; - gCurrentHud->unk646 = racer->characterId + 56; + prevY = gCurrentHud->eggChallengeIcon.x; + gCurrentHud->challengePortrait.spriteID = racer->characterId + HUD_SPRITE_PORTRAIT; D_80126CD5 = 1; - if (((s32) gNumActivePlayers < 3) || ((gNumActivePlayers == 3) && (racer->playerIndex == -1))) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk640); + if ((gNumActivePlayers < 3) || ((gNumActivePlayers == 3) && (racer->playerIndex == -1))) { + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->challengePortrait); } - if (gCurrentHud->unk67A < 0) { - sp44 = (gCurrentHud->unk67A * 2) + 256; + if (gCurrentHud->eggChallengeIcon.unk1A < 0) { + sp44 = (gCurrentHud->eggChallengeIcon.unk1A * 2) + 256; } else { - sp44 = 255 - (gCurrentHud->unk67A * 2); + sp44 = 255 - (gCurrentHud->eggChallengeIcon.unk1A * 2); } if (sp44 > 254) { sp44 = 254; } for (i = 0; (i < racer->lap) && (i < 3); i++) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk660); - gCurrentHud->unk66C += 12.0f; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->eggChallengeIcon); + gCurrentHud->eggChallengeIcon.x += 12.0f; } gHudColour = sp44 | ~0xFF; i2 = i; for (i = 0; (i < racer->eggHudCounter) && (i2 < 3); i++) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk660); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->eggChallengeIcon); i2++; - gCurrentHud->unk66C += 12.0f; + gCurrentHud->eggChallengeIcon.x += 12.0f; } - gCurrentHud->unk66C = (f32) sp40; + gCurrentHud->eggChallengeIcon.x = prevY; D_80126CD5 = 0; } @@ -963,26 +966,26 @@ void func_800A1E48(Object *racerObj, s32 updateRate) { func_80068508(TRUE); if (numRacers == 4) { offset = 0; - prevCurrHudUnk64C = gCurrentHud->unk64C; - prevCurrHudUnk650 = gCurrentHud->unk650; + prevCurrHudUnk64C = gCurrentHud->challengePortrait.x; + prevCurrHudUnk650 = gCurrentHud->challengePortrait.y; for (i = 0; i < 4; i++) { curRacer = &racers[i]->unk64->racer; temp = prevCurrHudUnk64C ^ 0; - temp3 = temp - gCurrentHud->unk64C; + temp3 = temp - gCurrentHud->challengePortrait.x; temp = temp3; temp2 = offset + prevCurrHudUnk650; - temp4 = temp2 - gCurrentHud->unk650; + temp4 = temp2 - gCurrentHud->challengePortrait.y; temp2 = temp4; - gCurrentHud->unk64C += temp; - gCurrentHud->unk650 += temp2; - gCurrentHud->unk68C += temp; - gCurrentHud->unk690 -= temp2; - gCurrentHud->unk6AC += temp; - gCurrentHud->unk6B0 += temp2; - gCurrentHud->unk6CC += temp; - gCurrentHud->unk6D0 += temp2; - gCurrentHud->unk6EC += temp; - gCurrentHud->unk6F0 += temp2; + gCurrentHud->challengePortrait.x += temp; + gCurrentHud->challengePortrait.y += temp2; + gCurrentHud->battleBananaIcon.x += temp; + gCurrentHud->battleBananaIcon.y -= temp2; + gCurrentHud->battleBananaX.x += temp; + gCurrentHud->battleBananaX.y += temp2; + gCurrentHud->battleBananaCount1.x += temp; + gCurrentHud->battleBananaCount1.y += temp2; + gCurrentHud->battleBananaCount2.x += temp; + gCurrentHud->battleBananaCount2.y += temp2; if (gNumActivePlayers < 3 || racer->playerIndex == curRacer->playerIndex) { func_800A22F4(curRacer, updateRate); } @@ -998,21 +1001,21 @@ void func_800A1E48(Object *racerObj, s32 updateRate) { } temp = prevCurrHudUnk64C; - temp3 = temp - gCurrentHud->unk64C; + temp3 = temp - gCurrentHud->challengePortrait.x; temp = temp3; temp2 = prevCurrHudUnk650; - temp4 = temp2 - gCurrentHud->unk650; + temp4 = temp2 - gCurrentHud->challengePortrait.y; temp2 = temp4; - gCurrentHud->unk64C += temp; - gCurrentHud->unk650 += temp2; - gCurrentHud->unk68C += temp; - gCurrentHud->unk690 -= temp2; - gCurrentHud->unk6AC += temp; - gCurrentHud->unk6B0 += temp2; - gCurrentHud->unk6CC += temp; - gCurrentHud->unk6D0 += temp2; - gCurrentHud->unk6EC += temp; - gCurrentHud->unk6F0 += temp2; + gCurrentHud->challengePortrait.x += temp; + gCurrentHud->challengePortrait.y += temp2; + gCurrentHud->battleBananaIcon.x += temp; + gCurrentHud->battleBananaIcon.y -= temp2; + gCurrentHud->battleBananaX.x += temp; + gCurrentHud->battleBananaX.y += temp2; + gCurrentHud->battleBananaCount1.x += temp; + gCurrentHud->battleBananaCount1.y += temp2; + gCurrentHud->battleBananaCount2.x += temp; + gCurrentHud->battleBananaCount2.y += temp2; } func_80068508(FALSE); } @@ -1021,33 +1024,33 @@ GLOBAL_ASM("asm/non_matchings/game_ui/func_800A1E48.s") #endif void func_800A22F4(Object_Racer *racer, UNUSED s32 updateRate) { - gCurrentHud->unk646 = racer->characterId + 56; + gCurrentHud->challengePortrait.spriteID = racer->characterId + HUD_SPRITE_PORTRAIT; if (gNumActivePlayers < 3 || (gNumActivePlayers == 3 && racer->playerIndex == PLAYER_COMPUTER)) { D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk640); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->challengePortrait); D_80126CD5 = FALSE; init_rdp_and_framebuffer(&gHUDCurrDisplayList); reset_render_settings(&gHUDCurrDisplayList); } if (racer->bananas < 10) { - gCurrentHud->unk6D8 = racer->bananas; + gCurrentHud->battleBananaCount1.spriteOffset = racer->bananas; if (gNumActivePlayers == 2) { - gCurrentHud->unk6CC += 6.0f; + gCurrentHud->battleBananaCount1.x += 6.0f; } } else { - gCurrentHud->unk6D8 = racer->bananas / 10; - gCurrentHud->unk6F8 = racer->bananas % 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk6E0); + gCurrentHud->battleBananaCount1.spriteOffset = racer->bananas / 10; + gCurrentHud->battleBananaCount2.spriteOffset = racer->bananas % 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->battleBananaCount2); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk6C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->battleBananaCount1); if (gNumActivePlayers == 2 && racer->bananas < 10) { - gCurrentHud->unk6CC -= 6.0f; + gCurrentHud->battleBananaCount1.x -= 6.0f; } if (gNumActivePlayers != 2) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk6A0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->battleBananaX); sprite_opaque(TRUE); D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk680); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->battleBananaIcon); D_80126CD5 = FALSE; sprite_opaque(FALSE); } @@ -1098,7 +1101,7 @@ void render_hud_taj_race(s32 arg0, Object *obj, s32 updateRate) { */ void render_hud_hubworld(Object *obj, s32 updateRate) { Object_Racer *racer; - unk80126CDC *temp_a3; + HudElement *portrait; if (get_viewport_count() == 0) { racer = (Object_Racer *) obj->unk64; @@ -1106,9 +1109,9 @@ void render_hud_hubworld(Object *obj, s32 updateRate) { render_balloon_count(racer); render_speedometer(obj, updateRate); if (is_in_two_player_adventure()) { - temp_a3 = (unk80126CDC *) &gCurrentHud->unk720; - temp_a3->unk6 = (get_settings()->racers[1].character + 0x38); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) temp_a3); + portrait = (HudElement *) &gCurrentHud->twoPlayerAdvPortrait; + portrait->spriteID = (get_settings()->racers[1].character + HUD_SPRITE_PORTRAIT); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, portrait); } func_80068508(FALSE); } @@ -1151,7 +1154,7 @@ void func_800A277C(s32 arg0, Object *playerRacerObj, s32 updateRate) { ttSWBody.y = 0; ttSWBody.z = 0; gAssetHudElements->entry[20] = spawn_object(&ttSWBody, 0); - gCurrentHud->unk340 = -0x8000; + gCurrentHud->stopwatchHands.y_rotation = -0x8000; if (gAssetHudElements->entry[20] != NULL) { ((Object *) gAssetHudElements->entry[20])->segment.animFrame = 0; } @@ -1163,7 +1166,7 @@ void func_800A277C(s32 arg0, Object *playerRacerObj, s32 updateRate) { ttSWArms.y = 0; ttSWArms.z = 0; gAssetHudElements->entry[34] = spawn_object(&ttSWArms, 0); - gCurrentHud->unk440 = -0x8000; + gCurrentHud->stopwatch.y_rotation = -0x8000; } ttSWBodyObject = gAssetHudElements->entry[20]; if (ttSWBodyObject != NULL) { @@ -1210,7 +1213,7 @@ void func_800A277C(s32 arg0, Object *playerRacerObj, s32 updateRate) { } object_animate(ttSWBodyObject); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &gCurrentHud->unk340); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->stopwatchHands); for (i = 0; curRacer->lap >= i && i < 5; i++) { stopwatchTimer += curRacer->lap_times[i]; @@ -1222,42 +1225,40 @@ void func_800A277C(s32 arg0, Object *playerRacerObj, s32 updateRate) { if (normalise_time(36000) < stopwatchTimer) { stopwatchTimer = normalise_time(36000); } - gCurrentHud->unk444 = ((stopwatchTimer * 0x444) + 0x7FF8); + gCurrentHud->stopwatch.z_rotation = ((stopwatchTimer * 0x444) + 0x7FF8); if (get_contpak_error() <= 0) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, - (unk80126CDC **) &gCurrentHud->unk440); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->stopwatch); } - gCurrentHud->unk444 = ((((stopwatchTimer / 60) + 30) % 60) * 0x444); - gCurrentHud->unk450 = gCurrentHud->unk350 + 28.0f; + gCurrentHud->stopwatch.z_rotation = ((((stopwatchTimer / 60) + 30) % 60) * 0x444); + gCurrentHud->stopwatch.y = gCurrentHud->stopwatchHands.y + 28.0f; if (get_contpak_error() <= 0) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, - (unk80126CDC **) &gCurrentHud->unk440); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->stopwatch); } obj68->unk20 = 0; func_80068508(TRUE); render_course_indicator_arrows(curRacer, updateRate); if (!curRacer->raceFinished) { - spB8 = gCurrentHud->unk2F0; + spB8 = gCurrentHud->lapTimeText.y; for (i = 0; i < curRacer->countLap && i < gHudLevelHeader->laps; i++) { // FAKEMATCH get_timestamp_from_frames(curRacer->lap_times[i] & 0xFFFFFFFFFFFFFFFF, &spB4, &spB0, &spAC); gHudColour = D_800E27AC[i]; - render_timer(gCurrentHud->unk2EC, spB8, spB4, spB0, spAC, 1); + render_timer(gCurrentHud->lapTimeText.x, 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; + gCurrentHud->timeTrialLapNumber.spriteOffset = i + 1; func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, - (unk80126CDC **) &gCurrentHud->unk320); + (HudElement *) &gCurrentHud->timeTrialLapNumber); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, - (unk80126CDC **) &gCurrentHud->unk300); - gCurrentHud->unk330 += 12.0f; - gCurrentHud->unk310 += 12.0f; + (HudElement *) &gCurrentHud->timeTrialLapText); + gCurrentHud->timeTrialLapNumber.y += 12.0f; + gCurrentHud->timeTrialLapText.y += 12.0f; } if (1) {} // FAKEMATCH posX = ((i * 4) - i) * 4; - gCurrentHud->unk330 -= posX; - gCurrentHud->unk310 -= posX; + gCurrentHud->timeTrialLapNumber.y -= posX; + gCurrentHud->timeTrialLapText.y -= posX; if ((curRacer->boost_sound & BOOST_SOUND_UNK4) && (D_80126D4C <= 0)) { set_stopwatch_face(7, 3, 0, 4, 0); D_80126D4C = 60; @@ -1358,20 +1359,20 @@ void func_800A277C(s32 arg0, Object *playerRacerObj, s32 updateRate) { set_text_font(ASSET_FONTS_FUNFONT); // Draw text shadow. set_text_colour(0, 0, 0, 255, 255); - draw_text(&gHUDCurrDisplayList, D_8012718C + D_80126D24 + D_80126D28 + 1, D_80127190 + 1, SWMessage[0], - ALIGN_MIDDLE_CENTER); - draw_text(&gHUDCurrDisplayList, D_8012718C + D_80126D24 + D_80126D28 + 1, D_80127190 + 15, SWMessage[1], - ALIGN_MIDDLE_CENTER); - draw_text(&gHUDCurrDisplayList, D_8012718C + D_80126D24 + D_80126D28 + 1, D_80127190 + 29, SWMessage[2], - ALIGN_MIDDLE_CENTER); + draw_text(&gHUDCurrDisplayList, gStopwatchErrorX + gHudOffsetX + gHudBounceX + 1, gStopwatchErrorY + 1, + SWMessage[0], ALIGN_MIDDLE_CENTER); + draw_text(&gHUDCurrDisplayList, gStopwatchErrorX + gHudOffsetX + gHudBounceX + 1, gStopwatchErrorY + 15, + SWMessage[1], ALIGN_MIDDLE_CENTER); + draw_text(&gHUDCurrDisplayList, gStopwatchErrorX + gHudOffsetX + gHudBounceX + 1, gStopwatchErrorY + 29, + SWMessage[2], ALIGN_MIDDLE_CENTER); // Draw actual text. set_text_colour(D_80127194->red, D_80127194->green, D_80127194->blue, 128, D_80127194->alpha); - draw_text(&gHUDCurrDisplayList, D_8012718C + D_80126D24 + D_80126D28, D_80127190, SWMessage[0], - ALIGN_MIDDLE_CENTER); - draw_text(&gHUDCurrDisplayList, D_8012718C + D_80126D24 + D_80126D28, D_80127190 + 14, SWMessage[1], - ALIGN_MIDDLE_CENTER); - draw_text(&gHUDCurrDisplayList, D_8012718C + D_80126D24 + D_80126D28, D_80127190 + 28, SWMessage[2], - ALIGN_MIDDLE_CENTER); + draw_text(&gHUDCurrDisplayList, gStopwatchErrorX + gHudOffsetX + gHudBounceX, gStopwatchErrorY, + SWMessage[0], ALIGN_MIDDLE_CENTER); + draw_text(&gHUDCurrDisplayList, gStopwatchErrorX + gHudOffsetX + gHudBounceX, gStopwatchErrorY + 14, + SWMessage[1], ALIGN_MIDDLE_CENTER); + draw_text(&gHUDCurrDisplayList, gStopwatchErrorX + gHudOffsetX + gHudBounceX, gStopwatchErrorY + 28, + SWMessage[2], ALIGN_MIDDLE_CENTER); update_colour_cycle(D_80127194, updateRate); set_kerning(0); } @@ -1421,7 +1422,7 @@ void set_stopwatch_face(u8 arg0, u8 arg1, u8 faceID, u8 arg3, u8 arg4) { } void func_800A3870(void) { - gCurrentHud->unk4C4 = 0x6490; + gCurrentHud->speedometreArrow.z_rotation = 0x6490; } /** @@ -1445,12 +1446,13 @@ void render_speedometer(Object *obj, UNUSED s32 updateRate) { vel = sqrtf((obj->segment.x_velocity * obj->segment.x_velocity) + (obj->segment.z_velocity * obj->segment.z_velocity)); } - if (D_800E2838 < vel) { - D_800E2838 = vel; + if (sRecordVel < vel) { + sRecordVel = vel; } vel *= 4.0f; if (racer->drift_direction != 0) { - vel += 7.0f; + vel += 7.0f; //!@Bug: Planes and hovercraft use drift_direction for something else, applying this + //!unintentionally. } if (vel > 100.0f) { vel = 100.0f; @@ -1464,30 +1466,39 @@ void render_speedometer(Object *obj, UNUSED s32 updateRate) { vel = 25744.0f; } if (!is_game_paused()) { - if (vel < gCurrentHud->unk4C4) { - gCurrentHud->unk4C4 += ((vel - gCurrentHud->unk4C4) / 2); + if (vel < gCurrentHud->speedometreArrow.z_rotation) { + gCurrentHud->speedometreArrow.z_rotation += + ((vel - gCurrentHud->speedometreArrow.z_rotation) / 2); } else { - gCurrentHud->unk4C4 += ((vel - gCurrentHud->unk4C4) / 8); + gCurrentHud->speedometreArrow.z_rotation += + ((vel - gCurrentHud->speedometreArrow.z_rotation) / 8); } } if (gHudToggleSettings[gHUDNumPlayers] == 0) { - if (D_80126CD3 & 2) { - opacity = 255.0f - ((D_80126CD0 * 255.0f) / D_8012718B); + if (gMinimapXlu & 2) { + opacity = 255.0f - ((gMinimapOpacity * 255.0f) / gMinimapOpacityTarget); } else { opacity = 255; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk5A0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->speedometreBG); reset_render_settings(&gHUDCurrDisplayList); sprite_opaque(TRUE); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, opacity); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk4C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->speedometreArrow); sprite_opaque(FALSE); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk4E0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk500); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk520); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk540); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk560); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk580); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->speedometreNumber0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->speedometreNumber30); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->speedometreNumber60); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->speedometreNumber90); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->speedometreNumber120); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->speedometreNumber150); } } } @@ -1509,9 +1520,9 @@ void render_race_start(s32 arg0, s32 updateRate) { sprite_opaque(TRUE); } if (arg0 > 0) { - if (D_80126D34) { + if (gHudRaceStart) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, (arg0 * 255) / 40); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1A0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->raceStartReady); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); if (gRaceStartShowHudStep == 2) { sound_play(SOUND_VOICE_TT_GET_READY, &gHUDVoiceSoundMask); @@ -1537,12 +1548,13 @@ void render_race_start(s32 arg0, s32 updateRate) { } } } - } else if (gCurrentHud->unk18C > -200.0f) { + } else if (gCurrentHud->raceStartGo.x > -200.0f) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk180); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + (HudElement *) &gCurrentHud->raceStartGo); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); - gCurrentHud->unk19A[gHudCurrentViewport] += updateRate; - if (gCurrentHud->unk19A[gHudCurrentViewport] >= 60) { + gCurrentHud->raceStartGo.unk1A[gHudCurrentViewport] += updateRate; + if (gCurrentHud->raceStartGo.unk1A[gHudCurrentViewport] >= 60) { if (gRaceStartShowHudStep == 4) { // Mute background music in 3/4 player. if (get_viewport_count() > TWO_PLAYERS) { @@ -1553,7 +1565,7 @@ void render_race_start(s32 arg0, s32 updateRate) { sound_play(SOUND_WHOOSH1, NULL); gRaceStartShowHudStep++; } - gCurrentHud->unk18C -= (updateRate * 8); + gCurrentHud->raceStartGo.x -= (updateRate * 8); } if (gRaceStartShowHudStep == 3) { sound_play(SOUND_VOICE_TT_GO, &gHUDVoiceSoundMask); @@ -1585,67 +1597,68 @@ void render_racer_bananas(Object_Racer *racer, s32 updateRate) { racer->raceFinished == FALSE) && (gHUDNumPlayers < TWO_PLAYERS || (racer->lap < 1) || racer->lap_times[racer->lap] >= 180 || gHudLevelHeader->race_type & RACETYPE_CHALLENGE))) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk240); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->bananaCountX); bananas = racer->bananas; - var_v1 = gCurrentHud->unkF8; - if ((gCurrentHud->unkFA == 0) && (gCurrentHud->unkFB != racer->bananas)) { - gCurrentHud->unkFA = 2; - gCurrentHud->unkFB = racer->bananas; - } else if (gCurrentHud->unkFA) { - gCurrentHud->unk388 = 2.0f; + var_v1 = gCurrentHud->bananaCountIconSpin.spriteOffset; + if ((gCurrentHud->bananaCountIconSpin.unk1A == 0) && + (gCurrentHud->bananaCountIconSpin.unk1B != racer->bananas)) { + gCurrentHud->bananaCountIconSpin.unk1A = 2; + gCurrentHud->bananaCountIconSpin.unk1B = racer->bananas; + } else if (gCurrentHud->bananaCountIconSpin.unk1A) { + gCurrentHud->bananaCountSparkle.scale = 2.0f; var_v1 += updateRate * 13; - if (var_v1 < (gCurrentHud->unkF8 & 0xFF)) { - gCurrentHud->unkFA--; - if (gCurrentHud->unkFA == 0) { - gCurrentHud->unk39B = 1; - gCurrentHud->unk39A = 6; + if (var_v1 < (gCurrentHud->bananaCountIconSpin.spriteOffset & 0xFF)) { + gCurrentHud->bananaCountIconSpin.unk1A--; + if (gCurrentHud->bananaCountIconSpin.unk1A == 0) { + gCurrentHud->bananaCountSparkle.unk1B = 1; + gCurrentHud->bananaCountSparkle.unk1A = 6; var_v1 = 0; - gCurrentHud->unk398 = 1; + gCurrentHud->bananaCountSparkle.spriteOffset = 1; } } } if (var_v1 == 0) { sprite_opaque(TRUE); set_viewport_tv_type(TV_TYPE_NTSC); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk360); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->bananaCountIconStatic); set_viewport_tv_type(TV_TYPE_PAL); sprite_opaque(FALSE); - gCurrentHud->unkF8 = var_v1; - if (gCurrentHud->unk39B) { - gCurrentHud->unk39A -= updateRate; - if (gCurrentHud->unk39A < 0) { - gCurrentHud->unk39A = 6; - if (gCurrentHud->unk398 == 6) { - gCurrentHud->unk398 = 0; - gCurrentHud->unk39B--; + gCurrentHud->bananaCountIconSpin.spriteOffset = var_v1; + if (gCurrentHud->bananaCountSparkle.unk1B) { + gCurrentHud->bananaCountSparkle.unk1A -= updateRate; + if (gCurrentHud->bananaCountSparkle.unk1A < 0) { + gCurrentHud->bananaCountSparkle.unk1A = 6; + if (gCurrentHud->bananaCountSparkle.spriteOffset == 6) { + gCurrentHud->bananaCountSparkle.spriteOffset = 0; + gCurrentHud->bananaCountSparkle.unk1B--; } else { - gCurrentHud->unk398++; + gCurrentHud->bananaCountSparkle.spriteOffset++; } } set_viewport_tv_type(TV_TYPE_NTSC); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk380); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->bananaCountSparkle); set_viewport_tv_type(TV_TYPE_PAL); } } else { - gCurrentHud->unkF8 = var_v1 + 128; + gCurrentHud->bananaCountIconSpin.spriteOffset = var_v1 + 128; func_80068508(FALSE); sprite_opaque(TRUE); set_viewport_tv_type(TV_TYPE_NTSC); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unkE0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->bananaCountIconSpin); sprite_opaque(FALSE); set_viewport_tv_type(TV_TYPE_PAL); func_80068508(TRUE); - gCurrentHud->unkF8 -= 128; + gCurrentHud->bananaCountIconSpin.spriteOffset -= 128; } temp_lo = bananas / 10; if (temp_lo) { - gCurrentHud->unk118 = temp_lo; - gCurrentHud->unk138 = bananas % 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk120); + gCurrentHud->bananaCountNumber1.spriteOffset = temp_lo; + gCurrentHud->bananaCountNumber2.spriteOffset = bananas % 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->bananaCountNumber2); } else { - gCurrentHud->unk118 = bananas % 10; + gCurrentHud->bananaCountNumber1.spriteOffset = bananas % 10; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk100); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->bananaCountNumber1); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } @@ -1656,13 +1669,13 @@ void render_racer_bananas(Object_Racer *racer, s32 updateRate) { */ void render_treasure_hud(Object_Racer *racer) { s32 i; - s32 sp48; + s32 prevY; - sp48 = gCurrentHud->unk410; + prevY = gCurrentHud->treasureMetre.y; if (gNumActivePlayers < 3 || (gNumActivePlayers == 3 && racer->playerIndex == PLAYER_COMPUTER)) { - gCurrentHud->unk646 = racer->characterId + 56; + gCurrentHud->challengePortrait.spriteID = racer->characterId + HUD_SPRITE_PORTRAIT; D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk640); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->challengePortrait); D_80126CD5 = FALSE; } for (i = 0; i < 10; i++) { @@ -1670,11 +1683,11 @@ void render_treasure_hud(Object_Racer *racer) { gHudColour = COLOUR_RGBA32(128, 128, 128, 128); } D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk400); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->treasureMetre); D_80126CD5 = FALSE; - gCurrentHud->unk410 -= 3.0f; + gCurrentHud->treasureMetre.y -= 3.0f; } - gCurrentHud->unk410 = sp48; + gCurrentHud->treasureMetre.y = prevY; gHudColour = COLOUR_RGBA32(255, 255, 255, 254); D_80126CD5 = FALSE; } @@ -1685,31 +1698,31 @@ void render_treasure_hud(Object_Racer *racer) { */ void render_silver_coin_counter(Object_Racer *racer, s32 updateRate) { s32 i; - s32 prevUnk5D0; + s32 prevY; - gCurrentHud->unk5D0 = (s32) gCurrentHud->unk5D0; // Rounds float down to it's int value. - prevUnk5D0 = gCurrentHud->unk5D0; + gCurrentHud->silverCoinTally.y = (s32) gCurrentHud->silverCoinTally.y; // Rounds float down to it's int value. + prevY = gCurrentHud->silverCoinTally.y; for (i = 0; i < 8; i++) { if (i >= racer->silverCoinCount) { gHudColour = COLOUR_RGBA32(128, 128, 128, 128); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk5C0); - gCurrentHud->unk5D0 -= gCurrentHud->unk5DC; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->silverCoinTally); + gCurrentHud->silverCoinTally.y -= gCurrentHud->silverCoinTally.unk1C; } if (racer->silverCoinCount == 8) { - if (gCurrentHud->unk5DB < 30) { - gCurrentHud->unk5DB += updateRate; + if (gCurrentHud->silverCoinTally.unk1B < 30) { + gCurrentHud->silverCoinTally.unk1B += updateRate; } - if (gCurrentHud->unk5DA == 0) { - if (gCurrentHud->unk5DB >= 30) { - gCurrentHud->unk5DA = 1; + if (gCurrentHud->silverCoinTally.unk1A == 0) { + if (gCurrentHud->silverCoinTally.unk1B >= 30) { + gCurrentHud->silverCoinTally.unk1A = 1; if (gHUDVoiceSoundMask == NULL) { sound_play(SOUND_VOICE_TT_GO_FOR_IT, &gHUDVoiceSoundMask); } } } } - gCurrentHud->unk5D0 = prevUnk5D0; + gCurrentHud->silverCoinTally.y = prevY; gHudColour = COLOUR_RGBA32(255, 255, 255, 254); } @@ -1723,8 +1736,8 @@ void render_race_finish_position(Object_Racer *racer, s32 updateRate) { unk800A497C *temp_s0; s8 drawPosition; - temp_a3 = (unk800A497C *) &gCurrentHud->unk700; - temp_s0 = (unk800A497C *) &gCurrentHud->unk740; + temp_a3 = (unk800A497C *) &gCurrentHud->raceFinishPosition1; + temp_s0 = (unk800A497C *) &gCurrentHud->raceFinishPosition2; // temp_s0 = &gCurrentHud->unk740; drawPosition = FALSE; switch (temp_a3->unk1A) { @@ -1777,8 +1790,8 @@ void render_race_finish_position(Object_Racer *racer, s32 updateRate) { } if (drawPosition) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 210); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) temp_a3); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) temp_s0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) temp_a3); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) temp_s0); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } @@ -1807,45 +1820,45 @@ void render_race_position(Object_Racer *racer, s32 updateRate) { } else { settings = get_settings(); place = settings->racers[D_80126D10].starting_position; - gCurrentHud->unk18 = place; + gCurrentHud->racePostion.spriteOffset = place; place++; } } if (gHUDNumPlayers < 2) { if (place < 4) { - gCurrentHud->unk38 = place - 1; + gCurrentHud->racePositionEnd.spriteOffset = place - 1; } else { - gCurrentHud->unk38 = 3; + gCurrentHud->racePositionEnd.spriteOffset = 3; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk20); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->racePositionEnd); } - scale = (gCurrentHud->unk1B + 129); + scale = (gCurrentHud->racePostion.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); + gCurrentHud->racePostion.scale = (gCurrentHud->racePostion.unk1C / 127.0f) + (1.0 + (0.5 * scale)); + prevCurrHudUnkC = gCurrentHud->racePostion.x; + gCurrentHud->racePostion.x -= (24.0f * gCurrentHud->racePostion.scale); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->racePostion); + gCurrentHud->racePostion.x = prevCurrHudUnkC; + if (gCurrentHud->racePostion.unk1A) { + if (gCurrentHud->racePostion.unk1B < 127 - (updateRate * 16)) { + gCurrentHud->racePostion.unk1B += (updateRate * 16); } else { - gCurrentHud->unk1B = 127; + gCurrentHud->racePostion.unk1B = 127; } } - if (placeIndex != gCurrentHud->unk18) { - if (gCurrentHud->unk1A && gCurrentHud->unk1B > 0) { - gCurrentHud->unk1B = -gCurrentHud->unk1B; + if (placeIndex != gCurrentHud->racePostion.spriteOffset) { + if (gCurrentHud->racePostion.unk1A && gCurrentHud->racePostion.unk1B > 0) { + gCurrentHud->racePostion.unk1B = -gCurrentHud->racePostion.unk1B; } else { - gCurrentHud->unk1B = -127; - gCurrentHud->unk1A = 1; + gCurrentHud->racePostion.unk1B = -127; + gCurrentHud->racePostion.unk1A = 1; } } - gCurrentHud->unk18 = placeIndex; - if (gCurrentHud->unk1A && gCurrentHud->unk1B == 127) { - gCurrentHud->unk1A = 0; + gCurrentHud->racePostion.spriteOffset = placeIndex; + if (gCurrentHud->racePostion.unk1A && gCurrentHud->racePostion.unk1B == 127) { + gCurrentHud->racePostion.unk1A = 0; } } @@ -1859,167 +1872,169 @@ void render_lap_count(Object_Racer *racer, s32 updateRate) { (gHUDNumPlayers <= ONE_PLAYER || racer->lap <= 0 || racer->lap_times[racer->lap] >= 180) && (gHUDNumPlayers <= ONE_PLAYER || D_800E2794[gHUDNumPlayers][racer->playerIndex] == 3)) { if (gHudLevelHeader->laps == (0, racer->countLap + 1) && gHUDNumPlayers < THREE_PLAYERS) { - gCurrentHud->unk21A += updateRate; - if (gCurrentHud->unk21A > 6) { - gCurrentHud->unk218++; - gCurrentHud->unk21A -= 6; - if (gCurrentHud->unk218 > 4) { - gCurrentHud->unk218 = 0; + gCurrentHud->lapCountFlag.unk1A += updateRate; + if (gCurrentHud->lapCountFlag.unk1A > 6) { + gCurrentHud->lapCountFlag.spriteOffset++; + gCurrentHud->lapCountFlag.unk1A -= 6; + if (gCurrentHud->lapCountFlag.spriteOffset > 4) { + gCurrentHud->lapCountFlag.spriteOffset = 0; } } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk200); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapCountFlag); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk60); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapCountLabel); if (racer->countLap >= gHudLevelHeader->laps - 1) { - gCurrentHud->unk98 = gHudLevelHeader->laps; + gCurrentHud->lapCountCurrent.spriteOffset = gHudLevelHeader->laps; } else { - gCurrentHud->unk98 = racer->countLap + 1; + gCurrentHud->lapCountCurrent.spriteOffset = racer->countLap + 1; } - gCurrentHud->unkD8 = gHudLevelHeader->laps; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk80); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unkA0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unkC0); + gCurrentHud->lapCountTotal.spriteOffset = gHudLevelHeader->laps; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapCountCurrent); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapCountSeperator); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapCountTotal); } if (gHUDNumPlayers == TWO_PLAYERS) { sprite_opaque(TRUE); } if (is_game_paused() == FALSE) { - if (racer->lap_times[racer->lap] < 30 && gCurrentHud->unk3DA == 0 && racer->raceFinished == FALSE) { + if (racer->lap_times[racer->lap] < 30 && gCurrentHud->lapTextLap.unk1A == 0 && racer->raceFinished == FALSE) { if ((racer->lap == 1) && gHudLevelHeader->laps >= 3) { - gCurrentHud->unk3DA = 2; - gCurrentHud->unk3DB = 1; - gCurrentHud->unk3DD = 0; + gCurrentHud->lapTextLap.unk1A = 2; + gCurrentHud->lapTextLap.unk1B = 1; + gCurrentHud->lapTextLap.unk1D = 0; sound_play(SOUND_WHOOSH1, NULL); switch (gHUDNumPlayers) { case ONE_PLAYER: - gCurrentHud->unk3DC = -21; - gCurrentHud->unk3FC = 32; - gCurrentHud->unk3CC = -200.0f; - gCurrentHud->unk3EC = 211.0f; + gCurrentHud->lapTextLap.unk1C = -21; + gCurrentHud->lapTextTwo.unk1C = 32; + gCurrentHud->lapTextLap.x = -200.0f; + gCurrentHud->lapTextTwo.x = 211.0f; break; case TWO_PLAYERS: - gCurrentHud->unk3DC = -16; - gCurrentHud->unk3FC = 27; - gCurrentHud->unk3CC = -200.0f; - gCurrentHud->unk3EC = 211.0f; + gCurrentHud->lapTextLap.unk1C = -16; + gCurrentHud->lapTextTwo.unk1C = 27; + gCurrentHud->lapTextLap.x = -200.0f; + gCurrentHud->lapTextTwo.x = 211.0f; break; default: if (racer->playerIndex != PLAYER_ONE && racer->playerIndex != PLAYER_THREE) { - gCurrentHud->unk3DC = 60; - gCurrentHud->unk3FC = 91; - gCurrentHud->unk3CC = -70.0f; - gCurrentHud->unk3EC = 221.0f; + gCurrentHud->lapTextLap.unk1C = 60; + gCurrentHud->lapTextTwo.unk1C = 91; + gCurrentHud->lapTextLap.x = -70.0f; + gCurrentHud->lapTextTwo.x = 221.0f; } else { - gCurrentHud->unk3DC = -90; - gCurrentHud->unk3FC = -59; - gCurrentHud->unk3CC = -220.0f; - gCurrentHud->unk3EC = 71.0f; + gCurrentHud->lapTextLap.unk1C = -90; + gCurrentHud->lapTextTwo.unk1C = -59; + gCurrentHud->lapTextLap.x = -220.0f; + gCurrentHud->lapTextTwo.x = 71.0f; } break; } } else if (gHudLevelHeader->laps == (0, racer->lap + 1) && racer->lap != 0) { - gCurrentHud->unk3DA = 3; - gCurrentHud->unk3DB = -1; - gCurrentHud->unk3DD = 0; + gCurrentHud->lapTextLap.unk1A = 3; + gCurrentHud->lapTextLap.unk1B = -1; + gCurrentHud->lapTextLap.unk1D = 0; sound_play(SOUND_WHOOSH1, NULL); switch (gHUDNumPlayers) { case ONE_PLAYER: - gCurrentHud->unk3DC = 51; - gCurrentHud->unk3BC = -41; - gCurrentHud->unk3CC = 210.0f; - gCurrentHud->unk3AC = -200.0f; + gCurrentHud->lapTextLap.unk1C = 51; + gCurrentHud->lapTextFinal.unk1C = -41; + gCurrentHud->lapTextLap.x = 210.0f; + gCurrentHud->lapTextFinal.x = -200.0f; break; case TWO_PLAYERS: - gCurrentHud->unk3DC = 41; - gCurrentHud->unk3BC = -31; - gCurrentHud->unk3CC = 210.0f; - gCurrentHud->unk3AC = -200.0f; + gCurrentHud->lapTextLap.unk1C = 41; + gCurrentHud->lapTextFinal.unk1C = -31; + gCurrentHud->lapTextLap.x = 210.0f; + gCurrentHud->lapTextFinal.x = -200.0f; break; default: if (racer->playerIndex != PLAYER_ONE && racer->playerIndex != PLAYER_THREE) { - gCurrentHud->unk3DC = 100; - gCurrentHud->unk3BC = 50; - gCurrentHud->unk3CC = 100.0f; - gCurrentHud->unk3AC = -50.0f; + gCurrentHud->lapTextLap.unk1C = 100; + gCurrentHud->lapTextFinal.unk1C = 50; + gCurrentHud->lapTextLap.x = 100.0f; + gCurrentHud->lapTextFinal.x = -50.0f; } else { - gCurrentHud->unk3DC = -50; - gCurrentHud->unk3BC = -100; - gCurrentHud->unk3CC = 50.0f; - gCurrentHud->unk3AC = -200.0f; + gCurrentHud->lapTextLap.unk1C = -50; + gCurrentHud->lapTextFinal.unk1C = -100; + gCurrentHud->lapTextLap.x = 50.0f; + gCurrentHud->lapTextFinal.x = -200.0f; } break; } } } - if (gCurrentHud->unk3DA != 0) { - if (gCurrentHud->unk3DA == 2) { - if (gCurrentHud->unk3DB == 1) { - if (gCurrentHud->unk3CC < gCurrentHud->unk3DC - (updateRate * 13)) { - gCurrentHud->unk3CC = gCurrentHud->unk3CC + (updateRate * 13); + if (gCurrentHud->lapTextLap.unk1A != 0) { + if (gCurrentHud->lapTextLap.unk1A == 2) { + if (gCurrentHud->lapTextLap.unk1B == 1) { + if (gCurrentHud->lapTextLap.x < gCurrentHud->lapTextLap.unk1C - (updateRate * 13)) { + gCurrentHud->lapTextLap.x = gCurrentHud->lapTextLap.x + (updateRate * 13); } else { - gCurrentHud->unk3CC = gCurrentHud->unk3DC; + gCurrentHud->lapTextLap.x = gCurrentHud->lapTextLap.unk1C; } - if (gCurrentHud->unk3EC > gCurrentHud->unk3FC + (updateRate * 13)) { - gCurrentHud->unk3EC = gCurrentHud->unk3EC - (updateRate * 13); + if (gCurrentHud->lapTextTwo.x > gCurrentHud->lapTextTwo.unk1C + (updateRate * 13)) { + gCurrentHud->lapTextTwo.x = gCurrentHud->lapTextTwo.x - (updateRate * 13); } else { - gCurrentHud->unk3EC = gCurrentHud->unk3FC; + gCurrentHud->lapTextTwo.x = gCurrentHud->lapTextTwo.unk1C; } if (racer->lap_times[racer->lap] >= 60) { - gCurrentHud->unk3DB = -1; + gCurrentHud->lapTextLap.unk1B = -1; sound_play(SOUND_WHOOSH1, NULL); } - if (gCurrentHud->unk3CC == ((0, gCurrentHud))->unk3DC && - gCurrentHud->unk3EC == ((0, gCurrentHud))->unk3FC && gCurrentHud->unk3DD == 0) { + if (gCurrentHud->lapTextLap.x == ((0, gCurrentHud))->lapTextLap.unk1C && + gCurrentHud->lapTextTwo.x == ((0, gCurrentHud))->lapTextTwo.unk1C && + gCurrentHud->lapTextLap.unk1D == 0) { if (gHUDVoiceSoundMask == NULL) { sound_play(SOUND_VOICE_TT_LAP2, &gHUDVoiceSoundMask); } - gCurrentHud->unk3DD = 1; + gCurrentHud->lapTextLap.unk1D = 1; } - } else if (gCurrentHud->unk3DB == -1) { - gCurrentHud->unk3CC = gCurrentHud->unk3CC - (updateRate * 13); - gCurrentHud->unk3EC = gCurrentHud->unk3EC + (updateRate * 13); - if (gCurrentHud->unk3CC < -200.0f) { - gCurrentHud->unk3DA = 0; + } else if (gCurrentHud->lapTextLap.unk1B == -1) { + gCurrentHud->lapTextLap.x -= updateRate * 13; + gCurrentHud->lapTextTwo.x += updateRate * 13; + if (gCurrentHud->lapTextLap.x < -200.0f) { + gCurrentHud->lapTextLap.unk1A = 0; } } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3E0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapTextTwo); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapTextLap); // lap gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); - } else if (gCurrentHud->unk3DA == 3) { - if (gCurrentHud->unk3DB == -1) { - if (gCurrentHud->unk3CC > gCurrentHud->unk3DC + (updateRate * 13)) { - gCurrentHud->unk3CC = gCurrentHud->unk3CC - (updateRate * 13); + } else if (gCurrentHud->lapTextLap.unk1A == 3) { + if (gCurrentHud->lapTextLap.unk1B == -1) { + if (gCurrentHud->lapTextLap.x > gCurrentHud->lapTextLap.unk1C + (updateRate * 13)) { + gCurrentHud->lapTextLap.x = gCurrentHud->lapTextLap.x - (updateRate * 13); } else { - gCurrentHud->unk3CC = gCurrentHud->unk3DC; + gCurrentHud->lapTextLap.x = gCurrentHud->lapTextLap.unk1C; } - if (gCurrentHud->unk3AC < gCurrentHud->unk3BC - (updateRate * 13)) { - gCurrentHud->unk3AC = gCurrentHud->unk3AC + (updateRate * 13); + if (gCurrentHud->lapTextFinal.x < gCurrentHud->lapTextFinal.unk1C - (updateRate * 13)) { + gCurrentHud->lapTextFinal.x += (updateRate * 13); } else { - gCurrentHud->unk3AC = gCurrentHud->unk3BC; + gCurrentHud->lapTextFinal.x = gCurrentHud->lapTextFinal.unk1C; } if (racer->lap_times[racer->lap] >= 60) { - gCurrentHud->unk3DB = 1; + gCurrentHud->lapTextLap.unk1B = 1; sound_play(SOUND_WHOOSH1, NULL); } - if (gCurrentHud->unk3CC == ((0, gCurrentHud))->unk3DC && - gCurrentHud->unk3AC == ((0, gCurrentHud))->unk3BC && gCurrentHud->unk3DD == 0) { + if (gCurrentHud->lapTextLap.x == ((0, gCurrentHud))->lapTextLap.unk1C && + gCurrentHud->lapTextFinal.x == ((0, gCurrentHud))->lapTextFinal.unk1C && + gCurrentHud->lapTextLap.unk1D == 0) { if (gHUDVoiceSoundMask == NULL) { sound_play(SOUND_VOICE_TT_FINAL_LAP, &gHUDVoiceSoundMask); } - gCurrentHud->unk3DD = 1; + gCurrentHud->lapTextLap.unk1D = 1; } - } else if (gCurrentHud->unk3DB == 1) { - gCurrentHud->unk3CC = gCurrentHud->unk3CC + (updateRate * 13); - gCurrentHud->unk3AC = gCurrentHud->unk3AC - (updateRate * 13); - if (gCurrentHud->unk3CC > 200.0f) { - gCurrentHud->unk3DA = 0; + } else if (gCurrentHud->lapTextLap.unk1B == 1) { + gCurrentHud->lapTextLap.x = gCurrentHud->lapTextLap.x + (updateRate * 13); + gCurrentHud->lapTextFinal.x -= updateRate * 13; + if (gCurrentHud->lapTextLap.x > 200.0f) { + gCurrentHud->lapTextLap.unk1A = 0; } } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3A0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapTextFinal); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->lapTextLap); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } @@ -2038,7 +2053,8 @@ void render_wrong_way_text(Object_Racer *obj, s32 updateRate) { if (gHUDNumPlayers == TWO_PLAYERS) { sprite_opaque(TRUE); } - if (obj->unk1FC > 120 && (gHUDNumPlayers || gCurrentHud->unk46C == gCurrentHud->unk47A[2]) && !is_game_paused()) { + if (obj->unk1FC > 120 && (gHUDNumPlayers || gCurrentHud->wrongWay1.unk1C == gCurrentHud->wrongWay1.x) && + !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) { @@ -2055,59 +2071,59 @@ void render_wrong_way_text(Object_Racer *obj, s32 updateRate) { gWrongWayNagTimer = 0; } } - if (gCurrentHud->unk47A[0]) { - if (gCurrentHud->unk47A[0] == 1) { - if (gCurrentHud->unk47A[1] == 1) { + if (gCurrentHud->wrongWay1.unk1A) { + if (gCurrentHud->wrongWay1.unk1A == 1) { + if (gCurrentHud->wrongWay1.unk1B == 1) { textMoveSpeed = updateRate * 13; - gCurrentHud->unk46C += textMoveSpeed; - textPosTarget = gCurrentHud->unk47A[2]; - if (gCurrentHud->unk46C > textPosTarget) { - gCurrentHud->unk46C = textPosTarget; + gCurrentHud->wrongWay1.x += textMoveSpeed; + textPosTarget = gCurrentHud->wrongWay1.unk1C; + if (gCurrentHud->wrongWay1.x > textPosTarget) { + gCurrentHud->wrongWay1.x = textPosTarget; } - gCurrentHud->unk48C -= textMoveSpeed; - textPosTarget = gCurrentHud->unk49C; - if (gCurrentHud->unk48C < textPosTarget) { - gCurrentHud->unk48C = textPosTarget; + gCurrentHud->wrongWay2.x -= textMoveSpeed; + textPosTarget = gCurrentHud->wrongWay2.unk1C; + if (gCurrentHud->wrongWay2.x < textPosTarget) { + gCurrentHud->wrongWay2.x = textPosTarget; } if (obj->unk1FC <= 90) { - gCurrentHud->unk47A[1] = -1; + gCurrentHud->wrongWay1.unk1B = -1; sound_play(SOUND_WHOOSH1, NULL); } - } else if (gCurrentHud->unk47A[1] == -1) { + } else if (gCurrentHud->wrongWay1.unk1B == -1) { textMoveSpeed = updateRate * 13; - gCurrentHud->unk46C -= textMoveSpeed; - gCurrentHud->unk48C += textMoveSpeed; - if (gCurrentHud->unk46C < -200.0f) { - gCurrentHud->unk47A[0] = 0; + gCurrentHud->wrongWay1.x -= textMoveSpeed; + gCurrentHud->wrongWay2.x += textMoveSpeed; + if (gCurrentHud->wrongWay1.x < -200.0f) { + gCurrentHud->wrongWay1.unk1A = 0; } } if (!is_game_paused()) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk460); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk480); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->wrongWay1); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->wrongWay2); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } } else if (obj->unk1FC > 120) { - gCurrentHud->unk47A[0] = 1; - gCurrentHud->unk47A[1] = 1; - gCurrentHud->unk47A[2] = -31; - gCurrentHud->unk49C = 52; - gCurrentHud->unk47A[3] = 0; + gCurrentHud->wrongWay1.unk1A = 1; + gCurrentHud->wrongWay1.unk1B = 1; + gCurrentHud->wrongWay1.unk1C = -31; + gCurrentHud->wrongWay2.unk1C = 52; + gCurrentHud->wrongWay1.unk1D = 0; if (gHUDNumPlayers == TWO_PLAYERS) { - gCurrentHud->unk47A[2] = -21; - gCurrentHud->unk49C = 42; + gCurrentHud->wrongWay1.unk1C = -21; + gCurrentHud->wrongWay2.unk1C = 42; } else if (gHUDNumPlayers > TWO_PLAYERS) { if (obj->playerIndex == PLAYER_ONE || obj->playerIndex == PLAYER_THREE) { - gCurrentHud->unk47A[2] = -100; - gCurrentHud->unk49C = -55; + gCurrentHud->wrongWay1.unk1C = -100; + gCurrentHud->wrongWay2.unk1C = -55; } else { - gCurrentHud->unk47A[2] = 59; - gCurrentHud->unk49C = 104; + gCurrentHud->wrongWay1.unk1C = 59; + gCurrentHud->wrongWay2.unk1C = 104; } } - gCurrentHud->unk48C = gCurrentHud->unk49C + 200; - gCurrentHud->unk46C = gCurrentHud->unk49C - 200; + gCurrentHud->wrongWay2.x = gCurrentHud->wrongWay2.unk1C + 200; + gCurrentHud->wrongWay1.x = gCurrentHud->wrongWay2.unk1C - 200; sound_play(SOUND_WHOOSH1, NULL); } sprite_opaque(FALSE); @@ -2116,8 +2132,8 @@ void render_wrong_way_text(Object_Racer *obj, s32 updateRate) { void func_800A5F18(Object_Racer *racer) { s32 sp24; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk5E0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk600); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->challengeFinishPosition1); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->challengeFinishPosition2); if (!(get_current_level_race_type() & RACETYPE_CHALLENGE_BATTLE) && (is_in_two_player_adventure() == 0)) { get_racer_objects(&sp24); if (gNumActivePlayers >= 2 && @@ -2125,17 +2141,18 @@ void func_800A5F18(Object_Racer *racer) { set_text_font(FONT_COLOURFUL); if (sp24 != racer->unk1AC) { set_text_colour(255, 255, 255, 0, 255); - draw_text(&gHUDCurrDisplayList, gCurrentHud->unk16C - 40.0f, gCurrentHud->unk170, "RACE", + draw_text(&gHUDCurrDisplayList, gCurrentHud->raceTimeNumber.x - 40.0f, gCurrentHud->raceTimeNumber.y, + "RACE", ALIGN_TOP_LEFT); + render_timer(gCurrentHud->raceTimeNumber.x, gCurrentHud->raceTimeNumber.y, + gCurrentHud->raceTimeNumber.unk1A, gCurrentHud->raceTimeNumber.unk1B, + gCurrentHud->raceTimeNumber.unk1C, 1); + draw_text(&gHUDCurrDisplayList, gCurrentHud->lapTimeText.x - 40.0f, gCurrentHud->lapTimeText.y, "LAP", 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); + render_timer(gCurrentHud->lapTimeText.x, gCurrentHud->lapTimeText.y, gCurrentHud->lapTimeText.unk1A, + gCurrentHud->lapTimeText.unk1B, gCurrentHud->lapTimeText.unk1C, 1); } else { - draw_text(&gHUDCurrDisplayList, gCurrentHud->unk16C - 35.0f, gCurrentHud->unk170, "DID NOT FINISH", - ALIGN_TOP_LEFT); + draw_text(&gHUDCurrDisplayList, gCurrentHud->raceTimeNumber.x - 35.0f, gCurrentHud->raceTimeNumber.y, + "DID NOT FINISH", ALIGN_TOP_LEFT); } } } @@ -2163,20 +2180,20 @@ void func_800A6254(Object_Racer *racer, s32 updateRate) { raceType = get_current_level_race_type(); if (is_in_two_player_adventure() && is_postrace_viewport_active() && D_80127189 == 0) { if (func_8000E184()) { - gCurrentHud->unk5F0 -= 108.0f; - gCurrentHud->unk610 -= 108.0f; - gCurrentHud->unk170 -= 108.0f; - gCurrentHud->unk2F0 -= 108.0f; + gCurrentHud->challengeFinishPosition1.y -= 108.0f; + gCurrentHud->challengeFinishPosition2.y -= 108.0f; + gCurrentHud->raceTimeNumber.y -= 108.0f; + gCurrentHud->lapTimeText.y -= 108.0f; } - gCurrentHud->unk5F0 += 35.0f; - gCurrentHud->unk610 += 35.0f; - gCurrentHud->unk170 += 35.0f; - gCurrentHud->unk2F0 += 35.0f; + gCurrentHud->challengeFinishPosition1.y += 35.0f; + gCurrentHud->challengeFinishPosition2.y += 35.0f; + gCurrentHud->raceTimeNumber.y += 35.0f; + gCurrentHud->lapTimeText.y += 35.0f; D_800E2770[0].playerIndex = racer->playerIndex; D_80127189 = 1; } - switch (gCurrentHud->unk5FA) { + switch (gCurrentHud->challengeFinishPosition1.unk1A) { case 0: if (!(raceType & RACETYPE_CHALLENGE_BATTLE)) { D_800E2770[0].volume = 127; @@ -2187,34 +2204,34 @@ void func_800A6254(Object_Racer *racer, s32 updateRate) { switch (gHUDNumPlayers) { case 0: case 1: - gCurrentHud->unk5FD = -20; - gCurrentHud->unk17D = -15; - gCurrentHud->unk2FD = -15; + gCurrentHud->challengeFinishPosition1.unk1D = -20; + gCurrentHud->raceTimeNumber.unk1D = -15; + gCurrentHud->lapTimeText.unk1D = -15; break; default: if (racer->playerIndex == PLAYER_ONE || racer->playerIndex == PLAYER_THREE) { - gCurrentHud->unk5FD = -90; - gCurrentHud->unk17D = -85; - gCurrentHud->unk2FD = -85; + gCurrentHud->challengeFinishPosition1.unk1D = -90; + gCurrentHud->raceTimeNumber.unk1D = -85; + gCurrentHud->lapTimeText.unk1D = -85; } else { - gCurrentHud->unk5FD = 55; - gCurrentHud->unk17D = 60; - gCurrentHud->unk2FD = 60; + gCurrentHud->challengeFinishPosition1.unk1D = 55; + gCurrentHud->raceTimeNumber.unk1D = 60; + gCurrentHud->lapTimeText.unk1D = 60; } break; } if (osTvType == TV_TYPE_PAL) { - gCurrentHud->unk5FD -= 4; - gCurrentHud->unk17D -= 4; - gCurrentHud->unk2FD -= 4; + gCurrentHud->challengeFinishPosition1.unk1D -= 4; + gCurrentHud->raceTimeNumber.unk1D -= 4; + gCurrentHud->lapTimeText.unk1D -= 4; } if (racer->unk1AC < 4) { - gCurrentHud->unk618 = racer->unk1AC - 1; + gCurrentHud->challengeFinishPosition2.spriteOffset = racer->unk1AC - 1; } else { - gCurrentHud->unk618 = 3; + gCurrentHud->challengeFinishPosition2.spriteOffset = 3; } - gCurrentHud->unk5F8 = racer->unk1AC - 1; - gCurrentHud->unk5FA = 1; + gCurrentHud->challengeFinishPosition1.spriteOffset = racer->unk1AC - 1; + gCurrentHud->challengeFinishPosition1.unk1A = 1; switch (gNumActivePlayers) { case 2: var_f12 = 360.0f; @@ -2238,10 +2255,10 @@ void func_800A6254(Object_Racer *racer, s32 updateRate) { var_f2 -= 9.0f; } } - gCurrentHud->unk16C = var_f12; - gCurrentHud->unk170 = var_f0; - gCurrentHud->unk2EC = var_f14; - gCurrentHud->unk2F0 = var_f2; + gCurrentHud->raceTimeNumber.x = var_f12; + gCurrentHud->raceTimeNumber.y = var_f0; + gCurrentHud->lapTimeText.x = var_f14; + gCurrentHud->lapTimeText.y = var_f2; break; case 3: case 4: @@ -2271,10 +2288,10 @@ void func_800A6254(Object_Racer *racer, s32 updateRate) { var_f2 -= 9.0f; } } - gCurrentHud->unk16C = var_f12; - gCurrentHud->unk170 = var_f0; - gCurrentHud->unk2EC = var_f14; - gCurrentHud->unk2F0 = var_f2; + gCurrentHud->raceTimeNumber.x = var_f12; + gCurrentHud->raceTimeNumber.y = var_f0; + gCurrentHud->lapTimeText.x = var_f14; + gCurrentHud->lapTimeText.y = var_f2; break; } if (gNumActivePlayers != 1) { @@ -2288,44 +2305,45 @@ void func_800A6254(Object_Racer *racer, s32 updateRate) { } } get_timestamp_from_frames(fastestLapTime, &minutes, &seconds, &hundredths); - gCurrentHud->unk2FA = minutes; - gCurrentHud->unk2FB = seconds; - gCurrentHud->unk2FC = hundredths; + gCurrentHud->lapTimeText.unk1A = minutes; + gCurrentHud->lapTimeText.unk1B = seconds; + gCurrentHud->lapTimeText.unk1C = hundredths; get_timestamp_from_frames(totalRaceTime, &minutes, &seconds, &hundredths); - gCurrentHud->unk17A = minutes; - gCurrentHud->unk17B = seconds; - gCurrentHud->unk17C = hundredths; + gCurrentHud->raceTimeNumber.unk1A = minutes; + gCurrentHud->raceTimeNumber.unk1B = seconds; + gCurrentHud->raceTimeNumber.unk1C = hundredths; } break; case 1: var_a2 = TRUE; - if (gCurrentHud->unk5EC < (gCurrentHud->unk5FD - (updateRate * 13)) + 160) { + if (gCurrentHud->challengeFinishPosition1.x < + (gCurrentHud->challengeFinishPosition1.unk1D - (updateRate * 13)) + 160) { var_v1 = (updateRate * 13); var_a2 = FALSE; } else { - var_v1 = (gCurrentHud->unk5FD + 160) - gCurrentHud->unk5EC; + var_v1 = (gCurrentHud->challengeFinishPosition1.unk1D + 160) - gCurrentHud->challengeFinishPosition1.x; } - gCurrentHud->unk5EC += var_v1; - gCurrentHud->unk60C += var_v1; + gCurrentHud->challengeFinishPosition1.x += var_v1; + gCurrentHud->challengeFinishPosition2.x += var_v1; if (gNumActivePlayers != 1) { - if ((gCurrentHud->unk17D + (updateRate * 13) + 160) < gCurrentHud->unk16C) { + if ((gCurrentHud->raceTimeNumber.unk1D + (updateRate * 13) + 160) < gCurrentHud->raceTimeNumber.x) { var_a2 = FALSE; } else { - var_v1 = gCurrentHud->unk16C - (gCurrentHud->unk17D + 160); + var_v1 = gCurrentHud->raceTimeNumber.x - (gCurrentHud->raceTimeNumber.unk1D + 160); } - gCurrentHud->unk16C -= var_v1; - if (gCurrentHud->unk2EC < (gCurrentHud->unk2FD - var_v1) + 160) { + gCurrentHud->raceTimeNumber.x -= var_v1; + if (gCurrentHud->lapTimeText.x < (gCurrentHud->lapTimeText.unk1D - var_v1) + 160) { var_a2 = FALSE; } else { - var_v1 = (gCurrentHud->unk2FD + 160) - gCurrentHud->unk2EC; + var_v1 = (gCurrentHud->lapTimeText.unk1D + 160) - gCurrentHud->lapTimeText.x; } - gCurrentHud->unk2EC += var_v1; + gCurrentHud->lapTimeText.x += var_v1; } temp_v0_4 = 2; // fakematch? if (var_a2) { - gCurrentHud->unk5FA = temp_v0_4; // fakematch? Why not just set directly to 2? - gCurrentHud->unk5FB = -120; - gCurrentHud->unk5FC = 0; + gCurrentHud->challengeFinishPosition1.unk1A = temp_v0_4; // fakematch? Why not just set directly to 2? + gCurrentHud->challengeFinishPosition1.unk1B = -120; + gCurrentHud->challengeFinishPosition1.unk1C = 0; if (gHUDVoiceSoundMask == NULL) { if (raceType == RACETYPE_CHALLENGE_BATTLE) { switch (racer->unk1AC) { @@ -2348,33 +2366,33 @@ void func_800A6254(Object_Racer *racer, s32 updateRate) { func_800A5F18(racer); break; case 2: - gCurrentHud->unk5FB += updateRate; + gCurrentHud->challengeFinishPosition1.unk1B += updateRate; - if (gCurrentHud->unk5FB >= 120) { - gCurrentHud->unk5FB = -120; - gCurrentHud->unk5FC++; + if (gCurrentHud->challengeFinishPosition1.unk1B >= 120) { + gCurrentHud->challengeFinishPosition1.unk1B = -120; + gCurrentHud->challengeFinishPosition1.unk1C++; } - if (gCurrentHud->unk5FC == 2) { + if (gCurrentHud->challengeFinishPosition1.unk1C == 2) { if (gNumActivePlayers == 1 || is_in_two_player_adventure()) { - gCurrentHud->unk5FA = 3; + gCurrentHud->challengeFinishPosition1.unk1A = 3; sound_play(SOUND_WHOOSH1, NULL); } else { - gCurrentHud->unk5FA = 4; + gCurrentHud->challengeFinishPosition1.unk1A = 4; } } func_800A5F18(racer); break; case 3: if (raceType == RACETYPE_CHALLENGE_BATTLE) { - gCurrentHud->unk5FA = 4; + gCurrentHud->challengeFinishPosition1.unk1A = 4; } else { - gCurrentHud->unk5EC -= (updateRate * 13); - gCurrentHud->unk60C -= (updateRate * 13); - if (gCurrentHud->unk5EC < -200.0f) { - gCurrentHud->unk5FA = 4; + gCurrentHud->challengeFinishPosition1.x -= (updateRate * 13); + gCurrentHud->challengeFinishPosition2.x -= (updateRate * 13); + if (gCurrentHud->challengeFinishPosition1.x < -200.0f) { + gCurrentHud->challengeFinishPosition1.unk1A = 4; } - gCurrentHud->unk16C += (updateRate * 13); - gCurrentHud->unk2EC += (updateRate * 13); + gCurrentHud->raceTimeNumber.x += (updateRate * 13); + gCurrentHud->lapTimeText.x += (updateRate * 13); } func_800A5F18(racer); break; @@ -2382,8 +2400,8 @@ void func_800A6254(Object_Racer *racer, s32 updateRate) { if (racer->playerIndex == D_800E2770[0].playerIndex) { D_800E2770[0].unk3 = -1; } - gCurrentHud->unk5FA = 5; - gCurrentHud->unk5FB = 0; + gCurrentHud->challengeFinishPosition1.unk1A = 5; + gCurrentHud->challengeFinishPosition1.unk1B = 0; func_800A5F18(racer); break; default: @@ -2417,68 +2435,68 @@ void play_time_trial_end_message(s16 *playerID) { void render_time_trial_finish(Object_Racer *racer, s32 updateRate) { s32 temp; - switch (gCurrentHud->unk1DA) { + switch (gCurrentHud->raceEndFinish.unk1A) { case 0: D_800E2770->volume = 127; D_800E2770->unk3 = 0; D_800E2770->playerIndex = (s8) racer->playerIndex; sound_play(SOUND_WHOOSH1, NULL); if (gHUDNumPlayers == 0 || gHUDNumPlayers == 1) { - gCurrentHud->unk1CC = -200.0f; - gCurrentHud->unk1DD = 0; + gCurrentHud->raceEndFinish.x = -200.0f; + gCurrentHud->raceEndFinish.unk1D = 0; } else { if ((racer->playerIndex == 0) || (racer->playerIndex == 2)) { - gCurrentHud->unk1DD = -80; - gCurrentHud->unk1CC = -200.0f; + gCurrentHud->raceEndFinish.unk1D = -80; + gCurrentHud->raceEndFinish.x = -200.0f; } else { - gCurrentHud->unk1DD = 80; - gCurrentHud->unk1CC = -40.0f; + gCurrentHud->raceEndFinish.unk1D = 80; + gCurrentHud->raceEndFinish.x = -40.0f; } } - gCurrentHud->unk1DA = 1; + gCurrentHud->raceEndFinish.unk1A = 1; return; case 1: temp = (updateRate * 13); - if (gCurrentHud->unk1CC < gCurrentHud->unk1DD - temp) { - gCurrentHud->unk1CC += temp; + if (gCurrentHud->raceEndFinish.x < gCurrentHud->raceEndFinish.unk1D - temp) { + gCurrentHud->raceEndFinish.x += temp; } else { - gCurrentHud->unk1CC = gCurrentHud->unk1DD; - gCurrentHud->unk1DA = 2; - gCurrentHud->unk1DB = -120; + gCurrentHud->raceEndFinish.x = gCurrentHud->raceEndFinish.unk1D; + gCurrentHud->raceEndFinish.unk1A = 2; + gCurrentHud->raceEndFinish.unk1B = -120; if (gHUDVoiceSoundMask == NULL && D_80126D71 == 0) { play_time_trial_end_message(&racer->playerIndex); } } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->raceEndFinish); return; case 2: - gCurrentHud->unk1DB += updateRate; - if (gCurrentHud->unk1DB >= 120) { - gCurrentHud->unk1DA = 3; + gCurrentHud->raceEndFinish.unk1B += updateRate; + if (gCurrentHud->raceEndFinish.unk1B >= 120) { + gCurrentHud->raceEndFinish.unk1A = 3; if ((gHUDNumPlayers == 0) || (gHUDNumPlayers == 1)) { - gCurrentHud->unk1DD = 56; + gCurrentHud->raceEndFinish.unk1D = 56; } else { if ((racer->playerIndex == 0) || (racer->playerIndex == 2)) { - gCurrentHud->unk1DD = 56; + gCurrentHud->raceEndFinish.unk1D = 56; } else { - gCurrentHud->unk1DD = -40; + gCurrentHud->raceEndFinish.unk1D = -40; } } sound_play(SOUND_WHOOSH1, NULL); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->raceEndFinish); return; case 3: - gCurrentHud->unk1CC -= updateRate * 13; - if (gCurrentHud->unk1CC < gCurrentHud->unk1DD) { - gCurrentHud->unk1DA = 4; + gCurrentHud->raceEndFinish.x -= updateRate * 13; + if (gCurrentHud->raceEndFinish.x < gCurrentHud->raceEndFinish.unk1D) { + gCurrentHud->raceEndFinish.unk1A = 4; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->raceEndFinish); return; case 4: D_800E2770->unk3 = -1; - gCurrentHud->unk1DA = 5; - gCurrentHud->unk1DB = 0; + gCurrentHud->raceEndFinish.unk1A = 5; + gCurrentHud->raceEndFinish.unk1B = 0; return; default: return; @@ -2502,14 +2520,14 @@ void render_balloon_count(UNUSED Object_Racer *racer) { balloonTickTimer = 840; } if (settings->cutsceneFlags & CUTSCENE_ADVENTURE_TWO) { - gCurrentHud->unk266 = 69; // Use the adventure two balloon sprite. + gCurrentHud->balloonCountIcon.spriteID = HUD_SPRITE_BALLOON_DIAMOND; // Use the adventure two balloon sprite. } if (get_cutscene_id() == 10 && get_balloon_cutscene_timer() < balloonTickTimer) { balloonCount = *settings->balloonsPtr - 1; } else { balloonCount = *settings->balloonsPtr; if (get_cutscene_id() == 10) { - if (get_balloon_cutscene_timer() < balloonTickTimer + 8 && D_80126D44 == 0) { + if (get_balloon_cutscene_timer() < balloonTickTimer + 8 && D_80126D44 == NULL) { sound_play(SOUND_HUD_LAP_TICK, &D_80126D44); } } @@ -2519,21 +2537,22 @@ void render_balloon_count(UNUSED Object_Racer *racer) { } div = balloonCount / 10; if (div != 0) { - gCurrentHud->unk2B8 = div; - gCurrentHud->unk2D8 = balloonCount % 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk2C0); + gCurrentHud->balloonCountNumber1.spriteOffset = div; + gCurrentHud->balloonCountNumber2.spriteOffset = balloonCount % 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->balloonCountNumber2); } else { - gCurrentHud->unk2B8 = balloonCount % 10; + gCurrentHud->balloonCountNumber1.spriteOffset = balloonCount % 10; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk2A0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->balloonCountNumber1); set_viewport_tv_type(TV_TYPE_NTSC); if (osTvType == TV_TYPE_PAL) { sprite_opaque(TRUE); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk260); + // gCurrentHud->balloonCountIcon.scale += 0.001f; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->balloonCountIcon); sprite_opaque(FALSE); set_viewport_tv_type(TV_TYPE_PAL); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk280); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->balloonCountX); } /** @@ -2576,69 +2595,70 @@ void render_weapon_hud(Object *obj, s32 updateRate) { if (racer->raceFinished == FALSE) { set_viewport_tv_type(TV_TYPE_NTSC); temp_a0 = (racer->balloon_type * 3) + (racer->balloon_level); - if (gCurrentHud->unk5D != racer->balloon_level) { + if (gCurrentHud->weaponDisplay.unk1D != racer->balloon_level) { if (racer->balloon_level == 0) { - gCurrentHud->unk5C = 120; + gCurrentHud->weaponDisplay.unk1C = 120; } else if (gNumActivePlayers == 1) { - gCurrentHud->unk5C = 0; + gCurrentHud->weaponDisplay.unk1C = 0; } else { - gCurrentHud->unk5C = 120; + gCurrentHud->weaponDisplay.unk1C = 120; } - gCurrentHud->unk5D = racer->balloon_level; + gCurrentHud->weaponDisplay.unk1D = racer->balloon_level; } 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; + if (gCurrentHud->weaponDisplay.unk1B < 16 && racer->unk170 == 0) { + gCurrentHud->weaponDisplay.z_rotation = gCurrentHud->weaponDisplay.unk1B << 12; + gCurrentHud->weaponDisplay.scale = (gCurrentHud->weaponDisplay.unk1B * 0.04687) + 0.25; } else { - gCurrentHud->unk44 = 0; - gCurrentHud->unk48 = 1.0f; + gCurrentHud->weaponDisplay.z_rotation = 0; + gCurrentHud->weaponDisplay.scale = 1.0f; } - gCurrentHud->unk58 = temp_a0; - gCurrentHud->unk5B += updateRate; - if (gCurrentHud->unk5B > 16) { - gCurrentHud->unk5B = 16; - gCurrentHud->unk5C += updateRate; - if (gCurrentHud->unk5C > 120) { - gCurrentHud->unk5C = 120; + gCurrentHud->weaponDisplay.spriteOffset = temp_a0; + gCurrentHud->weaponDisplay.unk1B += updateRate; + if (gCurrentHud->weaponDisplay.unk1B > 16) { + gCurrentHud->weaponDisplay.unk1B = 16; + gCurrentHud->weaponDisplay.unk1C += updateRate; + if (gCurrentHud->weaponDisplay.unk1C > 120) { + gCurrentHud->weaponDisplay.unk1C = 120; } else if (gHUDNumPlayers == ONE_PLAYER) { - gCurrentHud->unk48 += 0.18 * sins_f(((f32) gCurrentHud->unk5C * 682.6583 * 4.0)); + gCurrentHud->weaponDisplay.scale += + 0.18 * sins_f(((f32) gCurrentHud->weaponDisplay.unk1C * 682.6583 * 4.0)); } } if (gHUDNumPlayers > ONE_PLAYER) { - gCurrentHud->unk48 *= 0.75; + gCurrentHud->weaponDisplay.scale *= 0.75; } - if (gCurrentHud->unk48 != 1.0) { + if (gCurrentHud->weaponDisplay.scale != 1.0) { sprite_opaque(TRUE); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk40); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->weaponDisplay); sprite_opaque(FALSE); if (racer->balloon_quantity > 3) { - gCurrentHud->unk63A = -128; + gCurrentHud->weaponQuantity.unk1A = -128; } if (racer->balloon_quantity < 3) { - gCurrentHud->unk63A -= updateRate; + gCurrentHud->weaponQuantity.unk1A -= updateRate; } if (racer->balloon_quantity >= 3 || - ((((gCurrentHud->unk63A + 128) % 32) < 20) && racer->balloon_quantity != 1)) { + ((((gCurrentHud->weaponQuantity.unk1A + 128) % 32) < 20) && racer->balloon_quantity != 1)) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - gCurrentHud->unk638 = racer->balloon_quantity - 1; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk620); + gCurrentHud->weaponQuantity.spriteOffset = racer->balloon_quantity - 1; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->weaponQuantity); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } else { - if (gCurrentHud->unk5B > 0) { - gCurrentHud->unk44 = gCurrentHud->unk5B << 12; - gCurrentHud->unk48 = (gCurrentHud->unk5B * 0.04687) + 0.25; - gCurrentHud->unk5B -= updateRate; - gCurrentHud->unk58 = temp_a0; - if (gCurrentHud->unk5B < 0) { - gCurrentHud->unk5B = 0; + if (gCurrentHud->weaponDisplay.unk1B > 0) { + gCurrentHud->weaponDisplay.z_rotation = gCurrentHud->weaponDisplay.unk1B << 12; + gCurrentHud->weaponDisplay.scale = (gCurrentHud->weaponDisplay.unk1B * 0.04687) + 0.25; + gCurrentHud->weaponDisplay.unk1B -= updateRate; + gCurrentHud->weaponDisplay.spriteOffset = temp_a0; + if (gCurrentHud->weaponDisplay.unk1B < 0) { + gCurrentHud->weaponDisplay.unk1B = 0; } if (gHUDNumPlayers != ONE_PLAYER) { - gCurrentHud->unk48 /= 2; + gCurrentHud->weaponDisplay.scale /= 2; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk40); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->weaponDisplay); } } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); @@ -2651,24 +2671,21 @@ void render_weapon_hud(Object *obj, s32 updateRate) { */ void render_magnet_reticle(Object *racerObj) { unk80068514_arg4 *entry; - unk80126CDC *hud; + HudElement *hud; Object_Racer *racer; - s32 hudElementIndex; if (entry) {} // Fakematch racer = &racerObj->unk64->racer; if (racer->magnetTargetObj != NULL && get_current_viewport() == racer->playerIndex) { - 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]; + hud = &gCurrentHud->magnetReticle; + hud->x = racer->magnetTargetObj->segment.trans.x_position; + hud->y = racer->magnetTargetObj->segment.trans.y_position; + hud->z = racer->magnetTargetObj->segment.trans.z_position; + entry = gAssetHudElements->entry[hud->spriteID]; if (entry == NULL) { return; } - gAssetHudElementStaleCounter[hudElementIndex] = 0; - hud = (unk80126CDC *) &hud->unk220; + gAssetHudElementStaleCounter[hud->spriteID] = 0; func_80066CDC(&gHUDCurrDisplayList, &gHUDCurrMatrix); matrix_world_origin(&gHUDCurrDisplayList, &gHUDCurrMatrix); render_sprite_billboard(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (Object *) hud, entry, @@ -2692,7 +2709,7 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { if (!(gHUDNumPlayers != ONE_PLAYER && D_800E2794[gHUDNumPlayers][racer->playerIndex] != 1) || (gHUDNumPlayers > ONE_PLAYER && racer->lap > 0 && racer->lap_times[racer->lap] < 180)) { if (racer->raceFinished == FALSE) { - timerHideCounter = gCurrentHud->unk15A + 127; + timerHideCounter = gCurrentHud->raceTimeLabel.unk1A + 127; if (racer->lap > 0 && racer->lap_times[racer->lap] < 180 && racer->lap < gHudLevelHeader->laps) { stopwatchTimer = racer->lap_times[racer->lap - 1]; countingDown = TRUE; @@ -2705,11 +2722,11 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { stopwatchTimer += racer->lap_times[i]; } countingDown = stopwatchTimer == 0 || racer->raceFinished || is_game_paused(); - gCurrentHud->unk15A = -127; + gCurrentHud->raceTimeLabel.unk1A = -127; timerHideCounter = 0; } if (gHUDNumPlayers == ONE_PLAYER) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk140); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->raceTimeLabel); } if (normalise_time(36000) < stopwatchTimer) { stopwatchTimer = normalise_time(36000); @@ -2721,7 +2738,7 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { } else { timerHideCounter = 0; } - gCurrentHud->unk15A = timerHideCounter - 127; + gCurrentHud->raceTimeLabel.unk1A = timerHideCounter - 127; if ((timerHideCounter % 30) > 20) { gHideRaceTimer = TRUE; return; @@ -2734,17 +2751,19 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { } } } else { - hundredths = gCurrentHud->unk15B + ((hundredths / 10) * 10); - gCurrentHud->unk15B = gCurrentHud->unk15B + 1; - if (gCurrentHud->unk15B >= 10) { - gCurrentHud->unk15B = 0; + hundredths = gCurrentHud->raceTimeLabel.unk1B + ((hundredths / 10) * 10); + gCurrentHud->raceTimeLabel.unk1B = gCurrentHud->raceTimeLabel.unk1B + 1; + if (gCurrentHud->raceTimeLabel.unk1B >= 10) { + gCurrentHud->raceTimeLabel.unk1B = 0; } } if (gNumActivePlayers == 1) { - render_timer(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 0); + render_timer(gCurrentHud->raceTimeNumber.x, gCurrentHud->raceTimeNumber.y, minutes, seconds, hundredths, + FALSE); } else { - render_timer(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 1); + render_timer(gCurrentHud->raceTimeNumber.x, gCurrentHud->raceTimeNumber.y, minutes, seconds, hundredths, + TRUE); } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } @@ -2754,9 +2773,9 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { /** * 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) { +void render_timer(s32 x, s32 y, s32 minutes, s32 seconds, s32 hundredths, s32 smallFont) { UNUSED s32 pad; - unk80126CDC_entry entry2; + HudElementBase entry2; s32 unk14; s32 unk10; s32 unkC; @@ -2764,60 +2783,60 @@ void render_timer(s32 arg0, s32 arg1, s32 minutes, s32 seconds, s32 hundredths, s32 var_s4; s32 unk0; - entry2.unkC = arg0; - entry2.unk10 = arg1; - entry2.unk4 = 0; - entry2.unk2 = 0; - entry2.unk0 = 0; - entry2.unk8 = 1.0f; - entry2.unk14 = 0.0f; - if (!someBool) { + entry2.x = x; + entry2.y = y; + entry2.z_rotation = 0; + entry2.x_rotation = 0; + entry2.y_rotation = 0; + entry2.scale = 1.0f; + entry2.z = 0.0f; + if (!smallFont) { unk14 = 11; unk10 = 10; unkC = 10; unk8 = 2; - var_s4 = 9; - unk0 = 11; + var_s4 = HUD_ASSET_9; + unk0 = HUD_ASSET_11; } else { unk14 = 10; unk10 = 8; unkC = 7; unk8 = 0; - var_s4 = 10; - unk0 = 12; + var_s4 = HUD_ASSET_10; + unk0 = HUD_ASSET_12; } - entry2.unk6 = var_s4; - entry2.unk18 = minutes / 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); - entry2.unkC += unk14; - entry2.unk18 = minutes % 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); - entry2.unk18 = 0; - entry2.unkC += unk10; - entry2.unk10 += unk8; - entry2.unk6 = unk0; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); - entry2.unk6 = var_s4; - entry2.unkC += unkC; - entry2.unk10 -= unk8; - entry2.unk18 = seconds / 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); - entry2.unkC += unk14; - entry2.unk18 = seconds % 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); - entry2.unk18 = 0; - entry2.unkC += unk10; - entry2.unk10 += unk8; - entry2.unk6 = (s16) unk0; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); - entry2.unk6 = var_s4; - entry2.unkC += unkC; - entry2.unk10 -= unk8; - entry2.unk18 = hundredths / 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); - entry2.unkC += unk14; - entry2.unk18 = hundredths % 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &entry2); + entry2.spriteID = var_s4; + entry2.spriteOffset = minutes / 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); + entry2.x += unk14; + entry2.spriteOffset = minutes % 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); + entry2.spriteOffset = 0; + entry2.x += unk10; + entry2.y += unk8; + entry2.spriteID = unk0; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); + entry2.spriteID = var_s4; + entry2.x += unkC; + entry2.y -= unk8; + entry2.spriteOffset = seconds / 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); + entry2.x += unk14; + entry2.spriteOffset = seconds % 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); + entry2.spriteOffset = 0; + entry2.x += unk10; + entry2.y += unk8; + entry2.spriteID = unk0; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); + entry2.spriteID = var_s4; + entry2.x += unkC; + entry2.y -= unk8; + entry2.spriteOffset = hundredths / 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); + entry2.x += unk14; + entry2.spriteOffset = hundredths % 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (HudElement *) &entry2); } /** @@ -2901,8 +2920,8 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u gAssetHudElementStaleCounter[HUD_ELEMENT_UNK_11] = 0; D_80127180 = 0; - if (D_80126CD3 & 2) { - mapOpacity = 255.0f - ((D_80126CD0 * 255.0f) / D_8012718B); + if (gMinimapXlu & 2) { + mapOpacity = 255.0f - ((gMinimapOpacity * 255.0f) / gMinimapOpacityTarget); } else { mapOpacity = 255; } @@ -2942,26 +2961,26 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } } if (tempVar4 != NULL) { - temp_s0 = gCurrentHud->unk64C; - temp_s1 = gCurrentHud->unk650; - spF4 = gCurrentHud->unk66C; - spF0 = gCurrentHud->unk670; - gCurrentHud->unk64C = 225.0f; - gCurrentHud->unk66C = 221.0f; - gCurrentHud->unk670 = 197.0f; - gCurrentHud->unk650 = 165.0f; + temp_s0 = gCurrentHud->challengePortrait.x; + temp_s1 = gCurrentHud->challengePortrait.y; + spF4 = gCurrentHud->eggChallengeIcon.x; + spF0 = gCurrentHud->eggChallengeIcon.y; + gCurrentHud->challengePortrait.x = 225.0f; + gCurrentHud->eggChallengeIcon.x = 221.0f; + gCurrentHud->eggChallengeIcon.y = 197.0f; + gCurrentHud->challengePortrait.y = 165.0f; if (osTvType == TV_TYPE_PAL) { - gCurrentHud->unk64C -= 4.0f; - gCurrentHud->unk66C -= 4.0f; - gCurrentHud->unk650 *= 1.1; - gCurrentHud->unk670 *= 1.1; + gCurrentHud->challengePortrait.x -= 4.0f; + gCurrentHud->eggChallengeIcon.x -= 4.0f; + gCurrentHud->challengePortrait.y *= 1.1; + gCurrentHud->eggChallengeIcon.y *= 1.1; } func_800A19A4(tempVar4, updateRate); gHudColour = COLOUR_RGBA32(255, 255, 255, 254); - gCurrentHud->unk64C = temp_s0; - gCurrentHud->unk650 = temp_s1; - gCurrentHud->unk66C = spF4; - gCurrentHud->unk670 = spF0; + gCurrentHud->challengePortrait.x = temp_s0; + gCurrentHud->challengePortrait.y = temp_s1; + gCurrentHud->eggChallengeIcon.x = spF4; + gCurrentHud->eggChallengeIcon.y = spF0; } } } @@ -2986,62 +3005,63 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } if (curRacerObj != NULL) { gCurrentHud = gPlayerHud[PLAYER_FOUR]; - spE4 = gCurrentHud->unk64C; - spE0 = gCurrentHud->unk650; + spE4 = gCurrentHud->challengePortrait.x; + spE0 = gCurrentHud->challengePortrait.y; sprite_opaque(FALSE); set_ortho_matrix_view(&gHUDCurrDisplayList, &gHUDCurrMatrix); func_80068508(TRUE); - gCurrentHud->unk64C = 225.0f; + gCurrentHud->challengePortrait.x = 225.0f; if (osTvType == TV_TYPE_PAL) { - gCurrentHud->unk650 = 181.5f; + gCurrentHud->challengePortrait.y = 181.5f; } else { - gCurrentHud->unk650 = 165.0f; + gCurrentHud->challengePortrait.y = 165.0f; } if (osTvType == TV_TYPE_PAL) { - var_a0_5 = (66.0f - gCurrentHud->unk36C) - 4.0f; - temp = -114.0f - gCurrentHud->unk370; + var_a0_5 = (66.0f - gCurrentHud->bananaCountIconStatic.x) - 4.0f; + temp = -114.0f - gCurrentHud->bananaCountIconStatic.y; } else { - var_a0_5 = 66.0f - gCurrentHud->unk36C; - temp = -100.0f - gCurrentHud->unk370; + var_a0_5 = 66.0f - gCurrentHud->bananaCountIconStatic.x; + temp = -100.0f - gCurrentHud->bananaCountIconStatic.y; } - gCurrentHud->unk36C += var_a0_5; - gCurrentHud->unk370 += temp; - gCurrentHud->unkEC += var_a0_5; - gCurrentHud->unkF0 += temp; - gCurrentHud->unk38C += var_a0_5; - gCurrentHud->unk390 += temp; - gCurrentHud->unk10C += var_a0_5; - gCurrentHud->unk110 -= temp + 1; - gCurrentHud->unk12C += var_a0_5; - gCurrentHud->unk130 -= temp + 1; - gCurrentHud->unk24C += var_a0_5; - gCurrentHud->unk250 -= temp; - gCurrentHud->unk646 = curRacerObj->characterId + 56; + gCurrentHud->bananaCountIconStatic.x += var_a0_5; + gCurrentHud->bananaCountIconStatic.y += temp; + gCurrentHud->bananaCountIconSpin.x += var_a0_5; + gCurrentHud->bananaCountIconSpin.y += temp; + gCurrentHud->bananaCountSparkle.x += var_a0_5; + gCurrentHud->bananaCountSparkle.y += temp; + gCurrentHud->bananaCountNumber1.x += var_a0_5; + gCurrentHud->bananaCountNumber1.y -= temp + 1; + gCurrentHud->bananaCountNumber2.x += var_a0_5; + gCurrentHud->bananaCountNumber2.y -= temp + 1; + gCurrentHud->bananaCountX.x += var_a0_5; + gCurrentHud->bananaCountX.y -= temp; + gCurrentHud->challengePortrait.spriteID = curRacerObj->characterId + HUD_SPRITE_PORTRAIT; if (osTvType == TV_TYPE_PAL) { - gCurrentHud->unk64C -= 4.0f; - gCurrentHud->unk66C -= 4.0f; + gCurrentHud->challengePortrait.x -= 4.0f; + gCurrentHud->eggChallengeIcon.x -= 4.0f; } D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk640); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->challengePortrait); D_80126CD5 = FALSE; - if (gCurrentHud->unkFB == 0 && curRacerObj->bananas == 10) { - gCurrentHud->unkFB = curRacerObj->bananas; + if (gCurrentHud->bananaCountIconSpin.unk1B == 0 && curRacerObj->bananas == 10) { + gCurrentHud->bananaCountIconSpin.unk1B = curRacerObj->bananas; } render_racer_bananas(curRacerObj, updateRate); - gCurrentHud->unk36C -= var_a0_5; - gCurrentHud->unk370 -= temp; - gCurrentHud->unkEC -= var_a0_5; - gCurrentHud->unkF0 -= temp; - gCurrentHud->unk38C -= var_a0_5; - gCurrentHud->unk390 -= temp; - gCurrentHud->unk10C -= var_a0_5; - gCurrentHud->unk110 += temp + 1; - gCurrentHud->unk12C -= var_a0_5; - gCurrentHud->unk130 += temp + 1; - gCurrentHud->unk24C -= var_a0_5; - gCurrentHud->unk250 += temp; - gCurrentHud->unk64C = spE4; - gCurrentHud->unk650 = spE0; + gCurrentHud->bananaCountIconStatic.x -= var_a0_5; + gCurrentHud->bananaCountIconStatic.y -= temp; + gCurrentHud->bananaCountIconSpin.x -= var_a0_5; + gCurrentHud->bananaCountIconSpin.y -= temp; + gCurrentHud->bananaCountSparkle.x -= var_a0_5; + gCurrentHud->bananaCountSparkle.y -= temp; + gCurrentHud->bananaCountNumber1.x -= var_a0_5; + gCurrentHud->bananaCountNumber1.y += temp + 1; + gCurrentHud->bananaCountNumber2.x -= var_a0_5; + gCurrentHud->bananaCountNumber2.y += temp + 1; + gCurrentHud->bananaCountX.x -= var_a0_5; + gCurrentHud->bananaCountX.y += temp; + gCurrentHud->challengePortrait.x = spE4; + gCurrentHud->challengePortrait.y = spE0; sprite_opaque(TRUE); reset_render_settings(&gHUDCurrDisplayList); func_80068508(FALSE); @@ -3050,26 +3070,26 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } } else if (gHudLevelHeader->race_type == RACETYPE_CHALLENGE_BANANAS) { if (gNumActivePlayers == 2 && gHudToggleSettings[gHUDNumPlayers] == 0) { - temp_s0_2 = gCurrentHud->unk64C; - temp_s1_2 = gCurrentHud->unk650; - temp_s3 = gCurrentHud->unk40C; - spBC = gCurrentHud->unk410; + temp_s0_2 = gCurrentHud->challengePortrait.x; + temp_s1_2 = gCurrentHud->challengePortrait.y; + temp_s3 = gCurrentHud->treasureMetre.x; + spBC = gCurrentHud->treasureMetre.y; racerGroup = get_racer_objects(&racerCount); for (sp144 = 0; sp144 < racerCount; sp144++) { someRacer = (Object_Racer *) racerGroup[sp144]->unk64; render_treasure_hud(someRacer); if (osTvType == TV_TYPE_PAL) { - gCurrentHud->unk650 += 66.0; - gCurrentHud->unk410 += 66.0; + gCurrentHud->challengePortrait.y += 66.0; + gCurrentHud->treasureMetre.y += 66.0; } else { - gCurrentHud->unk650 += 55.0f; - gCurrentHud->unk410 += 55.0f; + gCurrentHud->challengePortrait.y += 55.0f; + gCurrentHud->treasureMetre.y += 55.0f; } } - gCurrentHud->unk64C = temp_s0_2; - gCurrentHud->unk650 = temp_s1_2; - gCurrentHud->unk40C = temp_s3; - gCurrentHud->unk410 = spBC; + gCurrentHud->challengePortrait.x = temp_s0_2; + gCurrentHud->challengePortrait.y = temp_s1_2; + gCurrentHud->treasureMetre.x = temp_s3; + gCurrentHud->treasureMetre.y = spBC; } else if (gNumActivePlayers == 3) { tempVar4 = NULL; for (tempVar2 = 0; tempVar2 < objectCount; tempVar2++) { @@ -3078,27 +3098,27 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } } if (tempVar4 != NULL) { - temp_s0_3 = gCurrentHud->unk64C; - temp_s1_3 = gCurrentHud->unk650; - temp_f16 = gCurrentHud->unk40C; - temp_f6 = gCurrentHud->unk410; - gCurrentHud->unk64C = 225.0f; - gCurrentHud->unk650 = 165.0f; - gCurrentHud->unk40C = 209.0f; - gCurrentHud->unk410 = 193.0f; + temp_s0_3 = gCurrentHud->challengePortrait.x; + temp_s1_3 = gCurrentHud->challengePortrait.y; + temp_f16 = gCurrentHud->treasureMetre.x; + temp_f6 = gCurrentHud->treasureMetre.y; + gCurrentHud->challengePortrait.x = 225.0f; + gCurrentHud->challengePortrait.y = 165.0f; + gCurrentHud->treasureMetre.x = 209.0f; + gCurrentHud->treasureMetre.y = 193.0f; if (osTvType == TV_TYPE_PAL) { - gCurrentHud->unk64C -= 4.0f; - gCurrentHud->unk40C -= 4.0f; - gCurrentHud->unk650 *= 1.1; - gCurrentHud->unk410 *= 1.1; - gCurrentHud->unk650 = (s32) gCurrentHud->unk650; - gCurrentHud->unk410 = (s32) gCurrentHud->unk410; + gCurrentHud->challengePortrait.x -= 4.0f; + gCurrentHud->treasureMetre.x -= 4.0f; + gCurrentHud->challengePortrait.y *= 1.1; + gCurrentHud->treasureMetre.y *= 1.1; + gCurrentHud->challengePortrait.y = (s32) gCurrentHud->challengePortrait.y; + gCurrentHud->treasureMetre.y = (s32) gCurrentHud->treasureMetre.y; } render_treasure_hud(tempVar4); - gCurrentHud->unk64C = temp_s0_3; - gCurrentHud->unk650 = temp_s1_3; - gCurrentHud->unk40C = temp_f16; - gCurrentHud->unk410 = temp_f6; + gCurrentHud->challengePortrait.x = temp_s0_3; + gCurrentHud->challengePortrait.y = temp_s1_3; + gCurrentHud->treasureMetre.x = temp_f16; + gCurrentHud->treasureMetre.y = temp_f6; } } } @@ -3162,7 +3182,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u gMinimapScreenY *= 1.2; } sprite_opaque(FALSE); - objTrans.trans.x_position = gMinimapScreenX + D_80126D24 + D_80126D28; + objTrans.trans.x_position = gMinimapScreenX + gHudOffsetX + gHudBounceX; objTrans.trans.y_position = gMinimapScreenY; if (osTvType == TV_TYPE_PAL) { objTrans.trans.x_position -= 4.0f; @@ -3197,37 +3217,37 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u if (temp_v0_8 != NULL) { 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; + gCurrentHud->minimapMarker.spriteID = HUD_SPRITE_MAP_DOT; + gCurrentHud->minimapMarker.z_rotation = 0; + gCurrentHud->minimapMarker.scale = 1.0f; tempVar1 = (opacity * (f32) temp_v0_8->segment.object.opacity) * (1.0 / 128.0); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 60, 60, 60, tempVar1); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->minimapMarker); } } temp_v0_8 = get_time_trial_ghost(); if (temp_v0_8 != NULL) { minimap_marker_pos(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); - gCurrentHud->unk1E4 = 0; + gCurrentHud->minimapMarker.z_rotation = 0; tempVar1 = (opacity * (f32) temp_v0_8->segment.object.opacity) * (1.0 / 128.0); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, gHudMinimapColours[8].red, gHudMinimapColours[8].green, gHudMinimapColours[8].blue, tempVar1); - gCurrentHud->unk1E8 = 1.0f; - gCurrentHud->unk1E6 = 14; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); + gCurrentHud->minimapMarker.scale = 1.0f; + gCurrentHud->minimapMarker.spriteID = HUD_SPRITE_MAP_DOT; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->minimapMarker); } // Draw Taj's minimap icon. if (gHudLevelHeader->race_type == RACETYPE_HUBWORLD) { temp_v0_8 = find_taj_object(); if (temp_v0_8 != NULL) { - gCurrentHud->unk1E6 = 14; + gCurrentHud->minimapMarker.spriteID = HUD_SPRITE_MAP_DOT; minimap_marker_pos(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); - gCurrentHud->unk1E4 = 0; + gCurrentHud->minimapMarker.z_rotation = 0; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 0, 255, opacity); - gCurrentHud->unk1E8 = 1.0f; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); + gCurrentHud->minimapMarker.scale = 1.0f; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->minimapMarker); } } // Draw racer minimap icons. @@ -3239,19 +3259,19 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u 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; - gCurrentHud->unk1E4 = + gCurrentHud->minimapMarker.y -= 1.0f; + gCurrentHud->minimapMarker.spriteID = HUD_SPRITE_MAP_ARROW; + gCurrentHud->minimapMarker.z_rotation = (objectGroup[i]->segment.trans.y_rotation - ((lvlMdl->minimapRotation * 0xFFFF) / 360)) & 0xFFFF; if (get_filtered_cheats() & CHEAT_MIRRORED_TRACKS) { - gCurrentHud->unk1E4 = 0xFFFF - gCurrentHud->unk1E4; + gCurrentHud->minimapMarker.z_rotation = 0xFFFF - gCurrentHud->minimapMarker.z_rotation; } sprite_opaque(TRUE); } else { - gCurrentHud->unk1E4 = 0; - gCurrentHud->unk1E6 = 14; + gCurrentHud->minimapMarker.z_rotation = 0; + gCurrentHud->minimapMarker.spriteID = HUD_SPRITE_MAP_DOT; } if (is_taj_challenge() && someRacer->vehicleID == VEHICLE_CARPET) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 0, 255, opacity); @@ -3262,25 +3282,26 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } if (!(get_current_level_race_type() & RACETYPE_CHALLENGE) || (!someRacer->raceFinished)) { if (osTvType == TV_TYPE_PAL) { - gCurrentHud->unk1EC -= 4.0f; + gCurrentHud->minimapMarker.x -= 4.0f; } if (get_current_level_race_type() == RACETYPE_CHALLENGE_BATTLE) { switch (someRacer->unk212) { case 0: - gCurrentHud->unk1E8 = 0.8f; + gCurrentHud->minimapMarker.scale = 0.8f; break; case 1: - gCurrentHud->unk1E8 = 1.0f; + gCurrentHud->minimapMarker.scale = 1.0f; break; case 2: case 3: - gCurrentHud->unk1E8 = 1.2f; + gCurrentHud->minimapMarker.scale = 1.2f; break; } } else { - gCurrentHud->unk1E8 = 1.0f; + gCurrentHud->minimapMarker.scale = 1.0f; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, + &gCurrentHud->minimapMarker); } sprite_opaque(FALSE); } @@ -3315,20 +3336,20 @@ void minimap_marker_pos(f32 x, f32 z, f32 angleSin, f32 angleCos, f32 modelAspec 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; - gCurrentHud->unk1F0 = + gCurrentHud->minimapMarker.x = (((f32) gMinimapScreenX - ((scaledX * angleCos) + (scaledY * angleSin))) + + (f32) lvlMdl->minimapOffsetXAdv2) - + (f32) gMinimapDotOffsetX; + gCurrentHud->minimapMarker.y = ((f32) (lvlMdl->minimapOffsetYAdv2 + gMinimapScreenY) - ((scaledX * angleSin) - (scaledY * angleCos))) + (f32) gMinimapDotOffsetY; return; } // Final x position on minimap - gCurrentHud->unk1EC = + gCurrentHud->minimapMarker.x = ((f32) gMinimapScreenX + ((scaledX * angleCos) + (scaledY * angleSin)) + (f32) lvlMdl->minimapOffsetXAdv1) - (f32) gMinimapDotOffsetX; // Final y position on minimap - gCurrentHud->unk1F0 = + gCurrentHud->minimapMarker.y = ((f32) (lvlMdl->minimapOffsetYAdv1 + gMinimapScreenY) - ((scaledX * angleSin) - (scaledY * angleCos))) + (f32) gMinimapDotOffsetY; } @@ -3379,26 +3400,34 @@ void func_800AAFD0(ObjectModel *objModel) { } } -void func_800AB194(s32 arg0) { - D_80126CD1 = 1; - D_80126CD3 = arg0; +/** + * Begin fading the minimap which will slowly set it to whatever the opacity target is. + * Fades in or out based on what the setting is. + */ +void minimap_fade(s32 setting) { + gMinimapFade = TRUE; + gMinimapXlu = setting; } -void func_800AB1AC(s32 arg0) { - D_80126CD0 = D_8012718B; - D_80126CD3 = arg0; +/** + * Snaps the minimap opacity to the target level. + * Fades in or out based on what the setting is. + */ +void minimap_opacity_set(s32 setting) { + gMinimapOpacity = gMinimapOpacityTarget; + gMinimapXlu = setting; } /** * Sets the race start HUD procedure to the first step. */ -UNUSED void reset_race_start_hud(void) { +UNUSED void hud_reset_race_start(void) { gRaceStartShowHudStep = 0; } /** * Sets the visibility of the hud, hiding almost everything, leaving only the minimap. */ -void set_hud_visibility(u8 setting) { +void hud_visibility(u8 setting) { gShowHUD = 1 - setting; } diff --git a/src/game_ui.h b/src/game_ui.h index 313df3c3..e09da07d 100644 --- a/src/game_ui.h +++ b/src/game_ui.h @@ -61,364 +61,184 @@ enum HudElementNames { HUD_ELEMENT_UNK_27 }; -typedef struct { - s16 unk0; - s16 unk2; - s16 unk4; - s16 textureID; - s16 unk8; - s16 unkA; - f32 unkC; -} IndicatorArrow; +enum HudAssets { + HUD_ASSET_0, + HUD_SPRITE_WEAPONS, + HUD_ASSET_2, + HUD_ASSET_3, + HUD_ASSET_4, + HUD_SPRITE_FINISH, + HUD_ASSET_6, + HUD_SPRITE_GO_BIG, + HUD_SPRITE_BANANA_ANIM, + HUD_ASSET_9, + HUD_ASSET_10, + HUD_ASSET_11, + HUD_ASSET_12, + HUD_ASSET_13, + HUD_SPRITE_MAP_DOT, + HUD_ASSET_15, + HUD_SPRITE_CHEQUER_FLAG, + HUD_SPRITE_RETICLE, + HUD_ASSET_18, + HUD_SPRITE_GOLD_BALLOON, + HUD_ASSET_20, + HUD_SPRITE_BANANA_STATIC, + HUD_SPRITE_GET_READY, + HUD_ASSET_23, + HUD_SPRITE_LAP_FINAL, + HUD_SPRITE_LAP_LAP, + HUD_SPRITE_LAP_2, + HUD_SPRITE_MAP_ARROW, + HUD_ASSET_28, + HUD_SPRITE_INDICATOR_EXCLAMATION, + HUD_SPRITE_INDICATOR_DOWN, + HUD_SPRITE_INDICATOR_U, + HUD_SPRITE_INDICATOR_TURN_90, + HUD_SPRITE_INDICATOR_TURN_45, + HUD_ASSET_34, + HUD_SPRITE_WRONG, + HUD_SPRITE_WAY, + HUD_SPRITE_GO_SMALL, + HUD_SPRITE_LAP_LAP_SMALL, + HUD_SPRITE_GET_READY_SMALL, + HUD_SPRITE_PRO_AM, + HUD_SPRITE_LAP_FINAL_SMALL, + HUD_SPRITE_FINISH_SMALL, + HUD_SPRITE_LAP_2_SMALL, + HUD_SPRITE_WAY_SMALL, + HUD_SPRITE_WRONG_SMALL, + HUD_SPRITE_SPEEDOMETRE_ARROW, + HUD_ASSET_47, + HUD_ASSET_48, + HUD_ASSET_49, + HUD_ASSET_50, + HUD_ASSET_51, + HUD_ASSET_52, + HUD_ASSET_53, + HUD_ASSET_54, + HUD_SPRITE_WEAPON_NUMBER, + HUD_SPRITE_PORTRAIT, + HUD_ASSET_57, + HUD_ASSET_58, + HUD_ASSET_59, + HUD_ASSET_60, + HUD_ASSET_61, + HUD_ASSET_62, + HUD_ASSET_63, + HUD_ASSET_64, + HUD_ASSET_65, + HUD_ASSET_66, + HUD_SPRITE_PLACE_1, + HUD_SPRITE_PLACE_ST, + HUD_SPRITE_BALLOON_DIAMOND +}; -// Used in render_timer -typedef struct unk80126CDC_entry { - s16 unk0; - s16 unk2; - s16 unk4; - s16 unk6; - f32 unk8; - f32 unkC; - f32 unk10; - f32 unk14; - s16 unk18; -} unk80126CDC_entry; +typedef struct HudElementBase { + s16 y_rotation; + s16 x_rotation; + s16 z_rotation; + s16 spriteID; + f32 scale; + f32 x; + f32 y; + f32 z; + s16 spriteOffset; +} HudElementBase; -// Size: 0x760 -typedef struct unk80126CDC { - struct unk80126CDC *unk0; - u8 unk4[0x2]; - s16 unk6; - f32 unk8; - f32 unkC; - u8 pad10[0x8]; - s16 unk18; +typedef struct HudElement { + s16 y_rotation; + s16 x_rotation; + s16 z_rotation; + s16 spriteID; + f32 scale; + f32 x; + f32 y; + f32 z; + s16 spriteOffset; s8 unk1A; s8 unk1B; s8 unk1C; s8 unk1D; - u8 pad1E[0x2]; - struct unk80126CDC *unk20; - u8 pad24[0x14]; - s16 unk38; - u8 pad3A[0x6]; - struct unk80126CDC *unk40; - s16 unk44; - s16 unk46; - f32 unk48; - s32 unk4C; - s32 unk50; - s32 unk54; - s16 unk58; - s8 unk5A; - s8 unk5B; - s8 unk5C; - s8 unk5D; - s8 unk5E; - s8 unk5F; - struct unk80126CDC *unk60; - s8 unk64[0x4]; - u8 unk68[0x18]; - struct unk80126CDC *unk80; - u8 unk84[0x14]; - s16 unk98; - s16 unk9A; - u8 unk9C[0x4]; - struct unk80126CDC *unkA0; - u8 unkA4[0x1C]; - struct unk80126CDC *unkC0; - u8 unkC4[0x14]; - s16 unkD8; - s8 unkDA[0x6]; - struct unk80126CDC *unkE0; - u8 unkE4[0x8]; - f32 unkEC; - f32 unkF0; - u8 unkF4[0x4]; - s16 unkF8; - s8 unkFA; - s8 unkFB; - u8 unkFC[0x4]; - struct unk80126CDC *unk100; - u8 unk104[0x8]; - f32 unk10C; - f32 unk110; - u8 unk114[0x4]; - s16 unk118; - u8 unk11A[0x6]; - struct unk80126CDC *unk120; - u8 unk124[0x8]; - f32 unk12C; - f32 unk130; - u8 unk134[0x4]; - s16 unk138; - u8 unk13A[0x6]; - struct unk80126CDC *unk140; - u8 unk144[0x16]; - s8 unk15A; - s8 unk15B; - u8 pad[0x10]; - f32 unk16C; - f32 unk170; - u8 pad174[6]; - s8 unk17A; - s8 unk17B; - s8 unk17C; - s8 unk17D; - u8 pad17E[2]; - struct unk80126CDC *unk180; - u8 unk184[0x8]; - f32 unk18C; - u8 pad190[0xA]; - s8 unk19A[1]; - u8 pad19B; - u8 pad19C[0x4]; - struct unk80126CDC *unk1A0; - u8 pad1A4[0x1C]; - struct unk80126CDC *unk1C0; - u8 pad1C4[0x8]; - f32 unk1CC; - u8 pad1D0[0xA]; - s8 unk1DA; - s8 unk1DB; - s8 unk1DC; - s8 unk1DD; - u8 pad1DE[0x2]; - struct unk80126CDC *unk1E0; - s16 unk1E4; - s16 unk1E6; - f32 unk1E8; - f32 unk1EC; - f32 unk1F0; - u8 pad1F4[0xC]; - struct unk80126CDC *unk200; - u8 unk204[0x14]; - s16 unk218; - s8 unk21A; - s8 unk21B; - u8 pad21C[0x4]; - Object *unk220; - u8 pad224[0x2]; - s16 unk226; - u8 pad228[0x2]; - u8 pad22A[0x2]; - f32 unk22C; - f32 unk230; - f32 unk234; - u8 pad238[0x8]; - struct unk80126CDC *unk240; - u8 unk244[0x8]; - f32 unk24C; - f32 unk250; - u8 pad254[0xC]; - struct unk80126CDC *unk260; - u8 pad264[0x2]; - s16 unk266; - u8 pad268[0x18]; - struct unk80126CDC *unk280; - u8 pad284[0x1C]; - struct unk80126CDC *unk2A0; - u8 pad2A4[0x14]; - s16 unk2B8; - u8 pad2BA[0x6]; - struct unk80126CDC *unk2C0; - u8 pad2C4[0x14]; - s16 unk2D8; - u8 pad2DA[0x12]; - f32 unk2EC; - f32 unk2F0; - u8 unk2F4[0x6]; - s8 unk2FA; - s8 unk2FB; - s8 unk2FC; - s8 unk2FD; - u8 pad2FE[2]; - s16 unk300; - u8 unk302[0xC]; - u8 pad30E[0x2]; - f32 unk310; - u8 unk314[0xC]; - s16 unk320; - u8 pad322[0xE]; - f32 unk330; - s32 unk334; - s16 unk338; - s16 unk33A; - s32 unk33C; - s16 unk340; - s16 unk342; - u8 unk344[0xC]; - f32 unk350; - s32 unk354; - s32 unk358; - s32 unk35C; - struct unk80126CDC *unk360; - u8 pad364[0x8]; - f32 unk36C; - f32 unk370; - u8 pad374[0xC]; - struct unk80126CDC *unk380; - f32 unk384; - f32 unk388; - f32 unk38C; - f32 unk390; - u8 pad394[0x4]; - s16 unk398; - s8 unk39A; - s8 unk39B; - s32 unk39C; - struct unk80126CDC *unk3A0; - u8 pad304[0x8]; - f32 unk3AC; - u8 unk3B0[0xC]; - s8 unk3BC; - s8 unk3BD[0x2]; - u8 pad3BF; - struct unk80126CDC *unk3C0; - s8 unk3C4[0x8]; - f32 unk3CC; - u8 unk3D0[0xA]; - s8 unk3DA; - s8 unk3DB; - s8 unk3DC; - s8 unk3DD; - s8 unk3DE; - s8 unk3DF; - struct unk80126CDC *unk3E0; - u8 unk3E4[0x8]; - f32 unk3EC; - u8 unk3F0[0xC]; - s8 unk3FC; - u8 unk3FD; - u8 unk3FE; - u8 unk3FF; - struct unk80126CDC *unk400; - u8 unk404[0x8]; - f32 unk40C; - f32 unk410; - u8 unk414[0xC]; - struct IndicatorArrow *courseIndicator; - u8 unk424[0x1C]; - s16 unk440; - s16 unk442; - s16 unk444; - u8 unk446[0xA]; - f32 unk450; - s8 unk454[0x4]; - u8 unk458; - u8 unk459; - u8 unk45A[0x6]; - struct unk80126CDC *unk460; - u8 unk464[0x6]; - u8 pad46A[0x2]; - f32 unk46C; - u8 unk470[0xA]; - s8 unk47A[0x4]; - u8 unk47E; - u8 unk47F; - struct unk80126CDC *unk480; - u8 unk484[0x4]; - u8 pad488[0x4]; - f32 unk48C; - u8 unk490[0xC]; - s8 unk49C; - s8 unk49D; - s8 unk49E[0x21]; - u8 pad4BF; - struct unk80126CDC *unk4C0; - s16 unk4C4; - u8 unk4C6[0x1A]; - struct unk80126CDC *unk4E0; - u8 unk4E4[0x1C]; - struct unk80126CDC *unk500; - u8 unk504[0x1C]; - struct unk80126CDC *unk520; - u8 unk524[0x1C]; - struct unk80126CDC *unk540; - u8 unk544[0x1C]; - struct unk80126CDC *unk560; - u8 unk564[0x1C]; - struct unk80126CDC *unk580; - u8 unk584[0x1C]; - struct unk80126CDC *unk5A0; - u8 unk5A4[0x1C]; - struct unk80126CDC *unk5C0; - u8 unk5C4[0xC]; - f32 unk5D0; - u8 unk5D4[0x6]; - s8 unk5DA; - s8 unk5DB; - s8 unk5DC; - u8 unk5DD[0x3]; - struct unk80126CDC *unk5E0; - u8 unk5E4[8]; - f32 unk5EC; - f32 unk5F0; - u8 unk5F4[4]; - s16 unk5F8; - u8 unk5FA; - s8 unk5FB; - s8 unk5FC; - s8 unk5FD; - u8 unk5FE[2]; - struct unk80126CDC *unk600; - u8 unk604[8]; - f32 unk60C; - f32 unk610; - u8 unk614[4]; - s16 unk618; - u8 unk61A[6]; - struct unk80126CDC *unk620; - u8 unk624[0x14]; - s16 unk638; - s8 unk63A; - s8 unk63B; - u8 unk63C[0x4]; - struct unk80126CDC *unk640; - s16 unk644; - s16 unk646; - u8 unk648[0x4]; - f32 unk64C; - f32 unk650; - u8 unk654[0xC]; - struct unk80126CDC *unk660; - u8 unk664[0x8]; - f32 unk66C; - f32 unk670; - u8 unk674[0x6]; - s8 unk67A; - s8 unk67B[0x5]; - struct unk80126CDC *unk680; - u8 pad684[8]; - f32 unk68C; - f32 unk690; - u8 pad694[0xC]; - struct unk80126CDC *unk6A0; - u8 pad6A4[8]; - f32 unk6AC; - f32 unk6B0; - u8 pad6B4[0xC]; - struct unk80126CDC *unk6C0; - s8 unk6C4[0x8]; - f32 unk6CC; - f32 unk6D0; - u8 unk6D4[4]; - s16 unk6D8; - s8 unk6DA[0x6]; - struct unk80126CDC *unk6E0; - s8 unk6E4[8]; - f32 unk6EC; - f32 unk6F0; - u8 unk6F4[4]; - s16 unk6F8; - s8 unk6FA[0x6]; - struct unk80126CDC *unk700; - s8 unk704[0x1C]; - struct unk80126CDC *unk720; - s8 unk724[0x1C]; - struct unk800A497C *unk740; - u8 pad744[0x1C]; -} unk80126CDC; + s8 unk1E; + s8 unk1F; +} HudElement; + +typedef struct HudElementArray { + s16 y_rotation; + s16 x_rotation; + s16 z_rotation; + s16 spriteID; + f32 scale; + f32 x; + f32 y; + f32 z; + s16 spriteOffset; + s8 unk1A[6]; +} HudElementArray; + +// Size: 0x760 +typedef struct HudData { + /* 0x0000 */ HudElement racePostion; + /* 0x0020 */ HudElement racePositionEnd; + /* 0x0040 */ HudElement weaponDisplay; + /* 0x0060 */ HudElement lapCountLabel; + /* 0x0080 */ HudElement lapCountCurrent; + /* 0x00A0 */ HudElement lapCountSeperator; + /* 0x00C0 */ HudElement lapCountTotal; + /* 0x00E0 */ HudElement bananaCountIconSpin; + /* 0x0100 */ HudElement bananaCountNumber1; + /* 0x0120 */ HudElement bananaCountNumber2; + /* 0x0140 */ HudElement raceTimeLabel; + /* 0x0160 */ HudElement raceTimeNumber; + /* 0x0180 */ HudElementArray raceStartGo; + /* 0x01A0 */ HudElement raceStartReady; + /* 0x01C0 */ HudElement raceEndFinish; + /* 0x01E0 */ HudElement minimapMarker; + /* 0x0200 */ HudElement lapCountFlag; + /* 0x0200 */ HudElement magnetReticle; + /* 0x0240 */ HudElement bananaCountX; + /* 0x0260 */ HudElement balloonCountIcon; + /* 0x0280 */ HudElement balloonCountX; + /* 0x02A0 */ HudElement balloonCountNumber1; + /* 0x02C0 */ HudElement balloonCountNumber2; + /* 0x02E0 */ HudElement lapTimeText; + /* 0x0300 */ HudElement timeTrialLapText; + /* 0x0320 */ HudElement timeTrialLapNumber; + /* 0x0340 */ HudElement stopwatchHands; + /* 0x0360 */ HudElement bananaCountIconStatic; + /* 0x0380 */ HudElement bananaCountSparkle; + /* 0x03A0 */ HudElement lapTextFinal; + /* 0x03C0 */ HudElement lapTextLap; + /* 0x03E0 */ HudElement lapTextTwo; + /* 0x03E0 */ HudElement treasureMetre; + /* 0x0440 */ HudElement courseArrows; + /* 0x0440 */ HudElement stopwatch; + /* 0x0460 */ HudElement wrongWay1; + /* 0x0480 */ HudElement wrongWay2; + /* 0x04A0 */ HudElement unk4A0; + /* 0x04C0 */ HudElement speedometreArrow; + /* 0x04E0 */ HudElement speedometreNumber0; + /* 0x0500 */ HudElement speedometreNumber30; + /* 0x0520 */ HudElement speedometreNumber60; + /* 0x0540 */ HudElement speedometreNumber90; + /* 0x0560 */ HudElement speedometreNumber120; + /* 0x0580 */ HudElement speedometreNumber150; + /* 0x05A0 */ HudElement speedometreBG; + /* 0x05C0 */ HudElement silverCoinTally; + /* 0x05E0 */ HudElement challengeFinishPosition1; + /* 0x0600 */ HudElement challengeFinishPosition2; + /* 0x0620 */ HudElement weaponQuantity; + /* 0x0640 */ HudElement challengePortrait; + /* 0x0660 */ HudElement eggChallengeIcon; + /* 0x0680 */ HudElement battleBananaIcon; + /* 0x06A0 */ HudElement battleBananaX; + /* 0x06C0 */ HudElement battleBananaCount1; + /* 0x06E0 */ HudElement battleBananaCount2; + /* 0x0700 */ HudElement raceFinishPosition1; + /* 0x0720 */ HudElement twoPlayerAdvPortrait; + /* 0x0740 */ HudElement raceFinishPosition2; +} HudData; typedef struct unk800E1E64 { s32 unk0; @@ -465,7 +285,7 @@ typedef struct HudElements { extern u8 gGfxTaskYieldData[OS_YIELD_DATA_SIZE]; -u8 func_800A0190(void); +u8 race_starting(void); void func_800A0B74(void); void render_hud_race(s32 arg0, Object *obj, s32 updateRate); void render_hud_challenge_eggs(s32 arg0, Object *obj, s32 updateRate); @@ -477,10 +297,10 @@ 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 minimap_fade(s32 setting); +void minimap_opacity_set(s32 setting); void func_800AB1C8(void); -void set_hud_visibility(u8 setting); +void hud_visibility(u8 setting); void render_race_time(Object_Racer *racer, s32 updateRate); void render_wrong_way_text(Object_Racer *obj, s32 updateRate); void render_course_indicator_arrows(Object_Racer *racer, s32 updateRate); @@ -509,10 +329,10 @@ 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); +void render_timer(s32 x, s32 y, s32 minutes, s32 seconds, s32 hundredths, s32 smallFont); // Non Matching -void func_800AA600(Gfx **dList, MatrixS **mtx, Vertex **vtxList, unk80126CDC **arg3); +void func_800AA600(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement *arg3); void func_800A277C(s32, Object*, s32); void func_800A6254(Object_Racer *racer, s32 updateRate); void func_800A1E48(Object*, s32 updateRate); diff --git a/src/menu.c b/src/menu.c index 8002f036..09203510 100644 --- a/src/menu.c +++ b/src/menu.c @@ -8886,7 +8886,7 @@ void render_track_select_setup_ui(UNUSED s32 updateRate) { sMenuGuiOpacity = 0; } availableVehicleFlags = get_map_available_vehicles(gTrackIdForPreview); - i = get_level_name(gTrackIdForPreview); + i = (s32) get_level_name(gTrackIdForPreview); set_text_font(ASSET_FONTS_BIGFONT); set_text_colour(192, 192, 255, 0, sMenuGuiOpacity); set_text_background_colour(0, 0, 0, 0); diff --git a/src/object_functions.c b/src/object_functions.c index 137c0bde..e2a6bfd6 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -262,8 +262,9 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 updateRate) { if (obj->behaviorId == BHV_FIREBALL_OCTOWEAPON) { racer->attackType = ATTACK_EXPLOSION; obj->properties.fireball.timer = 20; - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, - obj->segment.trans.z_position, 44, SOUND_EXPLOSION, 1.0f, 1); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position, + obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, + 1); free_object(obj); } else if (obj->properties.fireball.timer > 0) { racer->bubbleTrapTimer = 60; @@ -282,8 +283,8 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 updateRate) { if (obj->properties.fireball.timer < 0) { if (obj->unk4A == 298) { free_object(obj); - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, - obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, 1); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position, + obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, 1); } obj->segment.trans.scale *= 0.9; //!@Delta if (obj->segment.trans.scale < 0.5) { @@ -457,8 +458,8 @@ void obj_loop_laserbolt(Object *obj, s32 updateRate) { move_object(obj, obj->segment.x_velocity * updateRateF, obj->segment.y_velocity * updateRateF, obj->segment.z_velocity * updateRateF); if (hasCollision) { - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position - 36.0f, - obj->segment.trans.z_position, 44, SOUND_NONE, 0.2, 0); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position - 36.0f, + obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_NONE, 0.2, 0); delete = TRUE; } @@ -481,8 +482,8 @@ void obj_loop_laserbolt(Object *obj, s32 updateRate) { laserGun->fireTimer = 180; } delete = TRUE; - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position - 36.0f, - obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 0.5, 0); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position - 36.0f, + obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 0.5, 0); } } if (delete) { @@ -673,8 +674,8 @@ void obj_loop_trophycab(Object *obj, s32 updateRate) { gfxData->unk4 = 0; } if (obj->properties.trophyCabinet.action == 1) { - func_800AB1AC(3); - set_hud_visibility(0); + minimap_opacity_set(3); + hud_visibility(0); dialogueID = npc_dialogue_loop(DIALOGUE_TROPHY); if (dialogueID) { obj->properties.trophyCabinet.action = 0; @@ -683,7 +684,7 @@ void obj_loop_trophycab(Object *obj, s32 updateRate) { begin_trophy_race_teleport(); obj->properties.trophyCabinet.action = 2; } else { - set_hud_visibility(1); + hud_visibility(1); } } disable_racer_input(); @@ -1250,7 +1251,7 @@ void obj_loop_stopwatchman(Object *obj, s32 updateRate) { } if (obj->properties.npc.action != TT_MODE_ROAM) { disable_racer_input(); - func_800AB194(3); + minimap_fade(3); } if (obj->properties.npc.action >= TT_MODE_TURN_TOWARDS_PLAYER) { index = npc_dialogue_loop(DIALOGUE_TT); @@ -2270,8 +2271,8 @@ void obj_loop_bombexplosion(Object *obj, s32 updateRate) { temp_t8 = (obj->properties.bombExplosion.unk4 >> 8) & 0xFF; if (obj->properties.bombExplosion.timer > 10 && temp_t8 != 0) { obj->properties.bombExplosion.unk4 ^= (temp_t8 << 8); - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, - BHV_LENS_FLARE_SWITCH, SOUND_NONE, 1.0f, temp_t8 - 1); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, + BHV_LENS_FLARE_SWITCH, SOUND_NONE, 1.0f, temp_t8 - 1); } if (obj->properties.bombExplosion.timer < 20) { obj->segment.trans.scale = ((obj->properties.bombExplosion.timer / 20.0f) * 10.0f) + 0.5f; @@ -2600,7 +2601,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { obj->properties.npc.action == TAJ_MODE_TELEPORT_AWAY_BEGIN || obj->properties.npc.action == TAJ_MODE_TELEPORT_AWAY_END)) { disable_racer_input(); - func_800AB194(3); + minimap_fade(3); } switch (obj->properties.npc.action) { @@ -3084,8 +3085,8 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { gNPCPosY = obj->segment.trans.y_position; } if (sp6B != 0) { - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, - BHV_DINO_WHALE, SOUND_NONE, 1.0f, 0); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, + BHV_DINO_WHALE, SOUND_NONE, 1.0f, 0); } obj->segment.animFrame = taj->animFrameF * 1.0; func_80061C0C(obj); @@ -4200,8 +4201,8 @@ void obj_loop_bananacreator(Object *obj, s32 updateRate) { newBananaObj->segment.level_entry = NULL; newBananaObj64 = &newBananaObj->unk64->banana; newBananaObj64->spawner = obj; - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position - 14.0f, - obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_SELECT, 0.25f, 0); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position - 14.0f, + obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_SELECT, 0.25f, 0); obj->properties.bananaSpawner.spawn = FALSE; } obj->properties.bananaSpawner.timer = TIME_SECONDS(20); // Set delay to respawn banana to 20 seconds. @@ -4841,8 +4842,8 @@ void handle_rocket_projectile(Object *obj, s32 updateRate) { func_80072348(racer->playerIndex, 9); } } - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, - BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, 1); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position, + obj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, 1); free_object(obj); return; } @@ -4861,8 +4862,8 @@ block_37: } obj->properties.projectile.timer -= updateRate; if (obj->properties.projectile.timer < 0) { - func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, - BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, 1); + obj_spawn_effect(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, + BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, 1); free_object(obj); return; } @@ -5187,8 +5188,9 @@ void func_8003F2E8(Object *weaponObj, s32 updateRate) { weaponHit = &weaponInteractObj->unk64->racer; weaponHit->attackType = ATTACK_EXPLOSION; if (weapon->weaponID == WEAPON_TRIPMINE) { - func_8003FC44(weaponObj->segment.trans.x_position, weaponObj->segment.trans.y_position, - weaponObj->segment.trans.z_position, 44, SOUND_EXPLOSION, 1.0f, 1); + obj_spawn_effect(weaponObj->segment.trans.x_position, weaponObj->segment.trans.y_position, + weaponObj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, + SOUND_EXPLOSION, 1.0f, 1); } else if (weapon->weaponID == WEAPON_BUBBLE_TRAP) { if (weaponHit->shieldTimer > 0 && weaponHit->shieldType >= SHIELD_LEVEL3) { weaponProperties->unk4 = 3; @@ -5237,8 +5239,9 @@ void func_8003F2E8(Object *weaponObj, s32 updateRate) { weaponObj->segment.trans.y_position, weaponObj->segment.trans.z_position, 4, NULL); } else { - func_8003FC44(weaponObj->segment.trans.x_position, weaponObj->segment.trans.y_position, - weaponObj->segment.trans.z_position, 44, SOUND_EXPLOSION, 1.0f, 1); + obj_spawn_effect(weaponObj->segment.trans.x_position, weaponObj->segment.trans.y_position, + weaponObj->segment.trans.z_position, BHV_LENS_FLARE_SWITCH, SOUND_EXPLOSION, 1.0f, + 1); free_object(weaponObj); } } @@ -5246,7 +5249,11 @@ void func_8003F2E8(Object *weaponObj, s32 updateRate) { } } -void func_8003FC44(f32 x, f32 y, f32 z, s32 objectID, s32 soundID, f32 scale, s32 arg6) { +/** + * Create a special effect at the given position. + * Plays a sound if one is given. + */ +void obj_spawn_effect(f32 x, f32 y, f32 z, s32 objectID, s32 soundID, f32 scale, s32 arg6) { LevelObjectEntry8003FC44 spawnObj; Object *newObj; @@ -5293,33 +5300,34 @@ void obj_init_audio(Object *obj, LevelObjectEntry_Audio *entry) { /* Official name: audioLineInit */ void obj_init_audioline(Object *obj, LevelObjectEntry_AudioLine *entry) { - Object_AudioLine *obj64; + Object_AudioLine *audLine; - obj64 = &obj->unk64->audio_line; - obj64->unk0 = entry->unk8; - obj64->soundID = entry->soundID; - obj64->unkC = entry->unkC; - obj64->unkD = entry->unkD; - obj64->unk_union.unk8_word = 0; - obj64->unk4 = entry->unkE; - obj64->unk11 = entry->unk12; - obj64->unk10 = entry->unk11; - obj64->unkE = entry->unk9; - obj64->unkF = entry->unk10; - obj64->unk12 = entry->unk13; - func_800098A4(obj64->unk0, obj64->soundID, entry->common.x, entry->common.y, entry->common.z, obj64->unkF, - obj64->unkE, obj64->unk10, obj64->unk12, obj64->unk4, obj64->unk11, obj64->unkC, obj64->unkD); + audLine = &obj->unk64->audio_line; + audLine->unk0 = entry->unk8; + audLine->soundID = entry->soundID; + audLine->lineID = entry->lineID; + audLine->unkD = entry->unkD; + audLine->unk_union.unk8_word = 0; + audLine->unk4 = entry->unkE; + audLine->unk11 = entry->unk12; + audLine->unk10 = entry->unk11; + audLine->unkE = entry->unk9; + audLine->unkF = entry->unk10; + audLine->unk12 = entry->unk13; + audioline_ambient_create(audLine->unk0, audLine->soundID, entry->common.x, entry->common.y, entry->common.z, + audLine->unkF, audLine->unkE, audLine->unk10, audLine->unk12, audLine->unk4, + audLine->unk11, audLine->lineID, audLine->unkD); free_object(obj); } void obj_init_audioreverb(Object *obj, LevelObjectEntry_AudioReverb *entry) { s32 temp; - Object_AudioReverb *obj64 = &obj->unk64->audio_reverb; - obj64->unk2 = entry->unk8; - temp = entry->unk9; - obj64->unk4 = temp & 0xFF; - obj64->unk5 = entry->unkA; - func_80009968(entry->common.x, entry->common.y, entry->common.z, obj64->unk2, obj64->unk4, obj64->unk5); + Object_AudioReverb *reverb = &obj->unk64->audio_reverb; + reverb->unk2 = entry->unk8; + temp = entry->lineID; + reverb->lineID = temp & 0xFF; + reverb->unk5 = entry->unkA; + func_80009968(entry->common.x, entry->common.y, entry->common.z, reverb->unk2, reverb->lineID, reverb->unk5); free_object(obj); } diff --git a/src/object_functions.h b/src/object_functions.h index 8a41c47b..4f2b1cb3 100644 --- a/src/object_functions.h +++ b/src/object_functions.h @@ -361,7 +361,7 @@ void obj_loop_wizpigship(Object* wizShipObj, s32 updateRate); void obj_loop_silvercoin(Object *obj, s32 updateRate); void obj_loop_bombexplosion(Object *obj, s32 updateRate); void obj_loop_flycoin(Object *obj, s32 updateRate); -void func_8003FC44(f32 x, f32 y, f32 z, s32 objectID, s32 soundID, f32 scale, s32 arg6); +void obj_spawn_effect(f32 x, f32 y, f32 z, s32 objectID, s32 soundID, f32 scale, s32 arg6); void obj_loop_stopwatchman(Object *obj, s32 updateRate); void obj_loop_parkwarden(Object *obj, s32 updateRate); void obj_loop_bridge_whaleramp(Object *obj, s32 updateRate); diff --git a/src/objects.c b/src/objects.c index a34c4e78..24a255d4 100644 --- a/src/objects.c +++ b/src/objects.c @@ -827,7 +827,7 @@ s32 func_8000CC20(Object *obj) { return NextFreeIndex; } -#ifdef NON_MATCHING +#ifdef NON_EQUIVALENT void func_8000CC7C(Vehicle vehicle, u32 arg1, s32 arg2) { s32 numPlayers; // sp144 enum GameMode gameMode; @@ -1918,7 +1918,7 @@ void objFreeAssets(Object *obj, s32 count, s32 objType) { void light_setup_light_sources(Object *obj) { s32 i; for (i = 0; i < obj->segment.header->numLightSources; i++) { - obj->lightData[i] = (u32) add_object_light(obj, &obj->segment.header->unk24[i]); + obj->lightData[i] = (Object_LightData *) add_object_light(obj, &obj->segment.header->unk24[i]); } } @@ -2209,7 +2209,7 @@ void func_80010994(s32 updateRate) { func_800245B4(-1); gEventStartTimer = gEventCountdown; - if ((gEventCountdown > 0) && (func_800A0190() != 0)) { + if ((gEventCountdown > 0) && (race_starting() != 0)) { gEventCountdown -= updateRate; D_8011ADBC = 0; } else { @@ -4281,7 +4281,7 @@ void func_8001A8F4(s32 updateRate) { D_8011AD50 = 1; } if (D_8011AD50 == 1) { - set_hud_visibility(0); + hud_visibility(0); gNumRacersSaved--; if (gNumRacersSaved > 0) { i = 0; @@ -4327,9 +4327,9 @@ void func_8001A8F4(s32 updateRate) { } gBalloonCutsceneTimer += updateRate; if (gBalloonCutsceneTimer < cutsceneTimerLimit) { - func_800AB194(1); + minimap_fade(1); } else { - set_hud_visibility(1); + hud_visibility(1); } } i = get_buttons_pressed_from_player(PLAYER_ONE) & A_BUTTON; @@ -6095,7 +6095,7 @@ void func_80022E18(s32 arg0) { levelHeader->race_type = 5; levelHeader->music = D_8011AEF8; levelHeader->instruments = D_8011AEFC; - func_800AB1AC(1); + minimap_opacity_set(1); // Only works with do {} while? i = 0; diff --git a/src/racer.c b/src/racer.c index bdfc2852..f1f9bd13 100644 --- a/src/racer.c +++ b/src/racer.c @@ -67,19 +67,14 @@ s32 gSurfaceBobbingTable[19] = { }; // When landing on this surface, it makes a sound. // Strangely, they did only two surface types then called it a day. -s32 gSurfaceSoundTable[13] = { - SOUND_NONE, SOUND_LAND_GRASS, SOUND_LAND_SAND, SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, - SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, -}; +s32 gSurfaceSoundTable[19] = { SOUND_NONE, SOUND_LAND_GRASS, SOUND_LAND_SAND, SOUND_NONE, SOUND_NONE, + SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, + SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE, + SOUND_NONE, SOUND_NONE, SOUND_NONE, SOUND_NONE }; -// Unused? -s16 D_800DCCB4[12] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -u16 D_800DCCCC[20] = { +u16 D_800DCCCC[19] = { 0x010C, 0x010B, 0x0009, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, - 0x010C, 0x0005, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, 0x0000, + 0x010C, 0x0005, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, 0x010C, }; s32 gSurfaceFlagTable[19] = { @@ -87,7 +82,7 @@ s32 gSurfaceFlagTable[19] = { }; s32 gSurfaceFlagTable4P[20] = { - 0, 4, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x100, 0, 0, 0, 0, 0, 0, + 0, 4, 0x10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x100, 0, 0, 0, 0, 0, 0, }; // Used to know how the AI should use a balloon when they have one. @@ -136,7 +131,7 @@ u32 gCurrentButtonsPressed; u32 gCurrentButtonsReleased; s32 gCurrentStickX; s32 gCurrentStickY; -s32 D_8011D53C; // Set to 0 and only 0. Checked for being 1, but never true. +s32 unused_8011D53C; // Set to 0 and only 0. Checked for being 1, but never true. s32 gRaceStartTimer; f32 D_8011D544; // Starts are 300, then counts down when the race starts. Usage currently unknown. f32 D_8011D548; @@ -1585,8 +1580,8 @@ void update_camera_hovercraft(f32 updateRate, Object *obj, Object_Racer *racer) if (yVel > 0.0f) { yVel *= 0.5; } else { - if (D_8011D53C == 1) { - yVel *= 0.5; // Unreachable. D_8011D53C is never not 0. + if (unused_8011D53C == 1) { + yVel *= 0.5; // Unreachable. unused_8011D53C is never not 0. } else { yVel *= 0.25; } @@ -2075,7 +2070,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_Racer *racer) { ActivePlayers player; s32 i; - D_8011D53C = 0; + unused_8011D53C = 0; tempRacer = (struct Object_Racer *) obj->unk64; obj->segment.trans.y_rotation = racer->angleY; obj->segment.trans.x_rotation = racer->angleX; @@ -3391,7 +3386,7 @@ void handle_racer_head_turning(Object *obj, Object_Racer *racer, UNUSED s32 upda * The character's head will start to face forward. */ void slowly_reset_head_angle(Object_Racer *racer) { - racer->headAngleTarget -= racer->headAngleTarget >> 3; + racer->headAngleTarget -= racer->headAngleTarget >> 3; //!@Delta if (racer->headAngleTarget > -10 && racer->headAngleTarget < 10) { racer->headAngleTarget = 0; } @@ -5021,7 +5016,7 @@ void update_player_camera(Object *obj, Object_Racer *racer, f32 updateRateF) { s32 tempUpdateRateF; s32 angle; - if (gCurrentButtonsPressed & U_CBUTTONS && func_800A0190()) { + if (gCurrentButtonsPressed & U_CBUTTONS && race_starting()) { gCameraObject->zoom++; if (gCameraObject->zoom > ZOOM_VERY_CLOSE) { gCameraObject->zoom = ZOOM_MEDIUM; @@ -5679,7 +5674,7 @@ s32 func_800599B8(s32 arg0, s32 mapId, s16 arg2, s16 *arg3, s16 *arg4) { s16 sp2E; temp_t8 = (D_8011D59C + 1) & 1; - temp_v0 = func_80074B34(arg0, (s16) mapId, arg2, arg3, arg4, &sp2E, (GhostHeader *) gGhostData[temp_t8]); + temp_v0 = func_80074B34(arg0, mapId, arg2, (u16 *) arg3, arg4, &sp2E, (GhostHeader *) gGhostData[temp_t8]); if (arg3 != 0) { if (temp_v0 == 0) { D_8011D5A0[temp_t8] = sp2E; diff --git a/src/rcp.c b/src/rcp.c index 148e5433..5c30b89e 100644 --- a/src/rcp.c +++ b/src/rcp.c @@ -7,7 +7,7 @@ #include "macros.h" #include "video.h" #include "camera.h" -//#include "lib/src/unknown_0D24D0.h" +// #include "lib/src/unknown_0D24D0.h" /************ .data ************/ @@ -52,7 +52,7 @@ Gfx dRdpInit[] = { gsDPSetAlphaCompare(G_AC_NONE), gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2), gsDPSetColorDither(G_CD_MAGICSQ), - gsDPPipeSync(), + gsDPPipeSync(), // Why are we randomly pipesyncing in the middle of setting RDP states? gsSPEndDisplayList(), }; diff --git a/src/textures_sprites.c b/src/textures_sprites.c index 7b9be3d5..79886da1 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -241,6 +241,7 @@ Gfx dRenderSettingsPrimCol[][2] = { G_RM_AA_XLU_SURF2, G_RM_NOOP, G_RM_AA_ZB_TEX_EDGE2, G_RM_NOOP, G_RM_AA_ZB_XLU_INTER2), }; +// Only opaque surface is actually used here. Gfx dRenderSettingsBlinkingLights[][2] = { // Opaque Surface DRAW_TABLE_GROUP(DKR_CC_UNK7, DKR_CC_UNK8, DKR_OMH_2CYC_BILERP, G_RM_NOOP, G_RM_OPA_SURF2, G_RM_NOOP,