From 14970cac4ba4cf6fc932febf4e85b7af6ab9ab41 Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Thu, 14 Sep 2023 22:50:44 +0100 Subject: [PATCH] Identity crisis with a helping of war crimes (#404) * Update Makefile * rename object stack tracing * no * name the timer of pure unadulterated rage * rename rendering * So much * Label boss racer anims * organise boss racers * remove some unused funcs from headers * dialogue * there we go * Update vehicle_bluey.c * Update README.md * quick fixes * quicker fixes * finally rename unknown_0255E0.c * :bulb: * more * ops fixed buildng * Fix warning * Update objects.c * label memory.c a bit. * Some object things * Fix warnings * name last decompression related things * identify water effect * Update structs.h * Update memory.c * mem * document game text * more * :) * Fix UB in thread30 * Update game_ui.c * match func_8009ECF0 * new names * Update game_ui.c * Fix warnings * Update game.c * Fix nonequiv building * rename * Update include/structs.h Co-authored-by: Ryan Myers --------- Co-authored-by: Ryan Myers --- .gitignore | 4 +- asm/gzip/gzip_inflate_block.s | 4 +- asm/non_matchings/game_ui/func_8009F034.s | 20 +- asm/non_matchings/game_ui/func_800A003C.s | 4 +- asm/non_matchings/game_ui/func_800A1248.s | 8 +- asm/non_matchings/game_ui/func_800A14F0.s | 8 +- asm/non_matchings/game_ui/func_800A19A4.s | 4 +- asm/non_matchings/game_ui/func_800A1E48.s | 4 +- asm/non_matchings/game_ui/func_800A22F4.s | 4 +- asm/non_matchings/game_ui/func_800A277C.s | 12 +- asm/non_matchings/game_ui/func_800A47A0.s | 4 +- asm/non_matchings/game_ui/func_800A4C44.s | 20 +- asm/non_matchings/game_ui/func_800A5F18.s | 28 +- asm/non_matchings/game_ui/func_800A6254.s | 32 +- asm/non_matchings/game_ui/func_800A6E30.s | 20 +- asm/non_matchings/game_ui/func_800A718C.s | 24 +- asm/non_matchings/game_ui/func_800A7A60.s | 8 +- asm/non_matchings/game_ui/func_800AA600.s | 4 +- asm/non_matchings/lights/func_80031CAC.s | 12 +- asm/non_matchings/lights/func_80032C7C.s | 32 +- asm/non_matchings/lights/setup_lights.s | 12 +- asm/non_matchings/menu/menu_options_loop.s | 4 +- .../object_functions/obj_loop_door.s | 1170 ++++++++--------- asm/non_matchings/objects/func_80010994.s | 2 +- asm/non_matchings/objects/spawn_object.s | 18 +- include/structs.h | 70 +- src/fade_transition.c | 26 +- src/font.c | 2 - src/game.c | 10 +- src/game_text.c | 403 +++--- src/game_text.h | 33 +- src/game_ui.c | 842 ++++++------ src/game_ui.h | 51 +- src/gzip.c | 14 +- src/gzip.h | 5 +- src/lights.c | 408 +++--- src/lights.h | 72 +- src/memory.c | 158 ++- src/memory.h | 27 +- src/menu.c | 8 +- src/object_functions.c | 8 +- src/objects.c | 418 +++--- src/objects.h | 30 +- src/racer.c | 6 +- src/thread30_track_loading.c | 2 +- src/thread3_main.c | 18 +- src/tracks.c | 64 +- src/tracks.h | 26 +- 48 files changed, 2142 insertions(+), 2021 deletions(-) diff --git a/.gitignore b/.gitignore index 17813c7f..8dc4424d 100755 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,6 @@ m2cfiles/ # Ignore batch and executable files. *.exe -*.bat \ No newline at end of file +*.bat +dkr_hot_reload.py +lastRomPath.txt diff --git a/asm/gzip/gzip_inflate_block.s b/asm/gzip/gzip_inflate_block.s index 023336a9..ca40321a 100644 --- a/asm/gzip/gzip_inflate_block.s +++ b/asm/gzip/gzip_inflate_block.s @@ -1,8 +1,8 @@ glabel gzip_inflate_block /* Official name: inflate_block */ /* 0C74C0 800C68C0 3C0B8013 */ lui $t3, %hi(gzip_num_bits) # $t3, 0x8013 /* 0C74C4 800C68C4 8D6BAAD4 */ lw $t3, %lo(gzip_num_bits)($t3) -/* 0C74C8 800C68C8 3C018013 */ lui $at, %hi(D_8012AAD8) # $at, 0x8013 -/* 0C74CC 800C68CC AC20AAD8 */ sw $zero, %lo(D_8012AAD8)($at) +/* 0C74C8 800C68C8 3C018013 */ lui $at, %hi(gHuftTablePos) # $at, 0x8013 +/* 0C74CC 800C68CC AC20AAD8 */ sw $zero, %lo(gHuftTablePos)($at) /* 0C74D0 800C68D0 24080001 */ li $t0, 1 /* 0C74D4 800C68D4 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0C74D8 800C68D8 3C0C800E */ lui $t4, %hi(gzip_inflate_input) # $t4, 0x800e diff --git a/asm/non_matchings/game_ui/func_8009F034.s b/asm/non_matchings/game_ui/func_8009F034.s index 9af921a2..73418cd7 100644 --- a/asm/non_matchings/game_ui/func_8009F034.s +++ b/asm/non_matchings/game_ui/func_8009F034.s @@ -168,7 +168,7 @@ glabel func_8009F034 /* 09FE34 8009F234 8FAF008C */ lw $t7, 0x8c($sp) /* 09FE38 8009F238 00003825 */ move $a3, $zero /* 09FE3C 8009F23C 19E00359 */ blez $t7, .L8009FFA4 -/* 09FE40 8009F240 3C188012 */ lui $t8, %hi(D_80126CE0) # $t8, 0x8012 +/* 09FE40 8009F240 3C188012 */ lui $t8, %hi(gPlayerHud) # $t8, 0x8012 /* 09FE44 8009F244 3C01C268 */ li $at, 0xC2680000 # -58.000000 /* 09FE48 8009F248 4481E000 */ mtc1 $at, $f28 /* 09FE4C 8009F24C 3C01C2F0 */ li $at, 0xC2F00000 # -120.000000 @@ -182,14 +182,14 @@ glabel func_8009F034 /* 09FE6C 8009F26C 3C013FE8 */ li $at, 0x3FE80000 # 1.812500 /* 09FE70 8009F270 44818800 */ mtc1 $at, $f17 /* 09FE74 8009F274 3C01800F */ lui $at, %hi(D_800E86A8 + 4) # $at, 0x800f -/* 09FE78 8009F278 27186CE0 */ addiu $t8, %lo(D_80126CE0) # addiu $t8, $t8, 0x6ce0 +/* 09FE78 8009F278 27186CE0 */ addiu $t8, %lo(gPlayerHud) # addiu $t8, $t8, 0x6ce0 /* 09FE7C 8009F27C 3C10800E */ lui $s0, %hi(D_800E25C4) # $s0, 0x800e /* 09FE80 8009F280 3C098012 */ lui $t1, %hi(gAssetHudElementIds) # $t1, 0x8012 -/* 09FE84 8009F284 3C058012 */ lui $a1, %hi(D_80126CDC) # $a1, 0x8012 +/* 09FE84 8009F284 3C058012 */ lui $a1, %hi(gCurrentHud) # $a1, 0x8012 /* 09FE88 8009F288 C42F86A8 */ lwc1 $f15, %lo(D_800E86A8)($at) /* 09FE8C 8009F28C C42E86AC */ lwc1 $f14, %lo(D_800E86A8 + 4)($at) /* 09FE90 8009F290 44808000 */ mtc1 $zero, $f16 -/* 09FE94 8009F294 24A56CDC */ addiu $a1, %lo(D_80126CDC) # addiu $a1, $a1, 0x6cdc +/* 09FE94 8009F294 24A56CDC */ addiu $a1, %lo(gCurrentHud) # addiu $a1, $a1, 0x6cdc /* 09FE98 8009F298 25296CF0 */ addiu $t1, %lo(gAssetHudElementIds) # addiu $t1, $t1, 0x6cf0 /* 09FE9C 8009F29C 261025C4 */ addiu $s0, %lo(D_800E25C4) # addiu $s0, $s0, 0x25c4 /* 09FEA0 8009F2A0 AFB8006C */ sw $t8, 0x6c($sp) @@ -681,10 +681,10 @@ glabel func_8009F034 .L8009F9B0: /* 0A05B0 8009F9B0 0C003936 */ jal is_in_time_trial /* 0A05B4 8009F9B4 AFA70090 */ sw $a3, 0x90($sp) -/* 0A05B8 8009F9B8 3C058012 */ lui $a1, %hi(D_80126CDC) # $a1, 0x8012 +/* 0A05B8 8009F9B8 3C058012 */ lui $a1, %hi(gCurrentHud) # $a1, 0x8012 /* 0A05BC 8009F9BC 8FA70090 */ lw $a3, 0x90($sp) /* 0A05C0 8009F9C0 10400043 */ beqz $v0, .L8009FAD0 -/* 0A05C4 8009F9C4 24A56CDC */ addiu $a1, %lo(D_80126CDC) # addiu $a1, $a1, 0x6cdc +/* 0A05C4 8009F9C4 24A56CDC */ addiu $a1, %lo(gCurrentHud) # addiu $a1, $a1, 0x6cdc /* 0A05C8 8009F9C8 8CA40000 */ lw $a0, ($a1) /* 0A05CC 8009F9CC 00000000 */ nop /* 0A05D0 8009F9D0 C48600EC */ lwc1 $f6, 0xec($a0) @@ -757,9 +757,9 @@ glabel func_8009F034 /* 0A06D8 8009FAD8 3C014080 */ li $at, 0x40800000 # 4.000000 /* 0A06DC 8009FADC 44819000 */ mtc1 $at, $f18 /* 0A06E0 8009FAE0 24010008 */ li $at, 8 -/* 0A06E4 8009FAE4 3C058012 */ lui $a1, %hi(D_80126CDC) # $a1, 0x8012 +/* 0A06E4 8009FAE4 3C058012 */ lui $a1, %hi(gCurrentHud) # $a1, 0x8012 /* 0A06E8 8009FAE8 8FA70090 */ lw $a3, 0x90($sp) -/* 0A06EC 8009FAEC 24A56CDC */ addiu $a1, %lo(D_80126CDC) # addiu $a1, $a1, 0x6cdc +/* 0A06EC 8009FAEC 24A56CDC */ addiu $a1, %lo(gCurrentHud) # addiu $a1, $a1, 0x6cdc /* 0A06F0 8009FAF0 240B0002 */ li $t3, 2 /* 0A06F4 8009FAF4 10410006 */ beq $v0, $at, .L8009FB10 /* 0A06F8 8009FAF8 240C0001 */ li $t4, 1 @@ -922,12 +922,12 @@ glabel func_8009F034 /* 0A094C 8009FD4C 44818800 */ mtc1 $at, $f17 /* 0A0950 8009FD50 3C014080 */ li $at, 0x40800000 # 4.000000 /* 0A0954 8009FD54 44819000 */ mtc1 $at, $f18 -/* 0A0958 8009FD58 3C058012 */ lui $a1, %hi(D_80126CDC) # $a1, 0x8012 +/* 0A0958 8009FD58 3C058012 */ lui $a1, %hi(gCurrentHud) # $a1, 0x8012 /* 0A095C 8009FD5C 8FA70090 */ lw $a3, 0x90($sp) /* 0A0960 8009FD60 3C098012 */ lui $t1, %hi(gAssetHudElementIds) # $t1, 0x8012 /* 0A0964 8009FD64 44808000 */ mtc1 $zero, $f16 /* 0A0968 8009FD68 25296CF0 */ addiu $t1, %lo(gAssetHudElementIds) # addiu $t1, $t1, 0x6cf0 -/* 0A096C 8009FD6C 24A56CDC */ addiu $a1, %lo(D_80126CDC) # addiu $a1, $a1, 0x6cdc +/* 0A096C 8009FD6C 24A56CDC */ addiu $a1, %lo(gCurrentHud) # addiu $a1, $a1, 0x6cdc /* 0A0970 8009FD70 3408C000 */ li $t0, 49152 /* 0A0974 8009FD74 240AFFFF */ li $t2, -1 /* 0A0978 8009FD78 240B0002 */ li $t3, 2 diff --git a/asm/non_matchings/game_ui/func_800A003C.s b/asm/non_matchings/game_ui/func_800A003C.s index 725a9f24..23504e77 100644 --- a/asm/non_matchings/game_ui/func_800A003C.s +++ b/asm/non_matchings/game_ui/func_800A003C.s @@ -66,10 +66,10 @@ glabel func_800A003C /* 0A0D24 800A0124 1420FFD6 */ bnez $at, .L800A0080 /* 0A0D28 800A0128 26310004 */ addiu $s1, $s1, 4 .L800A012C: -/* 0A0D2C 800A012C 3C048012 */ lui $a0, %hi(D_80126CE0) # $a0, 0x8012 +/* 0A0D2C 800A012C 3C048012 */ lui $a0, %hi(gPlayerHud) # $a0, 0x8012 /* 0A0D30 800A0130 3C128012 */ lui $s2, %hi(gAssetHudElements) # $s2, 0x8012 /* 0A0D34 800A0134 3C148012 */ lui $s4, %hi(gAssetHudElementIds) # $s4, 0x8012 -/* 0A0D38 800A0138 8C846CE0 */ lw $a0, %lo(D_80126CE0)($a0) +/* 0A0D38 800A0138 8C846CE0 */ lw $a0, %lo(gPlayerHud)($a0) /* 0A0D3C 800A013C 26946CF0 */ addiu $s4, %lo(gAssetHudElementIds) # addiu $s4, $s4, 0x6cf0 /* 0A0D40 800A0140 0C01C450 */ jal free_from_memory_pool /* 0A0D44 800A0144 26526CF4 */ addiu $s2, %lo(gAssetHudElements) # addiu $s2, $s2, 0x6cf4 diff --git a/asm/non_matchings/game_ui/func_800A1248.s b/asm/non_matchings/game_ui/func_800A1248.s index e25d61f5..dd55a809 100644 --- a/asm/non_matchings/game_ui/func_800A1248.s +++ b/asm/non_matchings/game_ui/func_800A1248.s @@ -43,9 +43,9 @@ glabel func_800A1248 /* 0A1ED4 800A12D4 19E00029 */ blez $t7, .L800A137C /* 0A1ED8 800A12D8 02408025 */ move $s0, $s2 /* 0A1EDC 800A12DC 3C01425C */ li $at, 0x425C0000 # 55.000000 -/* 0A1EE0 800A12E0 3C128012 */ lui $s2, %hi(D_80126CDC) # $s2, 0x8012 +/* 0A1EE0 800A12E0 3C128012 */ lui $s2, %hi(gCurrentHud) # $s2, 0x8012 /* 0A1EE4 800A12E4 4481A000 */ mtc1 $at, $f20 -/* 0A1EE8 800A12E8 26526CDC */ addiu $s2, %lo(D_80126CDC) # addiu $s2, $s2, 0x6cdc +/* 0A1EE8 800A12E8 26526CDC */ addiu $s2, %lo(gCurrentHud) # addiu $s2, $s2, 0x6cdc .L800A12EC: /* 0A1EEC 800A12EC 8E180000 */ lw $t8, ($s0) /* 0A1EF0 800A12F0 00000000 */ nop @@ -85,8 +85,8 @@ glabel func_800A1248 /* 0A1F74 800A1374 1420FFDD */ bnez $at, .L800A12EC /* 0A1F78 800A1378 00000000 */ nop .L800A137C: -/* 0A1F7C 800A137C 3C128012 */ lui $s2, %hi(D_80126CDC) # $s2, 0x8012 -/* 0A1F80 800A1380 26526CDC */ addiu $s2, %lo(D_80126CDC) # addiu $s2, $s2, 0x6cdc +/* 0A1F7C 800A137C 3C128012 */ lui $s2, %hi(gCurrentHud) # $s2, 0x8012 +/* 0A1F80 800A1380 26526CDC */ addiu $s2, %lo(gCurrentHud) # addiu $s2, $s2, 0x6cdc /* 0A1F84 800A1384 8E420000 */ lw $v0, ($s2) /* 0A1F88 800A1388 3C01800F */ lui $at, %hi(D_800E8718) # $at, 0x800f /* 0A1F8C 800A138C C4208718 */ lwc1 $f0, %lo(D_800E8718)($at) diff --git a/asm/non_matchings/game_ui/func_800A14F0.s b/asm/non_matchings/game_ui/func_800A14F0.s index 08a1ed68..ce7e4f27 100644 --- a/asm/non_matchings/game_ui/func_800A14F0.s +++ b/asm/non_matchings/game_ui/func_800A14F0.s @@ -138,8 +138,8 @@ glabel func_800A14F0 /* 0A22C4 800A16C4 0C01A142 */ jal func_80068508 /* 0A22C8 800A16C8 AFAA005C */ sw $t2, 0x5c($sp) /* 0A22CC 800A16CC 444DF800 */ cfc1 $t5, $31 -/* 0A22D0 800A16D0 3C068012 */ lui $a2, %hi(D_80126CDC) # $a2, 0x8012 -/* 0A22D4 800A16D4 24C66CDC */ addiu $a2, %lo(D_80126CDC) # addiu $a2, $a2, 0x6cdc +/* 0A22D0 800A16D0 3C068012 */ lui $a2, %hi(gCurrentHud) # $a2, 0x8012 +/* 0A22D4 800A16D4 24C66CDC */ addiu $a2, %lo(gCurrentHud) # addiu $a2, $a2, 0x6cdc /* 0A22D8 800A16D8 8CC20000 */ lw $v0, ($a2) /* 0A22DC 800A16DC 35A10003 */ ori $at, $t5, 3 /* 0A22E0 800A16E0 38210002 */ xori $at, $at, 2 @@ -221,7 +221,7 @@ glabel func_800A14F0 /* 0A2408 800A1808 C420872C */ lwc1 $f0, %lo(D_800E8728 + 4)($at) /* 0A240C 800A180C 3C01425C */ li $at, 0x425C0000 # 55.000000 /* 0A2410 800A1810 3C038012 */ lui $v1, %hi(gNumActivePlayers) # $v1, 0x8012 -/* 0A2414 800A1814 3C068012 */ lui $a2, %hi(D_80126CDC) # $a2, 0x8012 +/* 0A2414 800A1814 3C068012 */ lui $a2, %hi(gCurrentHud) # $a2, 0x8012 /* 0A2418 800A1818 90636D37 */ lbu $v1, %lo(gNumActivePlayers)($v1) /* 0A241C 800A181C 44811000 */ mtc1 $at, $f2 /* 0A2420 800A1820 8FA7002C */ lw $a3, 0x2c($sp) @@ -229,7 +229,7 @@ glabel func_800A14F0 /* 0A2428 800A1828 8FA90054 */ lw $t1, 0x54($sp) /* 0A242C 800A182C C7AC0018 */ lwc1 $f12, 0x18($sp) /* 0A2430 800A1830 C7AE0020 */ lwc1 $f14, 0x20($sp) -/* 0A2434 800A1834 24C66CDC */ addiu $a2, %lo(D_80126CDC) # addiu $a2, $a2, 0x6cdc +/* 0A2434 800A1834 24C66CDC */ addiu $a2, %lo(gCurrentHud) # addiu $a2, $a2, 0x6cdc /* 0A2438 800A1838 2419FFFE */ li $t9, -2 .L800A183C: /* 0A243C 800A183C 3C01800E */ lui $at, %hi(D_800E2834) # $at, 0x800e diff --git a/asm/non_matchings/game_ui/func_800A19A4.s b/asm/non_matchings/game_ui/func_800A19A4.s index c10ab97d..1fa66c69 100644 --- a/asm/non_matchings/game_ui/func_800A19A4.s +++ b/asm/non_matchings/game_ui/func_800A19A4.s @@ -2,8 +2,8 @@ glabel func_800A19A4 /* 0A25A4 800A19A4 27BDFFB0 */ addiu $sp, $sp, -0x50 /* 0A25A8 800A19A8 AFB20028 */ sw $s2, 0x28($sp) /* 0A25AC 800A19AC 444EF800 */ cfc1 $t6, $31 -/* 0A25B0 800A19B0 3C128012 */ lui $s2, %hi(D_80126CDC) # $s2, 0x8012 -/* 0A25B4 800A19B4 26526CDC */ addiu $s2, %lo(D_80126CDC) # addiu $s2, $s2, 0x6cdc +/* 0A25B0 800A19B0 3C128012 */ lui $s2, %hi(gCurrentHud) # $s2, 0x8012 +/* 0A25B4 800A19B4 26526CDC */ addiu $s2, %lo(gCurrentHud) # addiu $s2, $s2, 0x6cdc /* 0A25B8 800A19B8 8E420000 */ lw $v0, ($s2) /* 0A25BC 800A19BC 35C10003 */ ori $at, $t6, 3 /* 0A25C0 800A19C0 AFBF003C */ sw $ra, 0x3c($sp) diff --git a/asm/non_matchings/game_ui/func_800A1E48.s b/asm/non_matchings/game_ui/func_800A1E48.s index e2121bab..01c480de 100644 --- a/asm/non_matchings/game_ui/func_800A1E48.s +++ b/asm/non_matchings/game_ui/func_800A1E48.s @@ -39,9 +39,9 @@ glabel func_800A1E48 /* 0A2AC0 800A1EC0 8FA7007C */ lw $a3, 0x7c($sp) /* 0A2AC4 800A1EC4 24010004 */ li $at, 4 /* 0A2AC8 800A1EC8 15E100FA */ bne $t7, $at, .L800A22B4 -/* 0A2ACC 800A1ECC 3C108012 */ lui $s0, %hi(D_80126CDC) # $s0, 0x8012 +/* 0A2ACC 800A1ECC 3C108012 */ lui $s0, %hi(gCurrentHud) # $s0, 0x8012 /* 0A2AD0 800A1ED0 4458F800 */ cfc1 $t8, $31 -/* 0A2AD4 800A1ED4 26106CDC */ addiu $s0, %lo(D_80126CDC) # addiu $s0, $s0, 0x6cdc +/* 0A2AD4 800A1ED4 26106CDC */ addiu $s0, %lo(gCurrentHud) # addiu $s0, $s0, 0x6cdc /* 0A2AD8 800A1ED8 8E020000 */ lw $v0, ($s0) /* 0A2ADC 800A1EDC 37010003 */ ori $at, $t8, 3 /* 0A2AE0 800A1EE0 38210002 */ xori $at, $at, 2 diff --git a/asm/non_matchings/game_ui/func_800A22F4.s b/asm/non_matchings/game_ui/func_800A22F4.s index 73b8f6c4..a739b65e 100644 --- a/asm/non_matchings/game_ui/func_800A22F4.s +++ b/asm/non_matchings/game_ui/func_800A22F4.s @@ -1,12 +1,12 @@ glabel func_800A22F4 /* 0A2EF4 800A22F4 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0A2EF8 800A22F8 AFB00018 */ sw $s0, 0x18($sp) -/* 0A2EFC 800A22FC 3C108012 */ lui $s0, %hi(D_80126CDC) # $s0, 0x8012 +/* 0A2EFC 800A22FC 3C108012 */ lui $s0, %hi(gCurrentHud) # $s0, 0x8012 /* 0A2F00 800A2300 AFBF001C */ sw $ra, 0x1c($sp) /* 0A2F04 800A2304 AFA40020 */ sw $a0, 0x20($sp) /* 0A2F08 800A2308 AFA50024 */ sw $a1, 0x24($sp) /* 0A2F0C 800A230C 808F0003 */ lb $t7, 3($a0) -/* 0A2F10 800A2310 26106CDC */ addiu $s0, %lo(D_80126CDC) # addiu $s0, $s0, 0x6cdc +/* 0A2F10 800A2310 26106CDC */ addiu $s0, %lo(gCurrentHud) # addiu $s0, $s0, 0x6cdc /* 0A2F14 800A2314 8E190000 */ lw $t9, ($s0) /* 0A2F18 800A2318 25F80038 */ addiu $t8, $t7, 0x38 /* 0A2F1C 800A231C 3C038012 */ lui $v1, %hi(gNumActivePlayers) # $v1, 0x8012 diff --git a/asm/non_matchings/game_ui/func_800A277C.s b/asm/non_matchings/game_ui/func_800A277C.s index 754fdea8..dba24b90 100644 --- a/asm/non_matchings/game_ui/func_800A277C.s +++ b/asm/non_matchings/game_ui/func_800A277C.s @@ -59,8 +59,8 @@ glabel func_800A277C /* 0A33EC 800A27EC A3AB0090 */ sb $t3, 0x90($sp) /* 0A33F0 800A27F0 8E0D0000 */ lw $t5, ($s0) /* 0A33F4 800A27F4 8FA900A8 */ lw $t1, 0xa8($sp) -/* 0A33F8 800A27F8 3C118012 */ lui $s1, %hi(D_80126CDC) # $s1, 0x8012 -/* 0A33FC 800A27FC 26316CDC */ addiu $s1, %lo(D_80126CDC) # addiu $s1, $s1, 0x6cdc +/* 0A33F8 800A27F8 3C118012 */ lui $s1, %hi(gCurrentHud) # $s1, 0x8012 +/* 0A33FC 800A27FC 26316CDC */ addiu $s1, %lo(gCurrentHud) # addiu $s1, $s1, 0x6cdc /* 0A3400 800A2800 ADA20050 */ sw $v0, 0x50($t5) /* 0A3404 800A2804 8E2F0000 */ lw $t7, ($s1) /* 0A3408 800A2808 240E8000 */ li $t6, -32768 @@ -76,9 +76,9 @@ glabel func_800A277C /* 0A3430 800A2830 00000000 */ nop .L800A2834: /* 0A3434 800A2834 8C780088 */ lw $t8, 0x88($v1) -/* 0A3438 800A2838 3C118012 */ lui $s1, %hi(D_80126CDC) # $s1, 0x8012 +/* 0A3438 800A2838 3C118012 */ lui $s1, %hi(gCurrentHud) # $s1, 0x8012 /* 0A343C 800A283C 17000016 */ bnez $t8, .L800A2898 -/* 0A3440 800A2840 26316CDC */ addiu $s1, %lo(D_80126CDC) # addiu $s1, $s1, 0x6cdc +/* 0A3440 800A2840 26316CDC */ addiu $s1, %lo(gCurrentHud) # addiu $s1, $s1, 0x6cdc /* 0A3444 800A2844 3C198012 */ lui $t9, %hi(gAssetHudElementIds) # $t9, 0x8012 /* 0A3448 800A2848 8F396CF0 */ lw $t9, %lo(gAssetHudElementIds)($t9) /* 0A344C 800A284C 240C0008 */ li $t4, 8 @@ -686,8 +686,8 @@ glabel func_800A277C /* 0A3D3C 800A313C 00000000 */ nop /* 0A3D40 800A3140 0C01BAA4 */ jal get_settings /* 0A3D44 800A3144 00000000 */ nop -/* 0A3D48 800A3148 3C108012 */ lui $s0, %hi(D_80127184) # $s0, 0x8012 -/* 0A3D4C 800A314C 26107184 */ addiu $s0, %lo(D_80127184) # addiu $s0, $s0, 0x7184 +/* 0A3D48 800A3148 3C108012 */ lui $s0, %hi(gHudSettings) # $s0, 0x8012 +/* 0A3D4C 800A314C 26107184 */ addiu $s0, %lo(gHudSettings) # addiu $s0, $s0, 0x7184 /* 0A3D50 800A3150 0C01AF62 */ jal get_current_map_id /* 0A3D54 800A3154 AE020000 */ sw $v0, ($s0) /* 0A3D58 800A3158 8FAE00A0 */ lw $t6, 0xa0($sp) diff --git a/asm/non_matchings/game_ui/func_800A47A0.s b/asm/non_matchings/game_ui/func_800A47A0.s index e0db2fda..537616d1 100644 --- a/asm/non_matchings/game_ui/func_800A47A0.s +++ b/asm/non_matchings/game_ui/func_800A47A0.s @@ -2,8 +2,8 @@ glabel func_800A47A0 /* 0A53A0 800A47A0 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 0A53A4 800A47A4 AFBE0038 */ sw $fp, 0x38($sp) /* 0A53A8 800A47A8 444EF800 */ cfc1 $t6, $31 -/* 0A53AC 800A47AC 3C1E8012 */ lui $fp, %hi(D_80126CDC) # $fp, 0x8012 -/* 0A53B0 800A47B0 27DE6CDC */ addiu $fp, %lo(D_80126CDC) # addiu $fp, $fp, 0x6cdc +/* 0A53AC 800A47AC 3C1E8012 */ lui $fp, %hi(gCurrentHud) # $fp, 0x8012 +/* 0A53B0 800A47B0 27DE6CDC */ addiu $fp, %lo(gCurrentHud) # addiu $fp, $fp, 0x6cdc /* 0A53B4 800A47B4 AFB1001C */ sw $s1, 0x1c($sp) /* 0A53B8 800A47B8 8FD10000 */ lw $s1, ($fp) /* 0A53BC 800A47BC 35C10003 */ ori $at, $t6, 3 diff --git a/asm/non_matchings/game_ui/func_800A4C44.s b/asm/non_matchings/game_ui/func_800A4C44.s index 310b27fd..4d7cd048 100644 --- a/asm/non_matchings/game_ui/func_800A4C44.s +++ b/asm/non_matchings/game_ui/func_800A4C44.s @@ -29,11 +29,11 @@ glabel func_800A4C44 /* 0A58A8 800A4CA8 00000000 */ nop /* 0A58AC 800A4CAC 3C0F8012 */ lui $t7, %hi(D_80126D10) # $t7, 0x8012 /* 0A58B0 800A4CB0 8DEF6D10 */ lw $t7, %lo(D_80126D10)($t7) -/* 0A58B4 800A4CB4 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 +/* 0A58B4 800A4CB4 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 /* 0A58B8 800A4CB8 000FC080 */ sll $t8, $t7, 2 /* 0A58BC 800A4CBC 030FC023 */ subu $t8, $t8, $t7 /* 0A58C0 800A4CC0 0018C0C0 */ sll $t8, $t8, 3 -/* 0A58C4 800A4CC4 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A58C4 800A4CC4 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc /* 0A58C8 800A4CC8 0058C821 */ addu $t9, $v0, $t8 /* 0A58CC 800A4CCC 8323005A */ lb $v1, 0x5a($t9) /* 0A58D0 800A4CD0 8D090000 */ lw $t1, ($t0) @@ -43,10 +43,10 @@ glabel func_800A4C44 .L800A4CE0: /* 0A58E0 800A4CE0 3C0A8012 */ lui $t2, %hi(gHUDNumPlayers) # $t2, 0x8012 /* 0A58E4 800A4CE4 8D4A6D0C */ lw $t2, %lo(gHUDNumPlayers)($t2) -/* 0A58E8 800A4CE8 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 +/* 0A58E8 800A4CE8 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 /* 0A58EC 800A4CEC 29410002 */ slti $at, $t2, 2 /* 0A58F0 800A4CF0 10200017 */ beqz $at, .L800A4D50 -/* 0A58F4 800A4CF4 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A58F4 800A4CF4 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc /* 0A58F8 800A4CF8 28610004 */ slti $at, $v1, 4 /* 0A58FC 800A4CFC 10200005 */ beqz $at, .L800A4D14 /* 0A5900 800A4D00 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 @@ -68,9 +68,9 @@ glabel func_800A4C44 /* 0A5938 800A4D38 AFA30034 */ sw $v1, 0x34($sp) /* 0A593C 800A4D3C 0C02A980 */ jal func_800AA600 /* 0A5940 800A4D40 24E70020 */ addiu $a3, $a3, 0x20 -/* 0A5944 800A4D44 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 +/* 0A5944 800A4D44 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 /* 0A5948 800A4D48 8FA30034 */ lw $v1, 0x34($sp) -/* 0A594C 800A4D4C 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A594C 800A4D4C 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc .L800A4D50: /* 0A5950 800A4D50 8D0F0000 */ lw $t7, ($t0) /* 0A5954 800A4D54 3C014300 */ li $at, 0x43000000 # 128.000000 @@ -94,8 +94,8 @@ glabel func_800A4C44 /* 0A599C 800A4D9C 00045400 */ sll $t2, $a0, 0x10 /* 0A59A0 800A4DA0 0C01C1F1 */ jal sins_f /* 0A59A4 800A4DA4 000A2403 */ sra $a0, $t2, 0x10 -/* 0A59A8 800A4DA8 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 -/* 0A59AC 800A4DAC 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A59A8 800A4DA8 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 +/* 0A59AC 800A4DAC 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc /* 0A59B0 800A4DB0 8D020000 */ lw $v0, ($t0) /* 0A59B4 800A4DB4 3C0142FE */ li $at, 0x42FE0000 # 127.000000 /* 0A59B8 800A4DB8 804D001C */ lb $t5, 0x1c($v0) @@ -137,8 +137,8 @@ glabel func_800A4C44 /* 0A5A48 800A4E48 8D070000 */ lw $a3, ($t0) /* 0A5A4C 800A4E4C 0C02A980 */ jal func_800AA600 /* 0A5A50 800A4E50 00000000 */ nop -/* 0A5A54 800A4E54 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 -/* 0A5A58 800A4E58 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A5A54 800A4E54 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 +/* 0A5A58 800A4E58 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc /* 0A5A5C 800A4E5C 8D0E0000 */ lw $t6, ($t0) /* 0A5A60 800A4E60 C7A80030 */ lwc1 $f8, 0x30($sp) /* 0A5A64 800A4E64 2405007F */ li $a1, 127 diff --git a/asm/non_matchings/game_ui/func_800A5F18.s b/asm/non_matchings/game_ui/func_800A5F18.s index cd23488e..65ce6517 100644 --- a/asm/non_matchings/game_ui/func_800A5F18.s +++ b/asm/non_matchings/game_ui/func_800A5F18.s @@ -11,8 +11,8 @@ glabel D_800E8694 .text glabel func_800A5F18 /* 0A6B18 800A5F18 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0A6B1C 800A5F1C 3C078012 */ lui $a3, %hi(D_80126CDC) # $a3, 0x8012 -/* 0A6B20 800A5F20 8CE76CDC */ lw $a3, %lo(D_80126CDC)($a3) +/* 0A6B1C 800A5F1C 3C078012 */ lui $a3, %hi(gCurrentHud) # $a3, 0x8012 +/* 0A6B20 800A5F20 8CE76CDC */ lw $a3, %lo(gCurrentHud)($a3) /* 0A6B24 800A5F24 AFA40028 */ sw $a0, 0x28($sp) /* 0A6B28 800A5F28 AFBF001C */ sw $ra, 0x1c($sp) /* 0A6B2C 800A5F2C 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 @@ -23,8 +23,8 @@ glabel func_800A5F18 /* 0A6B40 800A5F40 24846CFC */ addiu $a0, %lo(gHUDCurrDisplayList) # addiu $a0, $a0, 0x6cfc /* 0A6B44 800A5F44 0C02A980 */ jal func_800AA600 /* 0A6B48 800A5F48 24E705E0 */ addiu $a3, $a3, 0x5e0 -/* 0A6B4C 800A5F4C 3C078012 */ lui $a3, %hi(D_80126CDC) # $a3, 0x8012 -/* 0A6B50 800A5F50 8CE76CDC */ lw $a3, %lo(D_80126CDC)($a3) +/* 0A6B4C 800A5F4C 3C078012 */ lui $a3, %hi(gCurrentHud) # $a3, 0x8012 +/* 0A6B50 800A5F50 8CE76CDC */ lw $a3, %lo(gCurrentHud)($a3) /* 0A6B54 800A5F54 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0A6B58 800A5F58 3C058012 */ lui $a1, %hi(gHUDCurrMatrix) # $a1, 0x8012 /* 0A6B5C 800A5F5C 3C068012 */ lui $a2, %hi(gHUDCurrVertex) # $a2, 0x8012 @@ -64,7 +64,7 @@ glabel func_800A5F18 /* 0A6BE0 800A5FE0 8FB90028 */ lw $t9, 0x28($sp) /* 0A6BE4 800A5FE4 8FB80024 */ lw $t8, 0x24($sp) /* 0A6BE8 800A5FE8 872801AC */ lh $t0, 0x1ac($t9) -/* 0A6BEC 800A5FEC 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 +/* 0A6BEC 800A5FEC 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 /* 0A6BF0 800A5FF0 13080078 */ beq $t8, $t0, .L800A61D4 /* 0A6BF4 800A5FF4 3C01420C */ li $at, 0x420C0000 # 35.000000 /* 0A6BF8 800A5FF8 240900FF */ li $t1, 255 @@ -74,8 +74,8 @@ glabel func_800A5F18 /* 0A6C08 800A6008 240600FF */ li $a2, 255 /* 0A6C0C 800A600C 0C0310E1 */ jal set_text_colour /* 0A6C10 800A6010 00003825 */ move $a3, $zero -/* 0A6C14 800A6014 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 -/* 0A6C18 800A6018 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A6C14 800A6014 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 +/* 0A6C18 800A6018 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A6C1C 800A601C 3C014220 */ li $at, 0x42200000 # 40.000000 /* 0A6C20 800A6020 44813000 */ mtc1 $at, $f6 /* 0A6C24 800A6024 C444016C */ lwc1 $f4, 0x16c($v0) @@ -105,8 +105,8 @@ glabel func_800A5F18 /* 0A6C84 800A6084 0C031110 */ jal draw_text /* 0A6C88 800A6088 00000000 */ nop /* 0A6C8C 800A608C 444CF800 */ cfc1 $t4, $31 -/* 0A6C90 800A6090 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 -/* 0A6C94 800A6094 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A6C90 800A6090 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 +/* 0A6C94 800A6094 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A6C98 800A6098 35810003 */ ori $at, $t4, 3 /* 0A6C9C 800A609C 38210002 */ xori $at, $at, 2 /* 0A6CA0 800A60A0 44C1F800 */ ctc1 $at, $31 @@ -129,8 +129,8 @@ glabel func_800A5F18 /* 0A6CE4 800A60E4 44CDF800 */ ctc1 $t5, $31 /* 0A6CE8 800A60E8 0C029FEF */ jal func_800A7FBC /* 0A6CEC 800A60EC AFAE0010 */ sw $t6, 0x10($sp) -/* 0A6CF0 800A60F0 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 -/* 0A6CF4 800A60F4 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A6CF0 800A60F0 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 +/* 0A6CF4 800A60F4 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A6CF8 800A60F8 3C014220 */ li $at, 0x42200000 # 40.000000 /* 0A6CFC 800A60FC 44819000 */ mtc1 $at, $f18 /* 0A6D00 800A6100 C45002EC */ lwc1 $f16, 0x2ec($v0) @@ -160,8 +160,8 @@ glabel func_800A5F18 /* 0A6D60 800A6160 0C031110 */ jal draw_text /* 0A6D64 800A6164 00000000 */ nop /* 0A6D68 800A6168 4448F800 */ cfc1 $t0, $31 -/* 0A6D6C 800A616C 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 -/* 0A6D70 800A6170 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A6D6C 800A616C 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 +/* 0A6D70 800A6170 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A6D74 800A6174 35010003 */ ori $at, $t0, 3 /* 0A6D78 800A6178 38210002 */ xori $at, $at, 2 /* 0A6D7C 800A617C 44C1F800 */ ctc1 $at, $31 @@ -187,7 +187,7 @@ glabel func_800A5F18 /* 0A6DCC 800A61CC 1000001E */ b .L800A6248 /* 0A6DD0 800A61D0 8FBF001C */ lw $ra, 0x1c($sp) .L800A61D4: -/* 0A6DD4 800A61D4 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A6DD4 800A61D4 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A6DD8 800A61D8 44815000 */ mtc1 $at, $f10 /* 0A6DDC 800A61DC C448016C */ lwc1 $f8, 0x16c($v0) /* 0A6DE0 800A61E0 C4440170 */ lwc1 $f4, 0x170($v0) diff --git a/asm/non_matchings/game_ui/func_800A6254.s b/asm/non_matchings/game_ui/func_800A6254.s index 82275d7a..cc137c28 100644 --- a/asm/non_matchings/game_ui/func_800A6254.s +++ b/asm/non_matchings/game_ui/func_800A6254.s @@ -31,8 +31,8 @@ glabel func_800A6254 /* 0A6EA4 800A62A4 AFA70070 */ sw $a3, 0x70($sp) /* 0A6EA8 800A62A8 8FA70070 */ lw $a3, 0x70($sp) /* 0A6EAC 800A62AC 1040001B */ beqz $v0, .L800A631C -/* 0A6EB0 800A62B0 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 -/* 0A6EB4 800A62B4 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc +/* 0A6EB0 800A62B0 3C098012 */ lui $t1, %hi(gCurrentHud) # $t1, 0x8012 +/* 0A6EB4 800A62B4 25296CDC */ addiu $t1, %lo(gCurrentHud) # addiu $t1, $t1, 0x6cdc /* 0A6EB8 800A62B8 8D220000 */ lw $v0, ($t1) /* 0A6EBC 800A62BC 3C0142D8 */ li $at, 0x42D80000 # 108.000000 /* 0A6EC0 800A62C0 44810000 */ mtc1 $at, $f0 @@ -59,8 +59,8 @@ glabel func_800A6254 /* 0A6F14 800A6314 46004281 */ sub.s $f10, $f8, $f0 /* 0A6F18 800A6318 E44A02F0 */ swc1 $f10, 0x2f0($v0) .L800A631C: -/* 0A6F1C 800A631C 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 -/* 0A6F20 800A6320 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc +/* 0A6F1C 800A631C 3C098012 */ lui $t1, %hi(gCurrentHud) # $t1, 0x8012 +/* 0A6F20 800A6320 25296CDC */ addiu $t1, %lo(gCurrentHud) # addiu $t1, $t1, 0x6cdc /* 0A6F24 800A6324 8D220000 */ lw $v0, ($t1) /* 0A6F28 800A6328 3C01420C */ li $at, 0x420C0000 # 35.000000 /* 0A6F2C 800A632C 44810000 */ mtc1 $at, $f0 @@ -92,8 +92,8 @@ glabel func_800A6254 /* 0A6F94 800A6394 A06F000C */ sb $t7, 0xc($v1) /* 0A6F98 800A6398 A0387189 */ sb $t8, %lo(D_80127189)($at) .L800A639C: -/* 0A6F9C 800A639C 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 -/* 0A6FA0 800A63A0 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc +/* 0A6F9C 800A639C 3C098012 */ lui $t1, %hi(gCurrentHud) # $t1, 0x8012 +/* 0A6FA0 800A63A0 25296CDC */ addiu $t1, %lo(gCurrentHud) # addiu $t1, $t1, 0x6cdc /* 0A6FA4 800A63A4 8D220000 */ lw $v0, ($t1) /* 0A6FA8 800A63A8 3C03800E */ lui $v1, %hi(D_800E2770) # $v1, 0x800e /* 0A6FAC 800A63AC 905905FA */ lbu $t9, 0x5fa($v0) @@ -120,8 +120,8 @@ glabel L800A63D8 /* 0A6FFC 800A63FC 00002825 */ move $a1, $zero /* 0A7000 800A6400 0C000741 */ jal play_sound_global /* 0A7004 800A6404 A06D000C */ sb $t5, 0xc($v1) -/* 0A7008 800A6408 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 -/* 0A700C 800A640C 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc +/* 0A7008 800A6408 3C098012 */ lui $t1, %hi(gCurrentHud) # $t1, 0x8012 +/* 0A700C 800A640C 25296CDC */ addiu $t1, %lo(gCurrentHud) # addiu $t1, $t1, 0x6cdc /* 0A7010 800A6410 8D220000 */ lw $v0, ($t1) /* 0A7014 800A6414 8FA70070 */ lw $a3, 0x70($sp) /* 0A7018 800A6418 00000000 */ nop @@ -439,8 +439,8 @@ glabel L800A63D8 /* 0A7494 800A6894 27A70038 */ addiu $a3, $sp, 0x38 /* 0A7498 800A6898 0C0165E4 */ jal get_timestamp_from_frames /* 0A749C 800A689C AFA80048 */ sw $t0, 0x48($sp) -/* 0A74A0 800A68A0 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 -/* 0A74A4 800A68A4 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc +/* 0A74A0 800A68A0 3C098012 */ lui $t1, %hi(gCurrentHud) # $t1, 0x8012 +/* 0A74A4 800A68A4 25296CDC */ addiu $t1, %lo(gCurrentHud) # addiu $t1, $t1, 0x6cdc /* 0A74A8 800A68A8 8D2C0000 */ lw $t4, ($t1) /* 0A74AC 800A68AC 8FAB0040 */ lw $t3, 0x40($sp) /* 0A74B0 800A68B0 27A50040 */ addiu $a1, $sp, 0x40 @@ -456,8 +456,8 @@ glabel L800A63D8 /* 0A74D8 800A68D8 8FA40048 */ lw $a0, 0x48($sp) /* 0A74DC 800A68DC 0C0165E4 */ jal get_timestamp_from_frames /* 0A74E0 800A68E0 00000000 */ nop -/* 0A74E4 800A68E4 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 -/* 0A74E8 800A68E8 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc +/* 0A74E4 800A68E4 3C098012 */ lui $t1, %hi(gCurrentHud) # $t1, 0x8012 +/* 0A74E8 800A68E8 25296CDC */ addiu $t1, %lo(gCurrentHud) # addiu $t1, $t1, 0x6cdc /* 0A74EC 800A68EC 8D2A0000 */ lw $t2, ($t1) /* 0A74F0 800A68F0 8FB90040 */ lw $t9, 0x40($sp) /* 0A74F4 800A68F4 00000000 */ nop @@ -689,11 +689,11 @@ glabel L800A6BCC /* 0A7840 800A6C40 0C027B20 */ jal is_in_two_player_adventure /* 0A7844 800A6C44 AFA70070 */ sw $a3, 0x70($sp) /* 0A7848 800A6C48 8FA70070 */ lw $a3, 0x70($sp) -/* 0A784C 800A6C4C 3C098012 */ lui $t1, %hi(D_80126CDC) # $t1, 0x8012 +/* 0A784C 800A6C4C 3C098012 */ lui $t1, %hi(gCurrentHud) # $t1, 0x8012 /* 0A7850 800A6C50 1040000D */ beqz $v0, .L800A6C88 -/* 0A7854 800A6C54 25296CDC */ addiu $t1, %lo(D_80126CDC) # addiu $t1, $t1, 0x6cdc -/* 0A7858 800A6C58 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 -/* 0A785C 800A6C5C 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A7854 800A6C54 25296CDC */ addiu $t1, %lo(gCurrentHud) # addiu $t1, $t1, 0x6cdc +/* 0A7858 800A6C58 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 +/* 0A785C 800A6C5C 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A7860 800A6C60 00000000 */ nop /* 0A7864 800A6C64 240C0003 */ li $t4, 3 .L800A6C68: diff --git a/asm/non_matchings/game_ui/func_800A6E30.s b/asm/non_matchings/game_ui/func_800A6E30.s index fe4cd4a9..b45815a2 100644 --- a/asm/non_matchings/game_ui/func_800A6E30.s +++ b/asm/non_matchings/game_ui/func_800A6E30.s @@ -4,8 +4,8 @@ glabel jpt_800E8768 .text glabel func_800A6E30 -/* 0A7A30 800A6E30 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 -/* 0A7A34 800A6E34 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A7A30 800A6E30 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 +/* 0A7A34 800A6E34 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc /* 0A7A38 800A6E38 8D020000 */ lw $v0, ($t0) /* 0A7A3C 800A6E3C 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0A7A40 800A6E40 AFBF0014 */ sw $ra, 0x14($sp) @@ -35,9 +35,9 @@ glabel L800A6E70 /* 0A7A9C 800A6E9C 3C038012 */ lui $v1, %hi(gHUDNumPlayers) # $v1, 0x8012 /* 0A7AA0 800A6EA0 8C636D0C */ lw $v1, %lo(gHUDNumPlayers)($v1) /* 0A7AA4 800A6EA4 8FA60018 */ lw $a2, 0x18($sp) -/* 0A7AA8 800A6EA8 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 +/* 0A7AA8 800A6EA8 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 /* 0A7AAC 800A6EAC 10600003 */ beqz $v1, .L800A6EBC -/* 0A7AB0 800A6EB0 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A7AB0 800A6EB0 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc /* 0A7AB4 800A6EB4 24010001 */ li $at, 1 /* 0A7AB8 800A6EB8 14610008 */ bne $v1, $at, .L800A6EDC .L800A6EBC: @@ -120,8 +120,8 @@ glabel L800A6F3C /* 0A7BD4 800A6FD4 00000000 */ nop /* 0A7BD8 800A6FD8 0C029B6D */ jal play_time_trial_end_message /* 0A7BDC 800A6FDC 00C02025 */ move $a0, $a2 -/* 0A7BE0 800A6FE0 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 -/* 0A7BE4 800A6FE4 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A7BE0 800A6FE0 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 +/* 0A7BE4 800A6FE4 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc .L800A6FE8: /* 0A7BE8 800A6FE8 8D070000 */ lw $a3, ($t0) /* 0A7BEC 800A6FEC 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 @@ -175,8 +175,8 @@ glabel L800A7014 .L800A7098: /* 0A7C98 800A7098 0C000741 */ jal play_sound_global /* 0A7C9C 800A709C 00002825 */ move $a1, $zero -/* 0A7CA0 800A70A0 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 -/* 0A7CA4 800A70A4 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A7CA0 800A70A0 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 +/* 0A7CA4 800A70A4 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A7CA8 800A70A8 00000000 */ nop .L800A70AC: /* 0A7CAC 800A70AC 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 @@ -216,8 +216,8 @@ glabel L800A70D4 /* 0A7D30 800A7130 45000005 */ bc1f .L800A7148 /* 0A7D34 800A7134 00000000 */ nop /* 0A7D38 800A7138 A04A01DA */ sb $t2, 0x1da($v0) -/* 0A7D3C 800A713C 3C028012 */ lui $v0, %hi(D_80126CDC) # $v0, 0x8012 -/* 0A7D40 800A7140 8C426CDC */ lw $v0, %lo(D_80126CDC)($v0) +/* 0A7D3C 800A713C 3C028012 */ lui $v0, %hi(gCurrentHud) # $v0, 0x8012 +/* 0A7D40 800A7140 8C426CDC */ lw $v0, %lo(gCurrentHud)($v0) /* 0A7D44 800A7144 00000000 */ nop .L800A7148: /* 0A7D48 800A7148 0C02A980 */ jal func_800AA600 diff --git a/asm/non_matchings/game_ui/func_800A718C.s b/asm/non_matchings/game_ui/func_800A718C.s index 5e183d73..23d481d4 100644 --- a/asm/non_matchings/game_ui/func_800A718C.s +++ b/asm/non_matchings/game_ui/func_800A718C.s @@ -18,8 +18,8 @@ glabel func_800A718C /* 0A7DC4 800A71C4 00000000 */ nop /* 0A7DC8 800A71C8 332A0004 */ andi $t2, $t9, 4 /* 0A7DCC 800A71CC 11400004 */ beqz $t2, .L800A71E0 -/* 0A7DD0 800A71D0 3C0C8012 */ lui $t4, %hi(D_80126CDC) # $t4, 0x8012 -/* 0A7DD4 800A71D4 8D8C6CDC */ lw $t4, %lo(D_80126CDC)($t4) +/* 0A7DD0 800A71D0 3C0C8012 */ lui $t4, %hi(gCurrentHud) # $t4, 0x8012 +/* 0A7DD4 800A71D4 8D8C6CDC */ lw $t4, %lo(gCurrentHud)($t4) /* 0A7DD8 800A71D8 240B0045 */ li $t3, 69 /* 0A7DDC 800A71DC A58B0266 */ sh $t3, 0x266($t4) .L800A71E0: @@ -91,8 +91,8 @@ glabel func_800A718C /* 0A7ED0 800A72D0 1040001D */ beqz $v0, .L800A7348 /* 0A7ED4 800A72D4 00000000 */ nop /* 0A7ED8 800A72D8 0069001A */ div $zero, $v1, $t1 -/* 0A7EDC 800A72DC 3C088012 */ lui $t0, %hi(D_80126CDC) # $t0, 0x8012 -/* 0A7EE0 800A72E0 25086CDC */ addiu $t0, %lo(D_80126CDC) # addiu $t0, $t0, 0x6cdc +/* 0A7EDC 800A72DC 3C088012 */ lui $t0, %hi(gCurrentHud) # $t0, 0x8012 +/* 0A7EE0 800A72E0 25086CDC */ addiu $t0, %lo(gCurrentHud) # addiu $t0, $t0, 0x6cdc /* 0A7EE4 800A72E4 8D0B0000 */ lw $t3, ($t0) /* 0A7EE8 800A72E8 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0A7EEC 800A72EC A56202B8 */ sh $v0, 0x2b8($t3) @@ -122,8 +122,8 @@ glabel func_800A718C /* 0A7F44 800A7344 00000000 */ nop .L800A7348: /* 0A7F48 800A7348 0069001A */ div $zero, $v1, $t1 -/* 0A7F4C 800A734C 3C0F8012 */ lui $t7, %hi(D_80126CDC) # $t7, 0x8012 -/* 0A7F50 800A7350 8DEF6CDC */ lw $t7, %lo(D_80126CDC)($t7) +/* 0A7F4C 800A734C 3C0F8012 */ lui $t7, %hi(gCurrentHud) # $t7, 0x8012 +/* 0A7F50 800A7350 8DEF6CDC */ lw $t7, %lo(gCurrentHud)($t7) /* 0A7F54 800A7354 15200002 */ bnez $t1, .L800A7360 /* 0A7F58 800A7358 00000000 */ nop /* 0A7F5C 800A735C 0007000D */ break 7 @@ -139,8 +139,8 @@ glabel func_800A718C /* 0A7F7C 800A737C A5EE02B8 */ sh $t6, 0x2b8($t7) /* 0A7F80 800A7380 00000000 */ nop .L800A7384: -/* 0A7F84 800A7384 3C078012 */ lui $a3, %hi(D_80126CDC) # $a3, 0x8012 -/* 0A7F88 800A7388 8CE76CDC */ lw $a3, %lo(D_80126CDC)($a3) +/* 0A7F84 800A7384 3C078012 */ lui $a3, %hi(gCurrentHud) # $a3, 0x8012 +/* 0A7F88 800A7388 8CE76CDC */ lw $a3, %lo(gCurrentHud)($a3) /* 0A7F8C 800A738C 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0A7F90 800A7390 3C058012 */ lui $a1, %hi(gHUDCurrMatrix) # $a1, 0x8012 /* 0A7F94 800A7394 3C068012 */ lui $a2, %hi(gHUDCurrVertex) # $a2, 0x8012 @@ -159,8 +159,8 @@ glabel func_800A718C /* 0A7FC8 800A73C8 0C01EFC7 */ jal func_8007BF1C /* 0A7FCC 800A73CC 24040001 */ li $a0, 1 .L800A73D0: -/* 0A7FD0 800A73D0 3C078012 */ lui $a3, %hi(D_80126CDC) # $a3, 0x8012 -/* 0A7FD4 800A73D4 8CE76CDC */ lw $a3, %lo(D_80126CDC)($a3) +/* 0A7FD0 800A73D0 3C078012 */ lui $a3, %hi(gCurrentHud) # $a3, 0x8012 +/* 0A7FD4 800A73D4 8CE76CDC */ lw $a3, %lo(gCurrentHud)($a3) /* 0A7FD8 800A73D8 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0A7FDC 800A73DC 3C058012 */ lui $a1, %hi(gHUDCurrMatrix) # $a1, 0x8012 /* 0A7FE0 800A73E0 3C068012 */ lui $a2, %hi(gHUDCurrVertex) # $a2, 0x8012 @@ -173,8 +173,8 @@ glabel func_800A718C /* 0A7FFC 800A73FC 00002025 */ move $a0, $zero /* 0A8000 800A7400 0C019826 */ jal set_viewport_tv_type /* 0A8004 800A7404 00002025 */ move $a0, $zero -/* 0A8008 800A7408 3C078012 */ lui $a3, %hi(D_80126CDC) # $a3, 0x8012 -/* 0A800C 800A740C 8CE76CDC */ lw $a3, %lo(D_80126CDC)($a3) +/* 0A8008 800A7408 3C078012 */ lui $a3, %hi(gCurrentHud) # $a3, 0x8012 +/* 0A800C 800A740C 8CE76CDC */ lw $a3, %lo(gCurrentHud)($a3) /* 0A8010 800A7410 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0A8014 800A7414 3C058012 */ lui $a1, %hi(gHUDCurrMatrix) # $a1, 0x8012 /* 0A8018 800A7418 3C068012 */ lui $a2, %hi(gHUDCurrVertex) # $a2, 0x8012 diff --git a/asm/non_matchings/game_ui/func_800A7A60.s b/asm/non_matchings/game_ui/func_800A7A60.s index ed96fc95..a5b18796 100644 --- a/asm/non_matchings/game_ui/func_800A7A60.s +++ b/asm/non_matchings/game_ui/func_800A7A60.s @@ -10,13 +10,13 @@ glabel func_800A7A60 /* 0A8680 800A7A80 0C019888 */ jal get_current_viewport /* 0A8684 800A7A84 AFA30024 */ sw $v1, 0x24($sp) /* 0A8688 800A7A88 8FA30024 */ lw $v1, 0x24($sp) -/* 0A868C 800A7A8C 3C078012 */ lui $a3, %hi(D_80126CDC) # $a3, 0x8012 +/* 0A868C 800A7A8C 3C078012 */ lui $a3, %hi(gCurrentHud) # $a3, 0x8012 /* 0A8690 800A7A90 846F0000 */ lh $t7, ($v1) /* 0A8694 800A7A94 00000000 */ nop /* 0A8698 800A7A98 144F0030 */ bne $v0, $t7, .L800A7B5C /* 0A869C 800A7A9C 8FBF001C */ lw $ra, 0x1c($sp) /* 0A86A0 800A7AA0 8C780140 */ lw $t8, 0x140($v1) -/* 0A86A4 800A7AA4 8CE76CDC */ lw $a3, %lo(D_80126CDC)($a3) +/* 0A86A4 800A7AA4 8CE76CDC */ lw $a3, %lo(gCurrentHud)($a3) /* 0A86A8 800A7AA8 C704000C */ lwc1 $f4, 0xc($t8) /* 0A86AC 800A7AAC 84E60226 */ lh $a2, 0x226($a3) /* 0A86B0 800A7AB0 E4E4022C */ swc1 $f4, 0x22c($a3) @@ -28,7 +28,7 @@ glabel func_800A7A60 /* 0A86C8 800A7AC8 8C680140 */ lw $t0, 0x140($v1) /* 0A86CC 800A7ACC 3C048012 */ lui $a0, %hi(gHUDCurrDisplayList) # $a0, 0x8012 /* 0A86D0 800A7AD0 C5080014 */ lwc1 $f8, 0x14($t0) -/* 0A86D4 800A7AD4 3C0C8012 */ lui $t4, %hi(D_80126CD8) # $t4, 0x8012 +/* 0A86D4 800A7AD4 3C0C8012 */ lui $t4, %hi(gAssetHudElementStaleCounter) # $t4, 0x8012 /* 0A86D8 800A7AD8 E4E80234 */ swc1 $f8, 0x234($a3) /* 0A86DC 800A7ADC 8D296CF4 */ lw $t1, %lo(gAssetHudElements)($t1) /* 0A86E0 800A7AE0 24846CFC */ addiu $a0, %lo(gHUDCurrDisplayList) # addiu $a0, $a0, 0x6cfc @@ -37,7 +37,7 @@ glabel func_800A7A60 /* 0A86EC 800A7AEC 3C058012 */ lui $a1, %hi(gHUDCurrMatrix) # $a1, 0x8012 /* 0A86F0 800A7AF0 10400019 */ beqz $v0, .L800A7B58 /* 0A86F4 800A7AF4 24E70220 */ addiu $a3, $a3, 0x220 -/* 0A86F8 800A7AF8 8D8C6CD8 */ lw $t4, %lo(D_80126CD8)($t4) +/* 0A86F8 800A7AF8 8D8C6CD8 */ lw $t4, %lo(gAssetHudElementStaleCounter)($t4) /* 0A86FC 800A7AFC 24A56D00 */ addiu $a1, %lo(gHUDCurrMatrix) # addiu $a1, $a1, 0x6d00 /* 0A8700 800A7B00 01866821 */ addu $t5, $t4, $a2 /* 0A8704 800A7B04 A1A00000 */ sb $zero, ($t5) diff --git a/asm/non_matchings/game_ui/func_800AA600.s b/asm/non_matchings/game_ui/func_800AA600.s index 264905a4..2aaad0d9 100644 --- a/asm/non_matchings/game_ui/func_800AA600.s +++ b/asm/non_matchings/game_ui/func_800AA600.s @@ -123,8 +123,8 @@ glabel func_800AA600 /* 0AB3AC 800AA7AC 00000000 */ nop /* 0AB3B0 800AA7B0 11E00203 */ beqz $t7, .L800AAFC0 .L800AA7B4: -/* 0AB3B4 800AA7B4 3C198012 */ lui $t9, %hi(D_80126CD8) # $t9, 0x8012 -/* 0AB3B8 800AA7B8 8F396CD8 */ lw $t9, %lo(D_80126CD8)($t9) +/* 0AB3B4 800AA7B4 3C198012 */ lui $t9, %hi(gAssetHudElementStaleCounter) # $t9, 0x8012 +/* 0AB3B8 800AA7B8 8F396CD8 */ lw $t9, %lo(gAssetHudElementStaleCounter)($t9) /* 0AB3BC 800AA7BC 3C018012 */ lui $at, %hi(gHUDCurrDisplayList) # $at, 0x8012 /* 0AB3C0 800AA7C0 0328C021 */ addu $t8, $t9, $t0 /* 0AB3C4 800AA7C4 A3000000 */ sb $zero, ($t8) diff --git a/asm/non_matchings/lights/func_80031CAC.s b/asm/non_matchings/lights/func_80031CAC.s index b2ce5954..c2a39af5 100644 --- a/asm/non_matchings/lights/func_80031CAC.s +++ b/asm/non_matchings/lights/func_80031CAC.s @@ -1,16 +1,16 @@ glabel func_80031CAC -/* 0328AC 80031CAC 3C03800E */ lui $v1, %hi(D_800DC95C) # $v1, 0x800e -/* 0328B0 80031CB0 2463C95C */ addiu $v1, %lo(D_800DC95C) # addiu $v1, $v1, -0x36a4 -/* 0328B4 80031CB4 3C0E800E */ lui $t6, %hi(D_800DC958) # $t6, 0x800e -/* 0328B8 80031CB8 8DCEC958 */ lw $t6, %lo(D_800DC958)($t6) +/* 0328AC 80031CAC 3C03800E */ lui $v1, %hi(gNumActiveLights) # $v1, 0x800e +/* 0328B0 80031CB0 2463C95C */ addiu $v1, %lo(gNumActiveLights) # addiu $v1, $v1, -0x36a4 +/* 0328B4 80031CB4 3C0E800E */ lui $t6, %hi(gMaxLights) # $t6, 0x800e +/* 0328B8 80031CB8 8DCEC958 */ lw $t6, %lo(gMaxLights)($t6) /* 0328BC 80031CBC 8C620000 */ lw $v0, ($v1) /* 0328C0 80031CC0 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0328C4 80031CC4 004E082A */ slt $at, $v0, $t6 /* 0328C8 80031CC8 AFBF0014 */ sw $ra, 0x14($sp) /* 0328CC 80031CCC 102000AA */ beqz $at, .L80031F78 /* 0328D0 80031CD0 00003025 */ move $a2, $zero -/* 0328D4 80031CD4 3C0F800E */ lui $t7, %hi(D_800DC950) # $t7, 0x800e -/* 0328D8 80031CD8 8DEFC950 */ lw $t7, %lo(D_800DC950)($t7) +/* 0328D4 80031CD4 3C0F800E */ lui $t7, %hi(gActiveLights) # $t7, 0x800e +/* 0328D8 80031CD8 8DEFC950 */ lw $t7, %lo(gActiveLights)($t7) /* 0328DC 80031CDC 0002C080 */ sll $t8, $v0, 2 /* 0328E0 80031CE0 01F8C821 */ addu $t9, $t7, $t8 /* 0328E4 80031CE4 8F260000 */ lw $a2, ($t9) diff --git a/asm/non_matchings/lights/func_80032C7C.s b/asm/non_matchings/lights/func_80032C7C.s index c5feea9b..098e4269 100644 --- a/asm/non_matchings/lights/func_80032C7C.s +++ b/asm/non_matchings/lights/func_80032C7C.s @@ -27,7 +27,7 @@ glabel func_80032C7C /* 0338E0 80032CE0 80620053 */ lb $v0, 0x53($v1) /* 0338E4 80032CE4 24010001 */ li $at, 1 /* 0338E8 80032CE8 10400009 */ beqz $v0, .L80032D10 -/* 0338EC 80032CEC 3C178012 */ lui $s7, %hi(D_8011D4CC) # $s7, 0x8012 +/* 0338EC 80032CEC 3C178012 */ lui $s7, %hi(gLightDiffZ) # $s7, 0x8012 /* 0338F0 80032CF0 10410009 */ beq $v0, $at, .L80032D18 /* 0338F4 80032CF4 24010002 */ li $at, 2 /* 0338F8 80032CF8 10410009 */ beq $v0, $at, .L80032D20 @@ -56,7 +56,7 @@ glabel func_80032C7C /* 033944 80032D44 2631C968 */ addiu $s1, %lo(D_800DC968) # addiu $s1, $s1, -0x3698 /* 033948 80032D48 44CFF800 */ ctc1 $t7, $31 /* 03394C 80032D4C 44183000 */ mfc1 $t8, $f6 -/* 033950 80032D50 3C0D800E */ lui $t5, %hi(D_800DC95C) # $t5, 0x800e +/* 033950 80032D50 3C0D800E */ lui $t5, %hi(gNumActiveLights) # $t5, 0x800e /* 033954 80032D54 4459F800 */ cfc1 $t9, $31 /* 033958 80032D58 A7B80082 */ sh $t8, 0x82($sp) /* 03395C 80032D5C 37210003 */ ori $at, $t9, 3 @@ -68,7 +68,7 @@ glabel func_80032C7C /* 033974 80032D74 00001025 */ move $v0, $zero /* 033978 80032D78 44D9F800 */ ctc1 $t9, $31 /* 03397C 80032D7C 440A5000 */ mfc1 $t2, $f10 -/* 033980 80032D80 26F7D4CC */ addiu $s7, %lo(D_8011D4CC) # addiu $s7, $s7, -0x2b34 +/* 033980 80032D80 26F7D4CC */ addiu $s7, %lo(gLightDiffZ) # addiu $s7, $s7, -0x2b34 /* 033984 80032D84 444BF800 */ cfc1 $t3, $31 /* 033988 80032D88 A7AA0080 */ sh $t2, 0x80($sp) /* 03398C 80032D8C 35610003 */ ori $at, $t3, 3 @@ -77,26 +77,26 @@ glabel func_80032C7C /* 033998 80032D98 C7D00014 */ lwc1 $f16, 0x14($fp) /* 03399C 80032D9C AE200000 */ sw $zero, ($s1) /* 0339A0 80032DA0 460084A4 */ cvt.w.s $f18, $f16 -/* 0339A4 80032DA4 8DADC95C */ lw $t5, %lo(D_800DC95C)($t5) +/* 0339A4 80032DA4 8DADC95C */ lw $t5, %lo(gNumActiveLights)($t5) /* 0339A8 80032DA8 440C9000 */ mfc1 $t4, $f18 /* 0339AC 80032DAC 44CBF800 */ ctc1 $t3, $31 /* 0339B0 80032DB0 19A00137 */ blez $t5, .L80033290 /* 0339B4 80032DB4 A7AC007E */ sh $t4, 0x7e($sp) /* 0339B8 80032DB8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0339BC 80032DBC 3C168012 */ lui $s6, %hi(D_8011D4C4) # $s6, 0x8012 -/* 0339C0 80032DC0 3C148012 */ lui $s4, %hi(D_8011D4C8) # $s4, 0x8012 +/* 0339BC 80032DBC 3C168012 */ lui $s6, %hi(gLightDiffX) # $s6, 0x8012 +/* 0339C0 80032DC0 3C148012 */ lui $s4, %hi(gLightDiffY) # $s4, 0x8012 /* 0339C4 80032DC4 3C13800E */ lui $s3, %hi(D_800DC960) # $s3, 0x800e /* 0339C8 80032DC8 4481C000 */ mtc1 $at, $f24 /* 0339CC 80032DCC 4480D000 */ mtc1 $zero, $f26 /* 0339D0 80032DD0 4480B000 */ mtc1 $zero, $f22 /* 0339D4 80032DD4 2673C960 */ addiu $s3, %lo(D_800DC960) # addiu $s3, $s3, -0x36a0 -/* 0339D8 80032DD8 2694D4C8 */ addiu $s4, %lo(D_8011D4C8) # addiu $s4, $s4, -0x2b38 -/* 0339DC 80032DDC 26D6D4C4 */ addiu $s6, %lo(D_8011D4C4) # addiu $s6, $s6, -0x2b3c +/* 0339D8 80032DD8 2694D4C8 */ addiu $s4, %lo(gLightDiffY) # addiu $s4, $s4, -0x2b38 +/* 0339DC 80032DDC 26D6D4C4 */ addiu $s6, %lo(gLightDiffX) # addiu $s6, $s6, -0x2b3c /* 0339E0 80032DE0 AFA30064 */ sw $v1, 0x64($sp) /* 0339E4 80032DE4 24120014 */ li $s2, 20 .L80032DE8: -/* 0339E8 80032DE8 3C0E800E */ lui $t6, %hi(D_800DC950) # $t6, 0x800e -/* 0339EC 80032DEC 8DCEC950 */ lw $t6, %lo(D_800DC950)($t6) +/* 0339E8 80032DE8 3C0E800E */ lui $t6, %hi(gActiveLights) # $t6, 0x800e +/* 0339EC 80032DEC 8DCEC950 */ lw $t6, %lo(gActiveLights)($t6) /* 0339F0 80032DF0 8FB90064 */ lw $t9, 0x64($sp) /* 0339F4 80032DF4 01C27821 */ addu $t7, $t6, $v0 /* 0339F8 80032DF8 8DF00000 */ lw $s0, ($t7) @@ -223,13 +223,13 @@ glabel func_80032C7C /* 033BD4 80032FD4 C6820000 */ lwc1 $f2, ($s4) /* 033BD8 80032FD8 46000282 */ mul.s $f10, $f0, $f0 /* 033BDC 80032FDC C6EC0000 */ lwc1 $f12, ($s7) -/* 033BE0 80032FE0 3C018012 */ lui $at, %hi(D_8011D4C0) # $at, 0x8012 +/* 033BE0 80032FE0 3C018012 */ lui $at, %hi(gLightDistance) # $at, 0x8012 /* 033BE4 80032FE4 46021402 */ mul.s $f16, $f2, $f2 /* 033BE8 80032FE8 00000000 */ nop /* 033BEC 80032FEC 460C6102 */ mul.s $f4, $f12, $f12 /* 033BF0 80032FF0 46105480 */ add.s $f18, $f10, $f16 /* 033BF4 80032FF4 46049180 */ add.s $f6, $f18, $f4 -/* 033BF8 80032FF8 E426D4C0 */ swc1 $f6, %lo(D_8011D4C0)($at) +/* 033BF8 80032FF8 E426D4C0 */ swc1 $f6, %lo(gLightDistance)($at) /* 033BFC 80032FFC C6080068 */ lwc1 $f8, 0x68($s0) /* 033C00 80033000 00000000 */ nop /* 033C04 80033004 4608303C */ c.lt.s $f6, $f8 @@ -263,12 +263,12 @@ glabel func_80032C7C /* 033C6C 8003306C 45000082 */ bc1f .L80033278 /* 033C70 80033070 00000000 */ nop /* 033C74 80033074 8FCA0040 */ lw $t2, 0x40($fp) -/* 033C78 80033078 3C018012 */ lui $at, %hi(D_8011D4C0) # $at, 0x8012 +/* 033C78 80033078 3C018012 */ lui $at, %hi(gLightDistance) # $at, 0x8012 /* 033C7C 8003307C 914F0071 */ lbu $t7, 0x71($t2) /* 033C80 80033080 00000000 */ nop /* 033C84 80033084 11E00033 */ beqz $t7, .L80033154 /* 033C88 80033088 00000000 */ nop -/* 033C8C 8003308C C42CD4C0 */ lwc1 $f12, %lo(D_8011D4C0)($at) +/* 033C8C 8003308C C42CD4C0 */ lwc1 $f12, %lo(gLightDistance)($at) /* 033C90 80033090 3C01BF80 */ li $at, 0xBF800000 # -1.000000 /* 033C94 80033094 460CB03C */ c.lt.s $f22, $f12 /* 033C98 80033098 00000000 */ nop @@ -398,8 +398,8 @@ glabel func_80032C7C /* 033E70 80033270 270F0001 */ addiu $t7, $t8, 1 /* 033E74 80033274 AE2F0000 */ sw $t7, ($s1) .L80033278: -/* 033E78 80033278 3C0B800E */ lui $t3, %hi(D_800DC95C) # $t3, 0x800e -/* 033E7C 8003327C 8D6BC95C */ lw $t3, %lo(D_800DC95C)($t3) +/* 033E78 80033278 3C0B800E */ lui $t3, %hi(gNumActiveLights) # $t3, 0x800e +/* 033E7C 8003327C 8D6BC95C */ lw $t3, %lo(gNumActiveLights)($t3) /* 033E80 80033280 26B50001 */ addiu $s5, $s5, 1 /* 033E84 80033284 02AB082A */ slt $at, $s5, $t3 /* 033E88 80033288 1420FED7 */ bnez $at, .L80032DE8 diff --git a/asm/non_matchings/lights/setup_lights.s b/asm/non_matchings/lights/setup_lights.s index 40d5ab61..93eb33ea 100644 --- a/asm/non_matchings/lights/setup_lights.s +++ b/asm/non_matchings/lights/setup_lights.s @@ -4,21 +4,21 @@ glabel setup_lights /* 0327C0 80031BC0 0C00C6D8 */ jal free_lights /* 0327C4 80031BC4 AFA40018 */ sw $a0, 0x18($sp) /* 0327C8 80031BC8 8FAE0018 */ lw $t6, 0x18($sp) -/* 0327CC 80031BCC 3C06800E */ lui $a2, %hi(D_800DC958) # $a2, 0x800e +/* 0327CC 80031BCC 3C06800E */ lui $a2, %hi(gMaxLights) # $a2, 0x800e /* 0327D0 80031BD0 000E7880 */ sll $t7, $t6, 2 /* 0327D4 80031BD4 01EE7823 */ subu $t7, $t7, $t6 /* 0327D8 80031BD8 000F7880 */ sll $t7, $t7, 2 /* 0327DC 80031BDC 01EE7823 */ subu $t7, $t7, $t6 /* 0327E0 80031BE0 000F7880 */ sll $t7, $t7, 2 -/* 0327E4 80031BE4 24C6C958 */ addiu $a2, %lo(D_800DC958) # addiu $a2, $a2, -0x36a8 +/* 0327E4 80031BE4 24C6C958 */ addiu $a2, %lo(gMaxLights) # addiu $a2, $a2, -0x36a8 /* 0327E8 80031BE8 3C05FF00 */ lui $a1, (0xFF00FFFF >> 16) # lui $a1, 0xff00 /* 0327EC 80031BEC 01EE7823 */ subu $t7, $t7, $t6 /* 0327F0 80031BF0 000F2080 */ sll $a0, $t7, 2 /* 0327F4 80031BF4 34A5FFFF */ ori $a1, (0xFF00FFFF & 0xFFFF) # ori $a1, $a1, 0xffff /* 0327F8 80031BF8 0C01C327 */ jal allocate_from_main_pool_safe /* 0327FC 80031BFC ACCE0000 */ sw $t6, ($a2) -/* 032800 80031C00 3C06800E */ lui $a2, %hi(D_800DC958) # $a2, 0x800e -/* 032804 80031C04 24C6C958 */ addiu $a2, %lo(D_800DC958) # addiu $a2, $a2, -0x36a8 +/* 032800 80031C00 3C06800E */ lui $a2, %hi(gMaxLights) # $a2, 0x800e +/* 032804 80031C04 24C6C958 */ addiu $a2, %lo(gMaxLights) # addiu $a2, $a2, -0x36a8 /* 032808 80031C08 8CC80000 */ lw $t0, ($a2) /* 03280C 80031C0C 3C05800E */ lui $a1, %hi(D_800DC954) # $a1, 0x800e /* 032810 80031C10 00085900 */ sll $t3, $t0, 4 @@ -27,12 +27,12 @@ glabel setup_lights /* 03281C 80031C1C 0058C821 */ addu $t9, $v0, $t8 /* 032820 80031C20 000B58C0 */ sll $t3, $t3, 3 /* 032824 80031C24 00087080 */ sll $t6, $t0, 2 -/* 032828 80031C28 3C07800E */ lui $a3, %hi(D_800DC950) # $a3, 0x800e +/* 032828 80031C28 3C07800E */ lui $a3, %hi(gActiveLights) # $a3, 0x800e /* 03282C 80031C2C 3C09800E */ lui $t1, %hi(D_800DC960) # $t1, 0x800e /* 032830 80031C30 032B6021 */ addu $t4, $t9, $t3 /* 032834 80031C34 01C87021 */ addu $t6, $t6, $t0 /* 032838 80031C38 2529C960 */ addiu $t1, %lo(D_800DC960) # addiu $t1, $t1, -0x36a0 -/* 03283C 80031C3C 24E7C950 */ addiu $a3, %lo(D_800DC950) # addiu $a3, $a3, -0x36b0 +/* 03283C 80031C3C 24E7C950 */ addiu $a3, %lo(gActiveLights) # addiu $a3, $a3, -0x36b0 /* 032840 80031C40 24A5C954 */ addiu $a1, %lo(D_800DC954) # addiu $a1, $a1, -0x36ac /* 032844 80031C44 000E7080 */ sll $t6, $t6, 2 /* 032848 80031C48 ACE20000 */ sw $v0, ($a3) diff --git a/asm/non_matchings/menu/menu_options_loop.s b/asm/non_matchings/menu/menu_options_loop.s index 6e87f421..4a9fe562 100644 --- a/asm/non_matchings/menu/menu_options_loop.s +++ b/asm/non_matchings/menu/menu_options_loop.s @@ -159,7 +159,7 @@ glabel menu_options_loop /* 0851A4 800845A4 24040000 */ li $a0, 0 /* 0851A8 800845A8 0C027AAF */ jal unset_eeprom_settings_value /* 0851AC 800845AC 3C050200 */ lui $a1, 0x200 -/* 0851B0 800845B0 0C030ABD */ jal func_800C2AF4 +/* 0851B0 800845B0 0C030ABD */ jal set_subtitles /* 0851B4 800845B4 00002025 */ move $a0, $zero /* 0851B8 800845B8 3C0B800E */ lui $t3, %hi(gMenuText) # $t3, 0x800e /* 0851BC 800845BC 8D6BF4A0 */ lw $t3, %lo(gMenuText)($t3) @@ -173,7 +173,7 @@ glabel menu_options_loop /* 0851D8 800845D8 24040000 */ li $a0, 0 /* 0851DC 800845DC 0C027A9E */ jal set_eeprom_settings_value /* 0851E0 800845E0 3C050200 */ lui $a1, 0x200 -/* 0851E4 800845E4 0C030ABD */ jal func_800C2AF4 +/* 0851E4 800845E4 0C030ABD */ jal set_subtitles /* 0851E8 800845E8 24040001 */ li $a0, 1 /* 0851EC 800845EC 3C0C800E */ lui $t4, %hi(gMenuText) # $t4, 0x800e /* 0851F0 800845F0 8D8CF4A0 */ lw $t4, %lo(gMenuText)($t4) diff --git a/asm/non_matchings/object_functions/obj_loop_door.s b/asm/non_matchings/object_functions/obj_loop_door.s index 64848ae9..085491ce 100644 --- a/asm/non_matchings/object_functions/obj_loop_door.s +++ b/asm/non_matchings/object_functions/obj_loop_door.s @@ -1,585 +1,585 @@ -.late_rodata -glabel D_800E6168 -.double 1.2 -glabel D_800E6170 -.double 130.0 - -.text -glabel obj_loop_door -/* 03C588 8003B988 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 03C58C 8003B98C 44852000 */ mtc1 $a1, $f4 -/* 03C590 8003B990 AFBF0024 */ sw $ra, 0x24($sp) -/* 03C594 8003B994 AFB00020 */ sw $s0, 0x20($sp) -/* 03C598 8003B998 AFA50064 */ sw $a1, 0x64($sp) -/* 03C59C 8003B99C 3C188000 */ lui $t8, %hi(osTvType) # $t8, 0x8000 -/* 03C5A0 8003B9A0 46802020 */ cvt.s.w $f0, $f4 -/* 03C5A4 8003B9A4 8C8E003C */ lw $t6, 0x3c($a0) -/* 03C5A8 8003B9A8 8F180300 */ lw $t8, %lo(osTvType)($t8) -/* 03C5AC 8003B9AC 00808025 */ move $s0, $a0 -/* 03C5B0 8003B9B0 46000086 */ mov.s $f2, $f0 -/* 03C5B4 8003B9B4 17000007 */ bnez $t8, .L8003B9D4 -/* 03C5B8 8003B9B8 AFAE0034 */ sw $t6, 0x34($sp) -/* 03C5BC 8003B9BC 3C01800E */ lui $at, %hi(D_800E6168 + 4) # $at, 0x800e -/* 03C5C0 8003B9C0 C4296168 */ lwc1 $f9, %lo(D_800E6168)($at) -/* 03C5C4 8003B9C4 C428616C */ lwc1 $f8, %lo(D_800E6168 + 4)($at) -/* 03C5C8 8003B9C8 460001A1 */ cvt.d.s $f6, $f0 -/* 03C5CC 8003B9CC 46283282 */ mul.d $f10, $f6, $f8 -/* 03C5D0 8003B9D0 462050A0 */ cvt.s.d $f2, $f10 -.L8003B9D4: -/* 03C5D4 8003B9D4 0C01BAA4 */ jal get_settings -/* 03C5D8 8003B9D8 E7A20030 */ swc1 $f2, 0x30($sp) -/* 03C5DC 8003B9DC 904B0049 */ lbu $t3, 0x49($v0) -/* 03C5E0 8003B9E0 8C590004 */ lw $t9, 4($v0) -/* 03C5E4 8003B9E4 8E080064 */ lw $t0, 0x64($s0) -/* 03C5E8 8003B9E8 000B6080 */ sll $t4, $t3, 2 -/* 03C5EC 8003B9EC 8103000E */ lb $v1, 0xe($t0) -/* 03C5F0 8003B9F0 032C6821 */ addu $t5, $t9, $t4 -/* 03C5F4 8003B9F4 8DA50000 */ lw $a1, ($t5) -/* 03C5F8 8003B9F8 046001E6 */ bltz $v1, .L8003C194 -/* 03C5FC 8003B9FC 00404825 */ move $t1, $v0 -/* 03C600 8003BA00 3C0E0001 */ lui $t6, 1 -/* 03C604 8003BA04 006E7804 */ sllv $t7, $t6, $v1 -/* 03C608 8003BA08 AFAF0054 */ sw $t7, 0x54($sp) -/* 03C60C 8003BA0C 8E02004C */ lw $v0, 0x4c($s0) -/* 03C610 8003BA10 00000000 */ nop -/* 03C614 8003BA14 90440013 */ lbu $a0, 0x13($v0) -/* 03C618 8003BA18 00000000 */ nop -/* 03C61C 8003BA1C AFA40050 */ sw $a0, 0x50($sp) -/* 03C620 8003BA20 9118000F */ lbu $t8, 0xf($t0) -/* 03C624 8003BA24 00000000 */ nop -/* 03C628 8003BA28 330B0001 */ andi $t3, $t8, 1 -/* 03C62C 8003BA2C 15600003 */ bnez $t3, .L8003BA3C -/* 03C630 8003BA30 8FB90054 */ lw $t9, 0x54($sp) -/* 03C634 8003BA34 AFA00050 */ sw $zero, 0x50($sp) -/* 03C638 8003BA38 8FB90054 */ lw $t9, 0x54($sp) -.L8003BA3C: -/* 03C63C 8003BA3C 00000000 */ nop -/* 03C640 8003BA40 00B96024 */ and $t4, $a1, $t9 -/* 03C644 8003BA44 15800050 */ bnez $t4, .L8003BB88 -/* 03C648 8003BA48 AFAC0028 */ sw $t4, 0x28($sp) -/* 03C64C 8003BA4C 910E0012 */ lbu $t6, 0x12($t0) -/* 03C650 8003BA50 00000000 */ nop -/* 03C654 8003BA54 008E082A */ slt $at, $a0, $t6 -/* 03C658 8003BA58 1020004B */ beqz $at, .L8003BB88 -/* 03C65C 8003BA5C 00000000 */ nop -/* 03C660 8003BA60 8C430000 */ lw $v1, ($v0) -/* 03C664 8003BA64 00000000 */ nop -/* 03C668 8003BA68 10600047 */ beqz $v1, .L8003BB88 -/* 03C66C 8003BA6C 00000000 */ nop -/* 03C670 8003BA70 8C6F0040 */ lw $t7, 0x40($v1) -/* 03C674 8003BA74 24060001 */ li $a2, 1 -/* 03C678 8003BA78 81F80054 */ lb $t8, 0x54($t7) -/* 03C67C 8003BA7C 00000000 */ nop -/* 03C680 8003BA80 14D80041 */ bne $a2, $t8, .L8003BB88 -/* 03C684 8003BA84 00000000 */ nop -/* 03C688 8003BA88 8C620064 */ lw $v0, 0x64($v1) -/* 03C68C 8003BA8C 2401FFFF */ li $at, -1 -/* 03C690 8003BA90 844B0000 */ lh $t3, ($v0) -/* 03C694 8003BA94 00000000 */ nop -/* 03C698 8003BA98 11610033 */ beq $t3, $at, .L8003BB68 -/* 03C69C 8003BA9C 00000000 */ nop -/* 03C6A0 8003BAA0 8E19005C */ lw $t9, 0x5c($s0) -/* 03C6A4 8003BAA4 00000000 */ nop -/* 03C6A8 8003BAA8 8F2C0100 */ lw $t4, 0x100($t9) -/* 03C6AC 8003BAAC 00000000 */ nop -/* 03C6B0 8003BAB0 146C002D */ bne $v1, $t4, .L8003BB68 -/* 03C6B4 8003BAB4 00000000 */ nop -/* 03C6B8 8003BAB8 810D0013 */ lb $t5, 0x13($t0) -/* 03C6BC 8003BABC 2401FFFF */ li $at, -1 -/* 03C6C0 8003BAC0 11A10028 */ beq $t5, $at, .L8003BB64 -/* 03C6C4 8003BAC4 240B012C */ li $t3, 300 -/* 03C6C8 8003BAC8 AFA80044 */ sw $t0, 0x44($sp) -/* 03C6CC 8003BACC 0C030D00 */ jal func_800C3400 -/* 03C6D0 8003BAD0 AFA90040 */ sw $t1, 0x40($sp) -/* 03C6D4 8003BAD4 8FA80044 */ lw $t0, 0x44($sp) -/* 03C6D8 8003BAD8 8FA90040 */ lw $t1, 0x40($sp) -/* 03C6DC 8003BADC 14400021 */ bnez $v0, .L8003BB64 -/* 03C6E0 8003BAE0 240B012C */ li $t3, 300 -/* 03C6E4 8003BAE4 850E000C */ lh $t6, 0xc($t0) -/* 03C6E8 8003BAE8 2404FFF8 */ li $a0, -8 -/* 03C6EC 8003BAEC 15C0001D */ bnez $t6, .L8003BB64 -/* 03C6F0 8003BAF0 240B012C */ li $t3, 300 -/* 03C6F4 8003BAF4 AFA80044 */ sw $t0, 0x44($sp) -/* 03C6F8 8003BAF8 0C000326 */ jal set_music_fade_timer -/* 03C6FC 8003BAFC AFA90040 */ sw $t1, 0x40($sp) -/* 03C700 8003BB00 8FA80044 */ lw $t0, 0x44($sp) -/* 03C704 8003BB04 240F008C */ li $t7, 140 -/* 03C708 8003BB08 24040010 */ li $a0, 16 -/* 03C70C 8003BB0C 0C00030E */ jal set_sndfx_player_voice_limit -/* 03C710 8003BB10 AD0F0008 */ sw $t7, 8($t0) -/* 03C714 8003BB14 0C002050 */ jal func_80008140 -/* 03C718 8003BB18 00000000 */ nop -/* 03C71C 8003BB1C 0C0006F0 */ jal play_sequence -/* 03C720 8003BB20 24040011 */ li $a0, 17 -/* 03C724 8003BB24 8FA80044 */ lw $t0, 0x44($sp) -/* 03C728 8003BB28 00000000 */ nop -/* 03C72C 8003BB2C 91040010 */ lbu $a0, 0x10($t0) -/* 03C730 8003BB30 0C030C50 */ jal func_800C3140 -/* 03C734 8003BB34 00000000 */ nop -/* 03C738 8003BB38 8FA80044 */ lw $t0, 0x44($sp) -/* 03C73C 8003BB3C 00000000 */ nop -/* 03C740 8003BB40 81040013 */ lb $a0, 0x13($t0) -/* 03C744 8003BB44 00000000 */ nop -/* 03C748 8003BB48 309800FF */ andi $t8, $a0, 0xff -/* 03C74C 8003BB4C 0C030C7B */ jal func_800C31EC -/* 03C750 8003BB50 03002025 */ move $a0, $t8 -/* 03C754 8003BB54 8FA80044 */ lw $t0, 0x44($sp) -/* 03C758 8003BB58 8FA90040 */ lw $t1, 0x40($sp) -/* 03C75C 8003BB5C 00000000 */ nop -/* 03C760 8003BB60 240B012C */ li $t3, 300 -.L8003BB64: -/* 03C764 8003BB64 A50B000C */ sh $t3, 0xc($t0) -.L8003BB68: -/* 03C768 8003BB68 AFA80044 */ sw $t0, 0x44($sp) -/* 03C76C 8003BB6C 0C030D00 */ jal func_800C3400 -/* 03C770 8003BB70 AFA90040 */ sw $t1, 0x40($sp) -/* 03C774 8003BB74 8FA80044 */ lw $t0, 0x44($sp) -/* 03C778 8003BB78 8FA90040 */ lw $t1, 0x40($sp) -/* 03C77C 8003BB7C 10400002 */ beqz $v0, .L8003BB88 -/* 03C780 8003BB80 2419012C */ li $t9, 300 -/* 03C784 8003BB84 A519000C */ sh $t9, 0xc($t0) -.L8003BB88: -/* 03C788 8003BB88 8D0C0008 */ lw $t4, 8($t0) -/* 03C78C 8003BB8C 00000000 */ nop -/* 03C790 8003BB90 1180001B */ beqz $t4, .L8003BC00 -/* 03C794 8003BB94 00000000 */ nop -/* 03C798 8003BB98 AFA80044 */ sw $t0, 0x44($sp) -/* 03C79C 8003BB9C 0C000702 */ jal func_80001C08 -/* 03C7A0 8003BBA0 AFA90040 */ sw $t1, 0x40($sp) -/* 03C7A4 8003BBA4 8FA80044 */ lw $t0, 0x44($sp) -/* 03C7A8 8003BBA8 8FA90040 */ lw $t1, 0x40($sp) -/* 03C7AC 8003BBAC 14400014 */ bnez $v0, .L8003BC00 -/* 03C7B0 8003BBB0 00000000 */ nop -/* 03C7B4 8003BBB4 8FA30064 */ lw $v1, 0x64($sp) -/* 03C7B8 8003BBB8 8D020008 */ lw $v0, 8($t0) -/* 03C7BC 8003BBBC 24040008 */ li $a0, 8 -/* 03C7C0 8003BBC0 0062082A */ slt $at, $v1, $v0 -/* 03C7C4 8003BBC4 10200003 */ beqz $at, .L8003BBD4 -/* 03C7C8 8003BBC8 00436823 */ subu $t5, $v0, $v1 -/* 03C7CC 8003BBCC 1000000C */ b .L8003BC00 -/* 03C7D0 8003BBD0 AD0D0008 */ sw $t5, 8($t0) -.L8003BBD4: -/* 03C7D4 8003BBD4 AD000008 */ sw $zero, 8($t0) -/* 03C7D8 8003BBD8 AFA90040 */ sw $t1, 0x40($sp) -/* 03C7DC 8003BBDC 0C000326 */ jal set_music_fade_timer -/* 03C7E0 8003BBE0 AFA80044 */ sw $t0, 0x44($sp) -/* 03C7E4 8003BBE4 0C00030E */ jal set_sndfx_player_voice_limit -/* 03C7E8 8003BBE8 24040006 */ li $a0, 6 -/* 03C7EC 8003BBEC 0C00205A */ jal func_80008168 -/* 03C7F0 8003BBF0 00000000 */ nop -/* 03C7F4 8003BBF4 8FA80044 */ lw $t0, 0x44($sp) -/* 03C7F8 8003BBF8 8FA90040 */ lw $t1, 0x40($sp) -/* 03C7FC 8003BBFC 00000000 */ nop -.L8003BC00: -/* 03C800 8003BC00 8502000C */ lh $v0, 0xc($t0) -/* 03C804 8003BC04 8FA30064 */ lw $v1, 0x64($sp) -/* 03C808 8003BC08 18400004 */ blez $v0, .L8003BC1C -/* 03C80C 8003BC0C 24060001 */ li $a2, 1 -/* 03C810 8003BC10 00437023 */ subu $t6, $v0, $v1 -/* 03C814 8003BC14 10000002 */ b .L8003BC20 -/* 03C818 8003BC18 A50E000C */ sh $t6, 0xc($t0) -.L8003BC1C: -/* 03C81C 8003BC1C A500000C */ sh $zero, 0xc($t0) -.L8003BC20: -/* 03C820 8003BC20 8E02004C */ lw $v0, 0x4c($s0) -/* 03C824 8003BC24 91180012 */ lbu $t8, 0x12($t0) -/* 03C828 8003BC28 904F0013 */ lbu $t7, 0x13($v0) -/* 03C82C 8003BC2C 8FAA0034 */ lw $t2, 0x34($sp) -/* 03C830 8003BC30 01F8082A */ slt $at, $t7, $t8 -/* 03C834 8003BC34 10200018 */ beqz $at, .L8003BC98 -/* 03C838 8003BC38 00002025 */ move $a0, $zero -/* 03C83C 8003BC3C 8C430000 */ lw $v1, ($v0) -/* 03C840 8003BC40 00000000 */ nop -/* 03C844 8003BC44 10600014 */ beqz $v1, .L8003BC98 -/* 03C848 8003BC48 00000000 */ nop -/* 03C84C 8003BC4C 8C6B0040 */ lw $t3, 0x40($v1) -/* 03C850 8003BC50 00000000 */ nop -/* 03C854 8003BC54 81790054 */ lb $t9, 0x54($t3) -/* 03C858 8003BC58 00000000 */ nop -/* 03C85C 8003BC5C 14D9000E */ bne $a2, $t9, .L8003BC98 -/* 03C860 8003BC60 00000000 */ nop -/* 03C864 8003BC64 8C620064 */ lw $v0, 0x64($v1) -/* 03C868 8003BC68 24010002 */ li $at, 2 -/* 03C86C 8003BC6C 804401D6 */ lb $a0, 0x1d6($v0) -/* 03C870 8003BC70 00000000 */ nop -/* 03C874 8003BC74 10860005 */ beq $a0, $a2, .L8003BC8C -/* 03C878 8003BC78 00000000 */ nop -/* 03C87C 8003BC7C 10810006 */ beq $a0, $at, .L8003BC98 -/* 03C880 8003BC80 24040004 */ li $a0, 4 -/* 03C884 8003BC84 10000004 */ b .L8003BC98 -/* 03C888 8003BC88 00C02025 */ move $a0, $a2 -.L8003BC8C: -/* 03C88C 8003BC8C 10000002 */ b .L8003BC98 -/* 03C890 8003BC90 24040002 */ li $a0, 2 -/* 03C894 8003BC94 24040004 */ li $a0, 4 -.L8003BC98: -/* 03C898 8003BC98 914C0010 */ lbu $t4, 0x10($t2) -/* 03C89C 8003BC9C 91420000 */ lbu $v0, ($t2) -/* 03C8A0 8003BCA0 24010087 */ li $at, 135 -/* 03C8A4 8003BCA4 10410004 */ beq $v0, $at, .L8003BCB8 -/* 03C8A8 8003BCA8 008C2024 */ and $a0, $a0, $t4 -/* 03C8AC 8003BCAC 240100D7 */ li $at, 215 -/* 03C8B0 8003BCB0 1441000B */ bne $v0, $at, .L8003BCE0 -/* 03C8B4 8003BCB4 00000000 */ nop -.L8003BCB8: -/* 03C8B8 8003BCB8 AFA4004C */ sw $a0, 0x4c($sp) -/* 03C8BC 8003BCBC AFA80044 */ sw $t0, 0x44($sp) -/* 03C8C0 8003BCC0 0C008D70 */ jal func_800235C0 -/* 03C8C4 8003BCC4 AFA90040 */ sw $t1, 0x40($sp) -/* 03C8C8 8003BCC8 8FA4004C */ lw $a0, 0x4c($sp) -/* 03C8CC 8003BCCC 8FA80044 */ lw $t0, 0x44($sp) -/* 03C8D0 8003BCD0 8FA90040 */ lw $t1, 0x40($sp) -/* 03C8D4 8003BCD4 10400002 */ beqz $v0, .L8003BCE0 -/* 03C8D8 8003BCD8 00000000 */ nop -/* 03C8DC 8003BCDC AFA00050 */ sw $zero, 0x50($sp) -.L8003BCE0: -/* 03C8E0 8003BCE0 810D0015 */ lb $t5, 0x15($t0) -/* 03C8E4 8003BCE4 8FAA0034 */ lw $t2, 0x34($sp) -/* 03C8E8 8003BCE8 15A00012 */ bnez $t5, .L8003BD34 -/* 03C8EC 8003BCEC 24060001 */ li $a2, 1 -/* 03C8F0 8003BCF0 91020012 */ lbu $v0, 0x12($t0) -/* 03C8F4 8003BCF4 1480000A */ bnez $a0, .L8003BD20 -/* 03C8F8 8003BCF8 8FB80050 */ lw $t8, 0x50($sp) -/* 03C8FC 8003BCFC 8FAE0028 */ lw $t6, 0x28($sp) -/* 03C900 8003BD00 8FAF0050 */ lw $t7, 0x50($sp) -/* 03C904 8003BD04 11C00005 */ beqz $t6, .L8003BD1C -/* 03C908 8003BD08 01E2082A */ slt $at, $t7, $v0 -/* 03C90C 8003BD0C 10200004 */ beqz $at, .L8003BD20 -/* 03C910 8003BD10 8FB80050 */ lw $t8, 0x50($sp) -/* 03C914 8003BD14 10000007 */ b .L8003BD34 -/* 03C918 8003BD18 A1060015 */ sb $a2, 0x15($t0) -.L8003BD1C: -/* 03C91C 8003BD1C 8FB80050 */ lw $t8, 0x50($sp) -.L8003BD20: -/* 03C920 8003BD20 244B000A */ addiu $t3, $v0, 0xa -/* 03C924 8003BD24 0178082A */ slt $at, $t3, $t8 -/* 03C928 8003BD28 10200002 */ beqz $at, .L8003BD34 -/* 03C92C 8003BD2C 2419FFFF */ li $t9, -1 -/* 03C930 8003BD30 A1190015 */ sb $t9, 0x15($t0) -.L8003BD34: -/* 03C934 8003BD34 910C000F */ lbu $t4, 0xf($t0) -/* 03C938 8003BD38 8FAE0028 */ lw $t6, 0x28($sp) -/* 03C93C 8003BD3C 318D0002 */ andi $t5, $t4, 2 -/* 03C940 8003BD40 11A0005E */ beqz $t5, .L8003BEBC -/* 03C944 8003BD44 00002825 */ move $a1, $zero -/* 03C948 8003BD48 11C00033 */ beqz $t6, .L8003BE18 -/* 03C94C 8003BD4C 00000000 */ nop -/* 03C950 8003BD50 914F0000 */ lbu $t7, ($t2) -/* 03C954 8003BD54 24010019 */ li $at, 25 -/* 03C958 8003BD58 15E1002F */ bne $t7, $at, .L8003BE18 -/* 03C95C 8003BD5C 00000000 */ nop -/* 03C960 8003BD60 814B0014 */ lb $t3, 0x14($t2) -/* 03C964 8003BD64 8D380004 */ lw $t8, 4($t1) -/* 03C968 8003BD68 000BC880 */ sll $t9, $t3, 2 -/* 03C96C 8003BD6C 03196021 */ addu $t4, $t8, $t9 -/* 03C970 8003BD70 8D820000 */ lw $v0, ($t4) -/* 03C974 8003BD74 00000000 */ nop -/* 03C978 8003BD78 304D0002 */ andi $t5, $v0, 2 -/* 03C97C 8003BD7C 11A00023 */ beqz $t5, .L8003BE0C -/* 03C980 8003BD80 304E0004 */ andi $t6, $v0, 4 -/* 03C984 8003BD84 91220048 */ lbu $v0, 0x48($t1) -/* 03C988 8003BD88 24010005 */ li $at, 5 -/* 03C98C 8003BD8C 10410006 */ beq $v0, $at, .L8003BDA8 -/* 03C990 8003BD90 240F0001 */ li $t7, 1 -/* 03C994 8003BD94 952E000C */ lhu $t6, 0xc($t1) -/* 03C998 8003BD98 004F5804 */ sllv $t3, $t7, $v0 -/* 03C99C 8003BD9C 01CBC024 */ and $t8, $t6, $t3 -/* 03C9A0 8003BDA0 13000012 */ beqz $t8, .L8003BDEC -/* 03C9A4 8003BDA4 00000000 */ nop -.L8003BDA8: -/* 03C9A8 8003BDA8 91590015 */ lbu $t9, 0x15($t2) -/* 03C9AC 8003BDAC 240F0002 */ li $t7, 2 -/* 03C9B0 8003BDB0 332C00FF */ andi $t4, $t9, 0xff -/* 03C9B4 8003BDB4 2981000A */ slti $at, $t4, 0xa -/* 03C9B8 8003BDB8 14200004 */ bnez $at, .L8003BDCC -/* 03C9BC 8003BDBC A1190010 */ sb $t9, 0x10($t0) -/* 03C9C0 8003BDC0 240D0003 */ li $t5, 3 -/* 03C9C4 8003BDC4 10000002 */ b .L8003BDD0 -/* 03C9C8 8003BDC8 A20D003A */ sb $t5, 0x3a($s0) -.L8003BDCC: -/* 03C9CC 8003BDCC A20F003A */ sb $t7, 0x3a($s0) -.L8003BDD0: -/* 03C9D0 8003BDD0 814B0014 */ lb $t3, 0x14($t2) -/* 03C9D4 8003BDD4 8D2E0004 */ lw $t6, 4($t1) -/* 03C9D8 8003BDD8 000BC080 */ sll $t8, $t3, 2 -/* 03C9DC 8003BDDC 01D8C821 */ addu $t9, $t6, $t8 -/* 03C9E0 8003BDE0 8F220000 */ lw $v0, ($t9) -/* 03C9E4 8003BDE4 10000009 */ b .L8003BE0C -/* 03C9E8 8003BDE8 304E0004 */ andi $t6, $v0, 4 -.L8003BDEC: -/* 03C9EC 8003BDEC A200003A */ sb $zero, 0x3a($s0) -/* 03C9F0 8003BDF0 814D0014 */ lb $t5, 0x14($t2) -/* 03C9F4 8003BDF4 8D2C0004 */ lw $t4, 4($t1) -/* 03C9F8 8003BDF8 000D7880 */ sll $t7, $t5, 2 -/* 03C9FC 8003BDFC 018F5821 */ addu $t3, $t4, $t7 -/* 03CA00 8003BE00 8D620000 */ lw $v0, ($t3) -/* 03CA04 8003BE04 00000000 */ nop -/* 03CA08 8003BE08 304E0004 */ andi $t6, $v0, 4 -.L8003BE0C: -/* 03CA0C 8003BE0C 11C00002 */ beqz $t6, .L8003BE18 -/* 03CA10 8003BE10 00000000 */ nop -/* 03CA14 8003BE14 A206003A */ sb $a2, 0x3a($s0) -.L8003BE18: -/* 03CA18 8003BE18 81030015 */ lb $v1, 0x15($t0) -/* 03CA1C 8003BE1C 2401FFFF */ li $at, -1 -/* 03CA20 8003BE20 14C30015 */ bne $a2, $v1, .L8003BE78 -/* 03CA24 8003BE24 00000000 */ nop -/* 03CA28 8003BE28 3C01800E */ lui $at, %hi(D_800E6170 + 4) # $at, 0x800e -/* 03CA2C 8003BE2C C5120000 */ lwc1 $f18, ($t0) -/* 03CA30 8003BE30 C4276170 */ lwc1 $f7, %lo(D_800E6170)($at) -/* 03CA34 8003BE34 C4266174 */ lwc1 $f6, %lo(D_800E6170 + 4)($at) -/* 03CA38 8003BE38 C6100010 */ lwc1 $f16, 0x10($s0) -/* 03CA3C 8003BE3C 46009121 */ cvt.d.s $f4, $f18 -/* 03CA40 8003BE40 46262200 */ add.d $f8, $f4, $f6 -/* 03CA44 8003BE44 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 03CA48 8003BE48 460080A1 */ cvt.d.s $f2, $f16 -/* 03CA4C 8003BE4C 4628103C */ c.lt.d $f2, $f8 -/* 03CA50 8003BE50 00000000 */ nop -/* 03CA54 8003BE54 45000064 */ bc1f .L8003BFE8 -/* 03CA58 8003BE58 00000000 */ nop -/* 03CA5C 8003BE5C 46005021 */ cvt.d.s $f0, $f10 -/* 03CA60 8003BE60 46200400 */ add.d $f16, $f0, $f0 -/* 03CA64 8003BE64 24050001 */ li $a1, 1 -/* 03CA68 8003BE68 46301480 */ add.d $f18, $f2, $f16 -/* 03CA6C 8003BE6C 46209120 */ cvt.s.d $f4, $f18 -/* 03CA70 8003BE70 1000005D */ b .L8003BFE8 -/* 03CA74 8003BE74 E6040010 */ swc1 $f4, 0x10($s0) -.L8003BE78: -/* 03CA78 8003BE78 1461005B */ bne $v1, $at, .L8003BFE8 -/* 03CA7C 8003BE7C 00000000 */ nop -/* 03CA80 8003BE80 C6020010 */ lwc1 $f2, 0x10($s0) -/* 03CA84 8003BE84 C5060000 */ lwc1 $f6, ($t0) -/* 03CA88 8003BE88 C7A80030 */ lwc1 $f8, 0x30($sp) -/* 03CA8C 8003BE8C 4602303C */ c.lt.s $f6, $f2 -/* 03CA90 8003BE90 00000000 */ nop -/* 03CA94 8003BE94 45000054 */ bc1f .L8003BFE8 -/* 03CA98 8003BE98 00000000 */ nop -/* 03CA9C 8003BE9C 46004021 */ cvt.d.s $f0, $f8 -/* 03CAA0 8003BEA0 46200400 */ add.d $f16, $f0, $f0 -/* 03CAA4 8003BEA4 24050001 */ li $a1, 1 -/* 03CAA8 8003BEA8 460012A1 */ cvt.d.s $f10, $f2 -/* 03CAAC 8003BEAC 46305481 */ sub.d $f18, $f10, $f16 -/* 03CAB0 8003BEB0 46209120 */ cvt.s.d $f4, $f18 -/* 03CAB4 8003BEB4 1000004C */ b .L8003BFE8 -/* 03CAB8 8003BEB8 E6040010 */ swc1 $f4, 0x10($s0) -.L8003BEBC: -/* 03CABC 8003BEBC 91580000 */ lbu $t8, ($t2) -/* 03CAC0 8003BEC0 240100D7 */ li $at, 215 -/* 03CAC4 8003BEC4 17010025 */ bne $t8, $at, .L8003BF5C -/* 03CAC8 8003BEC8 24190001 */ li $t9, 1 -/* 03CACC 8003BECC A200003A */ sb $zero, 0x3a($s0) -/* 03CAD0 8003BED0 91240048 */ lbu $a0, 0x48($t1) -/* 03CAD4 8003BED4 9523000C */ lhu $v1, 0xc($t1) -/* 03CAD8 8003BED8 00996804 */ sllv $t5, $t9, $a0 -/* 03CADC 8003BEDC 006D6024 */ and $t4, $v1, $t5 -/* 03CAE0 8003BEE0 1180000C */ beqz $t4, .L8003BF14 -/* 03CAE4 8003BEE4 00801025 */ move $v0, $a0 -/* 03CAE8 8003BEE8 8D2F0000 */ lw $t7, ($t1) -/* 03CAEC 8003BEEC 00045840 */ sll $t3, $a0, 1 -/* 03CAF0 8003BEF0 01EB7021 */ addu $t6, $t7, $t3 -/* 03CAF4 8003BEF4 85D80000 */ lh $t8, ($t6) -/* 03CAF8 8003BEF8 24010008 */ li $at, 8 -/* 03CAFC 8003BEFC 17010006 */ bne $t8, $at, .L8003BF18 -/* 03CB00 8003BF00 24590006 */ addiu $t9, $v0, 6 -/* 03CB04 8003BF04 A206003A */ sb $a2, 0x3a($s0) -/* 03CB08 8003BF08 9523000C */ lhu $v1, 0xc($t1) -/* 03CB0C 8003BF0C 91220048 */ lbu $v0, 0x48($t1) -/* 03CB10 8003BF10 00000000 */ nop -.L8003BF14: -/* 03CB14 8003BF14 24590006 */ addiu $t9, $v0, 6 -.L8003BF18: -/* 03CB18 8003BF18 240D0001 */ li $t5, 1 -/* 03CB1C 8003BF1C 032D6004 */ sllv $t4, $t5, $t9 -/* 03CB20 8003BF20 006C7824 */ and $t7, $v1, $t4 -/* 03CB24 8003BF24 11E00005 */ beqz $t7, .L8003BF3C -/* 03CB28 8003BF28 24010005 */ li $at, 5 -/* 03CB2C 8003BF2C 240B0002 */ li $t3, 2 -/* 03CB30 8003BF30 A20B003A */ sb $t3, 0x3a($s0) -/* 03CB34 8003BF34 91220048 */ lbu $v0, 0x48($t1) -/* 03CB38 8003BF38 00000000 */ nop -.L8003BF3C: -/* 03CB3C 8003BF3C 14410007 */ bne $v0, $at, .L8003BF5C -/* 03CB40 8003BF40 00000000 */ nop -/* 03CB44 8003BF44 8202003A */ lb $v0, 0x3a($s0) -/* 03CB48 8003BF48 00000000 */ nop -/* 03CB4C 8003BF4C 28410002 */ slti $at, $v0, 2 -/* 03CB50 8003BF50 10200002 */ beqz $at, .L8003BF5C -/* 03CB54 8003BF54 244E0001 */ addiu $t6, $v0, 1 -/* 03CB58 8003BF58 A20E003A */ sb $t6, 0x3a($s0) -.L8003BF5C: -/* 03CB5C 8003BF5C 81030015 */ lb $v1, 0x15($t0) -/* 03CB60 8003BF60 00001025 */ move $v0, $zero -/* 03CB64 8003BF64 14C30008 */ bne $a2, $v1, .L8003BF88 -/* 03CB68 8003BF68 2401FFFF */ li $at, -1 -/* 03CB6C 8003BF6C 86180000 */ lh $t8, ($s0) -/* 03CB70 8003BF70 8E0D007C */ lw $t5, 0x7c($s0) -/* 03CB74 8003BF74 00000000 */ nop -/* 03CB78 8003BF78 030D1023 */ subu $v0, $t8, $t5 -/* 03CB7C 8003BF7C 0002CC00 */ sll $t9, $v0, 0x10 -/* 03CB80 8003BF80 10000009 */ b .L8003BFA8 -/* 03CB84 8003BF84 00191403 */ sra $v0, $t9, 0x10 -.L8003BF88: -/* 03CB88 8003BF88 14610008 */ bne $v1, $at, .L8003BFAC -/* 03CB8C 8003BF8C 000268C3 */ sra $t5, $v0, 3 -/* 03CB90 8003BF90 860F0000 */ lh $t7, ($s0) -/* 03CB94 8003BF94 8E0B0078 */ lw $t3, 0x78($s0) -/* 03CB98 8003BF98 00000000 */ nop -/* 03CB9C 8003BF9C 01EB1023 */ subu $v0, $t7, $t3 -/* 03CBA0 8003BFA0 00027400 */ sll $t6, $v0, 0x10 -/* 03CBA4 8003BFA4 000E1403 */ sra $v0, $t6, 0x10 -.L8003BFA8: -/* 03CBA8 8003BFA8 000268C3 */ sra $t5, $v0, 3 -.L8003BFAC: -/* 03CBAC 8003BFAC 000DCC00 */ sll $t9, $t5, 0x10 -/* 03CBB0 8003BFB0 00191403 */ sra $v0, $t9, 0x10 -/* 03CBB4 8003BFB4 28410201 */ slti $at, $v0, 0x201 -/* 03CBB8 8003BFB8 86030000 */ lh $v1, ($s0) -/* 03CBBC 8003BFBC 14200003 */ bnez $at, .L8003BFCC -/* 03CBC0 8003BFC0 2841FE00 */ slti $at, $v0, -0x200 -/* 03CBC4 8003BFC4 24020200 */ li $v0, 512 -/* 03CBC8 8003BFC8 2841FE00 */ slti $at, $v0, -0x200 -.L8003BFCC: -/* 03CBCC 8003BFCC 10200003 */ beqz $at, .L8003BFDC -/* 03CBD0 8003BFD0 00627823 */ subu $t7, $v1, $v0 -/* 03CBD4 8003BFD4 2402FE00 */ li $v0, -512 -/* 03CBD8 8003BFD8 00627823 */ subu $t7, $v1, $v0 -.L8003BFDC: -/* 03CBDC 8003BFDC 10400002 */ beqz $v0, .L8003BFE8 -/* 03CBE0 8003BFE0 A60F0000 */ sh $t7, ($s0) -/* 03CBE4 8003BFE4 24050001 */ li $a1, 1 -.L8003BFE8: -/* 03CBE8 8003BFE8 10A00013 */ beqz $a1, .L8003C038 -/* 03CBEC 8003BFEC 00000000 */ nop -/* 03CBF0 8003BFF0 8D0B0004 */ lw $t3, 4($t0) -/* 03CBF4 8003BFF4 24040222 */ li $a0, 546 -/* 03CBF8 8003BFF8 1560001B */ bnez $t3, .L8003C068 -/* 03CBFC 8003BFFC 240E0001 */ li $t6, 1 -/* 03CC00 8003C000 8E05000C */ lw $a1, 0xc($s0) -/* 03CC04 8003C004 8E060010 */ lw $a2, 0x10($s0) -/* 03CC08 8003C008 8E070014 */ lw $a3, 0x14($s0) -/* 03CC0C 8003C00C 25180004 */ addiu $t8, $t0, 4 -/* 03CC10 8003C010 AFB80014 */ sw $t8, 0x14($sp) -/* 03CC14 8003C014 AFA90040 */ sw $t1, 0x40($sp) -/* 03CC18 8003C018 AFA80044 */ sw $t0, 0x44($sp) -/* 03CC1C 8003C01C 0C002556 */ jal play_sound_at_position -/* 03CC20 8003C020 AFAE0010 */ sw $t6, 0x10($sp) -/* 03CC24 8003C024 8FA80044 */ lw $t0, 0x44($sp) -/* 03CC28 8003C028 8FA90040 */ lw $t1, 0x40($sp) -/* 03CC2C 8003C02C 8FAA0034 */ lw $t2, 0x34($sp) -/* 03CC30 8003C030 1000000E */ b .L8003C06C -/* 03CC34 8003C034 81020014 */ lb $v0, 0x14($t0) -.L8003C038: -/* 03CC38 8003C038 8D020004 */ lw $v0, 4($t0) -/* 03CC3C 8003C03C A1000015 */ sb $zero, 0x15($t0) -/* 03CC40 8003C040 10400009 */ beqz $v0, .L8003C068 -/* 03CC44 8003C044 00402025 */ move $a0, $v0 -/* 03CC48 8003C048 AFA80044 */ sw $t0, 0x44($sp) -/* 03CC4C 8003C04C 0C0025BE */ jal func_800096F8 -/* 03CC50 8003C050 AFA90040 */ sw $t1, 0x40($sp) -/* 03CC54 8003C054 8FA80044 */ lw $t0, 0x44($sp) -/* 03CC58 8003C058 8FA90040 */ lw $t1, 0x40($sp) -/* 03CC5C 8003C05C AD000004 */ sw $zero, 4($t0) -/* 03CC60 8003C060 8FAA0034 */ lw $t2, 0x34($sp) -/* 03CC64 8003C064 00000000 */ nop -.L8003C068: -/* 03CC68 8003C068 81020014 */ lb $v0, 0x14($t0) -.L8003C06C: -/* 03CC6C 8003C06C 240D0001 */ li $t5, 1 -/* 03CC70 8003C070 04400010 */ bltz $v0, .L8003C0B4 -/* 03CC74 8003C074 00000000 */ nop -/* 03CC78 8003C078 95390008 */ lhu $t9, 8($t1) -/* 03CC7C 8003C07C 004D2004 */ sllv $a0, $t5, $v0 -/* 03CC80 8003C080 03246024 */ and $t4, $t9, $a0 -/* 03CC84 8003C084 11800043 */ beqz $t4, .L8003C194 -/* 03CC88 8003C088 00000000 */ nop -/* 03CC8C 8003C08C 912B0049 */ lbu $t3, 0x49($t1) -/* 03CC90 8003C090 8D2F0004 */ lw $t7, 4($t1) -/* 03CC94 8003C094 000B7080 */ sll $t6, $t3, 2 -/* 03CC98 8003C098 01EE1021 */ addu $v0, $t7, $t6 -/* 03CC9C 8003C09C 8C580000 */ lw $t8, ($v0) -/* 03CCA0 8003C0A0 8FAD0054 */ lw $t5, 0x54($sp) -/* 03CCA4 8003C0A4 00000000 */ nop -/* 03CCA8 8003C0A8 030DC825 */ or $t9, $t8, $t5 -/* 03CCAC 8003C0AC 10000039 */ b .L8003C194 -/* 03CCB0 8003C0B0 AC590000 */ sw $t9, ($v0) -.L8003C0B4: -/* 03CCB4 8003C0B4 814C0013 */ lb $t4, 0x13($t2) -/* 03CCB8 8003C0B8 8D230004 */ lw $v1, 4($t1) -/* 03CCBC 8003C0BC 1580001A */ bnez $t4, .L8003C128 -/* 03CCC0 8003C0C0 00000000 */ nop -/* 03CCC4 8003C0C4 8D2B0000 */ lw $t3, ($t1) -/* 03CCC8 8003C0C8 910E0010 */ lbu $t6, 0x10($t0) -/* 03CCCC 8003C0CC 856F0000 */ lh $t7, ($t3) -/* 03CCD0 8003C0D0 00000000 */ nop -/* 03CCD4 8003C0D4 01EE082A */ slt $at, $t7, $t6 -/* 03CCD8 8003C0D8 1420000A */ bnez $at, .L8003C104 -/* 03CCDC 8003C0DC 00000000 */ nop -/* 03CCE0 8003C0E0 91380049 */ lbu $t8, 0x49($t1) -/* 03CCE4 8003C0E4 8FAC0054 */ lw $t4, 0x54($sp) -/* 03CCE8 8003C0E8 00186880 */ sll $t5, $t8, 2 -/* 03CCEC 8003C0EC 006D1021 */ addu $v0, $v1, $t5 -/* 03CCF0 8003C0F0 8C590000 */ lw $t9, ($v0) -/* 03CCF4 8003C0F4 00000000 */ nop -/* 03CCF8 8003C0F8 032C5825 */ or $t3, $t9, $t4 -/* 03CCFC 8003C0FC 10000025 */ b .L8003C194 -/* 03CD00 8003C100 AC4B0000 */ sw $t3, ($v0) -.L8003C104: -/* 03CD04 8003C104 912F0049 */ lbu $t7, 0x49($t1) -/* 03CD08 8003C108 8FAD0054 */ lw $t5, 0x54($sp) -/* 03CD0C 8003C10C 000F7080 */ sll $t6, $t7, 2 -/* 03CD10 8003C110 006E1021 */ addu $v0, $v1, $t6 -/* 03CD14 8003C114 8C580000 */ lw $t8, ($v0) -/* 03CD18 8003C118 01A0C827 */ not $t9, $t5 -/* 03CD1C 8003C11C 03196024 */ and $t4, $t8, $t9 -/* 03CD20 8003C120 1000001C */ b .L8003C194 -/* 03CD24 8003C124 AC4C0000 */ sw $t4, ($v0) -.L8003C128: -/* 03CD28 8003C128 912F0048 */ lbu $t7, 0x48($t1) -/* 03CD2C 8003C12C 8D2B0000 */ lw $t3, ($t1) -/* 03CD30 8003C130 000F7040 */ sll $t6, $t7, 1 -/* 03CD34 8003C134 016E6821 */ addu $t5, $t3, $t6 -/* 03CD38 8003C138 85B80000 */ lh $t8, ($t5) -/* 03CD3C 8003C13C 91190010 */ lbu $t9, 0x10($t0) -/* 03CD40 8003C140 00000000 */ nop -/* 03CD44 8003C144 0319082A */ slt $at, $t8, $t9 -/* 03CD48 8003C148 1420000A */ bnez $at, .L8003C174 -/* 03CD4C 8003C14C 00000000 */ nop -/* 03CD50 8003C150 912C0049 */ lbu $t4, 0x49($t1) -/* 03CD54 8003C154 8FAE0054 */ lw $t6, 0x54($sp) -/* 03CD58 8003C158 000C7880 */ sll $t7, $t4, 2 -/* 03CD5C 8003C15C 006F1021 */ addu $v0, $v1, $t7 -/* 03CD60 8003C160 8C4B0000 */ lw $t3, ($v0) -/* 03CD64 8003C164 00000000 */ nop -/* 03CD68 8003C168 016E6825 */ or $t5, $t3, $t6 -/* 03CD6C 8003C16C 10000009 */ b .L8003C194 -/* 03CD70 8003C170 AC4D0000 */ sw $t5, ($v0) -.L8003C174: -/* 03CD74 8003C174 91380049 */ lbu $t8, 0x49($t1) -/* 03CD78 8003C178 8FAF0054 */ lw $t7, 0x54($sp) -/* 03CD7C 8003C17C 0018C880 */ sll $t9, $t8, 2 -/* 03CD80 8003C180 00791021 */ addu $v0, $v1, $t9 -/* 03CD84 8003C184 8C4C0000 */ lw $t4, ($v0) -/* 03CD88 8003C188 01E05827 */ not $t3, $t7 -/* 03CD8C 8003C18C 018B7024 */ and $t6, $t4, $t3 -/* 03CD90 8003C190 AC4E0000 */ sw $t6, ($v0) -.L8003C194: -/* 03CD94 8003C194 8E18004C */ lw $t8, 0x4c($s0) -/* 03CD98 8003C198 240D00FF */ li $t5, 255 -/* 03CD9C 8003C19C A30D0013 */ sb $t5, 0x13($t8) -/* 03CDA0 8003C1A0 8E19004C */ lw $t9, 0x4c($s0) -/* 03CDA4 8003C1A4 00000000 */ nop -/* 03CDA8 8003C1A8 AF200000 */ sw $zero, ($t9) -/* 03CDAC 8003C1AC 8E02004C */ lw $v0, 0x4c($s0) -/* 03CDB0 8003C1B0 00000000 */ nop -/* 03CDB4 8003C1B4 844F0014 */ lh $t7, 0x14($v0) -/* 03CDB8 8003C1B8 00000000 */ nop -/* 03CDBC 8003C1BC 31ECFFF7 */ andi $t4, $t7, 0xfff7 -/* 03CDC0 8003C1C0 A44C0014 */ sh $t4, 0x14($v0) -/* 03CDC4 8003C1C4 8E0B005C */ lw $t3, 0x5c($s0) -/* 03CDC8 8003C1C8 00000000 */ nop -/* 03CDCC 8003C1CC AD600100 */ sw $zero, 0x100($t3) -/* 03CDD0 8003C1D0 8FBF0024 */ lw $ra, 0x24($sp) -/* 03CDD4 8003C1D4 8FB00020 */ lw $s0, 0x20($sp) -/* 03CDD8 8003C1D8 03E00008 */ jr $ra -/* 03CDDC 8003C1DC 27BD0060 */ addiu $sp, $sp, 0x60 - +.late_rodata +glabel D_800E6168 +.double 1.2 +glabel D_800E6170 +.double 130.0 + +.text +glabel obj_loop_door +/* 03C588 8003B988 27BDFFA0 */ addiu $sp, $sp, -0x60 +/* 03C58C 8003B98C 44852000 */ mtc1 $a1, $f4 +/* 03C590 8003B990 AFBF0024 */ sw $ra, 0x24($sp) +/* 03C594 8003B994 AFB00020 */ sw $s0, 0x20($sp) +/* 03C598 8003B998 AFA50064 */ sw $a1, 0x64($sp) +/* 03C59C 8003B99C 3C188000 */ lui $t8, %hi(osTvType) # $t8, 0x8000 +/* 03C5A0 8003B9A0 46802020 */ cvt.s.w $f0, $f4 +/* 03C5A4 8003B9A4 8C8E003C */ lw $t6, 0x3c($a0) +/* 03C5A8 8003B9A8 8F180300 */ lw $t8, %lo(osTvType)($t8) +/* 03C5AC 8003B9AC 00808025 */ move $s0, $a0 +/* 03C5B0 8003B9B0 46000086 */ mov.s $f2, $f0 +/* 03C5B4 8003B9B4 17000007 */ bnez $t8, .L8003B9D4 +/* 03C5B8 8003B9B8 AFAE0034 */ sw $t6, 0x34($sp) +/* 03C5BC 8003B9BC 3C01800E */ lui $at, %hi(D_800E6168 + 4) # $at, 0x800e +/* 03C5C0 8003B9C0 C4296168 */ lwc1 $f9, %lo(D_800E6168)($at) +/* 03C5C4 8003B9C4 C428616C */ lwc1 $f8, %lo(D_800E6168 + 4)($at) +/* 03C5C8 8003B9C8 460001A1 */ cvt.d.s $f6, $f0 +/* 03C5CC 8003B9CC 46283282 */ mul.d $f10, $f6, $f8 +/* 03C5D0 8003B9D0 462050A0 */ cvt.s.d $f2, $f10 +.L8003B9D4: +/* 03C5D4 8003B9D4 0C01BAA4 */ jal get_settings +/* 03C5D8 8003B9D8 E7A20030 */ swc1 $f2, 0x30($sp) +/* 03C5DC 8003B9DC 904B0049 */ lbu $t3, 0x49($v0) +/* 03C5E0 8003B9E0 8C590004 */ lw $t9, 4($v0) +/* 03C5E4 8003B9E4 8E080064 */ lw $t0, 0x64($s0) +/* 03C5E8 8003B9E8 000B6080 */ sll $t4, $t3, 2 +/* 03C5EC 8003B9EC 8103000E */ lb $v1, 0xe($t0) +/* 03C5F0 8003B9F0 032C6821 */ addu $t5, $t9, $t4 +/* 03C5F4 8003B9F4 8DA50000 */ lw $a1, ($t5) +/* 03C5F8 8003B9F8 046001E6 */ bltz $v1, .L8003C194 +/* 03C5FC 8003B9FC 00404825 */ move $t1, $v0 +/* 03C600 8003BA00 3C0E0001 */ lui $t6, 1 +/* 03C604 8003BA04 006E7804 */ sllv $t7, $t6, $v1 +/* 03C608 8003BA08 AFAF0054 */ sw $t7, 0x54($sp) +/* 03C60C 8003BA0C 8E02004C */ lw $v0, 0x4c($s0) +/* 03C610 8003BA10 00000000 */ nop +/* 03C614 8003BA14 90440013 */ lbu $a0, 0x13($v0) +/* 03C618 8003BA18 00000000 */ nop +/* 03C61C 8003BA1C AFA40050 */ sw $a0, 0x50($sp) +/* 03C620 8003BA20 9118000F */ lbu $t8, 0xf($t0) +/* 03C624 8003BA24 00000000 */ nop +/* 03C628 8003BA28 330B0001 */ andi $t3, $t8, 1 +/* 03C62C 8003BA2C 15600003 */ bnez $t3, .L8003BA3C +/* 03C630 8003BA30 8FB90054 */ lw $t9, 0x54($sp) +/* 03C634 8003BA34 AFA00050 */ sw $zero, 0x50($sp) +/* 03C638 8003BA38 8FB90054 */ lw $t9, 0x54($sp) +.L8003BA3C: +/* 03C63C 8003BA3C 00000000 */ nop +/* 03C640 8003BA40 00B96024 */ and $t4, $a1, $t9 +/* 03C644 8003BA44 15800050 */ bnez $t4, .L8003BB88 +/* 03C648 8003BA48 AFAC0028 */ sw $t4, 0x28($sp) +/* 03C64C 8003BA4C 910E0012 */ lbu $t6, 0x12($t0) +/* 03C650 8003BA50 00000000 */ nop +/* 03C654 8003BA54 008E082A */ slt $at, $a0, $t6 +/* 03C658 8003BA58 1020004B */ beqz $at, .L8003BB88 +/* 03C65C 8003BA5C 00000000 */ nop +/* 03C660 8003BA60 8C430000 */ lw $v1, ($v0) +/* 03C664 8003BA64 00000000 */ nop +/* 03C668 8003BA68 10600047 */ beqz $v1, .L8003BB88 +/* 03C66C 8003BA6C 00000000 */ nop +/* 03C670 8003BA70 8C6F0040 */ lw $t7, 0x40($v1) +/* 03C674 8003BA74 24060001 */ li $a2, 1 +/* 03C678 8003BA78 81F80054 */ lb $t8, 0x54($t7) +/* 03C67C 8003BA7C 00000000 */ nop +/* 03C680 8003BA80 14D80041 */ bne $a2, $t8, .L8003BB88 +/* 03C684 8003BA84 00000000 */ nop +/* 03C688 8003BA88 8C620064 */ lw $v0, 0x64($v1) +/* 03C68C 8003BA8C 2401FFFF */ li $at, -1 +/* 03C690 8003BA90 844B0000 */ lh $t3, ($v0) +/* 03C694 8003BA94 00000000 */ nop +/* 03C698 8003BA98 11610033 */ beq $t3, $at, .L8003BB68 +/* 03C69C 8003BA9C 00000000 */ nop +/* 03C6A0 8003BAA0 8E19005C */ lw $t9, 0x5c($s0) +/* 03C6A4 8003BAA4 00000000 */ nop +/* 03C6A8 8003BAA8 8F2C0100 */ lw $t4, 0x100($t9) +/* 03C6AC 8003BAAC 00000000 */ nop +/* 03C6B0 8003BAB0 146C002D */ bne $v1, $t4, .L8003BB68 +/* 03C6B4 8003BAB4 00000000 */ nop +/* 03C6B8 8003BAB8 810D0013 */ lb $t5, 0x13($t0) +/* 03C6BC 8003BABC 2401FFFF */ li $at, -1 +/* 03C6C0 8003BAC0 11A10028 */ beq $t5, $at, .L8003BB64 +/* 03C6C4 8003BAC4 240B012C */ li $t3, 300 +/* 03C6C8 8003BAC8 AFA80044 */ sw $t0, 0x44($sp) +/* 03C6CC 8003BACC 0C030D00 */ jal func_800C3400 +/* 03C6D0 8003BAD0 AFA90040 */ sw $t1, 0x40($sp) +/* 03C6D4 8003BAD4 8FA80044 */ lw $t0, 0x44($sp) +/* 03C6D8 8003BAD8 8FA90040 */ lw $t1, 0x40($sp) +/* 03C6DC 8003BADC 14400021 */ bnez $v0, .L8003BB64 +/* 03C6E0 8003BAE0 240B012C */ li $t3, 300 +/* 03C6E4 8003BAE4 850E000C */ lh $t6, 0xc($t0) +/* 03C6E8 8003BAE8 2404FFF8 */ li $a0, -8 +/* 03C6EC 8003BAEC 15C0001D */ bnez $t6, .L8003BB64 +/* 03C6F0 8003BAF0 240B012C */ li $t3, 300 +/* 03C6F4 8003BAF4 AFA80044 */ sw $t0, 0x44($sp) +/* 03C6F8 8003BAF8 0C000326 */ jal set_music_fade_timer +/* 03C6FC 8003BAFC AFA90040 */ sw $t1, 0x40($sp) +/* 03C700 8003BB00 8FA80044 */ lw $t0, 0x44($sp) +/* 03C704 8003BB04 240F008C */ li $t7, 140 +/* 03C708 8003BB08 24040010 */ li $a0, 16 +/* 03C70C 8003BB0C 0C00030E */ jal set_sndfx_player_voice_limit +/* 03C710 8003BB10 AD0F0008 */ sw $t7, 8($t0) +/* 03C714 8003BB14 0C002050 */ jal func_80008140 +/* 03C718 8003BB18 00000000 */ nop +/* 03C71C 8003BB1C 0C0006F0 */ jal play_sequence +/* 03C720 8003BB20 24040011 */ li $a0, 17 +/* 03C724 8003BB24 8FA80044 */ lw $t0, 0x44($sp) +/* 03C728 8003BB28 00000000 */ nop +/* 03C72C 8003BB2C 91040010 */ lbu $a0, 0x10($t0) +/* 03C730 8003BB30 0C030C50 */ jal set_textbox_display_value +/* 03C734 8003BB34 00000000 */ nop +/* 03C738 8003BB38 8FA80044 */ lw $t0, 0x44($sp) +/* 03C73C 8003BB3C 00000000 */ nop +/* 03C740 8003BB40 81040013 */ lb $a0, 0x13($t0) +/* 03C744 8003BB44 00000000 */ nop +/* 03C748 8003BB48 309800FF */ andi $t8, $a0, 0xff +/* 03C74C 8003BB4C 0C030C7B */ jal func_800C31EC +/* 03C750 8003BB50 03002025 */ move $a0, $t8 +/* 03C754 8003BB54 8FA80044 */ lw $t0, 0x44($sp) +/* 03C758 8003BB58 8FA90040 */ lw $t1, 0x40($sp) +/* 03C75C 8003BB5C 00000000 */ nop +/* 03C760 8003BB60 240B012C */ li $t3, 300 +.L8003BB64: +/* 03C764 8003BB64 A50B000C */ sh $t3, 0xc($t0) +.L8003BB68: +/* 03C768 8003BB68 AFA80044 */ sw $t0, 0x44($sp) +/* 03C76C 8003BB6C 0C030D00 */ jal func_800C3400 +/* 03C770 8003BB70 AFA90040 */ sw $t1, 0x40($sp) +/* 03C774 8003BB74 8FA80044 */ lw $t0, 0x44($sp) +/* 03C778 8003BB78 8FA90040 */ lw $t1, 0x40($sp) +/* 03C77C 8003BB7C 10400002 */ beqz $v0, .L8003BB88 +/* 03C780 8003BB80 2419012C */ li $t9, 300 +/* 03C784 8003BB84 A519000C */ sh $t9, 0xc($t0) +.L8003BB88: +/* 03C788 8003BB88 8D0C0008 */ lw $t4, 8($t0) +/* 03C78C 8003BB8C 00000000 */ nop +/* 03C790 8003BB90 1180001B */ beqz $t4, .L8003BC00 +/* 03C794 8003BB94 00000000 */ nop +/* 03C798 8003BB98 AFA80044 */ sw $t0, 0x44($sp) +/* 03C79C 8003BB9C 0C000702 */ jal func_80001C08 +/* 03C7A0 8003BBA0 AFA90040 */ sw $t1, 0x40($sp) +/* 03C7A4 8003BBA4 8FA80044 */ lw $t0, 0x44($sp) +/* 03C7A8 8003BBA8 8FA90040 */ lw $t1, 0x40($sp) +/* 03C7AC 8003BBAC 14400014 */ bnez $v0, .L8003BC00 +/* 03C7B0 8003BBB0 00000000 */ nop +/* 03C7B4 8003BBB4 8FA30064 */ lw $v1, 0x64($sp) +/* 03C7B8 8003BBB8 8D020008 */ lw $v0, 8($t0) +/* 03C7BC 8003BBBC 24040008 */ li $a0, 8 +/* 03C7C0 8003BBC0 0062082A */ slt $at, $v1, $v0 +/* 03C7C4 8003BBC4 10200003 */ beqz $at, .L8003BBD4 +/* 03C7C8 8003BBC8 00436823 */ subu $t5, $v0, $v1 +/* 03C7CC 8003BBCC 1000000C */ b .L8003BC00 +/* 03C7D0 8003BBD0 AD0D0008 */ sw $t5, 8($t0) +.L8003BBD4: +/* 03C7D4 8003BBD4 AD000008 */ sw $zero, 8($t0) +/* 03C7D8 8003BBD8 AFA90040 */ sw $t1, 0x40($sp) +/* 03C7DC 8003BBDC 0C000326 */ jal set_music_fade_timer +/* 03C7E0 8003BBE0 AFA80044 */ sw $t0, 0x44($sp) +/* 03C7E4 8003BBE4 0C00030E */ jal set_sndfx_player_voice_limit +/* 03C7E8 8003BBE8 24040006 */ li $a0, 6 +/* 03C7EC 8003BBEC 0C00205A */ jal func_80008168 +/* 03C7F0 8003BBF0 00000000 */ nop +/* 03C7F4 8003BBF4 8FA80044 */ lw $t0, 0x44($sp) +/* 03C7F8 8003BBF8 8FA90040 */ lw $t1, 0x40($sp) +/* 03C7FC 8003BBFC 00000000 */ nop +.L8003BC00: +/* 03C800 8003BC00 8502000C */ lh $v0, 0xc($t0) +/* 03C804 8003BC04 8FA30064 */ lw $v1, 0x64($sp) +/* 03C808 8003BC08 18400004 */ blez $v0, .L8003BC1C +/* 03C80C 8003BC0C 24060001 */ li $a2, 1 +/* 03C810 8003BC10 00437023 */ subu $t6, $v0, $v1 +/* 03C814 8003BC14 10000002 */ b .L8003BC20 +/* 03C818 8003BC18 A50E000C */ sh $t6, 0xc($t0) +.L8003BC1C: +/* 03C81C 8003BC1C A500000C */ sh $zero, 0xc($t0) +.L8003BC20: +/* 03C820 8003BC20 8E02004C */ lw $v0, 0x4c($s0) +/* 03C824 8003BC24 91180012 */ lbu $t8, 0x12($t0) +/* 03C828 8003BC28 904F0013 */ lbu $t7, 0x13($v0) +/* 03C82C 8003BC2C 8FAA0034 */ lw $t2, 0x34($sp) +/* 03C830 8003BC30 01F8082A */ slt $at, $t7, $t8 +/* 03C834 8003BC34 10200018 */ beqz $at, .L8003BC98 +/* 03C838 8003BC38 00002025 */ move $a0, $zero +/* 03C83C 8003BC3C 8C430000 */ lw $v1, ($v0) +/* 03C840 8003BC40 00000000 */ nop +/* 03C844 8003BC44 10600014 */ beqz $v1, .L8003BC98 +/* 03C848 8003BC48 00000000 */ nop +/* 03C84C 8003BC4C 8C6B0040 */ lw $t3, 0x40($v1) +/* 03C850 8003BC50 00000000 */ nop +/* 03C854 8003BC54 81790054 */ lb $t9, 0x54($t3) +/* 03C858 8003BC58 00000000 */ nop +/* 03C85C 8003BC5C 14D9000E */ bne $a2, $t9, .L8003BC98 +/* 03C860 8003BC60 00000000 */ nop +/* 03C864 8003BC64 8C620064 */ lw $v0, 0x64($v1) +/* 03C868 8003BC68 24010002 */ li $at, 2 +/* 03C86C 8003BC6C 804401D6 */ lb $a0, 0x1d6($v0) +/* 03C870 8003BC70 00000000 */ nop +/* 03C874 8003BC74 10860005 */ beq $a0, $a2, .L8003BC8C +/* 03C878 8003BC78 00000000 */ nop +/* 03C87C 8003BC7C 10810006 */ beq $a0, $at, .L8003BC98 +/* 03C880 8003BC80 24040004 */ li $a0, 4 +/* 03C884 8003BC84 10000004 */ b .L8003BC98 +/* 03C888 8003BC88 00C02025 */ move $a0, $a2 +.L8003BC8C: +/* 03C88C 8003BC8C 10000002 */ b .L8003BC98 +/* 03C890 8003BC90 24040002 */ li $a0, 2 +/* 03C894 8003BC94 24040004 */ li $a0, 4 +.L8003BC98: +/* 03C898 8003BC98 914C0010 */ lbu $t4, 0x10($t2) +/* 03C89C 8003BC9C 91420000 */ lbu $v0, ($t2) +/* 03C8A0 8003BCA0 24010087 */ li $at, 135 +/* 03C8A4 8003BCA4 10410004 */ beq $v0, $at, .L8003BCB8 +/* 03C8A8 8003BCA8 008C2024 */ and $a0, $a0, $t4 +/* 03C8AC 8003BCAC 240100D7 */ li $at, 215 +/* 03C8B0 8003BCB0 1441000B */ bne $v0, $at, .L8003BCE0 +/* 03C8B4 8003BCB4 00000000 */ nop +.L8003BCB8: +/* 03C8B8 8003BCB8 AFA4004C */ sw $a0, 0x4c($sp) +/* 03C8BC 8003BCBC AFA80044 */ sw $t0, 0x44($sp) +/* 03C8C0 8003BCC0 0C008D70 */ jal func_800235C0 +/* 03C8C4 8003BCC4 AFA90040 */ sw $t1, 0x40($sp) +/* 03C8C8 8003BCC8 8FA4004C */ lw $a0, 0x4c($sp) +/* 03C8CC 8003BCCC 8FA80044 */ lw $t0, 0x44($sp) +/* 03C8D0 8003BCD0 8FA90040 */ lw $t1, 0x40($sp) +/* 03C8D4 8003BCD4 10400002 */ beqz $v0, .L8003BCE0 +/* 03C8D8 8003BCD8 00000000 */ nop +/* 03C8DC 8003BCDC AFA00050 */ sw $zero, 0x50($sp) +.L8003BCE0: +/* 03C8E0 8003BCE0 810D0015 */ lb $t5, 0x15($t0) +/* 03C8E4 8003BCE4 8FAA0034 */ lw $t2, 0x34($sp) +/* 03C8E8 8003BCE8 15A00012 */ bnez $t5, .L8003BD34 +/* 03C8EC 8003BCEC 24060001 */ li $a2, 1 +/* 03C8F0 8003BCF0 91020012 */ lbu $v0, 0x12($t0) +/* 03C8F4 8003BCF4 1480000A */ bnez $a0, .L8003BD20 +/* 03C8F8 8003BCF8 8FB80050 */ lw $t8, 0x50($sp) +/* 03C8FC 8003BCFC 8FAE0028 */ lw $t6, 0x28($sp) +/* 03C900 8003BD00 8FAF0050 */ lw $t7, 0x50($sp) +/* 03C904 8003BD04 11C00005 */ beqz $t6, .L8003BD1C +/* 03C908 8003BD08 01E2082A */ slt $at, $t7, $v0 +/* 03C90C 8003BD0C 10200004 */ beqz $at, .L8003BD20 +/* 03C910 8003BD10 8FB80050 */ lw $t8, 0x50($sp) +/* 03C914 8003BD14 10000007 */ b .L8003BD34 +/* 03C918 8003BD18 A1060015 */ sb $a2, 0x15($t0) +.L8003BD1C: +/* 03C91C 8003BD1C 8FB80050 */ lw $t8, 0x50($sp) +.L8003BD20: +/* 03C920 8003BD20 244B000A */ addiu $t3, $v0, 0xa +/* 03C924 8003BD24 0178082A */ slt $at, $t3, $t8 +/* 03C928 8003BD28 10200002 */ beqz $at, .L8003BD34 +/* 03C92C 8003BD2C 2419FFFF */ li $t9, -1 +/* 03C930 8003BD30 A1190015 */ sb $t9, 0x15($t0) +.L8003BD34: +/* 03C934 8003BD34 910C000F */ lbu $t4, 0xf($t0) +/* 03C938 8003BD38 8FAE0028 */ lw $t6, 0x28($sp) +/* 03C93C 8003BD3C 318D0002 */ andi $t5, $t4, 2 +/* 03C940 8003BD40 11A0005E */ beqz $t5, .L8003BEBC +/* 03C944 8003BD44 00002825 */ move $a1, $zero +/* 03C948 8003BD48 11C00033 */ beqz $t6, .L8003BE18 +/* 03C94C 8003BD4C 00000000 */ nop +/* 03C950 8003BD50 914F0000 */ lbu $t7, ($t2) +/* 03C954 8003BD54 24010019 */ li $at, 25 +/* 03C958 8003BD58 15E1002F */ bne $t7, $at, .L8003BE18 +/* 03C95C 8003BD5C 00000000 */ nop +/* 03C960 8003BD60 814B0014 */ lb $t3, 0x14($t2) +/* 03C964 8003BD64 8D380004 */ lw $t8, 4($t1) +/* 03C968 8003BD68 000BC880 */ sll $t9, $t3, 2 +/* 03C96C 8003BD6C 03196021 */ addu $t4, $t8, $t9 +/* 03C970 8003BD70 8D820000 */ lw $v0, ($t4) +/* 03C974 8003BD74 00000000 */ nop +/* 03C978 8003BD78 304D0002 */ andi $t5, $v0, 2 +/* 03C97C 8003BD7C 11A00023 */ beqz $t5, .L8003BE0C +/* 03C980 8003BD80 304E0004 */ andi $t6, $v0, 4 +/* 03C984 8003BD84 91220048 */ lbu $v0, 0x48($t1) +/* 03C988 8003BD88 24010005 */ li $at, 5 +/* 03C98C 8003BD8C 10410006 */ beq $v0, $at, .L8003BDA8 +/* 03C990 8003BD90 240F0001 */ li $t7, 1 +/* 03C994 8003BD94 952E000C */ lhu $t6, 0xc($t1) +/* 03C998 8003BD98 004F5804 */ sllv $t3, $t7, $v0 +/* 03C99C 8003BD9C 01CBC024 */ and $t8, $t6, $t3 +/* 03C9A0 8003BDA0 13000012 */ beqz $t8, .L8003BDEC +/* 03C9A4 8003BDA4 00000000 */ nop +.L8003BDA8: +/* 03C9A8 8003BDA8 91590015 */ lbu $t9, 0x15($t2) +/* 03C9AC 8003BDAC 240F0002 */ li $t7, 2 +/* 03C9B0 8003BDB0 332C00FF */ andi $t4, $t9, 0xff +/* 03C9B4 8003BDB4 2981000A */ slti $at, $t4, 0xa +/* 03C9B8 8003BDB8 14200004 */ bnez $at, .L8003BDCC +/* 03C9BC 8003BDBC A1190010 */ sb $t9, 0x10($t0) +/* 03C9C0 8003BDC0 240D0003 */ li $t5, 3 +/* 03C9C4 8003BDC4 10000002 */ b .L8003BDD0 +/* 03C9C8 8003BDC8 A20D003A */ sb $t5, 0x3a($s0) +.L8003BDCC: +/* 03C9CC 8003BDCC A20F003A */ sb $t7, 0x3a($s0) +.L8003BDD0: +/* 03C9D0 8003BDD0 814B0014 */ lb $t3, 0x14($t2) +/* 03C9D4 8003BDD4 8D2E0004 */ lw $t6, 4($t1) +/* 03C9D8 8003BDD8 000BC080 */ sll $t8, $t3, 2 +/* 03C9DC 8003BDDC 01D8C821 */ addu $t9, $t6, $t8 +/* 03C9E0 8003BDE0 8F220000 */ lw $v0, ($t9) +/* 03C9E4 8003BDE4 10000009 */ b .L8003BE0C +/* 03C9E8 8003BDE8 304E0004 */ andi $t6, $v0, 4 +.L8003BDEC: +/* 03C9EC 8003BDEC A200003A */ sb $zero, 0x3a($s0) +/* 03C9F0 8003BDF0 814D0014 */ lb $t5, 0x14($t2) +/* 03C9F4 8003BDF4 8D2C0004 */ lw $t4, 4($t1) +/* 03C9F8 8003BDF8 000D7880 */ sll $t7, $t5, 2 +/* 03C9FC 8003BDFC 018F5821 */ addu $t3, $t4, $t7 +/* 03CA00 8003BE00 8D620000 */ lw $v0, ($t3) +/* 03CA04 8003BE04 00000000 */ nop +/* 03CA08 8003BE08 304E0004 */ andi $t6, $v0, 4 +.L8003BE0C: +/* 03CA0C 8003BE0C 11C00002 */ beqz $t6, .L8003BE18 +/* 03CA10 8003BE10 00000000 */ nop +/* 03CA14 8003BE14 A206003A */ sb $a2, 0x3a($s0) +.L8003BE18: +/* 03CA18 8003BE18 81030015 */ lb $v1, 0x15($t0) +/* 03CA1C 8003BE1C 2401FFFF */ li $at, -1 +/* 03CA20 8003BE20 14C30015 */ bne $a2, $v1, .L8003BE78 +/* 03CA24 8003BE24 00000000 */ nop +/* 03CA28 8003BE28 3C01800E */ lui $at, %hi(D_800E6170 + 4) # $at, 0x800e +/* 03CA2C 8003BE2C C5120000 */ lwc1 $f18, ($t0) +/* 03CA30 8003BE30 C4276170 */ lwc1 $f7, %lo(D_800E6170)($at) +/* 03CA34 8003BE34 C4266174 */ lwc1 $f6, %lo(D_800E6170 + 4)($at) +/* 03CA38 8003BE38 C6100010 */ lwc1 $f16, 0x10($s0) +/* 03CA3C 8003BE3C 46009121 */ cvt.d.s $f4, $f18 +/* 03CA40 8003BE40 46262200 */ add.d $f8, $f4, $f6 +/* 03CA44 8003BE44 C7AA0030 */ lwc1 $f10, 0x30($sp) +/* 03CA48 8003BE48 460080A1 */ cvt.d.s $f2, $f16 +/* 03CA4C 8003BE4C 4628103C */ c.lt.d $f2, $f8 +/* 03CA50 8003BE50 00000000 */ nop +/* 03CA54 8003BE54 45000064 */ bc1f .L8003BFE8 +/* 03CA58 8003BE58 00000000 */ nop +/* 03CA5C 8003BE5C 46005021 */ cvt.d.s $f0, $f10 +/* 03CA60 8003BE60 46200400 */ add.d $f16, $f0, $f0 +/* 03CA64 8003BE64 24050001 */ li $a1, 1 +/* 03CA68 8003BE68 46301480 */ add.d $f18, $f2, $f16 +/* 03CA6C 8003BE6C 46209120 */ cvt.s.d $f4, $f18 +/* 03CA70 8003BE70 1000005D */ b .L8003BFE8 +/* 03CA74 8003BE74 E6040010 */ swc1 $f4, 0x10($s0) +.L8003BE78: +/* 03CA78 8003BE78 1461005B */ bne $v1, $at, .L8003BFE8 +/* 03CA7C 8003BE7C 00000000 */ nop +/* 03CA80 8003BE80 C6020010 */ lwc1 $f2, 0x10($s0) +/* 03CA84 8003BE84 C5060000 */ lwc1 $f6, ($t0) +/* 03CA88 8003BE88 C7A80030 */ lwc1 $f8, 0x30($sp) +/* 03CA8C 8003BE8C 4602303C */ c.lt.s $f6, $f2 +/* 03CA90 8003BE90 00000000 */ nop +/* 03CA94 8003BE94 45000054 */ bc1f .L8003BFE8 +/* 03CA98 8003BE98 00000000 */ nop +/* 03CA9C 8003BE9C 46004021 */ cvt.d.s $f0, $f8 +/* 03CAA0 8003BEA0 46200400 */ add.d $f16, $f0, $f0 +/* 03CAA4 8003BEA4 24050001 */ li $a1, 1 +/* 03CAA8 8003BEA8 460012A1 */ cvt.d.s $f10, $f2 +/* 03CAAC 8003BEAC 46305481 */ sub.d $f18, $f10, $f16 +/* 03CAB0 8003BEB0 46209120 */ cvt.s.d $f4, $f18 +/* 03CAB4 8003BEB4 1000004C */ b .L8003BFE8 +/* 03CAB8 8003BEB8 E6040010 */ swc1 $f4, 0x10($s0) +.L8003BEBC: +/* 03CABC 8003BEBC 91580000 */ lbu $t8, ($t2) +/* 03CAC0 8003BEC0 240100D7 */ li $at, 215 +/* 03CAC4 8003BEC4 17010025 */ bne $t8, $at, .L8003BF5C +/* 03CAC8 8003BEC8 24190001 */ li $t9, 1 +/* 03CACC 8003BECC A200003A */ sb $zero, 0x3a($s0) +/* 03CAD0 8003BED0 91240048 */ lbu $a0, 0x48($t1) +/* 03CAD4 8003BED4 9523000C */ lhu $v1, 0xc($t1) +/* 03CAD8 8003BED8 00996804 */ sllv $t5, $t9, $a0 +/* 03CADC 8003BEDC 006D6024 */ and $t4, $v1, $t5 +/* 03CAE0 8003BEE0 1180000C */ beqz $t4, .L8003BF14 +/* 03CAE4 8003BEE4 00801025 */ move $v0, $a0 +/* 03CAE8 8003BEE8 8D2F0000 */ lw $t7, ($t1) +/* 03CAEC 8003BEEC 00045840 */ sll $t3, $a0, 1 +/* 03CAF0 8003BEF0 01EB7021 */ addu $t6, $t7, $t3 +/* 03CAF4 8003BEF4 85D80000 */ lh $t8, ($t6) +/* 03CAF8 8003BEF8 24010008 */ li $at, 8 +/* 03CAFC 8003BEFC 17010006 */ bne $t8, $at, .L8003BF18 +/* 03CB00 8003BF00 24590006 */ addiu $t9, $v0, 6 +/* 03CB04 8003BF04 A206003A */ sb $a2, 0x3a($s0) +/* 03CB08 8003BF08 9523000C */ lhu $v1, 0xc($t1) +/* 03CB0C 8003BF0C 91220048 */ lbu $v0, 0x48($t1) +/* 03CB10 8003BF10 00000000 */ nop +.L8003BF14: +/* 03CB14 8003BF14 24590006 */ addiu $t9, $v0, 6 +.L8003BF18: +/* 03CB18 8003BF18 240D0001 */ li $t5, 1 +/* 03CB1C 8003BF1C 032D6004 */ sllv $t4, $t5, $t9 +/* 03CB20 8003BF20 006C7824 */ and $t7, $v1, $t4 +/* 03CB24 8003BF24 11E00005 */ beqz $t7, .L8003BF3C +/* 03CB28 8003BF28 24010005 */ li $at, 5 +/* 03CB2C 8003BF2C 240B0002 */ li $t3, 2 +/* 03CB30 8003BF30 A20B003A */ sb $t3, 0x3a($s0) +/* 03CB34 8003BF34 91220048 */ lbu $v0, 0x48($t1) +/* 03CB38 8003BF38 00000000 */ nop +.L8003BF3C: +/* 03CB3C 8003BF3C 14410007 */ bne $v0, $at, .L8003BF5C +/* 03CB40 8003BF40 00000000 */ nop +/* 03CB44 8003BF44 8202003A */ lb $v0, 0x3a($s0) +/* 03CB48 8003BF48 00000000 */ nop +/* 03CB4C 8003BF4C 28410002 */ slti $at, $v0, 2 +/* 03CB50 8003BF50 10200002 */ beqz $at, .L8003BF5C +/* 03CB54 8003BF54 244E0001 */ addiu $t6, $v0, 1 +/* 03CB58 8003BF58 A20E003A */ sb $t6, 0x3a($s0) +.L8003BF5C: +/* 03CB5C 8003BF5C 81030015 */ lb $v1, 0x15($t0) +/* 03CB60 8003BF60 00001025 */ move $v0, $zero +/* 03CB64 8003BF64 14C30008 */ bne $a2, $v1, .L8003BF88 +/* 03CB68 8003BF68 2401FFFF */ li $at, -1 +/* 03CB6C 8003BF6C 86180000 */ lh $t8, ($s0) +/* 03CB70 8003BF70 8E0D007C */ lw $t5, 0x7c($s0) +/* 03CB74 8003BF74 00000000 */ nop +/* 03CB78 8003BF78 030D1023 */ subu $v0, $t8, $t5 +/* 03CB7C 8003BF7C 0002CC00 */ sll $t9, $v0, 0x10 +/* 03CB80 8003BF80 10000009 */ b .L8003BFA8 +/* 03CB84 8003BF84 00191403 */ sra $v0, $t9, 0x10 +.L8003BF88: +/* 03CB88 8003BF88 14610008 */ bne $v1, $at, .L8003BFAC +/* 03CB8C 8003BF8C 000268C3 */ sra $t5, $v0, 3 +/* 03CB90 8003BF90 860F0000 */ lh $t7, ($s0) +/* 03CB94 8003BF94 8E0B0078 */ lw $t3, 0x78($s0) +/* 03CB98 8003BF98 00000000 */ nop +/* 03CB9C 8003BF9C 01EB1023 */ subu $v0, $t7, $t3 +/* 03CBA0 8003BFA0 00027400 */ sll $t6, $v0, 0x10 +/* 03CBA4 8003BFA4 000E1403 */ sra $v0, $t6, 0x10 +.L8003BFA8: +/* 03CBA8 8003BFA8 000268C3 */ sra $t5, $v0, 3 +.L8003BFAC: +/* 03CBAC 8003BFAC 000DCC00 */ sll $t9, $t5, 0x10 +/* 03CBB0 8003BFB0 00191403 */ sra $v0, $t9, 0x10 +/* 03CBB4 8003BFB4 28410201 */ slti $at, $v0, 0x201 +/* 03CBB8 8003BFB8 86030000 */ lh $v1, ($s0) +/* 03CBBC 8003BFBC 14200003 */ bnez $at, .L8003BFCC +/* 03CBC0 8003BFC0 2841FE00 */ slti $at, $v0, -0x200 +/* 03CBC4 8003BFC4 24020200 */ li $v0, 512 +/* 03CBC8 8003BFC8 2841FE00 */ slti $at, $v0, -0x200 +.L8003BFCC: +/* 03CBCC 8003BFCC 10200003 */ beqz $at, .L8003BFDC +/* 03CBD0 8003BFD0 00627823 */ subu $t7, $v1, $v0 +/* 03CBD4 8003BFD4 2402FE00 */ li $v0, -512 +/* 03CBD8 8003BFD8 00627823 */ subu $t7, $v1, $v0 +.L8003BFDC: +/* 03CBDC 8003BFDC 10400002 */ beqz $v0, .L8003BFE8 +/* 03CBE0 8003BFE0 A60F0000 */ sh $t7, ($s0) +/* 03CBE4 8003BFE4 24050001 */ li $a1, 1 +.L8003BFE8: +/* 03CBE8 8003BFE8 10A00013 */ beqz $a1, .L8003C038 +/* 03CBEC 8003BFEC 00000000 */ nop +/* 03CBF0 8003BFF0 8D0B0004 */ lw $t3, 4($t0) +/* 03CBF4 8003BFF4 24040222 */ li $a0, 546 +/* 03CBF8 8003BFF8 1560001B */ bnez $t3, .L8003C068 +/* 03CBFC 8003BFFC 240E0001 */ li $t6, 1 +/* 03CC00 8003C000 8E05000C */ lw $a1, 0xc($s0) +/* 03CC04 8003C004 8E060010 */ lw $a2, 0x10($s0) +/* 03CC08 8003C008 8E070014 */ lw $a3, 0x14($s0) +/* 03CC0C 8003C00C 25180004 */ addiu $t8, $t0, 4 +/* 03CC10 8003C010 AFB80014 */ sw $t8, 0x14($sp) +/* 03CC14 8003C014 AFA90040 */ sw $t1, 0x40($sp) +/* 03CC18 8003C018 AFA80044 */ sw $t0, 0x44($sp) +/* 03CC1C 8003C01C 0C002556 */ jal play_sound_at_position +/* 03CC20 8003C020 AFAE0010 */ sw $t6, 0x10($sp) +/* 03CC24 8003C024 8FA80044 */ lw $t0, 0x44($sp) +/* 03CC28 8003C028 8FA90040 */ lw $t1, 0x40($sp) +/* 03CC2C 8003C02C 8FAA0034 */ lw $t2, 0x34($sp) +/* 03CC30 8003C030 1000000E */ b .L8003C06C +/* 03CC34 8003C034 81020014 */ lb $v0, 0x14($t0) +.L8003C038: +/* 03CC38 8003C038 8D020004 */ lw $v0, 4($t0) +/* 03CC3C 8003C03C A1000015 */ sb $zero, 0x15($t0) +/* 03CC40 8003C040 10400009 */ beqz $v0, .L8003C068 +/* 03CC44 8003C044 00402025 */ move $a0, $v0 +/* 03CC48 8003C048 AFA80044 */ sw $t0, 0x44($sp) +/* 03CC4C 8003C04C 0C0025BE */ jal func_800096F8 +/* 03CC50 8003C050 AFA90040 */ sw $t1, 0x40($sp) +/* 03CC54 8003C054 8FA80044 */ lw $t0, 0x44($sp) +/* 03CC58 8003C058 8FA90040 */ lw $t1, 0x40($sp) +/* 03CC5C 8003C05C AD000004 */ sw $zero, 4($t0) +/* 03CC60 8003C060 8FAA0034 */ lw $t2, 0x34($sp) +/* 03CC64 8003C064 00000000 */ nop +.L8003C068: +/* 03CC68 8003C068 81020014 */ lb $v0, 0x14($t0) +.L8003C06C: +/* 03CC6C 8003C06C 240D0001 */ li $t5, 1 +/* 03CC70 8003C070 04400010 */ bltz $v0, .L8003C0B4 +/* 03CC74 8003C074 00000000 */ nop +/* 03CC78 8003C078 95390008 */ lhu $t9, 8($t1) +/* 03CC7C 8003C07C 004D2004 */ sllv $a0, $t5, $v0 +/* 03CC80 8003C080 03246024 */ and $t4, $t9, $a0 +/* 03CC84 8003C084 11800043 */ beqz $t4, .L8003C194 +/* 03CC88 8003C088 00000000 */ nop +/* 03CC8C 8003C08C 912B0049 */ lbu $t3, 0x49($t1) +/* 03CC90 8003C090 8D2F0004 */ lw $t7, 4($t1) +/* 03CC94 8003C094 000B7080 */ sll $t6, $t3, 2 +/* 03CC98 8003C098 01EE1021 */ addu $v0, $t7, $t6 +/* 03CC9C 8003C09C 8C580000 */ lw $t8, ($v0) +/* 03CCA0 8003C0A0 8FAD0054 */ lw $t5, 0x54($sp) +/* 03CCA4 8003C0A4 00000000 */ nop +/* 03CCA8 8003C0A8 030DC825 */ or $t9, $t8, $t5 +/* 03CCAC 8003C0AC 10000039 */ b .L8003C194 +/* 03CCB0 8003C0B0 AC590000 */ sw $t9, ($v0) +.L8003C0B4: +/* 03CCB4 8003C0B4 814C0013 */ lb $t4, 0x13($t2) +/* 03CCB8 8003C0B8 8D230004 */ lw $v1, 4($t1) +/* 03CCBC 8003C0BC 1580001A */ bnez $t4, .L8003C128 +/* 03CCC0 8003C0C0 00000000 */ nop +/* 03CCC4 8003C0C4 8D2B0000 */ lw $t3, ($t1) +/* 03CCC8 8003C0C8 910E0010 */ lbu $t6, 0x10($t0) +/* 03CCCC 8003C0CC 856F0000 */ lh $t7, ($t3) +/* 03CCD0 8003C0D0 00000000 */ nop +/* 03CCD4 8003C0D4 01EE082A */ slt $at, $t7, $t6 +/* 03CCD8 8003C0D8 1420000A */ bnez $at, .L8003C104 +/* 03CCDC 8003C0DC 00000000 */ nop +/* 03CCE0 8003C0E0 91380049 */ lbu $t8, 0x49($t1) +/* 03CCE4 8003C0E4 8FAC0054 */ lw $t4, 0x54($sp) +/* 03CCE8 8003C0E8 00186880 */ sll $t5, $t8, 2 +/* 03CCEC 8003C0EC 006D1021 */ addu $v0, $v1, $t5 +/* 03CCF0 8003C0F0 8C590000 */ lw $t9, ($v0) +/* 03CCF4 8003C0F4 00000000 */ nop +/* 03CCF8 8003C0F8 032C5825 */ or $t3, $t9, $t4 +/* 03CCFC 8003C0FC 10000025 */ b .L8003C194 +/* 03CD00 8003C100 AC4B0000 */ sw $t3, ($v0) +.L8003C104: +/* 03CD04 8003C104 912F0049 */ lbu $t7, 0x49($t1) +/* 03CD08 8003C108 8FAD0054 */ lw $t5, 0x54($sp) +/* 03CD0C 8003C10C 000F7080 */ sll $t6, $t7, 2 +/* 03CD10 8003C110 006E1021 */ addu $v0, $v1, $t6 +/* 03CD14 8003C114 8C580000 */ lw $t8, ($v0) +/* 03CD18 8003C118 01A0C827 */ not $t9, $t5 +/* 03CD1C 8003C11C 03196024 */ and $t4, $t8, $t9 +/* 03CD20 8003C120 1000001C */ b .L8003C194 +/* 03CD24 8003C124 AC4C0000 */ sw $t4, ($v0) +.L8003C128: +/* 03CD28 8003C128 912F0048 */ lbu $t7, 0x48($t1) +/* 03CD2C 8003C12C 8D2B0000 */ lw $t3, ($t1) +/* 03CD30 8003C130 000F7040 */ sll $t6, $t7, 1 +/* 03CD34 8003C134 016E6821 */ addu $t5, $t3, $t6 +/* 03CD38 8003C138 85B80000 */ lh $t8, ($t5) +/* 03CD3C 8003C13C 91190010 */ lbu $t9, 0x10($t0) +/* 03CD40 8003C140 00000000 */ nop +/* 03CD44 8003C144 0319082A */ slt $at, $t8, $t9 +/* 03CD48 8003C148 1420000A */ bnez $at, .L8003C174 +/* 03CD4C 8003C14C 00000000 */ nop +/* 03CD50 8003C150 912C0049 */ lbu $t4, 0x49($t1) +/* 03CD54 8003C154 8FAE0054 */ lw $t6, 0x54($sp) +/* 03CD58 8003C158 000C7880 */ sll $t7, $t4, 2 +/* 03CD5C 8003C15C 006F1021 */ addu $v0, $v1, $t7 +/* 03CD60 8003C160 8C4B0000 */ lw $t3, ($v0) +/* 03CD64 8003C164 00000000 */ nop +/* 03CD68 8003C168 016E6825 */ or $t5, $t3, $t6 +/* 03CD6C 8003C16C 10000009 */ b .L8003C194 +/* 03CD70 8003C170 AC4D0000 */ sw $t5, ($v0) +.L8003C174: +/* 03CD74 8003C174 91380049 */ lbu $t8, 0x49($t1) +/* 03CD78 8003C178 8FAF0054 */ lw $t7, 0x54($sp) +/* 03CD7C 8003C17C 0018C880 */ sll $t9, $t8, 2 +/* 03CD80 8003C180 00791021 */ addu $v0, $v1, $t9 +/* 03CD84 8003C184 8C4C0000 */ lw $t4, ($v0) +/* 03CD88 8003C188 01E05827 */ not $t3, $t7 +/* 03CD8C 8003C18C 018B7024 */ and $t6, $t4, $t3 +/* 03CD90 8003C190 AC4E0000 */ sw $t6, ($v0) +.L8003C194: +/* 03CD94 8003C194 8E18004C */ lw $t8, 0x4c($s0) +/* 03CD98 8003C198 240D00FF */ li $t5, 255 +/* 03CD9C 8003C19C A30D0013 */ sb $t5, 0x13($t8) +/* 03CDA0 8003C1A0 8E19004C */ lw $t9, 0x4c($s0) +/* 03CDA4 8003C1A4 00000000 */ nop +/* 03CDA8 8003C1A8 AF200000 */ sw $zero, ($t9) +/* 03CDAC 8003C1AC 8E02004C */ lw $v0, 0x4c($s0) +/* 03CDB0 8003C1B0 00000000 */ nop +/* 03CDB4 8003C1B4 844F0014 */ lh $t7, 0x14($v0) +/* 03CDB8 8003C1B8 00000000 */ nop +/* 03CDBC 8003C1BC 31ECFFF7 */ andi $t4, $t7, 0xfff7 +/* 03CDC0 8003C1C0 A44C0014 */ sh $t4, 0x14($v0) +/* 03CDC4 8003C1C4 8E0B005C */ lw $t3, 0x5c($s0) +/* 03CDC8 8003C1C8 00000000 */ nop +/* 03CDCC 8003C1CC AD600100 */ sw $zero, 0x100($t3) +/* 03CDD0 8003C1D0 8FBF0024 */ lw $ra, 0x24($sp) +/* 03CDD4 8003C1D4 8FB00020 */ lw $s0, 0x20($sp) +/* 03CDD8 8003C1D8 03E00008 */ jr $ra +/* 03CDDC 8003C1DC 27BD0060 */ addiu $sp, $sp, 0x60 + diff --git a/asm/non_matchings/objects/func_80010994.s b/asm/non_matchings/objects/func_80010994.s index 5f5bd3fa..ae348c60 100644 --- a/asm/non_matchings/objects/func_80010994.s +++ b/asm/non_matchings/objects/func_80010994.s @@ -366,7 +366,7 @@ glabel func_80010994 .L80010EC8: /* 011AC8 80010EC8 0C00C8E6 */ jal lightUpdateLights /* 011ACC 80010ECC 02802025 */ move $a0, $s4 -/* 011AD0 80010ED0 0C00CB1B */ jal func_80032C6C +/* 011AD0 80010ED0 0C00CB1B */ jal get_light_count /* 011AD4 80010ED4 00000000 */ nop /* 011AD8 80010ED8 1840001F */ blez $v0, .L80010F58 /* 011ADC 80010EDC 3C118012 */ lui $s1, %hi(D_8011AE60) # $s1, 0x8012 diff --git a/asm/non_matchings/objects/spawn_object.s b/asm/non_matchings/objects/spawn_object.s index 3c327a2f..0f1deef8 100644 --- a/asm/non_matchings/objects/spawn_object.s +++ b/asm/non_matchings/objects/spawn_object.s @@ -45,10 +45,10 @@ glabel spawn_object /* 00F6E4 8000EAE4 00008025 */ move $s0, $zero /* 00F6E8 8000EAE8 008F082A */ slt $at, $a0, $t7 /* 00F6EC 8000EAEC 14200002 */ bnez $at, .L8000EAF8 -/* 00F6F0 8000EAF0 3C028012 */ lui $v0, %hi(D_8011AD58) # $v0, 0x8012 +/* 00F6F0 8000EAF0 3C028012 */ lui $v0, %hi(gSpawnObjectHeap) # $v0, 0x8012 /* 00F6F4 8000EAF4 00002025 */ move $a0, $zero .L8000EAF8: -/* 00F6F8 8000EAF8 2442AD58 */ addiu $v0, %lo(D_8011AD58) # addiu $v0, $v0, -0x52a8 +/* 00F6F8 8000EAF8 2442AD58 */ addiu $v0, %lo(gSpawnObjectHeap) # addiu $v0, $v0, -0x52a8 .L8000EAFC: /* 00F6FC 8000EAFC 8C580000 */ lw $t8, ($v0) /* 00F700 8000EB00 00000000 */ nop @@ -143,7 +143,7 @@ glabel spawn_object /* 00F858 8000EC58 460A4402 */ mul.s $f16, $f8, $f10 /* 00F85C 8000EC5C E6500034 */ swc1 $f16, 0x34($s2) /* 00F860 8000EC60 82040054 */ lb $a0, 0x54($s0) -/* 00F864 8000EC64 0C008F8C */ jal func_80023E30 +/* 00F864 8000EC64 0C008F8C */ jal obj_init_property_flags /* 00F868 8000EC68 00000000 */ nop /* 00F86C 8000EC6C AFA20050 */ sw $v0, 0x50($sp) /* 00F870 8000EC70 8E500040 */ lw $s0, 0x40($s2) @@ -483,7 +483,7 @@ glabel L8000EDE0 /* 00FD2C 8000F12C 00C23021 */ addu $a2, $a2, $v0 /* 00FD30 8000F130 02402025 */ move $a0, $s2 /* 00FD34 8000F134 00C02825 */ move $a1, $a2 -/* 00FD38 8000F138 0C003DFB */ jal func_8000F7EC +/* 00FD38 8000F138 0C003DFB */ jal init_object_shading /* 00FD3C 8000F13C AFA60048 */ sw $a2, 0x48($sp) /* 00FD40 8000F140 8FA60048 */ lw $a2, 0x48($sp) /* 00FD44 8000F144 00000000 */ nop @@ -542,7 +542,7 @@ glabel L8000EDE0 /* 00FE08 8000F208 310A0010 */ andi $t2, $t0, 0x10 /* 00FE0C 8000F20C 11400006 */ beqz $t2, .L8000F228 /* 00FE10 8000F210 00C02825 */ move $a1, $a2 -/* 00FE14 8000F214 0C003F48 */ jal func_8000FD20 +/* 00FE14 8000F214 0C003F48 */ jal init_object_interaction_data /* 00FE18 8000F218 AFA60048 */ sw $a2, 0x48($sp) /* 00FE1C 8000F21C 8FA60048 */ lw $a2, 0x48($sp) /* 00FE20 8000F220 00000000 */ nop @@ -634,8 +634,8 @@ glabel L8000EDE0 /* 00FF54 8000F354 00114083 */ sra $t0, $s1, 2 /* 00FF58 8000F358 1900000D */ blez $t0, .L8000F390 /* 00FF5C 8000F35C 00068080 */ sll $s0, $a2, 2 -/* 00FF60 8000F360 3C058012 */ lui $a1, %hi(D_8011AD58) # $a1, 0x8012 -/* 00FF64 8000F364 24A5AD58 */ addiu $a1, %lo(D_8011AD58) # addiu $a1, $a1, -0x52a8 +/* 00FF60 8000F360 3C058012 */ lui $a1, %hi(gSpawnObjectHeap) # $a1, 0x8012 +/* 00FF64 8000F364 24A5AD58 */ addiu $a1, %lo(gSpawnObjectHeap) # addiu $a1, $a1, -0x52a8 /* 00FF68 8000F368 00501821 */ addu $v1, $v0, $s0 /* 00FF6C 8000F36C 00082080 */ sll $a0, $t0, 2 .L8000F370: @@ -649,9 +649,9 @@ glabel L8000EDE0 /* 00FF8C 8000F38C AC6BFFFC */ sw $t3, -4($v1) .L8000F390: /* 00FF90 8000F390 8C430058 */ lw $v1, 0x58($v0) -/* 00FF94 8000F394 3C058012 */ lui $a1, %hi(D_8011AD58) # $a1, 0x8012 +/* 00FF94 8000F394 3C058012 */ lui $a1, %hi(gSpawnObjectHeap) # $a1, 0x8012 /* 00FF98 8000F398 10600005 */ beqz $v1, .L8000F3B0 -/* 00FF9C 8000F39C 24A5AD58 */ addiu $a1, %lo(D_8011AD58) # addiu $a1, $a1, -0x52a8 +/* 00FF9C 8000F39C 24A5AD58 */ addiu $a1, %lo(gSpawnObjectHeap) # addiu $a1, $a1, -0x52a8 /* 00FFA0 8000F3A0 8CA90000 */ lw $t1, ($a1) /* 00FFA4 8000F3A4 00436021 */ addu $t4, $v0, $v1 /* 00FFA8 8000F3A8 01896823 */ subu $t5, $t4, $t1 diff --git a/include/structs.h b/include/structs.h index 928477bc..78034f41 100644 --- a/include/structs.h +++ b/include/structs.h @@ -396,7 +396,7 @@ typedef struct LevelHeader { /* 0x56 */ u8 pad56[0x1A]; /* 0x70 */ LevelHeader_70 *unk70; - /* 0x74 */ s8 *unk74[7]; + /* 0x74 */ LevelHeader_70 *unk74[7]; // Weather related? /* 0x90 */ s16 weatherEnable; @@ -677,10 +677,10 @@ typedef struct ObjectHeader24 { u8 unkB; }; }; - s16 unkC; - s16 unkE; - s16 unk10; - u16 unk12; + s16 homeX; + s16 homeY; + s16 homeZ; + u16 radius; u16 unk14; u16 unk16; } ObjectHeader24; @@ -696,19 +696,19 @@ typedef struct ObjectHeader { /* 0x1C */ ObjHeaderParticleEntry *objectParticles; s32 pad20; /* 0x24 */ ObjectHeader24 *unk24; - /* 0x28 */ f32 unk28; - /* 0x2C */ f32 unk2C; + /* 0x28 */ f32 shadeBrightness; + /* 0x2C */ f32 shadeAmbient; /* 0x30 */ u16 unk30; /* 0x32 */ s16 unk32; /* 0x34 */ s16 unk34; /* 0x36 */ s16 unk36; - union { /* 0x38 */ s16 unk38; - /* 0x38 */ u8 pad38[4]; - }; + /* 0x3A */ u8 unk3A; + /* 0x3B */ u8 unk3B; + /* 0x3C */ u8 unk3C; /* 0x3D */ u8 unk3D; - /* 0x3E */ s16 unk3E; - /* 0x40 */ s16 unk40; + /* 0x3E */ s16 shadeAngleY; + /* 0x40 */ s16 shadeAngleZ; /* 0x42 */ s16 unk42; /* 0x44 */ s16 unk44; /* 0x48 */ s16 unk46; @@ -725,7 +725,7 @@ typedef struct ObjectHeader { /* 0x57 */ s8 unk57; /* 0x58 */ s8 unk58; /* 0x59 */ u8 pad59; - /* 0x5A */ s8 unk5A; + /* 0x5A */ s8 numLightSources; /* 0x5B */ u8 unk5B; /* 0x5C */ u8 unk5C; /* 0x5D */ u8 unk5D; //Misc Asset index? @@ -775,6 +775,7 @@ typedef struct ObjectInteraction { /* 0x14 */ s16 flags; /* 0x16 */ s8 unk16; /* 0x17 */ s8 unk17; +/*0x18*/ s32 pad[4]; } ObjectInteraction; typedef struct ShadowData { @@ -786,7 +787,18 @@ typedef struct ShadowData { s16 unkE; } ShadowData; -typedef struct Object_54 { +typedef struct WaterEffect { + f32 scale; + TextureHeader *texture; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; + s16 unk10; + s16 unk12; +} WaterEffect; + +typedef struct ShadeProperties { f32 unk0; u8 unk4; u8 unk5; @@ -812,9 +824,9 @@ typedef struct Object_54 { s16 unk22; s16 unk24; s16 unk26; - f32 unk28; - f32 unk2C; -} Object_54; + f32 brightness; + f32 ambient; +} ShadeProperties; typedef f32 FakeHalfMatrix[2][4]; typedef struct Object_5C { @@ -824,6 +836,10 @@ typedef struct Object_5C { }; /* 0x0100 */ void *unk100; /* 0x0104 */ u8 unk104; + /* 0x0105 */ u8 unk105; + /* 0x0106 */ u8 unk106; + /* 0x0107 */ u8 unk107; + /* 0x0108 */ s32 unk108; } Object_5C; typedef struct Object_60 { @@ -1134,7 +1150,7 @@ typedef struct Object_Racer { /* 0x10C */ s32 unk10C; /* 0x110 */ s32 unk110; /* 0x114 */ s32 unk114; - /* 0x118 */ s32 unk118; + /* 0x118 */ struct unk80119C38 *unk118; /* 0x11C */ f32 unk11C; /* 0x120 */ f32 unk120; /* 0x124 */ f32 unk124; @@ -1710,14 +1726,14 @@ typedef struct Object { /* 0x004A */ s16 unk4A; // Upper byte is object ID, lower byte is object size. /* 0x004C */ ObjectInteraction *interactObj; //player + 0x318 /* 0x0050 */ ShadowData *shadow; //player + 0x2F4 - /* 0x0054 */ Object_54 *unk54; //player + 0x2C0 - /* 0x0058 */ ShadowData *unk58; //player + 0x304 + /* 0x0054 */ ShadeProperties *shading; //player + 0x2C0 + /* 0x0058 */ WaterEffect *waterEffect; //player + 0x304 /* 0x005C */ Object_5C *unk5C; /* 0x0060 */ Object_60 *unk60; //player + 0x340 /* 0x0064 */ Object_64 *unk64; //player + 0x98 /* 0x0068 */ Object_68 **unk68; //player + 0x80 /* 0x006C */ Object_6C *unk6C; //player + 0x370 - /* 0x0070 */ u32 *unk70; + /* 0x0070 */ u32 *lightData; /* 0x0074 */ u32 unk74; /* 0x0078 */ ObjProperties properties; /* 0x0080 */ void *unk80; @@ -1767,18 +1783,6 @@ typedef struct GhostDataFrame { u8 pad0[12]; } GhostDataFrame; -/* Size: 0x18 bytes */ -typedef struct unk8011D510 { - /* 0x00 */ s16 unk0; - /* 0x02 */ s16 unk2; - /* 0x04 */ s16 unk4; - /* 0x06 */ u16 unk6; - /* 0x08 */ f32 unk8; - /* 0x0C */ f32 unkC; - /* 0x10 */ f32 unk10; - /* 0x14 */ f32 unk14; -} unk8011D510; - typedef struct unk80042178 { u8 pad0[0x20]; } unk80042178; diff --git a/src/fade_transition.c b/src/fade_transition.c index efa51163..f8312e0b 100644 --- a/src/fade_transition.c +++ b/src/fade_transition.c @@ -24,7 +24,7 @@ u16 D_800E31B8 = 0; s8 D_800E31BC = 0; VertexList *sTransitionVtx[2] = { NULL, NULL }; TriangleList *sTransitionTris[2] = { NULL, NULL }; -s32 sTransitionTaskNum[2] = { 0, 0 }; // The second index goes unused. Is it even an array at all? +s32 sTransitionTaskNum = 0; Gfx dTransitionFadeSettings[] = { gsDPPipeSync(), @@ -312,7 +312,7 @@ s32 handle_transitions(s32 updateRate) { transition_end(); } else { if (sTransitionFadeTimer > 0) { - sTransitionTaskNum[0] = 1 - sTransitionTaskNum[0]; // Haven't you heard of a XOR, Rareware employee? + sTransitionTaskNum = 1 - sTransitionTaskNum; // Haven't you heard of a XOR, Rareware employee? } switch (gCurFadeTransition) { case FADE_FULLSCREEN: @@ -390,7 +390,7 @@ void transition_end(void) { sTransitionTris[1] = NULL; } sTransitionStatus = TRANSITION_NONE; - sTransitionTaskNum[0] = 0; + sTransitionTaskNum = 0; } /** @@ -469,8 +469,8 @@ GLOBAL_ASM("asm/non_matchings/fade_transition/func_800C1130.s") void render_fade_barndoor_horizontal(Gfx **dList, UNUSED MatrixS **mats, UNUSED Vertex **verts) { reset_render_settings(dList); gSPDisplayList((*dList)++, dTransitionShapeSettings); - gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]]), 12, 0); - gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum[0]]), 8, TRIN_DISABLE_TEXTURE); + gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum]), 12, 0); + gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum]), 8, TRIN_DISABLE_TEXTURE); reset_render_settings(dList); } @@ -481,8 +481,8 @@ void render_fade_barndoor_horizontal(Gfx **dList, UNUSED MatrixS **mats, UNUSED void render_fade_barndoor_vertical(Gfx **dList, UNUSED MatrixS **mats, UNUSED Vertex **verts) { reset_render_settings(dList); gSPDisplayList((*dList)++, dTransitionShapeSettings); - gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]]), 12, 0); - gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum[0]]), 8, TRIN_DISABLE_TEXTURE); + gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum]), 12, 0); + gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum]), 8, TRIN_DISABLE_TEXTURE); reset_render_settings(dList); } @@ -500,8 +500,8 @@ void render_fade_circle(Gfx **dList, UNUSED MatrixS **mats, UNUSED Vertex **vert reset_render_settings(dList); gfx = *dList; - vertsToRender = (Vertex *) sTransitionVtx[sTransitionTaskNum[0]]; - trisToRender = (Triangle *) sTransitionTris[sTransitionTaskNum[0]]; + vertsToRender = (Vertex *) sTransitionVtx[sTransitionTaskNum]; + trisToRender = (Triangle *) sTransitionTris[sTransitionTaskNum]; gSPDisplayList(gfx++, dTransitionShapeSettings); for (i = 0; i < 4; i++) { @@ -522,8 +522,8 @@ void render_fade_waves(Gfx **dlist, UNUSED MatrixS **mats, UNUSED Vertex **verts Triangle *t; reset_render_settings(dlist); gfx = *dlist; - v = (Vertex *)sTransitionVtx[sTransitionTaskNum[0]]; - t = (Triangle *)sTransitionTris[sTransitionTaskNum[0]]; + v = (Vertex *)sTransitionVtx[sTransitionTaskNum]; + t = (Triangle *)sTransitionTris[sTransitionTaskNum]; gSPDisplayList(gfx++, dTransitionShapeSettings); /* i == 0 -> Left third wave? @@ -556,8 +556,8 @@ void render_fade_waves(Gfx **dlist, UNUSED MatrixS **mats, UNUSED Vertex **verts void render_fade_barndoor_diagonal(Gfx **dList, UNUSED MatrixS **mats, UNUSED Vertex **verts) { reset_render_settings(dList); gSPDisplayList((*dList)++, dTransitionShapeSettings); - gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum[0]]), 10, 0); - gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum[0]]), 6, TRIN_DISABLE_TEXTURE); + gSPVertexDKR((*dList)++, OS_PHYSICAL_TO_K0(sTransitionVtx[sTransitionTaskNum]), 10, 0); + gSPPolygon((*dList)++, OS_PHYSICAL_TO_K0(sTransitionTris[sTransitionTaskNum]), 6, TRIN_DISABLE_TEXTURE); reset_render_settings(dList); } diff --git a/src/font.c b/src/font.c index cafd26f2..05e899bc 100644 --- a/src/font.c +++ b/src/font.c @@ -71,8 +71,6 @@ DialogueBoxBackground *gDialogueBoxBackground; //Official Name: Window DialogueTextElement *gDialogueText; //Official Name: String s32 gCompactKerning; // Official Name: squash - Boolean value, seems to be related to X placement of menus on the X Axis? s8 sDialogueBoxCloseTimer; -UNUSED s32 D_8012A7F8; -UNUSED s32 D_8012A7FC; /******************************/ diff --git a/src/game.c b/src/game.c index ad476509..d301266a 100644 --- a/src/game.c +++ b/src/game.c @@ -473,7 +473,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl gMapId = levelId; for (var_s0 = 0; var_s0 < 7; var_s0++) { if ((s32) gCurrentLevelHeader->unk74[var_s0] != -1) { - gCurrentLevelHeader->unk74[var_s0] = (s8 *) get_misc_asset((s32) gCurrentLevelHeader->unk74[var_s0]); + gCurrentLevelHeader->unk74[var_s0] = (LevelHeader_70 *) get_misc_asset((s32) gCurrentLevelHeader->unk74[var_s0]); func_8007F1E8((LevelHeader_70 *) gCurrentLevelHeader->unk74[var_s0]); } } @@ -499,7 +499,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl } set_music_player_voice_limit(gCurrentLevelHeader->voiceLimit); func_80000CBC(); - setup_lights(0x20); + setup_lights(32); var_s0 = VEHICLE_CAR; if (vehicleId >= VEHICLE_CAR && vehicleId < NUMBER_OF_PLAYER_VEHICLES) { var_s0 = gCurrentLevelHeader->unk4F[vehicleId]; @@ -510,10 +510,10 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl settings->worldId = gCurrentLevelHeader->world; } settings->courseId = levelId; - if (var_s0 == 0 && settings->worldId > 0) { + if (var_s0 == WORLD_CENTRAL_AREA && settings->worldId > 0) { gCurrentDefaultVehicle = get_level_default_vehicle(); } - if (settings->worldId == 0 && var_s0 > 0 && gCurrentDefaultVehicle != -1) { + if (settings->worldId == WORLD_CENTRAL_AREA && var_s0 > 0 && gCurrentDefaultVehicle != -1) { vehicleId = gCurrentDefaultVehicle; } func_8006DB20(vehicleId); @@ -547,7 +547,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl } } - var_s0 = settings->courseFlagsPtr[levelId]; + var_s0 = settings->courseFlagsPtr[levelId]; // Redundant if (numberOfPlayers != ONE_PLAYER && gCurrentLevelHeader->race_type == RACETYPE_DEFAULT) { cutsceneId = CUTSCENE_ID_UNK_64; } diff --git a/src/game_text.c b/src/game_text.c index f0a662b7..b43e2215 100644 --- a/src/game_text.c +++ b/src/game_text.c @@ -10,213 +10,242 @@ /************ .data ************/ -s8 D_800E3670 = 0; -s16 D_800E3674 = 0; +s8 gTextTableExists = FALSE; +s16 gTextDisplayNumber = 0; s32 D_800E3678 = 0; s32 D_800E367C = 0; -s32 D_800E3680 = 1; +s32 gSubtitleSetting = TRUE; /*******************************/ /************ .bss ************/ GameTextTableStruct *gGameTextTable[1]; -s8 D_8012A784; -s8 D_8012A785; -s8 D_8012A786; +s8 gCloseTextMessage; +s8 gTextCloseTimerFrames; +s8 gTextCloseTimerSeconds; s8 D_8012A787; s8 D_8012A788; -u8 D_8012A789; +u8 gShowOnscreenMessage; u8 D_8012A78A; -s16 D_8012A78C; +UNUSED s16 D_8012A78C; // Set to -1, never read. s16 D_8012A78E; -s16 D_8012A790; -s16 D_8012A792; -char *D_8012A798[2]; //960 x2 bytes +s16 gTextTableEntries; +UNUSED s16 D_8012A792; +char *gGameTextTableEntries[2]; //960 x2 bytes char *D_8012A7A0; s32 D_8012A7A4; -s16 sDialogueAlpha; -s16 D_8012A7AA; -s16 D_8012A7AC; -s16 sDialogueXPos1; // The Upper Left X Coord of the Dialogue Box. -s16 sDialogueYPos1; // The Upper Left Y Coord of the Dialogue Box. Changes for PAL / NTSC -s16 sDialogueXPos2; // The Lower Right X Coord of the Dialogue Box. -s16 sDialogueYPos2; // The Lower Right Y Coord of the Dialogue Box. Changes for PAL / NTSC -s16 D_8012A7B6; // A Boolean value -s16 D_8012A7B8; -s16 D_8012A7BA; -s16 D_8012A7BE; -char *D_8012A7C0[1]; -char *D_8012A7C8[2]; -char *D_8012A7D0; +s16 gDialogueAlpha; +s16 gTextAlphaVelocity; +s16 gSubtitleTimer; +s16 gDialogueXPos1; // The Upper Left X Coord of the Dialogue Box. +s16 gDialogueYPos1; // The Upper Left Y Coord of the Dialogue Box. Changes for PAL / NTSC +s16 gDialogueXPos2; // The Lower Right X Coord of the Dialogue Box. +s16 gDialogueYPos2; // The Lower Right Y Coord of the Dialogue Box. Changes for PAL / NTSC +s16 gShowSubtitles; +s16 gSubtitleLineCount; +s16 gCurrentTextID; +UNUSED s16 D_8012A7BE; +char *gSubtitleProperties[1]; +char *gCurrentMessageText[2]; +char *gCurrentTextProperties; s32 D_8012A7D4; -s32 D_8012A7D8; -s32 D_8012A7DC; /*****************************/ -void func_800C29F0(void) { - D_8012A7C8[0] = (char *) allocate_from_main_pool_safe(0x780, COLOUR_TAG_GREEN); - D_8012A7C8[1] = D_8012A7C8[0] + 0x3C0; +/** + * Set the default values of dialogue and allocate memory for the active text entry. +*/ +void init_dialogue_text(void) { + gCurrentMessageText[0] = (char *) allocate_from_main_pool_safe(0x780, COLOUR_TAG_GREEN); + gCurrentMessageText[1] = gCurrentMessageText[0] + 0x3C0; D_8012A7D4 = 0; - D_8012A7B6 = 0; - sDialogueAlpha = 0; - D_8012A7AA = 32; - D_8012A7BA = 0; - sDialogueXPos1 = 32; - sDialogueXPos2 = 288; + gShowSubtitles = FALSE; + gDialogueAlpha = 0; + gTextAlphaVelocity = 32; + gCurrentTextID = 0; + gDialogueXPos1 = 32; + gDialogueXPos2 = 288; if (osTvType == TV_TYPE_PAL) { - sDialogueYPos1 = 224; - sDialogueYPos2 = 248; + gDialogueYPos1 = 224; + gDialogueYPos2 = 248; } else { - sDialogueYPos1 = SCREEN_HEIGHT - 38; - sDialogueYPos2 = SCREEN_HEIGHT - 18; + gDialogueYPos1 = SCREEN_HEIGHT - 38; + gDialogueYPos2 = SCREEN_HEIGHT - 18; } func_800C56D0(6); } -void func_800C2AB4(void) { - free_from_memory_pool(D_8012A7C8[0]); - D_8012A7B6 = 0; +/** + * Close screen dialogue and free the text currently loaded into it. +*/ +void free_message_box(void) { + free_from_memory_pool(gCurrentMessageText[0]); + gShowSubtitles = FALSE; close_dialogue_box(6); assign_dialogue_box_id(6); } -void func_800C2AF4(s32 arg0) { - D_800E3680 = arg0; +/** + * Toggle an override that prevents subtitles from showing. +*/ +void set_subtitles(s32 setting) { + gSubtitleSetting = setting; } -void func_800C2B00(void) { - s32 var_s1; - s32 var_s3; +/** + * Render currently active subtitles on the screen. +*/ +void render_subtitles(void) { + s32 textX; + s32 textY; s32 i; s32 textFlags; - char **var_s2; + char **textData; assign_dialogue_box_id(6); - set_current_dialogue_box_coords(6, sDialogueXPos1, sDialogueYPos1, sDialogueXPos2, sDialogueYPos2); - set_current_dialogue_background_colour(6, 0x40, 0x60, 0x60, (sDialogueAlpha * 0xA0) >> 8); + set_current_dialogue_box_coords(6, gDialogueXPos1, gDialogueYPos1, gDialogueXPos2, gDialogueYPos2); + set_current_dialogue_background_colour(6, 64, 96, 96, (gDialogueAlpha * 160) >> 8); set_current_text_background_colour(6, 0, 0, 0, 0); - var_s3 = ((((sDialogueYPos2 - sDialogueYPos1) - (D_8012A7B8 * 0xC)) - (D_8012A7B8 * 2)) + 2) >> 1; + textY = ((((gDialogueYPos2 - gDialogueYPos1) - (gSubtitleLineCount * 12)) - (gSubtitleLineCount * 2)) + 2) >> 1; - for (i = 0; i < D_8012A7B8; i++) { - var_s2 = &D_8012A7C0[0]; - set_dialogue_font(6, (s32)var_s2[i][5]); - textFlags = var_s2[i][6]; - if (textFlags == 4) { - var_s1 = (sDialogueXPos2 - sDialogueXPos1) >> 1; + for (i = 0; i < gSubtitleLineCount; i++) { + textData = &gSubtitleProperties[0]; + set_dialogue_font(6, (s32) textData[i][TEXT_FONT]); + textFlags = textData[i][TEXT_FLAGS]; + if (textFlags == ALIGN_TOP_CENTER) { + textX = (gDialogueXPos2 - gDialogueXPos1) >> 1; } else { - if (textFlags == 1) { - var_s1 = (sDialogueXPos2 - sDialogueXPos1) - 8; + if (textFlags == ALIGN_TOP_RIGHT) { + textX = (gDialogueXPos2 - gDialogueXPos1) - 8; } else { - var_s1 = 8; + textX = 8; } } - set_current_text_colour(6, var_s2[i][1], var_s2[i][2], var_s2[i][3], 255, (var_s2[i][4] * sDialogueAlpha) >> 8); - render_dialogue_text(6, var_s1, var_s3, var_s2[i] + 8, 1, textFlags); - set_current_text_colour(6, 0, 0, 0, 255, (sDialogueAlpha * 255) >> 8); - render_dialogue_text(6, var_s1 + 1, var_s3 + 1, var_s2[i] + 8, 1, textFlags); - var_s3 += 14; + set_current_text_colour(6, textData[i][TEXT_COL_R], textData[i][TEXT_COL_G], textData[i][TEXT_COL_B], 255, (textData[i][TEXT_ALPHA] * gDialogueAlpha) >> 8); + render_dialogue_text(6, textX, textY, textData[i] + 8, 1, textFlags); + set_current_text_colour(6, 0, 0, 0, 255, (gDialogueAlpha * 255) >> 8); + render_dialogue_text(6, textX + 1, textY + 1, textData[i] + 8, 1, textFlags); + textY += 14; } open_dialogue_box(6); } -void func_800C2D6C(void) { +/** + * Get the line count and text timer from the next message of the subtitle. + * Close the subtitles if none can be found. +*/ +void find_next_subtitle(void) { u32 new_var3; u8 new_var; s32 new_var2; s32 done; - D_8012A7B8 = 0; - D_8012A7AC = 0; + gSubtitleLineCount = 0; + gSubtitleTimer = 0; done = FALSE; - while ((D_8012A7D0[0] != 0) && done == FALSE) { - D_8012A7BA = D_8012A7D0[0] - 1; - D_8012A7C0[(D_8012A7B8)] = D_8012A7D0; - D_8012A7AC = normalise_time(D_8012A7D0[7] * 6); - D_8012A7D0 += 8; + while (gCurrentTextProperties[0] != NULL && done == FALSE) { + gCurrentTextID = gCurrentTextProperties[0] - 1; + gSubtitleProperties[gSubtitleLineCount] = gCurrentTextProperties; + gSubtitleTimer = normalise_time(gCurrentTextProperties[7] * 6); + gCurrentTextProperties += 8; do { - new_var = D_8012A7D0[0]; + new_var = gCurrentTextProperties[0]; if (new_var & 0x80) { - D_8012A7D0 += 2; + gCurrentTextProperties += 2; } else { - D_8012A7D0++; + gCurrentTextProperties++; } - } while (D_8012A7D0[0] != 0); - D_8012A7B8++; - if (D_8012A7B8 >= 2) { + } while (gCurrentTextProperties[0] != NULL); + gSubtitleLineCount++; + if (gSubtitleLineCount >= 2) { done = TRUE; } - D_8012A7D0++; - new_var3 = (new_var2 = D_8012A7D0[0]); - if (D_8012A7D0[0] == 10) { - D_8012A7D0++; + gCurrentTextProperties++; + new_var3 = (new_var2 = gCurrentTextProperties[0]); + if (gCurrentTextProperties[0] == 10) { + gCurrentTextProperties++; } else if (new_var3 == 12) { - D_8012A7D0++; + gCurrentTextProperties++; done = TRUE; } } - if (D_8012A7B8 > 0) { - D_8012A7B6 = 1; + if (gSubtitleLineCount > 0) { + gShowSubtitles = TRUE; } } -void func_800C2F1C(s32 arg0) { - if (D_800E3680 == 0) { - D_8012A7B6 = 0; +/** + * Handle the subtitle system from here. + * Slowly show the text, tick down the timer, find the next message or close the box, then render. +*/ +void process_subtitles(s32 updateRate) { + if (gSubtitleSetting == FALSE) { + gShowSubtitles = FALSE; } - if (D_8012A7B6 != 0) { - if (D_8012A7AC <= 0) { - sDialogueAlpha -= arg0 * D_8012A7AA; - if (sDialogueAlpha < 0) { - sDialogueAlpha = 0; - D_8012A7B6 = 0; + if (gShowSubtitles) { + if (gSubtitleTimer <= 0) { + gDialogueAlpha -= updateRate * gTextAlphaVelocity; + if (gDialogueAlpha < 0) { + gDialogueAlpha = 0; + gShowSubtitles = FALSE; close_dialogue_box(6); assign_dialogue_box_id(6); } } else { - sDialogueAlpha += arg0 * D_8012A7AA; - if (sDialogueAlpha > 256) { - sDialogueAlpha = 256; + gDialogueAlpha += updateRate * gTextAlphaVelocity; + if (gDialogueAlpha > 256) { + gDialogueAlpha = 256; } - D_8012A7AC -= arg0; - if (D_8012A7AC <= 0) { - func_800C2D6C(); + gSubtitleTimer -= updateRate; + if (gSubtitleTimer <= 0) { + find_next_subtitle(); } } } - if (D_8012A7B6 != 0) { - func_800C2B00(); + if (gShowSubtitles) { + render_subtitles(); } } -void func_800C3048(void) { +/** + * Load the text table into RAM. + * Assign the entries to a pointer table, then calculate the number of entries. +*/ +void load_game_text_table(void) { D_8012A78C = -1; gGameTextTable[0] = (GameTextTableStruct *) allocate_from_main_pool_safe(0x800, COLOUR_TAG_GREEN); - D_8012A798[0] = (char *) &gGameTextTable[0]->entries[32]; - D_8012A798[1] = &D_8012A798[0][960]; + gGameTextTableEntries[0] = (char *) &gGameTextTable[0]->entries[32]; + gGameTextTableEntries[1] = &gGameTextTableEntries[0][960]; D_8012A7A4 = 0; - func_800C29F0(); - D_8012A790 = (get_size_of_asset_section(ASSET_GAME_TEXT_TABLE) >> 2) - 2; - D_800E3670 = 1; + init_dialogue_text(); + gTextTableEntries = (get_size_of_asset_section(ASSET_GAME_TEXT_TABLE) >> 2) - 2; + gTextTableExists = TRUE; } -void func_800C30CC(void) { +/** + * Free the text table from RAM. + * Close every dialogue box, then call a function that frees menu dialogue, too. + */ +void free_game_text_table(void) { s32 i; - if (D_800E3670) { + if (gTextTableExists) { free_from_memory_pool(gGameTextTable[0]); - D_800E3670 = 0; - D_8012A789 = 0; + gTextTableExists = FALSE; + gShowOnscreenMessage = FALSE; for (i = 0; i < 10; i++) { try_close_dialogue_box(); }; - func_800C2AB4(); + free_message_box(); } } -void func_800C3140(s32 arg0) { - D_800E3674 = arg0; +/** + * Set the variable used by the message boxes when trying to display an arbitrary number. +*/ +void set_textbox_display_value(s32 num) { + gTextDisplayNumber = num; } void func_800C314C(void) { @@ -239,57 +268,57 @@ void func_800C31EC(s32 arg0) { s32 language; s32 temp; - if ((D_800E3670 != 0) && (arg0 >= 0)) { - if (arg0 < D_8012A790) { - language = get_language(); - switch (language) { + if (gTextTableExists && arg0 >= 0) { + if (arg0 < gTextTableEntries) { + language = get_language(); + switch (language) { case LANGUAGE_GERMAN: - arg0 += 0x55; - break; + arg0 += 0x55; + break; case LANGUAGE_FRENCH: - arg0 += 0xAA; - break; + arg0 += 0xAA; + break; case LANGUAGE_JAPANESE: - arg0 += 0xFF; - break; - } + arg0 += 0xFF; + break; + } - load_asset_to_address(ASSET_GAME_TEXT_TABLE, (u32) (*gGameTextTable)->entries, (arg0 & (~1)) << 2, 16); - - entries = (*gGameTextTable)->entries; - temp = ((s32) entries[(arg0 & 1)]) & 0xFF000000; - size = (((s32) entries[(arg0 & 1) + 1]) & 0xFFFFFF) - (((s32) entries[(arg0 & 1)]) & 0xFFFFFF); - - if (temp) { - load_asset_to_address(ASSET_GAME_TEXT, (u32) D_8012A7C8[D_8012A7D4], ((s32) entries[(arg0 & 1)]) ^ temp, size); - D_8012A7D0 = D_8012A7C8[D_8012A7D4]; - func_800C2D6C(); - D_8012A7D4 = (D_8012A7D4 + 1) & 1; + load_asset_to_address(ASSET_GAME_TEXT_TABLE, (u32) (*gGameTextTable)->entries, (arg0 & (~1)) << 2, 16); + + entries = (*gGameTextTable)->entries; + temp = ((s32) entries[arg0 & 1]) & 0xFF000000; + size = (((s32) entries[(arg0 & 1) + 1]) & 0xFFFFFF) - (((s32) entries[arg0 & 1]) & 0xFFFFFF); + + if (temp) { + load_asset_to_address(ASSET_GAME_TEXT, (u32) gCurrentMessageText[D_8012A7D4], ((s32) entries[arg0 & 1]) ^ temp, size); + gCurrentTextProperties = gCurrentMessageText[D_8012A7D4]; + find_next_subtitle(); + D_8012A7D4 = (D_8012A7D4 + 1) & 1; + return; + } + load_asset_to_address(ASSET_GAME_TEXT, (u32) gGameTextTableEntries[D_8012A7A4], ((s32) entries[arg0 & 1]) ^ temp, size); + D_8012A7A0 = gGameTextTableEntries[D_8012A7A4]; + D_8012A7A4 = (D_8012A7A4 + 1) & 1; + D_8012A788 = 0; + gTextCloseTimerSeconds = 0; + gCloseTextMessage = FALSE; + D_8012A787 = 1; + D_8012A7A0[size] = 2; + if (gShowOnscreenMessage == FALSE) { + D_8012A78E = 0; + D_8012A78A = 1; + gShowOnscreenMessage = TRUE; + } return; - } - load_asset_to_address(ASSET_GAME_TEXT, (u32) D_8012A798[D_8012A7A4], ((s32) entries[(arg0 & 1)]) ^ temp, size); - D_8012A7A0 = D_8012A798[D_8012A7A4]; - D_8012A7A4 = (D_8012A7A4 + 1) & 1; - D_8012A788 = 0; - D_8012A786 = 0; - D_8012A784 = 0; - D_8012A787 = 1; - D_8012A7A0[size] = 2; - if (!D_8012A789) { - D_8012A78E = 0; - D_8012A78A = 1; - D_8012A789 = 1; - } - return; + } } - } - D_8012A784 = 1; + gCloseTextMessage = TRUE; } s32 func_800C3400(void) { s32 result = 0; - if (D_800E3670 != 0) { - if (D_8012A789 != 0) { + if (gTextTableExists) { + if (gShowOnscreenMessage) { result = 1; if (D_8012A788 != 0) { result = 2; @@ -299,28 +328,32 @@ s32 func_800C3400(void) { return result; } -void func_800C3440(s32 arg0) { - if (D_800E3670 != 0) { +/** + * Top level function for handling message boxes and dialogue. + * Calls a function too, to load in text entries when needed. +*/ +void process_onscreen_textbox(s32 updateRate) { + if (gTextTableExists) { if (!is_game_paused()) { if (D_800E3678 > 0) { - D_800E3678 -= arg0; + D_800E3678 -= updateRate; if (D_800E3678 <= 0) { func_800C31EC(D_800E367C); D_800E3678 = 0; } } } - func_800C2F1C(arg0); - if (D_8012A789 != 0) { + process_subtitles(updateRate); + if (gShowOnscreenMessage) { disable_racer_input(); - if (D_8012A786 != 0) { - D_8012A785 -= arg0; - while (D_8012A785 < 0) { - D_8012A785 += normalise_time(60); - D_8012A786--; + if (gTextCloseTimerSeconds) { + gTextCloseTimerFrames -= updateRate; + while (gTextCloseTimerFrames < 0) { + gTextCloseTimerFrames += normalise_time(60); + gTextCloseTimerSeconds--; } - if (D_8012A786 <= 0) { - D_8012A784 = 1; + if (gTextCloseTimerSeconds <= 0) { + gCloseTextMessage = TRUE; } } npc_dialogue_loop(DIALOGUE_CHALLENGE); @@ -328,7 +361,7 @@ void func_800C3440(s32 arg0) { } } -s32 func_800C3564(void) { +s32 dialogue_challenge_loop(void) { s32 xPos; s32 index; s32 numberOfOnes; @@ -370,7 +403,7 @@ s32 func_800C3564(void) { } else { xPos = (s32) (textBox.right - textBox.left) >> 1; // Center x position to box. } - render_dialogue_text(1, xPos, textBox.textY, &D_8012A7A0[index], D_800E3674, textBox.textFlags); + render_dialogue_text(1, xPos, textBox.textY, &D_8012A7A0[index], gTextDisplayNumber, textBox.textFlags); textBox.textY += textBox.lineHeight; while (D_8012A7A0[index] > 0) { index += 1; @@ -390,15 +423,15 @@ s32 func_800C3564(void) { playerButtons = 0; } if (D_8012A78A == 0) { - if (playerButtons & A_BUTTON || D_8012A784 != 0) { + if (playerButtons & A_BUTTON || gCloseTextMessage) { if (D_8012A7A0[index] == 1) { D_8012A78E += 1; } else { - D_8012A789 = 0; + gShowOnscreenMessage = FALSE; func_8009CF68(3); } - D_8012A784 = 0; - D_8012A786 = 0; + gCloseTextMessage = FALSE; + gTextCloseTimerSeconds = 0; } } D_8012A78A = 0; @@ -410,7 +443,7 @@ s32 func_800C38B4(s32 arg0, TextBox *textbox) { char *var_s0; var_s0 = &D_8012A7A0[arg0]; - while ((var_s0[0] >= 3) && (var_s0[0] < 13)) { + while (var_s0[0] >= 3 && var_s0[0] < 13) { switch (var_s0[0] - 3) { case 0: textbox->font = var_s0[1]; @@ -421,14 +454,14 @@ s32 func_800C38B4(s32 arg0, TextBox *textbox) { case 1: textbox->left = var_s0[1] & 0xFF; textbox->top = D_8012A7A0[arg0 + 2] & 0xFF; - if (osTvType == 0) { + if (osTvType == TV_TYPE_PAL) { temp = textbox->top; - textbox->top = ((textbox->top * 0x108) / 240); + textbox->top = (textbox->top * 264) / 240; temp = textbox->top - temp; } else { temp = 0; } - textbox->right = (D_8012A7A0[arg0 + 3] & 0xFF) + 0x41; + textbox->right = (D_8012A7A0[arg0 + 3] & 0xFF) + 65; textbox->bottom = (D_8012A7A0[arg0 + 4] & 0xFF) + temp; arg0 += 5; set_current_dialogue_box_coords(1, textbox->left, textbox->top, textbox->right, textbox->bottom); @@ -468,9 +501,9 @@ s32 func_800C38B4(s32 arg0, TextBox *textbox) { var_s0 = &D_8012A7A0[arg0]; break; case 7: - if (D_8012A786 == 0) { - D_8012A786 = var_s0[1] & 0xFF; - D_8012A785 = normalise_time(0x3C); + if (gTextCloseTimerSeconds == 0) { + gTextCloseTimerSeconds = var_s0[1] & 0xFF; + gTextCloseTimerFrames = normalise_time(60); var_s0 = &D_8012A7A0[arg0]; } arg0 += 2; @@ -478,12 +511,12 @@ s32 func_800C38B4(s32 arg0, TextBox *textbox) { break; case 8: arg0 += 2; - D_8012A787 = (s8) var_s0[1]; + D_8012A787 = var_s0[1]; var_s0 += 2; break; case 9: arg0 += 2; - D_8012A788 = (s8) var_s0[1]; + D_8012A788 = var_s0[1]; var_s0 += 2; break; } diff --git a/src/game_text.h b/src/game_text.h index b443f5b3..9c0da176 100644 --- a/src/game_text.h +++ b/src/game_text.h @@ -20,6 +20,16 @@ textBox.textY = y; \ textBox.lineHeight = height +enum TextProperties { + TEXT_NONE, + TEXT_COL_R, + TEXT_COL_G, + TEXT_COL_B, + TEXT_ALPHA, + TEXT_FONT, + TEXT_FLAGS +}; + typedef struct GameTextTableStruct { char *entries[128]; s32 *somethingElse; @@ -41,22 +51,21 @@ typedef struct TextBox { s32 lineHeight; } TextBox; - -void func_800C29F0(void); -void func_800C2AB4(void); -void func_800C2AF4(s32 arg0); -void func_800C2F1C(s32 arg0); -void func_800C3048(void); -void func_800C30CC(void); -void func_800C3140(s32 arg0); +void init_dialogue_text(void); +void free_message_box(void); +void set_subtitles(s32 arg0); +void process_subtitles(s32 arg0); +void load_game_text_table(void); +void free_game_text_table(void); +void set_textbox_display_value(s32 arg0); void func_800C314C(void); void func_800C3158(s32 arg0, f32 arg1); s32 func_800C3400(void); -void func_800C3440(s32 arg0); -void func_800C2D6C(void); +void process_onscreen_textbox(s32 arg0); +void find_next_subtitle(void); s32 func_800C38B4(s32 arg0, TextBox *textbox); -void func_800C2B00(void); +void render_subtitles(void); void func_800C31EC(s32 arg0); -s32 func_800C3564(void); +s32 dialogue_challenge_loop(void); #endif diff --git a/src/game_ui.c b/src/game_ui.c index 01a5f168..053131ad 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -226,16 +226,16 @@ s8 D_80126CD3; s8 gRaceStartShowHudStep; s8 D_80126CD5; -u8 *D_80126CD8; -unk80126CDC *D_80126CDC; -unk80126CDC *D_80126CE0[MAXCONTROLLERS]; //One per active player +u8 *gAssetHudElementStaleCounter; +unk80126CDC *gCurrentHud; +unk80126CDC *gPlayerHud[MAXCONTROLLERS]; //One per active player s16 *gAssetHudElementIds; -unk80126CF4 *gAssetHudElements; +HudElements *gAssetHudElements; s32 gAssetHudElementIdsCount; Gfx *gHUDCurrDisplayList; MatrixS *gHUDCurrMatrix; Vertex *gHUDCurrVertex; -s32 D_80126D08; +s32 gHudCurrentViewport; s32 gHUDNumPlayers; s32 D_80126D10; s32 D_80126D14; @@ -277,8 +277,8 @@ s32 D_80126D78; u16 D_80126D7C; DrawTexture gHudSprites[128]; s32 D_80127180; -Settings *D_80127184; -u8 D_80127188; +Settings *gHudSettings; +u8 gHudSilverCoinRace; u8 D_80127189; u8 D_8012718A; u8 D_8012718B; @@ -292,38 +292,44 @@ u8 gGfxTaskYieldData[OS_YIELD_DATA_SIZE]; /******************************/ -void func_8009ECF0(UNUSED s32 viewPortCount) { +/** + * Load basic hud assets and allocate HUD data for each player. + * Set up the global hud elements and reset global vars. +*/ +void init_hud(UNUSED s32 viewportCount) { s32 i; - s32 tempMaxPlayers; + s32 playerCount; gHUDNumPlayers = get_viewport_count(); gNumActivePlayers = set_active_viewports_and_max(gHUDNumPlayers); - D_80127184 = get_settings(); - D_80127188 = check_if_silver_coin_race(); + gHudSettings = get_settings(); + gHudSilverCoinRace = check_if_silver_coin_race(); gAssetHudElementIds = (s16 *) load_asset_section_from_rom(ASSET_HUD_ELEMENT_IDS); - gAssetHudElementIdsCount = 0; // Number of elements in ASSET_HUD_ELEMENT_IDS? + gAssetHudElementIdsCount = 0; + while(gAssetHudElementIds[gAssetHudElementIdsCount] != -1) { gAssetHudElementIdsCount++; } - gAssetHudElements = allocate_from_main_pool_safe(gAssetHudElementIdsCount * 5, COLOUR_TAG_BLUE); - D_80126CD8 = (u8 *) ((gAssetHudElementIdsCount + (u32 *) gAssetHudElements)); + gAssetHudElements = allocate_from_main_pool_safe(gAssetHudElementIdsCount * (sizeof(void *) + 1), COLOUR_TAG_BLUE); + // Evil pointer shenanigans to store the timer in that last byte in the struct above. + gAssetHudElementStaleCounter = (u8 *) ((gAssetHudElementIdsCount + (s32 *) gAssetHudElements)); for(i = 0; i < gAssetHudElementIdsCount; i++) { - D_80126CD8[i] = 0; - gAssetHudElements->unk0[i] = NULL; + gAssetHudElementStaleCounter[i] = 0; + gAssetHudElements->entry[i] = NULL; } - gAssetHudElements->unk0[1] = func_8007C12C(gAssetHudElementIds[1] & 0x3FFF, 1); //ID: 86 - 0x56 - gAssetHudElements->unk0[23] = func_8007C12C(gAssetHudElementIds[23] & 0x3FFF, 1); //ID: 291 - 0x123 - gAssetHudElements->unk0[8] = func_8007C12C(gAssetHudElementIds[8] & 0x3FFF, 1); //ID: 156 - 0x9C - gAssetHudElements->unk0[17] = func_8007C12C(gAssetHudElementIds[17] & 0x3FFF, 1); //ID: 60 - 0x3C + gAssetHudElements->entry[HUD_ELEMENT_UNK_01] = func_8007C12C(gAssetHudElementIds[HUD_ELEMENT_UNK_01] & 0x3FFF, 1); //ID: 86 - 0x56 + gAssetHudElements->entry[HUD_ELEMENT_UNK_17] = func_8007C12C(gAssetHudElementIds[HUD_ELEMENT_UNK_17] & 0x3FFF, 1); //ID: 291 - 0x123 + gAssetHudElements->entry[HUD_ELEMENT_UNK_08] = func_8007C12C(gAssetHudElementIds[HUD_ELEMENT_UNK_08] & 0x3FFF, 1); //ID: 156 - 0x9C + gAssetHudElements->entry[HUD_ELEMENT_UNK_11] = func_8007C12C(gAssetHudElementIds[HUD_ELEMENT_UNK_11] & 0x3FFF, 1); //ID: 60 - 0x3C if (gNumActivePlayers != 3) { - tempMaxPlayers = gNumActivePlayers; + playerCount = gNumActivePlayers; } else { - tempMaxPlayers = 4; // If gNumActivePlayers is 3, then set this to 4. + playerCount = 4; // Create four viewports if there are three players. } - D_80126CE0[0] = allocate_from_main_pool_safe(tempMaxPlayers * sizeof(unk80126CDC), COLOUR_TAG_BLUE); - D_80126CE0[1] = (unk80126CDC *) (((u8 *) D_80126CE0[0]) + sizeof(unk80126CDC)); - D_80126CE0[2] = (unk80126CDC *) (((u8 *) D_80126CE0[1]) + sizeof(unk80126CDC)); - D_80126CE0[3] = (unk80126CDC *) (((u8 *) D_80126CE0[2]) + sizeof(unk80126CDC)); + 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)); func_8009F034(); D_80126D64 = 0; gWrongWayNagTimer = 0; @@ -341,8 +347,8 @@ void func_8009ECF0(UNUSED s32 viewPortCount) { D_80126CD3 = 0; D_80127194 = (LevelHeader_70 *) get_misc_asset(ASSET_MISC_58); func_8007F1E8(D_80127194); - set_sound_channel_volume(0, 0x7FFF); - set_sound_channel_volume(2, 0x7FFF); + set_sound_channel_volume(0, 32767); + set_sound_channel_volume(2, 32767); for(i = 0; i < 2; i++){ D_800E2770[i].unk2 = 0; D_800E2770[i].unk3 = 0; @@ -368,9 +374,9 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s s32 sp2C; Object_64* racer; - D_80126D08 = get_current_viewport(); + gHudCurrentViewport = get_current_viewport(); if (D_8012718A) { - arg3 = get_racer_object_by_port(1 - D_80126D08); + arg3 = get_racer_object_by_port(1 - gHudCurrentViewport); } gHudLevelHeader = get_current_level_header(); if (arg3 == NULL) { @@ -402,7 +408,7 @@ void render_hud(Gfx **dList, MatrixS **mtx, Vertex **vertexList, Object *arg3, s } else { D_80126D10 = racer->racer.playerIndex; } - D_80126CDC = D_80126CE0[D_80126D08]; + gCurrentHud = gPlayerHud[gHudCurrentViewport]; if (func_8001E440() != 10) { if (gHUDNumPlayers == ONE_PLAYER) { if (get_buttons_pressed_from_player(D_80126D10) & D_CBUTTONS && racer->racer.raceFinished == FALSE && ((gHudLevelHeader->race_type == RACETYPE_DEFAULT) || gHudLevelHeader->race_type == RACETYPE_HORSESHOE_GULCH) && D_80126D34) { @@ -582,7 +588,7 @@ void func_800A0DC0(s32 arg0, Object *arg1, s32 updateRate) { func_800A4C44(racer, updateRate); render_speedometer(arg1, updateRate); - if (D_80127188 && racer->raceFinished == FALSE) { + if (gHudSilverCoinRace && racer->raceFinished == FALSE) { func_800A47A0(racer, updateRate); } @@ -604,7 +610,7 @@ void render_course_indicator_arrows(Object_Racer *racer, s32 updateRate) { type = racer->indicator_type; racer->indicator_timer = timer - updateRate; if (type) { - indicator = (IndicatorArrow *) &D_80126CDC->courseIndicator; + indicator = (IndicatorArrow *) &gCurrentHud->courseIndicator; switch (type) { case INDICATOR_LEFT: indicator->textureID = 33; @@ -664,7 +670,7 @@ 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 *) &D_80126CDC->courseIndicator; + indicator = (IndicatorArrow *) &gCurrentHud->courseIndicator; indicator->unk0 = 0; indicator->unk2 = 0; indicator->textureID = 29; @@ -697,10 +703,10 @@ void render_hud_challenge_eggs(s32 arg0, Object *arg1, s32 updateRate) { func_80068508(1); render_race_start(arg0, updateRate); render_weapon_hud(arg1, updateRate); - if ((127 - (updateRate * 2)) >= D_80126CDC->unk67A) { - D_80126CDC->unk67A += updateRate * 2; + if ((127 - (updateRate * 2)) >= gCurrentHud->unk67A) { + gCurrentHud->unk67A += updateRate * 2; } else { - D_80126CDC->unk67A = (D_80126CDC->unk67A + (updateRate * 2)) - 255; + gCurrentHud->unk67A = (gCurrentHud->unk67A + (updateRate * 2)) - 255; } if (gNumActivePlayers != 2) { func_800A14F0(arg1, updateRate); @@ -765,7 +771,7 @@ void render_hud_hubworld(Object *obj, s32 updateRate) { func_800A718C(obj64); render_speedometer(obj, updateRate); if (is_in_two_player_adventure()) { - temp_a3 = &D_80126CDC->unk720; + temp_a3 = (unk80126CDC *) &gCurrentHud->unk720; temp_a3->unk6 = (get_settings()->racers[1].character + 0x38); func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) temp_a3); } @@ -803,28 +809,28 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { curRacer = &playerRacerObj->unk64->racer; stopwatchTimer = 0; - if (gAssetHudElements->unk0[20] == NULL) { + if (gAssetHudElements->entry[20] == NULL) { ttSWBody.objectID = gAssetHudElementIds[20] & 0xFFFF; ttSWBody.size = 8; ttSWBody.x = 0; ttSWBody.y = 0; ttSWBody.z = 0; - gAssetHudElements->unk0[20] = spawn_object(&ttSWBody, 0); - D_80126CDC->unk340 = -0x8000; - if (gAssetHudElements->unk0[20] != NULL) { - ((Object *) gAssetHudElements->unk0[20])->segment.animFrame = 0; + gAssetHudElements->entry[20] = spawn_object(&ttSWBody, 0); + gCurrentHud->unk340 = -0x8000; + if (gAssetHudElements->entry[20] != NULL) { + ((Object *) gAssetHudElements->entry[20])->segment.animFrame = 0; } } - if (gAssetHudElements->unk0[34] == 0) { + if (gAssetHudElements->entry[34] == 0) { ttSWArms.objectID = gAssetHudElementIds[34] & 0xFFFF; ttSWArms.size = 8; ttSWArms.x = 0; ttSWArms.y = 0; ttSWArms.z = 0; - gAssetHudElements->unk0[34] = spawn_object(&ttSWArms, 0); - D_80126CDC->unk440 = -0x8000; + gAssetHudElements->entry[34] = spawn_object(&ttSWArms, 0); + gCurrentHud->unk440 = -0x8000; } - ttSWBodyObject = gAssetHudElements->unk0[20]; + ttSWBodyObject = gAssetHudElements->entry[20]; if (ttSWBodyObject != NULL) { ttSWBodyObject->segment.object.animationID = gStopwatchFaceID; obj68 = (Object_68 *) ttSWBodyObject->unk68[0]; @@ -869,7 +875,7 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { } func_80061D30(ttSWBodyObject); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC** ) &D_80126CDC->unk21C[0x124]); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC** ) &gCurrentHud->unk21C[0x124]); for(i = 0; curRacer->lap >= i && i < 5; i++) { stopwatchTimer += curRacer->lap_times[i]; @@ -881,38 +887,38 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { if (normalise_time(36000) < stopwatchTimer) { stopwatchTimer = normalise_time(36000); } - D_80126CDC->unk444 = ((stopwatchTimer * 0x444) + 0x7FF8); + gCurrentHud->unk444 = ((stopwatchTimer * 0x444) + 0x7FF8); if (func_8000E0B0() <= 0) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &D_80126CDC->unk21C[0x224]); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &gCurrentHud->unk21C[0x224]); } - D_80126CDC->unk444 = ((((stopwatchTimer / 60) + 30) % 60) * 0x444); - D_80126CDC->unk450 = D_80126CDC->unk350 + 28.0f; + gCurrentHud->unk444 = ((((stopwatchTimer / 60) + 30) % 60) * 0x444); + gCurrentHud->unk450 = gCurrentHud->unk350 + 28.0f; if (func_8000E0B0() <= 0) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &D_80126CDC->unk21C[0x224]); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &gCurrentHud->unk21C[0x224]); } obj68->unk20 = 0; func_80068508(1); render_course_indicator_arrows(curRacer, updateRate); if (!curRacer->raceFinished) { - spB8 = D_80126CDC->unk2F0; + spB8 = gCurrentHud->unk2F0; for (i = 0; i < curRacer->countLap && i < gHudLevelHeader->laps; i++) { // FAKEMATCH get_timestamp_from_frames(curRacer->lap_times[i] & 0xFFFFFFFFFFFFFFFF, &spB4, &spB0, &spAC); D_800E2834 = D_800E27AC[i]; - func_800A7FBC(D_80126CDC->unk2EC, spB8, spB4, spB0, spAC, 1); + func_800A7FBC(gCurrentHud->unk2EC, spB8, spB4, spB0, spAC, 1); D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); spB8 += 12; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); - D_80126CDC->unk338 = i + 1; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &D_80126CDC->unk21C[0x104]); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &D_80126CDC->unk21C[0xE4]); - D_80126CDC->unk330 += 12.0f; - D_80126CDC->unk310 += 12.0f; + gCurrentHud->unk338 = i + 1; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &gCurrentHud->unk21C[0x104]); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, (unk80126CDC **) &gCurrentHud->unk21C[0xE4]); + gCurrentHud->unk330 += 12.0f; + gCurrentHud->unk310 += 12.0f; } if (1) {} // FAKEMATCH posX = ((i * 4) - i) * 4; - D_80126CDC->unk330 -= posX; - D_80126CDC->unk310 -= posX; + gCurrentHud->unk330 -= posX; + gCurrentHud->unk310 -= posX; if ((curRacer->boost_sound & BOOST_SOUND_UNK4) && (D_80126D4C <= 0)) { func_800A36CC(7, 3, 0, 4, 0); D_80126D4C = 60; @@ -938,8 +944,8 @@ void func_800A277C(s32 arg0, Object* playerRacerObj, s32 updateRate) { } } if ((curRacer->lap > 0) && (curRacer->lap < gHudLevelHeader->laps) && (curRacer->lap_times[curRacer->lap] < 20) && (gHUDVoiceSoundMask == 0) && (curRacer->vehicleID <= VEHICLE_PLANE)) { - D_80127184 = get_settings(); - if (curRacer->lap_times[curRacer->lap - 1] < D_80127184->flapTimesPtr[curRacer->vehicleID][get_current_map_id()]) { + gHudSettings = get_settings(); + if (curRacer->lap_times[curRacer->lap - 1] < gHudSettings->flapTimesPtr[curRacer->vehicleID][get_current_map_id()]) { recordTime = curRacer->lap_times[curRacer->lap - 1]; for (i = 0; i < curRacer->lap - 1; i++) { if (recordTime >= curRacer->lap_times[i]) { @@ -1030,7 +1036,7 @@ GLOBAL_ASM("asm/non_matchings/game_ui/func_800A277C.s") GLOBAL_ASM("asm/non_matchings/game_ui/func_800A36CC.s") void func_800A3870(void) { - D_80126CDC->unk4C4 = 0x6490; + gCurrentHud->unk4C4 = 0x6490; } /** @@ -1070,10 +1076,10 @@ void render_speedometer(Object *obj, UNUSED s32 updateRate) { vel = 25744.0f; } if (!is_game_paused()) { - if (vel < D_80126CDC->unk4C4) { - D_80126CDC->unk4C4 += ((vel - D_80126CDC->unk4C4) / 2); + if (vel < gCurrentHud->unk4C4) { + gCurrentHud->unk4C4 += ((vel - gCurrentHud->unk4C4) / 2); } else { - D_80126CDC->unk4C4 += ((vel - D_80126CDC->unk4C4) / 8); + gCurrentHud->unk4C4 += ((vel - gCurrentHud->unk4C4) / 8); } } if (gHudToggleSettings[gHUDNumPlayers] == 0) { @@ -1082,18 +1088,18 @@ void render_speedometer(Object *obj, UNUSED s32 updateRate) { } else { opacity = 255; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk5A0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk5A0); reset_render_settings(&gHUDCurrDisplayList); func_8007BF1C(TRUE); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, opacity); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk4C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk4C0); func_8007BF1C(FALSE); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk4E0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk500); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk520); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk540); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk560); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk580); + 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); } } } @@ -1118,7 +1124,7 @@ void render_race_start(s32 arg0, s32 updateRate) { if (arg0 > 0) { if (D_80126D34) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, (arg0 * 255) / 40); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk1A0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1A0); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); if (gRaceStartShowHudStep == 2) { play_sound_global(SOUND_VOICE_TT_GET_READY, &gHUDVoiceSoundMask); @@ -1142,12 +1148,12 @@ void render_race_start(s32 arg0, s32 updateRate) { } } } - } else if (D_80126CDC->unk18C > -200.0f) { + } else if (gCurrentHud->unk18C > -200.0f) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk180); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk180); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); - D_80126CDC->unk19A[D_80126D08] += updateRate; - if (D_80126CDC->unk19A[D_80126D08] >= 60) { + gCurrentHud->unk19A[gHudCurrentViewport] += updateRate; + if (gCurrentHud->unk19A[gHudCurrentViewport] >= 60) { if (gRaceStartShowHudStep == 4) { // Mute background music in 3/4 player. if (get_viewport_count() > TWO_PLAYERS) { @@ -1158,7 +1164,7 @@ void render_race_start(s32 arg0, s32 updateRate) { play_sound_global(SOUND_WHOOSH1, NULL); gRaceStartShowHudStep++; } - D_80126CDC->unk18C -= (updateRate * 8); + gCurrentHud->unk18C -= (updateRate * 8); } if (gRaceStartShowHudStep == 3) { play_sound_global(SOUND_VOICE_TT_GO, &gHUDVoiceSoundMask); @@ -1184,67 +1190,67 @@ void render_racer_bananas(Object_Racer *racer, s32 updateRate) { s32 temp_lo; u8 var_v1; if(racer->playerIndex == PLAYER_COMPUTER || (((gHUDNumPlayers < TWO_PLAYERS || D_800E2794[gHUDNumPlayers][racer->playerIndex] == PLAYER_THREE || gHudLevelHeader->race_type == RACETYPE_CHALLENGE_BANANAS || gHudLevelHeader->race_type == RACETYPE_CHALLENGE_BATTLE) && 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, &D_80126CDC->unk240); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk240); bananas = racer->bananas; - var_v1 = D_80126CDC->unkF8; - if ((D_80126CDC->unkFA == 0) && (D_80126CDC->unkFB != racer->bananas)) { - D_80126CDC->unkFA = 2; - D_80126CDC->unkFB = racer->bananas; - } else if (D_80126CDC->unkFA) { - D_80126CDC->unk388 = 2.0f; + 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 += updateRate * 13; - if (var_v1 < (D_80126CDC->unkF8 & 0xFF)) { - D_80126CDC->unkFA--; - if (D_80126CDC->unkFA == 0) { - D_80126CDC->unk39B = 1; - D_80126CDC->unk39A = 6; + if (var_v1 < (gCurrentHud->unkF8 & 0xFF)) { + gCurrentHud->unkFA--; + if (gCurrentHud->unkFA == 0) { + gCurrentHud->unk39B = 1; + gCurrentHud->unk39A = 6; var_v1 = 0; - D_80126CDC->unk398 = 1; + gCurrentHud->unk398 = 1; } } } if (var_v1 == 0) { func_8007BF1C(TRUE); set_viewport_tv_type(TV_TYPE_NTSC); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk360); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk360); set_viewport_tv_type(TV_TYPE_PAL); func_8007BF1C(FALSE); - D_80126CDC->unkF8 = var_v1; - if (D_80126CDC->unk39B) { - D_80126CDC->unk39A -= updateRate; - if (D_80126CDC->unk39A < 0) { - D_80126CDC->unk39A = 6; - if (D_80126CDC->unk398 == 6) { - D_80126CDC->unk398 = 0; - D_80126CDC->unk39B--; + 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--; } else { - D_80126CDC->unk398++; + gCurrentHud->unk398++; } } set_viewport_tv_type(TV_TYPE_NTSC); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk380); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk380); set_viewport_tv_type(TV_TYPE_PAL); } } else { - D_80126CDC->unkF8 = var_v1 + 128; + gCurrentHud->unkF8 = var_v1 + 128; func_80068508(0); func_8007BF1C(TRUE); set_viewport_tv_type(TV_TYPE_NTSC); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unkE0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unkE0); func_8007BF1C(FALSE); set_viewport_tv_type(TV_TYPE_PAL); func_80068508(1); - D_80126CDC->unkF8 -= 128; + gCurrentHud->unkF8 -= 128; } temp_lo = bananas / 10; if (temp_lo) { - D_80126CDC->unk118 = temp_lo; - D_80126CDC->unk138 = bananas % 10; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk120); + gCurrentHud->unk118 = temp_lo; + gCurrentHud->unk138 = bananas % 10; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk120); } else { - D_80126CDC->unk118 = bananas % 10; + gCurrentHud->unk118 = bananas % 10; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk100); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk100); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } @@ -1257,11 +1263,11 @@ void render_treasure_hud(Object_Racer *racer) { s32 i; s32 sp48; - sp48 = D_80126CDC->unk410; + sp48 = gCurrentHud->unk410; if (gNumActivePlayers < 3 || (gNumActivePlayers == 3 && racer->playerIndex == PLAYER_COMPUTER)) { - D_80126CDC->unk646 = racer->characterId + 56; + gCurrentHud->unk646 = racer->characterId + 56; D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk640); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk640); D_80126CD5 = FALSE; } for (i = 0; i < 10; i++) { @@ -1269,11 +1275,11 @@ void render_treasure_hud(Object_Racer *racer) { D_800E2834 = COLOUR_RGBA32(128, 128, 128, 128); } D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk400); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk400); D_80126CD5 = FALSE; - D_80126CDC->unk410 -= 3.0f; + gCurrentHud->unk410 -= 3.0f; } - D_80126CDC->unk410 = sp48; + gCurrentHud->unk410 = sp48; D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); D_80126CD5 = 0; } @@ -1290,9 +1296,9 @@ void render_race_finish_position(Object_64 *obj, s32 updateRate) { unk800A497C *temp_s0; s8 drawPosition; - temp_a3 = (unk800A497C *) &D_80126CDC->unk700; - temp_s0 = (unk800A497C *) &D_80126CDC->unk740; - //temp_s0 = &D_80126CDC->unk740; + temp_a3 = (unk800A497C *) &gCurrentHud->unk700; + temp_s0 = (unk800A497C *) &gCurrentHud->unk740; + //temp_s0 = &gCurrentHud->unk740; drawPosition = FALSE; switch (temp_a3->unk1A) { case 0: @@ -1364,165 +1370,165 @@ void render_lap_count(Object_Racer *racer, s32 updateRate) { if (racer->raceFinished == FALSE && (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) { - D_80126CDC->unk21A += updateRate; - if (D_80126CDC->unk21A > 6) { - D_80126CDC->unk218++; - D_80126CDC->unk21A -= 6; - if (D_80126CDC->unk218 > 4) { - D_80126CDC->unk218 = 0; + gCurrentHud->unk21A += updateRate; + if (gCurrentHud->unk21A > 6) { + gCurrentHud->unk218++; + gCurrentHud->unk21A -= 6; + if (gCurrentHud->unk218 > 4) { + gCurrentHud->unk218 = 0; } } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk200); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk200); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk60); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk60); if (racer->countLap >= gHudLevelHeader->laps - 1) { - D_80126CDC->unk98 = gHudLevelHeader->laps; + gCurrentHud->unk98 = gHudLevelHeader->laps; } else { - D_80126CDC->unk98 = racer->countLap + 1; + gCurrentHud->unk98 = racer->countLap + 1; } - D_80126CDC->unkD8 = gHudLevelHeader->laps; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk80); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unkA0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unkC0); + 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); } if (gHUDNumPlayers == TWO_PLAYERS) { func_8007BF1C(TRUE); } if (is_game_paused() == FALSE) { - if (racer->lap_times[racer->lap] < 30 && D_80126CDC->unk3DA == 0 && racer->raceFinished == FALSE) { + if (racer->lap_times[racer->lap] < 30 && gCurrentHud->unk3DA == 0 && racer->raceFinished == FALSE) { if ((racer->lap == 1) && gHudLevelHeader->laps >= 3) { - D_80126CDC->unk3DA = 2; - D_80126CDC->unk3DB = 1; - D_80126CDC->unk3DD = 0; + gCurrentHud->unk3DA = 2; + gCurrentHud->unk3DB = 1; + gCurrentHud->unk3DD = 0; play_sound_global(SOUND_WHOOSH1, NULL); switch (gHUDNumPlayers) { case ONE_PLAYER: - D_80126CDC->unk3DC = -21; - D_80126CDC->unk3FC = 32; - D_80126CDC->unk3CC = -200.0f; - D_80126CDC->unk3EC = 211.0f; + gCurrentHud->unk3DC = -21; + gCurrentHud->unk3FC = 32; + gCurrentHud->unk3CC = -200.0f; + gCurrentHud->unk3EC = 211.0f; break; case TWO_PLAYERS: - D_80126CDC->unk3DC = -16; - D_80126CDC->unk3FC = 27; - D_80126CDC->unk3CC = -200.0f; - D_80126CDC->unk3EC = 211.0f; + gCurrentHud->unk3DC = -16; + gCurrentHud->unk3FC = 27; + gCurrentHud->unk3CC = -200.0f; + gCurrentHud->unk3EC = 211.0f; break; default: if (racer->playerIndex != PLAYER_ONE && racer->playerIndex != PLAYER_THREE) { - D_80126CDC->unk3DC = 60; - D_80126CDC->unk3FC = 91; - D_80126CDC->unk3CC = -70.0f; - D_80126CDC->unk3EC = 221.0f; + gCurrentHud->unk3DC = 60; + gCurrentHud->unk3FC = 91; + gCurrentHud->unk3CC = -70.0f; + gCurrentHud->unk3EC = 221.0f; } else { - D_80126CDC->unk3DC = -90; - D_80126CDC->unk3FC = -59; - D_80126CDC->unk3CC = -220.0f; - D_80126CDC->unk3EC = 71.0f; + gCurrentHud->unk3DC = -90; + gCurrentHud->unk3FC = -59; + gCurrentHud->unk3CC = -220.0f; + gCurrentHud->unk3EC = 71.0f; } break; } } else if (gHudLevelHeader->laps == (0, racer->lap + 1) && racer->lap != 0) { - D_80126CDC->unk3DA = 3; - D_80126CDC->unk3DB = -1; - D_80126CDC->unk3DD = 0; + gCurrentHud->unk3DA = 3; + gCurrentHud->unk3DB = -1; + gCurrentHud->unk3DD = 0; play_sound_global(SOUND_WHOOSH1, NULL); switch (gHUDNumPlayers) { case ONE_PLAYER: - D_80126CDC->unk3DC = 51; - D_80126CDC->unk3BC = -41; - D_80126CDC->unk3CC = 210.0f; - D_80126CDC->unk3AC = -200.0f; + gCurrentHud->unk3DC = 51; + gCurrentHud->unk3BC = -41; + gCurrentHud->unk3CC = 210.0f; + gCurrentHud->unk3AC = -200.0f; break; case TWO_PLAYERS: - D_80126CDC->unk3DC = 41; - D_80126CDC->unk3BC = -31; - D_80126CDC->unk3CC = 210.0f; - D_80126CDC->unk3AC = -200.0f; + gCurrentHud->unk3DC = 41; + gCurrentHud->unk3BC = -31; + gCurrentHud->unk3CC = 210.0f; + gCurrentHud->unk3AC = -200.0f; break; default: if (racer->playerIndex != PLAYER_ONE && racer->playerIndex != PLAYER_THREE) { - D_80126CDC->unk3DC = 100; - D_80126CDC->unk3BC = 50; - D_80126CDC->unk3CC = 100.0f; - D_80126CDC->unk3AC = -50.0f; + gCurrentHud->unk3DC = 100; + gCurrentHud->unk3BC = 50; + gCurrentHud->unk3CC = 100.0f; + gCurrentHud->unk3AC = -50.0f; } else { - D_80126CDC->unk3DC = -50; - D_80126CDC->unk3BC = -100; - D_80126CDC->unk3CC = 50.0f; - D_80126CDC->unk3AC = -200.0f; + gCurrentHud->unk3DC = -50; + gCurrentHud->unk3BC = -100; + gCurrentHud->unk3CC = 50.0f; + gCurrentHud->unk3AC = -200.0f; } break; } } } - if (D_80126CDC->unk3DA != 0) { - if (D_80126CDC->unk3DA == 2) { - if (D_80126CDC->unk3DB == 1) { - if (D_80126CDC->unk3CC < D_80126CDC->unk3DC - (updateRate * 13)) { - D_80126CDC->unk3CC = D_80126CDC->unk3CC + (updateRate * 13); + 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); } else { - D_80126CDC->unk3CC = D_80126CDC->unk3DC; + gCurrentHud->unk3CC = gCurrentHud->unk3DC; } - if (D_80126CDC->unk3EC > D_80126CDC->unk3FC + (updateRate * 13)) { - D_80126CDC->unk3EC = D_80126CDC->unk3EC - (updateRate * 13); + if (gCurrentHud->unk3EC > gCurrentHud->unk3FC + (updateRate * 13)) { + gCurrentHud->unk3EC = gCurrentHud->unk3EC - (updateRate * 13); } else { - D_80126CDC->unk3EC = D_80126CDC->unk3FC; + gCurrentHud->unk3EC = gCurrentHud->unk3FC; } if (racer->lap_times[racer->lap] >= 60) { - D_80126CDC->unk3DB = -1; + gCurrentHud->unk3DB = -1; play_sound_global(SOUND_WHOOSH1, NULL); } - if (D_80126CDC->unk3CC == ((0, D_80126CDC))->unk3DC && D_80126CDC->unk3EC == ((0, D_80126CDC))->unk3FC && D_80126CDC->unk3DD == 0) { + if (gCurrentHud->unk3CC == ((0, gCurrentHud))->unk3DC && gCurrentHud->unk3EC == ((0, gCurrentHud))->unk3FC && gCurrentHud->unk3DD == 0) { if (gHUDVoiceSoundMask == NULL) { play_sound_global(SOUND_VOICE_TT_LAP2, &gHUDVoiceSoundMask); } - D_80126CDC->unk3DD = 1; + gCurrentHud->unk3DD = 1; } - } else if (D_80126CDC->unk3DB == -1) { - D_80126CDC->unk3CC = D_80126CDC->unk3CC - (updateRate * 13); - D_80126CDC->unk3EC = D_80126CDC->unk3EC + (updateRate * 13); - if (D_80126CDC->unk3CC < -200.0f) { - D_80126CDC->unk3DA = 0; + } 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; } } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk3E0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk3C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3E0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3C0); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); - } else if (D_80126CDC->unk3DA == 3) { - if (D_80126CDC->unk3DB == -1) { - if (D_80126CDC->unk3CC > D_80126CDC->unk3DC + (updateRate * 13)) { - D_80126CDC->unk3CC = D_80126CDC->unk3CC - (updateRate * 13); + } else if (gCurrentHud->unk3DA == 3) { + if (gCurrentHud->unk3DB == -1) { + if (gCurrentHud->unk3CC > gCurrentHud->unk3DC + (updateRate * 13)) { + gCurrentHud->unk3CC = gCurrentHud->unk3CC - (updateRate * 13); } else { - D_80126CDC->unk3CC = D_80126CDC->unk3DC; + gCurrentHud->unk3CC = gCurrentHud->unk3DC; } - if (D_80126CDC->unk3AC < D_80126CDC->unk3BC - (updateRate * 13)) { - D_80126CDC->unk3AC = D_80126CDC->unk3AC + (updateRate * 13); + if (gCurrentHud->unk3AC < gCurrentHud->unk3BC - (updateRate * 13)) { + gCurrentHud->unk3AC = gCurrentHud->unk3AC + (updateRate * 13); } else { - D_80126CDC->unk3AC = D_80126CDC->unk3BC; + gCurrentHud->unk3AC = gCurrentHud->unk3BC; } if (racer->lap_times[racer->lap] >= 60) { - D_80126CDC->unk3DB = 1; + gCurrentHud->unk3DB = 1; play_sound_global(SOUND_WHOOSH1, NULL); } - if (D_80126CDC->unk3CC == ((0, D_80126CDC))->unk3DC && D_80126CDC->unk3AC == ((0, D_80126CDC))->unk3BC && D_80126CDC->unk3DD == 0) { + if (gCurrentHud->unk3CC == ((0, gCurrentHud))->unk3DC && gCurrentHud->unk3AC == ((0, gCurrentHud))->unk3BC && gCurrentHud->unk3DD == 0) { if (gHUDVoiceSoundMask == NULL) { play_sound_global(SOUND_VOICE_TT_FINAL_LAP, &gHUDVoiceSoundMask); } - D_80126CDC->unk3DD = 1; + gCurrentHud->unk3DD = 1; } - } else if (D_80126CDC->unk3DB == 1) { - D_80126CDC->unk3CC = D_80126CDC->unk3CC + (updateRate * 13); - D_80126CDC->unk3AC = D_80126CDC->unk3AC - (updateRate * 13); - if (D_80126CDC->unk3CC > 200.0f) { - D_80126CDC->unk3DA = 0; + } 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; } } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk3A0); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk3C0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3A0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk3C0); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } @@ -1541,7 +1547,7 @@ void render_wrong_way_text(Object_Racer *obj, s32 updateRate) { if (gHUDNumPlayers == TWO_PLAYERS) { func_8007BF1C(TRUE); } - if (obj->unk1FC > 120 && (gHUDNumPlayers || D_80126CDC->unk46C == D_80126CDC->unk47A[2]) && !is_game_paused()) { + if (obj->unk1FC > 120 && (gHUDNumPlayers || gCurrentHud->unk46C == gCurrentHud->unk47A[2]) && !is_game_paused()) { if ((gWrongWayNagPrefix || gWrongWayNagTimer == 0) && gHUDVoiceSoundMask == NULL) { // 20% chance that T.T decides not to precede his nagging with "No no no!" if (gWrongWayNagPrefix || (get_random_number_from_range(1, 10) >= 8)) { @@ -1558,59 +1564,59 @@ void render_wrong_way_text(Object_Racer *obj, s32 updateRate) { gWrongWayNagTimer = 0; } } - if (D_80126CDC->unk47A[0]) { - if (D_80126CDC->unk47A[0] == 1) { - if (D_80126CDC->unk47A[1] == 1) { + if (gCurrentHud->unk47A[0]) { + if (gCurrentHud->unk47A[0] == 1) { + if (gCurrentHud->unk47A[1] == 1) { textMoveSpeed = updateRate * 13; - D_80126CDC->unk46C += textMoveSpeed; - textPosTarget = D_80126CDC->unk47A[2]; - if (D_80126CDC->unk46C > textPosTarget) { - D_80126CDC->unk46C = textPosTarget; + gCurrentHud->unk46C += textMoveSpeed; + textPosTarget = gCurrentHud->unk47A[2]; + if (gCurrentHud->unk46C > textPosTarget) { + gCurrentHud->unk46C = textPosTarget; } - D_80126CDC->unk48C -= textMoveSpeed; - textPosTarget = D_80126CDC->unk49C; - if (D_80126CDC->unk48C < textPosTarget) { - D_80126CDC->unk48C = textPosTarget; + gCurrentHud->unk48C -= textMoveSpeed; + textPosTarget = gCurrentHud->unk49C; + if (gCurrentHud->unk48C < textPosTarget) { + gCurrentHud->unk48C = textPosTarget; } if (obj->unk1FC <= 90) { - D_80126CDC->unk47A[1] = -1; + gCurrentHud->unk47A[1] = -1; play_sound_global(SOUND_WHOOSH1, NULL); } - } else if (D_80126CDC->unk47A[1] == -1) { + } else if (gCurrentHud->unk47A[1] == -1) { textMoveSpeed = updateRate * 13; - D_80126CDC->unk46C -= textMoveSpeed; - D_80126CDC->unk48C += textMoveSpeed; - if (D_80126CDC->unk46C < -200.0f) { - D_80126CDC->unk47A[0] = 0; + gCurrentHud->unk46C -= textMoveSpeed; + gCurrentHud->unk48C += textMoveSpeed; + if (gCurrentHud->unk46C < -200.0f) { + gCurrentHud->unk47A[0] = 0; } } if (!is_game_paused()) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk460); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk480); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk460); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk480); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } } else if (obj->unk1FC > 120) { - D_80126CDC->unk47A[0] = 1; - D_80126CDC->unk47A[1] = 1; - D_80126CDC->unk47A[2] = -31; - D_80126CDC->unk49C = 52; - D_80126CDC->unk47A[3] = 0; + gCurrentHud->unk47A[0] = 1; + gCurrentHud->unk47A[1] = 1; + gCurrentHud->unk47A[2] = -31; + gCurrentHud->unk49C = 52; + gCurrentHud->unk47A[3] = 0; if (gHUDNumPlayers == TWO_PLAYERS) { - D_80126CDC->unk47A[2] = -21; - D_80126CDC->unk49C = 42; + gCurrentHud->unk47A[2] = -21; + gCurrentHud->unk49C = 42; } else if (gHUDNumPlayers > TWO_PLAYERS) { if (obj->playerIndex == PLAYER_ONE || obj->playerIndex == PLAYER_THREE) { - D_80126CDC->unk47A[2] = -100; - D_80126CDC->unk49C = -55; + gCurrentHud->unk47A[2] = -100; + gCurrentHud->unk49C = -55; } else { - D_80126CDC->unk47A[2] = 59; - D_80126CDC->unk49C = 104; + gCurrentHud->unk47A[2] = 59; + gCurrentHud->unk49C = 104; } } - D_80126CDC->unk48C = D_80126CDC->unk49C + 200; - D_80126CDC->unk46C = D_80126CDC->unk49C - 200; + gCurrentHud->unk48C = gCurrentHud->unk49C + 200; + gCurrentHud->unk46C = gCurrentHud->unk49C - 200; play_sound_global(SOUND_WHOOSH1, NULL); } func_8007BF1C(FALSE); @@ -1674,68 +1680,68 @@ void render_weapon_hud(Object *obj, s32 updateRate) { if (racerObj->racer.raceFinished == FALSE) { set_viewport_tv_type(TV_TYPE_NTSC); temp_a0 = (racerObj->racer.balloon_type * 3) + (racerObj->racer.balloon_level); - if (D_80126CDC->unk5D != racerObj->racer.balloon_level) { + if (gCurrentHud->unk5D != racerObj->racer.balloon_level) { if (racerObj->racer.balloon_level == 0) { - D_80126CDC->unk5C = 120; + gCurrentHud->unk5C = 120; } else if (gNumActivePlayers == 1) { - D_80126CDC->unk5C = 0; + gCurrentHud->unk5C = 0; } else { - D_80126CDC->unk5C = 120; + gCurrentHud->unk5C = 120; } - D_80126CDC->unk5D = racerObj->racer.balloon_level; + gCurrentHud->unk5D = racerObj->racer.balloon_level; } if (racerObj->racer.balloon_quantity > 0) { - if (D_80126CDC->unk5B < 16 && racerObj->racer.unk170 == 0) { - D_80126CDC->unk44 = D_80126CDC->unk5B << 12; - D_80126CDC->unk48 = (D_80126CDC->unk5B * 0.04687) + 0.25; + if (gCurrentHud->unk5B < 16 && racerObj->racer.unk170 == 0) { + gCurrentHud->unk44 = gCurrentHud->unk5B << 12; + gCurrentHud->unk48 = (gCurrentHud->unk5B * 0.04687) + 0.25; } else { - D_80126CDC->unk44 = 0; - D_80126CDC->unk48 = 1.0f; + gCurrentHud->unk44 = 0; + gCurrentHud->unk48 = 1.0f; } - D_80126CDC->unk58 = temp_a0; - D_80126CDC->unk5B += updateRate; - if (D_80126CDC->unk5B > 16) { - D_80126CDC->unk5B = 16; - D_80126CDC->unk5C += updateRate; - if (D_80126CDC->unk5C > 120) { - D_80126CDC->unk5C = 120; + gCurrentHud->unk58 = temp_a0; + gCurrentHud->unk5B += updateRate; + if (gCurrentHud->unk5B > 16) { + gCurrentHud->unk5B = 16; + gCurrentHud->unk5C += updateRate; + if (gCurrentHud->unk5C > 120) { + gCurrentHud->unk5C = 120; } else if (gHUDNumPlayers == ONE_PLAYER) { - D_80126CDC->unk48 += 0.18 * sins_f(((f32) D_80126CDC->unk5C * 682.6583 * 4.0)); + gCurrentHud->unk48 += 0.18 * sins_f(((f32) gCurrentHud->unk5C * 682.6583 * 4.0)); } } if (gHUDNumPlayers > ONE_PLAYER) { - D_80126CDC->unk48 *= 0.75; + gCurrentHud->unk48 *= 0.75; } - if (D_80126CDC->unk48 != 1.0) { + if (gCurrentHud->unk48 != 1.0) { func_8007BF1C(TRUE); } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk40); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk40); func_8007BF1C(FALSE); if (racerObj->racer.balloon_quantity > 3) { - D_80126CDC->unk63A = -128; + gCurrentHud->unk63A = -128; } if (racerObj->racer.balloon_quantity < 3) { - D_80126CDC->unk63A -= updateRate; + gCurrentHud->unk63A -= updateRate; } - if (racerObj->racer.balloon_quantity >= 3 || ((((D_80126CDC->unk63A + 128) % 32) < 20) && racerObj->racer.balloon_quantity != 1)) { + if (racerObj->racer.balloon_quantity >= 3 || ((((gCurrentHud->unk63A + 128) % 32) < 20) && racerObj->racer.balloon_quantity != 1)) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 160); - D_80126CDC->unk638 = racerObj->racer.balloon_quantity - 1; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk620); + gCurrentHud->unk638 = racerObj->racer.balloon_quantity - 1; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk620); gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } } else { - if (D_80126CDC->unk5B > 0) { - D_80126CDC->unk44 = D_80126CDC->unk5B << 12; - D_80126CDC->unk48 = (D_80126CDC->unk5B * 0.04687) + 0.25; - D_80126CDC->unk5B -= updateRate; - D_80126CDC->unk58 = temp_a0; - if (D_80126CDC->unk5B < 0) { - D_80126CDC->unk5B = 0; + 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 (gHUDNumPlayers != ONE_PLAYER) { - D_80126CDC->unk48 /= 2; + gCurrentHud->unk48 /= 2; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk40); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk40); } } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); @@ -1760,7 +1766,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 = D_80126CDC->unk15A + 127; + timerHideCounter = gCurrentHud->unk15A + 127; if (racer->lap > 0 && racer->lap_times[racer->lap] < 180 && racer->lap < gHudLevelHeader->laps) { stopwatchTimer = racer->lap_times[racer->lap - 1]; countingDown = TRUE; @@ -1773,11 +1779,11 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { stopwatchTimer += racer->lap_times[i]; } countingDown = stopwatchTimer == 0 || racer->raceFinished || is_game_paused(); - D_80126CDC->unk15A = -127; + gCurrentHud->unk15A = -127; timerHideCounter = 0; } if (gHUDNumPlayers == ONE_PLAYER) { - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk140); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk140); } if (normalise_time(36000) < stopwatchTimer) { stopwatchTimer = normalise_time(36000); @@ -1789,7 +1795,7 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { } else { timerHideCounter = 0; } - D_80126CDC->unk15A = timerHideCounter - 127; + gCurrentHud->unk15A = timerHideCounter - 127; if ((timerHideCounter % 30) > 20) { gHideRaceTimer = TRUE; return; @@ -1802,17 +1808,17 @@ void render_race_time(Object_Racer *racer, s32 updateRate) { } } } else { - hundredths = D_80126CDC->unk15B + ((hundredths / 10) * 10); - D_80126CDC->unk15B = D_80126CDC->unk15B + 1; - if (D_80126CDC->unk15B >= 10) { - D_80126CDC->unk15B = 0; + hundredths = gCurrentHud->unk15B + ((hundredths / 10) * 10); + gCurrentHud->unk15B = gCurrentHud->unk15B + 1; + if (gCurrentHud->unk15B >= 10) { + gCurrentHud->unk15B = 0; } } if (gNumActivePlayers == 1) { - func_800A7FBC(D_80126CDC->unk16C, D_80126CDC->unk170, minutes, seconds, hundredths, 0); + func_800A7FBC(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 0); } else { - func_800A7FBC(D_80126CDC->unk16C, D_80126CDC->unk170, minutes, seconds, hundredths, 1); + func_800A7FBC(gCurrentHud->unk16C, gCurrentHud->unk170, minutes, seconds, hundredths, 1); } gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 255, 255, 255); } @@ -1896,10 +1902,10 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u func_800A0BD4(updateRate); - D_80126CD8[1] = 0; - D_80126CD8[23] = 0; - D_80126CD8[8] = 0; - D_80126CD8[17] = 0; + gAssetHudElementStaleCounter[HUD_ELEMENT_UNK_01] = 0; + gAssetHudElementStaleCounter[HUD_ELEMENT_UNK_17] = 0; + gAssetHudElementStaleCounter[HUD_ELEMENT_UNK_08] = 0; + gAssetHudElementStaleCounter[HUD_ELEMENT_UNK_11] = 0; D_80127180 = 0; if (D_80126CD3 & 2) { @@ -1909,18 +1915,18 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } for (i = 0; i < gAssetHudElementIdsCount; i++) { - if (gAssetHudElements->unk0[i] && i != 40) { - if (++D_80126CD8[i] > 60) { + if (gAssetHudElements->entry[i] && i != 40) { + if (++gAssetHudElementStaleCounter[i] > 60) { if ((gAssetHudElementIds[i] & (0x4000 | 0x8000)) == (0x4000 | 0x8000)) { - free_texture((TextureHeader *)gAssetHudElements->unk0[i]); + free_texture((TextureHeader *) gAssetHudElements->entry[i]); } else if (gAssetHudElementIds[i] & 0x8000) { - free_sprite((Sprite *) gAssetHudElements->unk0[i]); + free_sprite((Sprite *) gAssetHudElements->entry[i]); } else if (gAssetHudElementIds[i] & 0x4000) { - gParticlePtrList_addObject((Object *) gAssetHudElements->unk0[i]); + gParticlePtrList_addObject((Object *) gAssetHudElements->entry[i]); } else { - func_8005FF40((ObjectModel **) gAssetHudElements->unk0[i]); + func_8005FF40((ObjectModel **) gAssetHudElements->entry[i]); } - gAssetHudElements->unk0[i] = 0; + gAssetHudElements->entry[i] = 0; } } } @@ -1943,26 +1949,26 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } } if (tempVar4 != NULL) { - temp_s0 = D_80126CDC->unk64C; - temp_s1 = D_80126CDC->unk650; - spF4 = D_80126CDC->unk66C; - spF0 = D_80126CDC->unk670; - D_80126CDC->unk64C = 225.0f; - D_80126CDC->unk66C = 221.0f; - D_80126CDC->unk670 = 197.0f; - D_80126CDC->unk650 = 165.0f; + 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; if (osTvType == TV_TYPE_PAL) { - D_80126CDC->unk64C -= 4.0f; - D_80126CDC->unk66C -= 4.0f; - D_80126CDC->unk650 *= 1.1; - D_80126CDC->unk670 *= 1.1; + gCurrentHud->unk64C -= 4.0f; + gCurrentHud->unk66C -= 4.0f; + gCurrentHud->unk650 *= 1.1; + gCurrentHud->unk670 *= 1.1; } func_800A19A4(tempVar4, updateRate); D_800E2834 = COLOUR_RGBA32(255, 255, 255, 254); - D_80126CDC->unk64C = temp_s0; - D_80126CDC->unk650 = temp_s1; - D_80126CDC->unk66C = spF4; - D_80126CDC->unk670 = spF0; + gCurrentHud->unk64C = temp_s0; + gCurrentHud->unk650 = temp_s1; + gCurrentHud->unk66C = spF4; + gCurrentHud->unk670 = spF0; } } } @@ -1986,63 +1992,63 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } } if (curRacerObj != NULL) { - D_80126CDC = D_80126CE0[3]; - spE4 = D_80126CDC->unk64C; - spE0 = D_80126CDC->unk650; + gCurrentHud = gPlayerHud[PLAYER_FOUR]; + spE4 = gCurrentHud->unk64C; + spE0 = gCurrentHud->unk650; func_8007BF1C(FALSE); set_ortho_matrix_view(&gHUDCurrDisplayList, &gHUDCurrMatrix); func_80068508(TRUE); - D_80126CDC->unk64C = 225.0f; + gCurrentHud->unk64C = 225.0f; if (osTvType == TV_TYPE_PAL) { - D_80126CDC->unk650 = 181.5f; + gCurrentHud->unk650 = 181.5f; } else { - D_80126CDC->unk650 = 165.0f; + gCurrentHud->unk650 = 165.0f; } if (osTvType == TV_TYPE_PAL) { - var_a0_5 = (66.0f - D_80126CDC->unk36C) - 4.0f; - temp = -114.0f - D_80126CDC->unk370; + var_a0_5 = (66.0f - gCurrentHud->unk36C) - 4.0f; + temp = -114.0f - gCurrentHud->unk370; } else { - var_a0_5 = 66.0f - D_80126CDC->unk36C; - temp = -100.0f - D_80126CDC->unk370; + var_a0_5 = 66.0f - gCurrentHud->unk36C; + temp = -100.0f - gCurrentHud->unk370; } - D_80126CDC->unk36C += var_a0_5; - D_80126CDC->unk370 += temp; - D_80126CDC->unkEC += var_a0_5; - D_80126CDC->unkF0 += temp; - D_80126CDC->unk38C += var_a0_5; - D_80126CDC->unk390 += temp; - D_80126CDC->unk10C += var_a0_5; - D_80126CDC->unk110 -= temp + 1; - D_80126CDC->unk12C += var_a0_5; - D_80126CDC->unk130 -= temp + 1; - D_80126CDC->unk24C += var_a0_5; - D_80126CDC->unk250 -= temp; - D_80126CDC->unk646 = curRacerObj->characterId + 56; + 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; if (osTvType == TV_TYPE_PAL) { - D_80126CDC->unk64C -= 4.0f; - D_80126CDC->unk66C -= 4.0f; + gCurrentHud->unk64C -= 4.0f; + gCurrentHud->unk66C -= 4.0f; } D_80126CD5 = TRUE; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk640); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk640); D_80126CD5 = FALSE; - if (D_80126CDC->unkFB == 0 && curRacerObj->bananas == 10) { - D_80126CDC->unkFB = curRacerObj->bananas; + if (gCurrentHud->unkFB == 0 && curRacerObj->bananas == 10) { + gCurrentHud->unkFB = curRacerObj->bananas; } render_racer_bananas(curRacerObj, updateRate); - D_80126CDC->unk36C -= var_a0_5; - D_80126CDC->unk370 -= temp; - D_80126CDC->unkEC -= var_a0_5; - D_80126CDC->unkF0 -= temp; - D_80126CDC->unk38C -= var_a0_5; - D_80126CDC->unk390 -= temp; - D_80126CDC->unk10C -= var_a0_5; - D_80126CDC->unk110 += temp + 1; - D_80126CDC->unk12C -= var_a0_5; - D_80126CDC->unk130 += temp + 1; - D_80126CDC->unk24C -= var_a0_5; - D_80126CDC->unk250 += temp; - D_80126CDC->unk64C = spE4; - D_80126CDC->unk650 = spE0; + 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; func_8007BF1C(TRUE); reset_render_settings(&gHUDCurrDisplayList); func_80068508(FALSE); @@ -2051,26 +2057,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 = D_80126CDC->unk64C; - temp_s1_2 = D_80126CDC->unk650; - temp_s3 = D_80126CDC->unk40C; - spBC = D_80126CDC->unk410; + temp_s0_2 = gCurrentHud->unk64C; + temp_s1_2 = gCurrentHud->unk650; + temp_s3 = gCurrentHud->unk40C; + spBC = gCurrentHud->unk410; 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) { - D_80126CDC->unk650 += 66.0; - D_80126CDC->unk410 += 66.0; + gCurrentHud->unk650 += 66.0; + gCurrentHud->unk410 += 66.0; } else { - D_80126CDC->unk650 += 55.0f; - D_80126CDC->unk410 += 55.0f; + gCurrentHud->unk650 += 55.0f; + gCurrentHud->unk410 += 55.0f; } } - D_80126CDC->unk64C = temp_s0_2; - D_80126CDC->unk650 = temp_s1_2; - D_80126CDC->unk40C = temp_s3; - D_80126CDC->unk410 = spBC; + gCurrentHud->unk64C = temp_s0_2; + gCurrentHud->unk650 = temp_s1_2; + gCurrentHud->unk40C = temp_s3; + gCurrentHud->unk410 = spBC; } else if (gNumActivePlayers == 3) { tempVar4 = NULL; for(tempVar2 = 0; tempVar2 < objectCount; tempVar2++) { @@ -2079,27 +2085,27 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u } } if (tempVar4 != NULL) { - temp_s0_3 = D_80126CDC->unk64C; - temp_s1_3 = D_80126CDC->unk650; - temp_f16 = D_80126CDC->unk40C; - temp_f6 = D_80126CDC->unk410; - D_80126CDC->unk64C = 225.0f; - D_80126CDC->unk650 = 165.0f; - D_80126CDC->unk40C = 209.0f; - D_80126CDC->unk410 = 193.0f; + 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; if (osTvType == TV_TYPE_PAL) { - D_80126CDC->unk64C -= 4.0f; - D_80126CDC->unk40C -= 4.0f; - D_80126CDC->unk650 *= 1.1; - D_80126CDC->unk410 *= 1.1; - D_80126CDC->unk650 = (s32) D_80126CDC->unk650; - D_80126CDC->unk410 = (s32) D_80126CDC->unk410; + 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; } render_treasure_hud(tempVar4); - D_80126CDC->unk64C = temp_s0_3; - D_80126CDC->unk650 = temp_s1_3; - D_80126CDC->unk40C = temp_f16; - D_80126CDC->unk410 = temp_f6; + gCurrentHud->unk64C = temp_s0_3; + gCurrentHud->unk650 = temp_s1_3; + gCurrentHud->unk40C = temp_f16; + gCurrentHud->unk410 = temp_f6; } } } @@ -2197,34 +2203,34 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u temp_v0_8 = func_8001B2E0(); if (temp_v0_8 != NULL) { func_800AA3EC(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); - D_80126CDC->unk1E6 = 14; - D_80126CDC->unk1E4 = 0; - D_80126CDC->unk1E8 = 1.0f; + gCurrentHud->unk1E6 = 14; + gCurrentHud->unk1E4 = 0; + gCurrentHud->unk1E8 = 1.0f; tempVar1 = (opacity * (f32) temp_v0_8->segment.object.opacity) * 0.0078125; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 60, 60, 60, tempVar1); - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk1E0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); } } temp_v0_8 = func_8001B640(); if (temp_v0_8 != NULL) { func_800AA3EC(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); - D_80126CDC->unk1E4 = 0; + gCurrentHud->unk1E4 = 0; tempVar1 = (opacity * (f32) temp_v0_8->segment.object.opacity) * 0.0078125; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, gHudMinimapColours[8].red, gHudMinimapColours[8].green, gHudMinimapColours[8].blue, tempVar1); - D_80126CDC->unk1E8 = 1.0f; - D_80126CDC->unk1E6 = 14; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk1E0); + gCurrentHud->unk1E8 = 1.0f; + gCurrentHud->unk1E6 = 14; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); } // Draw Taj's minimap icon. if (gHudLevelHeader->race_type == RACETYPE_HUBWORLD) { temp_v0_8 = find_taj_object(); if (temp_v0_8 != NULL) { - D_80126CDC->unk1E6 = 14; + gCurrentHud->unk1E6 = 14; func_800AA3EC(temp_v0_8->segment.trans.x_position, temp_v0_8->segment.trans.z_position, sp114, sp118, sp11C); - D_80126CDC->unk1E4 = 0; + gCurrentHud->unk1E4 = 0; gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 0, 255, opacity); - D_80126CDC->unk1E8 = 1.0f; - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk1E0); + gCurrentHud->unk1E8 = 1.0f; + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); } } // Draw racer minimap icons. @@ -2235,17 +2241,17 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u if (someRacer != NULL) { func_800AA3EC(objectGroup[i]->segment.trans.x_position, objectGroup[i]->segment.trans.z_position, sp114, sp118, sp11C); if (someRacer->playerIndex != PLAYER_COMPUTER) { - D_80126CDC->unk1F0 -= 1.0f; - D_80126CDC->unk1E6 = 27; - D_80126CDC->unk1E4 = (objectGroup[i]->segment.trans.y_rotation - ((lvlMdl->minimapRotation * 0xFFFF) / 360)) & 0xFFFF; + gCurrentHud->unk1F0 -= 1.0f; + gCurrentHud->unk1E6 = 27; + gCurrentHud->unk1E4 = (objectGroup[i]->segment.trans.y_rotation - ((lvlMdl->minimapRotation * 0xFFFF) / 360)) & 0xFFFF; if (get_filtered_cheats() & CHEAT_MIRRORED_TRACKS) { - D_80126CDC->unk1E4 = 0xFFFF - D_80126CDC->unk1E4; + gCurrentHud->unk1E4 = 0xFFFF - gCurrentHud->unk1E4; } func_8007BF1C(TRUE); } else { - D_80126CDC->unk1E4 = 0; - D_80126CDC->unk1E6 = 14; + gCurrentHud->unk1E4 = 0; + gCurrentHud->unk1E6 = 14; } if (is_taj_challenge() && someRacer->vehicleID == VEHICLE_CARPET) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 0, 255, opacity); @@ -2254,25 +2260,25 @@ 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) { - D_80126CDC->unk1EC -= 4.0f; + gCurrentHud->unk1EC -= 4.0f; } if (get_current_level_race_type() == RACETYPE_CHALLENGE_BATTLE) { switch (someRacer->unk212) { case 0: - D_80126CDC->unk1E8 = 0.8f; + gCurrentHud->unk1E8 = 0.8f; break; case 1: - D_80126CDC->unk1E8 = 1.0f; + gCurrentHud->unk1E8 = 1.0f; break; case 2: case 3: - D_80126CDC->unk1E8 = 1.2f; + gCurrentHud->unk1E8 = 1.2f; break; } } else { - D_80126CDC->unk1E8 = 1.0f; + gCurrentHud->unk1E8 = 1.0f; } - func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &D_80126CDC->unk1E0); + func_800AA600(&gHUDCurrDisplayList, &gHUDCurrMatrix, &gHUDCurrVertex, &gCurrentHud->unk1E0); } func_8007BF1C(FALSE); } @@ -2303,14 +2309,14 @@ void func_800AA3EC(f32 x, f32 z, f32 angleSin, f32 angleCos, f32 modelAspectRati scaledY = (lvlMdl->minimapYScale * -60.0f * (z - lvlMdl->lowerZBounds)) / (b); if (get_filtered_cheats() & CHEAT_MIRRORED_TRACKS) { // Is adventure 2? - D_80126CDC->unk1EC = (((f32) gMinimapScreenX - ((scaledX * angleCos) + (scaledY * angleSin))) + (f32) lvlMdl->minimapOffsetXAdv2) - (f32) gMinimapDotOffsetX; - D_80126CDC->unk1F0 = ((f32) (lvlMdl->minimapOffsetYAdv2 + gMinimapScreenY) - ((scaledX * angleSin) - (scaledY * angleCos))) + (f32) gMinimapDotOffsetY; + gCurrentHud->unk1EC = (((f32) gMinimapScreenX - ((scaledX * angleCos) + (scaledY * angleSin))) + (f32) lvlMdl->minimapOffsetXAdv2) - (f32) gMinimapDotOffsetX; + gCurrentHud->unk1F0 = ((f32) (lvlMdl->minimapOffsetYAdv2 + gMinimapScreenY) - ((scaledX * angleSin) - (scaledY * angleCos))) + (f32) gMinimapDotOffsetY; return; } // Final x position on minimap - D_80126CDC->unk1EC = ((f32) gMinimapScreenX + ((scaledX * angleCos) + (scaledY * angleSin)) + (f32) lvlMdl->minimapOffsetXAdv1) - (f32) gMinimapDotOffsetX; + gCurrentHud->unk1EC = ((f32) gMinimapScreenX + ((scaledX * angleCos) + (scaledY * angleSin)) + (f32) lvlMdl->minimapOffsetXAdv1) - (f32) gMinimapDotOffsetX; // Final y position on minimap - D_80126CDC->unk1F0 = ((f32) (lvlMdl->minimapOffsetYAdv1 + gMinimapScreenY) - ((scaledX * angleSin) - (scaledY * angleCos))) + (f32) gMinimapDotOffsetY; + gCurrentHud->unk1F0 = ((f32) (lvlMdl->minimapOffsetYAdv1 + gMinimapScreenY) - ((scaledX * angleSin) - (scaledY * angleCos))) + (f32) gMinimapDotOffsetY; } GLOBAL_ASM("asm/non_matchings/game_ui/func_800AA600.s") diff --git a/src/game_ui.h b/src/game_ui.h index cb69b2d7..84f7a998 100644 --- a/src/game_ui.h +++ b/src/game_ui.h @@ -18,6 +18,49 @@ enum CourseIndicatorArrows { INDICATOR_EXCLAMATION }; +enum HudElementNames { + HUD_ELEMENT_UNK_00, + HUD_ELEMENT_UNK_01, + HUD_ELEMENT_UNK_02, + HUD_ELEMENT_UNK_03, + HUD_ELEMENT_UNK_04, + HUD_ELEMENT_UNK_05, + HUD_ELEMENT_UNK_06, + HUD_ELEMENT_UNK_07, + HUD_ELEMENT_UNK_08, + HUD_ELEMENT_UNK_09, + HUD_ELEMENT_UNK_0A, + HUD_ELEMENT_UNK_0B, + HUD_ELEMENT_UNK_0C, + HUD_ELEMENT_UNK_0D, + HUD_ELEMENT_UNK_0E, + HUD_ELEMENT_UNK_0F, + HUD_ELEMENT_UNK_10, + HUD_ELEMENT_UNK_11, + HUD_ELEMENT_UNK_12, + HUD_ELEMENT_UNK_13, + HUD_ELEMENT_UNK_14, + HUD_ELEMENT_UNK_15, + HUD_ELEMENT_UNK_16, + HUD_ELEMENT_UNK_17, + HUD_ELEMENT_UNK_18, + HUD_ELEMENT_UNK_19, + HUD_ELEMENT_UNK_1A, + HUD_ELEMENT_UNK_1B, + HUD_ELEMENT_UNK_1C, + HUD_ELEMENT_UNK_1D, + HUD_ELEMENT_UNK_1E, + HUD_ELEMENT_UNK_1F, + HUD_ELEMENT_UNK_20, + HUD_ELEMENT_UNK_21, + HUD_ELEMENT_UNK_22, + HUD_ELEMENT_UNK_23, + HUD_ELEMENT_UNK_24, + HUD_ELEMENT_UNK_25, + HUD_ELEMENT_UNK_26, + HUD_ELEMENT_UNK_27 +}; + typedef struct { s16 unk0; s16 unk2; @@ -288,9 +331,9 @@ typedef struct ObjectTransform_800A8474 { s16 unk18; } ObjectTransform_800A8474; -typedef struct unk80126CF4 { - void *unk0[40]; -} unk80126CF4; +typedef struct HudElements { + void *entry[40]; +} HudElements; extern u8 gGfxTaskYieldData[OS_YIELD_DATA_SIZE]; @@ -322,7 +365,7 @@ void render_race_finish_position(Object_64 *obj, s32 updateRate); void render_speedometer(Object *obj, s32 updateRate); void render_lap_count(Object_Racer *racer, s32 updateRate); void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtxList, s32 updateRate); -void func_8009ECF0(s32 viewPortCount); +void init_hud(s32 viewportCount); // Non Matching void func_800A14F0(Object *, s32); diff --git a/src/gzip.c b/src/gzip.c index c390a7ac..dd17acec 100644 --- a/src/gzip.c +++ b/src/gzip.c @@ -7,7 +7,7 @@ /************ .data ************/ -huft *D_800E3760 = NULL; //gzip_huft_alloc +huft *gHuftTable = NULL; //gzip_huft_alloc s32 *gAssetAddress = NULL; u8 *gzip_inflate_input = NULL; u8 *gzip_inflate_output = NULL; @@ -18,12 +18,12 @@ u8 *gzip_inflate_output = NULL; u32 gzip_bit_buffer; u32 gzip_num_bits; -s32 D_8012AAD8; //gzip_hufts +s32 gHuftTablePos; //gzip_hufts /******************************/ -void rzipInit(void) { - D_800E3760 = (huft *)allocate_from_main_pool_safe(0x2800, COLOUR_TAG_BLACK); +void init_rzip(void) { + gHuftTable = (huft *)allocate_from_main_pool_safe(0x2800, COLOUR_TAG_BLACK); gAssetAddress = (s32 *)allocate_from_main_pool_safe(0x10, COLOUR_TAG_BLACK); } @@ -155,7 +155,7 @@ void gzip_huft_build(u32 *b, u32 n, u32 s, u16 *d, u16 *e, huft **t, s32 *m) { q = NULL; /* ditto */ z = 0; /* ditto */ - // D_800E3760 and D_8012AAD8 go in here somewhere. + // gHuftTable and gHuftTablePos go in here somewhere. /* go through the bit lengths (k already is bits in shortest code) */ for (; k <= g; k++) @@ -185,8 +185,8 @@ void gzip_huft_build(u32 *b, u32 n, u32 s, u16 *d, u16 *e, huft **t, s32 *m) { } z = 1 << j; /* table entries for j-bit table */ - q = &D_800E3760[D_8012AAD8]; - D_8012AAD8 += z + 1; + q = &gHuftTable[gHuftTablePos]; + gHuftTablePos += z + 1; *t = q + 1; /* link to list for huft_free() */ *(t = &(q->v.t)) = NULL; diff --git a/src/gzip.h b/src/gzip.h index 15bcc3c9..2509cf0c 100644 --- a/src/gzip.h +++ b/src/gzip.h @@ -18,12 +18,11 @@ typedef struct huft { #define BMAX 16 /* maximum bit length of any code (16 for explode) */ #define N_MAX 288 /* maximum number of codes in any set */ -void rzipInit(void); +void init_rzip(void); s32 byteswap32(u8 *arg0); s32 get_asset_uncompressed_size(s32 assetIndex, s32 assetOffset); u8 *gzip_inflate(u8 *compressedInput, u8 *decompressedOutput); void gzip_huft_build(u32 *b, u32 n, u32 s, u16 *d, u16 *e, huft **t, s32 *m); - -s32 gzip_inflate_block(void); // Non Matching +s32 gzip_inflate_block(void); #endif diff --git a/src/lights.c b/src/lights.c index d0705649..2ee7bfa6 100644 --- a/src/lights.c +++ b/src/lights.c @@ -10,38 +10,39 @@ /************ .data ************/ -unk800DC950 **D_800DC950 = NULL; -unk800DC950 *D_800DC954 = NULL; -s32 D_800DC958 = 0; -s32 D_800DC95C = 0; +ObjectLight **gActiveLights = NULL; +ObjectLight *D_800DC954 = NULL; +s32 gMaxLights = 0; +s32 gNumActiveLights = 0; unk800DC960 *D_800DC960 = NULL; -unk800DC964 *D_800DC964 = NULL; +Vec3f *D_800DC964 = NULL; s32 D_800DC968 = 0; // Currently unknown, might be a different type. /*******************************/ /************ .bss ************/ -f32 D_8011D4C0; -f32 D_8011D4C4; -f32 D_8011D4C8; -f32 D_8011D4CC; +f32 gLightDistance; +f32 gLightDiffX; +f32 gLightDiffY; +f32 gLightDiffZ; /*******************************/ /** + * Free all lights from RAM. * Official Name: freeLights */ void free_lights(void) { - if (D_800DC950 != NULL) { - free_from_memory_pool(D_800DC950); - D_800DC950 = NULL; + if (gActiveLights != NULL) { + free_from_memory_pool(gActiveLights); + gActiveLights = NULL; D_800DC954 = NULL; D_800DC960 = NULL; D_800DC964 = NULL; } - D_800DC95C = 0; - D_800DC958 = 0; + gNumActiveLights = 0; + gMaxLights = 0; } // Regalloc issues @@ -52,18 +53,18 @@ void free_lights(void) { void setup_lights(s32 count) { s32 i; s32 newCount; - unk800DC950 **temp_v0; + ObjectLight **temp_v0; free_lights(); - D_800DC958 = count; - temp_v0 = (unk800DC950 **) allocate_from_main_pool_safe(D_800DC958 * (sizeof(s32 *) + sizeof(unk800DC950) + sizeof(unk800DC960) + sizeof(unk800DC964)), COLOUR_TAG_MAGENTA); - newCount = D_800DC958; - D_800DC950 = temp_v0; - D_800DC954 = (unk800DC950 *) &temp_v0[newCount]; + gMaxLights = count; + temp_v0 = (ObjectLight **) allocate_from_main_pool_safe(gMaxLights * (sizeof(s32 *) + sizeof(ObjectLight) + sizeof(unk800DC960) + sizeof(Vec3f)), COLOUR_TAG_MAGENTA); + newCount = gMaxLights; + gActiveLights = temp_v0; + D_800DC954 = (ObjectLight *) &temp_v0[newCount]; D_800DC960 = (unk800DC960 *) &D_800DC954[newCount]; - D_800DC964 = (unk800DC964 *) &D_800DC960[newCount]; - for (i = 0; i < D_800DC958; i++) { - D_800DC950[i] = &D_800DC954[i]; + D_800DC964 = (Vec3f *) &D_800DC960[newCount]; + for (i = 0; i < gMaxLights; i++) { + gActiveLights[i] = &D_800DC954[i]; } } #else @@ -75,117 +76,125 @@ GLOBAL_ASM("asm/non_matchings/lights/func_80031CAC.s") /** * Official Name: addObjectLight */ -unk800DC950 *add_object_light(Object *arg0, ObjectHeader24 *arg1) { +ObjectLight *add_object_light(Object *obj, ObjectHeader24 *arg1) { s32 i; - unk800DC950 *temp_a2; + ObjectLight *light; MiscAssetObjectHeader24 *miscAsset; - temp_a2 = NULL; - if (D_800DC95C < D_800DC958) { - temp_a2 = D_800DC950[D_800DC95C++]; - temp_a2->unk0 = arg1->unk8 >> 0x1C; - temp_a2->unk1 = arg1->unk9; - temp_a2->unk2 = arg1->unkB; - temp_a2->unk3 = arg1->unkA; - temp_a2->unk4 = arg1->unk8A & 0xF; - temp_a2->unkC = arg0; - temp_a2->unk6 = arg1->unkC; - temp_a2->unk8 = arg1->unkE; - temp_a2->unkA = arg1->unk10; - temp_a2->unk10 = temp_a2->unk6; - temp_a2->unk14 = temp_a2->unk8; - temp_a2->unk18 = temp_a2->unkA; - temp_a2->unk1C = arg1->unk2 << 16; - temp_a2->unk2C = 0; - temp_a2->unk3C = 0; - temp_a2->unk20 = arg1->unk3 << 16; - temp_a2->unk30 = 0; - temp_a2->unk3E = 0; - temp_a2->unk24 = arg1->unk4 << 16; - temp_a2->unk34 = 0; - temp_a2->unk40 = 0; - temp_a2->unk28 = arg1->unk5 << 16; - temp_a2->unk38 = 0; - temp_a2->unk42 = 0; + light = NULL; + if (gNumActiveLights < gMaxLights) { + light = gActiveLights[gNumActiveLights++]; + light->unk0 = arg1->unk8 >> 0x1C; + light->unk1 = arg1->unk9; + light->unk2 = arg1->unkB; + light->type = arg1->unkA; + light->enabled = arg1->unk8A & 0xF; + light->owner = obj; + light->homeX = arg1->homeX; + light->homeY = arg1->homeY; + light->homeZ = arg1->homeZ; + light->x = light->homeX; + light->y = light->homeY; + light->z = light->homeZ; + light->unk1C = arg1->unk2 << 16; + light->unk2C = 0; + light->unk3C = 0; + light->unk20 = arg1->unk3 << 16; + light->unk30 = 0; + light->unk3E = 0; + light->unk24 = arg1->unk4 << 16; + light->unk34 = 0; + light->unk40 = 0; + light->unk28 = arg1->unk5 << 16; + light->unk38 = 0; + light->unk42 = 0; if (arg1->unk6 != 0xFFFF) { miscAsset = (MiscAssetObjectHeader24 *) get_misc_asset(arg1->unk6); - temp_a2->unk44 = miscAsset; - temp_a2->unk48 = miscAsset->unk0; - temp_a2->unk4A = 0; - temp_a2->unk4C = 0; - temp_a2->unk4E = 0; - temp_a2->unk44 = &miscAsset->unk14; - for (i = 0; i < temp_a2->unk48 ; i++) { \ - temp_a2->unk4E += temp_a2->unk44[i].unk4; //Must be on one line! + light->unk44 = (SubMiscAssetObjectHeader24 *) miscAsset; + light->unk48 = miscAsset->unk0; + light->unk4A = 0; + light->unk4C = 0; + light->unk4E = 0; + light->unk44 = (SubMiscAssetObjectHeader24 *) &miscAsset->unk14; + for (i = 0; i < light->unk48 ; i++) { \ + light->unk4E += light->unk44[i].unk4; //Must be on one line! } } else { - temp_a2->unk44 = 0; + light->unk44 = 0; } - temp_a2->unk5C = arg1->unk12; - temp_a2->unk60 = arg1->unk14; - temp_a2->unk64 = arg1->unk16; - temp_a2->unk68 = temp_a2->unk5C * temp_a2->unk5C; - temp_a2->unk6C = 1.0f / temp_a2->unk5C; - temp_a2->unk70 = arg1->unk0 << 8; - temp_a2->unk74 = 0; - temp_a2->unk78 = 0; - temp_a2->unk72 = arg1->unk1 << 8; - temp_a2->unk76 = 0; - temp_a2->unk7A = 0; - temp_a2->unk5 = 1; - func_80032424(temp_a2, 0); + light->radius = arg1->radius; + light->unk60 = arg1->unk14; + light->unk64 = arg1->unk16; + light->radiusSquare = light->radius * light->radius; + light->radiusMag = 1.0f / light->radius; + light->unk70 = arg1->unk0 << 8; + light->unk74 = 0; + light->unk78 = 0; + light->unk72 = arg1->unk1 << 8; + light->unk76 = 0; + light->unk7A = 0; + light->unk5 = 1; + func_80032424(light, 0); } - return temp_a2; + return light; } /** + * Disable this objects light data. * Official Name: turnLightOff? */ -UNUSED void func_80032210(unk800DC950 *arg0) { - arg0->unk4 = 0; +UNUSED void disable_object_light(ObjectLight *light) { + light->enabled = FALSE; } /** + * Enable this objects light data. * Official Name: turnLightOn? */ -UNUSED void func_80032218(unk800DC950 *arg0) { - arg0->unk4 = 1; +UNUSED void enable_object_light(ObjectLight *light) { + light->enabled = TRUE; } -UNUSED void func_80032224(unk800DC950 *arg0) { - if (arg0->unk4 == 1) { - arg0->unk4 = 0; +/** + * Toggle this objects light data on or off. +*/ +UNUSED void toggle_object_light(ObjectLight *light) { + if (light->enabled == TRUE) { + light->enabled = FALSE; return; } - arg0->unk4 = 1; + light->enabled = TRUE; } -UNUSED void func_80032248(unk800DC950 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) { +UNUSED void func_80032248(ObjectLight *light, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) { if (arg2 > 0) { - arg0->unk3C = arg2; - arg0->unk2C = ((arg1 << 0x10) - arg0->unk1C) / arg2; + light->unk3C = arg2; + light->unk2C = ((arg1 << 0x10) - light->unk1C) / arg2; } if (arg4 > 0) { - arg0->unk3E = arg4; - arg0->unk30 = ((arg3 << 0x10) - arg0->unk20) / arg4; + light->unk3E = arg4; + light->unk30 = ((arg3 << 0x10) - light->unk20) / arg4; } if (arg6 > 0) { - arg0->unk34 = ((arg5 << 0x10) - arg0->unk24) / arg6; - arg0->unk40 = arg6; + light->unk34 = ((arg5 << 0x10) - light->unk24) / arg6; + light->unk40 = arg6; } } -UNUSED void func_80032344(unk800DC950 *arg0, s32 arg1, s32 arg2) { +UNUSED void func_80032344(ObjectLight *light, s32 arg1, s32 arg2) { if (arg2 > 0) { - arg0->unk42 = arg2; - arg0->unk38 = ((arg1 << 0x10) - arg0->unk28) / arg2; + light->unk42 = arg2; + light->unk38 = ((arg1 << 0x10) - light->unk28) / arg2; } } -void lightUpdateLights(s32 arg0) { +/** + * Loops through all active lights and updates their properties. +*/ +void lightUpdateLights(s32 updateRate) { s32 i; - for (i = 0; i < D_800DC95C; i++) { - func_80032424(D_800DC950[i], arg0); + for (i = 0; i < gNumActiveLights; i++) { + func_80032424(gActiveLights[i], updateRate); } } @@ -194,28 +203,29 @@ GLOBAL_ASM("asm/non_matchings/lights/func_80032424.s") /** * Official Name: killLight? */ -void func_80032BAC(unk800DC950 *arg0) { - unk800DC950 *entry = NULL; +void func_80032BAC(ObjectLight *light) { + ObjectLight *entry = NULL; s32 i; - for (i = 0; (i < D_800DC95C) && (entry == NULL); i++) { - if (arg0 == D_800DC950[i]) { - entry = D_800DC950[i]; + for (i = 0; (i < gNumActiveLights) && (entry == NULL); i++) { + if (light == gActiveLights[i]) { + entry = gActiveLights[i]; } } if (entry != NULL) { - D_800DC95C--; - for (i--; i < D_800DC95C; i++) { - D_800DC950[i] = D_800DC950[i + 1]; + gNumActiveLights--; + for (i--; i < gNumActiveLights; i++) { + gActiveLights[i] = gActiveLights[i + 1]; } - D_800DC950[D_800DC95C] = entry; + gActiveLights[gNumActiveLights] = entry; } } /** + * Return the number of active lights. * Official Name: lightGetLights? */ -s32 func_80032C6C(void) { - return D_800DC95C; +s32 get_light_count(void) { + return gNumActiveLights; } #ifdef NON_EQUIVALENT @@ -229,7 +239,7 @@ void func_80032C7C(Object *object) { f32 f20; f32 temp; s16 phi_a0, phi_a1; - unk800DC950 *entry; + ObjectLight *entry; if (object->segment.header->unk3D == 0) { switch (object->segment.header->modelType) { @@ -250,9 +260,9 @@ void func_80032C7C(Object *object) { sp80 = object->segment.trans.y_position; sp7E = object->segment.trans.z_position; D_800DC968 = 0; - for (i = 0; i < D_800DC95C; i++) { - entry = D_800DC950[i]; - if ((entry->unk2 & sp64) && (entry->unk4 == 1) && (sp82 >= entry->unk50) && + for (i = 0; i < gNumActiveLights; i++) { + entry = gActiveLights[i]; + if ((entry->unk2 & sp64) && (entry->enabled == 1) && (sp82 >= entry->unk50) && (entry->unk56 >= sp82) && (sp80 >= entry->unk52) && (entry->unk58 >= sp80) && (sp7E >= entry->unk54) && (entry->unk5A >= sp7E)) { if (entry->unk0 == 0) { @@ -265,14 +275,14 @@ void func_80032C7C(Object *object) { D_800DC968 = D_800DC968 + 1; } } else { - D_8011D4C4 = entry->unk10 - object->segment.trans.x_position; - D_8011D4C8 = entry->unk14 - object->segment.trans.y_position; - D_8011D4CC = entry->unk18 - object->segment.trans.z_position; + gLightDiffX = entry->x - object->segment.trans.x_position; + gLightDiffY = entry->y - object->segment.trans.y_position; + gLightDiffZ = entry->z - object->segment.trans.z_position; if (entry->unk0 == 2) { - D_8011D4C8 = 0.0f; + gLightDiffY = 0.0f; } - D_8011D4C0 = (D_8011D4C4 * D_8011D4C4) + (D_8011D4C8 * D_8011D4C8) + (D_8011D4CC * D_8011D4CC); - if (D_8011D4C0 < entry->unk68) { + gLightDistance = (gLightDiffX * gLightDiffX) + (gLightDiffY * gLightDiffY) + (gLightDiffZ * gLightDiffZ); + if (gLightDistance < entry->radiusSquare) { if (entry->unk1 == 2) { f20 = light_direction_calc(entry); } else { @@ -282,19 +292,19 @@ void func_80032C7C(Object *object) { f20 *= light_distance_calc(entry); if (f20 > 0.0f) { if (object->segment.header->unk71 != 0) { - if (D_8011D4C0 > 0.0f) { - temp = 1.0f / sqrtf(D_8011D4C0); - D_8011D4C4 *= temp; - D_8011D4C8 *= temp; - D_8011D4CC *= temp; + if (gLightDistance > 0.0f) { + temp = 1.0f / sqrtf(gLightDistance); + gLightDiffX *= temp; + gLightDiffY *= temp; + gLightDiffZ *= temp; } else { - D_8011D4C4 = 0.0f; - D_8011D4C8 = 0.0f; - D_8011D4CC = -1.0f; + gLightDiffX = 0.0f; + gLightDiffY = 0.0f; + gLightDiffZ = -1.0f; } - D_800DC964[D_800DC968].unk0 = D_8011D4C4; - D_800DC964[D_800DC968].unk4 = D_8011D4C8; - D_800DC964[D_800DC968].unk8 = D_8011D4CC; + D_800DC964[D_800DC968].x = gLightDiffX; + D_800DC964[D_800DC968].y = gLightDiffY; + D_800DC964[D_800DC968].z = gLightDiffZ; } D_800DC960[D_800DC968].unk0 = entry; D_800DC960[D_800DC968].unk4 = entry->unk1C >> 0x10; @@ -311,17 +321,17 @@ void func_80032C7C(Object *object) { if (object->segment.header->unk71 != 0) { if (D_800DC968 == 0) { - object->unk54->unk7 = 0; - object->unk54->unk11 = 0; + object->shading->unk7 = 0; + object->shading->unk11 = 0; } else if (D_800DC968 == 1) { - object->unk54->unk4 = D_800DC960[0].unk4; - object->unk54->unk5 = D_800DC960[0].unk8; - object->unk54->unk6 = D_800DC960[0].unkC; - object->unk54->unk7 = D_800DC960[0].unk10; - object->unk54->unk11 = 0; - object->unk54->unk8 = D_800DC964[0].unk0 * 8192.0f; - object->unk54->unkA = D_800DC964[0].unk4 * 8192.0f; - object->unk54->unkC = D_800DC964[0].unk8 * 8192.0f; + object->shading->unk4 = D_800DC960[0].unk4; + object->shading->unk5 = D_800DC960[0].unk8; + object->shading->unk6 = D_800DC960[0].unkC; + object->shading->unk7 = D_800DC960[0].unk10; + object->shading->unk11 = 0; + object->shading->unk8 = D_800DC964[0].x * 8192.0f; + object->shading->unkA = D_800DC964[0].y * 8192.0f; + object->shading->unkC = D_800DC964[0].z * 8192.0f; } else { if (D_800DC960[1].unk10 < D_800DC960[0].unk10) { phi_a0 = 0; @@ -340,35 +350,35 @@ void func_80032C7C(Object *object) { } } } - object->unk54->unk4 = D_800DC960[phi_a0].unk4; - object->unk54->unk5 = D_800DC960[phi_a0].unk8; - object->unk54->unk6 = D_800DC960[phi_a0].unkC; - object->unk54->unk7 = D_800DC960[phi_a0].unk10; - object->unk54->unk8 = D_800DC964[phi_a0].unk0 * 8192.0f; - object->unk54->unkA = D_800DC964[phi_a0].unk4 * 8192.0f; - object->unk54->unkC = D_800DC964[phi_a0].unk8 * 8192.0f; - object->unk54->unkE = D_800DC960[phi_a1].unk4; - object->unk54->unkF = D_800DC960[phi_a1].unk8; - object->unk54->unk10 = D_800DC960[phi_a1].unkC; - object->unk54->unk11 = D_800DC960[phi_a1].unk10; - object->unk54->unk12 = D_800DC964[phi_a1].unk0 * 8192.0f; - object->unk54->unk14 = D_800DC964[phi_a1].unk4 * 8192.0f; - object->unk54->unk16 = D_800DC964[phi_a1].unk8 * 8192.0f; + object->shading->unk4 = D_800DC960[phi_a0].unk4; + object->shading->unk5 = D_800DC960[phi_a0].unk8; + object->shading->unk6 = D_800DC960[phi_a0].unkC; + object->shading->unk7 = D_800DC960[phi_a0].unk10; + object->shading->unk8 = D_800DC964[phi_a0].x * 8192.0f; + object->shading->unkA = D_800DC964[phi_a0].y * 8192.0f; + object->shading->unkC = D_800DC964[phi_a0].z * 8192.0f; + object->shading->unkE = D_800DC960[phi_a1].unk4; + object->shading->unkF = D_800DC960[phi_a1].unk8; + object->shading->unk10 = D_800DC960[phi_a1].unkC; + object->shading->unk11 = D_800DC960[phi_a1].unk10; + object->shading->unk12 = D_800DC964[phi_a1].x * 8192.0f; + object->shading->unk14 = D_800DC964[phi_a1].y * 8192.0f; + object->shading->unk16 = D_800DC964[phi_a1].z * 8192.0f; } } else { if (D_800DC968 > 0) { if (D_800DC968 >= 2) { func_800337E4(); } - object->unk54->unk4 = D_800DC960[0].unk4; - object->unk54->unk5 = D_800DC960[0].unk8; - object->unk54->unk6 = D_800DC960[0].unkC; - object->unk54->unk7 = D_800DC960[0].unk10; + object->shading->unk4 = D_800DC960[0].unk4; + object->shading->unk5 = D_800DC960[0].unk8; + object->shading->unk6 = D_800DC960[0].unkC; + object->shading->unk7 = D_800DC960[0].unk10; } else { - object->unk54->unk4 = 0xFF; - object->unk54->unk5 = 0xFF; - object->unk54->unk6 = 0xFF; - object->unk54->unk7 = 0; + object->shading->unk4 = 0xFF; + object->shading->unk5 = 0xFF; + object->shading->unk6 = 0xFF; + object->shading->unk7 = 0; } } } @@ -418,54 +428,54 @@ GLOBAL_ASM("asm/non_matchings/lights/func_800337E4.s") /** * Official Name: lightDistanceCalc */ -f32 light_distance_calc(unk800DC950 *arg0) { - f32 out; - f32 temp; +f32 light_distance_calc(ObjectLight *light) { + f32 dist; + f32 mag; - out = arg0->unk28 / 65536.0f; - switch (arg0->unk3) { - case 1: - temp = 1.0f - (sqrtf(D_8011D4C0) * arg0->unk6C); - out *= temp; - break; - case 2: - temp = 1.0f - sqrtf(sqrtf(D_8011D4C0) * arg0->unk6C); - out *= temp; - break; - case 3: - temp = coss_f(sqrtf(D_8011D4C0) * arg0->unk6C * 16384.0f); - out *= temp; - break; - case 4: - temp = coss_f(sqrtf(D_8011D4C0) * arg0->unk6C * 16384.0f); - temp *= temp; - out *= temp; - break; - case 5: - temp = 1.0f - (sqrtf(D_8011D4C0) * arg0->unk6C); - temp *= temp; - out *= temp; - break; + dist = light->unk28 / 65536.0f; + switch (light->type) { + case LIGHT_UNK1: + mag = 1.0f - (sqrtf(gLightDistance) * light->radiusMag); + dist *= mag; + break; + case LIGHT_UNK2: + mag = 1.0f - sqrtf(sqrtf(gLightDistance) * light->radiusMag); + dist *= mag; + break; + case LIGHT_UNK3: + mag = coss_f(sqrtf(gLightDistance) * light->radiusMag * 16384.0f); + dist *= mag; + break; + case LIGHT_UNK4: + mag = coss_f(sqrtf(gLightDistance) * light->radiusMag * 16384.0f); + mag *= mag; + dist *= mag; + break; + case LIGHT_UNK5: + mag = 1.0f - (sqrtf(gLightDistance) * light->radiusMag); + mag *= mag; + dist *= mag; + break; } - return out; + return dist; } /** * Official Name: lightDirectionCalc */ -f32 light_direction_calc(unk800DC950 *arg0) { - f32 temp_f2; - f32 phi_f12; +f32 light_direction_calc(ObjectLight *light) { + f32 mag; + f32 distance; - phi_f12 = D_8011D4C0; - if (phi_f12 > 0.0f) { - temp_f2 = 1.0f / sqrtf(phi_f12); - phi_f12 = (D_8011D4C4 * temp_f2 * arg0->unk7C) + (D_8011D4C8 * temp_f2 * arg0->unk80) + (D_8011D4CC * temp_f2 * arg0->unk84); - if (phi_f12 < 0.0f) { - phi_f12 = 0.0f; + distance = gLightDistance; + if (distance > 0.0f) { + mag = 1.0f / sqrtf(distance); + distance = (gLightDiffX * mag * light->unk7C) + (gLightDiffY * mag * light->unk80) + (gLightDiffZ * mag * light->unk84); + if (distance < 0.0f) { + distance = 0.0f; } } else { - phi_f12 = 1.0f; + distance = 1.0f; } - return phi_f12; + return distance; } diff --git a/src/lights.h b/src/lights.h index 9616916a..3a8b45bb 100644 --- a/src/lights.h +++ b/src/lights.h @@ -5,6 +5,15 @@ #include "structs.h" #include "libc/math.h" +enum LightType { + LIGHT_UNK0, + LIGHT_UNK1, + LIGHT_UNK2, + LIGHT_UNK3, + LIGHT_UNK4, + LIGHT_UNK5, +}; + typedef struct SubMiscAssetObjectHeader24 { s32 unk0; s32 unk4; @@ -17,20 +26,20 @@ typedef struct MiscAssetObjectHeader24 { } MiscAssetObjectHeader24; /* Size: 0x88 bytes */ -typedef struct unk800DC950 { +typedef struct ObjectLight { u8 unk0; u8 unk1; u8 unk2; - u8 unk3; - u8 unk4; + u8 type; + u8 enabled; u8 unk5; - s16 unk6; - s16 unk8; - s16 unkA; - Object *unkC; - f32 unk10; - f32 unk14; - f32 unk18; + s16 homeX; + s16 homeY; + s16 homeZ; + Object *owner; + f32 x; + f32 y; + f32 z; s32 unk1C; s32 unk20; s32 unk24; @@ -54,21 +63,21 @@ typedef struct unk800DC950 { s16 unk56; s16 unk58; s16 unk5A; - f32 unk5C; + f32 radius; f32 unk60; f32 unk64; - f32 unk68; - f32 unk6C; + f32 radiusSquare; + f32 radiusMag; s16 unk70; s16 unk72; s16 unk74; s16 unk76; s16 unk78; s16 unk7A; - f32 unk7C; - f32 unk80; - f32 unk84; -} unk800DC950; + f32 unk7C; // Think this might be scale. + f32 unk80; // Ditto. + f32 unk84; // The evolved form of ditto. +} ObjectLight; /* Size: 0x14 bytes */ typedef struct unk800DC960 { @@ -79,34 +88,19 @@ typedef struct unk800DC960 { s32 unk10; } unk800DC960; -/* Size: 12 bytes */ -typedef struct unk800DC964 { - f32 unk0; - f32 unk4; - f32 unk8; -} unk800DC964; - -extern unk800DC950 **D_800DC950; - -f32 coss_f(s16); //? - void free_lights(void); -void func_80032210(unk800DC950 *arg0); -void func_80032218(unk800DC950 *arg0); -void func_80032224(unk800DC950 *arg0); -void func_80032248(unk800DC950 *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6); -void func_80032344(unk800DC950 *arg0, s32 arg1, s32 arg2); -void lightUpdateLights(s32 arg0); -void func_80032BAC(unk800DC950 *arg0); -s32 func_80032C6C(void); -f32 light_distance_calc(unk800DC950 *arg0); -f32 light_direction_calc(unk800DC950 *arg0); +void lightUpdateLights(s32 updateRate); +void func_80032BAC(ObjectLight *light); +s32 get_light_count(void); +f32 light_distance_calc(ObjectLight *light); +f32 light_direction_calc(ObjectLight *light); Object_64 *func_80031CAC(Object *, LevelObjectEntry_RgbaLight *entry); +ObjectLight *add_object_light(Object *obj, ObjectHeader24 *arg1); //Non Matching void setup_lights(s32 count); void func_80032C7C(Object *object); void func_800337E4(void); -void func_80032424(unk800DC950 *arg0, s32 arg1); +void func_80032424(ObjectLight *light, s32 arg1); #endif diff --git a/src/memory.c b/src/memory.c index 32e5c75b..9829bec3 100644 --- a/src/memory.c +++ b/src/memory.c @@ -6,32 +6,12 @@ #include "thread0_epc.h" #include "controller.h" -/************ .rodata ************/ - -UNUSED const char D_800E7210[] = "*** mmAlloc: size = 0 ***\n"; -UNUSED const char D_800E722C[] = "*** mm Error *** ---> No more slots available.\n"; -UNUSED const char D_800E725C[] = "\n*** mm Error *** ---> No suitble block found for allocation.\n"; -UNUSED const char D_800E729C[] = "*** mmAllocAtAddr: size = 0 ***\n"; -UNUSED const char D_800E72C0[] = "\n*** mm Error *** ---> No more slots available.\n"; -UNUSED const char D_800E72F4[] = "\n*** mm Error *** ---> Can't allocate memory at desired address.\n"; -UNUSED const char D_800E7338[] = "\n*** mm Error *** ---> Can't free ram at this location: %x\n"; -UNUSED const char D_800E7374[] = "\n*** mm Error *** ---> No match found for mmFree.\n"; -UNUSED const char D_800E73A8[] = "*** Slots still in use in region ***\n"; -UNUSED const char D_800E73D0[] = "\n*** mm Error *** ---> stbf stack too deep!\n"; -UNUSED const char D_800E7400[] = "\n*** mm Error *** ---> Can't fix the specified block.\n"; -UNUSED const char D_800E7438[] = "\n*** mm Error *** ---> Can't unfix the specified block.\n"; -UNUSED const char D_800E7474[] = "Colour %x >> %d\n"; -UNUSED const char D_800E7488[] = "Unable to record %d slots, colours overflowed table.\n"; - -/*********************************/ - /************ .bss ************/ -MemoryPool gMemoryPools[4]; +MemoryPool gMemoryPools[4]; // Only two are used. #ifndef _ALIGN16 #define _ALIGN16(a) (((u32) (a) & ~0xF) + 0x10) -//#define _ALIGN16(val) ((val)&0xFFFFFFF0) + 0x10 #endif s32 gNumberOfMemoryPools; @@ -140,6 +120,10 @@ MemoryPoolSlot *allocate_from_main_pool(s32 size, u32 colourTag) { return allocate_from_memory_pool(0, size, colourTag); } +/** + * Search the existing empty slots and try to find one that can meet the size requirement. + * Afterwards, write the new allocation data to the slot in question and return the address. +*/ MemoryPoolSlot *allocate_from_memory_pool(s32 poolIndex, s32 size, u32 colourTag) { s32 slotSize; MemoryPoolSlot *curSlot; @@ -151,11 +135,14 @@ MemoryPoolSlot *allocate_from_memory_pool(s32 poolIndex, s32 size, u32 colourTag s32 currIndex; flags = clear_status_register_flags(); - if (size) {} // Fakematch + if (size == 0) { + stubbed_printf("*** mmAlloc: size = 0 ***\n"); + } pool = &gMemoryPools[poolIndex]; if ((pool->curNumSlots + 1) == (*pool).maxNumSlots) { set_status_register_flags(flags); - return 0; + stubbed_printf("*** mm Error *** ---> No more slots available.\n"); + return NULL; } currIndex = -1; if (size & 0xF) { @@ -168,7 +155,7 @@ MemoryPoolSlot *allocate_from_memory_pool(s32 poolIndex, s32 size, u32 colourTag do { curSlot = &slots[nextIndex]; if (curSlot->flags == 0) { - if ((curSlot->size >= size) && (curSlot->size < slotSize)) { + if (curSlot->size >= size && curSlot->size < slotSize) { slotSize = curSlot->size; currIndex = nextIndex; } @@ -181,7 +168,8 @@ MemoryPoolSlot *allocate_from_memory_pool(s32 poolIndex, s32 size, u32 colourTag return (MemoryPoolSlot *) (slots + currIndex)->data; } set_status_register_flags(flags); - return 0; + stubbed_printf("\n*** mm Error *** ---> No suitble block found for allocation.\n"); + return NULL; } /* Official name: mmAllocR */ @@ -203,9 +191,12 @@ void *allocate_at_address_in_main_pool(s32 size, u8 *address, u32 colorTag) { s32 *flags; flags = clear_status_register_flags(); - if (!size){} // Fakematch + if (size == 0) { + stubbed_printf("*** mmAllocAtAddr: size = 0 ***\n"); + } if ((gMemoryPools[0].curNumSlots + 1) == gMemoryPools[0].maxNumSlots) { set_status_register_flags(flags); + stubbed_printf("\n*** mm Error *** ---> No more slots available.\n"); } else { if (size & 0xF) { size = _ALIGN16(size); @@ -230,7 +221,8 @@ void *allocate_at_address_in_main_pool(s32 size, u8 *address, u32 colorTag) { } set_status_register_flags(flags); } - return 0; + stubbed_printf("\n*** mm Error *** ---> Can't allocate memory at desired address.\n"); + return NULL; } /** @@ -259,7 +251,7 @@ void free_from_memory_pool(void *data) { if (gFreeQueueState == 0) { free_slot_containing_address(data); } else { - func_80071440(data); + add_to_free_queue(data); } set_status_register_flags(flags); } @@ -282,6 +274,7 @@ void clear_free_queue(void) { gFreeQueue[i].unk4 = gFreeQueue[gFreeQueueCount - 1].unk4; gFreeQueueCount--; } else { + stubbed_printf("\n*** mm Error *** ---> Can't free ram at this location: %x\n", gFreeQueue[i].dataAddress); i++; } } @@ -313,7 +306,7 @@ void free_slot_containing_address(u8 *address) { } } -void func_80071314(void) { +UNUSED void func_80071314(void) { MemoryPoolSlot *slotPos; MemoryPool *pool; UNUSED s32 pad; @@ -323,7 +316,7 @@ void func_80071314(void) { flags = clear_status_register_flags(); poolIndex = gNumberOfMemoryPools; - while (poolIndex != (-1)) { + while (poolIndex != -1) { pool = &gMemoryPools[poolIndex]; slotPos = pool->slots; slotIndex = 0; @@ -340,13 +333,23 @@ void func_80071314(void) { } } slotIndex = (slotPos + slotIndex)->nextIndex; - } while (slotIndex != (-1)); + } while (slotIndex != -1); poolIndex--; } set_status_register_flags(flags); + stubbed_printf("\n*** mm Error *** ---> No match found for mmFree.\n"); } -void func_80071440(void *dataAddress) { +// TODO: Find homes for these, too. +UNUSED const char D_800E73A8[] = "*** Slots still in use in region ***\n"; +UNUSED const char D_800E73D0[] = "\n*** mm Error *** ---> stbf stack too deep!\n"; +UNUSED const char D_800E7400[] = "\n*** mm Error *** ---> Can't fix the specified block.\n"; +UNUSED const char D_800E7438[] = "\n*** mm Error *** ---> Can't unfix the specified block.\n"; + +/** + * Adds the current memory address to the back of the queue, so it can be freed. +*/ +void add_to_free_queue(void *dataAddress) { gFreeQueue[gFreeQueueCount].dataAddress = dataAddress; gFreeQueue[gFreeQueueCount].unk4 = gFreeQueueState; gFreeQueueCount++; @@ -363,17 +366,17 @@ s32 func_80071478(u8 *address) { slotIndex = 0; while (slotIndex != -1) { slot = slotIndex + pool->slots; // `slot = &pool->slots[slotIndex];` does not match. - if (address == (u8 *)slot->data) { + if (address == (u8 *) slot->data) { if (slot->flags == 1 || slot->flags == 4) { slot->flags |= 2; set_status_register_flags(flags); - return 1; + return TRUE; } } slotIndex = slot->nextIndex; } set_status_register_flags(flags); - return 0; + return FALSE; } s32 func_80071538(u8 *address) { @@ -391,13 +394,13 @@ s32 func_80071538(u8 *address) { if (slot->flags & 2) { slot->flags ^= 2; set_status_register_flags(flags); - return 1; + return TRUE; } } slotIndex = slot->nextIndex; } set_status_register_flags(flags); - return 0; + return FALSE; } /** @@ -409,16 +412,20 @@ s32 get_memory_pool_index_containing_address(u8 *address) { for (i = gNumberOfMemoryPools; i > 0; i--) { pool = &gMemoryPools[i]; - if ((u8 *)pool->slots >= address) { + if ((u8 *) pool->slots >= address) { continue; } - if (address < pool->size + (u8 *)pool->slots) { + if (address < pool->size + (u8 *) pool->slots) { break; } } return i; } +/** + * Clears the current slot of all information, effectively freeing the allocated memory. + * Unused slots before and after will be merged with this slot +*/ void free_memory_pool_slot(s32 poolIndex, s32 slotIndex) { s32 nextIndex; s32 prevIndex; @@ -465,11 +472,18 @@ void free_memory_pool_slot(s32 poolIndex, s32 slotIndex) { } } -// Unused? -MemoryPoolSlot *mmGetSlotPtr(s32 poolIndex) { +/** + * Return the address of the first slot of a given memory pool. +*/ +UNUSED MemoryPoolSlot *get_memory_pool_address(s32 poolIndex) { return gMemoryPools[poolIndex].slots; } +/** + * Initialise and attempts to fit the new memory block in the slot given. + * Updates the linked list with any entries before and after then returns the new slot index. + * If the region cannot fit, return the old slot instead. +*/ s32 allocate_memory_pool_slot(s32 poolIndex, s32 slotIndex, s32 size, s32 slotIsTaken, s32 newSlotIsTaken, u32 colourTag) { MemoryPool *pool; MemoryPoolSlot *poolSlots; @@ -519,10 +533,9 @@ u8 *align16(u8 *address) { /** * Returns the passed in address aligned to the next 8-byte boundary. - * Unused. * Official name: mmAlign8 */ -u8 *align8(u8 *address) { +UNUSED u8 *align8(u8 *address) { s32 remainder = (s32)address & 0x7; if (remainder > 0) { address = (u8 *)(((s32)address - remainder) + 8); @@ -532,10 +545,9 @@ u8 *align8(u8 *address) { /** * Returns the passed in address aligned to the next 4-byte boundary. - * Unused. * Official name: mmAlign4 */ -u8 *align4(u8 *address) { +UNUSED u8 *align4(u8 *address) { s32 remainder = (s32)address & 0x3; if (remainder > 0) { address = (u8 *)(((s32)address - remainder) + 4); @@ -543,18 +555,25 @@ u8 *align4(u8 *address) { return address; } -s32 func_800718A4(void) { +/** + * Iterate through all active memory pool slots and categorise them by colour. + * Tally how many colours there are, then how many colours are in use. + * Afterwards, print out the results. + * Since the function only has space for 64 different colours, make sure + * any missed tallies are at least reported. +*/ +UNUSED s32 find_active_pool_slot_colours(void) { u32 colours[64]; u32 colourCounts[64]; MemoryPoolSlot *curSlot; - s32 temp; + s32 numOverflows; s32 i; s32 j; s32 colourIndex; - s32 var_a2; + s32 slotColour; u32 curColour; - temp = 0; + numOverflows = 0; for (j = 0; j < 64; j++) { colours[j] = 0; colourCounts[j] = 0; @@ -563,42 +582,49 @@ s32 func_800718A4(void) { curSlot = gMemoryPools[i].slots; do { if (curSlot->flags != 0) { - var_a2 = curSlot->colourTag; - if (var_a2 != 0) { - curColour = var_a2; + slotColour = curSlot->colourTag; + if (slotColour != 0) { + curColour = slotColour; colourIndex = 0; while (colourIndex < 64 && curColour != colours[colourIndex] && colours[colourIndex] != 0) { - var_a2 = colours[colourIndex]; + slotColour = colours[colourIndex]; colourIndex++; } if (colourIndex < 64) { colours[colourIndex] = curColour; colourCounts[colourIndex]++; } else { - temp++; + numOverflows++; } } } - var_a2 = curSlot->nextIndex; - if (var_a2 != -1) { + slotColour = curSlot->nextIndex; + if (slotColour != -1) { curSlot = &gMemoryPools[i].slots[curSlot->nextIndex]; } - } while (var_a2 != (-1)); + } while (slotColour != -1); } - var_a2 = 0; - if(!temp) { } // Fakematch - for (j = 0; colours[j] != 0 && j < 64; j++) { } // Fakematch - var_a2 = 0; - if(!temp) { } // Fakematch - temp = var_a2; + slotColour = 0; + for (j = 0; colours[j] != 0 && j < 64; j++) { + stubbed_printf("Colour %x >> %d\n", colours[j], colourCounts[j]); + } + slotColour = 0; + if (numOverflows) { + stubbed_printf("Unable to record %d slots, colours overflowed table.\n", numOverflows); + } + numOverflows = slotColour; } -s32 get_memory_colour_tag_count(u32 colourTag) { +/** + * Search through each memory pool, counting up the slots that match the colour tag looking to be found. + * Marked as unused, since the functions calling it is also unused. +*/ +UNUSED s32 get_memory_colour_tag_count(u32 colourTag) { s32 i, count; MemoryPoolSlot *slot; count = 0; slot = &gMemoryPools[0].slots[0]; - for (i = 0; i < 1600; i++) { + for (i = 0; i < MAIN_POOL_SLOT_COUNT; i++) { if (slot->flags != 0) { if(colourTag == slot->colourTag) { count++; @@ -611,7 +637,6 @@ s32 get_memory_colour_tag_count(u32 colourTag) { /** * Prints out the counts for each color tag in the main pool. - * Unused. */ UNUSED void print_memory_colour_tags(void) { stubbed_printf("RED %d\n", get_memory_colour_tag_count(COLOUR_TAG_RED)); @@ -627,7 +652,6 @@ UNUSED void print_memory_colour_tags(void) { /** * Draws the counts for each color tag in the main pool. - * Unused. * See: https://tcrf.net/Diddy_Kong_Racing#Current_Colors */ UNUSED void render_memory_colour_tags(void) { diff --git a/src/memory.h b/src/memory.h index 3601f356..a5ca1338 100644 --- a/src/memory.h +++ b/src/memory.h @@ -12,33 +12,26 @@ // Animation related? #define COLOUR_TAG_RED 0xFF0000FF -// Object related? +// Models #define COLOUR_TAG_GREEN 0x00FF00FF -// ??? +// Objects #define COLOUR_TAG_BLUE 0x0000FFFF -// ??? +// Tracks #define COLOUR_TAG_YELLOW 0xFFFF00FF -// ??? +// Textures #define COLOUR_TAG_MAGENTA 0xFF00FFFF -// Audio related? +// Audio #define COLOUR_TAG_CYAN 0x00FFFFFF -// ??? +// Buffers and heaps #define COLOUR_TAG_WHITE 0xFFFFFFFF -// ??? +// Assets #define COLOUR_TAG_GREY 0x7F7F7FFF -// ??? +// Particles #define COLOUR_TAG_SEMITRANS_GREY 0x80808080 // ??? #define COLOUR_TAG_ORANGE 0xFF7F7FFF -// ??? +// Controller Pak #define COLOUR_TAG_BLACK 0x000000FF - -/* Size: 0x8 bytes */ -typedef struct unk80070BE4_8_0 { - s16 unk0; - s16 unk2; - s32 unk4; -} unk80070BE4_8_0; /* Size: 0x14 bytes */ typedef struct MemoryPoolSlot { @@ -88,7 +81,7 @@ void *allocate_from_pool_containing_slots(MemoryPoolSlot *slots, s32 size); void set_free_queue_state(s32 state); void free_from_memory_pool(void *data); void clear_free_queue(void); -void func_80071440(void *dataAddress); +void add_to_free_queue(void *dataAddress); s32 func_80071478(u8 *address); s32 func_80071538(u8 *address); s32 get_memory_pool_index_containing_address(u8 *address); diff --git a/src/menu.c b/src/menu.c index d99977c4..f7bcea93 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2537,7 +2537,7 @@ void init_title_screen_variables(void) { gIsInAdventureTwo = 0; } if ((sEepromSettings & 0x2000000) == 0) { - func_800C2AF4(0); + set_subtitles(0); } load_menu_text(get_language()); } @@ -2903,12 +2903,12 @@ s32 menu_options_loop(s32 updateRate) { if (sEepromSettings & 0x2000000) { play_sound_global(SOUND_MENU_PICK2, NULL); unset_eeprom_settings_value(0); - func_800C2AF4(0); + set_subtitles(0); gOptionMenuStrings[1] = gMenuText[ASSET_MENU_TEXT_SUBTITLESOFF]; } else { play_sound_global(SOUND_MENU_PICK2, NULL); set_eeprom_settings_value(0); - func_800C2AF4(1); + set_subtitles(1); gOptionMenuStrings[1] = gMenuText[ASSET_MENU_TEXT_SUBTITLESON]; } } else { @@ -8657,7 +8657,7 @@ s32 npc_dialogue_loop(u32 dialogueOption) { result = tt_menu_loop(); // T.T. menu break; case DIALOGUE_CHALLENGE: - result = func_800C3564(); // Taj challenge completed/failed menu + result = dialogue_challenge_loop(); // Taj challenge completed/failed menu break; case DIALOGUE_TROPHY: result = trophy_race_cabinet_menu_loop(); // Trophy race cabinet menu diff --git a/src/object_functions.c b/src/object_functions.c index 667dedac..cee2922b 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -637,8 +637,8 @@ void obj_loop_trophycab(Object *obj, s32 updateRate) { } } } - obj->unk54->unk2C = 0.612f; - obj->unk54->unk28 = 0.0f; + obj->shading->ambient = 0.612f; + obj->shading->brightness = 0.0f; tempObj = get_racer_object(PLAYER_ONE); if (tempObj != NULL) { diffX = obj->segment.trans.x_position - tempObj->segment.trans.x_position; @@ -703,7 +703,7 @@ void obj_loop_trophycab(Object *obj, s32 updateRate) { } obj->unk5C->unk100 = NULL; if (worldBalloons) { - obj->unk54->unk28 = 0.552f; + obj->shading->brightness = 0.552f; } } } @@ -4485,7 +4485,7 @@ void func_8003FC44(f32 x, f32 y, f32 z, s32 objectID, s32 soundID, f32 scale, s3 spawnObj.common.size = 10; spawnObj.common.objectID = objectID; spawnObj.unk9 = arg6; - newObj = spawn_object(&spawnObj, 1); + newObj = spawn_object((LevelObjectEntryCommon *) &spawnObj, 1); if (newObj != NULL) { newObj->segment.level_entry = NULL; newObj->segment.x_velocity = 0.0f; diff --git a/src/objects.c b/src/objects.c index c0e7b157..9ed20dbf 100644 --- a/src/objects.c +++ b/src/objects.c @@ -29,6 +29,7 @@ #define MAX_CHECKPOINTS 60 #define OBJECT_POOL_SIZE 0x15800 +#define OBJECT_SPAWN_HEAP_SIZE 0x800 #define OBJECT_SLOT_COUNT 512 #define ASSET_OBJECT_HEADER_TABLE_LENGTH 304 //This isn't important, but it's the number of object headers @@ -173,7 +174,7 @@ s8 D_8011AD51; s8 D_8011AD52; s8 D_8011AD53; s32 D_8011AD54; -Object *(*D_8011AD58)[0x200]; +Object *(*gSpawnObjectHeap)[0x200]; s32 D_8011AD5C; s32 D_8011AD60; s32 *gAssetsObjectHeadersTable; @@ -191,7 +192,7 @@ s32 D_8011ADB4; s32 gRaceStartCountdown; s32 D_8011ADBC; s32 D_8011ADC0; -u8 D_8011ADC4; +s8 D_8011ADC4; s8 D_8011ADC5; s32 D_8011ADC8; s8 (*D_8011ADCC)[8]; @@ -204,7 +205,7 @@ s8 D_8011AE01; s8 gIsNonCarRacers; s8 gIsSilverCoinRace; Object *D_8011AE08[16]; -AssetObjectHeaders *(*D_8011AE48)[ASSET_OBJECT_HEADER_TABLE_LENGTH]; +ObjectHeader *(*D_8011AE48)[ASSET_OBJECT_HEADER_TABLE_LENGTH]; u8 (*D_8011AE4C)[ASSET_OBJECT_HEADER_TABLE_LENGTH]; TextureHeader *D_8011AE50; TextureHeader *D_8011AE54; @@ -242,7 +243,7 @@ s32 D_8011AED4; s16 gTajChallengeType; Object *(*gCameraObjList)[20]; // Camera objects with a maximum of 20 s32 gCameraObjCount; //The number of camera objects in the above list -Object *(*gRacers)[8]; +Object *(*gRacers)[10]; // Similar to gRacers, but sorts the pointer by the players' current position in the race. Object **gRacersByPosition; // Similar to gRacers, but sorts the pointer by controller ports 1-4, then CPUs. @@ -250,7 +251,7 @@ Object **gRacersByPort; s32 gNumRacers; u8 gTimeTrialEnabled; u8 gIsTimeTrial; -u8 gIsTajChallenge; +s8 gIsTajChallenge; s8 D_8011AEF7; s32 D_8011AEF8; s32 D_8011AEFC; @@ -261,7 +262,7 @@ s32 D_8011AF10[2]; f32 D_8011AF18[4]; s32 D_8011AF28; s32 D_8011AF2C; -Object_54 *D_8011AF30; +ShadeProperties *gWorldShading; // Effectively unused. s32 D_8011AF34; s32 D_8011AF38[10]; s32 D_8011AF60[2]; @@ -355,13 +356,13 @@ Object *func_8000BF44(s32 arg0) { void allocate_object_pools(void) { s32 i; - func_8001D258(0.67f, 0.33f, 0, -0x2000, 0); + set_world_shading(0.67f, 0.33f, 0, -0x2000, 0); gObjectMemoryPool = (Object *) new_sub_memory_pool(OBJECT_POOL_SIZE, OBJECT_SLOT_COUNT); gParticlePtrList = allocate_from_main_pool_safe(sizeof(uintptr_t) * 200, COLOUR_TAG_BLUE); D_8011AE6C = allocate_from_main_pool_safe(0x50, COLOUR_TAG_BLUE); D_8011AE74 = allocate_from_main_pool_safe(0x200, COLOUR_TAG_BLUE); gTrackCheckpoints = allocate_from_main_pool_safe(sizeof(CheckpointNode) * MAX_CHECKPOINTS, COLOUR_TAG_BLUE); - gCameraObjList = allocate_from_main_pool_safe(0x50, COLOUR_TAG_BLUE); + gCameraObjList = allocate_from_main_pool_safe(sizeof(uintptr_t *) * 20, COLOUR_TAG_BLUE); gRacers = allocate_from_main_pool_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); gRacersByPort = allocate_from_main_pool_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); gRacersByPosition = allocate_from_main_pool_safe(sizeof(uintptr_t) * 10, COLOUR_TAG_BLUE); @@ -373,7 +374,7 @@ void allocate_object_pools(void) { while (gAssetsLvlObjTranslationTable[gAssetsLvlObjTranslationTableLength] == 0) { gAssetsLvlObjTranslationTableLength--; } - D_8011AD58 = allocate_from_main_pool_safe(sizeof(uintptr_t) * 512, COLOUR_TAG_BLUE); + gSpawnObjectHeap = allocate_from_main_pool_safe(sizeof(uintptr_t) * 512, COLOUR_TAG_BLUE); gAssetsObjectHeadersTable = (s32 *) load_asset_section_from_rom(ASSET_OBJECT_HEADERS_TABLE); gAssetsObjectHeadersTableLength = 0; while (-1 != gAssetsObjectHeadersTable[gAssetsObjectHeadersTableLength]) { @@ -610,7 +611,7 @@ void func_8000C8F8(s32 arg0, s32 arg1) { D_8011AEA0[arg1] = *asset; D_8011AEC0 = arg1; for (var_s0 = 0; var_s0 < D_8011AEA0[arg1]; var_s0 += temp_t3) { - spawn_object(D_8011AE98[arg1], 1); + spawn_object((LevelObjectEntryCommon *) D_8011AE98[arg1], 1); D_8011AE98[arg1] = &D_8011AE98[arg1][temp_t3 = D_8011AE98[arg1][1] & 0x3F]; } D_8011AE98[arg1] = (u8 *)(D_8011AEB0[arg1] + 4); @@ -781,7 +782,7 @@ void func_8000E2B4(void) { spawnObj.common.z = D_8011AD4A; spawnObj.unkC = D_8011AD4C; func_800521B8(1); - player = spawn_object(&spawnObj, 0x11); + player = spawn_object((LevelObjectEntryCommon *) &spawnObj, 0x11); gNumRacers = 1; (*gRacers)[0] = player; gRacersByPort[0] = player; @@ -957,9 +958,9 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { var_a0 = 0; } for (i = 0; i < 0x200; i++) { - (*D_8011AD58)[i] = NULL; + (*gSpawnObjectHeap)[i] = NULL; } - curObj = &(*D_8011AD58)[0]; + curObj = &(*gSpawnObjectHeap)[0]; curObj->segment.trans.flags = 2; curObj->segment.header = func_8000C718(var_a0); if (curObj->segment.header == NULL) { @@ -984,7 +985,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { curObj->segment.trans.scale = curObj->segment.header->scale; curObj->segment.camera.unk34 = curObj->segment.header->unk50 * curObj->segment.trans.scale; curObj->segment.object.opacity = 0xFF; - sp50 = func_80023E30(curObj->segment.header->behaviorId); + sp50 = obj_init_property_flags(curObj->segment.header->behaviorId); curObj->segment.header->unk52++; assetCount = curObj->segment.header->numberOfModelIds; objType = curObj->segment.header->modelType; @@ -1098,7 +1099,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { D_8011AE50 = NULL; D_8011AE54 = NULL; if (sp50 & 1) { - address = (u32 *) ((uintptr_t) address + func_8000F7EC(curObj, (Object_54 *) address)); + address = (u32 *) ((uintptr_t) address + init_object_shading(curObj, (ShadeProperties *) address)); } if (sp50 & 2) { sizeOfobj = init_object_shadow(curObj, (ShadowData *) address); @@ -1122,7 +1123,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { } } if (sp50 & 0x10) { - address = (u32 *) ((uintptr_t) address + func_8000FD20(curObj, (ObjectInteraction *) address)); + address = (u32 *) ((uintptr_t) address + init_object_interaction_data(curObj, (ObjectInteraction *) address)); } if (sp50 & 0x20) { address = (u32 *) ((uintptr_t) address + func_8000FD34(curObj, (Object_5C *) address)); @@ -1135,10 +1136,10 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { address = (u32 *) ((uintptr_t) address + func_8000FAC4(curObj, (Object_6C *) address)); } sizeOfobj = (uintptr_t) address - (uintptr_t) curObj; - if (curObj->segment.header->unk5A > 0) + if (curObj->segment.header->numLightSources > 0) { - curObj->unk70 = address; - sizeOfobj = (s32) ((uintptr_t) address + (curObj->segment.header->unk5A * 4)) - (uintptr_t) curObj; + curObj->lightData = address; + sizeOfobj = (s32) ((uintptr_t) address + (curObj->segment.header->numLightSources * 4)) - (uintptr_t) curObj; } newObj = allocate_from_pool_containing_slots((MemoryPoolSlot *) gObjectMemoryPool, sizeOfobj); if (newObj == NULL) { @@ -1159,39 +1160,39 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { // for (var_s0_5 = 0; var_s0_5 < objSize; var_s0_5++) { // u32 *temp = &newObj[var_s0_5]; - // temp = (u32)&(*D_8011AD58)[var_s0_5]; + // temp = (u32)&(*gSpawnObjectHeap)[var_s0_5]; // } //WRONG WRONG WRONG - Is this really just trying to set up the first several values in a weird way? for (var_s0_5 = 0; var_s0_5 < sizeOfobj; var_s0_5+=4) { - newObj[var_s0_5].segment.trans.y_rotation = (*D_8011AD58)[var_s0_5]->segment.trans.y_rotation; + newObj[var_s0_5].segment.trans.y_rotation = (*gSpawnObjectHeap)[var_s0_5]->segment.trans.y_rotation; } - if (newObj->unk58 != NULL) { - newObj->unk58 = (ShadowData *)(((uintptr_t) newObj + (uintptr_t) newObj->unk58) - (uintptr_t) D_8011AD58); + if (newObj->waterEffect != NULL) { + newObj->waterEffect = (ShadowData *)(((uintptr_t) newObj + (uintptr_t) newObj->waterEffect) - (uintptr_t) gSpawnObjectHeap); } if (newObj->shadow != NULL) { - newObj->shadow = (ShadowData *)(((uintptr_t) newObj + (uintptr_t)newObj->shadow) - (uintptr_t) D_8011AD58); + newObj->shadow = (ShadowData *)(((uintptr_t) newObj + (uintptr_t)newObj->shadow) - (uintptr_t) gSpawnObjectHeap); } - if (newObj->unk54 != NULL) { - newObj->unk54 = (Object_54 *)(((uintptr_t) newObj + (uintptr_t) newObj->unk54) - (uintptr_t) D_8011AD58); + if (newObj->shading != NULL) { + newObj->shading = (ShadeProperties *)(((uintptr_t) newObj + (uintptr_t) newObj->shading) - (uintptr_t) gSpawnObjectHeap); } if (newObj->unk64 != NULL) { - newObj->unk64 = (Object_64 *)(((uintptr_t) newObj + (uintptr_t) newObj->unk64) - (uintptr_t) D_8011AD58); + newObj->unk64 = (Object_64 *)(((uintptr_t) newObj + (uintptr_t) newObj->unk64) - (uintptr_t) gSpawnObjectHeap); } if (newObj->interactObj != NULL) { - newObj->interactObj = (ObjectInteraction *)(((uintptr_t) newObj + (uintptr_t) newObj->interactObj) - (uintptr_t) D_8011AD58); + newObj->interactObj = (ObjectInteraction *)(((uintptr_t) newObj + (uintptr_t) newObj->interactObj) - (uintptr_t) gSpawnObjectHeap); } if (newObj->unk5C != NULL) { - newObj->unk5C = (Object_5C *)(((uintptr_t) newObj + (uintptr_t) newObj->unk5C) - (uintptr_t) D_8011AD58); + newObj->unk5C = (Object_5C *)(((uintptr_t) newObj + (uintptr_t) newObj->unk5C) - (uintptr_t) gSpawnObjectHeap); } if (newObj->unk60 != NULL) { - newObj->unk60 = (Object_60 *)(((uintptr_t) newObj + (uintptr_t )newObj->unk60) - (uintptr_t) D_8011AD58); + newObj->unk60 = (Object_60 *)(((uintptr_t) newObj + (uintptr_t )newObj->unk60) - (uintptr_t) gSpawnObjectHeap); } if (newObj->segment.header->unk57 > 0) { - newObj->unk6C = (Object_6C *)(((uintptr_t) newObj + (uintptr_t )newObj->unk6C) - (uintptr_t) D_8011AD58); + newObj->unk6C = (Object_6C *)(((uintptr_t) newObj + (uintptr_t )newObj->unk6C) - (uintptr_t) gSpawnObjectHeap); } - if (newObj->segment.header->unk5A > 0) { - newObj->unk70 = (u32 *)(((uintptr_t) newObj + (uintptr_t) newObj->unk70) - (uintptr_t) D_8011AD58); + if (newObj->segment.header->numLightSources > 0) { + newObj->lightData = (u32 *)(((uintptr_t) newObj + (uintptr_t) newObj->lightData) - (uintptr_t) gSpawnObjectHeap); } newObj->unk68 = (Object_68 **)((uintptr_t) newObj + (uintptr_t) 0x80); if (arg1 & 1) { @@ -1219,7 +1220,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) { } return NULL; } - if (newObj->segment.header->unk5A > 0) { + if (newObj->segment.header->numLightSources > 0) { light_setup_light_sources(newObj); } func_800619F4(0); @@ -1257,44 +1258,48 @@ void objFreeAssets(Object *obj, s32 count, s32 objType) { */ void light_setup_light_sources(Object *obj) { s32 i; - for(i = 0; i < obj->segment.header->unk5A; i++) { - obj->unk70[i] = add_object_light(obj, &obj->segment.header->unk24[i]); + for (i = 0; i < obj->segment.header->numLightSources; i++) { + obj->lightData[i] = (u32) add_object_light(obj, &obj->segment.header->unk24[i]); } } -s32 func_8000F7EC(Object *arg0, Object_54 *arg1) { - s32 var_a2; - s32 var_v1; +/** + * Sets the shading properties of the object. +*/ +s32 init_object_shading(Object *obj, ShadeProperties *shadeData) { + s32 returnSize; + s32 i; - arg0->unk54 = arg1; - var_a2 = 0; - if (arg0->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) { - for (var_v1 = 0; arg0->unk68[var_v1] == NULL; var_v1++) { } - if ((arg0->unk68[var_v1] != NULL) && (arg0->unk68[var_v1]->objModel->unk40 != NULL)) { - func_8001D4B4(arg0->unk54, arg0->segment.header->unk28, arg0->segment.header->unk2C, 0, arg0->segment.header->unk3E, arg0->segment.header->unk40); - if (arg0->segment.header->pad38[5] != 0) { - arg0->unk54->unk4 = arg0->segment.header->pad38[2]; - arg0->unk54->unk5 = arg0->segment.header->pad38[3]; - arg0->unk54->unk6 = arg0->segment.header->pad38[4]; - arg0->unk54->unk7 = arg0->segment.header->pad38[5]; - arg0->unk54->unk8 = -(arg0->unk54->unk1C >> 1); - arg0->unk54->unkA = -(arg0->unk54->unk1E >> 1); - arg0->unk54->unkC = -(arg0->unk54->unk20 >> 1); + obj->shading = shadeData; + returnSize = 0; + if (obj->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) { + for (i = 0; obj->unk68[i] == NULL; i++) { } + if (obj->unk68[i] != NULL && obj->unk68[i]->objModel->unk40 != NULL) { + set_shading_properties(obj->shading, obj->segment.header->shadeBrightness, obj->segment.header->shadeAmbient, + 0, obj->segment.header->shadeAngleY, obj->segment.header->shadeAngleZ); + if (obj->segment.header->unk3D != 0) { + obj->shading->unk4 = obj->segment.header->unk3A; + obj->shading->unk5 = obj->segment.header->unk3B; + obj->shading->unk6 = obj->segment.header->unk3C; + obj->shading->unk7 = obj->segment.header->unk3D; + obj->shading->unk8 = -(obj->shading->unk1C >> 1); + obj->shading->unkA = -(obj->shading->unk1E >> 1); + obj->shading->unkC = -(obj->shading->unk20 >> 1); } - var_a2 = 0x30; + returnSize = sizeof(ShadeProperties); } - } else if (arg0->segment.header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) { - arg0->unk54->unk0 = 1.0f; - arg1->unk4 = 0xFF; - arg1->unk5 = 0xFF; - arg1->unk6 = 0xFF; - arg1->unk7 = 0; - var_a2 = 8; + } else if (obj->segment.header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) { + obj->shading->unk0 = 1.0f; + shadeData->unk4 = 0xFF; + shadeData->unk5 = 0xFF; + shadeData->unk6 = 0xFF; + shadeData->unk7 = 0; + returnSize = 8; } - if (var_a2 == 0) { - arg0->unk54 = NULL; + if (returnSize == 0) { + obj->shading = NULL; } - return (var_a2 & ~3) + 4; + return (returnSize & ~3) + 4; } s32 func_8000F99C(Object *obj) { @@ -1370,36 +1375,40 @@ s32 init_object_shadow(Object *obj, ShadowData *shadow) { if (((ObjectSegment *) obj)->header->unk32 && shadow->texture == NULL) { return 0; } - return 16; + return sizeof(ShadowData); } -s32 func_8000FC6C(Object *obj, ShadowData *obj58) { - obj->unk58 = obj58; - obj58->scale = obj->segment.header->unk8; - obj58->unkC = 0; - obj58->unkE = obj->segment.header->unk0 >> 8; - obj58->texture = NULL; +s32 func_8000FC6C(Object *obj, WaterEffect *shadow) { + obj->waterEffect = shadow; + shadow->scale = obj->segment.header->unk8; + shadow->unkC = 0; + shadow->unkE = obj->segment.header->unk0 >> 8; + shadow->texture = NULL; if (obj->segment.header->unk36) { - obj58->texture = load_texture(obj->segment.header->unk38); + shadow->texture = load_texture(obj->segment.header->unk38); } - obj58->unk8 = -1; - D_8011AE54 = obj58->texture; - if (obj->segment.header->unk36 && obj58->texture == NULL) { + shadow->unk8 = -1; + D_8011AE54 = shadow->texture; + if (obj->segment.header->unk36 && shadow->texture == NULL) { return 0; } - return 20; + return sizeof(WaterEffect); } -s32 func_8000FD20(Object *obj, ObjectInteraction *interaction) { - obj->interactObj = interaction; - interaction->distance = 0xFF; - return 40; +/** + * Writes object interatction properties to the object. + * Returns 40, to offset the pointer position used +*/ +s32 init_object_interaction_data(Object *obj, ObjectInteraction *interactObj) { + obj->interactObj = interactObj; + interactObj->distance = 0xFF; + return sizeof(ObjectInteraction); } s32 func_8000FD34(Object *arg0, Object_5C *arg1) { arg0->unk5C = arg1; func_80016BC4(arg0); - return 268; + return sizeof(Object_5C); } GLOBAL_ASM("asm/non_matchings/objects/func_8000FD54.s") @@ -1557,10 +1566,10 @@ void func_80010994(s32 updateRate) { } do { //FAKEMATCH lightUpdateLights(updateRate); - if (func_80032C6C() > 0) { + if (get_light_count() > 0) { for (i = D_8011AE60; i < objCount; i++) { obj = gObjPtrList[i]; - if (!(obj->segment.trans.flags & 0x8000) && (obj->unk54 != NULL)) { + if (!(obj->segment.trans.flags & 0x8000) && (obj->shading != NULL)) { func_80032C7C(obj); } } @@ -1913,10 +1922,10 @@ void render_3d_billboard(Object *obj) { hasPrimCol = FALSE; hasEnvCol = FALSE; flags = obj->segment.trans.flags | RENDER_Z_UPDATE | RENDER_FOG_ACTIVE; - if (obj->unk54 != NULL) { + if (obj->shading != NULL) { hasPrimCol = TRUE; hasEnvCol = TRUE; - intensity = obj->unk54->unk0 * 255.0f; + intensity = obj->shading->unk0 * 255.0f; } if (obj->behaviorId == BHV_BOMB_EXPLOSION) { @@ -1954,7 +1963,7 @@ void render_3d_billboard(Object *obj) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); } if (hasEnvCol) { - gDPSetEnvColor(gObjectCurrDisplayList++, obj->unk54->unk4, obj->unk54->unk5, obj->unk54->unk6, obj->unk54->unk7); + gDPSetEnvColor(gObjectCurrDisplayList++, obj->shading->unk4, obj->shading->unk5, obj->shading->unk6, obj->shading->unk7); } else if (obj->behaviorId == BHV_LAVA_SPURT) { hasEnvCol = TRUE; gDPSetEnvColor(gObjectCurrDisplayList++, 255, 255, 0, 255); @@ -2033,8 +2042,8 @@ void render_3d_model(Object *obj) { hasOpacity = FALSE; hasEnvCol = FALSE; intensity = 255; - if (obj->unk54 != NULL) { - intensity = (s32) (obj->unk54->unk0 * 255.0f * gCurrentLightIntensity); + if (obj->shading != NULL) { + intensity = (s32) (obj->shading->unk0 * 255.0f * gCurrentLightIntensity); hasOpacity = TRUE; hasEnvCol = TRUE; } @@ -2103,12 +2112,12 @@ void render_3d_model(Object *obj) { hasOpacity = TRUE; } if (hasEnvCol) { - gDPSetEnvColor(gObjectCurrDisplayList++, obj->unk54->unk4, obj->unk54->unk5, obj->unk54->unk6, obj->unk54->unk7); + gDPSetEnvColor(gObjectCurrDisplayList++, obj->shading->unk4, obj->shading->unk5, obj->shading->unk6, obj->shading->unk7); } else { gDPSetEnvColor(gObjectCurrDisplayList++, 255, 255, 255, 0); } if (obj->segment.header->unk71) { - gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->unk54->unk18, obj->unk54->unk19, obj->unk54->unk1A, alpha); + gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->shading->unk18, obj->shading->unk19, obj->shading->unk1A, alpha); func_8007B43C(); } else if (hasOpacity) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, intensity, intensity, intensity, alpha); @@ -2203,7 +2212,7 @@ void render_3d_model(Object *obj) { } if (meshBatch != -1) { if (obj->segment.header->unk71) { - gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->unk54->unk18, obj->unk54->unk19, obj->unk54->unk1A, alpha); + gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->shading->unk18, obj->shading->unk19, obj->shading->unk1A, alpha); func_8007B43C(); } func_800143A8(objModel, obj, meshBatch, 4, spB0); @@ -2426,7 +2435,7 @@ void func_80012F94(Object *obj) { var_t0 = numberOfModels; } obj->segment.object.numModelIDs = var_t0; - if ((obj->unk54 != NULL) && (obj->unk54->unk0 < 0.6f)) { + if ((obj->shading != NULL) && (obj->shading->unk0 < 0.6f)) { objRacer->lightFlags |= RACER_LIGHT_NIGHT; } else { objRacer->lightFlags &= ~RACER_LIGHT_NIGHT; @@ -3528,54 +3537,62 @@ Object *func_8001D214(s32 arg0) { UNUSED void func_8001D23C(UNUSED s32 arg0, UNUSED s32 arg1, UNUSED s32 arg2) { } -void func_8001D258(f32 arg0, f32 arg1, s16 arg2, s16 arg3, s16 arg4) { - func_8001D4B4(&D_8011AF30, arg0, arg1, arg2, arg3, arg4); +/** + * Applies shading properties to a global variable. + * Presumably intended for level geometry, which supports shading, but never uses it. +*/ +void set_world_shading(f32 brightness, f32 ambient, s16 angleX, s16 angleY, s16 angleZ) { + set_shading_properties((ShadeProperties *) &gWorldShading, brightness, ambient, angleX, angleY, angleZ); } -UNUSED void func_8001D2A0(Object *obj, f32 arg1, f32 arg2, s16 arg3, s16 arg4, s16 arg5) { - if (obj->unk54 != NULL) { - obj->unk54->unk28 += arg1; - if (obj->unk54->unk28 < 0.0f) { - obj->unk54->unk28 = 0.0f; - } else if (obj->unk54->unk28 > 1.0f) { - obj->unk54->unk28 = 1.0f; +/** + * Add values onto the existing properties of an objects shading. + * Resets the shading based off the new values. +*/ +UNUSED void add_shading_properties(Object *obj, f32 brightnessChange, f32 ambientChange, s16 angleX, s16 angleY, s16 angleZ) { + if (obj->shading != NULL) { + obj->shading->brightness += brightnessChange; + if (obj->shading->brightness < 0.0f) { + obj->shading->brightness = 0.0f; + } else if (obj->shading->brightness > 1.0f) { + obj->shading->brightness = 1.0f; } - obj->unk54->unk2C += arg2; - if (obj->unk54->unk2C < 0.0f) { - obj->unk54->unk2C = 0.0f; + obj->shading->ambient += ambientChange; + if (obj->shading->ambient < 0.0f) { + obj->shading->ambient = 0.0f; } - if (obj->unk54->unk2C >= 2.0f) { - obj->unk54->unk2C = 1.99f; + if (obj->shading->ambient >= 2.0f) { + obj->shading->ambient = 1.99f; } - func_8001D4B4(obj->unk54, obj->unk54->unk28, obj->unk54->unk2C, - (obj->unk54->unk22 + arg3), - (obj->unk54->unk24 + arg4), - (obj->unk54->unk26 + arg5)); - if (obj->segment.header->pad38[5] != 0) { - obj->unk54->unk4 = obj->segment.header->pad38[2]; - obj->unk54->unk5 = obj->segment.header->pad38[3]; - obj->unk54->unk6 = obj->segment.header->pad38[4]; - obj->unk54->unk7 = obj->segment.header->pad38[5]; - obj->unk54->unk8 = -(obj->unk54->unk1C >> 1); - obj->unk54->unkA = -(obj->unk54->unk1E >> 1); - obj->unk54->unkC = -(obj->unk54->unk20 >> 1); + set_shading_properties(obj->shading, obj->shading->brightness, obj->shading->ambient, + (obj->shading->unk22 + angleX), + (obj->shading->unk24 + angleY), + (obj->shading->unk26 + angleZ)); + if (obj->segment.header->unk3D != 0) { + obj->shading->unk4 = obj->segment.header->unk3A; + obj->shading->unk5 = obj->segment.header->unk3B; + obj->shading->unk6 = obj->segment.header->unk3C; + obj->shading->unk7 = obj->segment.header->unk3D; + obj->shading->unk8 = -(obj->shading->unk1C >> 1); + obj->shading->unkA = -(obj->shading->unk1E >> 1); + obj->shading->unkC = -(obj->shading->unk20 >> 1); } } } -void func_8001D4B4(Object_54 *arg0, f32 arg1, f32 arg2, s16 arg3, s16 arg4, s16 arg5) { +void set_shading_properties(ShadeProperties *arg0, f32 brightness, f32 ambient, s16 angleX, s16 angleY, s16 angleZ) { Vec3s angle; Vec3f velocityPos; - arg0->unk22 = arg3; - arg0->unk28 = arg1; - arg0->unk2C = arg2; + arg0->unk22 = angleX; + arg0->brightness = brightness; + arg0->ambient = ambient; arg0->unk0 = 1.0f; - arg0->unk24 = arg4; - arg0->unk26 = arg5; - angle.z = arg3; - angle.x = arg5; - angle.y = arg4; + arg0->unk24 = angleY; + arg0->unk26 = angleZ; + angle.z = angleX; + angle.x = angleZ; + angle.y = angleY; velocityPos.z = -16384.0f; velocityPos.x = 0.0f; velocityPos.y = 0.0f; @@ -3647,7 +3664,10 @@ void calc_dyn_light_and_env_map_for_object(ObjectModel *model, Object *object, s GLOBAL_ASM("asm/non_matchings/objects/calc_dynamic_lighting_for_object_1.s") GLOBAL_ASM("asm/non_matchings/objects/calc_env_mapping_for_object.s") -UNUSED void func_8001E13C(s16 arg0, s16 *arg1, s16 *arg2, s16 *arg3, s16 *arg4, s16 *arg5, s16 *arg6) { +/** + * Find the racer object representing the player and directly set position and angle to new values. +*/ +UNUSED void set_racer_position_and_angle(s16 player, s16 *x, s16 *y, s16 *z, s16 *angleZ, s16 *angleX, s16 *angleY) { Object *obj; Object_Racer *racer; s32 i; @@ -3657,13 +3677,13 @@ UNUSED void func_8001E13C(s16 arg0, s16 *arg1, s16 *arg2, s16 *arg3, s16 *arg4, if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { if (obj->behaviorId == BHV_RACER) { racer = &obj->unk64->racer; - if (arg0 == racer->playerIndex) { - *arg1 = obj->segment.trans.x_position; - *arg2 = obj->segment.trans.y_position; - *arg3 = obj->segment.trans.z_position; - *arg4 = obj->segment.trans.z_rotation; - *arg5 = obj->segment.trans.x_rotation; - *arg6 = obj->segment.trans.y_rotation; + if (player == racer->playerIndex) { + *x = obj->segment.trans.x_position; + *y = obj->segment.trans.y_position; + *z = obj->segment.trans.z_position; + *angleZ = obj->segment.trans.z_rotation; + *angleX = obj->segment.trans.x_rotation; + *angleY = obj->segment.trans.y_rotation; i = objCount; //Feels like it should be a break instead. } } @@ -4419,97 +4439,101 @@ void run_object_init_func(Object *obj, void *entry, s32 param) { } } -s32 func_80023E30(s32 behaviorId) { - s32 value = 0; - switch (behaviorId){ +/** + * Set initialisation property flags based off object ID. + * This includes things like shadow data, interaction and visuals. +*/ +s32 obj_init_property_flags(s32 behaviorId) { + s32 flags = OBJECT_SPAWN_NONE; + switch (behaviorId){ case BHV_RACER: - value = 0x1F; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK04 | OBJECT_SPAWN_UNK08 | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_SCENERY: - value = 0x13; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_WEAPON: - value = 0x16; - break; + flags = OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK04 | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_DINO_WHALE: - value = 0x1B; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08 | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_DOOR: case BHV_TT_DOOR: - value = 0x30; - break; + flags = OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_UNK20; + break; case BHV_WEAPON_BALLOON: case BHV_GOLDEN_BALLOON: - value = 0x12; - break; + flags = OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_HIT_TESTER: case BHV_HIT_TESTER_2: case BHV_SNOWBALL: case BHV_SNOWBALL_2: - value = 0x3B; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08 | OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_UNK20; + break; case BHV_SNOWBALL_3: case BHV_SNOWBALL_4: case BHV_HIT_TESTER_3: case BHV_HIT_TESTER_4: - value = 0x3A; - break; + flags = OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08 | OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_UNK20; + break; case BHV_UNK_18: - value = 0x04; - break; + flags = OBJECT_SPAWN_UNK04; + break; case BHV_STOPWATCH_MAN: - value = 0x1B; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08 | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_BANANA: case BHV_WORLD_KEY: case BHV_SILVER_COIN: case BHV_SILVER_COIN_2: - value = 0x12; - break; + flags = OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_SHADOW; + break; case BHV_LOG: - value = 0x30; - break; + flags = OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_UNK20; + break; case BHV_BRIDGE_WHALE_RAMP: - value = 0x39; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_UNK08 | OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_UNK20; + break; case BHV_RAMP_SWITCH: - value = 0x12; - break; + flags = OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_SHADOW; + break; case BHV_SEA_MONSTER: - value = 0x09; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_UNK08; + break; case BHV_COLLECT_EGG: - value = 0x12; - break; + flags = OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_UNK_30: - value = 0x09; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_UNK08; + break; case BHV_UNK_3F: - value = 0x09; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_UNK08; + break; case BHV_ANIMATED_OBJECT: case BHV_VEHICLE_ANIMATION: case BHV_PARK_WARDEN_2: case BHV_WIZPIG_SHIP: case BHV_ANIMATED_OBJECT_4: case BHV_PIG_ROCKETEER: - value = 0x0B; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08; + break; case BHV_CHARACTER_SELECT: - value = 0x0B; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08; + break; case BHV_TROPHY_CABINET: case BHV_DYNAMIC_LIGHT_OBJECT_2: case BHV_ROCKET_SIGNPOST: case BHV_ROCKET_SIGNPOST_2: - value = 0x31; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_INTERACTIVE | OBJECT_SPAWN_UNK20; + break; case BHV_UNK_5B: - value = 0x01; - break; + flags = OBJECT_SPAWN_UNK01; + break; case BHV_ANIMATED_OBJECT_2: - value = 0x0A; - break; + flags = OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08; + break; case BHV_EXIT: case BHV_CHECKPOINT: case BHV_WEAPON_2: @@ -4527,27 +4551,27 @@ s32 func_80023E30(s32 behaviorId) { case BHV_TELEPORT: case BHV_FIREBALL_OCTOWEAPON: case BHV_FIREBALL_OCTOWEAPON_2: - value = 0x10; - break; + flags = OBJECT_SPAWN_INTERACTIVE; + break; case BHV_ZIPPER_GROUND: - value = 0x12; - break; + flags = OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_ANIMATION: case BHV_CAMERA_ANIMATION: case BHV_BUTTERFLY: - value = 0x02; - break; + flags = OBJECT_SPAWN_SHADOW; + break; case BHV_PARK_WARDEN: - value = 0x1B; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08 | OBJECT_SPAWN_INTERACTIVE; + break; case BHV_FROG: - value = 0x0B; - break; + flags = OBJECT_SPAWN_UNK01 | OBJECT_SPAWN_SHADOW | OBJECT_SPAWN_UNK08; + break; case BHV_UNK_72: - value = 0x01; - break; + flags = OBJECT_SPAWN_UNK01; + break; } - return value; + return flags; } /** diff --git a/src/objects.h b/src/objects.h index f575f8b4..fe8eb098 100644 --- a/src/objects.h +++ b/src/objects.h @@ -160,6 +160,16 @@ enum ObjectInteractionFlags { INTERACT_FLAGS_UNK_8000 = (1 << 15), }; +enum ObjectSpawnFlags { + OBJECT_SPAWN_NONE, + OBJECT_SPAWN_UNK01 = (1 << 0), + OBJECT_SPAWN_SHADOW = (1 << 1), + OBJECT_SPAWN_UNK04 = (1 << 2), + OBJECT_SPAWN_UNK08 = (1 << 3), + OBJECT_SPAWN_INTERACTIVE = (1 << 4), + OBJECT_SPAWN_UNK20 = (1 << 5) +}; + typedef struct RacerShieldGfx { s16 x_position; s16 y_position; @@ -246,13 +256,6 @@ typedef struct struct_8000FC6C_2 { s16 unk38; } struct_8000FC6C_2; -typedef struct struct_8000FC6C_3 { - u8 unk0[0x40]; - struct_8000FC6C_2 *unk40; - u8 unk44[0x14]; - void *unk58; -} struct_8000FC6C_3; - typedef struct TTGhostTable { u8 mapId; u8 defaultVehicleId; @@ -369,8 +372,8 @@ void func_8001D1AC(void); void func_8001D1BC(s32 arg0); Object *func_8001D1E4(s32 *arg0); Object *func_8001D214(s32 arg0); -void func_8001D258(f32 arg0, f32 arg1, s16 arg2, s16 arg3, s16 arg4); -void func_8001D4B4(Object_54*, f32, f32, s16, s16, s16); +void set_world_shading(f32 brightness, f32 ambient, s16 angleX, s16 angleY, s16 angleZ); +void set_shading_properties(ShadeProperties *shading, f32 brightness, f32 ambient, s16 angleX, s16 angleY, s16 angleZ); void calc_dyn_light_and_env_map_for_object(ObjectModel *model, Object *object, s32 arg2, f32 intensity); s32 *get_misc_asset(s32 index); s32 func_8001E2EC(s32 arg0); @@ -399,7 +402,6 @@ void func_800245B4(s16 arg0); void object_do_player_tumble(Object *this); f32 catmull_rom_interpolation(f32*, s32, f32); f32 cubic_spline_interpolation(f32 *data, s32 index, f32 x, f32 *derivative); -unk800DC950 *add_object_light(Object*, ObjectHeader24 *); s16 func_8001C418(f32 yPos); void func_80021400(s32 arg0); s32 func_8001B668(s32 arg0); @@ -408,7 +410,7 @@ Object *get_racer_object_by_port(s32 index); void render_racer_shield(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *obj); void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *obj); void update_envmap_position(f32 arg0, f32 arg1, f32 arg2); -s32 func_8000FC6C(Object *arg0, ShadowData *arg1); +s32 func_8000FC6C(Object *obj, WaterEffect *shadow); s32 func_8001B2F0(s32 mapId); void render_3d_billboard(Object *obj); void render_misc_model(Object *obj, Vertex *verts, u32 numVertices, Triangle *triangles, u32 numTriangles, TextureHeader *tex, u32 flags, u32 offset, f32 yScale); @@ -428,15 +430,15 @@ s32 init_object_shadow(Object *obj, ShadowData *shadow); s32 func_800143A8(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, s32 someBool); void render_bubble_trap(ObjectTransform *trans, Object_68 *gfxData, Object *obj, s32 flags); void gParticlePtrList_flush(void); -s32 func_8000F7EC(Object *arg0, Object_54 *arg1); +s32 init_object_shading(Object *obj, ShadeProperties *shading); ObjectHeader *func_8000C718(s32 index); s32 func_8000F99C(Object *); void func_8000C844(s32 arg0); s32 func_800235DC(Object *obj, Object_64 *obj64); void light_setup_light_sources(Object *obj); -s32 func_8000FD20(Object *arg0, ObjectInteraction *arg1); +s32 init_object_interaction_data(Object *arg0, ObjectInteraction *arg1); s32 func_8000FAC4(Object *obj, Object_6C *arg1); -s32 func_80023E30(s32 behaviorId); +s32 obj_init_property_flags(s32 behaviorId); //Non Matching void calc_dynamic_lighting_for_object_1(Object *, ObjectModel *, s16, Object *, f32, f32); diff --git a/src/racer.c b/src/racer.c index 12718274..a66f538f 100644 --- a/src/racer.c +++ b/src/racer.c @@ -5579,7 +5579,7 @@ void get_timestamp_from_frames(s32 frameCount, s32 *minutes, s32 *seconds, s32 * */ void allocate_ghost_data(void) { gGhostData[0] = allocate_from_main_pool_safe((sizeof(GhostNode) + sizeof(GhostDataFrame)) * MAX_NUMBER_OF_GHOST_NODES, COLOUR_TAG_RED); - gGhostData[1] = (GhostHeader *) ((GhostNode *) gGhostData[0] + MAX_NUMBER_OF_GHOST_NODES); + gGhostData[1] = ((GhostNode *) gGhostData[0] + MAX_NUMBER_OF_GHOST_NODES); gGhostData[2] = NULL; // T.T. Ghost D_8011D5A0[0] = 0; D_8011D5A0[1] = 0; @@ -5612,7 +5612,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, gGhostData[temp_t8]); + temp_v0 = func_80074B34(arg0, (s16)mapId, arg2, arg3, arg4, &sp2E, (GhostHeader *) gGhostData[temp_t8]); if (arg3 != 0) { if (temp_v0 == 0) { D_8011D5A0[temp_t8] = sp2E; @@ -5657,7 +5657,7 @@ void free_tt_ghost_data(void) { } s32 func_80059B7C(s32 controllerIndex, s32 mapId, s16 arg2, s16 arg3, s16 arg4) { - return func_80075000(controllerIndex, (s16)mapId, arg2, arg3, arg4, D_8011D5A0[D_8011D59C], gGhostData[D_8011D59C]); + return func_80075000(controllerIndex, (s16)mapId, arg2, arg3, arg4, D_8011D5A0[D_8011D59C], (GhostHeader *) gGhostData[D_8011D59C]); } #ifdef NON_EQUIVALENT diff --git a/src/thread30_track_loading.c b/src/thread30_track_loading.c index 44a0b256..1f9d63b0 100644 --- a/src/thread30_track_loading.c +++ b/src/thread30_track_loading.c @@ -34,7 +34,7 @@ extern u64 gThread30Stack[0x400]; * Initalizes and starts thread30() */ void create_and_start_thread30(void) { - osCreateMesgQueue(&gThread30MesgQueue, gThread30Message, ARRAY_COUNT(gThread30Message)); + osCreateMesgQueue(&gThread30MesgQueue, &gThread30Message[0], ARRAY_COUNT(gThread30Message)); osCreateThread(&gThread30, 30, &thread30_track_loading, NULL, &gThread30Stack[0x400], 8); osStartThread(&gThread30); } diff --git a/src/thread3_main.c b/src/thread3_main.c index af7a86f5..8f269f54 100644 --- a/src/thread3_main.c +++ b/src/thread3_main.c @@ -184,7 +184,7 @@ void init_game(void) { s32 viMode; init_main_memory_pool(); - rzipInit(); // Initialise gzip decompression related things + init_rzip(); // Initialise gzip decompression related things sAntiPiracyTriggered = TRUE; if (check_imem_validity()) { sAntiPiracyTriggered = FALSE; @@ -378,9 +378,9 @@ void load_level_game(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle v alloc_displaylist_heap(numberOfPlayers); set_free_queue_state(0); func_80065EA0(); - func_800C3048(); + load_game_text_table(); load_level(levelId, numberOfPlayers, entranceId, vehicleId, gGameCurrentCutscene); - func_8009ECF0(get_viewport_count()); + init_hud(get_viewport_count()); func_800AE728(8, 0x10, 0x96, 0x64, 0x32, 0); func_8001BF20(); osSetTime(0); @@ -405,7 +405,7 @@ void unload_level_game(void) { transition_begin(&D_800DD3F4); func_800AE270(); func_800A003C(); - func_800C30CC(); + free_game_text_table(); gCurrDisplayList = gDisplayLists[gSPTaskNum]; gDPFullSync(gCurrDisplayList++); gSPEndDisplayList(gCurrDisplayList++); @@ -505,7 +505,7 @@ void ingame_logic_loop(s32 updateRate) { break; } } - func_800C3440(updateRate); + process_onscreen_textbox(updateRate); i = func_800C3400(); if (i != 0) { if (i == 2) { @@ -861,9 +861,9 @@ Vehicle get_level_default_vehicle(void) { void load_level_menu(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicleId, s32 cutsceneId) { set_free_queue_state(0); func_80065EA0(); - func_800C3048(); + load_game_text_table(); load_level(levelId, numberOfPlayers, entranceId, vehicleId, cutsceneId); - func_8009ECF0(get_viewport_count()); + init_hud(get_viewport_count()); func_800AE728(4, 4, 0x6E, 0x30, 0x20, 0); func_8001BF20(); osSetTime(0); @@ -882,7 +882,7 @@ void unload_level_menu(void) { transition_begin(&D_800DD3F4); func_800AE270(); func_800A003C(); - func_800C30CC(); + free_game_text_table(); set_free_queue_state(2); } gIsLoading = FALSE; @@ -898,7 +898,7 @@ void update_menu_scene(s32 updateRate) { gParticlePtrList_flush(); func_8001BF20(); render_scene(&gCurrDisplayList, &gGameCurrMatrix, &gGameCurrVertexList, &gGameCurrTriList, updateRate); - func_800C3440(updateRate); + process_onscreen_textbox(updateRate); init_rdp_and_framebuffer(&gCurrDisplayList); render_borders_for_multiplayer(&gCurrDisplayList); render_second_multiplayer_borders(&gCurrDisplayList); diff --git a/src/tracks.c b/src/tracks.c index c92ec0e0..563b27df 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -939,8 +939,8 @@ void render_level_geometry_and_objects(void) { render_object_shadow(obj, obj->shadow); } render_object(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, obj); - if (obj->unk58 != NULL && obj->segment.header->unk30 & 0x10) { - func_8002D670(obj, obj->unk58); + if (obj->waterEffect != NULL && obj->segment.header->unk30 & 0x10) { + render_object_water_effects(obj, obj->waterEffect); } } } @@ -961,8 +961,8 @@ void render_level_geometry_and_objects(void) { render_object_shadow(obj, obj->shadow); } render_object(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, obj); - if ((obj->unk58 != NULL) && (obj->segment.header->unk30 & 0x10)) { - func_8002D670(obj, obj->unk58); + if ((obj->waterEffect != NULL) && (obj->segment.header->unk30 & 0x10)) { + render_object_water_effects(obj, obj->waterEffect); } } } @@ -1006,8 +1006,8 @@ void render_level_geometry_and_objects(void) { render_object_shadow(obj, obj->shadow); } render_object(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, obj); - if ((obj->unk58 != 0) && (obj->segment.header->unk30 & 0x10)) { - func_8002D670(obj, obj->unk58); + if ((obj->waterEffect != 0) && (obj->segment.header->unk30 & 0x10)) { + render_object_water_effects(obj, obj->waterEffect); } } skip: @@ -1966,7 +1966,11 @@ void render_object_shadow(Object *obj, ShadowData *shadow) { } } -void func_8002D670(Object *obj, ShadowData *shadow) { +/** + * Used only by cars, render a texture on the surface of the water where the car is + * to give the wave effect. Works almost identically to shadows, since water can be wavy. + */ +void render_object_water_effects(Object *obj, WaterEffect *effect) { s32 i; s32 temp_a0; s32 temp_a3; @@ -1977,21 +1981,21 @@ void func_8002D670(Object *obj, ShadowData *shadow) { UNUSED s32 temp3; if (obj->segment.header->unk36 != 0) { - if ((shadow->unk8 != -1) && (D_8011B0C4 == 0)) { + if ((effect->unk8 != -1) && (D_8011B0C4 == 0)) { D_8011B0D0 = D_8011B0C8; - i = shadow->unk8; + i = effect->unk8; if (obj->segment.header->unk36 == 1) { D_8011B0D0 = D_8011B0C8; D_8011B0D0 += 2; if (get_distance_to_active_camera(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position) > 768.0f) { - i = shadow->unkA; + i = effect->unkA; } } flags = RENDER_FOG_ACTIVE | RENDER_Z_COMPARE; D_8011D360 = (DrawTexture *) D_8011D350[D_8011B0D0]; D_8011D330 = (Triangle *) D_8011D320[D_8011B0D0]; D_8011D348 = (Vertex *) D_8011D338[D_8011B0D0]; - while (i < shadow->unkA) { + while (i < effect->unkA) { load_and_set_texture_no_offset(&gSceneCurrDisplayList, D_8011D360[i].texture, flags); temp2 = D_8011D360[i].xOffset; // Fakematch temp3 = D_8011D360[i].yOffset; // Fakematch @@ -2017,9 +2021,9 @@ void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { s32 numViewports; Object **objects; s32 var_a0; - TextureHeader *texture; + TextureHeader* shadowTex; ShadowData *shadow; - ShadowData* shadow2; + WaterEffect *obj58; s32 playerIndex; D_8011B0CC = D_8011B0C8; @@ -2037,7 +2041,7 @@ void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { while (sp94 < sp90) { obj = objects[sp94]; objHeader = obj->segment.header; - shadow2 = obj->unk58; + obj58 = obj->waterEffect; shadow = obj->shadow; sp94 += 1; if (!(obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED)) { @@ -2047,7 +2051,7 @@ void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { if (obj->segment.trans.flags & OBJ_FLAGS_INVISIBLE) { shadow = NULL; } - if ((shadow != NULL && objHeader->unk32 == 2) || (shadow2 != NULL && objHeader->unk36 == 2)) { + if ((shadow != NULL && objHeader->unk32 == 2) || (obj58 != NULL && objHeader->unk36 == 2)) { dist = get_distance_to_active_camera(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); } else { dist = 0; @@ -2077,18 +2081,18 @@ void func_8002D8DC(s32 arg0, s32 arg1, s32 updateRate) { var_a0 = TRUE; } } - if ((!var_a0) && (obj->unk54 != NULL)) { + if ((!var_a0) && (obj->shading != NULL)) { func_8002DE30(obj); } } - if (shadow2 != NULL && shadow2->scale > 0.0f && arg1 == objHeader->unk36) { - shadow2->unk8 = -1; + if (obj58 != NULL && obj58->scale > 0.0f && arg1 == objHeader->unk36) { + obj58->unk8 = -1; D_8011D0D4 = 1.0f; - texture = shadow2->texture; - if (texture != NULL && updateRate != 0 && texture->numOfTextures != 0x100) { - shadow2->unkC += shadow2->unkE; - while (texture->numOfTextures < shadow2->unkC) { - shadow2->unkC -= texture->numOfTextures; + shadowTex = obj58->texture; + if (shadowTex != NULL && updateRate != 0 && shadowTex->numOfTextures != 0x100) { + obj58->unkC += obj58->unkE; + while (shadowTex->numOfTextures < obj58->unkC) { + obj58->unkC -= shadowTex->numOfTextures; } } @@ -2211,7 +2215,7 @@ loop_6: &vert[temp_t0->verticesArray[3]].x ) != 0) { var_s7 = 1; - obj->unk54->unk0 += (((1.0f - D_800DC884[temp_v1_2]) - obj->unk54->unk0) * 0.2); + obj->shading->unk0 += (((1.0f - D_800DC884[temp_v1_2]) - obj->shading->unk0) * 0.2); } } } @@ -2277,14 +2281,14 @@ void func_8002E234(Object *obj, s32 bool) { if (bool) { D_8011D0B8 = 0; - obj->unk58->unk8 = D_8011D364; - D_8011D0C0 = func_8007B46C(obj->unk58->texture, obj->unk58->unkC << 8); + obj->waterEffect->unk8 = D_8011D364; + D_8011D0C0 = func_8007B46C(obj->waterEffect->texture, obj->waterEffect->unkC << 8); D_8011D0CE = obj->segment.header->unk48 + yPos; D_8011D0CC = obj->segment.header->unk46 + yPos; if ((D_8011D384 == 0) || ((get_viewport_count() <= 0))) { D_8011D0C8 = 0; } - D_8011D0D8 = (obj->unk58->scale * character_scale); + D_8011D0D8 = (obj->waterEffect->scale * character_scale); D_8011D0DC = D_8011D0D8 * 10.0f; D_8011D0E0 = D_8011D0D8 * 10.0f; D_8011D0F0 = -1.0f; @@ -2348,8 +2352,8 @@ void func_8002E234(Object *obj, s32 bool) { } } if (D_8011C230 > 0) { - if ((obj->unk54 != NULL) && !bool) { - obj->unk54->unk0 = func_8002FA64(); + if ((obj->shading != NULL) && !bool) { + obj->shading->unk0 = func_8002FA64(); } func_8002F2AC(); func_8002F440(); @@ -2358,7 +2362,7 @@ void func_8002E234(Object *obj, s32 bool) { obj->shadow->unkA = D_8011D364; } else { - obj->unk58->unkA = D_8011D364; + obj->waterEffect->unkA = D_8011D364; } } #else diff --git a/src/tracks.h b/src/tracks.h index a2b0bb65..ec22d269 100644 --- a/src/tracks.h +++ b/src/tracks.h @@ -46,16 +46,6 @@ enum TriangleBatchFlags { BATCH_FLAGS_UNK80000000 = (1 << 31), }; -/* Size: 0x8 bytes */ -typedef struct unknown800DC874 { - union { - s8 unk00; - s32 dummy_force_alignment; // Not sure of a better way to do this. - } unk00_a; - u16 unk04; - s16 unk06; -} unknown800DC874; - typedef struct unk8011B120_unkC { f32 unk0; f32 unk4; @@ -145,20 +135,6 @@ enum WaveTypes { WATER_UNK_F = 15 }; -extern s32 D_800DC870; -extern FadeTransition gFullFadeToBlack; -extern FadeTransition gCircleFadeToBlack; - -extern f32 D_800DC884[10]; - -extern LevelModel *gCurrentLevelModel; -extern LevelHeader *gCurrentLevelHeader; - -extern s32 D_800DC920; -extern s32 D_800DC928; - -extern s8 D_800DC92C[24]; - s32 set_scene_viewport_num(s32 arg0); void func_800257D0(void); void spawn_skydome(s32 arg0); @@ -185,7 +161,7 @@ s32 check_if_inside_segment(Object *obj, s32 segmentIndex); s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos); void traverse_segments_bsp_tree(s32 nodeIndex, s32 segmentIndex, s32 segmentIndex2, u8 *segmentsOrder, s32 *segmentsOrderIndex); void render_level_geometry_and_objects(void); -void func_8002D670(Object *obj, ShadowData *shadow); +void render_object_water_effects(Object *obj, WaterEffect *shadow); void render_object_shadow(Object *obj, ShadowData *shadow); s32 should_segment_be_visible(LevelModelSegmentBoundingBox *bb); s32 check_if_in_draw_range(Object *obj);