From 3f37109e5946923b7a544c05770d88089d543d51 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 28 Apr 2023 14:54:27 -0400 Subject: [PATCH] Matches and documenting (#388) * Near match for render_3d_model * Stack diffs only on render_3d_model * Matched render_3d_model! * Delete accidentally added files. * Some naming of things * Match func_8007C660 * Update some more names * WIP func_80012F94 * Fix non equivalent build * Update func_80012F94 score * Update score --- README.md | 18 +- asm/math_util/coss.s | 2 +- asm/math_util/f32_matrix_dot.s | 1 + asm/math_util/f32_matrix_mult.s | 1 + asm/math_util/f32_matrix_to_s16_matrix.s | 1 + .../f32_vec3_apply_object_rotation.s | 1 + .../f32_vec3_apply_object_rotation2.s | 1 + .../f32_vec3_apply_object_rotation3.s | 1 + asm/math_util/func_80070058.s | 55 ++ asm/math_util/object_transform_to_matrix_2.s | 56 -- asm/math_util/s16_matrix_rotate.s | 1 + asm/non_matchings/game_ui/func_800AA600.s | 2 +- asm/non_matchings/menu/func_8009CA60.s | 2 +- asm/non_matchings/objects/func_800135B8.s | 6 +- asm/non_matchings/objects/render_3d_model.s | 783 ------------------ asm/non_matchings/particles/func_800AF714.s | 4 +- asm/non_matchings/particles/func_800B3740.s | 2 +- .../textures_sprites/func_8007C660.s | 139 ---- asm/non_matchings/waves/func_800BA8E4.s | 4 +- include/enums.h | 6 +- include/structs.h | 5 +- src/camera.c | 7 +- src/camera.h | 2 +- src/game.c | 4 +- src/math_util.c | 12 +- src/object_functions.c | 1 - src/objects.c | 352 +++++--- src/objects.h | 6 +- src/save_data.c | 1 + src/textures_sprites.c | 32 +- src/unknown_0255E0.c | 10 +- src/weather.c | 11 +- src/weather.h | 4 +- 33 files changed, 407 insertions(+), 1126 deletions(-) create mode 100644 asm/math_util/func_80070058.s delete mode 100644 asm/non_matchings/objects/render_3d_model.s delete mode 100644 asm/non_matchings/textures_sprites/func_8007C660.s diff --git a/README.md b/README.md index 910f2305..efca1b09 100644 --- a/README.md +++ b/README.md @@ -128,25 +128,25 @@ s32 is_drumstick_unlocked(void) { ``` -As of April 24, 2023, this is our current score: +As of April 28, 2023, this is our current score: ``` ================================================= ADVENTURE ONE (ASM -> C Decompilation) - ---------------- 51.18% Complete ---------------- - # Decompiled functions: 1501 - # GLOBAL_ASM remaining: 331 + ---------------- 51.57% Complete ---------------- + # Decompiled functions: 1503 + # GLOBAL_ASM remaining: 329 # NON_MATCHING functions: 12 # NON_EQUIVALENT WIP functions: 64 ------------------ Game Status ------------------ - Balloons: 25/47, Keys: 3/4, Trophies: 2/5 + Balloons: 26/47, Keys: 3/4, Trophies: 2/5 T.T. Amulets: 2/4, Wizpig Amulets: 2/4 ------------------------------------------------- - We are racing in Treasure Caves. (Lap 3/3) + We are racing the octopus boss Bubbler. (Lap 1/3) ================================================= ADVENTURE TWO (Cleanup & Documentation) - ---------------- 25.01% Complete ---------------- - # Documented functions: 511 - # Undocumented remaining: 1053 + ---------------- 25.19% Complete ---------------- + # Documented functions: 516 + # Undocumented remaining: 1048 ------------------ Game Status ------------------ Balloons: 12/47, Keys: 1/4, Trophies: 1/5 T.T. Amulets: 1/4, Wizpig Amulets: 1/4 diff --git a/asm/math_util/coss.s b/asm/math_util/coss.s index ae17eebc..e757bb5b 100644 --- a/asm/math_util/coss.s +++ b/asm/math_util/coss.s @@ -1,4 +1,4 @@ -glabel coss +glabel coss /* Official Name: mathCosInterp */ /* 07142C 8007082C 24844000 */ addiu $a0, $a0, 0x4000 glabel sins /* Official name: mathSinInterp */ /* 071430 80070830 00041440 */ sll $v0, $a0, 0x11 diff --git a/asm/math_util/f32_matrix_dot.s b/asm/math_util/f32_matrix_dot.s index fbd5bc4a..6dd7d74c 100644 --- a/asm/math_util/f32_matrix_dot.s +++ b/asm/math_util/f32_matrix_dot.s @@ -1,3 +1,4 @@ +/* Official name: mathMtxFastXFMF */ glabel f32_matrix_dot /* 0702EC 8006F6EC C4A40000 */ lwc1 $f4, ($a1) /* 0702F0 8006F6F0 C48A0000 */ lwc1 $f10, ($a0) diff --git a/asm/math_util/f32_matrix_mult.s b/asm/math_util/f32_matrix_mult.s index 2de278f3..29a86658 100644 --- a/asm/math_util/f32_matrix_mult.s +++ b/asm/math_util/f32_matrix_mult.s @@ -1,3 +1,4 @@ +/* Official name: mathMtxCatF */ glabel f32_matrix_mult /* 070368 8006F768 27BDFFF8 */ addiu $sp, $sp, -8 /* 07036C 8006F76C F7A20000 */ sdc1 $f2, ($sp) diff --git a/asm/math_util/f32_matrix_to_s16_matrix.s b/asm/math_util/f32_matrix_to_s16_matrix.s index 00bc918d..808052bd 100644 --- a/asm/math_util/f32_matrix_to_s16_matrix.s +++ b/asm/math_util/f32_matrix_to_s16_matrix.s @@ -1,3 +1,4 @@ +/* Official Name: mathMtxF2L */ glabel f32_matrix_to_s16_matrix /* 070470 8006F870 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 070474 8006F874 44816000 */ mtc1 $at, $f12 diff --git a/asm/math_util/f32_vec3_apply_object_rotation.s b/asm/math_util/f32_vec3_apply_object_rotation.s index 53e69dc8..3db6a355 100644 --- a/asm/math_util/f32_vec3_apply_object_rotation.s +++ b/asm/math_util/f32_vec3_apply_object_rotation.s @@ -1,3 +1,4 @@ +/* Official Name: mathOneFloatRPY */ glabel f32_vec3_apply_object_rotation /* 070F20 80070320 27BDFFF8 */ addiu $sp, $sp, -8 /* 070F24 80070324 FFBF0000 */ sd $ra, ($sp) diff --git a/asm/math_util/f32_vec3_apply_object_rotation2.s b/asm/math_util/f32_vec3_apply_object_rotation2.s index 7387214c..ab26d0cd 100644 --- a/asm/math_util/f32_vec3_apply_object_rotation2.s +++ b/asm/math_util/f32_vec3_apply_object_rotation2.s @@ -1,3 +1,4 @@ +/* Official Name: mathOneFloatYPR */ glabel f32_vec3_apply_object_rotation2 /* 070FD8 800703D8 27BDFFF8 */ addiu $sp, $sp, -8 /* 070FDC 800703DC FFBF0000 */ sd $ra, ($sp) diff --git a/asm/math_util/f32_vec3_apply_object_rotation3.s b/asm/math_util/f32_vec3_apply_object_rotation3.s index e0f738cd..da480cc1 100644 --- a/asm/math_util/f32_vec3_apply_object_rotation3.s +++ b/asm/math_util/f32_vec3_apply_object_rotation3.s @@ -1,3 +1,4 @@ +/* Official Name: mathOneFloatPY */ glabel f32_vec3_apply_object_rotation3 /* 071090 80070490 27BDFFF8 */ addiu $sp, $sp, -8 /* 071094 80070494 FFBF0000 */ sd $ra, ($sp) diff --git a/asm/math_util/func_80070058.s b/asm/math_util/func_80070058.s new file mode 100644 index 00000000..b7a8a059 --- /dev/null +++ b/asm/math_util/func_80070058.s @@ -0,0 +1,55 @@ +glabel func_80070058 +/* 070C58 80070058 27BDFFF8 */ addiu $sp, $sp, -8 +/* 070C5C 8007005C 3C013780 */ li $at, 0x37800000 # 0.000015 +/* 070C60 80070060 FFBF0000 */ sd $ra, ($sp) +/* 070C64 80070064 00803825 */ move $a3, $a0 +/* 070C68 80070068 44819000 */ mtc1 $at, $f18 +/* 070C6C 8007006C 0C01C20C */ jal sins +/* 070C70 80070070 84A40000 */ lh $a0, ($a1) +/* 070C74 80070074 44820000 */ mtc1 $v0, $f0 +/* 070C78 80070078 84A40000 */ lh $a0, ($a1) +/* 070C7C 8007007C 46800020 */ cvt.s.w $f0, $f0 +/* 070C80 80070080 46120002 */ mul.s $f0, $f0, $f18 +/* 070C84 80070084 0C01C20B */ jal coss +/* 070C88 80070088 00000000 */ nop +/* 070C8C 8007008C 44821000 */ mtc1 $v0, $f2 +/* 070C90 80070090 84A40002 */ lh $a0, 2($a1) +/* 070C94 80070094 468010A0 */ cvt.s.w $f2, $f2 +/* 070C98 80070098 46121082 */ mul.s $f2, $f2, $f18 +/* 070C9C 8007009C 0C01C20C */ jal sins +/* 070CA0 800700A0 00000000 */ nop +/* 070CA4 800700A4 44822000 */ mtc1 $v0, $f4 +/* 070CA8 800700A8 84A40002 */ lh $a0, 2($a1) +/* 070CAC 800700AC 46802120 */ cvt.s.w $f4, $f4 +/* 070CB0 800700B0 46122102 */ mul.s $f4, $f4, $f18 +/* 070CB4 800700B4 0C01C20B */ jal coss +/* 070CB8 800700B8 00000000 */ nop +/* 070CBC 800700BC 44823000 */ mtc1 $v0, $f6 +/* 070CC0 800700C0 84A40004 */ lh $a0, 4($a1) +/* 070CC4 800700C4 468031A0 */ cvt.s.w $f6, $f6 +/* 070CC8 800700C8 46123182 */ mul.s $f6, $f6, $f18 +/* 070CCC 800700CC 0C01C20C */ jal sins +/* 070CD0 800700D0 00000000 */ nop +/* 070CD4 800700D4 44824000 */ mtc1 $v0, $f8 +/* 070CD8 800700D8 84A40004 */ lh $a0, 4($a1) +/* 070CDC 800700DC 46804220 */ cvt.s.w $f8, $f8 +/* 070CE0 800700E0 46124202 */ mul.s $f8, $f8, $f18 +/* 070CE4 800700E4 0C01C20B */ jal coss +/* 070CE8 800700E8 00000000 */ nop +/* 070CEC 800700EC 44825000 */ mtc1 $v0, $f10 +/* 070CF0 800700F0 3C013F80 */ li $at, 0x3F800000 # 1.000000 +/* 070CF4 800700F4 ACE0000C */ sw $zero, 0xc($a3) +/* 070CF8 800700F8 468052A0 */ cvt.s.w $f10, $f10 +/* 070CFC 800700FC ACE0001C */ sw $zero, 0x1c($a3) +/* 070D00 80070100 ACE0002C */ sw $zero, 0x2c($a3) +/* 070D04 80070104 46125282 */ mul.s $f10, $f10, $f18 +/* 070D08 80070108 44819000 */ mtc1 $at, $f18 +/* 070D0C 8007010C 46060302 */ mul.s $f12, $f0, $f6 +/* 070D10 80070110 E4F2003C */ swc1 $f18, 0x3c($a3) +/* 070D14 80070114 DFBF0000 */ ld $ra, ($sp) +/* 070D18 80070118 27BD0008 */ addiu $sp, $sp, 8 +/* 070D1C 8007011C 460A1382 */ mul.s $f14, $f2, $f10 +/* 070D20 80070120 00000000 */ nop +/* 070D24 80070124 46080402 */ mul.s $f16, $f0, $f8 +/* 070D28 80070128 03E00008 */ jr $ra +/* 070D2C 8007012C 00000000 */ nop \ No newline at end of file diff --git a/asm/math_util/object_transform_to_matrix_2.s b/asm/math_util/object_transform_to_matrix_2.s index 5e263aa3..98493797 100644 --- a/asm/math_util/object_transform_to_matrix_2.s +++ b/asm/math_util/object_transform_to_matrix_2.s @@ -120,59 +120,3 @@ glabel object_transform_to_matrix_2 /* 070C4C 8007004C 27BD0008 */ addiu $sp, $sp, 8 /* 070C50 80070050 03E00008 */ jr $ra /* 070C54 80070054 00000000 */ nop - -/* 070C58 80070058 27BDFFF8 */ addiu $sp, $sp, -8 -/* 070C5C 8007005C 3C013780 */ li $at, 0x37800000 # 0.000015 -/* 070C60 80070060 FFBF0000 */ sd $ra, ($sp) -/* 070C64 80070064 00803825 */ move $a3, $a0 -/* 070C68 80070068 44819000 */ mtc1 $at, $f18 -/* 070C6C 8007006C 0C01C20C */ jal sins -/* 070C70 80070070 84A40000 */ lh $a0, ($a1) -/* 070C74 80070074 44820000 */ mtc1 $v0, $f0 -/* 070C78 80070078 84A40000 */ lh $a0, ($a1) -/* 070C7C 8007007C 46800020 */ cvt.s.w $f0, $f0 -/* 070C80 80070080 46120002 */ mul.s $f0, $f0, $f18 -/* 070C84 80070084 0C01C20B */ jal coss -/* 070C88 80070088 00000000 */ nop -/* 070C8C 8007008C 44821000 */ mtc1 $v0, $f2 -/* 070C90 80070090 84A40002 */ lh $a0, 2($a1) -/* 070C94 80070094 468010A0 */ cvt.s.w $f2, $f2 -/* 070C98 80070098 46121082 */ mul.s $f2, $f2, $f18 -/* 070C9C 8007009C 0C01C20C */ jal sins -/* 070CA0 800700A0 00000000 */ nop -/* 070CA4 800700A4 44822000 */ mtc1 $v0, $f4 -/* 070CA8 800700A8 84A40002 */ lh $a0, 2($a1) -/* 070CAC 800700AC 46802120 */ cvt.s.w $f4, $f4 -/* 070CB0 800700B0 46122102 */ mul.s $f4, $f4, $f18 -/* 070CB4 800700B4 0C01C20B */ jal coss -/* 070CB8 800700B8 00000000 */ nop -/* 070CBC 800700BC 44823000 */ mtc1 $v0, $f6 -/* 070CC0 800700C0 84A40004 */ lh $a0, 4($a1) -/* 070CC4 800700C4 468031A0 */ cvt.s.w $f6, $f6 -/* 070CC8 800700C8 46123182 */ mul.s $f6, $f6, $f18 -/* 070CCC 800700CC 0C01C20C */ jal sins -/* 070CD0 800700D0 00000000 */ nop -/* 070CD4 800700D4 44824000 */ mtc1 $v0, $f8 -/* 070CD8 800700D8 84A40004 */ lh $a0, 4($a1) -/* 070CDC 800700DC 46804220 */ cvt.s.w $f8, $f8 -/* 070CE0 800700E0 46124202 */ mul.s $f8, $f8, $f18 -/* 070CE4 800700E4 0C01C20B */ jal coss -/* 070CE8 800700E8 00000000 */ nop -/* 070CEC 800700EC 44825000 */ mtc1 $v0, $f10 -/* 070CF0 800700F0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 070CF4 800700F4 ACE0000C */ sw $zero, 0xc($a3) -/* 070CF8 800700F8 468052A0 */ cvt.s.w $f10, $f10 -/* 070CFC 800700FC ACE0001C */ sw $zero, 0x1c($a3) -/* 070D00 80070100 ACE0002C */ sw $zero, 0x2c($a3) -/* 070D04 80070104 46125282 */ mul.s $f10, $f10, $f18 -/* 070D08 80070108 44819000 */ mtc1 $at, $f18 -/* 070D0C 8007010C 46060302 */ mul.s $f12, $f0, $f6 -/* 070D10 80070110 E4F2003C */ swc1 $f18, 0x3c($a3) -/* 070D14 80070114 DFBF0000 */ ld $ra, ($sp) -/* 070D18 80070118 27BD0008 */ addiu $sp, $sp, 8 -/* 070D1C 8007011C 460A1382 */ mul.s $f14, $f2, $f10 -/* 070D20 80070120 00000000 */ nop -/* 070D24 80070124 46080402 */ mul.s $f16, $f0, $f8 -/* 070D28 80070128 03E00008 */ jr $ra -/* 070D2C 8007012C 00000000 */ nop - diff --git a/asm/math_util/s16_matrix_rotate.s b/asm/math_util/s16_matrix_rotate.s index 8398ede3..45429eb9 100644 --- a/asm/math_util/s16_matrix_rotate.s +++ b/asm/math_util/s16_matrix_rotate.s @@ -1,3 +1,4 @@ +/* Official name: fastShortReflection */ glabel s16_matrix_rotate /* 0705B8 8006F9B8 84880000 */ lh $t0, ($a0) /* 0705BC 8006F9BC 84AB0000 */ lh $t3, ($a1) diff --git a/asm/non_matchings/game_ui/func_800AA600.s b/asm/non_matchings/game_ui/func_800AA600.s index 54befad3..76df79db 100644 --- a/asm/non_matchings/game_ui/func_800AA600.s +++ b/asm/non_matchings/game_ui/func_800AA600.s @@ -594,7 +594,7 @@ glabel func_800AA600 /* 0ABAB4 800AAEB4 24846CFC */ addiu $a0, %lo(gHUDCurrDisplayList) # addiu $a0, $a0, 0x6cfc /* 0ABAB8 800AAEB8 02003025 */ move $a2, $s0 /* 0ABABC 800AAEBC 3C073F80 */ lui $a3, 0x3f80 -/* 0ABAC0 800AAEC0 0C01A521 */ jal func_80069484 +/* 0ABAC0 800AAEC0 0C01A521 */ jal camera_push_model_mtx /* 0ABAC4 800AAEC4 E7B20010 */ swc1 $f18, 0x10($sp) /* 0ABAC8 800AAEC8 3C098012 */ lui $t1, %hi(D_80126CF4) # $t1, 0x8012 /* 0ABACC 800AAECC 86190006 */ lh $t9, 6($s0) diff --git a/asm/non_matchings/menu/func_8009CA60.s b/asm/non_matchings/menu/func_8009CA60.s index 978e0998..77c03f59 100644 --- a/asm/non_matchings/menu/func_8009CA60.s +++ b/asm/non_matchings/menu/func_8009CA60.s @@ -167,7 +167,7 @@ glabel func_8009CA60 /* 09D8E0 8009CCE0 AFA8002C */ sw $t0, 0x2c($sp) /* 09D8E4 8009CCE4 02002025 */ move $a0, $s0 /* 09D8E8 8009CCE8 01B83021 */ addu $a2, $t5, $t8 -/* 09D8EC 8009CCEC 0C01A521 */ jal func_80069484 +/* 09D8EC 8009CCEC 0C01A521 */ jal camera_push_model_mtx /* 09D8F0 8009CCF0 E7B00010 */ swc1 $f16, 0x10($sp) /* 09D8F4 8009CCF4 3C0B800E */ lui $t3, %hi(gMenuImageStack) # $t3, 0x800e /* 09D8F8 8009CCF8 256BF75C */ addiu $t3, %lo(gMenuImageStack) # addiu $t3, $t3, -0x8a4 diff --git a/asm/non_matchings/objects/func_800135B8.s b/asm/non_matchings/objects/func_800135B8.s index d1ea96a6..824b10f2 100644 --- a/asm/non_matchings/objects/func_800135B8.s +++ b/asm/non_matchings/objects/func_800135B8.s @@ -39,7 +39,7 @@ glabel func_800135B8 /* 014230 80013630 01826821 */ addu $t5, $t4, $v0 /* 014234 80013634 AFAD0048 */ sw $t5, 0x48($sp) /* 014238 80013638 8DC40078 */ lw $a0, 0x78($t6) -/* 01423C 8001363C 0C004B8A */ jal func_80012E28 +/* 01423C 8001363C 0C004B8A */ jal object_do_player_tumble /* 014240 80013640 AFA50028 */ sw $a1, 0x28($sp) /* 014244 80013644 8FAF0078 */ lw $t7, 0x78($sp) /* 014248 80013648 44802000 */ mtc1 $zero, $f4 @@ -50,12 +50,12 @@ glabel func_800135B8 /* 01425C 8001365C 24A5AE90 */ addiu $a1, %lo(gObjectCurrMatrix) # addiu $a1, $a1, -0x5170 /* 014260 80013660 02002025 */ move $a0, $s0 /* 014264 80013664 3C073F80 */ lui $a3, 0x3f80 -/* 014268 80013668 0C01A521 */ jal func_80069484 +/* 014268 80013668 0C01A521 */ jal camera_push_model_mtx /* 01426C 8001366C E7A40010 */ swc1 $f4, 0x10($sp) /* 014270 80013670 8FB80078 */ lw $t8, 0x78($sp) /* 014274 80013674 00000000 */ nop /* 014278 80013678 8F040078 */ lw $a0, 0x78($t8) -/* 01427C 8001367C 0C004BCC */ jal objUndoPlayerTumble +/* 01427C 8001367C 0C004BCC */ jal object_undo_player_tumble /* 014280 80013680 00000000 */ nop /* 014284 80013684 8FA30050 */ lw $v1, 0x50($sp) /* 014288 80013688 00000000 */ nop diff --git a/asm/non_matchings/objects/render_3d_model.s b/asm/non_matchings/objects/render_3d_model.s deleted file mode 100644 index 3e3ce85b..00000000 --- a/asm/non_matchings/objects/render_3d_model.s +++ /dev/null @@ -1,783 +0,0 @@ -glabel render_3d_model -/* 012CC8 800120C8 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 012CCC 800120CC AFBF002C */ sw $ra, 0x2c($sp) -/* 012CD0 800120D0 AFB30028 */ sw $s3, 0x28($sp) -/* 012CD4 800120D4 AFB20024 */ sw $s2, 0x24($sp) -/* 012CD8 800120D8 AFB10020 */ sw $s1, 0x20($sp) -/* 012CDC 800120DC AFB0001C */ sw $s0, 0x1c($sp) -/* 012CE0 800120E0 808F003A */ lb $t7, 0x3a($a0) -/* 012CE4 800120E4 8C8E0068 */ lw $t6, 0x68($a0) -/* 012CE8 800120E8 000FC080 */ sll $t8, $t7, 2 -/* 012CEC 800120EC 01D8C821 */ addu $t9, $t6, $t8 -/* 012CF0 800120F0 8F300000 */ lw $s0, ($t9) -/* 012CF4 800120F4 00809025 */ move $s2, $a0 -/* 012CF8 800120F8 120002C6 */ beqz $s0, .L80012C14 -/* 012CFC 800120FC 240F00FF */ li $t7, 255 -/* 012D00 80012100 8E0D0000 */ lw $t5, ($s0) -/* 012D04 80012104 AFA000A8 */ sw $zero, 0xa8($sp) -/* 012D08 80012108 AFA000A4 */ sw $zero, 0xa4($sp) -/* 012D0C 8001210C AFAF00B8 */ sw $t7, 0xb8($sp) -/* 012D10 80012110 AFAD0078 */ sw $t5, 0x78($sp) -/* 012D14 80012114 8C830054 */ lw $v1, 0x54($a0) -/* 012D18 80012118 00000000 */ nop -/* 012D1C 8001211C 10600017 */ beqz $v1, .L8001217C -/* 012D20 80012120 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 012D24 80012124 44813000 */ mtc1 $at, $f6 -/* 012D28 80012128 C4640000 */ lwc1 $f4, ($v1) -/* 012D2C 8001212C 3C118012 */ lui $s1, %hi(D_8011AD30) # $s1, 0x8012 -/* 012D30 80012130 46062202 */ mul.s $f8, $f4, $f6 -/* 012D34 80012134 2631AD30 */ addiu $s1, %lo(D_8011AD30) # addiu $s1, $s1, -0x52d0 -/* 012D38 80012138 C62A0000 */ lwc1 $f10, ($s1) -/* 012D3C 8001213C 24190001 */ li $t9, 1 -/* 012D40 80012140 460A4102 */ mul.s $f4, $f8, $f10 -/* 012D44 80012144 240D0001 */ li $t5, 1 -/* 012D48 80012148 AFB900A8 */ sw $t9, 0xa8($sp) -/* 012D4C 8001214C AFAD00A4 */ sw $t5, 0xa4($sp) -/* 012D50 80012150 444EF800 */ cfc1 $t6, $31 -/* 012D54 80012154 00000000 */ nop -/* 012D58 80012158 35C10003 */ ori $at, $t6, 3 -/* 012D5C 8001215C 38210002 */ xori $at, $at, 2 -/* 012D60 80012160 44C1F800 */ ctc1 $at, $31 -/* 012D64 80012164 00000000 */ nop -/* 012D68 80012168 460021A4 */ cvt.w.s $f6, $f4 -/* 012D6C 8001216C 44183000 */ mfc1 $t8, $f6 -/* 012D70 80012170 44CEF800 */ ctc1 $t6, $31 -/* 012D74 80012174 AFB800B8 */ sw $t8, 0xb8($sp) -/* 012D78 80012178 00000000 */ nop -.L8001217C: -/* 012D7C 8001217C 864F0048 */ lh $t7, 0x48($s2) -/* 012D80 80012180 3C118012 */ lui $s1, %hi(D_8011AD30) # $s1, 0x8012 -/* 012D84 80012184 24010001 */ li $at, 1 -/* 012D88 80012188 15E10006 */ bne $t7, $at, .L800121A4 -/* 012D8C 8001218C 2631AD30 */ addiu $s1, %lo(D_8011AD30) # addiu $s1, $s1, -0x52d0 -/* 012D90 80012190 8E530064 */ lw $s3, 0x64($s2) -/* 012D94 80012194 0C004B8A */ jal func_80012E28 -/* 012D98 80012198 02402025 */ move $a0, $s2 -/* 012D9C 8001219C 10000003 */ b .L800121AC -/* 012DA0 800121A0 820E0020 */ lb $t6, 0x20($s0) -.L800121A4: -/* 012DA4 800121A4 00009825 */ move $s3, $zero -/* 012DA8 800121A8 820E0020 */ lb $t6, 0x20($s0) -.L800121AC: -/* 012DAC 800121AC 00000000 */ nop -/* 012DB0 800121B0 1DC00052 */ bgtz $t6, .L800122FC -/* 012DB4 800121B4 00000000 */ nop -/* 012DB8 800121B8 8218001F */ lb $t8, 0x1f($s0) -/* 012DBC 800121BC 24010002 */ li $at, 2 -/* 012DC0 800121C0 0018C880 */ sll $t9, $t8, 2 -/* 012DC4 800121C4 02196821 */ addu $t5, $s0, $t9 -/* 012DC8 800121C8 8DAF0004 */ lw $t7, 4($t5) -/* 012DCC 800121CC 00000000 */ nop -/* 012DD0 800121D0 AE4F0044 */ sw $t7, 0x44($s2) -/* 012DD4 800121D4 8203001E */ lb $v1, 0x1e($s0) -/* 012DD8 800121D8 00000000 */ nop -/* 012DDC 800121DC 14610005 */ bne $v1, $at, .L800121F4 -/* 012DE0 800121E0 00000000 */ nop -/* 012DE4 800121E4 0C01874C */ jal func_80061D30 -/* 012DE8 800121E8 02402025 */ move $a0, $s2 -/* 012DEC 800121EC 8203001E */ lb $v1, 0x1e($s0) -/* 012DF0 800121F0 00000000 */ nop -.L800121F4: -/* 012DF4 800121F4 10600033 */ beqz $v1, .L800122C4 -/* 012DF8 800121F8 00000000 */ nop -/* 012DFC 800121FC 8FAE0078 */ lw $t6, 0x78($sp) -/* 012E00 80012200 00000000 */ nop -/* 012E04 80012204 8DD80040 */ lw $t8, 0x40($t6) -/* 012E08 80012208 00000000 */ nop -/* 012E0C 8001220C 1300002D */ beqz $t8, .L800122C4 -/* 012E10 80012210 00000000 */ nop -/* 012E14 80012214 1260000B */ beqz $s3, .L80012244 -/* 012E18 80012218 24090001 */ li $t1, 1 -/* 012E1C 8001221C 827901D6 */ lb $t9, 0x1d6($s3) -/* 012E20 80012220 00000000 */ nop -/* 012E24 80012224 2B210005 */ slti $at, $t9, 5 -/* 012E28 80012228 10200006 */ beqz $at, .L80012244 -/* 012E2C 8001222C 00000000 */ nop -/* 012E30 80012230 866D0000 */ lh $t5, ($s3) -/* 012E34 80012234 2401FFFF */ li $at, -1 -/* 012E38 80012238 15A10002 */ bne $t5, $at, .L80012244 -/* 012E3C 8001223C 00000000 */ nop -/* 012E40 80012240 00004825 */ move $t1, $zero -.L80012244: -/* 012E44 80012244 0C019884 */ jal get_viewport_count -/* 012E48 80012248 AFA900A0 */ sw $t1, 0xa0($sp) -/* 012E4C 8001224C 8FA900A0 */ lw $t1, 0xa0($sp) -/* 012E50 80012250 10400002 */ beqz $v0, .L8001225C -/* 012E54 80012254 2401003F */ li $at, 63 -/* 012E58 80012258 00004825 */ move $t1, $zero -.L8001225C: -/* 012E5C 8001225C 820F001F */ lb $t7, 0x1f($s0) -/* 012E60 80012260 864D0048 */ lh $t5, 0x48($s2) -/* 012E64 80012264 000F7080 */ sll $t6, $t7, 2 -/* 012E68 80012268 020EC021 */ addu $t8, $s0, $t6 -/* 012E6C 8001226C 8F190004 */ lw $t9, 4($t8) -/* 012E70 80012270 15A10008 */ bne $t5, $at, .L80012294 -/* 012E74 80012274 AE590044 */ sw $t9, 0x44($s2) -/* 012E78 80012278 8FA40078 */ lw $a0, 0x78($sp) -/* 012E7C 8001227C 8E270000 */ lw $a3, ($s1) -/* 012E80 80012280 02402825 */ move $a1, $s2 -/* 012E84 80012284 0C0075B9 */ jal calc_dyn_light_and_env_map_for_object -/* 012E88 80012288 00003025 */ move $a2, $zero -/* 012E8C 8001228C 1000000D */ b .L800122C4 -/* 012E90 80012290 00000000 */ nop -.L80012294: -/* 012E94 80012294 11200007 */ beqz $t1, .L800122B4 -/* 012E98 80012298 02402825 */ move $a1, $s2 -/* 012E9C 8001229C 8FA40078 */ lw $a0, 0x78($sp) -/* 012EA0 800122A0 8E270000 */ lw $a3, ($s1) -/* 012EA4 800122A4 0C0075B9 */ jal calc_dyn_light_and_env_map_for_object -/* 012EA8 800122A8 2406FFFF */ li $a2, -1 -/* 012EAC 800122AC 10000005 */ b .L800122C4 -/* 012EB0 800122B0 00000000 */ nop -.L800122B4: -/* 012EB4 800122B4 8FA40078 */ lw $a0, 0x78($sp) -/* 012EB8 800122B8 8E260000 */ lw $a2, ($s1) -/* 012EBC 800122BC 0C00917C */ jal func_800245F0 -/* 012EC0 800122C0 02402825 */ move $a1, $s2 -.L800122C4: -/* 012EC4 800122C4 1260000C */ beqz $s3, .L800122F8 -/* 012EC8 800122C8 24190001 */ li $t9, 1 -/* 012ECC 800122CC 866F0000 */ lh $t7, ($s3) -/* 012ED0 800122D0 2401FFFF */ li $at, -1 -/* 012ED4 800122D4 15E10008 */ bne $t7, $at, .L800122F8 -/* 012ED8 800122D8 00000000 */ nop -/* 012EDC 800122DC 826E01D6 */ lb $t6, 0x1d6($s3) -/* 012EE0 800122E0 24180002 */ li $t8, 2 -/* 012EE4 800122E4 29C10005 */ slti $at, $t6, 5 -/* 012EE8 800122E8 10200003 */ beqz $at, .L800122F8 -/* 012EEC 800122EC 00000000 */ nop -/* 012EF0 800122F0 10000002 */ b .L800122FC -/* 012EF4 800122F4 A2180020 */ sb $t8, 0x20($s0) -.L800122F8: -/* 012EF8 800122F8 A2190020 */ sb $t9, 0x20($s0) -.L800122FC: -/* 012EFC 800122FC 820D001F */ lb $t5, 0x1f($s0) -/* 012F00 80012300 86590048 */ lh $t9, 0x48($s2) -/* 012F04 80012304 000D7880 */ sll $t7, $t5, 2 -/* 012F08 80012308 020F7021 */ addu $t6, $s0, $t7 -/* 012F0C 8001230C 8DD80004 */ lw $t8, 4($t6) -/* 012F10 80012310 2401000E */ li $at, 14 -/* 012F14 80012314 17210004 */ bne $t9, $at, .L80012328 -/* 012F18 80012318 AE580044 */ sw $t8, 0x44($s2) -/* 012F1C 8001231C 8FA40078 */ lw $a0, 0x78($sp) -/* 012F20 80012320 0C004499 */ jal func_80011264 -/* 012F24 80012324 02402825 */ move $a1, $s2 -.L80012328: -/* 012F28 80012328 8FAD0078 */ lw $t5, 0x78($sp) -/* 012F2C 8001232C 00000000 */ nop -/* 012F30 80012330 85A50052 */ lh $a1, 0x52($t5) -/* 012F34 80012334 00000000 */ nop -/* 012F38 80012338 10A0000A */ beqz $a1, .L80012364 -/* 012F3C 8001233C 00000000 */ nop -/* 012F40 80012340 85AF0050 */ lh $t7, 0x50($t5) -/* 012F44 80012344 00000000 */ nop -/* 012F48 80012348 19E00006 */ blez $t7, .L80012364 -/* 012F4C 8001234C 00000000 */ nop -/* 012F50 80012350 0C00444D */ jal func_80011134 -/* 012F54 80012354 02402025 */ move $a0, $s2 -/* 012F58 80012358 8E0E0000 */ lw $t6, ($s0) -/* 012F5C 8001235C 00000000 */ nop -/* 012F60 80012360 A5C00052 */ sh $zero, 0x52($t6) -.L80012364: -/* 012F64 80012364 44804000 */ mtc1 $zero, $f8 -/* 012F68 80012368 3C118012 */ lui $s1, %hi(gObjectCurrDisplayList) # $s1, 0x8012 -/* 012F6C 8001236C 3C078012 */ lui $a3, %hi(D_8011AD28) # $a3, 0x8012 -/* 012F70 80012370 2631AE8C */ addiu $s1, %lo(gObjectCurrDisplayList) # addiu $s1, $s1, -0x5174 -/* 012F74 80012374 8CE7AD28 */ lw $a3, %lo(D_8011AD28)($a3) -/* 012F78 80012378 3C058012 */ lui $a1, %hi(gObjectCurrMatrix) # $a1, 0x8012 -/* 012F7C 8001237C 24A5AE90 */ addiu $a1, %lo(gObjectCurrMatrix) # addiu $a1, $a1, -0x5170 -/* 012F80 80012380 02202025 */ move $a0, $s1 -/* 012F84 80012384 02403025 */ move $a2, $s2 -/* 012F88 80012388 0C01A521 */ jal func_80069484 -/* 012F8C 8001238C E7A80010 */ swc1 $f8, 0x10($sp) -/* 012F90 80012390 12600014 */ beqz $s3, .L800123E4 -/* 012F94 80012394 AFA000B0 */ sw $zero, 0xb0($sp) -/* 012F98 80012398 0C004BCC */ jal objUndoPlayerTumble -/* 012F9C 8001239C 02402025 */ move $a0, $s2 -/* 012FA0 800123A0 8258003B */ lb $t8, 0x3b($s2) -/* 012FA4 800123A4 02202025 */ move $a0, $s1 -/* 012FA8 800123A8 13000006 */ beqz $t8, .L800123C4 -/* 012FAC 800123AC 3C058012 */ lui $a1, %hi(gObjectCurrMatrix) # $a1, 0x8012 -/* 012FB0 800123B0 827901D6 */ lb $t9, 0x1d6($s3) -/* 012FB4 800123B4 00000000 */ nop -/* 012FB8 800123B8 2B210005 */ slti $at, $t9, 5 -/* 012FBC 800123BC 14200008 */ bnez $at, .L800123E0 -/* 012FC0 800123C0 00000000 */ nop -.L800123C4: -/* 012FC4 800123C4 8667016A */ lh $a3, 0x16a($s3) -/* 012FC8 800123C8 24A5AE90 */ addiu $a1, %lo(gObjectCurrMatrix) # addiu $a1, $a1, -0x5170 -/* 012FCC 800123CC 0C01A5E4 */ jal func_80069790 -/* 012FD0 800123D0 02003025 */ move $a2, $s0 -/* 012FD4 800123D4 240D0001 */ li $t5, 1 -/* 012FD8 800123D8 10000002 */ b .L800123E4 -/* 012FDC 800123DC AFAD00B0 */ sw $t5, 0xb0($sp) -.L800123E0: -/* 012FE0 800123E0 A660016A */ sh $zero, 0x16a($s3) -.L800123E4: -/* 012FE4 800123E4 92480039 */ lbu $t0, 0x39($s2) -/* 012FE8 800123E8 00000000 */ nop -/* 012FEC 800123EC 29010100 */ slti $at, $t0, 0x100 -/* 012FF0 800123F0 14200002 */ bnez $at, .L800123FC -/* 012FF4 800123F4 00000000 */ nop -/* 012FF8 800123F8 240800FF */ li $t0, 255 -.L800123FC: -/* 012FFC 800123FC 864F0048 */ lh $t7, 0x48($s2) -/* 013000 80012400 24010039 */ li $at, 57 -/* 013004 80012404 15E10002 */ bne $t7, $at, .L80012410 -/* 013008 80012408 00087043 */ sra $t6, $t0, 1 -/* 01300C 8001240C 01C04025 */ move $t0, $t6 -.L80012410: -/* 013010 80012410 290100FF */ slti $at, $t0, 0xff -/* 013014 80012414 10200002 */ beqz $at, .L80012420 -/* 013018 80012418 24180001 */ li $t8, 1 -/* 01301C 8001241C AFB800A8 */ sw $t8, 0xa8($sp) -.L80012420: -/* 013020 80012420 8FB900A4 */ lw $t9, 0xa4($sp) -/* 013024 80012424 3C0DFB00 */ lui $t5, 0xfb00 -/* 013028 80012428 13200014 */ beqz $t9, .L8001247C -/* 01302C 8001242C 00000000 */ nop -/* 013030 80012430 8E220000 */ lw $v0, ($s1) -/* 013034 80012434 3C0FFB00 */ lui $t7, 0xfb00 -/* 013038 80012438 244D0008 */ addiu $t5, $v0, 8 -/* 01303C 8001243C AE2D0000 */ sw $t5, ($s1) -/* 013040 80012440 AC4F0000 */ sw $t7, ($v0) -/* 013044 80012444 8E430054 */ lw $v1, 0x54($s2) -/* 013048 80012448 00000000 */ nop -/* 01304C 8001244C 906F0005 */ lbu $t7, 5($v1) -/* 013050 80012450 90780004 */ lbu $t8, 4($v1) -/* 013054 80012454 000F7400 */ sll $t6, $t7, 0x10 -/* 013058 80012458 906F0006 */ lbu $t7, 6($v1) -/* 01305C 8001245C 0018CE00 */ sll $t9, $t8, 0x18 -/* 013060 80012460 032EC025 */ or $t8, $t9, $t6 -/* 013064 80012464 000FCA00 */ sll $t9, $t7, 8 -/* 013068 80012468 906F0007 */ lbu $t7, 7($v1) -/* 01306C 8001246C 03197025 */ or $t6, $t8, $t9 -/* 013070 80012470 01CFC025 */ or $t8, $t6, $t7 -/* 013074 80012474 10000007 */ b .L80012494 -/* 013078 80012478 AC580004 */ sw $t8, 4($v0) -.L8001247C: -/* 01307C 8001247C 8E220000 */ lw $v0, ($s1) -/* 013080 80012480 240EFF00 */ li $t6, -256 -/* 013084 80012484 24590008 */ addiu $t9, $v0, 8 -/* 013088 80012488 AE390000 */ sw $t9, ($s1) -/* 01308C 8001248C AC4E0004 */ sw $t6, 4($v0) -/* 013090 80012490 AC4D0000 */ sw $t5, ($v0) -.L80012494: -/* 013094 80012494 8E4F0040 */ lw $t7, 0x40($s2) -/* 013098 80012498 00000000 */ nop -/* 01309C 8001249C 91F80071 */ lbu $t8, 0x71($t7) -/* 0130A0 800124A0 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0130A4 800124A4 13000017 */ beqz $t8, .L80012504 -/* 0130A8 800124A8 00000000 */ nop -/* 0130AC 800124AC 8E220000 */ lw $v0, ($s1) -/* 0130B0 800124B0 3C0DFA00 */ lui $t5, 0xfa00 -/* 0130B4 800124B4 24590008 */ addiu $t9, $v0, 8 -/* 0130B8 800124B8 AE390000 */ sw $t9, ($s1) -/* 0130BC 800124BC AC4D0000 */ sw $t5, ($v0) -/* 0130C0 800124C0 8E430054 */ lw $v1, 0x54($s2) -/* 0130C4 800124C4 311900FF */ andi $t9, $t0, 0xff -/* 0130C8 800124C8 906D0019 */ lbu $t5, 0x19($v1) -/* 0130CC 800124CC 906F0018 */ lbu $t7, 0x18($v1) -/* 0130D0 800124D0 000D7400 */ sll $t6, $t5, 0x10 -/* 0130D4 800124D4 906D001A */ lbu $t5, 0x1a($v1) -/* 0130D8 800124D8 000FC600 */ sll $t8, $t7, 0x18 -/* 0130DC 800124DC 030E7825 */ or $t7, $t8, $t6 -/* 0130E0 800124E0 000DC200 */ sll $t8, $t5, 8 -/* 0130E4 800124E4 01F87025 */ or $t6, $t7, $t8 -/* 0130E8 800124E8 01D96825 */ or $t5, $t6, $t9 -/* 0130EC 800124EC AC4D0004 */ sw $t5, 4($v0) -/* 0130F0 800124F0 0C01ED0F */ jal func_8007B43C -/* 0130F4 800124F4 AFA800B4 */ sw $t0, 0xb4($sp) -/* 0130F8 800124F8 8FA800B4 */ lw $t0, 0xb4($sp) -/* 0130FC 800124FC 1000001B */ b .L8001256C -/* 013100 80012500 290100FF */ slti $at, $t0, 0xff -.L80012504: -/* 013104 80012504 11E00012 */ beqz $t7, .L80012550 -/* 013108 80012508 3C0EFA00 */ lui $t6, 0xfa00 -/* 01310C 8001250C 8E220000 */ lw $v0, ($s1) -/* 013110 80012510 3C0EFA00 */ lui $t6, 0xfa00 -/* 013114 80012514 24580008 */ addiu $t8, $v0, 8 -/* 013118 80012518 AE380000 */ sw $t8, ($s1) -/* 01311C 8001251C AC4E0000 */ sw $t6, ($v0) -/* 013120 80012520 8FA300B8 */ lw $v1, 0xb8($sp) -/* 013124 80012524 00000000 */ nop -/* 013128 80012528 307900FF */ andi $t9, $v1, 0xff -/* 01312C 8001252C 00196E00 */ sll $t5, $t9, 0x18 -/* 013130 80012530 00197C00 */ sll $t7, $t9, 0x10 -/* 013134 80012534 01AFC025 */ or $t8, $t5, $t7 -/* 013138 80012538 00197200 */ sll $t6, $t9, 8 -/* 01313C 8001253C 030EC825 */ or $t9, $t8, $t6 -/* 013140 80012540 310D00FF */ andi $t5, $t0, 0xff -/* 013144 80012544 032D7825 */ or $t7, $t9, $t5 -/* 013148 80012548 10000007 */ b .L80012568 -/* 01314C 8001254C AC4F0004 */ sw $t7, 4($v0) -.L80012550: -/* 013150 80012550 8E220000 */ lw $v0, ($s1) -/* 013154 80012554 2419FFFF */ li $t9, -1 -/* 013158 80012558 24580008 */ addiu $t8, $v0, 8 -/* 01315C 8001255C AE380000 */ sw $t8, ($s1) -/* 013160 80012560 AC590004 */ sw $t9, 4($v0) -/* 013164 80012564 AC4E0000 */ sw $t6, ($v0) -.L80012568: -/* 013168 80012568 290100FF */ slti $at, $t0, 0xff -.L8001256C: -/* 01316C 8001256C 1020000B */ beqz $at, .L8001259C -/* 013170 80012570 02402825 */ move $a1, $s2 -/* 013174 80012574 8FAD00B0 */ lw $t5, 0xb0($sp) -/* 013178 80012578 8FA40078 */ lw $a0, 0x78($sp) -/* 01317C 8001257C 02402825 */ move $a1, $s2 -/* 013180 80012580 00003025 */ move $a2, $zero -/* 013184 80012584 24070004 */ li $a3, 4 -/* 013188 80012588 AFA800B4 */ sw $t0, 0xb4($sp) -/* 01318C 8001258C 0C0050EA */ jal func_800143A8 -/* 013190 80012590 AFAD0010 */ sw $t5, 0x10($sp) -/* 013194 80012594 10000009 */ b .L800125BC -/* 013198 80012598 AFA2009C */ sw $v0, 0x9c($sp) -.L8001259C: -/* 01319C 8001259C 8FAF00B0 */ lw $t7, 0xb0($sp) -/* 0131A0 800125A0 8FA40078 */ lw $a0, 0x78($sp) -/* 0131A4 800125A4 00003025 */ move $a2, $zero -/* 0131A8 800125A8 00003825 */ move $a3, $zero -/* 0131AC 800125AC AFA800B4 */ sw $t0, 0xb4($sp) -/* 0131B0 800125B0 0C0050EA */ jal func_800143A8 -/* 0131B4 800125B4 AFAF0010 */ sw $t7, 0x10($sp) -/* 0131B8 800125B8 AFA2009C */ sw $v0, 0x9c($sp) -.L800125BC: -/* 0131BC 800125BC 8E580040 */ lw $t8, 0x40($s2) -/* 0131C0 800125C0 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0131C4 800125C4 930E0071 */ lbu $t6, 0x71($t8) -/* 0131C8 800125C8 00000000 */ nop -/* 0131CC 800125CC 11C0001D */ beqz $t6, .L80012644 -/* 0131D0 800125D0 00000000 */ nop -/* 0131D4 800125D4 13200013 */ beqz $t9, .L80012624 -/* 0131D8 800125D8 3C0EFA00 */ lui $t6, 0xfa00 -/* 0131DC 800125DC 8E220000 */ lw $v0, ($s1) -/* 0131E0 800125E0 3C0FFA00 */ lui $t7, 0xfa00 -/* 0131E4 800125E4 244D0008 */ addiu $t5, $v0, 8 -/* 0131E8 800125E8 AE2D0000 */ sw $t5, ($s1) -/* 0131EC 800125EC AC4F0000 */ sw $t7, ($v0) -/* 0131F0 800125F0 8FA300B8 */ lw $v1, 0xb8($sp) -/* 0131F4 800125F4 00000000 */ nop -/* 0131F8 800125F8 307800FF */ andi $t8, $v1, 0xff -/* 0131FC 800125FC 00187600 */ sll $t6, $t8, 0x18 -/* 013200 80012600 0018CC00 */ sll $t9, $t8, 0x10 -/* 013204 80012604 01D96825 */ or $t5, $t6, $t9 -/* 013208 80012608 8FAE00B4 */ lw $t6, 0xb4($sp) -/* 01320C 8001260C 00187A00 */ sll $t7, $t8, 8 -/* 013210 80012610 01AFC025 */ or $t8, $t5, $t7 -/* 013214 80012614 31D900FF */ andi $t9, $t6, 0xff -/* 013218 80012618 03196825 */ or $t5, $t8, $t9 -/* 01321C 8001261C 10000007 */ b .L8001263C -/* 013220 80012620 AC4D0004 */ sw $t5, 4($v0) -.L80012624: -/* 013224 80012624 8E220000 */ lw $v0, ($s1) -/* 013228 80012628 2418FFFF */ li $t8, -1 -/* 01322C 8001262C 244F0008 */ addiu $t7, $v0, 8 -/* 013230 80012630 AE2F0000 */ sw $t7, ($s1) -/* 013234 80012634 AC580004 */ sw $t8, 4($v0) -/* 013238 80012638 AC4E0000 */ sw $t6, ($v0) -.L8001263C: -/* 01323C 8001263C 0C01ED15 */ jal func_8007B454 -/* 013240 80012640 00000000 */ nop -.L80012644: -/* 013244 80012644 8E420060 */ lw $v0, 0x60($s2) -/* 013248 80012648 00000000 */ nop -/* 01324C 8001264C 104000D4 */ beqz $v0, .L800129A0 -/* 013250 80012650 8FA50078 */ lw $a1, 0x78($sp) -/* 013254 80012654 8C590000 */ lw $t9, ($v0) -/* 013258 80012658 12600006 */ beqz $s3, .L80012674 -/* 01325C 8001265C AFB900AC */ sw $t9, 0xac($sp) -/* 013260 80012660 826D01D6 */ lb $t5, 0x1d6($s3) -/* 013264 80012664 24010003 */ li $at, 3 -/* 013268 80012668 15A10003 */ bne $t5, $at, .L80012678 -/* 01326C 8001266C 8FAF00AC */ lw $t7, 0xac($sp) -/* 013270 80012670 AFA000AC */ sw $zero, 0xac($sp) -.L80012674: -/* 013274 80012674 8FAF00AC */ lw $t7, 0xac($sp) -.L80012678: -/* 013278 80012678 8FA50078 */ lw $a1, 0x78($sp) -/* 01327C 8001267C 19E000C7 */ blez $t7, .L8001299C -/* 013280 80012680 00005025 */ move $t2, $zero -/* 013284 80012684 00005825 */ move $t3, $zero -.L80012688: -/* 013288 80012688 8E420060 */ lw $v0, 0x60($s2) -/* 01328C 8001268C 00000000 */ nop -/* 013290 80012690 004B7021 */ addu $t6, $v0, $t3 -/* 013294 80012694 8DD00004 */ lw $s0, 4($t6) -/* 013298 80012698 00000000 */ nop -/* 01329C 8001269C 86180006 */ lh $t8, 6($s0) -/* 0132A0 800126A0 00000000 */ nop -/* 0132A4 800126A4 33194000 */ andi $t9, $t8, 0x4000 -/* 0132A8 800126A8 172000B9 */ bnez $t9, .L80012990 -/* 0132AC 800126AC 8FB900AC */ lw $t9, 0xac($sp) -/* 0132B0 800126B0 8C4D002C */ lw $t5, 0x2c($v0) -/* 0132B4 800126B4 00000000 */ nop -/* 0132B8 800126B8 01AA7821 */ addu $t7, $t5, $t2 -/* 0132BC 800126BC 81E30000 */ lb $v1, ($t7) -/* 0132C0 800126C0 00000000 */ nop -/* 0132C4 800126C4 046000B2 */ bltz $v1, .L80012990 -/* 0132C8 800126C8 8FB900AC */ lw $t9, 0xac($sp) -/* 0132CC 800126CC 84AE0018 */ lh $t6, 0x18($a1) -/* 0132D0 800126D0 00000000 */ nop -/* 0132D4 800126D4 006E082A */ slt $at, $v1, $t6 -/* 0132D8 800126D8 102000AD */ beqz $at, .L80012990 -/* 0132DC 800126DC 8FB900AC */ lw $t9, 0xac($sp) -/* 0132E0 800126E0 8219003A */ lb $t9, 0x3a($s0) -/* 0132E4 800126E4 8E180068 */ lw $t8, 0x68($s0) -/* 0132E8 800126E8 00196880 */ sll $t5, $t9, 2 -/* 0132EC 800126EC 8CAE0014 */ lw $t6, 0x14($a1) -/* 0132F0 800126F0 0003C840 */ sll $t9, $v1, 1 -/* 0132F4 800126F4 030D7821 */ addu $t7, $t8, $t5 -/* 0132F8 800126F8 01D9C021 */ addu $t8, $t6, $t9 -/* 0132FC 800126FC 870D0000 */ lh $t5, ($t8) -/* 013300 80012700 8DEC0000 */ lw $t4, ($t7) -/* 013304 80012704 000D7880 */ sll $t7, $t5, 2 -/* 013308 80012708 8E4E0044 */ lw $t6, 0x44($s2) -/* 01330C 8001270C 01ED7821 */ addu $t7, $t7, $t5 -/* 013310 80012710 000F7840 */ sll $t7, $t7, 1 -/* 013314 80012714 01CF1021 */ addu $v0, $t6, $t7 -/* 013318 80012718 84590000 */ lh $t9, ($v0) -/* 01331C 8001271C 84580002 */ lh $t8, 2($v0) -/* 013320 80012720 44995000 */ mtc1 $t9, $f10 -/* 013324 80012724 844D0004 */ lh $t5, 4($v0) -/* 013328 80012728 46805020 */ cvt.s.w $f0, $f10 -/* 01332C 8001272C C608000C */ lwc1 $f8, 0xc($s0) -/* 013330 80012730 44982000 */ mtc1 $t8, $f4 -/* 013334 80012734 448D3000 */ mtc1 $t5, $f6 -/* 013338 80012738 468020A0 */ cvt.s.w $f2, $f4 -/* 01333C 8001273C C6040010 */ lwc1 $f4, 0x10($s0) -/* 013340 80012740 8E0E0040 */ lw $t6, 0x40($s0) -/* 013344 80012744 46004280 */ add.s $f10, $f8, $f0 -/* 013348 80012748 C6080014 */ lwc1 $f8, 0x14($s0) -/* 01334C 8001274C 46803320 */ cvt.s.w $f12, $f6 -/* 013350 80012750 E60A000C */ swc1 $f10, 0xc($s0) -/* 013354 80012754 24010001 */ li $at, 1 -/* 013358 80012758 46022180 */ add.s $f6, $f4, $f2 -/* 01335C 8001275C 00002025 */ move $a0, $zero -/* 013360 80012760 460C4280 */ add.s $f10, $f8, $f12 -/* 013364 80012764 E6060010 */ swc1 $f6, 0x10($s0) -/* 013368 80012768 E60A0014 */ swc1 $f10, 0x14($s0) -/* 01336C 8001276C 81CF0053 */ lb $t7, 0x53($t6) -/* 013370 80012770 8FB900B4 */ lw $t9, 0xb4($sp) -/* 013374 80012774 15E10003 */ bne $t7, $at, .L80012784 -/* 013378 80012778 3C0D8000 */ lui $t5, %hi(osCicId) # $t5, 0x8000 -/* 01337C 8001277C 10000002 */ b .L80012788 -/* 013380 80012780 2409010A */ li $t1, 266 -.L80012784: -/* 013384 80012784 2409010B */ li $t1, 267 -.L80012788: -/* 013388 80012788 2B2100FF */ slti $at, $t9, 0xff -/* 01338C 8001278C 10200002 */ beqz $at, .L80012798 -/* 013390 80012790 35380004 */ ori $t8, $t1, 4 -/* 013394 80012794 03004825 */ move $t1, $t8 -.L80012798: -/* 013398 80012798 8DAD0310 */ lw $t5, %lo(osCicId)($t5) -/* 01339C 8001279C 240117D7 */ li $at, 6103 -/* 0133A0 800127A0 11A10002 */ beq $t5, $at, .L800127AC -/* 0133A4 800127A4 00000000 */ nop -/* 0133A8 800127A8 24040001 */ li $a0, 1 -.L800127AC: -/* 0133AC 800127AC 1480006C */ bnez $a0, .L80012960 -/* 0133B0 800127B0 00000000 */ nop -/* 0133B4 800127B4 86020006 */ lh $v0, 6($s0) -/* 0133B8 800127B8 8FA300B8 */ lw $v1, 0xb8($sp) -/* 0133BC 800127BC 304E0080 */ andi $t6, $v0, 0x80 -/* 0133C0 800127C0 000E102B */ sltu $v0, $zero, $t6 -/* 0133C4 800127C4 10400005 */ beqz $v0, .L800127DC -/* 0133C8 800127C8 02202025 */ move $a0, $s1 -/* 0133CC 800127CC 8FA200AC */ lw $v0, 0xac($sp) -/* 0133D0 800127D0 00000000 */ nop -/* 0133D4 800127D4 38590003 */ xori $t9, $v0, 3 -/* 0133D8 800127D8 2F220001 */ sltiu $v0, $t9, 1 -.L800127DC: -/* 0133DC 800127DC 00024600 */ sll $t0, $v0, 0x18 -/* 0133E0 800127E0 0008C603 */ sra $t8, $t0, 0x18 -/* 0133E4 800127E4 12600007 */ beqz $s3, .L80012804 -/* 0133E8 800127E8 03004025 */ move $t0, $t8 -/* 0133EC 800127EC 926D01F7 */ lbu $t5, 0x1f7($s3) -/* 0133F0 800127F0 00000000 */ nop -/* 0133F4 800127F4 29A100FF */ slti $at, $t5, 0xff -/* 0133F8 800127F8 10200002 */ beqz $at, .L80012804 -/* 0133FC 800127FC 00000000 */ nop -/* 013400 80012800 00004025 */ move $t0, $zero -.L80012804: -/* 013404 80012804 1100002B */ beqz $t0, .L800128B4 -/* 013408 80012808 306E00FF */ andi $t6, $v1, 0xff -/* 01340C 8001280C 000E7E00 */ sll $t7, $t6, 0x18 -/* 013410 80012810 000ECC00 */ sll $t9, $t6, 0x10 -/* 013414 80012814 01F9C025 */ or $t8, $t7, $t9 -/* 013418 80012818 8FAF00B4 */ lw $t7, 0xb4($sp) -/* 01341C 8001281C 01C01825 */ move $v1, $t6 -/* 013420 80012820 000E6A00 */ sll $t5, $t6, 8 -/* 013424 80012824 030D7025 */ or $t6, $t8, $t5 -/* 013428 80012828 31F900FF */ andi $t9, $t7, 0xff -/* 01342C 8001282C 01D9C025 */ or $t8, $t6, $t9 -/* 013430 80012830 AFB80034 */ sw $t8, 0x34($sp) -/* 013434 80012834 A3A8008A */ sb $t0, 0x8a($sp) -/* 013438 80012838 AFA900A0 */ sw $t1, 0xa0($sp) -/* 01343C 8001283C AFAA00BC */ sw $t2, 0xbc($sp) -/* 013440 80012840 AFAB0030 */ sw $t3, 0x30($sp) -/* 013444 80012844 AFAC0074 */ sw $t4, 0x74($sp) -/* 013448 80012848 E7A00094 */ swc1 $f0, 0x94($sp) -/* 01344C 8001284C E7A20090 */ swc1 $f2, 0x90($sp) -/* 013450 80012850 0C004B26 */ jal func_80012C98 -/* 013454 80012854 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 013458 80012858 8E220000 */ lw $v0, ($s1) -/* 01345C 8001285C 83A8008A */ lb $t0, 0x8a($sp) -/* 013460 80012860 244D0008 */ addiu $t5, $v0, 8 -/* 013464 80012864 8FA900A0 */ lw $t1, 0xa0($sp) -/* 013468 80012868 8FAA00BC */ lw $t2, 0xbc($sp) -/* 01346C 8001286C 8FAB0030 */ lw $t3, 0x30($sp) -/* 013470 80012870 8FAC0074 */ lw $t4, 0x74($sp) -/* 013474 80012874 C7A00094 */ lwc1 $f0, 0x94($sp) -/* 013478 80012878 C7A20090 */ lwc1 $f2, 0x90($sp) -/* 01347C 8001287C C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 013480 80012880 AE2D0000 */ sw $t5, ($s1) -/* 013484 80012884 3C0FFB00 */ lui $t7, 0xfb00 -/* 013488 80012888 240EFF00 */ li $t6, -256 -/* 01348C 8001288C AC4E0004 */ sw $t6, 4($v0) -/* 013490 80012890 AC4F0000 */ sw $t7, ($v0) -/* 013494 80012894 8E220000 */ lw $v0, ($s1) -/* 013498 80012898 3C18FA00 */ lui $t8, 0xfa00 -/* 01349C 8001289C 24590008 */ addiu $t9, $v0, 8 -/* 0134A0 800128A0 AE390000 */ sw $t9, ($s1) -/* 0134A4 800128A4 AC580000 */ sw $t8, ($v0) -/* 0134A8 800128A8 8FAD0034 */ lw $t5, 0x34($sp) -/* 0134AC 800128AC 00000000 */ nop -/* 0134B0 800128B0 AC4D0004 */ sw $t5, 4($v0) -.L800128B4: -/* 0134B4 800128B4 3C058012 */ lui $a1, %hi(gObjectCurrMatrix) # $a1, 0x8012 -/* 0134B8 800128B8 3C068012 */ lui $a2, %hi(gObjectCurrVertexList) # $a2, 0x8012 -/* 0134BC 800128BC 24C6AE94 */ addiu $a2, %lo(gObjectCurrVertexList) # addiu $a2, $a2, -0x516c -/* 0134C0 800128C0 24A5AE90 */ addiu $a1, %lo(gObjectCurrMatrix) # addiu $a1, $a1, -0x5170 -/* 0134C4 800128C4 02202025 */ move $a0, $s1 -/* 0134C8 800128C8 02003825 */ move $a3, $s0 -/* 0134CC 800128CC AFAC0010 */ sw $t4, 0x10($sp) -/* 0134D0 800128D0 AFA90014 */ sw $t1, 0x14($sp) -/* 0134D4 800128D4 A3A8008A */ sb $t0, 0x8a($sp) -/* 0134D8 800128D8 AFAA00BC */ sw $t2, 0xbc($sp) -/* 0134DC 800128DC AFAB0030 */ sw $t3, 0x30($sp) -/* 0134E0 800128E0 E7A00094 */ swc1 $f0, 0x94($sp) -/* 0134E4 800128E4 E7A20090 */ swc1 $f2, 0x90($sp) -/* 0134E8 800128E8 0C01A145 */ jal render_sprite_billboard -/* 0134EC 800128EC E7AC008C */ swc1 $f12, 0x8c($sp) -/* 0134F0 800128F0 83A8008A */ lb $t0, 0x8a($sp) -/* 0134F4 800128F4 8FAA00BC */ lw $t2, 0xbc($sp) -/* 0134F8 800128F8 8FAB0030 */ lw $t3, 0x30($sp) -/* 0134FC 800128FC C7A00094 */ lwc1 $f0, 0x94($sp) -/* 013500 80012900 C7A20090 */ lwc1 $f2, 0x90($sp) -/* 013504 80012904 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 013508 80012908 11000015 */ beqz $t0, .L80012960 -/* 01350C 8001290C AE020078 */ sw $v0, 0x78($s0) -/* 013510 80012910 8E220000 */ lw $v0, ($s1) -/* 013514 80012914 3C0EBC00 */ lui $t6, (0xBC00000A >> 16) # lui $t6, 0xbc00 -/* 013518 80012918 244F0008 */ addiu $t7, $v0, 8 -/* 01351C 8001291C AE2F0000 */ sw $t7, ($s1) -/* 013520 80012920 35CE000A */ ori $t6, (0xBC00000A & 0xFFFF) # ori $t6, $t6, 0xa -/* 013524 80012924 AC4E0000 */ sw $t6, ($v0) -/* 013528 80012928 AC400004 */ sw $zero, 4($v0) -/* 01352C 8001292C E7AC008C */ swc1 $f12, 0x8c($sp) -/* 013530 80012930 E7A20090 */ swc1 $f2, 0x90($sp) -/* 013534 80012934 E7A00094 */ swc1 $f0, 0x94($sp) -/* 013538 80012938 AFAB0030 */ sw $t3, 0x30($sp) -/* 01353C 8001293C AFAA00BC */ sw $t2, 0xbc($sp) -/* 013540 80012940 0C004B3A */ jal func_80012CE8 -/* 013544 80012944 02202025 */ move $a0, $s1 -/* 013548 80012948 8FAA00BC */ lw $t2, 0xbc($sp) -/* 01354C 8001294C 8FAB0030 */ lw $t3, 0x30($sp) -/* 013550 80012950 C7A00094 */ lwc1 $f0, 0x94($sp) -/* 013554 80012954 C7A20090 */ lwc1 $f2, 0x90($sp) -/* 013558 80012958 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 01355C 8001295C 00000000 */ nop -.L80012960: -/* 013560 80012960 C604000C */ lwc1 $f4, 0xc($s0) -/* 013564 80012964 C6080010 */ lwc1 $f8, 0x10($s0) -/* 013568 80012968 46002181 */ sub.s $f6, $f4, $f0 -/* 01356C 8001296C C6040014 */ lwc1 $f4, 0x14($s0) -/* 013570 80012970 E606000C */ swc1 $f6, 0xc($s0) -/* 013574 80012974 46024281 */ sub.s $f10, $f8, $f2 -/* 013578 80012978 460C2181 */ sub.s $f6, $f4, $f12 -/* 01357C 8001297C E60A0010 */ swc1 $f10, 0x10($s0) -/* 013580 80012980 E6060014 */ swc1 $f6, 0x14($s0) -/* 013584 80012984 8FA50078 */ lw $a1, 0x78($sp) -/* 013588 80012988 00000000 */ nop -/* 01358C 8001298C 8FB900AC */ lw $t9, 0xac($sp) -.L80012990: -/* 013590 80012990 254A0001 */ addiu $t2, $t2, 1 -/* 013594 80012994 1559FF3C */ bne $t2, $t9, .L80012688 -/* 013598 80012998 256B0004 */ addiu $t3, $t3, 4 -.L8001299C: -/* 01359C 8001299C 8FA50078 */ lw $a1, 0x78($sp) -.L800129A0: -/* 0135A0 800129A0 12600055 */ beqz $s3, .L80012AF8 -/* 0135A4 800129A4 8FAF009C */ lw $t7, 0x9c($sp) -/* 0135A8 800129A8 8E700144 */ lw $s0, 0x144($s3) -/* 0135AC 800129AC 00000000 */ nop -/* 0135B0 800129B0 12000051 */ beqz $s0, .L80012AF8 -/* 0135B4 800129B4 8FAF009C */ lw $t7, 0x9c($sp) -/* 0135B8 800129B8 8E580040 */ lw $t8, 0x40($s2) -/* 0135BC 800129BC 00000000 */ nop -/* 0135C0 800129C0 83030058 */ lb $v1, 0x58($t8) -/* 0135C4 800129C4 00000000 */ nop -/* 0135C8 800129C8 0460004B */ bltz $v1, .L80012AF8 -/* 0135CC 800129CC 8FAF009C */ lw $t7, 0x9c($sp) -/* 0135D0 800129D0 84AD0018 */ lh $t5, 0x18($a1) -/* 0135D4 800129D4 00000000 */ nop -/* 0135D8 800129D8 006D082A */ slt $at, $v1, $t5 -/* 0135DC 800129DC 10200046 */ beqz $at, .L80012AF8 -/* 0135E0 800129E0 8FAF009C */ lw $t7, 0x9c($sp) -/* 0135E4 800129E4 820E003A */ lb $t6, 0x3a($s0) -/* 0135E8 800129E8 8E0F0068 */ lw $t7, 0x68($s0) -/* 0135EC 800129EC 000EC880 */ sll $t9, $t6, 2 -/* 0135F0 800129F0 8CAD0014 */ lw $t5, 0x14($a1) -/* 0135F4 800129F4 00037040 */ sll $t6, $v1, 1 -/* 0135F8 800129F8 01F9C021 */ addu $t8, $t7, $t9 -/* 0135FC 800129FC 01AE7821 */ addu $t7, $t5, $t6 -/* 013600 80012A00 85F90000 */ lh $t9, ($t7) -/* 013604 80012A04 8F0C0000 */ lw $t4, ($t8) -/* 013608 80012A08 0019C080 */ sll $t8, $t9, 2 -/* 01360C 80012A0C 8E4D0044 */ lw $t5, 0x44($s2) -/* 013610 80012A10 0319C021 */ addu $t8, $t8, $t9 -/* 013614 80012A14 0018C040 */ sll $t8, $t8, 1 -/* 013618 80012A18 01B81021 */ addu $v0, $t5, $t8 -/* 01361C 80012A1C 844E0000 */ lh $t6, ($v0) -/* 013620 80012A20 844F0002 */ lh $t7, 2($v0) -/* 013624 80012A24 448E4000 */ mtc1 $t6, $f8 -/* 013628 80012A28 84590004 */ lh $t9, 4($v0) -/* 01362C 80012A2C 46804020 */ cvt.s.w $f0, $f8 -/* 013630 80012A30 C610000C */ lwc1 $f16, 0xc($s0) -/* 013634 80012A34 448F5000 */ mtc1 $t7, $f10 -/* 013638 80012A38 44992000 */ mtc1 $t9, $f4 -/* 01363C 80012A3C 46100201 */ sub.s $f8, $f0, $f16 -/* 013640 80012A40 3C013FD0 */ li $at, 0x3FD00000 # 0.25 double -/* 013644 80012A44 468050A0 */ cvt.s.w $f2, $f10 -/* 013648 80012A48 44817800 */ mtc1 $at, $f15 -/* 01364C 80012A4C 44807000 */ mtc1 $zero, $f14 -/* 013650 80012A50 46802320 */ cvt.s.w $f12, $f4 -/* 013654 80012A54 C6120010 */ lwc1 $f18, 0x10($s0) -/* 013658 80012A58 24010001 */ li $at, 1 -/* 01365C 80012A5C 460042A1 */ cvt.d.s $f10, $f8 -/* 013660 80012A60 462E5102 */ mul.d $f4, $f10, $f14 -/* 013664 80012A64 460081A1 */ cvt.d.s $f6, $f16 -/* 013668 80012A68 3C058012 */ lui $a1, %hi(gObjectCurrMatrix) # $a1, 0x8012 -/* 01366C 80012A6C 3C068012 */ lui $a2, %hi(gObjectCurrVertexList) # $a2, 0x8012 -/* 013670 80012A70 24C6AE94 */ addiu $a2, %lo(gObjectCurrVertexList) # addiu $a2, $a2, -0x516c -/* 013674 80012A74 46243200 */ add.d $f8, $f6, $f4 -/* 013678 80012A78 24A5AE90 */ addiu $a1, %lo(gObjectCurrMatrix) # addiu $a1, $a1, -0x5170 -/* 01367C 80012A7C 462042A0 */ cvt.s.d $f10, $f8 -/* 013680 80012A80 240E010A */ li $t6, 266 -/* 013684 80012A84 46121101 */ sub.s $f4, $f2, $f18 -/* 013688 80012A88 E60A000C */ swc1 $f10, 0xc($s0) -/* 01368C 80012A8C 46002221 */ cvt.d.s $f8, $f4 -/* 013690 80012A90 462E4282 */ mul.d $f10, $f8, $f14 -/* 013694 80012A94 460091A1 */ cvt.d.s $f6, $f18 -/* 013698 80012A98 02202025 */ move $a0, $s1 -/* 01369C 80012A9C 02003825 */ move $a3, $s0 -/* 0136A0 80012AA0 462A3100 */ add.d $f4, $f6, $f10 -/* 0136A4 80012AA4 C6060014 */ lwc1 $f6, 0x14($s0) -/* 0136A8 80012AA8 46202220 */ cvt.s.d $f8, $f4 -/* 0136AC 80012AAC E6080010 */ swc1 $f8, 0x10($s0) -/* 0136B0 80012AB0 E7A60038 */ swc1 $f6, 0x38($sp) -/* 0136B4 80012AB4 C7AA0038 */ lwc1 $f10, 0x38($sp) -/* 0136B8 80012AB8 8E0D0040 */ lw $t5, 0x40($s0) -/* 0136BC 80012ABC 460A6201 */ sub.s $f8, $f12, $f10 -/* 0136C0 80012AC0 460041A1 */ cvt.d.s $f6, $f8 -/* 0136C4 80012AC4 46005121 */ cvt.d.s $f4, $f10 -/* 0136C8 80012AC8 462E3282 */ mul.d $f10, $f6, $f14 -/* 0136CC 80012ACC 462A2200 */ add.d $f8, $f4, $f10 -/* 0136D0 80012AD0 462041A0 */ cvt.s.d $f6, $f8 -/* 0136D4 80012AD4 E6060014 */ swc1 $f6, 0x14($s0) -/* 0136D8 80012AD8 81B80053 */ lb $t8, 0x53($t5) -/* 0136DC 80012ADC 00000000 */ nop -/* 0136E0 80012AE0 17010005 */ bne $t8, $at, .L80012AF8 -/* 0136E4 80012AE4 8FAF009C */ lw $t7, 0x9c($sp) -/* 0136E8 80012AE8 AFAC0010 */ sw $t4, 0x10($sp) -/* 0136EC 80012AEC 0C01A145 */ jal render_sprite_billboard -/* 0136F0 80012AF0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0136F4 80012AF4 8FAF009C */ lw $t7, 0x9c($sp) -.L80012AF8: -/* 0136F8 80012AF8 2401FFFF */ li $at, -1 -/* 0136FC 80012AFC 11E1002A */ beq $t7, $at, .L80012BA8 -/* 013700 80012B00 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 013704 80012B04 8E590040 */ lw $t9, 0x40($s2) -/* 013708 80012B08 00000000 */ nop -/* 01370C 80012B0C 932D0071 */ lbu $t5, 0x71($t9) -/* 013710 80012B10 00000000 */ nop -/* 013714 80012B14 11A00015 */ beqz $t5, .L80012B6C -/* 013718 80012B18 8FAD00B0 */ lw $t5, 0xb0($sp) -/* 01371C 80012B1C 8E220000 */ lw $v0, ($s1) -/* 013720 80012B20 3C0EFA00 */ lui $t6, 0xfa00 -/* 013724 80012B24 24580008 */ addiu $t8, $v0, 8 -/* 013728 80012B28 AE380000 */ sw $t8, ($s1) -/* 01372C 80012B2C AC4E0000 */ sw $t6, ($v0) -/* 013730 80012B30 8E430054 */ lw $v1, 0x54($s2) -/* 013734 80012B34 8FB800B4 */ lw $t8, 0xb4($sp) -/* 013738 80012B38 906E0019 */ lbu $t6, 0x19($v1) -/* 01373C 80012B3C 90790018 */ lbu $t9, 0x18($v1) -/* 013740 80012B40 000E7C00 */ sll $t7, $t6, 0x10 -/* 013744 80012B44 906E001A */ lbu $t6, 0x1a($v1) -/* 013748 80012B48 00196E00 */ sll $t5, $t9, 0x18 -/* 01374C 80012B4C 01AFC825 */ or $t9, $t5, $t7 -/* 013750 80012B50 000E6A00 */ sll $t5, $t6, 8 -/* 013754 80012B54 032D7825 */ or $t7, $t9, $t5 -/* 013758 80012B58 330E00FF */ andi $t6, $t8, 0xff -/* 01375C 80012B5C 01EEC825 */ or $t9, $t7, $t6 -/* 013760 80012B60 0C01ED0F */ jal func_8007B43C -/* 013764 80012B64 AC590004 */ sw $t9, 4($v0) -/* 013768 80012B68 8FAD00B0 */ lw $t5, 0xb0($sp) -.L80012B6C: -/* 01376C 80012B6C 8FA40078 */ lw $a0, 0x78($sp) -/* 013770 80012B70 8FA6009C */ lw $a2, 0x9c($sp) -/* 013774 80012B74 02402825 */ move $a1, $s2 -/* 013778 80012B78 24070004 */ li $a3, 4 -/* 01377C 80012B7C 0C0050EA */ jal func_800143A8 -/* 013780 80012B80 AFAD0010 */ sw $t5, 0x10($sp) -/* 013784 80012B84 8E580040 */ lw $t8, 0x40($s2) -/* 013788 80012B88 00000000 */ nop -/* 01378C 80012B8C 930F0071 */ lbu $t7, 0x71($t8) -/* 013790 80012B90 00000000 */ nop -/* 013794 80012B94 11E00004 */ beqz $t7, .L80012BA8 -/* 013798 80012B98 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 01379C 80012B9C 0C01ED15 */ jal func_8007B454 -/* 0137A0 80012BA0 00000000 */ nop -/* 0137A4 80012BA4 8FAE00A8 */ lw $t6, 0xa8($sp) -.L80012BA8: -/* 0137A8 80012BA8 3C0FFA00 */ lui $t7, 0xfa00 -/* 0137AC 80012BAC 15C00007 */ bnez $t6, .L80012BCC -/* 0137B0 80012BB0 00000000 */ nop -/* 0137B4 80012BB4 8E590040 */ lw $t9, 0x40($s2) -/* 0137B8 80012BB8 00000000 */ nop -/* 0137BC 80012BBC 932D0071 */ lbu $t5, 0x71($t9) -/* 0137C0 80012BC0 00000000 */ nop -/* 0137C4 80012BC4 11A00008 */ beqz $t5, .L80012BE8 -/* 0137C8 80012BC8 8FB900A4 */ lw $t9, 0xa4($sp) -.L80012BCC: -/* 0137CC 80012BCC 8E220000 */ lw $v0, ($s1) -/* 0137D0 80012BD0 240EFFFF */ li $t6, -1 -/* 0137D4 80012BD4 24580008 */ addiu $t8, $v0, 8 -/* 0137D8 80012BD8 AE380000 */ sw $t8, ($s1) -/* 0137DC 80012BDC AC4E0004 */ sw $t6, 4($v0) -/* 0137E0 80012BE0 AC4F0000 */ sw $t7, ($v0) -/* 0137E4 80012BE4 8FB900A4 */ lw $t9, 0xa4($sp) -.L80012BE8: -/* 0137E8 80012BE8 3C18FB00 */ lui $t8, 0xfb00 -/* 0137EC 80012BEC 13200007 */ beqz $t9, .L80012C0C -/* 0137F0 80012BF0 00000000 */ nop -/* 0137F4 80012BF4 8E220000 */ lw $v0, ($s1) -/* 0137F8 80012BF8 240FFF00 */ li $t7, -256 -/* 0137FC 80012BFC 244D0008 */ addiu $t5, $v0, 8 -/* 013800 80012C00 AE2D0000 */ sw $t5, ($s1) -/* 013804 80012C04 AC4F0004 */ sw $t7, 4($v0) -/* 013808 80012C08 AC580000 */ sw $t8, ($v0) -.L80012C0C: -/* 01380C 80012C0C 0C01A690 */ jal func_80069A40 -/* 013810 80012C10 02202025 */ move $a0, $s1 -.L80012C14: -/* 013814 80012C14 8FBF002C */ lw $ra, 0x2c($sp) -/* 013818 80012C18 8FB0001C */ lw $s0, 0x1c($sp) -/* 01381C 80012C1C 8FB10020 */ lw $s1, 0x20($sp) -/* 013820 80012C20 8FB20024 */ lw $s2, 0x24($sp) -/* 013824 80012C24 8FB30028 */ lw $s3, 0x28($sp) -/* 013828 80012C28 03E00008 */ jr $ra -/* 01382C 80012C2C 27BD00C0 */ addiu $sp, $sp, 0xc0 - diff --git a/asm/non_matchings/particles/func_800AF714.s b/asm/non_matchings/particles/func_800AF714.s index 4324213a..98bd3390 100644 --- a/asm/non_matchings/particles/func_800AF714.s +++ b/asm/non_matchings/particles/func_800AF714.s @@ -15,7 +15,7 @@ glabel func_800AF714 /* 0B0348 800AF748 8C970074 */ lw $s7, 0x74($a0) /* 0B034C 800AF74C 827E01D6 */ lb $fp, 0x1d6($s3) /* 0B0350 800AF750 00809025 */ move $s2, $a0 -/* 0B0354 800AF754 0C004B8A */ jal func_80012E28 +/* 0B0354 800AF754 0C004B8A */ jal object_do_player_tumble /* 0B0358 800AF758 00008025 */ move $s0, $zero /* 0B035C 800AF75C 8E4E0040 */ lw $t6, 0x40($s2) /* 0B0360 800AF760 24160002 */ li $s6, 2 @@ -347,7 +347,7 @@ glabel func_800AF714 /* 0B07FC 800AFBFC 1420FEE0 */ bnez $at, .L800AF780 /* 0B0800 800AFC00 01A0B825 */ move $s7, $t5 .L800AFC04: -/* 0B0804 800AFC04 0C004BCC */ jal objUndoPlayerTumble +/* 0B0804 800AFC04 0C004BCC */ jal object_undo_player_tumble /* 0B0808 800AFC08 02402025 */ move $a0, $s2 /* 0B080C 800AFC0C 8FBF003C */ lw $ra, 0x3c($sp) /* 0B0810 800AFC10 8FB00018 */ lw $s0, 0x18($sp) diff --git a/asm/non_matchings/particles/func_800B3740.s b/asm/non_matchings/particles/func_800B3740.s index 3854d9d5..bde4601c 100644 --- a/asm/non_matchings/particles/func_800B3740.s +++ b/asm/non_matchings/particles/func_800B3740.s @@ -129,7 +129,7 @@ glabel func_800B3740 /* 0B4524 800B3924 AFA30030 */ sw $v1, 0x30($sp) /* 0B4528 800B3928 AFAA0038 */ sw $t2, 0x38($sp) /* 0B452C 800B392C AFAB003C */ sw $t3, 0x3c($sp) -/* 0B4530 800B3930 0C01A521 */ jal func_80069484 +/* 0B4530 800B3930 0C01A521 */ jal camera_push_model_mtx /* 0B4534 800B3934 E7A40010 */ swc1 $f4, 0x10($sp) /* 0B4538 800B3938 8FA30030 */ lw $v1, 0x30($sp) /* 0B453C 800B393C 86270018 */ lh $a3, 0x18($s1) diff --git a/asm/non_matchings/textures_sprites/func_8007C660.s b/asm/non_matchings/textures_sprites/func_8007C660.s deleted file mode 100644 index d23b23a2..00000000 --- a/asm/non_matchings/textures_sprites/func_8007C660.s +++ /dev/null @@ -1,139 +0,0 @@ -# Unused -glabel func_8007C660 -/* 07D260 8007C660 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 07D264 8007C664 308F8000 */ andi $t7, $a0, 0x8000 -/* 07D268 8007C668 AFBF003C */ sw $ra, 0x3c($sp) -/* 07D26C 8007C66C AFBE0038 */ sw $fp, 0x38($sp) -/* 07D270 8007C670 AFB70034 */ sw $s7, 0x34($sp) -/* 07D274 8007C674 AFB60030 */ sw $s6, 0x30($sp) -/* 07D278 8007C678 AFB5002C */ sw $s5, 0x2c($sp) -/* 07D27C 8007C67C AFB40028 */ sw $s4, 0x28($sp) -/* 07D280 8007C680 AFB30024 */ sw $s3, 0x24($sp) -/* 07D284 8007C684 AFB20020 */ sw $s2, 0x20($sp) -/* 07D288 8007C688 AFB1001C */ sw $s1, 0x1c($sp) -/* 07D28C 8007C68C AFB00018 */ sw $s0, 0x18($sp) -/* 07D290 8007C690 11E00003 */ beqz $t7, .L8007C6A0 -/* 07D294 8007C694 AFA40040 */ sw $a0, 0x40($sp) -/* 07D298 8007C698 10000065 */ b .L8007C830 -/* 07D29C 8007C69C 00001025 */ move $v0, $zero -.L8007C6A0: -/* 07D2A0 8007C6A0 3C138012 */ lui $s3, %hi(D_80126370) # $s3, 0x8012 -/* 07D2A4 8007C6A4 26736370 */ addiu $s3, %lo(D_80126370) # addiu $s3, $s3, 0x6370 -/* 07D2A8 8007C6A8 8E780000 */ lw $t8, ($s3) -/* 07D2AC 8007C6AC 3C108012 */ lui $s0, %hi(gTextureAssetID) # $s0, 0x8012 -/* 07D2B0 8007C6B0 17000059 */ bnez $t8, .L8007C818 -/* 07D2B4 8007C6B4 26106338 */ addiu $s0, %lo(gTextureAssetID) # addiu $s0, $s0, 0x6338 -/* 07D2B8 8007C6B8 8E040000 */ lw $a0, ($s0) -/* 07D2BC 8007C6BC 3C05FF00 */ lui $a1, (0xFF00FFFF >> 16) # lui $a1, 0xff00 -/* 07D2C0 8007C6C0 0C01C327 */ jal allocate_from_main_pool_safe -/* 07D2C4 8007C6C4 34A5FFFF */ ori $a1, (0xFF00FFFF & 0xFFFF) # ori $a1, $a1, 0xffff -/* 07D2C8 8007C6C8 8E190000 */ lw $t9, ($s0) -/* 07D2CC 8007C6CC AE620000 */ sw $v0, ($s3) -/* 07D2D0 8007C6D0 1B20000B */ blez $t9, .L8007C700 -/* 07D2D4 8007C6D4 0000A025 */ move $s4, $zero -.L8007C6D8: -/* 07D2D8 8007C6D8 8E680000 */ lw $t0, ($s3) -/* 07D2DC 8007C6DC 00000000 */ nop -/* 07D2E0 8007C6E0 01144821 */ addu $t1, $t0, $s4 -/* 07D2E4 8007C6E4 A1200000 */ sb $zero, ($t1) -/* 07D2E8 8007C6E8 8E0A0000 */ lw $t2, ($s0) -/* 07D2EC 8007C6EC 26940001 */ addiu $s4, $s4, 1 -/* 07D2F0 8007C6F0 028A082A */ slt $at, $s4, $t2 -/* 07D2F4 8007C6F4 1420FFF8 */ bnez $at, .L8007C6D8 -/* 07D2F8 8007C6F8 00000000 */ nop -/* 07D2FC 8007C6FC 0000A025 */ move $s4, $zero -.L8007C700: -/* 07D300 8007C700 3C1E8012 */ lui $fp, %hi(D_80126354) # $fp, 0x8012 -/* 07D304 8007C704 27DE6354 */ addiu $fp, %lo(D_80126354) # addiu $fp, $fp, 0x6354 -/* 07D308 8007C708 8FCB0000 */ lw $t3, ($fp) -/* 07D30C 8007C70C 0000A825 */ move $s5, $zero -/* 07D310 8007C710 19600041 */ blez $t3, .L8007C818 -/* 07D314 8007C714 3C178012 */ lui $s7, %hi(gSpriteOffsetTable) # $s7, 0x8012 -/* 07D318 8007C718 3C168012 */ lui $s6, %hi(gCurrentSprite) # $s6, 0x8012 -/* 07D31C 8007C71C 26D66350 */ addiu $s6, %lo(gCurrentSprite) # addiu $s6, $s6, 0x6350 -/* 07D320 8007C720 26F76348 */ addiu $s7, %lo(gSpriteOffsetTable) # addiu $s7, $s7, 0x6348 -/* 07D324 8007C724 24120001 */ li $s2, 1 -.L8007C728: -/* 07D328 8007C728 8EEC0000 */ lw $t4, ($s7) -/* 07D32C 8007C72C 8ED10000 */ lw $s1, ($s6) -/* 07D330 8007C730 01951021 */ addu $v0, $t4, $s5 -/* 07D334 8007C734 8C460000 */ lw $a2, ($v0) -/* 07D338 8007C738 8C4D0004 */ lw $t5, 4($v0) -/* 07D33C 8007C73C 2404000C */ li $a0, 12 -/* 07D340 8007C740 00008025 */ move $s0, $zero -/* 07D344 8007C744 02202825 */ move $a1, $s1 -/* 07D348 8007C748 0C01DB9A */ jal load_asset_to_address -/* 07D34C 8007C74C 01A63823 */ subu $a3, $t5, $a2 -/* 07D350 8007C750 862E0002 */ lh $t6, 2($s1) -/* 07D354 8007C754 00000000 */ nop -/* 07D358 8007C758 022E7821 */ addu $t7, $s1, $t6 -/* 07D35C 8007C75C 91E3000C */ lbu $v1, 0xc($t7) -/* 07D360 8007C760 00000000 */ nop -/* 07D364 8007C764 18600027 */ blez $v1, .L8007C804 -/* 07D368 8007C768 30640003 */ andi $a0, $v1, 3 -/* 07D36C 8007C76C 1080000B */ beqz $a0, .L8007C79C -/* 07D370 8007C770 00801025 */ move $v0, $a0 -.L8007C774: -/* 07D374 8007C774 8E780000 */ lw $t8, ($s3) -/* 07D378 8007C778 86390000 */ lh $t9, ($s1) -/* 07D37C 8007C77C 00000000 */ nop -/* 07D380 8007C780 03194021 */ addu $t0, $t8, $t9 -/* 07D384 8007C784 01104821 */ addu $t1, $t0, $s0 -/* 07D388 8007C788 26100001 */ addiu $s0, $s0, 1 -/* 07D38C 8007C78C 1450FFF9 */ bne $v0, $s0, .L8007C774 -/* 07D390 8007C790 A1320000 */ sb $s2, ($t1) -/* 07D394 8007C794 1203001B */ beq $s0, $v1, .L8007C804 -/* 07D398 8007C798 00000000 */ nop -.L8007C79C: -/* 07D39C 8007C79C 8E6A0000 */ lw $t2, ($s3) -/* 07D3A0 8007C7A0 862B0000 */ lh $t3, ($s1) -/* 07D3A4 8007C7A4 00000000 */ nop -/* 07D3A8 8007C7A8 014B6021 */ addu $t4, $t2, $t3 -/* 07D3AC 8007C7AC 01906821 */ addu $t5, $t4, $s0 -/* 07D3B0 8007C7B0 A1B20000 */ sb $s2, ($t5) -/* 07D3B4 8007C7B4 862F0000 */ lh $t7, ($s1) -/* 07D3B8 8007C7B8 8E6E0000 */ lw $t6, ($s3) -/* 07D3BC 8007C7BC 00000000 */ nop -/* 07D3C0 8007C7C0 01CFC021 */ addu $t8, $t6, $t7 -/* 07D3C4 8007C7C4 0310C821 */ addu $t9, $t8, $s0 -/* 07D3C8 8007C7C8 A3320001 */ sb $s2, 1($t9) -/* 07D3CC 8007C7CC 86290000 */ lh $t1, ($s1) -/* 07D3D0 8007C7D0 8E680000 */ lw $t0, ($s3) -/* 07D3D4 8007C7D4 00000000 */ nop -/* 07D3D8 8007C7D8 01095021 */ addu $t2, $t0, $t1 -/* 07D3DC 8007C7DC 01505821 */ addu $t3, $t2, $s0 -/* 07D3E0 8007C7E0 A1720002 */ sb $s2, 2($t3) -/* 07D3E4 8007C7E4 862D0000 */ lh $t5, ($s1) -/* 07D3E8 8007C7E8 8E6C0000 */ lw $t4, ($s3) -/* 07D3EC 8007C7EC 00000000 */ nop -/* 07D3F0 8007C7F0 018D7021 */ addu $t6, $t4, $t5 -/* 07D3F4 8007C7F4 01D07821 */ addu $t7, $t6, $s0 -/* 07D3F8 8007C7F8 26100004 */ addiu $s0, $s0, 4 -/* 07D3FC 8007C7FC 1603FFE7 */ bne $s0, $v1, .L8007C79C -/* 07D400 8007C800 A1F20003 */ sb $s2, 3($t7) -.L8007C804: -/* 07D404 8007C804 8FD80000 */ lw $t8, ($fp) -/* 07D408 8007C808 26940001 */ addiu $s4, $s4, 1 -/* 07D40C 8007C80C 0298082A */ slt $at, $s4, $t8 -/* 07D410 8007C810 1420FFC5 */ bnez $at, .L8007C728 -/* 07D414 8007C814 26B50004 */ addiu $s5, $s5, 4 -.L8007C818: -/* 07D418 8007C818 8E790000 */ lw $t9, ($s3) -/* 07D41C 8007C81C 8FA80040 */ lw $t0, 0x40($sp) -/* 07D420 8007C820 00000000 */ nop -/* 07D424 8007C824 03284821 */ addu $t1, $t9, $t0 -/* 07D428 8007C828 91220000 */ lbu $v0, ($t1) -/* 07D42C 8007C82C 00000000 */ nop -.L8007C830: -/* 07D430 8007C830 8FBF003C */ lw $ra, 0x3c($sp) -/* 07D434 8007C834 8FB00018 */ lw $s0, 0x18($sp) -/* 07D438 8007C838 8FB1001C */ lw $s1, 0x1c($sp) -/* 07D43C 8007C83C 8FB20020 */ lw $s2, 0x20($sp) -/* 07D440 8007C840 8FB30024 */ lw $s3, 0x24($sp) -/* 07D444 8007C844 8FB40028 */ lw $s4, 0x28($sp) -/* 07D448 8007C848 8FB5002C */ lw $s5, 0x2c($sp) -/* 07D44C 8007C84C 8FB60030 */ lw $s6, 0x30($sp) -/* 07D450 8007C850 8FB70034 */ lw $s7, 0x34($sp) -/* 07D454 8007C854 8FBE0038 */ lw $fp, 0x38($sp) -/* 07D458 8007C858 03E00008 */ jr $ra -/* 07D45C 8007C85C 27BD0040 */ addiu $sp, $sp, 0x40 diff --git a/asm/non_matchings/waves/func_800BA8E4.s b/asm/non_matchings/waves/func_800BA8E4.s index 14df281f..621f9f57 100644 --- a/asm/non_matchings/waves/func_800BA8E4.s +++ b/asm/non_matchings/waves/func_800BA8E4.s @@ -373,7 +373,7 @@ glabel func_800BA8E4 /* 0BBA70 800BAE70 24A59FC4 */ addiu $a1, %lo(D_80129FC4) # addiu $a1, $a1, -0x603c /* 0BBA74 800BAE74 02202025 */ move $a0, $s1 /* 0BBA78 800BAE78 27A600E4 */ addiu $a2, $sp, 0xe4 -/* 0BBA7C 800BAE7C 0C01A521 */ jal func_80069484 +/* 0BBA7C 800BAE7C 0C01A521 */ jal camera_push_model_mtx /* 0BBA80 800BAE80 E7B60010 */ swc1 $f22, 0x10($sp) /* 0BBA84 800BAE84 8FA50104 */ lw $a1, 0x104($sp) /* 0BBA88 800BAE88 3C1F8013 */ lui $ra, %hi(D_80129FC8) # $ra, 0x8013 @@ -527,7 +527,7 @@ glabel func_800BA8E4 /* 0BBCC8 800BB0C8 AFB00074 */ sw $s0, 0x74($sp) /* 0BBCCC 800BB0CC 4407C000 */ mfc1 $a3, $f24 /* 0BBCD0 800BB0D0 00008025 */ move $s0, $zero -/* 0BBCD4 800BB0D4 0C01A521 */ jal func_80069484 +/* 0BBCD4 800BB0D4 0C01A521 */ jal camera_push_model_mtx /* 0BBCD8 800BB0D8 E7B60010 */ swc1 $f22, 0x10($sp) /* 0BBCDC 800BB0DC 3C1F8013 */ lui $ra, %hi(D_80129FC8) # $ra, 0x8013 /* 0BBCE0 800BB0E0 8FAE0104 */ lw $t6, 0x104($sp) diff --git a/include/enums.h b/include/enums.h index cc2d9e2d..417ad10e 100644 --- a/include/enums.h +++ b/include/enums.h @@ -108,9 +108,9 @@ typedef enum MiscAsset { MISC_ASSET_UNK02, MISC_ASSET_UNK03, MISC_ASSET_UNK04, - MISC_ASSET_UNK05, - MISC_ASSET_UNK06, - MISC_ASSET_UNK07, + MISC_ASSET_UNK05, //Tricky boss + MISC_ASSET_UNK06, //Bluey boss + MISC_ASSET_UNK07, //Smokey boss MISC_ASSET_UNK08, MISC_RACER_WEIGHT, MISC_RACER_HANDLING, diff --git a/include/structs.h b/include/structs.h index ec9fc6f5..71b16b1d 100644 --- a/include/structs.h +++ b/include/structs.h @@ -114,7 +114,10 @@ typedef struct Sprite { /* 0x04 */ s16 numberOfInstances; /* 0x06 */ s16 unk6; /* 0x08 */ TextureHeader **frames; - /* 0x0C */ u8 *unkC[1]; // Actual size varies. + union { + /* 0x0C */ u8 val[1]; // Actual size varies. + /* 0x0C */ u8 *ptr[1]; // Display list? + } unkC; } Sprite; /* Size: 0x20 bytes */ diff --git a/src/camera.c b/src/camera.c index ad118522..cfab9302 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1153,7 +1153,7 @@ void render_ortho_triangle_image(Gfx **dList, MatrixS **mtx, Vertex **vtx, Objec if (index >= sprite->baseTextureId) { index = sprite->baseTextureId - 1; } - gSPDisplayList((*dList)++, sprite->unkC[index]); + gSPDisplayList((*dList)++, sprite->unkC.ptr[index]); if (--D_80120D1C == 0) { index = 0; } else { @@ -1225,7 +1225,10 @@ void func_80068FA8(Gfx **dlist, MatrixS **mtx, Object *arg2, Object *arg3, f32 s gSPMatrix((*dlist)++, OS_PHYSICAL_TO_K0((*mtx)++), G_MTX_DKR_INDEX_1); } -void func_80069484(Gfx **dList, MatrixS **mtx, ObjectTransform *trans, f32 scale, f32 scaleY) { +/** + * Official Name: camPushModelMtx +*/ +void camera_push_model_mtx(Gfx **dList, MatrixS **mtx, ObjectTransform *trans, f32 scale, f32 scaleY) { f32 tempX; f32 tempY; f32 tempZ; diff --git a/src/camera.h b/src/camera.h index 85ce50af..2f9c8d6b 100644 --- a/src/camera.h +++ b/src/camera.h @@ -123,7 +123,7 @@ void set_camera_shake(f32 magnitude); void func_80067D3C(Gfx **dlist, MatrixS **mats); void render_ortho_triangle_image(Gfx **dList, MatrixS **mtx, Vertex **vtx, ObjectSegment *segment, Sprite *sprite, s32 flags); s32 render_sprite_billboard(Gfx **dlist, MatrixS **mtx, Vertex **vertexList, Object *obj, unk80068514_arg4 *arg4, s32 flags); -void func_80069484(Gfx **arg0, MatrixS **arg1, ObjectTransform *arg2, f32 arg3, f32 arg4); +void camera_push_model_mtx(Gfx **arg0, MatrixS **arg1, ObjectTransform *arg2, f32 arg3, f32 arg4); void set_viewport_scissor(Gfx **dlist); void func_80069A40(Gfx **dlist); void copy_viewports_to_stack(void); diff --git a/src/game.c b/src/game.c index 6d899391..7e5a762a 100644 --- a/src/game.c +++ b/src/game.c @@ -677,7 +677,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl settings->courseId = levelId; if (gCurrentLevelHeader->weatherEnable > 0) { func_800AB4A8(gCurrentLevelHeader->weatherType, gCurrentLevelHeader->weatherEnable, gCurrentLevelHeader->weatherVelX << 8, gCurrentLevelHeader->weatherVelY << 8, gCurrentLevelHeader->weatherVelZ << 8, gCurrentLevelHeader->weatherIntensity * 257, gCurrentLevelHeader->weatherOpacity * 257); - setWeatherLimits(-1, -0x200); + set_weather_limits(-1, -0x200); } if (gCurrentLevelHeader->unk49 == -1) { gCurrentLevelHeader->unkA4 = load_texture((s32) gCurrentLevelHeader->unkA4); @@ -976,7 +976,7 @@ void init_game(void) { diPrintfInit(); func_800598D0(); init_particle_assets(); - func_800AB1F0(); + init_weather(); calc_and_alloc_heap_for_settings(); default_alloc_displaylist_heap(); load_fonts(); diff --git a/src/math_util.c b/src/math_util.c index 9344c7a2..e26b073f 100644 --- a/src/math_util.c +++ b/src/math_util.c @@ -9,7 +9,7 @@ #include "structs.h" extern s32 D_800DD430; -extern s32 gCurrentRNGSeed; +extern s32 gCurrentRNGSeed; //Official Name: rngSeed extern s32 gPrevRNGSeed; extern s16 gSineTable[]; extern s16 gArcTanTable[]; @@ -198,7 +198,6 @@ GLOBAL_ASM("asm/math_util/s16_vec3_mult_by_s32_matrix.s") #endif #ifdef NON_EQUIVALENT -/* Official Name: mathRpyXyzMtx */ void object_transform_to_matrix(Matrix arg0, ObjectTransform *trans) { f32 yRotSine; f32 yRotCosine; @@ -238,7 +237,7 @@ GLOBAL_ASM("asm/math_util/object_transform_to_matrix.s") #endif #ifdef NON_MATCHING -/* Official name: mathSquashY(?) */ +/* Official name: mathSquashY */ void f32_matrix_scale(Matrix *input, f32 scale) { input[0][1][0] *= scale; input[0][1][1] *= scale; @@ -249,7 +248,7 @@ GLOBAL_ASM("asm/math_util/f32_matrix_scale.s") #endif #ifdef NON_MATCHING -/* Official name: mathTransY(?) */ +/* Official name: mathTransY */ void f32_matrix_y_scale(Matrix *input, f32 scale) { input[0][3][0] += input[0][1][0] * scale; input[0][3][1] += input[0][1][1] * scale; @@ -299,6 +298,8 @@ void object_transform_to_matrix_2(Matrix mtx, ObjectTransform *trans) { GLOBAL_ASM("asm/math_util/object_transform_to_matrix_2.s") #endif +GLOBAL_ASM("asm/math_util/func_80070058.s") + #ifdef NON_MATCHING void f32_matrix_from_rotation_and_scale(Matrix mtx, s32 angle, f32 arg2, f32 arg3) { f32 cosine, sine; @@ -364,6 +365,7 @@ GLOBAL_ASM("asm/math_util/s16_vec3_apply_object_rotation.s") #endif #ifdef NON_EQUIVALENT +/* Official Name: mathOneFloatRPY */ void f32_vec3_apply_object_rotation(ObjectTransform *trans, f32 *vec3_f32) { f32 yRotSine; f32 yRotCosine; @@ -405,6 +407,7 @@ GLOBAL_ASM("asm/math_util/f32_vec3_apply_object_rotation.s") #endif #ifdef NON_EQUIVALENT +/* Official Name: mathOneFloatYPR */ void f32_vec3_apply_object_rotation2(ObjectTransform *trans, f32 *arg1) { f32 yRotSine; f32 yRotCosine; @@ -442,6 +445,7 @@ GLOBAL_ASM("asm/math_util/f32_vec3_apply_object_rotation2.s") #endif #ifdef NON_EQUIVALENT +/* Official Name: mathOneFloatPY */ void f32_vec3_apply_object_rotation3(ObjectTransform *trans, f32 *vec3_f32) { f32 xRotSine; f32 xRotCosine; diff --git a/src/object_functions.c b/src/object_functions.c index 0cec3899..adc28925 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -5155,4 +5155,3 @@ void obj_loop_wizghosts(Object *obj, s32 updateRate) { func_8001F460(obj, updateRate, obj); obj->segment.animFrame = (obj->segment.animFrame + (updateRate * 8)) & 0xFF; } - diff --git a/src/objects.c b/src/objects.c index 9bc6c4eb..d6b3228e 100644 --- a/src/objects.c +++ b/src/objects.c @@ -1239,7 +1239,10 @@ s32 func_800113CC(Object *obj, s32 arg1, s32 frame, s32 oddSoundId, s32 evenSoun } return ret; } - +/** + * Looks like it sets D_800DC848 to TRUE, and that will disable the check for out of bounds moves in move_object + * Official Name: objMoveXYZnocheck +*/ s32 func_80011560(void) { //! @bug The developers probably intended this to be a void function. D_800DC848 = 1; // No return value! @@ -1248,6 +1251,7 @@ s32 func_80011560(void) { //! @bug The developers probably intended this to be a /** * Sets the new position of the object using the differences given. * Compares against the outer edges of the level geometry to decide wether or not to apply a segment ID. + * Official Name: objMoveXYZ */ s32 move_object(Object *obj, f32 xPos, f32 yPos, f32 zPos) { s32 segmentID; @@ -1340,7 +1344,7 @@ s32 move_object(Object *obj, f32 xPos, f32 yPos, f32 zPos) { void func_80011960(Object *obj, Vertex *verts, u32 numVertices, Triangle *triangles, u32 numTriangles, TextureHeader *tex, u32 flags, u32 texOffset, f32 arg8) { s32 hasTexture = FALSE; - func_80069484(&gObjectCurrDisplayList, &gObjectCurrMatrix, &obj->segment.trans, arg8, 0.0f); + camera_push_model_mtx(&gObjectCurrDisplayList, &gObjectCurrMatrix, &obj->segment.trans, arg8, 0.0f); gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(gObjectCurrDisplayList++, 255, 255, 255, 0); if (tex != NULL) { @@ -1490,72 +1494,68 @@ void render_3d_billboard(Object *obj) { } } -#ifdef NON_EQUIVALENT void render_3d_model(Object *obj) { + s32 i; s32 intensity; + s32 alpha; s32 spB0; s32 obj60_unk0; - s32 hasPrimCol; + s32 hasOpacity; s32 hasEnvCol; - ObjectModel *objModel; - Object *loopObj; - Object *heldObj; - Object_64 *obj64; - Object_68 *obj68; - Vertex *temp_v0_14; - f32 posX; - f32 posZ; - f32 posY; - s32 cicFailed; - s32 var_t1; - s32 billboardFlags; - s32 i; + s32 flags; s32 var_v0; + s32 cicFailed; + f32 vtxX; + f32 vtxY; + f32 vtxZ; s8 index; - s8 var_t0_2; - s32 var_v0_2; - s32 alpha; - unk80068514_arg4 *temp_t4; + s8 var_v0_2; + Object *loopObj; + Object_68 *obj68; + Object_Racer *racerObj; + ObjectModel *objModel; + Object_68 *something; obj68 = obj->unk68[obj->segment.unk38.byte.unk3A]; if (obj68 != NULL) { - hasPrimCol = FALSE; + objModel = obj68->objModel; + hasOpacity = FALSE; hasEnvCol = FALSE; intensity = 255; - objModel = obj68->objModel; if (obj->unk54 != NULL) { - hasPrimCol = TRUE; - hasEnvCol = TRUE; intensity = (s32) (obj->unk54->unk0 * 255.0f * D_8011AD30); + hasOpacity = TRUE; + hasEnvCol = TRUE; } if (obj->behaviorId == BHV_RACER) { - obj64 = obj->unk64; - func_80012E28(obj); + racerObj = (Object_Racer *) obj->unk64; + object_do_player_tumble(obj); } else { - obj64 = NULL; + racerObj = NULL; } if (obj68->unk20 <= 0) { obj->unk44 = (Vertex *) obj68->unk4[obj68->unk1F]; if (obj68->unk1E == 2) { func_80061D30(obj); } - if ((obj68->unk1E != 0) && (objModel->unk40 != NULL)) { - var_t1 = TRUE; - if (obj64 != NULL && obj64->racer.vehicleID < VEHICLE_TRICKY && obj64->racer.playerIndex == PLAYER_COMPUTER) { - var_t1 = FALSE; + if (obj68->unk1E && objModel->unk40 != NULL) { + flags = TRUE; + if (racerObj != NULL && racerObj->vehicleID < VEHICLE_TRICKY && racerObj->playerIndex == PLAYER_COMPUTER) { + flags = FALSE; } if (get_viewport_count() != VIEWPORTS_COUNT_1_PLAYER) { - var_t1 = FALSE; + flags = FALSE; } - if (obj->behaviorId == BHV_UNK_3F) { + obj->unk44 = (Vertex *) obj68->unk4[obj68->unk1F]; + if (obj->behaviorId == BHV_UNK_3F) { // 63 = stopwatchicon, stopwatchhand calc_dyn_light_and_env_map_for_object(objModel, obj, 0, D_8011AD30); - } else if (var_t1) { + } else if (flags) { calc_dyn_light_and_env_map_for_object(objModel, obj, -1, D_8011AD30); } else { func_800245F0(objModel, obj, D_8011AD30); } } - if ((obj64 != NULL) && (obj64->racer.playerIndex == PLAYER_COMPUTER) && (obj64->racer.vehicleID < VEHICLE_TRICKY)) { + if ((racerObj != NULL) && (racerObj->playerIndex == PLAYER_COMPUTER) && (racerObj->vehicleID < VEHICLE_TRICKY)) { obj68->unk20 = 2; } else { obj68->unk20 = 1; @@ -1565,19 +1565,19 @@ void render_3d_model(Object *obj) { if (obj->behaviorId == BHV_DOOR) { func_80011264(objModel, obj); } - if ((objModel->unk52 != 0) && (objModel->unk50 > 0)) { - func_80011134(obj, (s32) objModel->unk52); + if (objModel->unk52 && objModel->unk50 > 0) { + func_80011134(obj, objModel->unk52); obj68->objModel->unk52 = 0; } - func_80069484(&gObjectCurrDisplayList, &gObjectCurrMatrix, &obj->segment.trans, D_8011AD28, 0.0f); - spB0 = 0; - if (obj64 != NULL) { - objUndoPlayerTumble(obj); - if ((obj->segment.unk38.byte.unk3B == 0) || (obj64->racer.vehicleID >= VEHICLE_TRICKY)) { - func_80069790(&gObjectCurrDisplayList, &gObjectCurrMatrix, obj68, obj64->racer.headAngle); - spB0 = 1; + camera_push_model_mtx(&gObjectCurrDisplayList, &gObjectCurrMatrix, &obj->segment.trans, D_8011AD28, 0); + spB0 = FALSE; + if (racerObj != NULL) { + object_undo_player_tumble(obj); + if (obj->segment.unk38.byte.unk3B == 0 || racerObj->vehicleID >= VEHICLE_TRICKY) { + func_80069790(&gObjectCurrDisplayList, &gObjectCurrMatrix, obj68, racerObj->headAngle); + spB0 = TRUE; } else { - obj64->racer.headAngle = 0; + racerObj->headAngle = 0; } } alpha = obj->segment.unk38.byte.unk39; @@ -1589,17 +1589,17 @@ void render_3d_model(Object *obj) { alpha >>= 1; } if (alpha < 255) { - hasPrimCol = TRUE; + hasOpacity = TRUE; } if (hasEnvCol) { gDPSetEnvColor(gObjectCurrDisplayList++, obj->unk54->unk4, obj->unk54->unk5, obj->unk54->unk6, obj->unk54->unk7); } else { gDPSetEnvColor(gObjectCurrDisplayList++, 255, 255, 255, 0); } - if (obj->segment.header->unk71 != 0) { + if (obj->segment.header->unk71) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->unk54->unk18, obj->unk54->unk19, obj->unk54->unk1A, alpha); func_8007B43C(); - } else if (hasPrimCol) { + } else if (hasOpacity) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, intensity, intensity, intensity, alpha); } else { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); @@ -1609,8 +1609,8 @@ void render_3d_model(Object *obj) { } else { var_v0 = func_800143A8(objModel, obj, 0, 0, spB0); } - if (obj->segment.header->unk71 != 0) { - if (hasPrimCol) { + if (obj->segment.header->unk71) { + if (hasOpacity) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, intensity, intensity, intensity, alpha); } else { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); @@ -1619,29 +1619,28 @@ void render_3d_model(Object *obj) { } if (obj->unk60 != NULL) { obj60_unk0 = obj->unk60->unk0; - if (obj64 != NULL && (obj64->racer.vehicleID == VEHICLE_FLYING_CAR)) { + if (racerObj != NULL && racerObj->vehicleID == VEHICLE_FLYING_CAR) { obj60_unk0 = 0; } for (i = 0; i < obj60_unk0; i++) { - //This line right here breaks this function. Loading unk60 as an array is broken. - loopObj = obj->unk60[i].unk4; + loopObj = ((Object **) obj->unk60)[i + 1]; if (!(loopObj->segment.trans.unk6 & 0x4000)) { index = obj->unk60->unk2C[i]; - if ((index >= 0) && (index < objModel->unk18)) { - temp_t4 = (unk80068514_arg4 *) loopObj->unk68[loopObj->segment.unk38.byte.unk3A]; - posX = obj->unk44[objModel->unk14[index]].x; - posY = obj->unk44[objModel->unk14[index]].y; - posZ = obj->unk44[objModel->unk14[index]].z; - loopObj->segment.trans.x_position += posX; - loopObj->segment.trans.y_position += posY; - loopObj->segment.trans.z_position += posZ; + if (index >= 0 && index < objModel->unk18) { + something = loopObj->unk68[loopObj->segment.unk38.byte.unk3A]; + vtxX = obj->unk44[objModel->unk14[index]].x; + vtxY = obj->unk44[objModel->unk14[index]].y; + vtxZ = obj->unk44[objModel->unk14[index]].z; + loopObj->segment.trans.x_position += vtxX; + loopObj->segment.trans.y_position += vtxY; + loopObj->segment.trans.z_position += vtxZ; if (loopObj->segment.header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) { - billboardFlags = (RENDER_Z_COMPARE | RENDER_FOG_ACTIVE | RENDER_Z_UPDATE); + flags = (RENDER_Z_COMPARE | RENDER_FOG_ACTIVE | RENDER_Z_UPDATE); } else { - billboardFlags = (RENDER_Z_COMPARE | RENDER_FOG_ACTIVE | RENDER_Z_UPDATE | RENDER_ANTI_ALIASING); + flags = (RENDER_Z_COMPARE | RENDER_FOG_ACTIVE | RENDER_Z_UPDATE | RENDER_ANTI_ALIASING); } if (alpha < 255) { - billboardFlags |= RENDER_SEMI_TRANSPARENT; + flags |= RENDER_SEMI_TRANSPARENT; } cicFailed = FALSE; //Anti-Piracy check @@ -1649,60 +1648,59 @@ void render_3d_model(Object *obj) { cicFailed = TRUE; } if (!cicFailed) { - var_v0_2 = (loopObj->segment.trans.unk6 & 0x80) != 0; + var_v0_2 = (loopObj->segment.trans.unk6 & 0x80 && obj60_unk0 == 3); + if (racerObj != NULL && racerObj->transparency < 255) { + var_v0_2 = FALSE; + } if (var_v0_2) { - var_v0_2 = obj60_unk0 == 3; - } - var_t0_2 = var_v0_2; - if ((obj64 != NULL) && (obj64->racer.transparency < 255)) { - var_t0_2 = FALSE; - } - if (var_t0_2) { func_80012C98(&gObjectCurrDisplayList); gDPSetEnvColor(gObjectCurrDisplayList++, 255, 255, 255, 0); gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, intensity, intensity, intensity, alpha); } - loopObj->unk78 = render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, loopObj, temp_t4, billboardFlags); - if (var_t0_2) { + loopObj->unk78 = render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, loopObj, (unk80068514_arg4 *) something, flags); + if (var_v0_2) { gDkrInsertMatrix(gObjectCurrDisplayList++, 0, 0); func_80012CE8(&gObjectCurrDisplayList); } } - loopObj->segment.trans.x_position -= posX; - loopObj->segment.trans.y_position -= posY; - loopObj->segment.trans.z_position -= posZ; + loopObj->segment.trans.x_position -= vtxX; + loopObj->segment.trans.y_position -= vtxY; + loopObj->segment.trans.z_position -= vtxZ; } } } } - if (obj64 != NULL) { - heldObj = obj64->racer.held_obj; - if (heldObj != NULL) { - if ((obj->segment.header->unk58 >= 0) && (obj->segment.header->unk58 < objModel->unk18)) { - billboardFlags = (RENDER_Z_COMPARE | RENDER_FOG_ACTIVE | RENDER_Z_UPDATE); - temp_t4 = (unk80068514_arg4 *) heldObj->unk68[heldObj->segment.unk38.byte.unk3A]; - temp_v0_14 = &obj->unk44[objModel->unk14[obj->segment.header->unk58]]; - heldObj->segment.trans.x_position += (temp_v0_14->x - heldObj->segment.trans.x_position) * 0.25; - heldObj->segment.trans.y_position += (temp_v0_14->y - heldObj->segment.trans.y_position) * 0.25; - heldObj->segment.trans.z_position += (temp_v0_14->z - heldObj->segment.trans.z_position) * 0.25; - if (heldObj->segment.header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) { - render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, heldObj, - temp_t4, billboardFlags); + // This section draws the egg sprite being held by a racer. + if (racerObj != NULL) { + loopObj = racerObj->held_obj; + if (loopObj != NULL) { + index = obj->segment.header->unk58; + if (index >= 0 && index < objModel->unk18) { + flags = (RENDER_Z_COMPARE | RENDER_FOG_ACTIVE | RENDER_Z_UPDATE); + something = loopObj->unk68[loopObj->segment.unk38.byte.unk3A]; + vtxX = obj->unk44[objModel->unk14[index]].x; + vtxY = obj->unk44[objModel->unk14[index]].y; + vtxZ = obj->unk44[objModel->unk14[index]].z; + loopObj->segment.trans.x_position += (vtxX - loopObj->segment.trans.x_position) * 0.25; + loopObj->segment.trans.y_position += (vtxY - loopObj->segment.trans.y_position) * 0.25; + loopObj->segment.trans.z_position += (vtxZ - loopObj->segment.trans.z_position) * 0.25; + if (loopObj->segment.header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) { + render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, loopObj, (unk80068514_arg4 *)something, flags); } } } } if (var_v0 != -1) { - if (obj->segment.header->unk71 != 0) { + if (obj->segment.header->unk71) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, obj->unk54->unk18, obj->unk54->unk19, obj->unk54->unk1A, alpha); func_8007B43C(); } func_800143A8(objModel, obj, var_v0, 4, spB0); - if (obj->segment.header->unk71 != 0) { + if (obj->segment.header->unk71) { func_8007B454(); } } - if ((hasPrimCol) || (obj->segment.header->unk71 != 0)) { + if ((hasOpacity) || (obj->segment.header->unk71)) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); } if (hasEnvCol) { @@ -1711,9 +1709,6 @@ void render_3d_model(Object *obj) { func_80069A40(&gObjectCurrDisplayList); } } -#else -GLOBAL_ASM("asm/non_matchings/objects/render_3d_model.s") -#endif void func_80012C30(void) { D_8011ADA4 = 0; @@ -1741,6 +1736,9 @@ void func_80012CE8(Gfx **dlist) { } } +/** + * Official Name: objPrintObject +*/ void func_80012D5C(Gfx **dlist, MatrixS **mtx, Vertex **verts, Object *object) { f32 scale; if (object->segment.trans.unk6 & 0x5000) @@ -1758,7 +1756,11 @@ void func_80012D5C(Gfx **dlist, MatrixS **mtx, Vertex **verts, Object *object) { func_800B76B8(2, -1); } -void func_80012E28(Object *this) { + +/** + * Official Name: objDoPlayerTumble +*/ +void object_do_player_tumble(Object *this) { UNUSED s32 unused1; Object_Racer *sp_20; f32 tmp_f2; @@ -1790,7 +1792,10 @@ void func_80012E28(Object *this) { } } -void objUndoPlayerTumble(Object *obj) { +/** + * Official Name: objUndoPlayerTumble +*/ +void object_undo_player_tumble(Object *obj) { if (obj->behaviorId == BHV_RACER) { Object_Racer *racer = &obj->unk64->racer; obj->segment.trans.y_rotation -= racer->y_rotation_offset; @@ -1800,7 +1805,156 @@ void objUndoPlayerTumble(Object *obj) { } } +#ifdef NON_EQUIVALENT +void func_80012F94(Object *obj) { + u8 *bossAsset; + ObjectModel *temp_a1_3; + Object_Racer *objRacer; + Object_68 **var_v0; + Object_68 *new_var; + f32 ret1; + f32 var_f0_2; + f32 ret2; + u8 *var_a1; + s32 temp_f6; + s32 temp_v1; + s32 bossVehicleId; + s32 racerLightTimer; + s32 batchNum; + s32 var_v1; + s32 firstNonEmptyUnk68ObjectIndex; + s32 var_t0; + s32 numberOfModels; + + ret1 = 1.0f; + ret2 = 1.0f; + if (!(obj->segment.trans.unk6 & 0x8000)) { + if (obj->segment.header->behaviorId == BHV_RACER) { + objRacer = (Object_Racer *) obj->unk64; + objRacer->unk201 = 30; + if (objRacer->unk206 > 0) { + ret2 = 1.0f - (objRacer->unk206 * 0.05f); + if (ret2 < 0.2f) { + ret2 = 0.2f; + } + } + if (objRacer->playerIndex != PLAYER_COMPUTER && objRacer->raceFinished) { + var_t0 = 0; + batchNum = 0; + } else { + if (obj->behaviorId == BHV_UNK_3A) { //Ghost Object? + var_t0 = 1; + batchNum = 0; + } else { + //Loads vehicles between VEHICLE_TRICKY and VEHICLE_SMOKEY. So all boss vehicles except wizpig. + var_t0 = objRacer->vehicleID + VEHICLE_TRICKY; + if (objRacer->vehicleID >= NUMBER_OF_PLAYER_VEHICLES) { + var_t0 = VEHICLE_TRICKY; + } + batchNum = 0; + bossAsset = (u8 *) get_misc_asset(var_t0); //40 bytes of data u8[8][5]? + bossAsset = &bossAsset[(get_viewport_count() * 10)]; + var_a1 = bossAsset; + if (get_current_viewport() != objRacer->playerIndex) { + var_a1 += 5; + } + var_f0_2 = obj->segment.unk30; + temp_v1 = (s32) var_f0_2 >> 3; + if (obj->segment.unk30 < 0.0f) { + var_f0_2 = 0.0f; + } else if (var_f0_2 > 3500.0f) { + var_f0_2 = 3500.0f; + } + obj->segment.trans.scale *= (var_f0_2 / 2700.0f) + 1.0f; + temp_f6 = (s32) ((f32) temp_v1 * *((f32 *)get_misc_asset(ASSET_MISC_4)[objRacer->characterId])); + //ASSET_MISC_4 is just 10 floats of 1.0f. One for each playable character. + if (temp_f6 < -50) { + var_t0 = 5; + } else { + racerLightTimer = MIN(temp_f6 >> 1, 0); + var_v1 = racerLightTimer; + if (var_v1 < var_a1[0]) { + var_t0 = 0; + } else if (var_v1 < var_a1[1]) { + var_t0 = 1; + } else if (var_v1 < var_a1[2]) { + var_t0 = 2; + } else if (var_v1 < var_a1[3]) { + var_t0 = 3; + } else if (var_v1 < var_a1[4]) { + var_t0 = 4; + } else { + var_t0 = 5; + } + } + } + } + + firstNonEmptyUnk68ObjectIndex = 0; + var_v0 = &obj->unk68[firstNonEmptyUnk68ObjectIndex]; + + while (*var_v0 == NULL) { + firstNonEmptyUnk68ObjectIndex++; + var_v0++; + } + + numberOfModels = obj->segment.header->numberOfModelIds - 1; + var_v0 = &obj->unk68[numberOfModels]; + + while (*var_v0 == NULL) { + numberOfModels--; + var_v0--; + } + + if (var_t0 < firstNonEmptyUnk68ObjectIndex) { + var_t0 = firstNonEmptyUnk68ObjectIndex; + } + if (numberOfModels < var_t0) { + var_t0 = numberOfModels; + } + obj->segment.unk38.byte.unk3A = var_t0; + if ((obj->unk54 != NULL) && (obj->unk54->unk0 < 0.6f)) { + objRacer->lightFlags |= RACER_LIGHT_NIGHT; + } else { + objRacer->lightFlags &= ~RACER_LIGHT_NIGHT; + } + racerLightTimer = objRacer->lightFlags & RACER_LIGHT_TIMER; + new_var = obj->unk68[obj->segment.unk38.byte.unk3A]; + temp_a1_3 = new_var->objModel; + if (racerLightTimer != 0) { + racerLightTimer--; + if (objRacer->lightFlags & RACER_LIGHT_BRAKE) { + racerLightTimer += 1; + objRacer->lightFlags = (objRacer->lightFlags & ~RACER_LIGHT_UNK10) | RACER_LIGHT_UNK20; + } else if (objRacer->lightFlags & RACER_LIGHT_NIGHT) { + racerLightTimer += 3; + objRacer->lightFlags = (objRacer->lightFlags & ~RACER_LIGHT_UNK20) | RACER_LIGHT_UNK10; + } else if (objRacer->lightFlags & RACER_LIGHT_UNK20) { + racerLightTimer += 1; + } else { + racerLightTimer += 3; + } + } + racerLightTimer *= 4; + for (batchNum = 0; batchNum < temp_a1_3->numberOfBatches; batchNum++) { + if ((temp_a1_3->batches[batchNum].flags & 0x810000) == 0x10000) { + temp_a1_3->batches[batchNum].unk7 = racerLightTimer; + } + } + obj->segment.trans.x_position += objRacer->carBobX; + obj->segment.trans.y_position += objRacer->carBobY; + obj->segment.trans.z_position += objRacer->carBobZ; + ret1 = objRacer->stretch_height; + } else if (obj->behaviorId == BHV_FROG) { + ret1 = obj->unk64->frog.scaleY; + } + } + D_8011AD28 = ret1; + D_8011AD30 = ret2; +} +#else GLOBAL_ASM("asm/non_matchings/objects/func_80012F94.s") +#endif void render_object(Object *this) { func_80012F94(this); diff --git a/src/objects.h b/src/objects.h index 33a6972a..8a851e8e 100644 --- a/src/objects.h +++ b/src/objects.h @@ -340,7 +340,7 @@ void func_80012C3C(Gfx** dlist); void func_80012C98(Gfx **dlist); void func_80012CE8(Gfx **dlist); void func_80012D5C(Gfx **dlist, MatrixS **mtx, Vertex **verts, Object *object); -void objUndoPlayerTumble(Object *obj); +void object_undo_player_tumble(Object *obj); void render_object(Object *this); void func_80013548(Object *arg0); void func_800142B8(void); @@ -402,7 +402,7 @@ void run_object_loop_func(Object *obj, s32 arg1); void func_8002458C(s32 arg0); s16 *func_80024594(s32 *arg0, s32 *arg1); void func_800245B4(s16 arg0); -void func_80012E28(Object *this); +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); s32 func_80031F88(Object*, ObjectHeader24 *); @@ -477,6 +477,6 @@ void func_800159C8(Object *, Object *); void func_80016748(Object *, Object *); void func_80011264(ObjectModel *, Object *); void func_800245F0(ObjectModel *, Object *, f32); //asm func in unknown_0251F0 -void func_80061D30(Object *); //asm func in unknown_062930 +s32 func_80061D30(Object *); //asm func in unknown_062930 #endif diff --git a/src/save_data.c b/src/save_data.c index 14e46c9c..73f2ce70 100644 --- a/src/save_data.c +++ b/src/save_data.c @@ -222,6 +222,7 @@ void func_80072708(void) { D_800DE48C = 3; } +/* Official Name: rumbleTick */ void rumble_controllers(s32 updateRate) { unk_801241B8 *temp; s32 pfsStatus; diff --git a/src/textures_sprites.c b/src/textures_sprites.c index 050cc496..6ca6ac65 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -888,7 +888,7 @@ s32 D_80126364; s32 D_80126368; TempTexHeader *gTempTextureHeader; -s32 D_80126370; +u8 *D_80126370; s32 gCurrentRenderFlags; s32 D_80126378; // Set in Game UI TextureHeader *D_8012637C; @@ -1460,7 +1460,31 @@ s32 get_texture_size_from_id(s32 arg0) { GLOBAL_ASM("asm/non_matchings/textures_sprites/get_texture_size_from_id.s") #endif -GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007C660.s") +UNUSED u8 func_8007C660(s32 arg0) { + Sprite *temp_s1; + s32 j; + s32 i; + s32 temp_v1; + + if (arg0 & 0x8000) { + return 0; + } + if (D_80126370 == 0) { + D_80126370 = (u8 *) allocate_from_main_pool_safe(gTextureAssetID[TEX_TABLE_2D], COLOUR_TAG_MAGENTA); + for (i = 0; i < gTextureAssetID[TEX_TABLE_2D]; i++) { + D_80126370[i] = 0; + } + for (i = 0; i < D_80126354; i++) { + temp_s1 = gCurrentSprite; + load_asset_to_address(ASSET_SPRITES, (u32) temp_s1, gSpriteOffsetTable[i], gSpriteOffsetTable[i + 1] - gSpriteOffsetTable[i]); + temp_v1 = temp_s1->unkC.val[temp_s1->numberOfFrames]; + for (j = 0; j < temp_v1; j++) { + D_80126370[temp_s1->baseTextureId + j] = 1; + } + } + } + return D_80126370[arg0]; +} UNUSED s32 func_8007C860(s32 spriteIndex) { if ((spriteIndex < 0) || (spriteIndex >= gNumberOfLoadedTextures)) { @@ -1491,13 +1515,13 @@ s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 * start = gSpriteOffsetTable[spriteIndex]; size = gSpriteOffsetTable[spriteIndex + 1] - start; load_asset_to_address(ASSET_SPRITES, gCurrentSprite, start, size); - tex = load_texture(gCurrentSprite->unkC[0] + gCurrentSprite->baseTextureId); + tex = load_texture(gCurrentSprite->unkC.val[0] + gCurrentSprite->baseTextureId); if (tex != NULL) { *formatOut = tex->format & 0xF; free_texture(tex); *sizeOut = 0; for (i = 0; i < gCurrentSprite->numberOfFrames; i++) { - for (j = (s32) gCurrentSprite->unkC[i]; j < (s32) gCurrentSprite->unkC[i + 1]; j++) { + for (j = gCurrentSprite->unkC.val[i]; j < (s32) gCurrentSprite->unkC.val[i + 1]; j++) { *sizeOut += get_texture_size_from_id(gCurrentSprite->baseTextureId + j); } } diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index 22f5b0c8..40a33e9a 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -45,7 +45,7 @@ Vec3f D_800DC8AC[3][3] = { { {{{ 0.0f, 0.0f, 32.0f }}}, {{{ -130.0f, -60.0f, -68.0f }}}, {{{ -130.0f, 60.0f, -68.0f }}} }, }; -LevelModel *gCurrentLevelModel = NULL; +LevelModel *gCurrentLevelModel = NULL; //Official Name: track LevelHeader *gCurrentLevelHeader2 = NULL; s32 D_800DC920 = -1; @@ -376,7 +376,7 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, TriangleList **tris, } gDPPipeSync(gSceneCurrDisplayList++); initialise_player_viewport_vars(updateRate); - setWeatherLimits(-1, -512); + set_weather_limits(-1, -512); if (gCurrentLevelHeader2->weatherEnable > 0 && numViewports < VIEWPORTS_COUNT_3_PLAYERS) { process_weather(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, &gSceneCurrTriList, tempUpdateRate); } @@ -403,7 +403,7 @@ void render_scene(Gfx **dList, MatrixS **mtx, Vertex **vtx, TriangleList **tris, func_80068408(&gSceneCurrDisplayList, &gSceneCurrMatrix); gDPPipeSync(gSceneCurrDisplayList++); initialise_player_viewport_vars(updateRate); - setWeatherLimits(-1, -512); + set_weather_limits(-1, -512); func_800AD030(get_active_camera_segment()); func_800ACA20(&gSceneCurrDisplayList, &gSceneCurrMatrix, &gSceneCurrVertexList, get_active_camera_segment()); set_text_font(0); @@ -1210,6 +1210,7 @@ UNUSED s32 check_if_inside_segment(Object *obj, s32 segmentIndex) { * Iterates through every existing segment to see which one the active camera is inside. * Uses mainly a two dimensional axis check here, instead of the function above. * Returns the segment currently inside. + * Official Name: trackGetBlock */ s32 get_level_segment_index_from_position(f32 xPos, f32 yPos, f32 zPos) { LevelModelSegmentBoundingBox *bb; @@ -1488,7 +1489,7 @@ s32 check_if_in_draw_range(Object *obj) { obj64 = obj->unk64; obj->segment.unk38.byte.unk39 = ((obj64->racer.transparency + 1) * alpha) >> 8; break; - case BHV_UNK_3A: + case BHV_UNK_3A: //Ghost Object? obj64 = obj->unk64; obj->segment.unk38.byte.unk39 = obj64->racer.transparency; break; @@ -1758,6 +1759,7 @@ void func_8002C71C(LevelModelSegment *segment) { /** * Returns the current loaded level geometry + * Official Name: trackGetTrack */ LevelModel *get_current_level_model(void) { return gCurrentLevelModel; diff --git a/src/weather.c b/src/weather.c index 10e190ef..36efd268 100644 --- a/src/weather.c +++ b/src/weather.c @@ -167,7 +167,10 @@ Object *D_80127C40[16]; /******************************/ -void func_800AB1F0(void) { +/** + * Official Name: initWeather +*/ +void init_weather(void) { D_800E28D8.unk0 = 0; D_800E28D8.unk4 = 0; D_800E28D4 = 0; @@ -193,7 +196,10 @@ void func_800AB1F0(void) { D_80127C08 = 0; } -void setWeatherLimits(s16 arg0, s16 arg1) { +/** + * Official Name: setWeatherLimits +*/ +void set_weather_limits(s16 arg0, s16 arg1) { if (D_80127BF8.unk2 < D_80127BF8.unk0) { D_80127BF8.unk0 = arg0; D_80127BF8.unk2 = arg1; @@ -220,6 +226,7 @@ void setWeatherLimits(s16 arg0, s16 arg1) { /** * Free the weather assets from memory. * If it's raining, then free those too. + * Official Name: freeWeather */ void free_weather_memory(void) { TextureHeader *tempTex; diff --git a/src/weather.h b/src/weather.h index c2395370..39ebaeea 100644 --- a/src/weather.h +++ b/src/weather.h @@ -83,7 +83,7 @@ typedef struct { extern u32 osTvType; -void setWeatherLimits(s16 arg0, s16 arg1); +void set_weather_limits(s16 arg0, s16 arg1); void func_800AC880(s32 arg0); void cameraAddOverrideObject(Object *arg0); void free_rain_memory(void); @@ -101,7 +101,7 @@ void changeWeather(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); s32 coss(s16); s32 sins(s16); -void func_800AB1F0(void); +void init_weather(void); s32 func_800AC0C8(s32, unk80127BF8 *); void f32_matrix_dot(Matrix *arg0, Matrix *arg1, Matrix *arg2); void func_800AC21C(void);