From bf6269f3b993088484c71390af6c3892d7713ab8 Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Thu, 8 Dec 2022 16:05:29 +0000 Subject: [PATCH] object function matches and a lot of cleanup (#329) * match obj_loop_bridge_whaleramp * ya * document main.c * document font.c * Update font.c * match obj_loop_banana * match obj_loop_frog and obj_loop_levelname * Update object_functions.c * fix object.c warnings * label some render flags * finish font.c for now * move struct * font.c finished * match obj_loop_trigger * quick fixes * Update src/font.h Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.h Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.c Co-authored-by: David Benepe * Update src/object_functions.h Co-authored-by: David Benepe Co-authored-by: David Benepe --- asm/non_matchings/menu/func_80093D40.s | 574 ++++++++--------- .../menu/render_track_select_setup_ui.s | 6 +- .../particles/init_particle_assets.s | 137 ---- .../unknown_032760/obj_loop_banana.s | 415 ------------ .../obj_loop_bridge_whaleramp.s | 283 --------- .../unknown_032760/obj_loop_frog.s | 471 -------------- .../unknown_032760/obj_loop_levelname.s | 151 ----- .../unknown_032760/obj_loop_treasuresucker.s | 162 ----- .../unknown_032760/obj_loop_trigger.s | 156 ----- include/level_object_entries.h | 6 + include/structs.h | 22 +- src/camera.c | 12 +- src/camera.h | 2 + src/font.c | 462 +++++++------- src/font.h | 103 ++- src/game.c | 2 +- src/game.h | 2 +- src/main.c | 24 +- src/menu.c | 8 +- src/object_functions.c | 592 +++++++++++++++++- src/object_functions.h | 56 ++ src/objects.c | 443 ++++++------- src/objects.h | 16 +- src/particles.c | 46 +- src/particles.h | 4 +- src/thread0_epc.c | 2 +- src/unknown_0255E0.h | 1 + 27 files changed, 1551 insertions(+), 2607 deletions(-) delete mode 100644 asm/non_matchings/particles/init_particle_assets.s delete mode 100644 asm/non_matchings/unknown_032760/obj_loop_banana.s delete mode 100644 asm/non_matchings/unknown_032760/obj_loop_bridge_whaleramp.s delete mode 100644 asm/non_matchings/unknown_032760/obj_loop_frog.s delete mode 100644 asm/non_matchings/unknown_032760/obj_loop_levelname.s delete mode 100644 asm/non_matchings/unknown_032760/obj_loop_treasuresucker.s delete mode 100644 asm/non_matchings/unknown_032760/obj_loop_trigger.s diff --git a/asm/non_matchings/menu/func_80093D40.s b/asm/non_matchings/menu/func_80093D40.s index a37f8a48..41c9c49f 100644 --- a/asm/non_matchings/menu/func_80093D40.s +++ b/asm/non_matchings/menu/func_80093D40.s @@ -1,287 +1,287 @@ -glabel func_80093D40 -/* 094940 80093D40 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 094944 80093D44 AFB3002C */ sw $s3, 0x2c($sp) -/* 094948 80093D48 3C13800E */ lui $s3, %hi(gMenuOptionCap) # $s3, 0x800e -/* 09494C 80093D4C 26730984 */ addiu $s3, %lo(gMenuOptionCap) # addiu $s3, $s3, 0x984 -/* 094950 80093D50 8E620000 */ lw $v0, ($s3) -/* 094954 80093D54 AFB10024 */ sw $s1, 0x24($sp) -/* 094958 80093D58 AFBF0034 */ sw $ra, 0x34($sp) -/* 09495C 80093D5C AFB40030 */ sw $s4, 0x30($sp) -/* 094960 80093D60 AFB20028 */ sw $s2, 0x28($sp) -/* 094964 80093D64 AFB00020 */ sw $s0, 0x20($sp) -/* 094968 80093D68 AFA40048 */ sw $a0, 0x48($sp) -/* 09496C 80093D6C 00008825 */ move $s1, $zero -/* 094970 80093D70 18400013 */ blez $v0, .L80093DC0 -/* 094974 80093D74 240800A0 */ li $t0, 160 -/* 094978 80093D78 3C108012 */ lui $s0, %hi(gMenuOptionText) # $s0, 0x8012 -/* 09497C 80093D7C 26106A40 */ addiu $s0, %lo(gMenuOptionText) # addiu $s0, $s0, 0x6a40 -.L80093D80: -/* 094980 80093D80 8E040000 */ lw $a0, ($s0) -/* 094984 80093D84 00002825 */ move $a1, $zero -/* 094988 80093D88 00003025 */ move $a2, $zero -/* 09498C 80093D8C 0C031368 */ jal func_800C4DA0 -/* 094990 80093D90 AFA80038 */ sw $t0, 0x38($sp) -/* 094994 80093D94 8FA80038 */ lw $t0, 0x38($sp) -/* 094998 80093D98 24430008 */ addiu $v1, $v0, 8 -/* 09499C 80093D9C 0103082A */ slt $at, $t0, $v1 -/* 0949A0 80093DA0 10200002 */ beqz $at, .L80093DAC -/* 0949A4 80093DA4 00000000 */ nop -/* 0949A8 80093DA8 00604025 */ move $t0, $v1 -.L80093DAC: -/* 0949AC 80093DAC 8E620000 */ lw $v0, ($s3) -/* 0949B0 80093DB0 26310001 */ addiu $s1, $s1, 1 -/* 0949B4 80093DB4 0222082A */ slt $at, $s1, $v0 -/* 0949B8 80093DB8 1420FFF1 */ bnez $at, .L80093D80 -/* 0949BC 80093DBC 26100004 */ addiu $s0, $s0, 4 -.L80093DC0: -/* 0949C0 80093DC0 3C0E8000 */ lui $t6, %hi(osTvType) # $t6, 0x8000 -/* 0949C4 80093DC4 8DCE0300 */ lw $t6, %lo(osTvType)($t6) -/* 0949C8 80093DC8 00028900 */ sll $s1, $v0, 4 -/* 0949CC 80093DCC 15C00003 */ bnez $t6, .L80093DDC -/* 0949D0 80093DD0 2631001C */ addiu $s1, $s1, 0x1c -/* 0949D4 80093DD4 10000002 */ b .L80093DE0 -/* 0949D8 80093DD8 24120084 */ li $s2, 132 -.L80093DDC: -/* 0949DC 80093DDC 24120078 */ li $s2, 120 -.L80093DE0: -/* 0949E0 80093DE0 24040007 */ li $a0, 7 -/* 0949E4 80093DE4 0C0315B4 */ jal func_800C56D0 -/* 0949E8 80093DE8 AFA80038 */ sw $t0, 0x38($sp) -/* 0949EC 80093DEC 0C031525 */ jal assign_dialogue_box_id -/* 0949F0 80093DF0 24040007 */ li $a0, 7 -/* 0949F4 80093DF4 8FA80038 */ lw $t0, 0x38($sp) -/* 0949F8 80093DF8 00118043 */ sra $s0, $s1, 1 -/* 0949FC 80093DFC 0212C021 */ addu $t8, $s0, $s2 -/* 094A00 80093E00 240F00A0 */ li $t7, 160 -/* 094A04 80093E04 00081043 */ sra $v0, $t0, 1 -/* 094A08 80093E08 01E22823 */ subu $a1, $t7, $v0 -/* 094A0C 80093E0C 244700A0 */ addiu $a3, $v0, 0xa0 -/* 094A10 80093E10 AFB80010 */ sw $t8, 0x10($sp) -/* 094A14 80093E14 02503023 */ subu $a2, $s2, $s0 -/* 094A18 80093E18 0C0313B7 */ jal set_current_dialogue_box_coords -/* 094A1C 80093E1C 24040007 */ li $a0, 7 -/* 094A20 80093E20 3C11800E */ lui $s1, %hi(D_800E098C) # $s1, 0x800e -/* 094A24 80093E24 2631098C */ addiu $s1, %lo(D_800E098C) # addiu $s1, $s1, 0x98c -/* 094A28 80093E28 8E240000 */ lw $a0, ($s1) -/* 094A2C 80093E2C 0C01A93E */ jal get_player_id -/* 094A30 80093E30 00000000 */ nop -/* 094A34 80093E34 3C09800E */ lui $t1, %hi(D_800E0990) # $t1, 0x800e -/* 094A38 80093E38 25290990 */ addiu $t1, %lo(D_800E0990) # addiu $t1, $t1, 0x990 -/* 094A3C 80093E3C 0002C880 */ sll $t9, $v0, 2 -/* 094A40 80093E40 03291821 */ addu $v1, $t9, $t1 -/* 094A44 80093E44 906A0003 */ lbu $t2, 3($v1) -/* 094A48 80093E48 90650000 */ lbu $a1, ($v1) -/* 094A4C 80093E4C 90660001 */ lbu $a2, 1($v1) -/* 094A50 80093E50 90670002 */ lbu $a3, 2($v1) -/* 094A54 80093E54 24040007 */ li $a0, 7 -/* 094A58 80093E58 0C0313EF */ jal set_current_dialogue_background_colour -/* 094A5C 80093E5C AFAA0010 */ sw $t2, 0x10($sp) -/* 094A60 80093E60 24040007 */ li $a0, 7 -/* 094A64 80093E64 0C0313DF */ jal set_dialogue_font -/* 094A68 80093E68 00002825 */ move $a1, $zero -/* 094A6C 80093E6C 24040007 */ li $a0, 7 -/* 094A70 80093E70 24050080 */ li $a1, 128 -/* 094A74 80093E74 24060080 */ li $a2, 128 -/* 094A78 80093E78 240700FF */ li $a3, 255 -/* 094A7C 80093E7C 0C031414 */ jal set_current_text_background_colour -/* 094A80 80093E80 AFA00010 */ sw $zero, 0x10($sp) -/* 094A84 80093E84 8E240000 */ lw $a0, ($s1) -/* 094A88 80093E88 0C01A93E */ jal get_player_id -/* 094A8C 80093E8C 00000000 */ nop -/* 094A90 80093E90 3C0C800E */ lui $t4, %hi(D_800E09A0) # $t4, 0x800e -/* 094A94 80093E94 258C09A0 */ addiu $t4, %lo(D_800E09A0) # addiu $t4, $t4, 0x9a0 -/* 094A98 80093E98 00025880 */ sll $t3, $v0, 2 -/* 094A9C 80093E9C 016C1821 */ addu $v1, $t3, $t4 -/* 094AA0 80093EA0 906D0003 */ lbu $t5, 3($v1) -/* 094AA4 80093EA4 90650000 */ lbu $a1, ($v1) -/* 094AA8 80093EA8 90660001 */ lbu $a2, 1($v1) -/* 094AAC 80093EAC 90670002 */ lbu $a3, 2($v1) -/* 094AB0 80093EB0 240E00FF */ li $t6, 255 -/* 094AB4 80093EB4 AFAE0014 */ sw $t6, 0x14($sp) -/* 094AB8 80093EB8 24040007 */ li $a0, 7 -/* 094ABC 80093EBC 0C031400 */ jal set_current_text_colour -/* 094AC0 80093EC0 AFAD0010 */ sw $t5, 0x10($sp) -/* 094AC4 80093EC4 3C148012 */ lui $s4, %hi(gOptionBlinkTimer) # $s4, 0x8012 -/* 094AC8 80093EC8 8E9463BC */ lw $s4, %lo(gOptionBlinkTimer)($s4) -/* 094ACC 80093ECC 3C12800E */ lui $s2, %hi(gMenuSubOption) # $s2, 0x800e -/* 094AD0 80093ED0 001478C0 */ sll $t7, $s4, 3 -/* 094AD4 80093ED4 29E10100 */ slti $at, $t7, 0x100 -/* 094AD8 80093ED8 14200003 */ bnez $at, .L80093EE8 -/* 094ADC 80093EDC 01E0A025 */ move $s4, $t7 -/* 094AE0 80093EE0 241801FF */ li $t8, 511 -/* 094AE4 80093EE4 030FA023 */ subu $s4, $t8, $t7 -.L80093EE8: -/* 094AE8 80093EE8 26520988 */ addiu $s2, %lo(gMenuSubOption) # addiu $s2, $s2, 0x988 -/* 094AEC 80093EEC 8E590000 */ lw $t9, ($s2) -/* 094AF0 80093EF0 24040007 */ li $a0, 7 -/* 094AF4 80093EF4 13200060 */ beqz $t9, .L80094078 -/* 094AF8 80093EF8 24058000 */ li $a1, -32768 -/* 094AFC 80093EFC 3C09800E */ lui $t1, %hi(gTrophyRaceWorldId) # $t1, 0x800e -/* 094B00 80093F00 8D290FE8 */ lw $t1, %lo(gTrophyRaceWorldId)($t1) -/* 094B04 80093F04 24040007 */ li $a0, 7 -/* 094B08 80093F08 1120000F */ beqz $t1, .L80093F48 -/* 094B0C 80093F0C 24058000 */ li $a1, -32768 -/* 094B10 80093F10 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e -/* 094B14 80093F14 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) -/* 094B18 80093F18 2611FFE6 */ addiu $s1, $s0, -0x1a -/* 094B1C 80093F1C 8D470208 */ lw $a3, 0x208($t2) -/* 094B20 80093F20 240B0001 */ li $t3, 1 -/* 094B24 80093F24 240C000C */ li $t4, 12 -/* 094B28 80093F28 AFAC0014 */ sw $t4, 0x14($sp) -/* 094B2C 80093F2C AFAB0010 */ sw $t3, 0x10($sp) -/* 094B30 80093F30 26260008 */ addiu $a2, $s1, 8 -/* 094B34 80093F34 24040007 */ li $a0, 7 -/* 094B38 80093F38 0C03145A */ jal render_dialogue_text -/* 094B3C 80093F3C 24058000 */ li $a1, -32768 -/* 094B40 80093F40 1000000C */ b .L80093F74 -/* 094B44 80093F44 8E580000 */ lw $t8, ($s2) -.L80093F48: -/* 094B48 80093F48 3C0D800E */ lui $t5, %hi(gMenuText) # $t5, 0x800e -/* 094B4C 80093F4C 8DADF4A0 */ lw $t5, %lo(gMenuText)($t5) -/* 094B50 80093F50 2611FFE6 */ addiu $s1, $s0, -0x1a -/* 094B54 80093F54 8DA70210 */ lw $a3, 0x210($t5) -/* 094B58 80093F58 240E0001 */ li $t6, 1 -/* 094B5C 80093F5C 240F000C */ li $t7, 12 -/* 094B60 80093F60 AFAF0014 */ sw $t7, 0x14($sp) -/* 094B64 80093F64 AFAE0010 */ sw $t6, 0x10($sp) -/* 094B68 80093F68 0C03145A */ jal render_dialogue_text -/* 094B6C 80093F6C 26260008 */ addiu $a2, $s1, 8 -/* 094B70 80093F70 8E580000 */ lw $t8, ($s2) -.L80093F74: -/* 094B74 80093F74 24010001 */ li $at, 1 -/* 094B78 80093F78 1701000B */ bne $t8, $at, .L80093FA8 -/* 094B7C 80093F7C 24040007 */ li $a0, 7 -/* 094B80 80093F80 241900FF */ li $t9, 255 -/* 094B84 80093F84 AFB90014 */ sw $t9, 0x14($sp) -/* 094B88 80093F88 24040007 */ li $a0, 7 -/* 094B8C 80093F8C 240500FF */ li $a1, 255 -/* 094B90 80093F90 240600FF */ li $a2, 255 -/* 094B94 80093F94 240700FF */ li $a3, 255 -/* 094B98 80093F98 0C031400 */ jal set_current_text_colour -/* 094B9C 80093F9C AFB40010 */ sw $s4, 0x10($sp) -/* 094BA0 80093FA0 10000008 */ b .L80093FC4 -/* 094BA4 80093FA4 00000000 */ nop -.L80093FA8: -/* 094BA8 80093FA8 240900FF */ li $t1, 255 -/* 094BAC 80093FAC AFA90014 */ sw $t1, 0x14($sp) -/* 094BB0 80093FB0 240500FF */ li $a1, 255 -/* 094BB4 80093FB4 240600FF */ li $a2, 255 -/* 094BB8 80093FB8 240700FF */ li $a3, 255 -/* 094BBC 80093FBC 0C031400 */ jal set_current_text_colour -/* 094BC0 80093FC0 AFA00010 */ sw $zero, 0x10($sp) -.L80093FC4: -/* 094BC4 80093FC4 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e -/* 094BC8 80093FC8 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) -/* 094BCC 80093FCC 240B0001 */ li $t3, 1 -/* 094BD0 80093FD0 8D470218 */ lw $a3, 0x218($t2) -/* 094BD4 80093FD4 240C000C */ li $t4, 12 -/* 094BD8 80093FD8 AFAC0014 */ sw $t4, 0x14($sp) -/* 094BDC 80093FDC AFAB0010 */ sw $t3, 0x10($sp) -/* 094BE0 80093FE0 24040007 */ li $a0, 7 -/* 094BE4 80093FE4 24058000 */ li $a1, -32768 -/* 094BE8 80093FE8 0C03145A */ jal render_dialogue_text -/* 094BEC 80093FEC 2626001C */ addiu $a2, $s1, 0x1c -/* 094BF0 80093FF0 8E4D0000 */ lw $t5, ($s2) -/* 094BF4 80093FF4 24010002 */ li $at, 2 -/* 094BF8 80093FF8 15A1000B */ bne $t5, $at, .L80094028 -/* 094BFC 80093FFC 24040007 */ li $a0, 7 -/* 094C00 80094000 240E00FF */ li $t6, 255 -/* 094C04 80094004 AFAE0014 */ sw $t6, 0x14($sp) -/* 094C08 80094008 24040007 */ li $a0, 7 -/* 094C0C 8009400C 240500FF */ li $a1, 255 -/* 094C10 80094010 240600FF */ li $a2, 255 -/* 094C14 80094014 240700FF */ li $a3, 255 -/* 094C18 80094018 0C031400 */ jal set_current_text_colour -/* 094C1C 8009401C AFB40010 */ sw $s4, 0x10($sp) -/* 094C20 80094020 10000008 */ b .L80094044 -/* 094C24 80094024 00000000 */ nop -.L80094028: -/* 094C28 80094028 240F00FF */ li $t7, 255 -/* 094C2C 8009402C AFAF0014 */ sw $t7, 0x14($sp) -/* 094C30 80094030 240500FF */ li $a1, 255 -/* 094C34 80094034 240600FF */ li $a2, 255 -/* 094C38 80094038 240700FF */ li $a3, 255 -/* 094C3C 8009403C 0C031400 */ jal set_current_text_colour -/* 094C40 80094040 AFA00010 */ sw $zero, 0x10($sp) -.L80094044: -/* 094C44 80094044 3C18800E */ lui $t8, %hi(gMenuText) # $t8, 0x800e -/* 094C48 80094048 8F18F4A0 */ lw $t8, %lo(gMenuText)($t8) -/* 094C4C 8009404C 24190001 */ li $t9, 1 -/* 094C50 80094050 8F070154 */ lw $a3, 0x154($t8) -/* 094C54 80094054 2409000C */ li $t1, 12 -/* 094C58 80094058 AFA90014 */ sw $t1, 0x14($sp) -/* 094C5C 8009405C AFB90010 */ sw $t9, 0x10($sp) -/* 094C60 80094060 24040007 */ li $a0, 7 -/* 094C64 80094064 24058000 */ li $a1, -32768 -/* 094C68 80094068 0C03145A */ jal render_dialogue_text -/* 094C6C 8009406C 2626002C */ addiu $a2, $s1, 0x2c -/* 094C70 80094070 10000035 */ b .L80094148 -/* 094C74 80094074 00000000 */ nop -.L80094078: -/* 094C78 80094078 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e -/* 094C7C 8009407C 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) -/* 094C80 80094080 8E2B0000 */ lw $t3, ($s1) -/* 094C84 80094084 8D470214 */ lw $a3, 0x214($t2) -/* 094C88 80094088 240D000C */ li $t5, 12 -/* 094C8C 8009408C 256C0001 */ addiu $t4, $t3, 1 -/* 094C90 80094090 AFAC0010 */ sw $t4, 0x10($sp) -/* 094C94 80094094 AFAD0014 */ sw $t5, 0x14($sp) -/* 094C98 80094098 0C03145A */ jal render_dialogue_text -/* 094C9C 8009409C 2406000C */ li $a2, 12 -/* 094CA0 800940A0 8E6E0000 */ lw $t6, ($s3) -/* 094CA4 800940A4 00008825 */ move $s1, $zero -/* 094CA8 800940A8 19C00027 */ blez $t6, .L80094148 -/* 094CAC 800940AC 24120020 */ li $s2, 32 -/* 094CB0 800940B0 3C108012 */ lui $s0, %hi(gMenuOptionText) # $s0, 0x8012 -/* 094CB4 800940B4 26106A40 */ addiu $s0, %lo(gMenuOptionText) # addiu $s0, $s0, 0x6a40 -.L800940B8: -/* 094CB8 800940B8 3C0F8012 */ lui $t7, %hi(gMenuOption) # $t7, 0x8012 -/* 094CBC 800940BC 8DEF6A68 */ lw $t7, %lo(gMenuOption)($t7) -/* 094CC0 800940C0 24040007 */ li $a0, 7 -/* 094CC4 800940C4 162F000B */ bne $s1, $t7, .L800940F4 -/* 094CC8 800940C8 240500FF */ li $a1, 255 -/* 094CCC 800940CC 241800FF */ li $t8, 255 -/* 094CD0 800940D0 AFB80014 */ sw $t8, 0x14($sp) -/* 094CD4 800940D4 24040007 */ li $a0, 7 -/* 094CD8 800940D8 240500FF */ li $a1, 255 -/* 094CDC 800940DC 240600FF */ li $a2, 255 -/* 094CE0 800940E0 240700FF */ li $a3, 255 -/* 094CE4 800940E4 0C031400 */ jal set_current_text_colour -/* 094CE8 800940E8 AFB40010 */ sw $s4, 0x10($sp) -/* 094CEC 800940EC 10000008 */ b .L80094110 -/* 094CF0 800940F0 8E070000 */ lw $a3, ($s0) -.L800940F4: -/* 094CF4 800940F4 241900FF */ li $t9, 255 -/* 094CF8 800940F8 AFB90014 */ sw $t9, 0x14($sp) -/* 094CFC 800940FC 240600FF */ li $a2, 255 -/* 094D00 80094100 240700FF */ li $a3, 255 -/* 094D04 80094104 0C031400 */ jal set_current_text_colour -/* 094D08 80094108 AFA00010 */ sw $zero, 0x10($sp) -/* 094D0C 8009410C 8E070000 */ lw $a3, ($s0) -.L80094110: -/* 094D10 80094110 24090001 */ li $t1, 1 -/* 094D14 80094114 240A000C */ li $t2, 12 -/* 094D18 80094118 AFAA0014 */ sw $t2, 0x14($sp) -/* 094D1C 8009411C AFA90010 */ sw $t1, 0x10($sp) -/* 094D20 80094120 24040007 */ li $a0, 7 -/* 094D24 80094124 24058000 */ li $a1, -32768 -/* 094D28 80094128 0C03145A */ jal render_dialogue_text -/* 094D2C 8009412C 02403025 */ move $a2, $s2 -/* 094D30 80094130 8E6B0000 */ lw $t3, ($s3) -/* 094D34 80094134 26310001 */ addiu $s1, $s1, 1 -/* 094D38 80094138 022B082A */ slt $at, $s1, $t3 -/* 094D3C 8009413C 26100004 */ addiu $s0, $s0, 4 -/* 094D40 80094140 1420FFDD */ bnez $at, .L800940B8 -/* 094D44 80094144 26520010 */ addiu $s2, $s2, 0x10 -.L80094148: -/* 094D48 80094148 0C03157D */ jal open_dialogue_box -/* 094D4C 8009414C 24040007 */ li $a0, 7 -/* 094D50 80094150 8FBF0034 */ lw $ra, 0x34($sp) -/* 094D54 80094154 8FB00020 */ lw $s0, 0x20($sp) -/* 094D58 80094158 8FB10024 */ lw $s1, 0x24($sp) -/* 094D5C 8009415C 8FB20028 */ lw $s2, 0x28($sp) -/* 094D60 80094160 8FB3002C */ lw $s3, 0x2c($sp) -/* 094D64 80094164 8FB40030 */ lw $s4, 0x30($sp) -/* 094D68 80094168 03E00008 */ jr $ra -/* 094D6C 8009416C 27BD0048 */ addiu $sp, $sp, 0x48 - +glabel func_80093D40 +/* 094940 80093D40 27BDFFB8 */ addiu $sp, $sp, -0x48 +/* 094944 80093D44 AFB3002C */ sw $s3, 0x2c($sp) +/* 094948 80093D48 3C13800E */ lui $s3, %hi(gMenuOptionCap) # $s3, 0x800e +/* 09494C 80093D4C 26730984 */ addiu $s3, %lo(gMenuOptionCap) # addiu $s3, $s3, 0x984 +/* 094950 80093D50 8E620000 */ lw $v0, ($s3) +/* 094954 80093D54 AFB10024 */ sw $s1, 0x24($sp) +/* 094958 80093D58 AFBF0034 */ sw $ra, 0x34($sp) +/* 09495C 80093D5C AFB40030 */ sw $s4, 0x30($sp) +/* 094960 80093D60 AFB20028 */ sw $s2, 0x28($sp) +/* 094964 80093D64 AFB00020 */ sw $s0, 0x20($sp) +/* 094968 80093D68 AFA40048 */ sw $a0, 0x48($sp) +/* 09496C 80093D6C 00008825 */ move $s1, $zero +/* 094970 80093D70 18400013 */ blez $v0, .L80093DC0 +/* 094974 80093D74 240800A0 */ li $t0, 160 +/* 094978 80093D78 3C108012 */ lui $s0, %hi(gMenuOptionText) # $s0, 0x8012 +/* 09497C 80093D7C 26106A40 */ addiu $s0, %lo(gMenuOptionText) # addiu $s0, $s0, 0x6a40 +.L80093D80: +/* 094980 80093D80 8E040000 */ lw $a0, ($s0) +/* 094984 80093D84 00002825 */ move $a1, $zero +/* 094988 80093D88 00003025 */ move $a2, $zero +/* 09498C 80093D8C 0C031368 */ jal get_text_width +/* 094990 80093D90 AFA80038 */ sw $t0, 0x38($sp) +/* 094994 80093D94 8FA80038 */ lw $t0, 0x38($sp) +/* 094998 80093D98 24430008 */ addiu $v1, $v0, 8 +/* 09499C 80093D9C 0103082A */ slt $at, $t0, $v1 +/* 0949A0 80093DA0 10200002 */ beqz $at, .L80093DAC +/* 0949A4 80093DA4 00000000 */ nop +/* 0949A8 80093DA8 00604025 */ move $t0, $v1 +.L80093DAC: +/* 0949AC 80093DAC 8E620000 */ lw $v0, ($s3) +/* 0949B0 80093DB0 26310001 */ addiu $s1, $s1, 1 +/* 0949B4 80093DB4 0222082A */ slt $at, $s1, $v0 +/* 0949B8 80093DB8 1420FFF1 */ bnez $at, .L80093D80 +/* 0949BC 80093DBC 26100004 */ addiu $s0, $s0, 4 +.L80093DC0: +/* 0949C0 80093DC0 3C0E8000 */ lui $t6, %hi(osTvType) # $t6, 0x8000 +/* 0949C4 80093DC4 8DCE0300 */ lw $t6, %lo(osTvType)($t6) +/* 0949C8 80093DC8 00028900 */ sll $s1, $v0, 4 +/* 0949CC 80093DCC 15C00003 */ bnez $t6, .L80093DDC +/* 0949D0 80093DD0 2631001C */ addiu $s1, $s1, 0x1c +/* 0949D4 80093DD4 10000002 */ b .L80093DE0 +/* 0949D8 80093DD8 24120084 */ li $s2, 132 +.L80093DDC: +/* 0949DC 80093DDC 24120078 */ li $s2, 120 +.L80093DE0: +/* 0949E0 80093DE0 24040007 */ li $a0, 7 +/* 0949E4 80093DE4 0C0315B4 */ jal func_800C56D0 +/* 0949E8 80093DE8 AFA80038 */ sw $t0, 0x38($sp) +/* 0949EC 80093DEC 0C031525 */ jal assign_dialogue_box_id +/* 0949F0 80093DF0 24040007 */ li $a0, 7 +/* 0949F4 80093DF4 8FA80038 */ lw $t0, 0x38($sp) +/* 0949F8 80093DF8 00118043 */ sra $s0, $s1, 1 +/* 0949FC 80093DFC 0212C021 */ addu $t8, $s0, $s2 +/* 094A00 80093E00 240F00A0 */ li $t7, 160 +/* 094A04 80093E04 00081043 */ sra $v0, $t0, 1 +/* 094A08 80093E08 01E22823 */ subu $a1, $t7, $v0 +/* 094A0C 80093E0C 244700A0 */ addiu $a3, $v0, 0xa0 +/* 094A10 80093E10 AFB80010 */ sw $t8, 0x10($sp) +/* 094A14 80093E14 02503023 */ subu $a2, $s2, $s0 +/* 094A18 80093E18 0C0313B7 */ jal set_current_dialogue_box_coords +/* 094A1C 80093E1C 24040007 */ li $a0, 7 +/* 094A20 80093E20 3C11800E */ lui $s1, %hi(D_800E098C) # $s1, 0x800e +/* 094A24 80093E24 2631098C */ addiu $s1, %lo(D_800E098C) # addiu $s1, $s1, 0x98c +/* 094A28 80093E28 8E240000 */ lw $a0, ($s1) +/* 094A2C 80093E2C 0C01A93E */ jal get_player_id +/* 094A30 80093E30 00000000 */ nop +/* 094A34 80093E34 3C09800E */ lui $t1, %hi(D_800E0990) # $t1, 0x800e +/* 094A38 80093E38 25290990 */ addiu $t1, %lo(D_800E0990) # addiu $t1, $t1, 0x990 +/* 094A3C 80093E3C 0002C880 */ sll $t9, $v0, 2 +/* 094A40 80093E40 03291821 */ addu $v1, $t9, $t1 +/* 094A44 80093E44 906A0003 */ lbu $t2, 3($v1) +/* 094A48 80093E48 90650000 */ lbu $a1, ($v1) +/* 094A4C 80093E4C 90660001 */ lbu $a2, 1($v1) +/* 094A50 80093E50 90670002 */ lbu $a3, 2($v1) +/* 094A54 80093E54 24040007 */ li $a0, 7 +/* 094A58 80093E58 0C0313EF */ jal set_current_dialogue_background_colour +/* 094A5C 80093E5C AFAA0010 */ sw $t2, 0x10($sp) +/* 094A60 80093E60 24040007 */ li $a0, 7 +/* 094A64 80093E64 0C0313DF */ jal set_dialogue_font +/* 094A68 80093E68 00002825 */ move $a1, $zero +/* 094A6C 80093E6C 24040007 */ li $a0, 7 +/* 094A70 80093E70 24050080 */ li $a1, 128 +/* 094A74 80093E74 24060080 */ li $a2, 128 +/* 094A78 80093E78 240700FF */ li $a3, 255 +/* 094A7C 80093E7C 0C031414 */ jal set_current_text_background_colour +/* 094A80 80093E80 AFA00010 */ sw $zero, 0x10($sp) +/* 094A84 80093E84 8E240000 */ lw $a0, ($s1) +/* 094A88 80093E88 0C01A93E */ jal get_player_id +/* 094A8C 80093E8C 00000000 */ nop +/* 094A90 80093E90 3C0C800E */ lui $t4, %hi(D_800E09A0) # $t4, 0x800e +/* 094A94 80093E94 258C09A0 */ addiu $t4, %lo(D_800E09A0) # addiu $t4, $t4, 0x9a0 +/* 094A98 80093E98 00025880 */ sll $t3, $v0, 2 +/* 094A9C 80093E9C 016C1821 */ addu $v1, $t3, $t4 +/* 094AA0 80093EA0 906D0003 */ lbu $t5, 3($v1) +/* 094AA4 80093EA4 90650000 */ lbu $a1, ($v1) +/* 094AA8 80093EA8 90660001 */ lbu $a2, 1($v1) +/* 094AAC 80093EAC 90670002 */ lbu $a3, 2($v1) +/* 094AB0 80093EB0 240E00FF */ li $t6, 255 +/* 094AB4 80093EB4 AFAE0014 */ sw $t6, 0x14($sp) +/* 094AB8 80093EB8 24040007 */ li $a0, 7 +/* 094ABC 80093EBC 0C031400 */ jal set_current_text_colour +/* 094AC0 80093EC0 AFAD0010 */ sw $t5, 0x10($sp) +/* 094AC4 80093EC4 3C148012 */ lui $s4, %hi(gOptionBlinkTimer) # $s4, 0x8012 +/* 094AC8 80093EC8 8E9463BC */ lw $s4, %lo(gOptionBlinkTimer)($s4) +/* 094ACC 80093ECC 3C12800E */ lui $s2, %hi(gMenuSubOption) # $s2, 0x800e +/* 094AD0 80093ED0 001478C0 */ sll $t7, $s4, 3 +/* 094AD4 80093ED4 29E10100 */ slti $at, $t7, 0x100 +/* 094AD8 80093ED8 14200003 */ bnez $at, .L80093EE8 +/* 094ADC 80093EDC 01E0A025 */ move $s4, $t7 +/* 094AE0 80093EE0 241801FF */ li $t8, 511 +/* 094AE4 80093EE4 030FA023 */ subu $s4, $t8, $t7 +.L80093EE8: +/* 094AE8 80093EE8 26520988 */ addiu $s2, %lo(gMenuSubOption) # addiu $s2, $s2, 0x988 +/* 094AEC 80093EEC 8E590000 */ lw $t9, ($s2) +/* 094AF0 80093EF0 24040007 */ li $a0, 7 +/* 094AF4 80093EF4 13200060 */ beqz $t9, .L80094078 +/* 094AF8 80093EF8 24058000 */ li $a1, -32768 +/* 094AFC 80093EFC 3C09800E */ lui $t1, %hi(gTrophyRaceWorldId) # $t1, 0x800e +/* 094B00 80093F00 8D290FE8 */ lw $t1, %lo(gTrophyRaceWorldId)($t1) +/* 094B04 80093F04 24040007 */ li $a0, 7 +/* 094B08 80093F08 1120000F */ beqz $t1, .L80093F48 +/* 094B0C 80093F0C 24058000 */ li $a1, -32768 +/* 094B10 80093F10 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e +/* 094B14 80093F14 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) +/* 094B18 80093F18 2611FFE6 */ addiu $s1, $s0, -0x1a +/* 094B1C 80093F1C 8D470208 */ lw $a3, 0x208($t2) +/* 094B20 80093F20 240B0001 */ li $t3, 1 +/* 094B24 80093F24 240C000C */ li $t4, 12 +/* 094B28 80093F28 AFAC0014 */ sw $t4, 0x14($sp) +/* 094B2C 80093F2C AFAB0010 */ sw $t3, 0x10($sp) +/* 094B30 80093F30 26260008 */ addiu $a2, $s1, 8 +/* 094B34 80093F34 24040007 */ li $a0, 7 +/* 094B38 80093F38 0C03145A */ jal render_dialogue_text +/* 094B3C 80093F3C 24058000 */ li $a1, -32768 +/* 094B40 80093F40 1000000C */ b .L80093F74 +/* 094B44 80093F44 8E580000 */ lw $t8, ($s2) +.L80093F48: +/* 094B48 80093F48 3C0D800E */ lui $t5, %hi(gMenuText) # $t5, 0x800e +/* 094B4C 80093F4C 8DADF4A0 */ lw $t5, %lo(gMenuText)($t5) +/* 094B50 80093F50 2611FFE6 */ addiu $s1, $s0, -0x1a +/* 094B54 80093F54 8DA70210 */ lw $a3, 0x210($t5) +/* 094B58 80093F58 240E0001 */ li $t6, 1 +/* 094B5C 80093F5C 240F000C */ li $t7, 12 +/* 094B60 80093F60 AFAF0014 */ sw $t7, 0x14($sp) +/* 094B64 80093F64 AFAE0010 */ sw $t6, 0x10($sp) +/* 094B68 80093F68 0C03145A */ jal render_dialogue_text +/* 094B6C 80093F6C 26260008 */ addiu $a2, $s1, 8 +/* 094B70 80093F70 8E580000 */ lw $t8, ($s2) +.L80093F74: +/* 094B74 80093F74 24010001 */ li $at, 1 +/* 094B78 80093F78 1701000B */ bne $t8, $at, .L80093FA8 +/* 094B7C 80093F7C 24040007 */ li $a0, 7 +/* 094B80 80093F80 241900FF */ li $t9, 255 +/* 094B84 80093F84 AFB90014 */ sw $t9, 0x14($sp) +/* 094B88 80093F88 24040007 */ li $a0, 7 +/* 094B8C 80093F8C 240500FF */ li $a1, 255 +/* 094B90 80093F90 240600FF */ li $a2, 255 +/* 094B94 80093F94 240700FF */ li $a3, 255 +/* 094B98 80093F98 0C031400 */ jal set_current_text_colour +/* 094B9C 80093F9C AFB40010 */ sw $s4, 0x10($sp) +/* 094BA0 80093FA0 10000008 */ b .L80093FC4 +/* 094BA4 80093FA4 00000000 */ nop +.L80093FA8: +/* 094BA8 80093FA8 240900FF */ li $t1, 255 +/* 094BAC 80093FAC AFA90014 */ sw $t1, 0x14($sp) +/* 094BB0 80093FB0 240500FF */ li $a1, 255 +/* 094BB4 80093FB4 240600FF */ li $a2, 255 +/* 094BB8 80093FB8 240700FF */ li $a3, 255 +/* 094BBC 80093FBC 0C031400 */ jal set_current_text_colour +/* 094BC0 80093FC0 AFA00010 */ sw $zero, 0x10($sp) +.L80093FC4: +/* 094BC4 80093FC4 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e +/* 094BC8 80093FC8 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) +/* 094BCC 80093FCC 240B0001 */ li $t3, 1 +/* 094BD0 80093FD0 8D470218 */ lw $a3, 0x218($t2) +/* 094BD4 80093FD4 240C000C */ li $t4, 12 +/* 094BD8 80093FD8 AFAC0014 */ sw $t4, 0x14($sp) +/* 094BDC 80093FDC AFAB0010 */ sw $t3, 0x10($sp) +/* 094BE0 80093FE0 24040007 */ li $a0, 7 +/* 094BE4 80093FE4 24058000 */ li $a1, -32768 +/* 094BE8 80093FE8 0C03145A */ jal render_dialogue_text +/* 094BEC 80093FEC 2626001C */ addiu $a2, $s1, 0x1c +/* 094BF0 80093FF0 8E4D0000 */ lw $t5, ($s2) +/* 094BF4 80093FF4 24010002 */ li $at, 2 +/* 094BF8 80093FF8 15A1000B */ bne $t5, $at, .L80094028 +/* 094BFC 80093FFC 24040007 */ li $a0, 7 +/* 094C00 80094000 240E00FF */ li $t6, 255 +/* 094C04 80094004 AFAE0014 */ sw $t6, 0x14($sp) +/* 094C08 80094008 24040007 */ li $a0, 7 +/* 094C0C 8009400C 240500FF */ li $a1, 255 +/* 094C10 80094010 240600FF */ li $a2, 255 +/* 094C14 80094014 240700FF */ li $a3, 255 +/* 094C18 80094018 0C031400 */ jal set_current_text_colour +/* 094C1C 8009401C AFB40010 */ sw $s4, 0x10($sp) +/* 094C20 80094020 10000008 */ b .L80094044 +/* 094C24 80094024 00000000 */ nop +.L80094028: +/* 094C28 80094028 240F00FF */ li $t7, 255 +/* 094C2C 8009402C AFAF0014 */ sw $t7, 0x14($sp) +/* 094C30 80094030 240500FF */ li $a1, 255 +/* 094C34 80094034 240600FF */ li $a2, 255 +/* 094C38 80094038 240700FF */ li $a3, 255 +/* 094C3C 8009403C 0C031400 */ jal set_current_text_colour +/* 094C40 80094040 AFA00010 */ sw $zero, 0x10($sp) +.L80094044: +/* 094C44 80094044 3C18800E */ lui $t8, %hi(gMenuText) # $t8, 0x800e +/* 094C48 80094048 8F18F4A0 */ lw $t8, %lo(gMenuText)($t8) +/* 094C4C 8009404C 24190001 */ li $t9, 1 +/* 094C50 80094050 8F070154 */ lw $a3, 0x154($t8) +/* 094C54 80094054 2409000C */ li $t1, 12 +/* 094C58 80094058 AFA90014 */ sw $t1, 0x14($sp) +/* 094C5C 8009405C AFB90010 */ sw $t9, 0x10($sp) +/* 094C60 80094060 24040007 */ li $a0, 7 +/* 094C64 80094064 24058000 */ li $a1, -32768 +/* 094C68 80094068 0C03145A */ jal render_dialogue_text +/* 094C6C 8009406C 2626002C */ addiu $a2, $s1, 0x2c +/* 094C70 80094070 10000035 */ b .L80094148 +/* 094C74 80094074 00000000 */ nop +.L80094078: +/* 094C78 80094078 3C0A800E */ lui $t2, %hi(gMenuText) # $t2, 0x800e +/* 094C7C 8009407C 8D4AF4A0 */ lw $t2, %lo(gMenuText)($t2) +/* 094C80 80094080 8E2B0000 */ lw $t3, ($s1) +/* 094C84 80094084 8D470214 */ lw $a3, 0x214($t2) +/* 094C88 80094088 240D000C */ li $t5, 12 +/* 094C8C 8009408C 256C0001 */ addiu $t4, $t3, 1 +/* 094C90 80094090 AFAC0010 */ sw $t4, 0x10($sp) +/* 094C94 80094094 AFAD0014 */ sw $t5, 0x14($sp) +/* 094C98 80094098 0C03145A */ jal render_dialogue_text +/* 094C9C 8009409C 2406000C */ li $a2, 12 +/* 094CA0 800940A0 8E6E0000 */ lw $t6, ($s3) +/* 094CA4 800940A4 00008825 */ move $s1, $zero +/* 094CA8 800940A8 19C00027 */ blez $t6, .L80094148 +/* 094CAC 800940AC 24120020 */ li $s2, 32 +/* 094CB0 800940B0 3C108012 */ lui $s0, %hi(gMenuOptionText) # $s0, 0x8012 +/* 094CB4 800940B4 26106A40 */ addiu $s0, %lo(gMenuOptionText) # addiu $s0, $s0, 0x6a40 +.L800940B8: +/* 094CB8 800940B8 3C0F8012 */ lui $t7, %hi(gMenuOption) # $t7, 0x8012 +/* 094CBC 800940BC 8DEF6A68 */ lw $t7, %lo(gMenuOption)($t7) +/* 094CC0 800940C0 24040007 */ li $a0, 7 +/* 094CC4 800940C4 162F000B */ bne $s1, $t7, .L800940F4 +/* 094CC8 800940C8 240500FF */ li $a1, 255 +/* 094CCC 800940CC 241800FF */ li $t8, 255 +/* 094CD0 800940D0 AFB80014 */ sw $t8, 0x14($sp) +/* 094CD4 800940D4 24040007 */ li $a0, 7 +/* 094CD8 800940D8 240500FF */ li $a1, 255 +/* 094CDC 800940DC 240600FF */ li $a2, 255 +/* 094CE0 800940E0 240700FF */ li $a3, 255 +/* 094CE4 800940E4 0C031400 */ jal set_current_text_colour +/* 094CE8 800940E8 AFB40010 */ sw $s4, 0x10($sp) +/* 094CEC 800940EC 10000008 */ b .L80094110 +/* 094CF0 800940F0 8E070000 */ lw $a3, ($s0) +.L800940F4: +/* 094CF4 800940F4 241900FF */ li $t9, 255 +/* 094CF8 800940F8 AFB90014 */ sw $t9, 0x14($sp) +/* 094CFC 800940FC 240600FF */ li $a2, 255 +/* 094D00 80094100 240700FF */ li $a3, 255 +/* 094D04 80094104 0C031400 */ jal set_current_text_colour +/* 094D08 80094108 AFA00010 */ sw $zero, 0x10($sp) +/* 094D0C 8009410C 8E070000 */ lw $a3, ($s0) +.L80094110: +/* 094D10 80094110 24090001 */ li $t1, 1 +/* 094D14 80094114 240A000C */ li $t2, 12 +/* 094D18 80094118 AFAA0014 */ sw $t2, 0x14($sp) +/* 094D1C 8009411C AFA90010 */ sw $t1, 0x10($sp) +/* 094D20 80094120 24040007 */ li $a0, 7 +/* 094D24 80094124 24058000 */ li $a1, -32768 +/* 094D28 80094128 0C03145A */ jal render_dialogue_text +/* 094D2C 8009412C 02403025 */ move $a2, $s2 +/* 094D30 80094130 8E6B0000 */ lw $t3, ($s3) +/* 094D34 80094134 26310001 */ addiu $s1, $s1, 1 +/* 094D38 80094138 022B082A */ slt $at, $s1, $t3 +/* 094D3C 8009413C 26100004 */ addiu $s0, $s0, 4 +/* 094D40 80094140 1420FFDD */ bnez $at, .L800940B8 +/* 094D44 80094144 26520010 */ addiu $s2, $s2, 0x10 +.L80094148: +/* 094D48 80094148 0C03157D */ jal open_dialogue_box +/* 094D4C 8009414C 24040007 */ li $a0, 7 +/* 094D50 80094150 8FBF0034 */ lw $ra, 0x34($sp) +/* 094D54 80094154 8FB00020 */ lw $s0, 0x20($sp) +/* 094D58 80094158 8FB10024 */ lw $s1, 0x24($sp) +/* 094D5C 8009415C 8FB20028 */ lw $s2, 0x28($sp) +/* 094D60 80094160 8FB3002C */ lw $s3, 0x2c($sp) +/* 094D64 80094164 8FB40030 */ lw $s4, 0x30($sp) +/* 094D68 80094168 03E00008 */ jr $ra +/* 094D6C 8009416C 27BD0048 */ addiu $sp, $sp, 0x48 + diff --git a/asm/non_matchings/menu/render_track_select_setup_ui.s b/asm/non_matchings/menu/render_track_select_setup_ui.s index a8fdf5ce..3993ff62 100644 --- a/asm/non_matchings/menu/render_track_select_setup_ui.s +++ b/asm/non_matchings/menu/render_track_select_setup_ui.s @@ -194,14 +194,14 @@ glabel render_track_select_setup_ui /* 091DEC 800911EC 8F39F4A0 */ lw $t9, %lo(gMenuText)($t9) /* 091DF0 800911F0 00002825 */ move $a1, $zero /* 091DF4 800911F4 8F240248 */ lw $a0, 0x248($t9) -/* 091DF8 800911F8 0C031368 */ jal func_800C4DA0 +/* 091DF8 800911F8 0C031368 */ jal get_text_width /* 091DFC 800911FC 00003025 */ move $a2, $zero /* 091E00 80091200 3C08800E */ lui $t0, %hi(gMenuText) # $t0, 0x800e /* 091E04 80091204 8D08F4A0 */ lw $t0, %lo(gMenuText)($t0) /* 091E08 80091208 0040A025 */ move $s4, $v0 /* 091E0C 8009120C 8D04024C */ lw $a0, 0x24c($t0) /* 091E10 80091210 00002825 */ move $a1, $zero -/* 091E14 80091214 0C031368 */ jal func_800C4DA0 +/* 091E14 80091214 0C031368 */ jal get_text_width /* 091E18 80091218 00003025 */ move $a2, $zero /* 091E1C 8009121C 0282082A */ slt $at, $s4, $v0 /* 091E20 80091220 10200002 */ beqz $at, .L8009122C @@ -921,7 +921,7 @@ glabel render_track_select_setup_ui /* 0928AC 80091CAC 8DADF4A0 */ lw $t5, %lo(gMenuText)($t5) /* 0928B0 80091CB0 00002825 */ move $a1, $zero /* 0928B4 80091CB4 8DA40220 */ lw $a0, 0x220($t5) -/* 0928B8 80091CB8 0C031368 */ jal func_800C4DA0 +/* 0928B8 80091CB8 0C031368 */ jal get_text_width /* 0928BC 80091CBC 00003025 */ move $a2, $zero /* 0928C0 80091CC0 3C12800E */ lui $s2, %hi(gTwoPlayerRacerCountMenu) # $s2, 0x800e /* 0928C4 80091CC4 265206E4 */ addiu $s2, %lo(gTwoPlayerRacerCountMenu) # addiu $s2, $s2, 0x6e4 diff --git a/asm/non_matchings/particles/init_particle_assets.s b/asm/non_matchings/particles/init_particle_assets.s deleted file mode 100644 index 825c1820..00000000 --- a/asm/non_matchings/particles/init_particle_assets.s +++ /dev/null @@ -1,137 +0,0 @@ -glabel init_particle_assets -/* 0AF130 800AE530 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0AF134 800AE534 AFBF002C */ sw $ra, 0x2c($sp) -/* 0AF138 800AE538 AFB50028 */ sw $s5, 0x28($sp) -/* 0AF13C 800AE53C AFB40024 */ sw $s4, 0x24($sp) -/* 0AF140 800AE540 AFB30020 */ sw $s3, 0x20($sp) -/* 0AF144 800AE544 AFB2001C */ sw $s2, 0x1c($sp) -/* 0AF148 800AE548 AFB10018 */ sw $s1, 0x18($sp) -/* 0AF14C 800AE54C 0C02B924 */ jal func_800AE490 -/* 0AF150 800AE550 AFB00014 */ sw $s0, 0x14($sp) -/* 0AF154 800AE554 0C01DB16 */ jal load_asset_section_from_rom -/* 0AF158 800AE558 24040028 */ li $a0, 40 -/* 0AF15C 800AE55C 3C05800E */ lui $a1, %hi(gParticlesAssetTableCount) # $a1, 0x800e -/* 0AF160 800AE560 2406FFFF */ li $a2, -1 -/* 0AF164 800AE564 3C12800E */ lui $s2, %hi(gParticlesAssetTable) # $s2, 0x800e -/* 0AF168 800AE568 26522CF0 */ addiu $s2, %lo(gParticlesAssetTable) # addiu $s2, $s2, 0x2cf0 -/* 0AF16C 800AE56C 24A52CE8 */ addiu $a1, %lo(gParticlesAssetTableCount) # addiu $a1, $a1, 0x2ce8 -/* 0AF170 800AE570 00067080 */ sll $t6, $a2, 2 -/* 0AF174 800AE574 AE420000 */ sw $v0, ($s2) -/* 0AF178 800AE578 ACA60000 */ sw $a2, ($a1) -/* 0AF17C 800AE57C 004E7821 */ addu $t7, $v0, $t6 -/* 0AF180 800AE580 8DF80004 */ lw $t8, 4($t7) -/* 0AF184 800AE584 00C01825 */ move $v1, $a2 -/* 0AF188 800AE588 10D80009 */ beq $a2, $t8, .L800AE5B0 -/* 0AF18C 800AE58C 00402025 */ move $a0, $v0 -/* 0AF190 800AE590 24790001 */ addiu $t9, $v1, 1 -.L800AE594: -/* 0AF194 800AE594 00194080 */ sll $t0, $t9, 2 -/* 0AF198 800AE598 00884821 */ addu $t1, $a0, $t0 -/* 0AF19C 800AE59C ACB90000 */ sw $t9, ($a1) -/* 0AF1A0 800AE5A0 8D2A0004 */ lw $t2, 4($t1) -/* 0AF1A4 800AE5A4 03201825 */ move $v1, $t9 -/* 0AF1A8 800AE5A8 14CAFFFA */ bne $a2, $t2, .L800AE594 -/* 0AF1AC 800AE5AC 24790001 */ addiu $t9, $v1, 1 -.L800AE5B0: -/* 0AF1B0 800AE5B0 0C01DB16 */ jal load_asset_section_from_rom -/* 0AF1B4 800AE5B4 24040029 */ li $a0, 41 -/* 0AF1B8 800AE5B8 3C05800E */ lui $a1, %hi(gParticlesAssetTableCount) # $a1, 0x800e -/* 0AF1BC 800AE5BC 24A52CE8 */ addiu $a1, %lo(gParticlesAssetTableCount) # addiu $a1, $a1, 0x2ce8 -/* 0AF1C0 800AE5C0 8CAB0000 */ lw $t3, ($a1) -/* 0AF1C4 800AE5C4 3C03800E */ lui $v1, %hi(gParticlesAssets) # $v1, 0x800e -/* 0AF1C8 800AE5C8 24632CEC */ addiu $v1, %lo(gParticlesAssets) # addiu $v1, $v1, 0x2cec -/* 0AF1CC 800AE5CC AC620000 */ sw $v0, ($v1) -/* 0AF1D0 800AE5D0 1960000F */ blez $t3, .L800AE610 -/* 0AF1D4 800AE5D4 00008825 */ move $s1, $zero -/* 0AF1D8 800AE5D8 00008025 */ move $s0, $zero -.L800AE5DC: -/* 0AF1DC 800AE5DC 8E4C0000 */ lw $t4, ($s2) -/* 0AF1E0 800AE5E0 8C6E0000 */ lw $t6, ($v1) -/* 0AF1E4 800AE5E4 01901021 */ addu $v0, $t4, $s0 -/* 0AF1E8 800AE5E8 8C4D0000 */ lw $t5, ($v0) -/* 0AF1EC 800AE5EC 26310001 */ addiu $s1, $s1, 1 -/* 0AF1F0 800AE5F0 01AE7821 */ addu $t7, $t5, $t6 -/* 0AF1F4 800AE5F4 AC4F0000 */ sw $t7, ($v0) -/* 0AF1F8 800AE5F8 8CB80000 */ lw $t8, ($a1) -/* 0AF1FC 800AE5FC 26100004 */ addiu $s0, $s0, 4 -/* 0AF200 800AE600 0238082A */ slt $at, $s1, $t8 -/* 0AF204 800AE604 1420FFF5 */ bnez $at, .L800AE5DC -/* 0AF208 800AE608 00000000 */ nop -/* 0AF20C 800AE60C 00008825 */ move $s1, $zero -.L800AE610: -/* 0AF210 800AE610 0C01DB16 */ jal load_asset_section_from_rom -/* 0AF214 800AE614 2404002A */ li $a0, 42 -/* 0AF218 800AE618 2406FFFF */ li $a2, -1 -/* 0AF21C 800AE61C 3C12800E */ lui $s2, %hi(gParticleBehavioursAssetTableCount) # $s2, 0x800e -/* 0AF220 800AE620 3C13800E */ lui $s3, %hi(gParticleBehavioursAssetTable) # $s3, 0x800e -/* 0AF224 800AE624 26732CFC */ addiu $s3, %lo(gParticleBehavioursAssetTable) # addiu $s3, $s3, 0x2cfc -/* 0AF228 800AE628 26522CF4 */ addiu $s2, %lo(gParticleBehavioursAssetTableCount) # addiu $s2, $s2, 0x2cf4 -/* 0AF22C 800AE62C 0006C880 */ sll $t9, $a2, 2 -/* 0AF230 800AE630 AE620000 */ sw $v0, ($s3) -/* 0AF234 800AE634 AE460000 */ sw $a2, ($s2) -/* 0AF238 800AE638 00594021 */ addu $t0, $v0, $t9 -/* 0AF23C 800AE63C 8D090004 */ lw $t1, 4($t0) -/* 0AF240 800AE640 00C01825 */ move $v1, $a2 -/* 0AF244 800AE644 10C90009 */ beq $a2, $t1, .L800AE66C -/* 0AF248 800AE648 00402025 */ move $a0, $v0 -/* 0AF24C 800AE64C 246A0001 */ addiu $t2, $v1, 1 -.L800AE650: -/* 0AF250 800AE650 000A5880 */ sll $t3, $t2, 2 -/* 0AF254 800AE654 008B6021 */ addu $t4, $a0, $t3 -/* 0AF258 800AE658 AE4A0000 */ sw $t2, ($s2) -/* 0AF25C 800AE65C 8D8D0004 */ lw $t5, 4($t4) -/* 0AF260 800AE660 01401825 */ move $v1, $t2 -/* 0AF264 800AE664 14CDFFFA */ bne $a2, $t5, .L800AE650 -/* 0AF268 800AE668 246A0001 */ addiu $t2, $v1, 1 -.L800AE66C: -/* 0AF26C 800AE66C 0C01DB16 */ jal load_asset_section_from_rom -/* 0AF270 800AE670 2404002B */ li $a0, 43 -/* 0AF274 800AE674 8E4E0000 */ lw $t6, ($s2) -/* 0AF278 800AE678 3C15800E */ lui $s5, %hi(gParticleBehavioursAssets) # $s5, 0x800e -/* 0AF27C 800AE67C 26B52CF8 */ addiu $s5, %lo(gParticleBehavioursAssets) # addiu $s5, $s5, 0x2cf8 -/* 0AF280 800AE680 19C00020 */ blez $t6, .L800AE704 -/* 0AF284 800AE684 AEA20000 */ sw $v0, ($s5) -/* 0AF288 800AE688 00008025 */ move $s0, $zero -/* 0AF28C 800AE68C 2414FFFF */ li $s4, -1 -.L800AE690: -/* 0AF290 800AE690 8E6F0000 */ lw $t7, ($s3) -/* 0AF294 800AE694 8EB90000 */ lw $t9, ($s5) -/* 0AF298 800AE698 01F01021 */ addu $v0, $t7, $s0 -/* 0AF29C 800AE69C 8C580000 */ lw $t8, ($v0) -/* 0AF2A0 800AE6A0 00000000 */ nop -/* 0AF2A4 800AE6A4 03194021 */ addu $t0, $t8, $t9 -/* 0AF2A8 800AE6A8 AC480000 */ sw $t0, ($v0) -/* 0AF2AC 800AE6AC 8E690000 */ lw $t1, ($s3) -/* 0AF2B0 800AE6B0 00000000 */ nop -/* 0AF2B4 800AE6B4 01305021 */ addu $t2, $t1, $s0 -/* 0AF2B8 800AE6B8 8D4B0000 */ lw $t3, ($t2) -/* 0AF2BC 800AE6BC 00000000 */ nop -/* 0AF2C0 800AE6C0 8D63009C */ lw $v1, 0x9c($t3) -/* 0AF2C4 800AE6C4 00000000 */ nop -/* 0AF2C8 800AE6C8 12830009 */ beq $s4, $v1, .L800AE6F0 -/* 0AF2CC 800AE6CC 00000000 */ nop -/* 0AF2D0 800AE6D0 0C0078A7 */ jal get_misc_asset -/* 0AF2D4 800AE6D4 00602025 */ move $a0, $v1 -/* 0AF2D8 800AE6D8 8E6C0000 */ lw $t4, ($s3) -/* 0AF2DC 800AE6DC 00000000 */ nop -/* 0AF2E0 800AE6E0 01906821 */ addu $t5, $t4, $s0 -/* 0AF2E4 800AE6E4 8DAE0000 */ lw $t6, ($t5) -/* 0AF2E8 800AE6E8 00000000 */ nop -/* 0AF2EC 800AE6EC ADC2009C */ sw $v0, 0x9c($t6) -.L800AE6F0: -/* 0AF2F0 800AE6F0 8E4F0000 */ lw $t7, ($s2) -/* 0AF2F4 800AE6F4 26310001 */ addiu $s1, $s1, 1 -/* 0AF2F8 800AE6F8 022F082A */ slt $at, $s1, $t7 -/* 0AF2FC 800AE6FC 1420FFE4 */ bnez $at, .L800AE690 -/* 0AF300 800AE700 26100004 */ addiu $s0, $s0, 4 -.L800AE704: -/* 0AF304 800AE704 8FBF002C */ lw $ra, 0x2c($sp) -/* 0AF308 800AE708 8FB00014 */ lw $s0, 0x14($sp) -/* 0AF30C 800AE70C 8FB10018 */ lw $s1, 0x18($sp) -/* 0AF310 800AE710 8FB2001C */ lw $s2, 0x1c($sp) -/* 0AF314 800AE714 8FB30020 */ lw $s3, 0x20($sp) -/* 0AF318 800AE718 8FB40024 */ lw $s4, 0x24($sp) -/* 0AF31C 800AE71C 8FB50028 */ lw $s5, 0x28($sp) -/* 0AF320 800AE720 03E00008 */ jr $ra -/* 0AF324 800AE724 27BD0030 */ addiu $sp, $sp, 0x30 - diff --git a/asm/non_matchings/unknown_032760/obj_loop_banana.s b/asm/non_matchings/unknown_032760/obj_loop_banana.s deleted file mode 100644 index 929afab6..00000000 --- a/asm/non_matchings/unknown_032760/obj_loop_banana.s +++ /dev/null @@ -1,415 +0,0 @@ -.late_rodata -glabel D_800E6190 -.double 1.2 -glabel D_800E6198 -.double 0.95 -glabel D_800E61A0 -.float -10000.0 - -.text -glabel obj_loop_banana -/* 03E1A0 8003D5A0 44852000 */ mtc1 $a1, $f4 -/* 03E1A4 8003D5A4 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000 -/* 03E1A8 8003D5A8 468020A0 */ cvt.s.w $f2, $f4 -/* 03E1AC 8003D5AC 8DEF0300 */ lw $t7, %lo(osTvType)($t7) -/* 03E1B0 8003D5B0 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 03E1B4 8003D5B4 AFB00020 */ sw $s0, 0x20($sp) -/* 03E1B8 8003D5B8 00808025 */ move $s0, $a0 -/* 03E1BC 8003D5BC AFBF0024 */ sw $ra, 0x24($sp) -/* 03E1C0 8003D5C0 AFA50074 */ sw $a1, 0x74($sp) -/* 03E1C4 8003D5C4 15E00007 */ bnez $t7, .L8003D5E4 -/* 03E1C8 8003D5C8 46001006 */ mov.s $f0, $f2 -/* 03E1CC 8003D5CC 3C01800E */ lui $at, %hi(D_800E6190 + 4) # $at, 0x800e -/* 03E1D0 8003D5D0 C4296190 */ lwc1 $f9, %lo(D_800E6190)($at) -/* 03E1D4 8003D5D4 C4286194 */ lwc1 $f8, %lo(D_800E6190 + 4)($at) -/* 03E1D8 8003D5D8 460011A1 */ cvt.d.s $f6, $f2 -/* 03E1DC 8003D5DC 46283282 */ mul.d $f10, $f6, $f8 -/* 03E1E0 8003D5E0 46205020 */ cvt.s.d $f0, $f10 -.L8003D5E4: -/* 03E1E4 8003D5E4 8E180064 */ lw $t8, 0x64($s0) -/* 03E1E8 8003D5E8 8FAA0074 */ lw $t2, 0x74($sp) -/* 03E1EC 8003D5EC AFB8003C */ sw $t8, 0x3c($sp) -/* 03E1F0 8003D5F0 86190018 */ lh $t9, 0x18($s0) -/* 03E1F4 8003D5F4 8E0D0078 */ lw $t5, 0x78($s0) -/* 03E1F8 8003D5F8 000A58C0 */ sll $t3, $t2, 3 -/* 03E1FC 8003D5FC 2401FFFF */ li $at, -1 -/* 03E200 8003D600 032B6021 */ addu $t4, $t9, $t3 -/* 03E204 8003D604 15A10019 */ bne $t5, $at, .L8003D66C -/* 03E208 8003D608 A60C0018 */ sh $t4, 0x18($s0) -/* 03E20C 8003D60C 860E0006 */ lh $t6, 6($s0) -/* 03E210 8003D610 26090078 */ addiu $t1, $s0, 0x78 -/* 03E214 8003D614 35CF4000 */ ori $t7, $t6, 0x4000 -/* 03E218 8003D618 A60F0006 */ sh $t7, 6($s0) -/* 03E21C 8003D61C 8FAA0074 */ lw $t2, 0x74($sp) -/* 03E220 8003D620 85380006 */ lh $t8, 6($t1) -/* 03E224 8003D624 240B0001 */ li $t3, 1 -/* 03E228 8003D628 030AC823 */ subu $t9, $t8, $t2 -/* 03E22C 8003D62C A5390006 */ sh $t9, 6($t1) -/* 03E230 8003D630 AE0B0074 */ sw $t3, 0x74($s0) -/* 03E234 8003D634 8FA50074 */ lw $a1, 0x74($sp) -/* 03E238 8003D638 AFA90030 */ sw $t1, 0x30($sp) -/* 03E23C 8003D63C 0C02BF0F */ jal func_800AFC3C -/* 03E240 8003D640 02002025 */ move $a0, $s0 -/* 03E244 8003D644 8FA90030 */ lw $t1, 0x30($sp) -/* 03E248 8003D648 00000000 */ nop -/* 03E24C 8003D64C 852C0006 */ lh $t4, 6($t1) -/* 03E250 8003D650 00000000 */ nop -/* 03E254 8003D654 1D80014F */ bgtz $t4, .L8003DB94 -/* 03E258 8003D658 8FBF0024 */ lw $ra, 0x24($sp) -/* 03E25C 8003D65C 0C003FEE */ jal gParticlePtrList_addObject -/* 03E260 8003D660 02002025 */ move $a0, $s0 -/* 03E264 8003D664 1000014B */ b .L8003DB94 -/* 03E268 8003D668 8FBF0024 */ lw $ra, 0x24($sp) -.L8003D66C: -/* 03E26C 8003D66C 8FAD003C */ lw $t5, 0x3c($sp) -/* 03E270 8003D670 8FAE0074 */ lw $t6, 0x74($sp) -/* 03E274 8003D674 81A20008 */ lb $v0, 8($t5) -/* 03E278 8003D678 8FB8003C */ lw $t8, 0x3c($sp) -/* 03E27C 8003D67C 18400004 */ blez $v0, .L8003D690 -/* 03E280 8003D680 26090078 */ addiu $t1, $s0, 0x78 -/* 03E284 8003D684 004E7823 */ subu $t7, $v0, $t6 -/* 03E288 8003D688 10000003 */ b .L8003D698 -/* 03E28C 8003D68C A1AF0008 */ sb $t7, 8($t5) -.L8003D690: -/* 03E290 8003D690 A3000008 */ sb $zero, 8($t8) -/* 03E294 8003D694 AF000000 */ sw $zero, ($t8) -.L8003D698: -/* 03E298 8003D698 8D2A0000 */ lw $t2, ($t1) -/* 03E29C 8003D69C 24010001 */ li $at, 1 -/* 03E2A0 8003D6A0 1541009B */ bne $t2, $at, .L8003D910 -/* 03E2A4 8003D6A4 8FAD003C */ lw $t5, 0x3c($sp) -/* 03E2A8 8003D6A8 C612001C */ lwc1 $f18, 0x1c($s0) -/* 03E2AC 8003D6AC C610000C */ lwc1 $f16, 0xc($s0) -/* 03E2B0 8003D6B0 46009102 */ mul.s $f4, $f18, $f0 -/* 03E2B4 8003D6B4 3C014100 */ li $at, 0x41000000 # 8.000000 -/* 03E2B8 8003D6B8 2605000C */ addiu $a1, $s0, 0xc -/* 03E2BC 8003D6BC 24040001 */ li $a0, 1 -/* 03E2C0 8003D6C0 46048180 */ add.s $f6, $f16, $f4 -/* 03E2C4 8003D6C4 27A6005C */ addiu $a2, $sp, 0x5c -/* 03E2C8 8003D6C8 E7A6005C */ swc1 $f6, 0x5c($sp) -/* 03E2CC 8003D6CC C60A0020 */ lwc1 $f10, 0x20($s0) -/* 03E2D0 8003D6D0 C6080010 */ lwc1 $f8, 0x10($s0) -/* 03E2D4 8003D6D4 46005482 */ mul.s $f18, $f10, $f0 -/* 03E2D8 8003D6D8 2407FFFF */ li $a3, -1 -/* 03E2DC 8003D6DC 46124400 */ add.s $f16, $f8, $f18 -/* 03E2E0 8003D6E0 44819000 */ mtc1 $at, $f18 -/* 03E2E4 8003D6E4 E7B00060 */ swc1 $f16, 0x60($sp) -/* 03E2E8 8003D6E8 C6060024 */ lwc1 $f6, 0x24($s0) -/* 03E2EC 8003D6EC C6040014 */ lwc1 $f4, 0x14($s0) -/* 03E2F0 8003D6F0 46003282 */ mul.s $f10, $f6, $f0 -/* 03E2F4 8003D6F4 E7A00054 */ swc1 $f0, 0x54($sp) -/* 03E2F8 8003D6F8 AFA90030 */ sw $t1, 0x30($sp) -/* 03E2FC 8003D6FC AFA5002C */ sw $a1, 0x2c($sp) -/* 03E300 8003D700 460A2200 */ add.s $f8, $f4, $f10 -/* 03E304 8003D704 E7B20058 */ swc1 $f18, 0x58($sp) -/* 03E308 8003D708 0C00C44C */ jal func_80031130 -/* 03E30C 8003D70C E7A80064 */ swc1 $f8, 0x64($sp) -/* 03E310 8003D710 8FA4002C */ lw $a0, 0x2c($sp) -/* 03E314 8003D714 24190001 */ li $t9, 1 -/* 03E318 8003D718 27AB0048 */ addiu $t3, $sp, 0x48 -/* 03E31C 8003D71C AFA00048 */ sw $zero, 0x48($sp) -/* 03E320 8003D720 AFAB0014 */ sw $t3, 0x14($sp) -/* 03E324 8003D724 AFB90010 */ sw $t9, 0x10($sp) -/* 03E328 8003D728 27A5005C */ addiu $a1, $sp, 0x5c -/* 03E32C 8003D72C 27A60058 */ addiu $a2, $sp, 0x58 -/* 03E330 8003D730 0C00C580 */ jal func_80031600 -/* 03E334 8003D734 27A70043 */ addiu $a3, $sp, 0x43 -/* 03E338 8003D738 C7B0005C */ lwc1 $f16, 0x5c($sp) -/* 03E33C 8003D73C C606000C */ lwc1 $f6, 0xc($s0) -/* 03E340 8003D740 C7A00054 */ lwc1 $f0, 0x54($sp) -/* 03E344 8003D744 46068101 */ sub.s $f4, $f16, $f6 -/* 03E348 8003D748 8FA90030 */ lw $t1, 0x30($sp) -/* 03E34C 8003D74C 46002283 */ div.s $f10, $f4, $f0 -/* 03E350 8003D750 C6120010 */ lwc1 $f18, 0x10($s0) -/* 03E354 8003D754 24010002 */ li $at, 2 -/* 03E358 8003D758 44806800 */ mtc1 $zero, $f13 -/* 03E35C 8003D75C 02002025 */ move $a0, $s0 -/* 03E360 8003D760 27A50058 */ addiu $a1, $sp, 0x58 -/* 03E364 8003D764 00003025 */ move $a2, $zero -/* 03E368 8003D768 24070001 */ li $a3, 1 -/* 03E36C 8003D76C E60A001C */ swc1 $f10, 0x1c($s0) -/* 03E370 8003D770 C7A80060 */ lwc1 $f8, 0x60($sp) -/* 03E374 8003D774 C60A0014 */ lwc1 $f10, 0x14($s0) -/* 03E378 8003D778 46124401 */ sub.s $f16, $f8, $f18 -/* 03E37C 8003D77C 00000000 */ nop -/* 03E380 8003D780 46008183 */ div.s $f6, $f16, $f0 -/* 03E384 8003D784 E6060020 */ swc1 $f6, 0x20($s0) -/* 03E388 8003D788 C7A40064 */ lwc1 $f4, 0x64($sp) -/* 03E38C 8003D78C 00000000 */ nop -/* 03E390 8003D790 460A2201 */ sub.s $f8, $f4, $f10 -/* 03E394 8003D794 00000000 */ nop -/* 03E398 8003D798 46004483 */ div.s $f18, $f8, $f0 -/* 03E39C 8003D79C E6120024 */ swc1 $f18, 0x24($s0) -/* 03E3A0 8003D7A0 C7B0005C */ lwc1 $f16, 0x5c($sp) -/* 03E3A4 8003D7A4 00000000 */ nop -/* 03E3A8 8003D7A8 E610000C */ swc1 $f16, 0xc($s0) -/* 03E3AC 8003D7AC C7A60060 */ lwc1 $f6, 0x60($sp) -/* 03E3B0 8003D7B0 00000000 */ nop -/* 03E3B4 8003D7B4 E6060010 */ swc1 $f6, 0x10($s0) -/* 03E3B8 8003D7B8 C7A40064 */ lwc1 $f4, 0x64($sp) -/* 03E3BC 8003D7BC 00000000 */ nop -/* 03E3C0 8003D7C0 E6040014 */ swc1 $f4, 0x14($s0) -/* 03E3C4 8003D7C4 8FAC003C */ lw $t4, 0x3c($sp) -/* 03E3C8 8003D7C8 00000000 */ nop -/* 03E3CC 8003D7CC 818E0009 */ lb $t6, 9($t4) -/* 03E3D0 8003D7D0 00000000 */ nop -/* 03E3D4 8003D7D4 11C10016 */ beq $t6, $at, .L8003D830 -/* 03E3D8 8003D7D8 3C01800E */ lui $at, %hi(D_800E6198 + 4) # $at, 0x800e -/* 03E3DC 8003D7DC C4216198 */ lwc1 $f1, %lo(D_800E6198)($at) -/* 03E3E0 8003D7E0 C420619C */ lwc1 $f0, %lo(D_800E6198 + 4)($at) -/* 03E3E4 8003D7E4 C60A0020 */ lwc1 $f10, 0x20($s0) -/* 03E3E8 8003D7E8 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 03E3EC 8003D7EC 44819800 */ mtc1 $at, $f19 -/* 03E3F0 8003D7F0 44809000 */ mtc1 $zero, $f18 -/* 03E3F4 8003D7F4 46005221 */ cvt.d.s $f8, $f10 -/* 03E3F8 8003D7F8 46324401 */ sub.d $f16, $f8, $f18 -/* 03E3FC 8003D7FC C604001C */ lwc1 $f4, 0x1c($s0) -/* 03E400 8003D800 462081A0 */ cvt.s.d $f6, $f16 -/* 03E404 8003D804 C6100024 */ lwc1 $f16, 0x24($s0) -/* 03E408 8003D808 460022A1 */ cvt.d.s $f10, $f4 -/* 03E40C 8003D80C 46205202 */ mul.d $f8, $f10, $f0 -/* 03E410 8003D810 E6060020 */ swc1 $f6, 0x20($s0) -/* 03E414 8003D814 460081A1 */ cvt.d.s $f6, $f16 -/* 03E418 8003D818 46203102 */ mul.d $f4, $f6, $f0 -/* 03E41C 8003D81C 462044A0 */ cvt.s.d $f18, $f8 -/* 03E420 8003D820 E612001C */ swc1 $f18, 0x1c($s0) -/* 03E424 8003D824 462022A0 */ cvt.s.d $f10, $f4 -/* 03E428 8003D828 10000006 */ b .L8003D844 -/* 03E42C 8003D82C E60A0024 */ swc1 $f10, 0x24($s0) -.L8003D830: -/* 03E430 8003D830 44800000 */ mtc1 $zero, $f0 -/* 03E434 8003D834 00000000 */ nop -/* 03E438 8003D838 E600001C */ swc1 $f0, 0x1c($s0) -/* 03E43C 8003D83C E6000020 */ swc1 $f0, 0x20($s0) -/* 03E440 8003D840 E6000024 */ swc1 $f0, 0x24($s0) -.L8003D844: -/* 03E444 8003D844 C602001C */ lwc1 $f2, 0x1c($s0) -/* 03E448 8003D848 44806000 */ mtc1 $zero, $f12 -/* 03E44C 8003D84C 46001221 */ cvt.d.s $f8, $f2 -/* 03E450 8003D850 462C403C */ c.lt.d $f8, $f12 -/* 03E454 8003D854 8FAF0048 */ lw $t7, 0x48($sp) -/* 03E458 8003D858 45000002 */ bc1f .L8003D864 -/* 03E45C 8003D85C 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 03E460 8003D860 46001087 */ neg.s $f2, $f2 -.L8003D864: -/* 03E464 8003D864 C6000024 */ lwc1 $f0, 0x24($s0) -/* 03E468 8003D868 00000000 */ nop -/* 03E46C 8003D86C 460004A1 */ cvt.d.s $f18, $f0 -/* 03E470 8003D870 462C903C */ c.lt.d $f18, $f12 -/* 03E474 8003D874 00000000 */ nop -/* 03E478 8003D878 45000002 */ bc1f .L8003D884 -/* 03E47C 8003D87C 00000000 */ nop -/* 03E480 8003D880 46000007 */ neg.s $f0, $f0 -.L8003D884: -/* 03E484 8003D884 19E0000E */ blez $t7, .L8003D8C0 -/* 03E488 8003D888 00000000 */ nop -/* 03E48C 8003D88C 44816800 */ mtc1 $at, $f13 -/* 03E490 8003D890 44806000 */ mtc1 $zero, $f12 -/* 03E494 8003D894 46001421 */ cvt.d.s $f16, $f2 -/* 03E498 8003D898 462C803C */ c.lt.d $f16, $f12 -/* 03E49C 8003D89C 00000000 */ nop -/* 03E4A0 8003D8A0 45000007 */ bc1f .L8003D8C0 -/* 03E4A4 8003D8A4 00000000 */ nop -/* 03E4A8 8003D8A8 460001A1 */ cvt.d.s $f6, $f0 -/* 03E4AC 8003D8AC 462C303C */ c.lt.d $f6, $f12 -/* 03E4B0 8003D8B0 00000000 */ nop -/* 03E4B4 8003D8B4 45000002 */ bc1f .L8003D8C0 -/* 03E4B8 8003D8B8 00000000 */ nop -/* 03E4BC 8003D8BC AD200000 */ sw $zero, ($t1) -.L8003D8C0: -/* 03E4C0 8003D8C0 3C01800E */ lui $at, %hi(D_800E61A0) # $at, 0x800e -/* 03E4C4 8003D8C4 C42461A0 */ lwc1 $f4, %lo(D_800E61A0)($at) -/* 03E4C8 8003D8C8 AFA90030 */ sw $t1, 0x30($sp) -/* 03E4CC 8003D8CC 0C00AE6F */ jal func_8002B9BC -/* 03E4D0 8003D8D0 E7A40058 */ swc1 $f4, 0x58($sp) -/* 03E4D4 8003D8D4 8FA90030 */ lw $t1, 0x30($sp) -/* 03E4D8 8003D8D8 1040000D */ beqz $v0, .L8003D910 -/* 03E4DC 8003D8DC 8FAD003C */ lw $t5, 0x3c($sp) -/* 03E4E0 8003D8E0 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 03E4E4 8003D8E4 C7A80058 */ lwc1 $f8, 0x58($sp) -/* 03E4E8 8003D8E8 00000000 */ nop -/* 03E4EC 8003D8EC 4608503C */ c.lt.s $f10, $f8 -/* 03E4F0 8003D8F0 00000000 */ nop -/* 03E4F4 8003D8F4 45000006 */ bc1f .L8003D910 -/* 03E4F8 8003D8F8 8FAD003C */ lw $t5, 0x3c($sp) -/* 03E4FC 8003D8FC AD200000 */ sw $zero, ($t1) -/* 03E500 8003D900 C7B20058 */ lwc1 $f18, 0x58($sp) -/* 03E504 8003D904 00000000 */ nop -/* 03E508 8003D908 E6120010 */ swc1 $f18, 0x10($s0) -/* 03E50C 8003D90C 8FAD003C */ lw $t5, 0x3c($sp) -.L8003D910: -/* 03E510 8003D910 24010002 */ li $at, 2 -/* 03E514 8003D914 81B80009 */ lb $t8, 9($t5) -/* 03E518 8003D918 8FAA0074 */ lw $t2, 0x74($sp) -/* 03E51C 8003D91C 13010002 */ beq $t8, $at, .L8003D928 -/* 03E520 8003D920 24040046 */ li $a0, 70 -/* 03E524 8003D924 24040037 */ li $a0, 55 -.L8003D928: -/* 03E528 8003D928 85220004 */ lh $v0, 4($t1) -/* 03E52C 8003D92C 00000000 */ nop -/* 03E530 8003D930 18400003 */ blez $v0, .L8003D940 -/* 03E534 8003D934 004AC823 */ subu $t9, $v0, $t2 -/* 03E538 8003D938 10000002 */ b .L8003D944 -/* 03E53C 8003D93C A5390004 */ sh $t9, 4($t1) -.L8003D940: -/* 03E540 8003D940 A5200004 */ sh $zero, 4($t1) -.L8003D944: -/* 03E544 8003D944 8E0B004C */ lw $t3, 0x4c($s0) -/* 03E548 8003D948 00000000 */ nop -/* 03E54C 8003D94C 916C0013 */ lbu $t4, 0x13($t3) -/* 03E550 8003D950 00000000 */ nop -/* 03E554 8003D954 29810078 */ slti $at, $t4, 0x78 -/* 03E558 8003D958 1020001C */ beqz $at, .L8003D9CC -/* 03E55C 8003D95C 00000000 */ nop -/* 03E560 8003D960 AFA40044 */ sw $a0, 0x44($sp) -/* 03E564 8003D964 0C01AF66 */ jal get_current_level_race_type -/* 03E568 8003D968 AFA90030 */ sw $t1, 0x30($sp) -/* 03E56C 8003D96C 8FA40044 */ lw $a0, 0x44($sp) -/* 03E570 8003D970 8FA90030 */ lw $t1, 0x30($sp) -/* 03E574 8003D974 24010041 */ li $at, 65 -/* 03E578 8003D978 14410014 */ bne $v0, $at, .L8003D9CC -/* 03E57C 8003D97C 00000000 */ nop -/* 03E580 8003D980 8E0E004C */ lw $t6, 0x4c($s0) -/* 03E584 8003D984 00000000 */ nop -/* 03E588 8003D988 8DC30000 */ lw $v1, ($t6) -/* 03E58C 8003D98C 00000000 */ nop -/* 03E590 8003D990 1060000E */ beqz $v1, .L8003D9CC -/* 03E594 8003D994 00000000 */ nop -/* 03E598 8003D998 8C6F0040 */ lw $t7, 0x40($v1) -/* 03E59C 8003D99C 24010001 */ li $at, 1 -/* 03E5A0 8003D9A0 81ED0054 */ lb $t5, 0x54($t7) -/* 03E5A4 8003D9A4 00000000 */ nop -/* 03E5A8 8003D9A8 15A10008 */ bne $t5, $at, .L8003D9CC -/* 03E5AC 8003D9AC 00000000 */ nop -/* 03E5B0 8003D9B0 8C680064 */ lw $t0, 0x64($v1) -/* 03E5B4 8003D9B4 2401FFFF */ li $at, -1 -/* 03E5B8 8003D9B8 85180000 */ lh $t8, ($t0) -/* 03E5BC 8003D9BC 00000000 */ nop -/* 03E5C0 8003D9C0 17010002 */ bne $t8, $at, .L8003D9CC -/* 03E5C4 8003D9C4 00000000 */ nop -/* 03E5C8 8003D9C8 2484001E */ addiu $a0, $a0, 0x1e -.L8003D9CC: -/* 03E5CC 8003D9CC 8E02004C */ lw $v0, 0x4c($s0) -/* 03E5D0 8003D9D0 00000000 */ nop -/* 03E5D4 8003D9D4 904A0013 */ lbu $t2, 0x13($v0) -/* 03E5D8 8003D9D8 00000000 */ nop -/* 03E5DC 8003D9DC 0144082A */ slt $at, $t2, $a0 -/* 03E5E0 8003D9E0 1020006C */ beqz $at, .L8003DB94 -/* 03E5E4 8003D9E4 8FBF0024 */ lw $ra, 0x24($sp) -/* 03E5E8 8003D9E8 85390004 */ lh $t9, 4($t1) -/* 03E5EC 8003D9EC 00000000 */ nop -/* 03E5F0 8003D9F0 17200068 */ bnez $t9, .L8003DB94 -/* 03E5F4 8003D9F4 8FBF0024 */ lw $ra, 0x24($sp) -/* 03E5F8 8003D9F8 8C430000 */ lw $v1, ($v0) -/* 03E5FC 8003D9FC 00000000 */ nop -/* 03E600 8003DA00 10600064 */ beqz $v1, .L8003DB94 -/* 03E604 8003DA04 8FBF0024 */ lw $ra, 0x24($sp) -/* 03E608 8003DA08 8C6B0040 */ lw $t3, 0x40($v1) -/* 03E60C 8003DA0C 24010001 */ li $at, 1 -/* 03E610 8003DA10 816C0054 */ lb $t4, 0x54($t3) -/* 03E614 8003DA14 00000000 */ nop -/* 03E618 8003DA18 1581005E */ bne $t4, $at, .L8003DB94 -/* 03E61C 8003DA1C 8FBF0024 */ lw $ra, 0x24($sp) -/* 03E620 8003DA20 8C680064 */ lw $t0, 0x64($v1) -/* 03E624 8003DA24 AFA90030 */ sw $t1, 0x30($sp) -/* 03E628 8003DA28 AFA3006C */ sw $v1, 0x6c($sp) -/* 03E62C 8003DA2C 0C01AF66 */ jal get_current_level_race_type -/* 03E630 8003DA30 AFA80068 */ sw $t0, 0x68($sp) -/* 03E634 8003DA34 8FA3006C */ lw $v1, 0x6c($sp) -/* 03E638 8003DA38 8FA80068 */ lw $t0, 0x68($sp) -/* 03E63C 8003DA3C 8FA90030 */ lw $t1, 0x30($sp) -/* 03E640 8003DA40 24010041 */ li $at, 65 -/* 03E644 8003DA44 14410006 */ bne $v0, $at, .L8003DA60 -/* 03E648 8003DA48 24040022 */ li $a0, 34 -/* 03E64C 8003DA4C 810E0185 */ lb $t6, 0x185($t0) -/* 03E650 8003DA50 00000000 */ nop -/* 03E654 8003DA54 29C10002 */ slti $at, $t6, 2 -/* 03E658 8003DA58 1020004E */ beqz $at, .L8003DB94 -/* 03E65C 8003DA5C 8FBF0024 */ lw $ra, 0x24($sp) -.L8003DA60: -/* 03E660 8003DA60 8D0F0180 */ lw $t7, 0x180($t0) -/* 03E664 8003DA64 240D0004 */ li $t5, 4 -/* 03E668 8003DA68 AFAF0034 */ sw $t7, 0x34($sp) -/* 03E66C 8003DA6C 8C670014 */ lw $a3, 0x14($v1) -/* 03E670 8003DA70 8C660010 */ lw $a2, 0x10($v1) -/* 03E674 8003DA74 8C65000C */ lw $a1, 0xc($v1) -/* 03E678 8003DA78 25180180 */ addiu $t8, $t0, 0x180 -/* 03E67C 8003DA7C AFB80014 */ sw $t8, 0x14($sp) -/* 03E680 8003DA80 AFA90030 */ sw $t1, 0x30($sp) -/* 03E684 8003DA84 AFA80068 */ sw $t0, 0x68($sp) -/* 03E688 8003DA88 AFA3006C */ sw $v1, 0x6c($sp) -/* 03E68C 8003DA8C 0C002556 */ jal func_80009558 -/* 03E690 8003DA90 AFAD0010 */ sw $t5, 0x10($sp) -/* 03E694 8003DA94 8FA40034 */ lw $a0, 0x34($sp) -/* 03E698 8003DA98 8FA3006C */ lw $v1, 0x6c($sp) -/* 03E69C 8003DA9C 8FA80068 */ lw $t0, 0x68($sp) -/* 03E6A0 8003DAA0 8FA90030 */ lw $t1, 0x30($sp) -/* 03E6A4 8003DAA4 10800009 */ beqz $a0, .L8003DACC -/* 03E6A8 8003DAA8 00000000 */ nop -/* 03E6AC 8003DAAC AFA3006C */ sw $v1, 0x6c($sp) -/* 03E6B0 8003DAB0 AFA80068 */ sw $t0, 0x68($sp) -/* 03E6B4 8003DAB4 0C0025BE */ jal func_800096F8 -/* 03E6B8 8003DAB8 AFA90030 */ sw $t1, 0x30($sp) -/* 03E6BC 8003DABC 8FA3006C */ lw $v1, 0x6c($sp) -/* 03E6C0 8003DAC0 8FA80068 */ lw $t0, 0x68($sp) -/* 03E6C4 8003DAC4 8FA90030 */ lw $t1, 0x30($sp) -/* 03E6C8 8003DAC8 00000000 */ nop -.L8003DACC: -/* 03E6CC 8003DACC 850A0000 */ lh $t2, ($t0) -/* 03E6D0 8003DAD0 2401FFFF */ li $at, -1 -/* 03E6D4 8003DAD4 11410013 */ beq $t2, $at, .L8003DB24 -/* 03E6D8 8003DAD8 00000000 */ nop -/* 03E6DC 8003DADC 81190185 */ lb $t9, 0x185($t0) -/* 03E6E0 8003DAE0 24010009 */ li $at, 9 -/* 03E6E4 8003DAE4 1721000F */ bne $t9, $at, .L8003DB24 -/* 03E6E8 8003DAE8 00000000 */ nop -/* 03E6EC 8003DAEC 81040003 */ lb $a0, 3($t0) -/* 03E6F0 8003DAF0 8C65000C */ lw $a1, 0xc($v1) -/* 03E6F4 8003DAF4 8C660010 */ lw $a2, 0x10($v1) -/* 03E6F8 8003DAF8 8C670014 */ lw $a3, 0x14($v1) -/* 03E6FC 8003DAFC 2484007B */ addiu $a0, $a0, 0x7b -/* 03E700 8003DB00 308BFFFF */ andi $t3, $a0, 0xffff -/* 03E704 8003DB04 01602025 */ move $a0, $t3 -/* 03E708 8003DB08 AFA90030 */ sw $t1, 0x30($sp) -/* 03E70C 8003DB0C AFA80068 */ sw $t0, 0x68($sp) -/* 03E710 8003DB10 0C0007AA */ jal play_sound_spatial -/* 03E714 8003DB14 AFA00010 */ sw $zero, 0x10($sp) -/* 03E718 8003DB18 8FA80068 */ lw $t0, 0x68($sp) -/* 03E71C 8003DB1C 8FA90030 */ lw $t1, 0x30($sp) -/* 03E720 8003DB20 00000000 */ nop -.L8003DB24: -/* 03E724 8003DB24 810C0185 */ lb $t4, 0x185($t0) -/* 03E728 8003DB28 240D0001 */ li $t5, 1 -/* 03E72C 8003DB2C 258E0001 */ addiu $t6, $t4, 1 -/* 03E730 8003DB30 A10E0185 */ sb $t6, 0x185($t0) -/* 03E734 8003DB34 8FAF003C */ lw $t7, 0x3c($sp) -/* 03E738 8003DB38 00000000 */ nop -/* 03E73C 8003DB3C 8DE20004 */ lw $v0, 4($t7) -/* 03E740 8003DB40 00000000 */ nop -/* 03E744 8003DB44 10400002 */ beqz $v0, .L8003DB50 -/* 03E748 8003DB48 00000000 */ nop -/* 03E74C 8003DB4C AC4D007C */ sw $t5, 0x7c($v0) -.L8003DB50: -/* 03E750 8003DB50 0C0270F2 */ jal get_number_of_active_players -/* 03E754 8003DB54 AFA90030 */ sw $t1, 0x30($sp) -/* 03E758 8003DB58 8FA90030 */ lw $t1, 0x30($sp) -/* 03E75C 8003DB5C 28410002 */ slti $at, $v0, 2 -/* 03E760 8003DB60 14200005 */ bnez $at, .L8003DB78 -/* 03E764 8003DB64 2418FFFF */ li $t8, -1 -/* 03E768 8003DB68 0C003FEE */ jal gParticlePtrList_addObject -/* 03E76C 8003DB6C 02002025 */ move $a0, $s0 -/* 03E770 8003DB70 10000008 */ b .L8003DB94 -/* 03E774 8003DB74 8FBF0024 */ lw $ra, 0x24($sp) -.L8003DB78: -/* 03E778 8003DB78 AD380000 */ sw $t8, ($t1) -/* 03E77C 8003DB7C 240A0001 */ li $t2, 1 -/* 03E780 8003DB80 AE0A0074 */ sw $t2, 0x74($s0) -/* 03E784 8003DB84 8FA50074 */ lw $a1, 0x74($sp) -/* 03E788 8003DB88 0C02BF0F */ jal func_800AFC3C -/* 03E78C 8003DB8C 02002025 */ move $a0, $s0 -/* 03E790 8003DB90 8FBF0024 */ lw $ra, 0x24($sp) -.L8003DB94: -/* 03E794 8003DB94 8FB00020 */ lw $s0, 0x20($sp) -/* 03E798 8003DB98 03E00008 */ jr $ra -/* 03E79C 8003DB9C 27BD0070 */ addiu $sp, $sp, 0x70 - diff --git a/asm/non_matchings/unknown_032760/obj_loop_bridge_whaleramp.s b/asm/non_matchings/unknown_032760/obj_loop_bridge_whaleramp.s deleted file mode 100644 index b67a0073..00000000 --- a/asm/non_matchings/unknown_032760/obj_loop_bridge_whaleramp.s +++ /dev/null @@ -1,283 +0,0 @@ -.late_rodata -glabel D_800E6178 -.double 1.2 - -.text -glabel obj_loop_bridge_whaleramp -/* 03D668 8003CA68 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 03D66C 8003CA6C 44852000 */ mtc1 $a1, $f4 -/* 03D670 8003CA70 AFBF0024 */ sw $ra, 0x24($sp) -/* 03D674 8003CA74 AFB00020 */ sw $s0, 0x20($sp) -/* 03D678 8003CA78 AFA50074 */ sw $a1, 0x74($sp) -/* 03D67C 8003CA7C 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000 -/* 03D680 8003CA80 46802020 */ cvt.s.w $f0, $f4 -/* 03D684 8003CA84 8DEF0300 */ lw $t7, %lo(osTvType)($t7) -/* 03D688 8003CA88 8C830064 */ lw $v1, 0x64($a0) -/* 03D68C 8003CA8C 8C88003C */ lw $t0, 0x3c($a0) -/* 03D690 8003CA90 00808025 */ move $s0, $a0 -/* 03D694 8003CA94 15E00007 */ bnez $t7, .L8003CAB4 -/* 03D698 8003CA98 46000306 */ mov.s $f12, $f0 -/* 03D69C 8003CA9C 3C01800E */ lui $at, %hi(D_800E6178 + 4) # $at, 0x800e -/* 03D6A0 8003CAA0 C4296178 */ lwc1 $f9, %lo(D_800E6178)($at) -/* 03D6A4 8003CAA4 C428617C */ lwc1 $f8, %lo(D_800E6178 + 4)($at) -/* 03D6A8 8003CAA8 460001A1 */ cvt.d.s $f6, $f0 -/* 03D6AC 8003CAAC 46283282 */ mul.d $f10, $f6, $f8 -/* 03D6B0 8003CAB0 46205320 */ cvt.s.d $f12, $f10 -.L8003CAB4: -/* 03D6B4 8003CAB4 9118000B */ lbu $t8, 0xb($t0) -/* 03D6B8 8003CAB8 24010003 */ li $at, 3 -/* 03D6BC 8003CABC 1301004B */ beq $t8, $at, .L8003CBEC -/* 03D6C0 8003CAC0 00000000 */ nop -/* 03D6C4 8003CAC4 8E190078 */ lw $t9, 0x78($s0) -/* 03D6C8 8003CAC8 00000000 */ nop -/* 03D6CC 8003CACC 13200029 */ beqz $t9, .L8003CB74 -/* 03D6D0 8003CAD0 00000000 */ nop -/* 03D6D4 8003CAD4 8109000E */ lb $t1, 0xe($t0) -/* 03D6D8 8003CAD8 44803000 */ mtc1 $zero, $f6 -/* 03D6DC 8003CADC 44898000 */ mtc1 $t1, $f16 -/* 03D6E0 8003CAE0 00000000 */ nop -/* 03D6E4 8003CAE4 468084A0 */ cvt.s.w $f18, $f16 -/* 03D6E8 8003CAE8 46009021 */ cvt.d.s $f0, $f18 -/* 03D6EC 8003CAEC 46200100 */ add.d $f4, $f0, $f0 -/* 03D6F0 8003CAF0 462020A0 */ cvt.s.d $f2, $f4 -/* 03D6F4 8003CAF4 4602303C */ c.lt.s $f6, $f2 -/* 03D6F8 8003CAF8 00000000 */ nop -/* 03D6FC 8003CAFC 4500000F */ bc1f .L8003CB3C -/* 03D700 8003CB00 00000000 */ nop -/* 03D704 8003CB04 C4680000 */ lwc1 $f8, ($v1) -/* 03D708 8003CB08 C6000010 */ lwc1 $f0, 0x10($s0) -/* 03D70C 8003CB0C 46024280 */ add.s $f10, $f8, $f2 -/* 03D710 8003CB10 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 03D714 8003CB14 460A003C */ c.lt.s $f0, $f10 -/* 03D718 8003CB18 00000000 */ nop -/* 03D71C 8003CB1C 45000080 */ bc1f .L8003CD20 -/* 03D720 8003CB20 00000000 */ nop -/* 03D724 8003CB24 44818000 */ mtc1 $at, $f16 -/* 03D728 8003CB28 00000000 */ nop -/* 03D72C 8003CB2C 46106482 */ mul.s $f18, $f12, $f16 -/* 03D730 8003CB30 46120100 */ add.s $f4, $f0, $f18 -/* 03D734 8003CB34 1000007A */ b .L8003CD20 -/* 03D738 8003CB38 E6040010 */ swc1 $f4, 0x10($s0) -.L8003CB3C: -/* 03D73C 8003CB3C C4660000 */ lwc1 $f6, ($v1) -/* 03D740 8003CB40 C6000010 */ lwc1 $f0, 0x10($s0) -/* 03D744 8003CB44 46023200 */ add.s $f8, $f6, $f2 -/* 03D748 8003CB48 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 03D74C 8003CB4C 4600403C */ c.lt.s $f8, $f0 -/* 03D750 8003CB50 00000000 */ nop -/* 03D754 8003CB54 45000072 */ bc1f .L8003CD20 -/* 03D758 8003CB58 00000000 */ nop -/* 03D75C 8003CB5C 44815000 */ mtc1 $at, $f10 -/* 03D760 8003CB60 00000000 */ nop -/* 03D764 8003CB64 460A6402 */ mul.s $f16, $f12, $f10 -/* 03D768 8003CB68 46100481 */ sub.s $f18, $f0, $f16 -/* 03D76C 8003CB6C 1000006C */ b .L8003CD20 -/* 03D770 8003CB70 E6120010 */ swc1 $f18, 0x10($s0) -.L8003CB74: -/* 03D774 8003CB74 910A000C */ lbu $t2, 0xc($t0) -/* 03D778 8003CB78 00000000 */ nop -/* 03D77C 8003CB7C 1940000E */ blez $t2, .L8003CBB8 -/* 03D780 8003CB80 00000000 */ nop -/* 03D784 8003CB84 C6000010 */ lwc1 $f0, 0x10($s0) -/* 03D788 8003CB88 C4640000 */ lwc1 $f4, ($v1) -/* 03D78C 8003CB8C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 03D790 8003CB90 4600203C */ c.lt.s $f4, $f0 -/* 03D794 8003CB94 00000000 */ nop -/* 03D798 8003CB98 45000061 */ bc1f .L8003CD20 -/* 03D79C 8003CB9C 00000000 */ nop -/* 03D7A0 8003CBA0 44813000 */ mtc1 $at, $f6 -/* 03D7A4 8003CBA4 00000000 */ nop -/* 03D7A8 8003CBA8 46066202 */ mul.s $f8, $f12, $f6 -/* 03D7AC 8003CBAC 46080281 */ sub.s $f10, $f0, $f8 -/* 03D7B0 8003CBB0 1000005B */ b .L8003CD20 -/* 03D7B4 8003CBB4 E60A0010 */ swc1 $f10, 0x10($s0) -.L8003CBB8: -/* 03D7B8 8003CBB8 C6000010 */ lwc1 $f0, 0x10($s0) -/* 03D7BC 8003CBBC C4700000 */ lwc1 $f16, ($v1) -/* 03D7C0 8003CBC0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 03D7C4 8003CBC4 4610003C */ c.lt.s $f0, $f16 -/* 03D7C8 8003CBC8 00000000 */ nop -/* 03D7CC 8003CBCC 45000054 */ bc1f .L8003CD20 -/* 03D7D0 8003CBD0 00000000 */ nop -/* 03D7D4 8003CBD4 44819000 */ mtc1 $at, $f18 -/* 03D7D8 8003CBD8 00000000 */ nop -/* 03D7DC 8003CBDC 46126102 */ mul.s $f4, $f12, $f18 -/* 03D7E0 8003CBE0 46040180 */ add.s $f6, $f0, $f4 -/* 03D7E4 8003CBE4 1000004E */ b .L8003CD20 -/* 03D7E8 8003CBE8 E6060010 */ swc1 $f6, 0x10($s0) -.L8003CBEC: -/* 03D7EC 8003CBEC 8E0B0078 */ lw $t3, 0x78($s0) -/* 03D7F0 8003CBF0 00000000 */ nop -/* 03D7F4 8003CBF4 11600023 */ beqz $t3, .L8003CC84 -/* 03D7F8 8003CBF8 00000000 */ nop -/* 03D7FC 8003CBFC 86020002 */ lh $v0, 2($s0) -/* 03D800 8003CC00 8FAC0074 */ lw $t4, 0x74($sp) -/* 03D804 8003CC04 2841ED01 */ slti $at, $v0, -0x12ff -/* 03D808 8003CC08 14200008 */ bnez $at, .L8003CC2C -/* 03D80C 8003CC0C 000C6880 */ sll $t5, $t4, 2 -/* 03D810 8003CC10 01AC6823 */ subu $t5, $t5, $t4 -/* 03D814 8003CC14 000D6880 */ sll $t5, $t5, 2 -/* 03D818 8003CC18 01AC6823 */ subu $t5, $t5, $t4 -/* 03D81C 8003CC1C 000D6880 */ sll $t5, $t5, 2 -/* 03D820 8003CC20 01AC6821 */ addu $t5, $t5, $t4 -/* 03D824 8003CC24 004D7023 */ subu $t6, $v0, $t5 -/* 03D828 8003CC28 A60E0002 */ sh $t6, 2($s0) -.L8003CC2C: -/* 03D82C 8003CC2C 8C6F0004 */ lw $t7, 4($v1) -/* 03D830 8003CC30 27A50050 */ addiu $a1, $sp, 0x50 -/* 03D834 8003CC34 15E0003A */ bnez $t7, .L8003CD20 -/* 03D838 8003CC38 27A6004C */ addiu $a2, $sp, 0x4c -/* 03D83C 8003CC3C 9104000A */ lbu $a0, 0xa($t0) -/* 03D840 8003CC40 AFA8005C */ sw $t0, 0x5c($sp) -/* 03D844 8003CC44 AFA30060 */ sw $v1, 0x60($sp) -/* 03D848 8003CC48 0C0078DB */ jal func_8001E36C -/* 03D84C 8003CC4C 27A70048 */ addiu $a3, $sp, 0x48 -/* 03D850 8003CC50 8FA30060 */ lw $v1, 0x60($sp) -/* 03D854 8003CC54 8FA50050 */ lw $a1, 0x50($sp) -/* 03D858 8003CC58 8FA6004C */ lw $a2, 0x4c($sp) -/* 03D85C 8003CC5C 8FA70048 */ lw $a3, 0x48($sp) -/* 03D860 8003CC60 24180001 */ li $t8, 1 -/* 03D864 8003CC64 24790004 */ addiu $t9, $v1, 4 -/* 03D868 8003CC68 AFB90014 */ sw $t9, 0x14($sp) -/* 03D86C 8003CC6C AFB80010 */ sw $t8, 0x10($sp) -/* 03D870 8003CC70 0C002556 */ jal func_80009558 -/* 03D874 8003CC74 24040249 */ li $a0, 585 -/* 03D878 8003CC78 8FA8005C */ lw $t0, 0x5c($sp) -/* 03D87C 8003CC7C 10000029 */ b .L8003CD24 -/* 03D880 8003CC80 9103000B */ lbu $v1, 0xb($t0) -.L8003CC84: -/* 03D884 8003CC84 86020002 */ lh $v0, 2($s0) -/* 03D888 8003CC88 8FA90074 */ lw $t1, 0x74($sp) -/* 03D88C 8003CC8C 0441001B */ bgez $v0, .L8003CCFC -/* 03D890 8003CC90 00095080 */ sll $t2, $t1, 2 -/* 03D894 8003CC94 01495021 */ addu $t2, $t2, $t1 -/* 03D898 8003CC98 000A50C0 */ sll $t2, $t2, 3 -/* 03D89C 8003CC9C 004A5821 */ addu $t3, $v0, $t2 -/* 03D8A0 8003CCA0 A60B0002 */ sh $t3, 2($s0) -/* 03D8A4 8003CCA4 8C6C0004 */ lw $t4, 4($v1) -/* 03D8A8 8003CCA8 27A50044 */ addiu $a1, $sp, 0x44 -/* 03D8AC 8003CCAC 1580001C */ bnez $t4, .L8003CD20 -/* 03D8B0 8003CCB0 27A60040 */ addiu $a2, $sp, 0x40 -/* 03D8B4 8003CCB4 9104000A */ lbu $a0, 0xa($t0) -/* 03D8B8 8003CCB8 AFA8005C */ sw $t0, 0x5c($sp) -/* 03D8BC 8003CCBC AFA30060 */ sw $v1, 0x60($sp) -/* 03D8C0 8003CCC0 0C0078DB */ jal func_8001E36C -/* 03D8C4 8003CCC4 27A7003C */ addiu $a3, $sp, 0x3c -/* 03D8C8 8003CCC8 8FA30060 */ lw $v1, 0x60($sp) -/* 03D8CC 8003CCCC 8FA50044 */ lw $a1, 0x44($sp) -/* 03D8D0 8003CCD0 8FA60040 */ lw $a2, 0x40($sp) -/* 03D8D4 8003CCD4 8FA7003C */ lw $a3, 0x3c($sp) -/* 03D8D8 8003CCD8 240D0001 */ li $t5, 1 -/* 03D8DC 8003CCDC 246E0004 */ addiu $t6, $v1, 4 -/* 03D8E0 8003CCE0 AFAE0014 */ sw $t6, 0x14($sp) -/* 03D8E4 8003CCE4 AFAD0010 */ sw $t5, 0x10($sp) -/* 03D8E8 8003CCE8 0C002556 */ jal func_80009558 -/* 03D8EC 8003CCEC 24040249 */ li $a0, 585 -/* 03D8F0 8003CCF0 8FA8005C */ lw $t0, 0x5c($sp) -/* 03D8F4 8003CCF4 1000000B */ b .L8003CD24 -/* 03D8F8 8003CCF8 9103000B */ lbu $v1, 0xb($t0) -.L8003CCFC: -/* 03D8FC 8003CCFC A6000002 */ sh $zero, 2($s0) -/* 03D900 8003CD00 8C640004 */ lw $a0, 4($v1) -/* 03D904 8003CD04 00000000 */ nop -/* 03D908 8003CD08 10800005 */ beqz $a0, .L8003CD20 -/* 03D90C 8003CD0C 00000000 */ nop -/* 03D910 8003CD10 0C0025BE */ jal func_800096F8 -/* 03D914 8003CD14 AFA8005C */ sw $t0, 0x5c($sp) -/* 03D918 8003CD18 8FA8005C */ lw $t0, 0x5c($sp) -/* 03D91C 8003CD1C 00000000 */ nop -.L8003CD20: -/* 03D920 8003CD20 9103000B */ lbu $v1, 0xb($t0) -.L8003CD24: -/* 03D924 8003CD24 24010002 */ li $at, 2 -/* 03D928 8003CD28 10600005 */ beqz $v1, .L8003CD40 -/* 03D92C 8003CD2C 00000000 */ nop -/* 03D930 8003CD30 1061000E */ beq $v1, $at, .L8003CD6C -/* 03D934 8003CD34 24090001 */ li $t1, 1 -/* 03D938 8003CD38 10000029 */ b .L8003CDE0 -/* 03D93C 8003CD3C 9104000A */ lbu $a0, 0xa($t0) -.L8003CD40: -/* 03D940 8003CD40 8E02004C */ lw $v0, 0x4c($s0) -/* 03D944 8003CD44 AE000078 */ sw $zero, 0x78($s0) -/* 03D948 8003CD48 9118000C */ lbu $t8, 0xc($t0) -/* 03D94C 8003CD4C 904F0013 */ lbu $t7, 0x13($v0) -/* 03D950 8003CD50 24190001 */ li $t9, 1 -/* 03D954 8003CD54 01F8082A */ slt $at, $t7, $t8 -/* 03D958 8003CD58 10200034 */ beqz $at, .L8003CE2C -/* 03D95C 8003CD5C 241800FF */ li $t8, 255 -/* 03D960 8003CD60 8E02004C */ lw $v0, 0x4c($s0) -/* 03D964 8003CD64 10000030 */ b .L8003CE28 -/* 03D968 8003CD68 AE190078 */ sw $t9, 0x78($s0) -.L8003CD6C: -/* 03D96C 8003CD6C AE090078 */ sw $t1, 0x78($s0) -/* 03D970 8003CD70 AFA8005C */ sw $t0, 0x5c($sp) -/* 03D974 8003CD74 0C006EB2 */ jal get_racer_object -/* 03D978 8003CD78 00002025 */ move $a0, $zero -/* 03D97C 8003CD7C 8FA8005C */ lw $t0, 0x5c($sp) -/* 03D980 8003CD80 10400013 */ beqz $v0, .L8003CDD0 -/* 03D984 8003CD84 00000000 */ nop -/* 03D988 8003CD88 8C440064 */ lw $a0, 0x64($v0) -/* 03D98C 8003CD8C 24010001 */ li $at, 1 -/* 03D990 8003CD90 808301D6 */ lb $v1, 0x1d6($a0) -/* 03D994 8003CD94 00000000 */ nop -/* 03D998 8003CD98 10610005 */ beq $v1, $at, .L8003CDB0 -/* 03D99C 8003CD9C 24010002 */ li $at, 2 -/* 03D9A0 8003CDA0 10610005 */ beq $v1, $at, .L8003CDB8 -/* 03D9A4 8003CDA4 24020004 */ li $v0, 4 -/* 03D9A8 8003CDA8 10000003 */ b .L8003CDB8 -/* 03D9AC 8003CDAC 24020001 */ li $v0, 1 -.L8003CDB0: -/* 03D9B0 8003CDB0 10000001 */ b .L8003CDB8 -/* 03D9B4 8003CDB4 24020002 */ li $v0, 2 -.L8003CDB8: -/* 03D9B8 8003CDB8 910A000F */ lbu $t2, 0xf($t0) -/* 03D9BC 8003CDBC 00000000 */ nop -/* 03D9C0 8003CDC0 01425824 */ and $t3, $t2, $v0 -/* 03D9C4 8003CDC4 11600002 */ beqz $t3, .L8003CDD0 -/* 03D9C8 8003CDC8 00000000 */ nop -/* 03D9CC 8003CDCC AE000078 */ sw $zero, 0x78($s0) -.L8003CDD0: -/* 03D9D0 8003CDD0 8E02004C */ lw $v0, 0x4c($s0) -/* 03D9D4 8003CDD4 10000015 */ b .L8003CE2C -/* 03D9D8 8003CDD8 241800FF */ li $t8, 255 -/* 03D9DC 8003CDDC 9104000A */ lbu $a0, 0xa($t0) -.L8003CDE0: -/* 03D9E0 8003CDE0 0C0078BB */ jal func_8001E2EC -/* 03D9E4 8003CDE4 AFA8005C */ sw $t0, 0x5c($sp) -/* 03D9E8 8003CDE8 8FA8005C */ lw $t0, 0x5c($sp) -/* 03D9EC 8003CDEC 10400005 */ beqz $v0, .L8003CE04 -/* 03D9F0 8003CDF0 00000000 */ nop -/* 03D9F4 8003CDF4 910C000D */ lbu $t4, 0xd($t0) -/* 03D9F8 8003CDF8 00000000 */ nop -/* 03D9FC 8003CDFC 000C6840 */ sll $t5, $t4, 1 -/* 03DA00 8003CE00 AE0D0078 */ sw $t5, 0x78($s0) -.L8003CE04: -/* 03DA04 8003CE04 8E020078 */ lw $v0, 0x78($s0) -/* 03DA08 8003CE08 8FAE0074 */ lw $t6, 0x74($sp) -/* 03DA0C 8003CE0C 18400003 */ blez $v0, .L8003CE1C -/* 03DA10 8003CE10 004E7823 */ subu $t7, $v0, $t6 -/* 03DA14 8003CE14 10000002 */ b .L8003CE20 -/* 03DA18 8003CE18 AE0F0078 */ sw $t7, 0x78($s0) -.L8003CE1C: -/* 03DA1C 8003CE1C AE000078 */ sw $zero, 0x78($s0) -.L8003CE20: -/* 03DA20 8003CE20 8E02004C */ lw $v0, 0x4c($s0) -/* 03DA24 8003CE24 00000000 */ nop -.L8003CE28: -/* 03DA28 8003CE28 241800FF */ li $t8, 255 -.L8003CE2C: -/* 03DA2C 8003CE2C A0580013 */ sb $t8, 0x13($v0) -/* 03DA30 8003CE30 8E19004C */ lw $t9, 0x4c($s0) -/* 03DA34 8003CE34 00000000 */ nop -/* 03DA38 8003CE38 AF200000 */ sw $zero, ($t9) -/* 03DA3C 8003CE3C 8E02004C */ lw $v0, 0x4c($s0) -/* 03DA40 8003CE40 00000000 */ nop -/* 03DA44 8003CE44 84490014 */ lh $t1, 0x14($v0) -/* 03DA48 8003CE48 00000000 */ nop -/* 03DA4C 8003CE4C 312AFFF7 */ andi $t2, $t1, 0xfff7 -/* 03DA50 8003CE50 A44A0014 */ sh $t2, 0x14($v0) -/* 03DA54 8003CE54 8FBF0024 */ lw $ra, 0x24($sp) -/* 03DA58 8003CE58 8FB00020 */ lw $s0, 0x20($sp) -/* 03DA5C 8003CE5C 03E00008 */ jr $ra -/* 03DA60 8003CE60 27BD0070 */ addiu $sp, $sp, 0x70 - diff --git a/asm/non_matchings/unknown_032760/obj_loop_frog.s b/asm/non_matchings/unknown_032760/obj_loop_frog.s deleted file mode 100644 index f1176f9e..00000000 --- a/asm/non_matchings/unknown_032760/obj_loop_frog.s +++ /dev/null @@ -1,471 +0,0 @@ -.late_rodata -glabel D_800E6250 -.double 1.2 -glabel jpt_800E6258 -.word L80042378, L800426B8, L80042898, L800428E8, L8004292C -glabel D_800E626C -.float 1.34 -glabel D_800E6270 -.float 0.05 -glabel D_800E6274 -.float 0.15 -glabel D_800E6278 -.float 0.15 - -.text -glabel obj_loop_frog -/* 042EF0 800422F0 27BDFEF0 */ addiu $sp, $sp, -0x110 -/* 042EF4 800422F4 44852000 */ mtc1 $a1, $f4 -/* 042EF8 800422F8 3C0E8000 */ lui $t6, %hi(osTvType) # $t6, 0x8000 -/* 042EFC 800422FC 46802020 */ cvt.s.w $f0, $f4 -/* 042F00 80042300 8DCE0300 */ lw $t6, %lo(osTvType)($t6) -/* 042F04 80042304 AFB10030 */ sw $s1, 0x30($sp) -/* 042F08 80042308 00808825 */ move $s1, $a0 -/* 042F0C 8004230C AFBF0034 */ sw $ra, 0x34($sp) -/* 042F10 80042310 AFB0002C */ sw $s0, 0x2c($sp) -/* 042F14 80042314 E7B70020 */ swc1 $f23, 0x20($sp) -/* 042F18 80042318 E7B60024 */ swc1 $f22, 0x24($sp) -/* 042F1C 8004231C E7B50018 */ swc1 $f21, 0x18($sp) -/* 042F20 80042320 E7B4001C */ swc1 $f20, 0x1c($sp) -/* 042F24 80042324 15C00007 */ bnez $t6, .L80042344 -/* 042F28 80042328 46000086 */ mov.s $f2, $f0 -/* 042F2C 8004232C 3C01800E */ lui $at, %hi(D_800E6250 + 4) # $at, 0x800e -/* 042F30 80042330 C4296250 */ lwc1 $f9, %lo(D_800E6250)($at) -/* 042F34 80042334 C4286254 */ lwc1 $f8, %lo(D_800E6250 + 4)($at) -/* 042F38 80042338 460001A1 */ cvt.d.s $f6, $f0 -/* 042F3C 8004233C 46283282 */ mul.d $f10, $f6, $f8 -/* 042F40 80042340 462050A0 */ cvt.s.d $f2, $f10 -.L80042344: -/* 042F44 80042344 8E300064 */ lw $s0, 0x64($s1) -/* 042F48 80042348 00000000 */ nop -/* 042F4C 8004234C 920F0014 */ lbu $t7, 0x14($s0) -/* 042F50 80042350 00000000 */ nop -/* 042F54 80042354 2DE10005 */ sltiu $at, $t7, 5 -/* 042F58 80042358 10200186 */ beqz $at, .L80042974 -/* 042F5C 8004235C 000F7880 */ sll $t7, $t7, 2 -/* 042F60 80042360 3C01800E */ lui $at, %hi(jpt_800E6258) # $at, 0x800e -/* 042F64 80042364 002F0821 */ addu $at, $at, $t7 -/* 042F68 80042368 8C2F6258 */ lw $t7, %lo(jpt_800E6258)($at) -/* 042F6C 8004236C 00000000 */ nop -/* 042F70 80042370 01E00008 */ jr $t7 -/* 042F74 80042374 00000000 */ nop -glabel L80042378 -/* 042F78 80042378 AFA00104 */ sw $zero, 0x104($sp) -/* 042F7C 8004237C 82020019 */ lb $v0, 0x19($s0) -/* 042F80 80042380 3C0742C0 */ lui $a3, 0x42c0 -/* 042F84 80042384 18400003 */ blez $v0, .L80042394 -/* 042F88 80042388 24190001 */ li $t9, 1 -/* 042F8C 8004238C 0045C023 */ subu $t8, $v0, $a1 -/* 042F90 80042390 A2180019 */ sb $t8, 0x19($s0) -.L80042394: -/* 042F94 80042394 C62C000C */ lwc1 $f12, 0xc($s1) -/* 042F98 80042398 C62E0010 */ lwc1 $f14, 0x10($s1) -/* 042F9C 8004239C 8E260014 */ lw $a2, 0x14($s1) -/* 042FA0 800423A0 27A80044 */ addiu $t0, $sp, 0x44 -/* 042FA4 800423A4 AFA80014 */ sw $t0, 0x14($sp) -/* 042FA8 800423A8 AFA50114 */ sw $a1, 0x114($sp) -/* 042FAC 800423AC 0C005B7A */ jal func_80016DE8 -/* 042FB0 800423B0 AFB90010 */ sw $t9, 0x10($sp) -/* 042FB4 800423B4 8FA50114 */ lw $a1, 0x114($sp) -/* 042FB8 800423B8 1840004E */ blez $v0, .L800424F4 -/* 042FBC 800423BC 00000000 */ nop -/* 042FC0 800423C0 8FA90044 */ lw $t1, 0x44($sp) -/* 042FC4 800423C4 C620000C */ lwc1 $f0, 0xc($s1) -/* 042FC8 800423C8 C62C0010 */ lwc1 $f12, 0x10($s1) -/* 042FCC 800423CC C6220014 */ lwc1 $f2, 0x14($s1) -/* 042FD0 800423D0 820A0019 */ lb $t2, 0x19($s0) -/* 042FD4 800423D4 C530000C */ lwc1 $f16, 0xc($t1) -/* 042FD8 800423D8 C5320010 */ lwc1 $f18, 0x10($t1) -/* 042FDC 800423DC C5240014 */ lwc1 $f4, 0x14($t1) -/* 042FE0 800423E0 46100501 */ sub.s $f20, $f0, $f16 -/* 042FE4 800423E4 46126381 */ sub.s $f14, $f12, $f18 -/* 042FE8 800423E8 1D40002E */ bgtz $t2, .L800424A4 -/* 042FEC 800423EC 46041581 */ sub.s $f22, $f2, $f4 -/* 042FF0 800423F0 4614A182 */ mul.s $f6, $f20, $f20 -/* 042FF4 800423F4 3C0144C8 */ li $at, 0x44C80000 # 1600.000000 -/* 042FF8 800423F8 44812000 */ mtc1 $at, $f4 -/* 042FFC 800423FC 460E7202 */ mul.s $f8, $f14, $f14 -/* 043000 80042400 00000000 */ nop -/* 043004 80042404 4616B402 */ mul.s $f16, $f22, $f22 -/* 043008 80042408 46083280 */ add.s $f10, $f6, $f8 -/* 04300C 8004240C 46105480 */ add.s $f18, $f10, $f16 -/* 043010 80042410 4604903C */ c.lt.s $f18, $f4 -/* 043014 80042414 00000000 */ nop -/* 043018 80042418 45000022 */ bc1f .L800424A4 -/* 04301C 8004241C 00000000 */ nop -/* 043020 80042420 920B0015 */ lbu $t3, 0x15($s0) -/* 043024 80042424 240D0002 */ li $t5, 2 -/* 043028 80042428 11600014 */ beqz $t3, .L8004247C -/* 04302C 8004242C 2404013F */ li $a0, 319 -/* 043030 80042430 44050000 */ mfc1 $a1, $f0 -/* 043034 80042434 44066000 */ mfc1 $a2, $f12 -/* 043038 80042438 44071000 */ mfc1 $a3, $f2 -/* 04303C 8004243C 240C0004 */ li $t4, 4 -/* 043040 80042440 AFAC0010 */ sw $t4, 0x10($sp) -/* 043044 80042444 24040174 */ li $a0, 372 -/* 043048 80042448 0C002556 */ jal func_80009558 -/* 04304C 8004244C AFA00014 */ sw $zero, 0x14($sp) -/* 043050 80042450 24040000 */ li $a0, 0 -/* 043054 80042454 0C027A9E */ jal set_eeprom_settings_value -/* 043058 80042458 24050002 */ li $a1, 2 -/* 04305C 8004245C 0C0270B8 */ jal set_magic_code_flags -/* 043060 80042460 24040002 */ li $a0, 2 -/* 043064 80042464 0C01B629 */ jal func_8006D8A4 -/* 043068 80042468 00000000 */ nop -/* 04306C 8004246C 0C003FEE */ jal gParticlePtrList_addObject -/* 043070 80042470 02202025 */ move $a0, $s1 -/* 043074 80042474 10000140 */ b .L80042978 -/* 043078 80042478 8FBF0034 */ lw $ra, 0x34($sp) -.L8004247C: -/* 04307C 8004247C A20D0014 */ sb $t5, 0x14($s0) -/* 043080 80042480 8E270014 */ lw $a3, 0x14($s1) -/* 043084 80042484 8E260010 */ lw $a2, 0x10($s1) -/* 043088 80042488 8E25000C */ lw $a1, 0xc($s1) -/* 04308C 8004248C 240E0004 */ li $t6, 4 -/* 043090 80042490 AFAE0010 */ sw $t6, 0x10($sp) -/* 043094 80042494 0C002556 */ jal func_80009558 -/* 043098 80042498 AFA00014 */ sw $zero, 0x14($sp) -/* 04309C 8004249C 1000002A */ b .L80042548 -/* 0430A0 800424A0 8FAE0104 */ lw $t6, 0x104($sp) -.L800424A4: -/* 0430A4 800424A4 3C014290 */ li $at, 0x42900000 # 72.000000 -/* 0430A8 800424A8 44813000 */ mtc1 $at, $f6 -/* 0430AC 800424AC 920F0015 */ lbu $t7, 0x15($s0) -/* 0430B0 800424B0 4600A307 */ neg.s $f12, $f20 -/* 0430B4 800424B4 11E00007 */ beqz $t7, .L800424D4 -/* 0430B8 800424B8 E606001C */ swc1 $f6, 0x1c($s0) -/* 0430BC 800424BC 3C01800E */ lui $at, %hi(D_800E626C) # $at, 0x800e -/* 0430C0 800424C0 C42A626C */ lwc1 $f10, %lo(D_800E626C)($at) -/* 0430C4 800424C4 C608001C */ lwc1 $f8, 0x1c($s0) -/* 0430C8 800424C8 00000000 */ nop -/* 0430CC 800424CC 460A4402 */ mul.s $f16, $f8, $f10 -/* 0430D0 800424D0 E610001C */ swc1 $f16, 0x1c($s0) -.L800424D4: -/* 0430D4 800424D4 0C01C1D4 */ jal arctan2_f -/* 0430D8 800424D8 4600B387 */ neg.s $f14, $f22 -/* 0430DC 800424DC 34018000 */ li $at, 32768 -/* 0430E0 800424E0 0041C021 */ addu $t8, $v0, $at -/* 0430E4 800424E4 A618001A */ sh $t8, 0x1a($s0) -/* 0430E8 800424E8 24190001 */ li $t9, 1 -/* 0430EC 800424EC 10000015 */ b .L80042544 -/* 0430F0 800424F0 AFB90104 */ sw $t9, 0x104($sp) -.L800424F4: -/* 0430F4 800424F4 86080016 */ lh $t0, 0x16($s0) -/* 0430F8 800424F8 240B0001 */ li $t3, 1 -/* 0430FC 800424FC 01054823 */ subu $t1, $t0, $a1 -/* 043100 80042500 A6090016 */ sh $t1, 0x16($s0) -/* 043104 80042504 860A0016 */ lh $t2, 0x16($s0) -/* 043108 80042508 24050048 */ li $a1, 72 -/* 04310C 8004250C 0541000D */ bgez $t2, .L80042544 -/* 043110 80042510 24040028 */ li $a0, 40 -/* 043114 80042514 0C01BE53 */ jal get_random_number_from_range -/* 043118 80042518 AFAB0104 */ sw $t3, 0x104($sp) -/* 04311C 8004251C 44829000 */ mtc1 $v0, $f18 -/* 043120 80042520 2404C000 */ li $a0, -16384 -/* 043124 80042524 46809120 */ cvt.s.w $f4, $f18 -/* 043128 80042528 24054000 */ li $a1, 16384 -/* 04312C 8004252C 0C01BE53 */ jal get_random_number_from_range -/* 043130 80042530 E604001C */ swc1 $f4, 0x1c($s0) -/* 043134 80042534 862C0000 */ lh $t4, ($s1) -/* 043138 80042538 00000000 */ nop -/* 04313C 8004253C 004C6821 */ addu $t5, $v0, $t4 -/* 043140 80042540 A60D001A */ sh $t5, 0x1a($s0) -.L80042544: -/* 043144 80042544 8FAE0104 */ lw $t6, 0x104($sp) -.L80042548: -/* 043148 80042548 00001025 */ move $v0, $zero -/* 04314C 8004254C 11C00109 */ beqz $t6, .L80042974 -/* 043150 80042550 00001825 */ move $v1, $zero -.L80042554: -/* 043154 80042554 8604001A */ lh $a0, 0x1a($s0) -/* 043158 80042558 AFA30100 */ sw $v1, 0x100($sp) -/* 04315C 8004255C 0C01C1F1 */ jal sins_f -/* 043160 80042560 AFA20108 */ sw $v0, 0x108($sp) -/* 043164 80042564 C606001C */ lwc1 $f6, 0x1c($s0) -/* 043168 80042568 8604001A */ lh $a0, 0x1a($s0) -/* 04316C 8004256C 46060202 */ mul.s $f8, $f0, $f6 -/* 043170 80042570 0C01C1FE */ jal coss_f -/* 043174 80042574 E6080028 */ swc1 $f8, 0x28($s0) -/* 043178 80042578 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 04317C 8004257C 8FA20108 */ lw $v0, 0x108($sp) -/* 043180 80042580 46005407 */ neg.s $f16, $f10 -/* 043184 80042584 46100082 */ mul.s $f2, $f0, $f16 -/* 043188 80042588 8FA30100 */ lw $v1, 0x100($sp) -/* 04318C 8004258C C6040028 */ lwc1 $f4, 0x28($s0) -/* 043190 80042590 C6080000 */ lwc1 $f8, ($s0) -/* 043194 80042594 E602002C */ swc1 $f2, 0x2c($s0) -/* 043198 80042598 C632000C */ lwc1 $f18, 0xc($s1) -/* 04319C 8004259C C62A0014 */ lwc1 $f10, 0x14($s1) -/* 0431A0 800425A0 46049180 */ add.s $f6, $f18, $f4 -/* 0431A4 800425A4 C6120008 */ lwc1 $f18, 8($s0) -/* 0431A8 800425A8 46083501 */ sub.s $f20, $f6, $f8 -/* 0431AC 800425AC 24420001 */ addiu $v0, $v0, 1 -/* 0431B0 800425B0 46025400 */ add.s $f16, $f10, $f2 -/* 0431B4 800425B4 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 0431B8 800425B8 4614A102 */ mul.s $f4, $f20, $f20 -/* 0431BC 800425BC 46128581 */ sub.s $f22, $f16, $f18 -/* 0431C0 800425C0 28410004 */ slti $at, $v0, 4 -/* 0431C4 800425C4 4616B182 */ mul.s $f6, $f22, $f22 -/* 0431C8 800425C8 46062200 */ add.s $f8, $f4, $f6 -/* 0431CC 800425CC 460A403C */ c.lt.s $f8, $f10 -/* 0431D0 800425D0 00000000 */ nop -/* 0431D4 800425D4 45000003 */ bc1f .L800425E4 -/* 0431D8 800425D8 00000000 */ nop -/* 0431DC 800425DC 10000005 */ b .L800425F4 -/* 0431E0 800425E0 24030001 */ li $v1, 1 -.L800425E4: -/* 0431E4 800425E4 860F001A */ lh $t7, 0x1a($s0) -/* 0431E8 800425E8 00000000 */ nop -/* 0431EC 800425EC 25F84000 */ addiu $t8, $t7, 0x4000 -/* 0431F0 800425F0 A618001A */ sh $t8, 0x1a($s0) -.L800425F4: -/* 0431F4 800425F4 10200003 */ beqz $at, .L80042604 -/* 0431F8 800425F8 00000000 */ nop -/* 0431FC 800425FC 1060FFD5 */ beqz $v1, .L80042554 -/* 043200 80042600 00000000 */ nop -.L80042604: -/* 043204 80042604 C620000C */ lwc1 $f0, 0xc($s1) -/* 043208 80042608 C6220014 */ lwc1 $f2, 0x14($s1) -/* 04320C 8004260C 1460000A */ bnez $v1, .L80042638 -/* 043210 80042610 00000000 */ nop -/* 043214 80042614 C6100000 */ lwc1 $f16, ($s0) -/* 043218 80042618 C6120008 */ lwc1 $f18, 8($s0) -/* 04321C 8004261C 46008301 */ sub.s $f12, $f16, $f0 -/* 043220 80042620 0C01C1D4 */ jal arctan2_f -/* 043224 80042624 46029381 */ sub.s $f14, $f18, $f2 -/* 043228 80042628 A602001A */ sh $v0, 0x1a($s0) -/* 04322C 8004262C C6220014 */ lwc1 $f2, 0x14($s1) -/* 043230 80042630 C620000C */ lwc1 $f0, 0xc($s1) -/* 043234 80042634 00000000 */ nop -.L80042638: -/* 043238 80042638 92190015 */ lbu $t9, 0x15($s0) -/* 04323C 8004263C 2404002B */ li $a0, 43 -/* 043240 80042640 1320000B */ beqz $t9, .L80042670 -/* 043244 80042644 24090004 */ li $t1, 4 -/* 043248 80042648 8E260010 */ lw $a2, 0x10($s1) -/* 04324C 8004264C 44050000 */ mfc1 $a1, $f0 -/* 043250 80042650 44071000 */ mfc1 $a3, $f2 -/* 043254 80042654 24080004 */ li $t0, 4 -/* 043258 80042658 AFA80010 */ sw $t0, 0x10($sp) -/* 04325C 8004265C AFA00014 */ sw $zero, 0x14($sp) -/* 043260 80042660 0C002556 */ jal func_80009558 -/* 043264 80042664 240401A4 */ li $a0, 420 -/* 043268 80042668 10000008 */ b .L8004268C -/* 04326C 8004266C 240A0001 */ li $t2, 1 -.L80042670: -/* 043270 80042670 8E260010 */ lw $a2, 0x10($s1) -/* 043274 80042674 44050000 */ mfc1 $a1, $f0 -/* 043278 80042678 44071000 */ mfc1 $a3, $f2 -/* 04327C 8004267C AFA00014 */ sw $zero, 0x14($sp) -/* 043280 80042680 0C002556 */ jal func_80009558 -/* 043284 80042684 AFA90010 */ sw $t1, 0x10($sp) -/* 043288 80042688 240A0001 */ li $t2, 1 -.L8004268C: -/* 04328C 8004268C A20A0014 */ sb $t2, 0x14($s0) -/* 043290 80042690 C624000C */ lwc1 $f4, 0xc($s1) -/* 043294 80042694 860C001A */ lh $t4, 0x1a($s0) -/* 043298 80042698 E6040020 */ swc1 $f4, 0x20($s0) -/* 04329C 8004269C C6260014 */ lwc1 $f6, 0x14($s1) -/* 0432A0 800426A0 240B0020 */ li $t3, 32 -/* 0432A4 800426A4 A20B0018 */ sb $t3, 0x18($s0) -/* 0432A8 800426A8 000C6823 */ negu $t5, $t4 -/* 0432AC 800426AC E6060024 */ swc1 $f6, 0x24($s0) -/* 0432B0 800426B0 100000B0 */ b .L80042974 -/* 0432B4 800426B4 A62D0000 */ sh $t5, ($s1) -glabel L800426B8 -/* 0432B8 800426B8 820E0018 */ lb $t6, 0x18($s0) -/* 0432BC 800426BC 82020019 */ lb $v0, 0x19($s0) -/* 0432C0 800426C0 01C57823 */ subu $t7, $t6, $a1 -/* 0432C4 800426C4 18400003 */ blez $v0, .L800426D4 -/* 0432C8 800426C8 A20F0018 */ sb $t7, 0x18($s0) -/* 0432CC 800426CC 0045C023 */ subu $t8, $v0, $a1 -/* 0432D0 800426D0 A2180019 */ sb $t8, 0x19($s0) -.L800426D4: -/* 0432D4 800426D4 82030018 */ lb $v1, 0x18($s0) -/* 0432D8 800426D8 00002025 */ move $a0, $zero -/* 0432DC 800426DC 04610006 */ bgez $v1, .L800426F8 -/* 0432E0 800426E0 2405012C */ li $a1, 300 -/* 0432E4 800426E4 0C01BE53 */ jal get_random_number_from_range -/* 0432E8 800426E8 A2000014 */ sb $zero, 0x14($s0) -/* 0432EC 800426EC A2000018 */ sb $zero, 0x18($s0) -/* 0432F0 800426F0 82030018 */ lb $v1, 0x18($s0) -/* 0432F4 800426F4 A6020016 */ sh $v0, 0x16($s0) -.L800426F8: -/* 0432F8 800426F8 24190020 */ li $t9, 32 -/* 0432FC 800426FC 03234023 */ subu $t0, $t9, $v1 -/* 043300 80042700 000848C0 */ sll $t1, $t0, 3 -/* 043304 80042704 24010003 */ li $at, 3 -/* 043308 80042708 0121001A */ div $zero, $t1, $at -/* 04330C 8004270C 00005012 */ mflo $t2 -/* 043310 80042710 A62A0018 */ sh $t2, 0x18($s1) -/* 043314 80042714 820B0018 */ lb $t3, 0x18($s0) -/* 043318 80042718 00000000 */ nop -/* 04331C 8004271C 000B6680 */ sll $t4, $t3, 0x1a -/* 043320 80042720 0C01C1FE */ jal coss_f -/* 043324 80042724 000C2403 */ sra $a0, $t4, 0x10 -/* 043328 80042728 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04332C 8004272C 44816000 */ mtc1 $at, $f12 -/* 043330 80042730 C6080020 */ lwc1 $f8, 0x20($s0) -/* 043334 80042734 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 043338 80042738 44819000 */ mtc1 $at, $f18 -/* 04333C 8004273C 460C0400 */ add.s $f16, $f0, $f12 -/* 043340 80042740 E628000C */ swc1 $f8, 0xc($s1) -/* 043344 80042744 C60A0024 */ lwc1 $f10, 0x24($s0) -/* 043348 80042748 46128082 */ mul.s $f2, $f16, $f18 -/* 04334C 8004274C E62A0014 */ swc1 $f10, 0x14($s1) -/* 043350 80042750 C6040028 */ lwc1 $f4, 0x28($s0) -/* 043354 80042754 00000000 */ nop -/* 043358 80042758 46022182 */ mul.s $f6, $f4, $f2 -/* 04335C 8004275C E626001C */ swc1 $f6, 0x1c($s1) -/* 043360 80042760 C608002C */ lwc1 $f8, 0x2c($s0) -/* 043364 80042764 00000000 */ nop -/* 043368 80042768 46024282 */ mul.s $f10, $f8, $f2 -/* 04336C 8004276C 0C004558 */ jal func_80011560 -/* 043370 80042770 E62A0024 */ swc1 $f10, 0x24($s1) -/* 043374 80042774 4480A000 */ mtc1 $zero, $f20 -/* 043378 80042778 8E25001C */ lw $a1, 0x1c($s1) -/* 04337C 8004277C 8E270024 */ lw $a3, 0x24($s1) -/* 043380 80042780 4406A000 */ mfc1 $a2, $f20 -/* 043384 80042784 0C00455C */ jal func_80011570 -/* 043388 80042788 02202025 */ move $a0, $s1 -/* 04338C 8004278C 8624002E */ lh $a0, 0x2e($s1) -/* 043390 80042790 8E25000C */ lw $a1, 0xc($s1) -/* 043394 80042794 8E260014 */ lw $a2, 0x14($s1) -/* 043398 80042798 0C00AEAC */ jal func_8002BAB0 -/* 04339C 8004279C 27A7006C */ addiu $a3, $sp, 0x6c -/* 0433A0 800427A0 10400008 */ beqz $v0, .L800427C4 -/* 0433A4 800427A4 00000000 */ nop -/* 0433A8 800427A8 0C004558 */ jal func_80011560 -/* 0433AC 800427AC E6340010 */ swc1 $f20, 0x10($s1) -/* 0433B0 800427B0 4405A000 */ mfc1 $a1, $f20 -/* 0433B4 800427B4 8FA6006C */ lw $a2, 0x6c($sp) -/* 0433B8 800427B8 4407A000 */ mfc1 $a3, $f20 -/* 0433BC 800427BC 0C00455C */ jal func_80011570 -/* 0433C0 800427C0 02202025 */ move $a0, $s1 -.L800427C4: -/* 0433C4 800427C4 820E0019 */ lb $t6, 0x19($s0) -/* 0433C8 800427C8 00000000 */ nop -/* 0433CC 800427CC 1DC0006A */ bgtz $t6, .L80042978 -/* 0433D0 800427D0 8FBF0034 */ lw $ra, 0x34($sp) -/* 0433D4 800427D4 82030018 */ lb $v1, 0x18($s0) -/* 0433D8 800427D8 3C074220 */ lui $a3, 0x4220 -/* 0433DC 800427DC 28610006 */ slti $at, $v1, 6 -/* 0433E0 800427E0 14200004 */ bnez $at, .L800427F4 -/* 0433E4 800427E4 27AF0044 */ addiu $t7, $sp, 0x44 -/* 0433E8 800427E8 2861001B */ slti $at, $v1, 0x1b -/* 0433EC 800427EC 14200062 */ bnez $at, .L80042978 -/* 0433F0 800427F0 8FBF0034 */ lw $ra, 0x34($sp) -.L800427F4: -/* 0433F4 800427F4 C62C000C */ lwc1 $f12, 0xc($s1) -/* 0433F8 800427F8 C62E0010 */ lwc1 $f14, 0x10($s1) -/* 0433FC 800427FC 8E260014 */ lw $a2, 0x14($s1) -/* 043400 80042800 AFAF0014 */ sw $t7, 0x14($sp) -/* 043404 80042804 0C005B7A */ jal func_80016DE8 -/* 043408 80042808 AFA00010 */ sw $zero, 0x10($sp) -/* 04340C 8004280C 1040005A */ beqz $v0, .L80042978 -/* 043410 80042810 8FBF0034 */ lw $ra, 0x34($sp) -/* 043414 80042814 92180015 */ lbu $t8, 0x15($s0) -/* 043418 80042818 24080002 */ li $t0, 2 -/* 04341C 8004281C 13000014 */ beqz $t8, .L80042870 -/* 043420 80042820 2404013F */ li $a0, 319 -/* 043424 80042824 8E25000C */ lw $a1, 0xc($s1) -/* 043428 80042828 8E260010 */ lw $a2, 0x10($s1) -/* 04342C 8004282C 8E270014 */ lw $a3, 0x14($s1) -/* 043430 80042830 24190004 */ li $t9, 4 -/* 043434 80042834 AFB90010 */ sw $t9, 0x10($sp) -/* 043438 80042838 AFA00014 */ sw $zero, 0x14($sp) -/* 04343C 8004283C 0C002556 */ jal func_80009558 -/* 043440 80042840 24040174 */ li $a0, 372 -/* 043444 80042844 24040000 */ li $a0, 0 -/* 043448 80042848 0C027A9E */ jal set_eeprom_settings_value -/* 04344C 8004284C 24050002 */ li $a1, 2 -/* 043450 80042850 0C0270B8 */ jal set_magic_code_flags -/* 043454 80042854 24040002 */ li $a0, 2 -/* 043458 80042858 0C01B629 */ jal func_8006D8A4 -/* 04345C 8004285C 00000000 */ nop -/* 043460 80042860 0C003FEE */ jal gParticlePtrList_addObject -/* 043464 80042864 02202025 */ move $a0, $s1 -/* 043468 80042868 10000043 */ b .L80042978 -/* 04346C 8004286C 8FBF0034 */ lw $ra, 0x34($sp) -.L80042870: -/* 043470 80042870 A2080014 */ sb $t0, 0x14($s0) -/* 043474 80042874 8E270014 */ lw $a3, 0x14($s1) -/* 043478 80042878 8E260010 */ lw $a2, 0x10($s1) -/* 04347C 8004287C 8E25000C */ lw $a1, 0xc($s1) -/* 043480 80042880 24090004 */ li $t1, 4 -/* 043484 80042884 AFA90010 */ sw $t1, 0x10($sp) -/* 043488 80042888 0C002556 */ jal func_80009558 -/* 04348C 8004288C AFA00014 */ sw $zero, 0x14($sp) -/* 043490 80042890 10000039 */ b .L80042978 -/* 043494 80042894 8FBF0034 */ lw $ra, 0x34($sp) -glabel L80042898 -/* 043498 80042898 3C01800E */ lui $at, %hi(D_800E6270) # $at, 0x800e -/* 04349C 8004289C C4206270 */ lwc1 $f0, %lo(D_800E6270)($at) -/* 0434A0 800428A0 3C01800E */ lui $at, %hi(D_800E6274) # $at, 0x800e -/* 0434A4 800428A4 C4326274 */ lwc1 $f18, %lo(D_800E6274)($at) -/* 0434A8 800428A8 C6100030 */ lwc1 $f16, 0x30($s0) -/* 0434AC 800428AC 46029102 */ mul.s $f4, $f18, $f2 -/* 0434B0 800428B0 240A0003 */ li $t2, 3 -/* 0434B4 800428B4 240B0028 */ li $t3, 40 -/* 0434B8 800428B8 46048181 */ sub.s $f6, $f16, $f4 -/* 0434BC 800428BC E6060030 */ swc1 $f6, 0x30($s0) -/* 0434C0 800428C0 C6080030 */ lwc1 $f8, 0x30($s0) -/* 0434C4 800428C4 00000000 */ nop -/* 0434C8 800428C8 4600403C */ c.lt.s $f8, $f0 -/* 0434CC 800428CC 00000000 */ nop -/* 0434D0 800428D0 45000029 */ bc1f .L80042978 -/* 0434D4 800428D4 8FBF0034 */ lw $ra, 0x34($sp) -/* 0434D8 800428D8 E6000030 */ swc1 $f0, 0x30($s0) -/* 0434DC 800428DC A20A0014 */ sb $t2, 0x14($s0) -/* 0434E0 800428E0 10000024 */ b .L80042974 -/* 0434E4 800428E4 A60B0016 */ sh $t3, 0x16($s0) -glabel L800428E8 -/* 0434E8 800428E8 860C0016 */ lh $t4, 0x16($s0) -/* 0434EC 800428EC 240F0004 */ li $t7, 4 -/* 0434F0 800428F0 01856823 */ subu $t5, $t4, $a1 -/* 0434F4 800428F4 A60D0016 */ sh $t5, 0x16($s0) -/* 0434F8 800428F8 860E0016 */ lh $t6, 0x16($s0) -/* 0434FC 800428FC 24040140 */ li $a0, 320 -/* 043500 80042900 05C1001C */ bgez $t6, .L80042974 -/* 043504 80042904 24180004 */ li $t8, 4 -/* 043508 80042908 A20F0014 */ sb $t7, 0x14($s0) -/* 04350C 8004290C 8E270014 */ lw $a3, 0x14($s1) -/* 043510 80042910 8E260010 */ lw $a2, 0x10($s1) -/* 043514 80042914 8E25000C */ lw $a1, 0xc($s1) -/* 043518 80042918 AFA00014 */ sw $zero, 0x14($sp) -/* 04351C 8004291C 0C002556 */ jal func_80009558 -/* 043520 80042920 AFB80010 */ sw $t8, 0x10($sp) -/* 043524 80042924 10000014 */ b .L80042978 -/* 043528 80042928 8FBF0034 */ lw $ra, 0x34($sp) -glabel L8004292C -/* 04352C 8004292C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 043530 80042930 44816000 */ mtc1 $at, $f12 -/* 043534 80042934 C6000030 */ lwc1 $f0, 0x30($s0) -/* 043538 80042938 2419003C */ li $t9, 60 -/* 04353C 8004293C 4600603C */ c.lt.s $f12, $f0 -/* 043540 80042940 3C01800E */ lui $at, %hi(D_800E6278) # $at, 0x800e -/* 043544 80042944 45000006 */ bc1f .L80042960 -/* 043548 80042948 00000000 */ nop -/* 04354C 8004294C E60C0030 */ swc1 $f12, 0x30($s0) -/* 043550 80042950 A2000014 */ sb $zero, 0x14($s0) -/* 043554 80042954 A6000016 */ sh $zero, 0x16($s0) -/* 043558 80042958 10000006 */ b .L80042974 -/* 04355C 8004295C A2190019 */ sb $t9, 0x19($s0) -.L80042960: -/* 043560 80042960 C42A6278 */ lwc1 $f10, %lo(D_800E6278)($at) -/* 043564 80042964 00000000 */ nop -/* 043568 80042968 46025482 */ mul.s $f18, $f10, $f2 -/* 04356C 8004296C 46120400 */ add.s $f16, $f0, $f18 -/* 043570 80042970 E6100030 */ swc1 $f16, 0x30($s0) -.L80042974: -/* 043574 80042974 8FBF0034 */ lw $ra, 0x34($sp) -.L80042978: -/* 043578 80042978 C7B50018 */ lwc1 $f21, 0x18($sp) -/* 04357C 8004297C C7B4001C */ lwc1 $f20, 0x1c($sp) -/* 043580 80042980 C7B70020 */ lwc1 $f23, 0x20($sp) -/* 043584 80042984 C7B60024 */ lwc1 $f22, 0x24($sp) -/* 043588 80042988 8FB0002C */ lw $s0, 0x2c($sp) -/* 04358C 8004298C 8FB10030 */ lw $s1, 0x30($sp) -/* 043590 80042990 03E00008 */ jr $ra -/* 043594 80042994 27BD0110 */ addiu $sp, $sp, 0x110 - diff --git a/asm/non_matchings/unknown_032760/obj_loop_levelname.s b/asm/non_matchings/unknown_032760/obj_loop_levelname.s deleted file mode 100644 index 32d43e39..00000000 --- a/asm/non_matchings/unknown_032760/obj_loop_levelname.s +++ /dev/null @@ -1,151 +0,0 @@ -glabel obj_loop_levelname -/* 043690 80042A90 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 043694 80042A94 AFBF0024 */ sw $ra, 0x24($sp) -/* 043698 80042A98 00803025 */ move $a2, $a0 -/* 04369C 80042A9C AFB00020 */ sw $s0, 0x20($sp) -/* 0436A0 80042AA0 AFA5005C */ sw $a1, 0x5c($sp) -/* 0436A4 80042AA4 AFA60058 */ sw $a2, 0x58($sp) -/* 0436A8 80042AA8 0C006EC6 */ jal get_racer_object_by_port -/* 0436AC 80042AAC 00002025 */ move $a0, $zero -/* 0436B0 80042AB0 8FA3005C */ lw $v1, 0x5c($sp) -/* 0436B4 80042AB4 8FA60058 */ lw $a2, 0x58($sp) -/* 0436B8 80042AB8 10400082 */ beqz $v0, .L80042CC4 -/* 0436BC 80042ABC 8FBF0024 */ lw $ra, 0x24($sp) -/* 0436C0 80042AC0 C4C4000C */ lwc1 $f4, 0xc($a2) -/* 0436C4 80042AC4 C446000C */ lwc1 $f6, 0xc($v0) -/* 0436C8 80042AC8 C4C80014 */ lwc1 $f8, 0x14($a2) -/* 0436CC 80042ACC 46062001 */ sub.s $f0, $f4, $f6 -/* 0436D0 80042AD0 C44A0014 */ lwc1 $f10, 0x14($v0) -/* 0436D4 80042AD4 46000402 */ mul.s $f16, $f0, $f0 -/* 0436D8 80042AD8 460A4081 */ sub.s $f2, $f8, $f10 -/* 0436DC 80042ADC C4C60078 */ lwc1 $f6, 0x78($a2) -/* 0436E0 80042AE0 24D00078 */ addiu $s0, $a2, 0x78 -/* 0436E4 80042AE4 46021482 */ mul.s $f18, $f2, $f2 -/* 0436E8 80042AE8 46128100 */ add.s $f4, $f16, $f18 -/* 0436EC 80042AEC 4606203C */ c.lt.s $f4, $f6 -/* 0436F0 80042AF0 00000000 */ nop -/* 0436F4 80042AF4 4500000F */ bc1f .L80042B34 -/* 0436F8 80042AF8 00000000 */ nop -/* 0436FC 80042AFC 24D00078 */ addiu $s0, $a2, 0x78 -/* 043700 80042B00 860E0006 */ lh $t6, 6($s0) -/* 043704 80042B04 00037900 */ sll $t7, $v1, 4 -/* 043708 80042B08 01CFC021 */ addu $t8, $t6, $t7 -/* 04370C 80042B0C A6180006 */ sh $t8, 6($s0) -/* 043710 80042B10 86020006 */ lh $v0, 6($s0) -/* 043714 80042B14 24190100 */ li $t9, 256 -/* 043718 80042B18 28410101 */ slti $at, $v0, 0x101 -/* 04371C 80042B1C 14200010 */ bnez $at, .L80042B60 -/* 043720 80042B20 00000000 */ nop -/* 043724 80042B24 A6190006 */ sh $t9, 6($s0) -/* 043728 80042B28 86020006 */ lh $v0, 6($s0) -/* 04372C 80042B2C 1000000C */ b .L80042B60 -/* 043730 80042B30 00000000 */ nop -.L80042B34: -/* 043734 80042B34 86080006 */ lh $t0, 6($s0) -/* 043738 80042B38 00034900 */ sll $t1, $v1, 4 -/* 04373C 80042B3C 01095023 */ subu $t2, $t0, $t1 -/* 043740 80042B40 A60A0006 */ sh $t2, 6($s0) -/* 043744 80042B44 86020006 */ lh $v0, 6($s0) -/* 043748 80042B48 00000000 */ nop -/* 04374C 80042B4C 04410004 */ bgez $v0, .L80042B60 -/* 043750 80042B50 00000000 */ nop -/* 043754 80042B54 A6000006 */ sh $zero, 6($s0) -/* 043758 80042B58 86020006 */ lh $v0, 6($s0) -/* 04375C 80042B5C 00000000 */ nop -.L80042B60: -/* 043760 80042B60 18400058 */ blez $v0, .L80042CC4 -/* 043764 80042B64 8FBF0024 */ lw $ra, 0x24($sp) -/* 043768 80042B68 86040004 */ lh $a0, 4($s0) -/* 04376C 80042B6C 0C01AF77 */ jal get_level_name -/* 043770 80042B70 00000000 */ nop -/* 043774 80042B74 AFA2002C */ sw $v0, 0x2c($sp) -/* 043778 80042B78 00402025 */ move $a0, $v0 -/* 04377C 80042B7C 00002825 */ move $a1, $zero -/* 043780 80042B80 0C031368 */ jal func_800C4DA0 -/* 043784 80042B84 00003025 */ move $a2, $zero -/* 043788 80042B88 24430018 */ addiu $v1, $v0, 0x18 -/* 04378C 80042B8C 00035843 */ sra $t3, $v1, 1 -/* 043790 80042B90 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000 -/* 043794 80042B94 8DEF0300 */ lw $t7, %lo(osTvType)($t7) -/* 043798 80042B98 240C00A0 */ li $t4, 160 -/* 04379C 80042B9C 018B6823 */ subu $t5, $t4, $t3 -/* 0437A0 80042BA0 256E00A0 */ addiu $t6, $t3, 0xa0 -/* 0437A4 80042BA4 AFAD0050 */ sw $t5, 0x50($sp) -/* 0437A8 80042BA8 15E00006 */ bnez $t7, .L80042BC4 -/* 0437AC 80042BAC AFAE0048 */ sw $t6, 0x48($sp) -/* 0437B0 80042BB0 241800E0 */ li $t8, 224 -/* 0437B4 80042BB4 241900F8 */ li $t9, 248 -/* 0437B8 80042BB8 AFB8004C */ sw $t8, 0x4c($sp) -/* 0437BC 80042BBC 10000005 */ b .L80042BD4 -/* 0437C0 80042BC0 AFB90044 */ sw $t9, 0x44($sp) -.L80042BC4: -/* 0437C4 80042BC4 240800CA */ li $t0, 202 -/* 0437C8 80042BC8 240900DE */ li $t1, 222 -/* 0437CC 80042BCC AFA8004C */ sw $t0, 0x4c($sp) -/* 0437D0 80042BD0 AFA90044 */ sw $t1, 0x44($sp) -.L80042BD4: -/* 0437D4 80042BD4 0C031525 */ jal assign_dialogue_box_id -/* 0437D8 80042BD8 24040004 */ li $a0, 4 -/* 0437DC 80042BDC 8FAA0044 */ lw $t2, 0x44($sp) -/* 0437E0 80042BE0 8FA50050 */ lw $a1, 0x50($sp) -/* 0437E4 80042BE4 8FA6004C */ lw $a2, 0x4c($sp) -/* 0437E8 80042BE8 8FA70048 */ lw $a3, 0x48($sp) -/* 0437EC 80042BEC 24040004 */ li $a0, 4 -/* 0437F0 80042BF0 0C0313B7 */ jal set_current_dialogue_box_coords -/* 0437F4 80042BF4 AFAA0010 */ sw $t2, 0x10($sp) -/* 0437F8 80042BF8 860B0006 */ lh $t3, 6($s0) -/* 0437FC 80042BFC 24040004 */ li $a0, 4 -/* 043800 80042C00 000B6080 */ sll $t4, $t3, 2 -/* 043804 80042C04 018B6021 */ addu $t4, $t4, $t3 -/* 043808 80042C08 000C6140 */ sll $t4, $t4, 5 -/* 04380C 80042C0C 000C6A03 */ sra $t5, $t4, 8 -/* 043810 80042C10 AFAD0010 */ sw $t5, 0x10($sp) -/* 043814 80042C14 24050080 */ li $a1, 128 -/* 043818 80042C18 24060040 */ li $a2, 64 -/* 04381C 80042C1C 0C0313EF */ jal set_current_dialogue_background_colour -/* 043820 80042C20 24070080 */ li $a3, 128 -/* 043824 80042C24 24040004 */ li $a0, 4 -/* 043828 80042C28 00002825 */ move $a1, $zero -/* 04382C 80042C2C 00003025 */ move $a2, $zero -/* 043830 80042C30 00003825 */ move $a3, $zero -/* 043834 80042C34 0C031414 */ jal set_current_text_background_colour -/* 043838 80042C38 AFA00010 */ sw $zero, 0x10($sp) -/* 04383C 80042C3C 24040004 */ li $a0, 4 -/* 043840 80042C40 0C0313DF */ jal set_dialogue_font -/* 043844 80042C44 00002825 */ move $a1, $zero -/* 043848 80042C48 AFA00010 */ sw $zero, 0x10($sp) -/* 04384C 80042C4C 860E0006 */ lh $t6, 6($s0) -/* 043850 80042C50 24040004 */ li $a0, 4 -/* 043854 80042C54 000E7A00 */ sll $t7, $t6, 8 -/* 043858 80042C58 01EE7823 */ subu $t7, $t7, $t6 -/* 04385C 80042C5C 000FC203 */ sra $t8, $t7, 8 -/* 043860 80042C60 AFB80014 */ sw $t8, 0x14($sp) -/* 043864 80042C64 240500FF */ li $a1, 255 -/* 043868 80042C68 240600FF */ li $a2, 255 -/* 04386C 80042C6C 0C031400 */ jal set_current_text_colour -/* 043870 80042C70 240700FF */ li $a3, 255 -/* 043874 80042C74 8FB90048 */ lw $t9, 0x48($sp) -/* 043878 80042C78 8FA80050 */ lw $t0, 0x50($sp) -/* 04387C 80042C7C 8FAA0044 */ lw $t2, 0x44($sp) -/* 043880 80042C80 8FAB004C */ lw $t3, 0x4c($sp) -/* 043884 80042C84 03282823 */ subu $a1, $t9, $t0 -/* 043888 80042C88 014B3023 */ subu $a2, $t2, $t3 -/* 04388C 80042C8C 00066043 */ sra $t4, $a2, 1 -/* 043890 80042C90 00054843 */ sra $t1, $a1, 1 -/* 043894 80042C94 8FA7002C */ lw $a3, 0x2c($sp) -/* 043898 80042C98 240D0001 */ li $t5, 1 -/* 04389C 80042C9C 240E000C */ li $t6, 12 -/* 0438A0 80042CA0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0438A4 80042CA4 AFAD0010 */ sw $t5, 0x10($sp) -/* 0438A8 80042CA8 01202825 */ move $a1, $t1 -/* 0438AC 80042CAC 25860002 */ addiu $a2, $t4, 2 -/* 0438B0 80042CB0 0C03145A */ jal render_dialogue_text -/* 0438B4 80042CB4 24040004 */ li $a0, 4 -/* 0438B8 80042CB8 0C03157D */ jal open_dialogue_box -/* 0438BC 80042CBC 24040004 */ li $a0, 4 -/* 0438C0 80042CC0 8FBF0024 */ lw $ra, 0x24($sp) -.L80042CC4: -/* 0438C4 80042CC4 8FB00020 */ lw $s0, 0x20($sp) -/* 0438C8 80042CC8 03E00008 */ jr $ra -/* 0438CC 80042CCC 27BD0058 */ addiu $sp, $sp, 0x58 - diff --git a/asm/non_matchings/unknown_032760/obj_loop_treasuresucker.s b/asm/non_matchings/unknown_032760/obj_loop_treasuresucker.s deleted file mode 100644 index d5831c68..00000000 --- a/asm/non_matchings/unknown_032760/obj_loop_treasuresucker.s +++ /dev/null @@ -1,162 +0,0 @@ -.late_rodata -glabel D_800E6180 -.float 50625.0 - -.text -glabel obj_loop_treasuresucker -/* 03DC58 8003D058 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 03DC5C 8003D05C AFBF0014 */ sw $ra, 0x14($sp) -/* 03DC60 8003D060 AFA5004C */ sw $a1, 0x4c($sp) -/* 03DC64 8003D064 00803025 */ move $a2, $a0 -/* 03DC68 8003D068 8C840078 */ lw $a0, 0x78($a0) -/* 03DC6C 8003D06C 0C006EB2 */ jal get_racer_object -/* 03DC70 8003D070 AFA60048 */ sw $a2, 0x48($sp) -/* 03DC74 8003D074 8FA60048 */ lw $a2, 0x48($sp) -/* 03DC78 8003D078 10400088 */ beqz $v0, .L8003D29C -/* 03DC7C 8003D07C 00401825 */ move $v1, $v0 -/* 03DC80 8003D080 8C470064 */ lw $a3, 0x64($v0) -/* 03DC84 8003D084 00002025 */ move $a0, $zero -/* 03DC88 8003D088 80EE0185 */ lb $t6, 0x185($a3) -/* 03DC8C 8003D08C 00000000 */ nop -/* 03DC90 8003D090 11C0001C */ beqz $t6, .L8003D104 -/* 03DC94 8003D094 00000000 */ nop -/* 03DC98 8003D098 8CCF007C */ lw $t7, 0x7c($a2) -/* 03DC9C 8003D09C 00000000 */ nop -/* 03DCA0 8003D0A0 15E00018 */ bnez $t7, .L8003D104 -/* 03DCA4 8003D0A4 00000000 */ nop -/* 03DCA8 8003D0A8 C4C4000C */ lwc1 $f4, 0xc($a2) -/* 03DCAC 8003D0AC C446000C */ lwc1 $f6, 0xc($v0) -/* 03DCB0 8003D0B0 C4C80010 */ lwc1 $f8, 0x10($a2) -/* 03DCB4 8003D0B4 46062001 */ sub.s $f0, $f4, $f6 -/* 03DCB8 8003D0B8 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 03DCBC 8003D0BC 46000102 */ mul.s $f4, $f0, $f0 -/* 03DCC0 8003D0C0 460A4081 */ sub.s $f2, $f8, $f10 -/* 03DCC4 8003D0C4 C4D00014 */ lwc1 $f16, 0x14($a2) -/* 03DCC8 8003D0C8 C4520014 */ lwc1 $f18, 0x14($v0) -/* 03DCCC 8003D0CC 46021182 */ mul.s $f6, $f2, $f2 -/* 03DCD0 8003D0D0 46128301 */ sub.s $f12, $f16, $f18 -/* 03DCD4 8003D0D4 3C01800E */ lui $at, %hi(D_800E6180) # $at, 0x800e -/* 03DCD8 8003D0D8 C4306180 */ lwc1 $f16, %lo(D_800E6180)($at) -/* 03DCDC 8003D0DC 460C6282 */ mul.s $f10, $f12, $f12 -/* 03DCE0 8003D0E0 46062200 */ add.s $f8, $f4, $f6 -/* 03DCE4 8003D0E4 24180008 */ li $t8, 8 -/* 03DCE8 8003D0E8 460A4000 */ add.s $f0, $f8, $f10 -/* 03DCEC 8003D0EC 4610003C */ c.lt.s $f0, $f16 -/* 03DCF0 8003D0F0 00000000 */ nop -/* 03DCF4 8003D0F4 45000003 */ bc1f .L8003D104 -/* 03DCF8 8003D0F8 00000000 */ nop -/* 03DCFC 8003D0FC ACD8007C */ sw $t8, 0x7c($a2) -/* 03DD00 8003D100 24040001 */ li $a0, 1 -.L8003D104: -/* 03DD04 8003D104 8CC2007C */ lw $v0, 0x7c($a2) -/* 03DD08 8003D108 8FB9004C */ lw $t9, 0x4c($sp) -/* 03DD0C 8003D10C 18400010 */ blez $v0, .L8003D150 -/* 03DD10 8003D110 00594023 */ subu $t0, $v0, $t9 -/* 03DD14 8003D114 1D00000E */ bgtz $t0, .L8003D150 -/* 03DD18 8003D118 ACC8007C */ sw $t0, 0x7c($a2) -/* 03DD1C 8003D11C 80E20185 */ lb $v0, 0x185($a3) -/* 03DD20 8003D120 240C0008 */ li $t4, 8 -/* 03DD24 8003D124 18400009 */ blez $v0, .L8003D14C -/* 03DD28 8003D128 244AFFFF */ addiu $t2, $v0, -1 -/* 03DD2C 8003D12C A0EA0185 */ sb $t2, 0x185($a3) -/* 03DD30 8003D130 80EB0185 */ lb $t3, 0x185($a3) -/* 03DD34 8003D134 00000000 */ nop -/* 03DD38 8003D138 11600002 */ beqz $t3, .L8003D144 -/* 03DD3C 8003D13C 00000000 */ nop -/* 03DD40 8003D140 24040001 */ li $a0, 1 -.L8003D144: -/* 03DD44 8003D144 10000002 */ b .L8003D150 -/* 03DD48 8003D148 ACCC007C */ sw $t4, 0x7c($a2) -.L8003D14C: -/* 03DD4C 8003D14C ACC0007C */ sw $zero, 0x7c($a2) -.L8003D150: -/* 03DD50 8003D150 10800053 */ beqz $a0, .L8003D2A0 -/* 03DD54 8003D154 8FBF0014 */ lw $ra, 0x14($sp) -/* 03DD58 8003D158 444DF800 */ cfc1 $t5, $31 -/* 03DD5C 8003D15C C472000C */ lwc1 $f18, 0xc($v1) -/* 03DD60 8003D160 35A10003 */ ori $at, $t5, 3 -/* 03DD64 8003D164 38210002 */ xori $at, $at, 2 -/* 03DD68 8003D168 44C1F800 */ ctc1 $at, $31 -/* 03DD6C 8003D16C 240C0008 */ li $t4, 8 -/* 03DD70 8003D170 46009124 */ cvt.w.s $f4, $f18 -/* 03DD74 8003D174 27A40024 */ addiu $a0, $sp, 0x24 -/* 03DD78 8003D178 44CDF800 */ ctc1 $t5, $31 -/* 03DD7C 8003D17C 440E2000 */ mfc1 $t6, $f4 -/* 03DD80 8003D180 240D0061 */ li $t5, 97 -/* 03DD84 8003D184 444FF800 */ cfc1 $t7, $31 -/* 03DD88 8003D188 A7AE0026 */ sh $t6, 0x26($sp) -/* 03DD8C 8003D18C 35E10003 */ ori $at, $t7, 3 -/* 03DD90 8003D190 38210002 */ xori $at, $at, 2 -/* 03DD94 8003D194 44C1F800 */ ctc1 $at, $31 -/* 03DD98 8003D198 C4660010 */ lwc1 $f6, 0x10($v1) -/* 03DD9C 8003D19C 24050001 */ li $a1, 1 -/* 03DDA0 8003D1A0 46003224 */ cvt.w.s $f8, $f6 -/* 03DDA4 8003D1A4 44CFF800 */ ctc1 $t7, $31 -/* 03DDA8 8003D1A8 44084000 */ mfc1 $t0, $f8 -/* 03DDAC 8003D1AC 00000000 */ nop -/* 03DDB0 8003D1B0 444AF800 */ cfc1 $t2, $31 -/* 03DDB4 8003D1B4 2509000A */ addiu $t1, $t0, 0xa -/* 03DDB8 8003D1B8 A7A90028 */ sh $t1, 0x28($sp) -/* 03DDBC 8003D1BC 35410003 */ ori $at, $t2, 3 -/* 03DDC0 8003D1C0 C46A0014 */ lwc1 $f10, 0x14($v1) -/* 03DDC4 8003D1C4 38210002 */ xori $at, $at, 2 -/* 03DDC8 8003D1C8 44C1F800 */ ctc1 $at, $31 -/* 03DDCC 8003D1CC A3AC0025 */ sb $t4, 0x25($sp) -/* 03DDD0 8003D1D0 46005424 */ cvt.w.s $f16, $f10 -/* 03DDD4 8003D1D4 A3AD0024 */ sb $t5, 0x24($sp) -/* 03DDD8 8003D1D8 440B8000 */ mfc1 $t3, $f16 -/* 03DDDC 8003D1DC 44CAF800 */ ctc1 $t2, $31 -/* 03DDE0 8003D1E0 AFA7003C */ sw $a3, 0x3c($sp) -/* 03DDE4 8003D1E4 AFA60048 */ sw $a2, 0x48($sp) -/* 03DDE8 8003D1E8 AFA30044 */ sw $v1, 0x44($sp) -/* 03DDEC 8003D1EC 0C003A95 */ jal spawn_object -/* 03DDF0 8003D1F0 A7AB002A */ sh $t3, 0x2a($sp) -/* 03DDF4 8003D1F4 8FA30044 */ lw $v1, 0x44($sp) -/* 03DDF8 8003D1F8 8FA60048 */ lw $a2, 0x48($sp) -/* 03DDFC 8003D1FC 8FA7003C */ lw $a3, 0x3c($sp) -/* 03DE00 8003D200 10400026 */ beqz $v0, .L8003D29C -/* 03DE04 8003D204 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 03DE08 8003D208 44811000 */ mtc1 $at, $f2 -/* 03DE0C 8003D20C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 03DE10 8003D210 44819000 */ mtc1 $at, $f18 -/* 03DE14 8003D214 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 03DE18 8003D218 46121102 */ mul.s $f4, $f2, $f18 -/* 03DE1C 8003D21C 44814800 */ mtc1 $at, $f9 -/* 03DE20 8003D220 44804000 */ mtc1 $zero, $f8 -/* 03DE24 8003D224 AC40003C */ sw $zero, 0x3c($v0) -/* 03DE28 8003D228 460021A1 */ cvt.d.s $f6, $f4 -/* 03DE2C 8003D22C 00000000 */ nop -/* 03DE30 8003D230 46283283 */ div.d $f10, $f6, $f8 -/* 03DE34 8003D234 E4420020 */ swc1 $f2, 0x20($v0) -/* 03DE38 8003D238 C472000C */ lwc1 $f18, 0xc($v1) -/* 03DE3C 8003D23C C4D0000C */ lwc1 $f16, 0xc($a2) -/* 03DE40 8003D240 00000000 */ nop -/* 03DE44 8003D244 46128101 */ sub.s $f4, $f16, $f18 -/* 03DE48 8003D248 46205020 */ cvt.s.d $f0, $f10 -/* 03DE4C 8003D24C 00000000 */ nop -/* 03DE50 8003D250 46002183 */ div.s $f6, $f4, $f0 -/* 03DE54 8003D254 E446001C */ swc1 $f6, 0x1c($v0) -/* 03DE58 8003D258 C46A0014 */ lwc1 $f10, 0x14($v1) -/* 03DE5C 8003D25C C4C80014 */ lwc1 $f8, 0x14($a2) -/* 03DE60 8003D260 AC47007C */ sw $a3, 0x7c($v0) -/* 03DE64 8003D264 460A4401 */ sub.s $f16, $f8, $f10 -/* 03DE68 8003D268 00000000 */ nop -/* 03DE6C 8003D26C 46008483 */ div.s $f18, $f16, $f0 -/* 03DE70 8003D270 444EF800 */ cfc1 $t6, $31 -/* 03DE74 8003D274 E4520024 */ swc1 $f18, 0x24($v0) -/* 03DE78 8003D278 35C10003 */ ori $at, $t6, 3 -/* 03DE7C 8003D27C 38210002 */ xori $at, $at, 2 -/* 03DE80 8003D280 44C1F800 */ ctc1 $at, $31 -/* 03DE84 8003D284 00000000 */ nop -/* 03DE88 8003D288 46000124 */ cvt.w.s $f4, $f0 -/* 03DE8C 8003D28C 440F2000 */ mfc1 $t7, $f4 -/* 03DE90 8003D290 44CEF800 */ ctc1 $t6, $31 -/* 03DE94 8003D294 AC4F0078 */ sw $t7, 0x78($v0) -/* 03DE98 8003D298 00000000 */ nop -.L8003D29C: -/* 03DE9C 8003D29C 8FBF0014 */ lw $ra, 0x14($sp) -.L8003D2A0: -/* 03DEA0 8003D2A0 27BD0048 */ addiu $sp, $sp, 0x48 -/* 03DEA4 8003D2A4 03E00008 */ jr $ra -/* 03DEA8 8003D2A8 00000000 */ nop - diff --git a/asm/non_matchings/unknown_032760/obj_loop_trigger.s b/asm/non_matchings/unknown_032760/obj_loop_trigger.s deleted file mode 100644 index e87aa730..00000000 --- a/asm/non_matchings/unknown_032760/obj_loop_trigger.s +++ /dev/null @@ -1,156 +0,0 @@ -glabel obj_loop_trigger -/* 03D3A4 8003C7A4 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 03D3A8 8003C7A8 AFBF004C */ sw $ra, 0x4c($sp) -/* 03D3AC 8003C7AC AFBE0048 */ sw $fp, 0x48($sp) -/* 03D3B0 8003C7B0 AFB70044 */ sw $s7, 0x44($sp) -/* 03D3B4 8003C7B4 AFB60040 */ sw $s6, 0x40($sp) -/* 03D3B8 8003C7B8 AFB5003C */ sw $s5, 0x3c($sp) -/* 03D3BC 8003C7BC AFB40038 */ sw $s4, 0x38($sp) -/* 03D3C0 8003C7C0 AFB30034 */ sw $s3, 0x34($sp) -/* 03D3C4 8003C7C4 AFB20030 */ sw $s2, 0x30($sp) -/* 03D3C8 8003C7C8 AFB1002C */ sw $s1, 0x2c($sp) -/* 03D3CC 8003C7CC AFB00028 */ sw $s0, 0x28($sp) -/* 03D3D0 8003C7D0 E7B70020 */ swc1 $f23, 0x20($sp) -/* 03D3D4 8003C7D4 E7B60024 */ swc1 $f22, 0x24($sp) -/* 03D3D8 8003C7D8 E7B50018 */ swc1 $f21, 0x18($sp) -/* 03D3DC 8003C7DC E7B4001C */ swc1 $f20, 0x1c($sp) -/* 03D3E0 8003C7E0 AFA5009C */ sw $a1, 0x9c($sp) -/* 03D3E4 8003C7E4 8C9E003C */ lw $fp, 0x3c($a0) -/* 03D3E8 8003C7E8 8C920064 */ lw $s2, 0x64($a0) -/* 03D3EC 8003C7EC 0C01BAA4 */ jal get_settings -/* 03D3F0 8003C7F0 0080A025 */ move $s4, $a0 -/* 03D3F4 8003C7F4 904F0049 */ lbu $t7, 0x49($v0) -/* 03D3F8 8003C7F8 8C4E0004 */ lw $t6, 4($v0) -/* 03D3FC 8003C7FC 000FC080 */ sll $t8, $t7, 2 -/* 03D400 8003C800 01D8C821 */ addu $t9, $t6, $t8 -/* 03D404 8003C804 8F300000 */ lw $s0, ($t9) -/* 03D408 8003C808 0C01AF66 */ jal get_current_level_race_type -/* 03D40C 8003C80C 0040B825 */ move $s7, $v0 -/* 03D410 8003C810 83C30009 */ lb $v1, 9($fp) -/* 03D414 8003C814 00000000 */ nop -/* 03D418 8003C818 04600065 */ bltz $v1, .L8003C9B0 -/* 03D41C 8003C81C 8FBF004C */ lw $ra, 0x4c($sp) -/* 03D420 8003C820 8E89004C */ lw $t1, 0x4c($s4) -/* 03D424 8003C824 8E450010 */ lw $a1, 0x10($s2) -/* 03D428 8003C828 912A0013 */ lbu $t2, 0x13($t1) -/* 03D42C 8003C82C 3C080001 */ lui $t0, 1 -/* 03D430 8003C830 0145082A */ slt $at, $t2, $a1 -/* 03D434 8003C834 1020005D */ beqz $at, .L8003C9AC -/* 03D438 8003C838 00683004 */ sllv $a2, $t0, $v1 -/* 03D43C 8003C83C 304B00FF */ andi $t3, $v0, 0xff -/* 03D440 8003C840 24010005 */ li $at, 5 -/* 03D444 8003C844 15610003 */ bne $t3, $at, .L8003C854 -/* 03D448 8003C848 02066024 */ and $t4, $s0, $a2 -/* 03D44C 8003C84C 15800058 */ bnez $t4, .L8003C9B0 -/* 03D450 8003C850 8FBF004C */ lw $ra, 0x4c($sp) -.L8003C854: -/* 03D454 8003C854 44852000 */ mtc1 $a1, $f4 -/* 03D458 8003C858 27A4008C */ addiu $a0, $sp, 0x8c -/* 03D45C 8003C85C AFA60060 */ sw $a2, 0x60($sp) -/* 03D460 8003C860 0C006E9D */ jal get_racer_objects -/* 03D464 8003C864 468025A0 */ cvt.s.w $f22, $f4 -/* 03D468 8003C868 8FAD008C */ lw $t5, 0x8c($sp) -/* 03D46C 8003C86C 00009825 */ move $s3, $zero -/* 03D470 8003C870 19A0004E */ blez $t5, .L8003C9AC -/* 03D474 8003C874 00408825 */ move $s1, $v0 -/* 03D478 8003C878 4480A000 */ mtc1 $zero, $f20 -/* 03D47C 8003C87C 241600FF */ li $s6, 255 -/* 03D480 8003C880 2415FFFF */ li $s5, -1 -.L8003C884: -/* 03D484 8003C884 8E300000 */ lw $s0, ($s1) -/* 03D488 8003C888 92430014 */ lbu $v1, 0x14($s2) -/* 03D48C 8003C88C 8E020064 */ lw $v0, 0x64($s0) -/* 03D490 8003C890 306F0001 */ andi $t7, $v1, 1 -/* 03D494 8003C894 15E00005 */ bnez $t7, .L8003C8AC -/* 03D498 8003C898 30780002 */ andi $t8, $v1, 2 -/* 03D49C 8003C89C 844E0000 */ lh $t6, ($v0) -/* 03D4A0 8003C8A0 00000000 */ nop -/* 03D4A4 8003C8A4 12AE0007 */ beq $s5, $t6, .L8003C8C4 -/* 03D4A8 8003C8A8 00000000 */ nop -.L8003C8AC: -/* 03D4AC 8003C8AC 1700003B */ bnez $t8, .L8003C99C -/* 03D4B0 8003C8B0 8FAF008C */ lw $t7, 0x8c($sp) -/* 03D4B4 8003C8B4 84590000 */ lh $t9, ($v0) -/* 03D4B8 8003C8B8 00000000 */ nop -/* 03D4BC 8003C8BC 12B90037 */ beq $s5, $t9, .L8003C99C -/* 03D4C0 8003C8C0 8FAF008C */ lw $t7, 0x8c($sp) -.L8003C8C4: -/* 03D4C4 8003C8C4 C606000C */ lwc1 $f6, 0xc($s0) -/* 03D4C8 8003C8C8 C688000C */ lwc1 $f8, 0xc($s4) -/* 03D4CC 8003C8CC C60A0010 */ lwc1 $f10, 0x10($s0) -/* 03D4D0 8003C8D0 46083001 */ sub.s $f0, $f6, $f8 -/* 03D4D4 8003C8D4 C6900010 */ lwc1 $f16, 0x10($s4) -/* 03D4D8 8003C8D8 46000182 */ mul.s $f6, $f0, $f0 -/* 03D4DC 8003C8DC 46105081 */ sub.s $f2, $f10, $f16 -/* 03D4E0 8003C8E0 C6120014 */ lwc1 $f18, 0x14($s0) -/* 03D4E4 8003C8E4 C6840014 */ lwc1 $f4, 0x14($s4) -/* 03D4E8 8003C8E8 46021202 */ mul.s $f8, $f2, $f2 -/* 03D4EC 8003C8EC 46049381 */ sub.s $f14, $f18, $f4 -/* 03D4F0 8003C8F0 460E7402 */ mul.s $f16, $f14, $f14 -/* 03D4F4 8003C8F4 46083280 */ add.s $f10, $f6, $f8 -/* 03D4F8 8003C8F8 0C0326B4 */ jal sqrtf -/* 03D4FC 8003C8FC 46105300 */ add.s $f12, $f10, $f16 -/* 03D500 8003C900 4616003C */ c.lt.s $f0, $f22 -/* 03D504 8003C904 00000000 */ nop -/* 03D508 8003C908 45000024 */ bc1f .L8003C99C -/* 03D50C 8003C90C 8FAF008C */ lw $t7, 0x8c($sp) -/* 03D510 8003C910 C6520000 */ lwc1 $f18, ($s2) -/* 03D514 8003C914 C604000C */ lwc1 $f4, 0xc($s0) -/* 03D518 8003C918 C6480008 */ lwc1 $f8, 8($s2) -/* 03D51C 8003C91C 46049182 */ mul.s $f6, $f18, $f4 -/* 03D520 8003C920 C60A0014 */ lwc1 $f10, 0x14($s0) -/* 03D524 8003C924 C644000C */ lwc1 $f4, 0xc($s2) -/* 03D528 8003C928 8FAC0060 */ lw $t4, 0x60($sp) -/* 03D52C 8003C92C 460A4402 */ mul.s $f16, $f8, $f10 -/* 03D530 8003C930 46103480 */ add.s $f18, $f6, $f16 -/* 03D534 8003C934 46049000 */ add.s $f0, $f18, $f4 -/* 03D538 8003C938 4614003C */ c.lt.s $f0, $f20 -/* 03D53C 8003C93C 00000000 */ nop -/* 03D540 8003C940 45000016 */ bc1f .L8003C99C -/* 03D544 8003C944 8FAF008C */ lw $t7, 0x8c($sp) -/* 03D548 8003C948 92E90049 */ lbu $t1, 0x49($s7) -/* 03D54C 8003C94C 8EE80004 */ lw $t0, 4($s7) -/* 03D550 8003C950 00095080 */ sll $t2, $t1, 2 -/* 03D554 8003C954 010A1021 */ addu $v0, $t0, $t2 -/* 03D558 8003C958 8C4B0000 */ lw $t3, ($v0) -/* 03D55C 8003C95C 00000000 */ nop -/* 03D560 8003C960 016C6825 */ or $t5, $t3, $t4 -/* 03D564 8003C964 AC4D0000 */ sw $t5, ($v0) -/* 03D568 8003C968 93C4000B */ lbu $a0, 0xb($fp) -/* 03D56C 8003C96C 00000000 */ nop -/* 03D570 8003C970 12C40003 */ beq $s6, $a0, .L8003C980 -/* 03D574 8003C974 00000000 */ nop -/* 03D578 8003C978 0C030C7B */ jal func_800C31EC -/* 03D57C 8003C97C 00000000 */ nop -.L8003C980: -/* 03D580 8003C980 93C2000C */ lbu $v0, 0xc($fp) -/* 03D584 8003C984 00000000 */ nop -/* 03D588 8003C988 12C20004 */ beq $s6, $v0, .L8003C99C -/* 03D58C 8003C98C 8FAF008C */ lw $t7, 0x8c($sp) -/* 03D590 8003C990 0C008500 */ jal func_80021400 -/* 03D594 8003C994 24440080 */ addiu $a0, $v0, 0x80 -/* 03D598 8003C998 8FAF008C */ lw $t7, 0x8c($sp) -.L8003C99C: -/* 03D59C 8003C99C 26730001 */ addiu $s3, $s3, 1 -/* 03D5A0 8003C9A0 026F082A */ slt $at, $s3, $t7 -/* 03D5A4 8003C9A4 1420FFB7 */ bnez $at, .L8003C884 -/* 03D5A8 8003C9A8 26310004 */ addiu $s1, $s1, 4 -.L8003C9AC: -/* 03D5AC 8003C9AC 8FBF004C */ lw $ra, 0x4c($sp) -.L8003C9B0: -/* 03D5B0 8003C9B0 C7B50018 */ lwc1 $f21, 0x18($sp) -/* 03D5B4 8003C9B4 C7B4001C */ lwc1 $f20, 0x1c($sp) -/* 03D5B8 8003C9B8 C7B70020 */ lwc1 $f23, 0x20($sp) -/* 03D5BC 8003C9BC C7B60024 */ lwc1 $f22, 0x24($sp) -/* 03D5C0 8003C9C0 8FB00028 */ lw $s0, 0x28($sp) -/* 03D5C4 8003C9C4 8FB1002C */ lw $s1, 0x2c($sp) -/* 03D5C8 8003C9C8 8FB20030 */ lw $s2, 0x30($sp) -/* 03D5CC 8003C9CC 8FB30034 */ lw $s3, 0x34($sp) -/* 03D5D0 8003C9D0 8FB40038 */ lw $s4, 0x38($sp) -/* 03D5D4 8003C9D4 8FB5003C */ lw $s5, 0x3c($sp) -/* 03D5D8 8003C9D8 8FB60040 */ lw $s6, 0x40($sp) -/* 03D5DC 8003C9DC 8FB70044 */ lw $s7, 0x44($sp) -/* 03D5E0 8003C9E0 8FBE0048 */ lw $fp, 0x48($sp) -/* 03D5E4 8003C9E4 03E00008 */ jr $ra -/* 03D5E8 8003C9E8 27BD0098 */ addiu $sp, $sp, 0x98 - diff --git a/include/level_object_entries.h b/include/level_object_entries.h index 9b8d94cb..7e171f44 100644 --- a/include/level_object_entries.h +++ b/include/level_object_entries.h @@ -248,6 +248,12 @@ typedef struct LevelObjectEntry_Bridge_WhaleRamp { /* 0x00 */ LevelObjectEntryCommon common; /* 0x08 */ u8 unk8; /* 0x09 */ u8 unk9; + /* 0x0A */ u8 unkA; + /* 0x0B */ u8 unkB; + /* 0x0C */ u8 unkC; + /* 0x0D */ u8 unkD; + /* 0x0E */ s8 unkE; + /* 0x0F */ u8 unkF; } LevelObjectEntry_Bridge_WhaleRamp; typedef struct LevelObjectEntry_RampSwitch { diff --git a/include/structs.h b/include/structs.h index 463515cf..df6fec61 100644 --- a/include/structs.h +++ b/include/structs.h @@ -913,12 +913,15 @@ typedef struct Object_Frog { /* 0x10 */ f32 unk10; /* 0x14 */ u8 unk14; /* 0x15 */ u8 unk15; - /* 0x16 */ u8 pad16[3]; - /* 0x19 */ u8 unk19; - /* 0x1A */ u8 pad1A[6]; + /* 0x16 */ s16 unk16; + /* 0x18 */ s8 unk18; + /* 0x19 */ s8 unk19; + /* 0x1A */ s16 unk1A; + /* 0x1C */ f32 unk1C; /* 0x20 */ f32 unk20; /* 0x24 */ f32 unk24; - /* 0x28 */ u8 pad28[8]; + /* 0x28 */ f32 unk28; + /* 0x2C */ f32 unk2C; /* 0x30 */ f32 unk30; } Object_Frog; @@ -1204,7 +1207,7 @@ typedef struct Object_Trigger { /* 0x08 */ f32 unk8; /* 0x0C */ f32 unkC; /* 0x10 */ s32 unk10; - /* 0x14 */ s8 unk14; + /* 0x14 */ u8 unk14; } Object_Trigger; typedef struct Object_Audio { @@ -1254,7 +1257,7 @@ typedef struct Object_PosArrow { } Object_PosArrow; typedef struct Object_Banana { - /* 0x0 */ u8 pad0[4]; + /* 0x0 */ s32 unk0; /* 0x4 */ struct Object *spawner; /* 0x8 */ s8 unk8; /* 0x9 */ s8 unk9; @@ -1635,4 +1638,11 @@ typedef struct ByteColour { u8 blue; } ByteColour; +typedef struct { + u8 r; + u8 g; + u8 b; + u8 a; +} ColourRGBA; + #endif diff --git a/src/camera.c b/src/camera.c index 7371ea3d..9d4b893f 100644 --- a/src/camera.c +++ b/src/camera.c @@ -993,7 +993,7 @@ s32 render_sprite_billboard(Gfx **dlist, Matrix **mtx, Vertex **vertexList, Obje s32 var_s2; result = TRUE; - if (flags & 1) { + if (flags & RENDER_ANTI_ALIASING) { sp5C = D_80120D28[D_80120D20] - obj->segment.trans.x_position; sp58 = D_80120D40[D_80120D20] - obj->segment.trans.y_position; var_f20 = D_80120D58[D_80120D20] - obj->segment.trans.z_position; @@ -1066,12 +1066,12 @@ s32 render_sprite_billboard(Gfx **dlist, Matrix **mtx, Vertex **vertexList, Obje if (D_80120D0C == 0) { var_s2 = ((var_s2 & 0xFF) * arg4->unk0) >> 8; } - flags &= ~1; - if (flags & 4) { - flags |= 1; + flags &= ~RENDER_ANTI_ALIASING; + if (flags & RENDER_SEMI_TRANSPARENT) { + flags |= RENDER_ANTI_ALIASING; } - func_8007BF34(dlist, arg4->unk6 | (flags & 0xF)); - if (!(flags & 0x100)) { + func_8007BF34(dlist, arg4->unk6 | (flags & (RENDER_FOG_ACTIVE | RENDER_SEMI_TRANSPARENT | RENDER_Z_COMPARE | RENDER_ANTI_ALIASING))); + if (!(flags & RENDER_Z_UPDATE)) { gDPSetPrimColor((*dlist)++, 0, 0, 255, 255, 255, 255); } gSPDisplayList((*dlist)++, arg4->unk8[var_s2 + 1]); diff --git a/src/camera.h b/src/camera.h index ff0b5e0b..f8680db6 100644 --- a/src/camera.h +++ b/src/camera.h @@ -168,6 +168,8 @@ void func_80067D3C(Gfx **dlist, UNUSED Matrix **mats); void func_80068BF4(Gfx **arg0, Matrix **arg1, Vertex **arg2, ObjectSegment *arg3, unk80068BF4 *arg4, s32 arg5); s32 render_sprite_billboard(Gfx **dlist, Matrix **mtx, Vertex **vertexList, Object *obj, unk80068514_arg4 *arg4, s32 flags); void func_80069484(Gfx **arg0, Matrix **arg1, ObjectTransform *arg2, f32 arg3, f32 arg4); +void func_80067A3C(Gfx **dlist); +void func_80069A40(Gfx **dlist); // Non Matching void func_80066610(void); diff --git a/src/font.c b/src/font.c index 968ffb7f..e1a14193 100644 --- a/src/font.c +++ b/src/font.c @@ -4,6 +4,7 @@ #include "font.h" #include "menu.h" #include "textures_sprites.h" +#include "camera.h" /************ .data ************/ @@ -67,11 +68,11 @@ OSDevMgr __osPiDevMgr = { s32 gNumberOfFonts; FontData *gFonts; DialogueBoxBackground *gDialogueBoxBackground; -unk8012A7EC *D_8012A7EC; +DialogueTextElement *gDialogueText; s32 gCompactKerning; // Boolean value, seems to be related to X placement of menus on the X Axis? s8 sDialogueBoxCloseTimer; -s32 D_8012A7F8; -s32 D_8012A7FC; +UNUSED s32 D_8012A7F8; +UNUSED s32 D_8012A7FC; /******************************/ @@ -89,12 +90,12 @@ void load_fonts(void) { gFonts = (FontData *) (fontAssetData + 1); for (i = 0; i < gNumberOfFonts; i++) { - gFonts[i].unk28[0] = 0; + gFonts[i].loadedFonts[0] = 0; } gDialogueBoxBackground = (DialogueBoxBackground *) allocate_from_main_pool_safe( - DIALOGUEBOXBACKGROUND_TOTAL_SIZE + unk8012A7EC_TOTAL_SIZE, COLOUR_TAG_YELLOW); - D_8012A7EC = (unk8012A7EC *) &gDialogueBoxBackground[DIALOGUEBOXBACKGROUND_COUNT]; + DIALOGUEBOXBACKGROUND_TOTAL_SIZE + DialogueTextElement_TOTAL_SIZE, COLOUR_TAG_YELLOW); + gDialogueText = (DialogueTextElement *) &gDialogueBoxBackground[DIALOGUEBOXBACKGROUND_COUNT]; for (i = 0; i < DIALOGUEBOXBACKGROUND_COUNT; i++) { gDialogueBoxBackground[i].xpos = 0; @@ -119,55 +120,67 @@ void load_fonts(void) { gDialogueBoxBackground[i].textBGColourA = 0; gDialogueBoxBackground[i].opacity = 255; gDialogueBoxBackground[i].font = FONT_UNK_FF; - gDialogueBoxBackground[i].flags = (i != 0) ? DIALOGUE_BOX_UNK_01 : 0; - gDialogueBoxBackground[i].unk20 = 0; - gDialogueBoxBackground[i].unk22 = 0; + gDialogueBoxBackground[i].flags = (i != 0) ? DIALOGUE_BOX_VERTS : 0; + gDialogueBoxBackground[i].textOffsetX = 0; + gDialogueBoxBackground[i].textOffsetY = 0; gDialogueBoxBackground[i].textBox = 0; } - for (i = 0; i < unk8012A7EC_COUNT; i++) { - D_8012A7EC[i].unk1 = 255; - D_8012A7EC[i].text = NULL; - D_8012A7EC[i].textColourR = 255; - D_8012A7EC[i].textColourG = 255; - D_8012A7EC[i].textColourB = 255; - D_8012A7EC[i].textColourA = 0; - D_8012A7EC[i].textBGColourR = 255; - D_8012A7EC[i].textBGColourG = 255; - D_8012A7EC[i].textBGColourB = 255; - D_8012A7EC[i].textBGColourA = 0; - D_8012A7EC[i].nextBox = NULL; + for (i = 0; i < DIALOGUETEXTELEMENT_COUNT; i++) { + gDialogueText[i].number = 255; + gDialogueText[i].text = NULL; + gDialogueText[i].textColourR = 255; + gDialogueText[i].textColourG = 255; + gDialogueText[i].textColourB = 255; + gDialogueText[i].textColourA = 0; + gDialogueText[i].textBGColourR = 255; + gDialogueText[i].textBGColourG = 255; + gDialogueText[i].textBGColourB = 255; + gDialogueText[i].textBGColourA = 0; + gDialogueText[i].nextBox = NULL; } load_font(ASSET_FONTS_FUNFONT); load_font(ASSET_FONTS_SMALLFONT); gCompactKerning = FALSE; } -void set_kerning(s32 arg0) { - gCompactKerning = arg0; +/** + * Sets text kerning to true or false. + * If false, text displayed will be monospaced. +*/ +void set_kerning(s32 setting) { + gCompactKerning = setting; } +/** + * Load the texture assets of the given font into RAM. + * This is required before any text using this font can be displayed in a scene. +*/ void load_font(s32 fontID) { if (fontID < gNumberOfFonts) { FontData *fontData = &gFonts[fontID]; - fontData->unk28[0]++; - if (fontData->unk28[0] == 1) { + fontData->loadedFonts[0]++; + if (fontData->loadedFonts[0] == 1) { s32 i = 0; - while (i < 32 && fontData->unk40[i] != -1) { - fontData->texturePointers[i] = load_texture(fontData->unk40[i]); + while (i < 32 && fontData->textureID[i] != -1) { + fontData->texturePointers[i] = load_texture(fontData->textureID[i]); i++; } } } } +/** + * Free a font's assets from RAM. + * Highly recommended to do for any existing font when unloading a scene to prevent leaks. +*/ void unload_font(s32 fontID) { if (fontID < gNumberOfFonts) { FontData *fontData = &gFonts[fontID]; - if (fontData->unk28[0] > 0) { - fontData->unk28[0]--; - if (fontData->unk28[0] == 0) { + if (fontData->loadedFonts[0] > 0) { + fontData->loadedFonts[0]--; + if (fontData->loadedFonts[0] == 0) { s32 i = 0; - while (i < 32 && fontData->unk40[i] != -1) { + while (i < 32 && fontData->textureID[i] != -1) { free_texture(fontData->texturePointers[i]); fontData->texturePointers[i] = NULL; i++; @@ -186,23 +199,26 @@ void set_text_font(s32 fontID) { } } -UNUSED TextureHeader *func_800C4318(s32 font, u8 arg1) { +/** + * Returns the address of the loaded font ID if it exists. + * Goes unused. + */ +UNUSED TextureHeader *get_loaded_font(s32 font, u8 index) { FontData *fontData; u8 pointerIndex; if (font < gNumberOfFonts) { fontData = &gFonts[font]; - if (fontData->unk28[0] != 0) { - arg1 -= 32; - pointerIndex = fontData->unk100[arg1].unk0; + if (fontData->loadedFonts[0] != 0) { + index -= 32; + pointerIndex = fontData->letter[index].textureID; if (pointerIndex != 0xFF) { return fontData->texturePointers[pointerIndex]; } return NULL; } } - // @bug: No return statement. The function will return whatever happens to be in v0 - // before this function was called. + //!@bug: No return statement. The function will return whatever happens to be in v0 before this function was called. } /** @@ -226,9 +242,11 @@ void set_text_background_colour(s32 red, s32 green, s32 blue, s32 alpha) { gDialogueBoxBackground[0].textBGColourA = alpha; } -// Unused? -void func_800C4404(Gfx **displayList, char *text, AlignmentFlags alignmentFlags) { - func_800C45A4(displayList, &gDialogueBoxBackground[0], text, alignmentFlags, 1.0f); +/** + * Unused text draw function that just calls the function without any modifications. + */ +UNUSED void draw_text_plain_unused(Gfx **displayList, char *text, AlignmentFlags alignmentFlags) { + render_text_string(displayList, &gDialogueBoxBackground[0], text, alignmentFlags, 1.0f); } /** @@ -238,31 +256,38 @@ void draw_text(Gfx **displayList, s32 xpos, s32 ypos, char *text, AlignmentFlags DialogueBoxBackground *temp = &gDialogueBoxBackground[0]; temp->xpos = (xpos == POS_CENTRED) ? temp->width >> 1 : xpos; temp->ypos = (ypos == POS_CENTRED) ? temp->height >> 1 : ypos; - func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); + render_text_string(displayList, temp, text, alignmentFlags, 1.0f); } -UNUSED void func_800C44C0(Gfx **displayList, s32 dialogueBoxID, char *text, - AlignmentFlags alignmentFlags) { +/** + * Unused text draw function that would draw text in the current dialogue box. + */ +UNUSED void draw_dialogue_text_unused(Gfx **displayList, s32 dialogueBoxID, char *text, AlignmentFlags alignmentFlags) { if (dialogueBoxID >= 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; - func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); + render_text_string(displayList, temp, text, alignmentFlags, 1.0f); } } -UNUSED void func_800C4510(Gfx **displayList, s32 dialogueBoxID, s32 xpos, s32 ypos, char *text, - AlignmentFlags alignmentFlags) { +/** + * Unused text draw function that would draw text in the current dialogue box while overriding position. + */ +UNUSED void draw_dialogue_text_pos_unused(Gfx **displayList, s32 dialogueBoxID, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags) { if (dialogueBoxID >= 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; temp->xpos = (xpos == POS_CENTRED) ? temp->width >> 1 : xpos; temp->ypos = (ypos == POS_CENTRED) ? temp->height >> 1 : ypos; - func_800C45A4(displayList, temp, text, alignmentFlags, 1.0f); + render_text_string(displayList, temp, text, alignmentFlags, 1.0f); } } -void func_800C45A4(Gfx **dlist, DialogueBoxBackground *arg1, char *text, AlignmentFlags alignmentFlags, - f32 arg4) { - s32 temp_f4; - s32 temp_t9; +/** + * Loops through a string, then draws each character onscreen. + * Will also draw a fillrect if text backgrounds are enabled. + */ +void render_text_string(Gfx **dList, DialogueBoxBackground *box, char *text, AlignmentFlags alignmentFlags, f32 scisScale) { + s32 scisOffset; + s32 scisPos; s32 ypos; s32 xpos; TextureHeader *texture; @@ -278,28 +303,28 @@ void func_800C45A4(Gfx **dlist, DialogueBoxBackground *arg1, char *text, Alignme s32 yAlignmentDiff; s32 lastTextureIndex; s32 charIndex; - s32 var_t0; + s32 charSpace; s32 newData; s32 textureIndex; FontData *fontData; s32 newTempX; s32 newTempY; - char curChar; + u8 curChar; xAlignmentDiff = -1; lastTextureIndex = -1; if (text != NULL) { textureLry = 0; - xpos = arg1->xpos; - ypos = arg1->ypos; - fontData = &gFonts[arg1->font]; - gSPDisplayList((*dlist)++, dDialogueBoxBegin); - if (arg1 != gDialogueBoxBackground) { - temp_f4 = (((arg1->y2 - arg1->y1) + 1) / ((f32) 2)) * arg4; - temp_t9 = (arg1->y1 + arg1->y2) >> 1; - gDPSetScissor((*dlist)++, 0, arg1->x1, temp_t9 - temp_f4, arg1->x2, temp_t9 + temp_f4); + xpos = box->xpos; + ypos = box->ypos; + fontData = &gFonts[box->font]; + gSPDisplayList((*dList)++, dDialogueBoxBegin); + if (box != gDialogueBoxBackground) { + scisOffset = (((box->y2 - box->y1) + 1) / (f32) 2) * scisScale; + scisPos = (box->y1 + box->y2) >> 1; + gDPSetScissor((*dList)++, 0, box->x1, scisPos - scisOffset, box->x2, scisPos + scisOffset); } if (alignmentFlags & (HORZ_ALIGN_RIGHT | HORZ_ALIGN_CENTER)) { - xAlignmentDiff = func_800C4DA0(text, xpos, arg1->font); + xAlignmentDiff = get_text_width(text, xpos, box->font); if (alignmentFlags & HORZ_ALIGN_RIGHT) { xpos = (xpos - xAlignmentDiff) + 1; } else { @@ -307,83 +332,79 @@ void func_800C45A4(Gfx **dlist, DialogueBoxBackground *arg1, char *text, Alignme } } if (alignmentFlags & VERT_ALIGN_BOTTOM) { - ypos = (ypos - fontData->unk22) + 1; + ypos = (ypos - fontData->y) + 1; } if (alignmentFlags & VERT_ALIGN_MIDDLE) { - ypos -= fontData->unk22 >> 1; + ypos -= fontData->y >> 1; } - if (arg1->textBGColourA != 0) { - gDPSetEnvColor((*dlist)++, arg1->textBGColourR, arg1->textBGColourG, arg1->textBGColourB, - arg1->textBGColourA); + if (box->textBGColourA != 0) { + gDPSetEnvColor((*dList)++, box->textBGColourR, box->textBGColourG, box->textBGColourB, box->textBGColourA); if (xAlignmentDiff == -1) { - xAlignmentDiff = func_800C4DA0(text, xpos, arg1->font); + xAlignmentDiff = get_text_width(text, xpos, box->font); } newTempX = xpos + xAlignmentDiff - 1; - newTempY = (ypos + fontData->unk22 - 1); - gDkrDmaDisplayList((*dlist)++, OS_K0_TO_PHYSICAL(dDialogueBoxDrawModes[1]), 2); - gDPFillRectangle((*dlist)++, xpos + arg1->x1, ypos + arg1->y1, newTempX + arg1->x1, - newTempY + arg1->y1); - gDPPipeSync((*dlist)++); + newTempY = ypos + fontData->y - 1; + gDkrDmaDisplayList((*dList)++, OS_K0_TO_PHYSICAL(dDialogueBoxDrawModes[1]), 2); + gDPFillRectangle((*dList)++, xpos + box->x1, ypos + box->y1, newTempX + box->x1, newTempY + box->y1); + gDPPipeSync((*dList)++); } - gDPSetPrimColor((*dlist)++, textureLry, 0, 255, 255, 255, arg1->opacity); - gDPSetEnvColor((*dlist)++, arg1->textColourR, arg1->textColourG, arg1->textColourB, - arg1->textColourA); - gDkrDmaDisplayList((*dlist)++, OS_K0_TO_PHYSICAL(dDialogueBoxDrawModes[0]), 2); - gDPPipeSync((*dlist)++); - xpos += arg1->unk20; - ypos += arg1->unk22; - for (charIndex = 0; (text[charIndex] != '\0') && (arg1->y2 >= ypos); - xpos += var_t0, charIndex++) { + gDPSetPrimColor((*dList)++, textureLry, 0, 255, 255, 255, box->opacity); + gDPSetEnvColor((*dList)++, box->textColourR, box->textColourG, box->textColourB, box->textColourA); + gDkrDmaDisplayList((*dList)++, OS_K0_TO_PHYSICAL(dDialogueBoxDrawModes[0]), 2); + gDPPipeSync((*dList)++); + xpos += box->textOffsetX; + ypos += box->textOffsetY; + for (charIndex = 0; (text[charIndex] != '\0') && (box->y2 >= ypos); + xpos += charSpace, charIndex++) { curChar = text[charIndex]; - newData = 0; - var_t0 = 0; - if ((curChar < 0x21) || (curChar >= 0x80)) { + newData = FALSE; + charSpace = 0; + if (curChar <= 0x20 || curChar >= 0x80) { switch (curChar) { case ' ': // Space - xpos += fontData->unk24; + xpos += fontData->charWidth; break; case '\n': // Line Feed - xpos = arg1->unk20; - ypos += fontData->unk22; + xpos = box->textOffsetX; + ypos += fontData->y; break; case '\t': // Tab - xpos += fontData->unk26 - ((xpos - arg1->unk20) % fontData->unk26); + xpos += fontData->charHeight - ((xpos - box->textOffsetX) % fontData->charHeight); break; case '\v': // VT - Vertical Tab - ypos += fontData->unk22; + ypos += fontData->y; break; case '\r': // Carriage Return - xpos = arg1->unk20; + xpos = box->textOffsetX; break; default: - xpos += fontData->unk24; + xpos += fontData->charWidth; break; } } else { curChar -= 0x20; // Convert lower case to upper case ASCII - textureIndex = fontData->unk100[curChar].unk0; + textureIndex = fontData->letter[curChar].textureID; if (textureIndex != 0xFF) { - newData = 1; + newData = TRUE; if (lastTextureIndex != textureIndex) { lastTextureIndex = textureIndex; texture = fontData->texturePointers[textureIndex]; - gDkrDmaDisplayList((*dlist)++, OS_PHYSICAL_TO_K0(texture->cmd), - texture->numberOfCommands); + gDkrDmaDisplayList((*dList)++, OS_PHYSICAL_TO_K0(texture->cmd), texture->numberOfCommands); } - textureWidth = fontData->unk100[curChar].unk2; - textureHeight = fontData->unk100[curChar].unk3; - textureS = fontData->unk100[curChar].unk4; - textureT = fontData->unk100[curChar].unk5; - xAlignmentDiff = fontData->unk100[curChar].unk6; - yAlignmentDiff = fontData->unk100[curChar].unk7; - var_t0 = - (fontData->unk20 == 0) ? (fontData->unk100[curChar].unk1) : (fontData->unk20); - newData = 1; + textureWidth = fontData->letter[curChar].width; + textureHeight = fontData->letter[curChar].height; + textureS = fontData->letter[curChar].s; + textureT = fontData->letter[curChar].t; + xAlignmentDiff = fontData->letter[curChar].lrx; + yAlignmentDiff = fontData->letter[curChar].lry; + charSpace = + (fontData->x == 0) ? (fontData->letter[curChar].ulx) : (fontData->x); + newData = TRUE; } } if (newData) { - textureUlx = ((arg1->x1 + xpos) + textureWidth) * 4; - textureUly = ((arg1->y1 + ypos) + textureHeight) * 4; + textureUlx = ((box->x1 + xpos) + textureWidth) * 4; + textureUly = ((box->y1 + ypos) + textureHeight) * 4; textureLrx = (xAlignmentDiff * 4) + textureUlx; newTempY = (yAlignmentDiff * 4) + textureUly; textureS *= 32; @@ -393,35 +414,37 @@ void func_800C45A4(Gfx **dlist, DialogueBoxBackground *arg1, char *text, Alignme textureUlx = 0; } if ((textureUly <= (0 - 1)) && (newTempY > 0)) { - textureT += (-textureUly) * 8; + textureT += -textureUly * 8; textureUly = 0; } - gSPTextureRectangle((*dlist)++, textureUlx, textureUly, textureLrx, newTempY, 0, - textureS, textureT, 1024, 1024); - if (lastTextureIndex) - ; + gSPTextureRectangle((*dList)++, textureUlx, textureUly, textureLrx, newTempY, 0, textureS, textureT, 1 << 10, 1 << 10); + if (lastTextureIndex) {} // Fakematch } - if (gCompactKerning && var_t0) { - var_t0--; + if (gCompactKerning && charSpace) { + charSpace--; } } - arg1->xpos = xpos - arg1->unk20; - arg1->ypos = ypos - arg1->unk22; - gDPPipeSync((*dlist)++); - if (arg1 != gDialogueBoxBackground) { - func_80067A3C(dlist); + box->xpos = xpos - box->textOffsetX; + box->ypos = ypos - box->textOffsetY; + gDPPipeSync((*dList)++); + if (box != gDialogueBoxBackground) { + func_80067A3C(dList); } - reset_render_settings(dlist); - gDPPipeSync((*dlist)++); + reset_render_settings(dList); + gDPPipeSync((*dList)++); } } -s32 func_800C4DA0(char *text, s32 x, s32 font) { +/** + * Start from the beginning of the line then add to an offset from the starting position. + * Returns the width of the string. + */ +s32 get_text_width(char *text, s32 x, s32 font) { s32 diffX, thisDiffX; FontData *fontData; s32 index; - char ch; + u8 ch; if (text == NULL) { return 0; @@ -434,20 +457,20 @@ s32 func_800C4DA0(char *text, s32 x, s32 font) { for (index = 0; text[index] != '\0'; index++) { thisDiffX = diffX; ch = text[index]; - if ((ch < 0x21) || (ch >= 0x80)) { + if (ch <= 0x20 || ch >= 0x80) { if (ch == '\t') { // Tab character - diffX += fontData->unk26 - (diffX % fontData->unk26); + diffX += fontData->charHeight - (diffX % fontData->charHeight); } else { - diffX += fontData->unk24; + diffX += fontData->charWidth; } } else { ch -= 0x20; // Convert lower case to upper case ASCII - if (fontData->unk100[ch].unk0 != 0xFF) { - if (fontData->unk20 == 0) { - diffX += fontData->unk100[ch].unk1; + if (fontData->letter[ch].textureID != 0xFF) { + if (fontData->x == 0) { + diffX += fontData->letter[ch].ulx; } else { - diffX += fontData->unk20; + diffX += fontData->x; } } } @@ -458,6 +481,9 @@ s32 func_800C4DA0(char *text, s32 x, s32 font) { return diffX - x; } +/** + * Sets the position and size of the current dialogue box. + */ void set_current_dialogue_box_coords(s32 dialogueBoxID, s32 x1, s32 y1, s32 x2, s32 y2) { if (dialogueBoxID > 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; @@ -482,6 +508,9 @@ void set_current_dialogue_box_coords(s32 dialogueBoxID, s32 x1, s32 y1, s32 x2, } } +/** + * Sets the active front of the current dialogue box. + */ void set_dialogue_font(s32 dialogueBoxID, s32 font) { if (dialogueBoxID >= 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; @@ -490,9 +519,10 @@ void set_dialogue_font(s32 dialogueBoxID, s32 font) { } } } - -void set_current_dialogue_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, - s32 alpha) { +/** + * Sets the background colour of the current dialogue box. + */ +void set_current_dialogue_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha) { if (dialogueBoxID > 0 && dialogueBoxID < DIALOGUEBOXBACKGROUND_COUNT) { DialogueBoxBackground *temp = &gDialogueBoxBackground[dialogueBoxID]; temp->backgroundColourR = red; @@ -502,6 +532,9 @@ void set_current_dialogue_background_colour(s32 dialogueBoxID, s32 red, s32 gree } } +/** + * Sets the text colour of the current dialogue box. + */ void set_current_text_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha, s32 opacity) { DialogueBoxBackground *temp; if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { @@ -515,6 +548,9 @@ void set_current_text_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s3 temp->opacity = opacity; } +/** + * Sets text background colour of the current dialogue box. + */ void set_current_text_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha) { DialogueBoxBackground *dialogueBox; if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { @@ -527,39 +563,52 @@ void set_current_text_background_colour(s32 dialogueBoxID, s32 red, s32 green, s dialogueBox->textBGColourA = alpha; } -// Unused? -void func_800C5094(s32 dialogueBoxID, s32 arg1, s32 arg2) { +/** + * Sets the positional text offset of the current dialogue box. + * Goes unused. + */ +UNUSED void set_current_text_offset(s32 dialogueBoxID, s32 x, s32 y) { DialogueBoxBackground *dialogueBox; if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { return; } dialogueBox = &gDialogueBoxBackground[dialogueBoxID]; - dialogueBox->unk20 += arg1; - dialogueBox->unk22 += arg2; + dialogueBox->textOffsetX += x; + dialogueBox->textOffsetY += y; } -// Unused? -void func_800C50D8(s32 dialogueBoxID) { +/** + * Resets the positional text offset of the current dialogue box. + * Goes unused. + */ +UNUSED void reset_current_text_offset(s32 dialogueBoxID) { DialogueBoxBackground *dialogueBox; if (dialogueBoxID <= 0 || dialogueBoxID >= DIALOGUEBOXBACKGROUND_COUNT) { return; } dialogueBox = &gDialogueBoxBackground[dialogueBoxID]; - dialogueBox->unk20 = 0; - dialogueBox->unk22 = 0; + dialogueBox->textOffsetX = 0; + dialogueBox->textOffsetY = 0; } -// Unused? -void func_800C510C(s32 dialogueBoxID, char *text, s32 arg2, s32 arg3) { +/** + * Calls the basic dialogue text draw function passing through the global dialogue box ID. + * Goes unused. + */ +UNUSED void func_800C510C(s32 dialogueBoxID, char *text, s32 number, s32 flags) { render_dialogue_text(dialogueBoxID, gDialogueBoxBackground[dialogueBoxID].xpos, - gDialogueBoxBackground[dialogueBoxID].ypos, text, arg2, arg3); + gDialogueBoxBackground[dialogueBoxID].ypos, text, number, flags); } -void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s32 arg4, s32 flags) { - s32 temp_v0_2; - s32 var_a0; +/** + * Draws the text portion of a dialogue box that's passed through. + * Binds the text to the box, then returns it. + */ +void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s32 number, s32 flags) { + s32 width; + UNUSED s32 var_a0; char buffer[256]; - unk8012A7EC *ret; + DialogueTextElement *ret; DialogueBox *textBox; s32 i; DialogueBoxBackground *bg; @@ -570,9 +619,9 @@ void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s3 return NULL; } - for (i = 0, ret = NULL; (i < 64) && (ret == NULL); i++) { - if (D_8012A7EC[i].unk1 == 0xFF) { - ret = &D_8012A7EC[i]; + for (i = 0, ret = NULL; i < 64 && ret == NULL; i++) { + if (gDialogueText[i].number == 255) { + ret = &gDialogueText[i]; } } @@ -586,20 +635,20 @@ void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s3 } if (bg->font != FONT_UNK_FF) { fontData = &gFonts[bg->font]; - if (flags & 5) { - parse_string_with_number(text, &buffer, arg4); - temp_v0_2 = func_800C4DA0(&buffer, posX, bg->font); - if (flags & 1) { - posX = (posX - temp_v0_2) + 1; + if (flags & (HORZ_ALIGN_CENTER | HORZ_ALIGN_RIGHT)) { + parse_string_with_number(text, buffer, number); + width = get_text_width(buffer, posX, bg->font); + if (flags & HORZ_ALIGN_RIGHT) { + posX = (posX - width) + 1; } else { - posX = posX - (temp_v0_2 >> 1); + posX = posX - (width >> 1); } } - if (flags & 2) { - posY = (posY - fontData->unk22) + 1; + if (flags & VERT_ALIGN_BOTTOM) { + posY = (posY - fontData->y) + 1; } - if (flags & 8) { - posY -= fontData->unk22 >> 1; + if (flags & VERT_ALIGN_MIDDLE) { + posY -= fontData->y >> 1; } } if (bg->textBox == NULL) { @@ -608,19 +657,19 @@ void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s3 } else { textBoxPtr = &bg->textBox; textBox = *textBoxPtr; - while (textBox != NULL && arg4 < textBox->textNum) { + while (textBox != NULL && number < textBox->textNum) { textBoxPtr = &textBox->nextBox; textBox = textBox->nextBox; } - *textBoxPtr = ret; + *textBoxPtr = (DialogueBox *) ret; ret->nextBox = textBox; } - ret->unk1 = arg4; + ret->number = number; ret->text = text; ret->posX = posX; ret->posY = posY; - ret->unkC = 0; - ret->unkE = 0; + ret->offsetX = 0; + ret->offsetY = 0; ret->textColourR = bg->textColourR; ret->textColourG = bg->textColourG; ret->textColourB = bg->textColourB; @@ -640,7 +689,6 @@ void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s3 /** * Unused function that moved a dialogue box ID to the front of the stack. */ - UNUSED void move_dialogue_box_to_front(s32 dialogueBoxID, DialogueBox *dialogueBox) { DialogueBoxBackground *dialogueBoxTemp; DialogueBox *dialogueTextBox; @@ -662,7 +710,6 @@ UNUSED void move_dialogue_box_to_front(s32 dialogueBoxID, DialogueBox *dialogueB /** * Unused function that moved a dialogue box ID to the front of the list. */ - void assign_dialogue_box_id(s32 dialogueBoxID) { DialogueBoxBackground *dialogueBox; DialogueBox *dialogueTextBox, *dialogueTextBoxTemp; @@ -679,30 +726,34 @@ void assign_dialogue_box_id(s32 dialogueBoxID) { } } -UNUSED void func_800C54E8(s32 dialogueBoxID, unk800C54E8 *arg1, s32 arg2, s32 arg3, s32 arg4) { +/** + * Unused function that set the offset of the text in the current dialogue box based on alignment flags. + * Goes unused, as does the whole text offset system. + */ +UNUSED void align_text_in_box(s32 dialogueBoxID, DialogueTextElement *box, s32 x, s32 y, s32 flags) { FontData *fontData; DialogueBoxBackground *dialogueBox; dialogueBox = &gDialogueBoxBackground[dialogueBoxID]; - if (arg1 != NULL) { - if (arg1->unk19 != 0xFF) { - fontData = &gFonts[arg1->unk19]; - if (arg4 != 4) { - switch (arg4) { - case 1: - arg3 *= fontData->unk22; + if (box != NULL) { + if (box->font != FONT_UNK_FF) { + fontData = &gFonts[box->font]; + if (flags != ALIGN_TOP_CENTER) { + switch (flags) { + case ALIGN_TOP_RIGHT: + y *= fontData->y; break; - case 2: - arg3 *= (dialogueBox->height / fontData->unk22) * fontData->unk22; + case ALIGN_BOTTOM_LEFT: + y *= (dialogueBox->height / fontData->y) * fontData->y; break; } - arg1->unkC += arg2; - arg1->unkE += arg3; + box->offsetX += x; + box->offsetY += y; return; } - arg1->unkC = 0; - arg1->unkE = 0; + box->offsetX = 0; + box->offsetY = 0; return; } } @@ -725,27 +776,24 @@ void close_dialogue_box(s32 dialogueBoxID) { /** * Mark the selected dialogue box as an unknown value */ -UNUSED void func_800C564C(s32 dialogueBoxID) { +UNUSED void set_dialogue_box_unused_flag(s32 dialogueBoxID) { gDialogueBoxBackground[dialogueBoxID].flags |= DIALOGUE_BOX_UNUSED_01; } /** - * Mark the selected dialogue box with every flag + * Clear every flag from the selected dialogue box. */ -UNUSED void func_800C5678(s32 dialogueBoxID) { +UNUSED void dialogue_box_clear_flags(s32 dialogueBoxID) { gDialogueBoxBackground[dialogueBoxID].flags &= DIALOGUE_BOX_UNUSED_02; } /** - * Mark the selected dialogue box as + * Mark the selected dialogue box as using triangles to draw. */ -UNUSED void func_800C56A4(s32 dialogueBoxID) { - gDialogueBoxBackground[dialogueBoxID].flags |= DIALOGUE_BOX_UNK_01; +UNUSED void enable_dialogue_box_vertices(s32 dialogueBoxID) { + gDialogueBoxBackground[dialogueBoxID].flags |= DIALOGUE_BOX_VERTS; } -/** - * Mark the selected dialogue box as open with - */ void func_800C56D0(s32 dialogueBoxID) { gDialogueBoxBackground[dialogueBoxID].flags &= DIALOGUE_BOX_UNK_02; } @@ -768,7 +816,7 @@ void render_dialogue_boxes(Gfx **dlist, Matrix **mat, VertexList **verts) { for (i = 1; i < DIALOGUEBOXBACKGROUND_COUNT; i++) { if (gDialogueBoxBackground[i].flags & DIALOGUE_BOX_OPEN) { - if (gDialogueBoxBackground[i].flags & DIALOGUE_BOX_UNK_01) { + if (gDialogueBoxBackground[i].flags & DIALOGUE_BOX_VERTS) { render_dialogue_box(dlist, mat, verts, i); } else { render_dialogue_box(dlist, NULL, NULL, i); @@ -777,6 +825,9 @@ void render_dialogue_boxes(Gfx **dlist, Matrix **mat, VertexList **verts) { } } +/** + * Convert an integer to a string. + */ void s32_to_string(char **outString, s32 number) { u8 digit; s32 i; @@ -855,18 +906,13 @@ void render_dialogue_box(Gfx **dlist, Matrix **mat, VertexList **verts, s32 dial gSPDisplayList((*dlist)++, dDialogueBoxBegin); gDkrDmaDisplayList((*dlist)++, OS_K0_TO_PHYSICAL(&dDialogueBoxDrawModes[1]), 2); gDPSetEnvColor((*dlist)++, 0, 0, 0, 0); - if ((dialogueBox->x2 - dialogueBox->x1) < 10 || (dialogueBox->y2 - dialogueBox->y1) < 10) { - render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y1 - 2, dialogueBox->x2 + 2, - dialogueBox->y2 + 2); + if (dialogueBox->x2 - dialogueBox->x1 < 10 || dialogueBox->y2 - dialogueBox->y1 < 10) { + render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y1 - 2, dialogueBox->x2 + 2, dialogueBox->y2 + 2); } else { - render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y1 + 2, dialogueBox->x1 + 2, - dialogueBox->y2 - 2); - render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y1 - 2, dialogueBox->x2 + 2, - dialogueBox->y1 + 2); - render_fill_rectangle(dlist, dialogueBox->x2 - 2, dialogueBox->y1 + 2, dialogueBox->x2 + 2, - dialogueBox->y2 - 2); - render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y2 - 2, dialogueBox->x2 + 2, - dialogueBox->y2 + 2); + render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y1 + 2, dialogueBox->x1 + 2, dialogueBox->y2 - 2); + render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y1 - 2, dialogueBox->x2 + 2, dialogueBox->y1 + 2); + render_fill_rectangle(dlist, dialogueBox->x2 - 2, dialogueBox->y1 + 2, dialogueBox->x2 + 2, dialogueBox->y2 - 2); + render_fill_rectangle(dlist, dialogueBox->x1 - 2, dialogueBox->y2 - 2, dialogueBox->x2 + 2, dialogueBox->y2 + 2); } gDPPipeSync((*dlist)++); gDPSetEnvColor((*dlist)++, dialogueBox->backgroundColourR, dialogueBox->backgroundColourG, @@ -875,17 +921,15 @@ void render_dialogue_box(Gfx **dlist, Matrix **mat, VertexList **verts, s32 dial // The array determines the width and height of each entry before drawing it. for (i = 0; sDialogueBoxDimensions[i] >= 0; i += 5) { x1 = sDialogueBoxDimensions[i] + dialogueBox->x1; - y1 = (sDialogueBoxDimensions[i + 1]) ? sDialogueBoxDimensions[i + 2] + dialogueBox->y2 - : sDialogueBoxDimensions[i + 2] + dialogueBox->y1; + y1 = (sDialogueBoxDimensions[i + 1]) ? sDialogueBoxDimensions[i + 2] + dialogueBox->y2 : sDialogueBoxDimensions[i + 2] + dialogueBox->y1; x2 = dialogueBox->x2 - sDialogueBoxDimensions[i]; - y2 = (sDialogueBoxDimensions[i + 3]) ? sDialogueBoxDimensions[i + 4] + dialogueBox->y2 - : sDialogueBoxDimensions[i + 4] + dialogueBox->y1; + y2 = (sDialogueBoxDimensions[i + 3]) ? sDialogueBoxDimensions[i + 4] + dialogueBox->y2 : sDialogueBoxDimensions[i + 4] + dialogueBox->y1; render_fill_rectangle(dlist, x1, y1, x2, y2); } gDPPipeSync((*dlist)++); } if (mat != NULL && verts != NULL) { - if (!sDialogueBoxIsOpen) { + if (sDialogueBoxIsOpen == FALSE) { dialogue_open_stub(); sDialogueBoxIsOpen = TRUE; } @@ -908,7 +952,7 @@ void render_dialogue_box(Gfx **dlist, Matrix **mat, VertexList **verts, s32 dial dialogueBox->opacity = dialogueTextBox->opacity; dialogueBox->font = dialogueTextBox->font; parse_string_with_number(dialogueTextBox->text, text, dialogueTextBox->textNum); - func_800C45A4(dlist, dialogueBox, text, 0, 1.0f); + render_text_string(dlist, dialogueBox, text, 0, 1.0f); dialogueTextBox = dialogueTextBox->nextBox; } } diff --git a/src/font.h b/src/font.h index a057f45e..ac7a8e4b 100644 --- a/src/font.h +++ b/src/font.h @@ -27,10 +27,10 @@ typedef enum TextFonts { enum DialogueFlags { DIALOGUE_BOX_UNUSED_01 = 0x0001, - DIALOGUE_BOX_UNK_01 = 0x4000, - DIALOGUE_BOX_CLOSED = 0x7FFF, - DIALOGUE_BOX_OPEN = 0x8000, - DIALOGUE_BOX_UNK_02 = 0xBFFF, + DIALOGUE_BOX_VERTS = 0x4000, + DIALOGUE_BOX_CLOSED = 0x7FFF, + DIALOGUE_BOX_OPEN = 0x8000, + DIALOGUE_BOX_UNK_02 = 0xBFFF, DIALOGUE_BOX_UNUSED_02 = 0xFFFE }; @@ -44,28 +44,28 @@ typedef struct unk800C54E8 { /* Size: 8 bytes */ typedef struct FontCharData { - u8 unk0; // Texture Pointer Index? - u8 unk1; // Upper Left Corner? Maybe only used when FontData->unk20 is 0 for some reason. - u8 unk2; // Font Char Width? - u8 unk3; // Font Char Height? - u8 unk4; // Upper left coordinate for the texture derived from X? - u8 unk5; // Upper left coordinate for the texture derived from Y? - u8 unk6; // Related to the lower right X Coordinate. - u8 unk7; // Related to the lower right Y Coordinate. + u8 textureID; // Texture Pointer Index? + u8 ulx; // Upper Left Corner? Maybe only used when FontData->unk20 is 0 for some reason. + u8 width; // Font Char Width? + u8 height; // Font Char Height? + u8 s; // Upper left coordinate for the texture derived from X? + u8 t; // Upper left coordinate for the texture derived from Y? + u8 lrx; // Related to the lower right X Coordinate. + u8 lry; // Related to the lower right Y Coordinate. } FontCharData; /* Size: 0x400 bytes */ typedef struct FontData { -/* 0x000 */ s32 unk0; -/* 0x004 */ char name[0x1C]; -/* 0x020 */ u16 unk20; // x1? -/* 0x022 */ u16 unk22; // y1? -/* 0x024 */ u16 unk24; // x2? -/* 0x026 */ u16 unk26; // y2? -/* 0x028 */ u8 unk28[24]; -/* 0x040 */ s16 unk40[32]; +/* 0x000 */ s32 unk0; // Unused +/* 0x004 */ char name[28]; +/* 0x020 */ u16 x; +/* 0x022 */ u16 y; +/* 0x024 */ u16 charWidth; +/* 0x026 */ u16 charHeight; +/* 0x028 */ u8 loadedFonts[24]; +/* 0x040 */ s16 textureID[32]; /* 0x080 */ TextureHeader *texturePointers[32]; -/* 0x100 */ FontCharData unk100[96]; +/* 0x100 */ FontCharData letter[96]; } FontData; /* Size: 0x20 bytes */ @@ -93,16 +93,16 @@ typedef struct DialogueBox { /* Size: 0x20 bytes */ -typedef struct unk8012A7EC { +typedef struct DialogueTextElement { /* 0x00 */ u8 unk0; -/* 0x01 */ u8 unk1; +/* 0x01 */ u8 number; /* 0x02 */ u8 unk2; /* 0x03 */ u8 unk3; /* 0x04 */ char *text; // Pointer to the text array /* 0x08 */ s16 posX; /* 0x0A */ s16 posY; -/* 0x0C */ s16 unkC; -/* 0x0E */ s16 unkE; +/* 0x0C */ s16 offsetX; +/* 0x0E */ s16 offsetY; /* 0x10 */ u8 textColourR; /* 0x11 */ u8 textColourG; /* 0x12 */ u8 textColourB; @@ -115,14 +115,7 @@ typedef struct unk8012A7EC { /* 0x19 */ u8 font; /* 0x1A */ u16 flags; /* 0x1C */ DialogueBox *nextBox; -} unk8012A7EC; - -typedef struct { - u8 r; - u8 g; - u8 b; - u8 a; -} ColourRGBA; +} DialogueTextElement; /* Size: 0x28 bytes */ // Dialogue Box background @@ -151,52 +144,46 @@ typedef struct DialogueBoxBackground { u8 opacity; u8 font; u16 flags; - s16 unk20; // Functionally Unused - s16 unk22; // Functionally Unused + s16 textOffsetX; // Functionally Unused + s16 textOffsetY; // Functionally Unused DialogueBox *textBox; } DialogueBoxBackground; #define DIALOGUEBOXBACKGROUND_COUNT 8 -#define unk8012A7EC_COUNT 64 +#define DIALOGUETEXTELEMENT_COUNT 64 #define DIALOGUEBOXBACKGROUND_TOTAL_SIZE (sizeof(DialogueBoxBackground) * DIALOGUEBOXBACKGROUND_COUNT) -#define unk8012A7EC_TOTAL_SIZE (sizeof(unk8012A7EC) * unk8012A7EC_COUNT) +#define DialogueTextElement_TOTAL_SIZE (sizeof(DialogueTextElement) * DIALOGUETEXTELEMENT_COUNT) void load_fonts(void); -void set_kerning(s32 arg0); -void set_text_font(s32 arg0); +void set_kerning(s32 setting); +void set_text_font(s32 fontID); void set_text_colour(s32 red, s32 green, s32 blue, s32 alpha, s32 opacity); void set_text_background_colour(s32 red, s32 green, s32 blue, s32 alpha); -void func_800C4404(Gfx** displayList, char *text, AlignmentFlags alignmentFlags); void draw_text(Gfx** displayList, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags); -void func_800C44C0(Gfx** displayList, s32 dialogueBoxID, char *text, AlignmentFlags alignmentFlags); -void func_800C4510(Gfx** displayList, s32 dialogueBoxID, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags); +void draw_dialogue_text_unused(Gfx **displayList, s32 dialogueBoxID, char *text, AlignmentFlags alignmentFlags); +void draw_dialogue_text_pos_unused(Gfx **displayList, s32 dialogueBoxID, s32 xpos, s32 ypos, char *text, AlignmentFlags alignmentFlags); void set_current_dialogue_box_coords(s32 dialogueBoxID, s32 x1, s32 y1, s32 x2, s32 y2); void set_dialogue_font(s32 dialogueBoxID, s32 font); void set_current_dialogue_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha); void set_current_text_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha, s32 opacity); -void set_current_text_background_colour(s32 dialogueBoxID, s32 arg1, s32 arg2, s32 arg3, s32 arg4); -void func_800C5094(s32 dialogueBoxID, s32 arg1, s32 arg2); -void func_800C50D8(s32 dialogueBoxID); -void func_800C510C(s32 dialogueBoxID, char *text, s32 arg2, s32 arg3); -void move_dialogue_box_to_front(s32 arg0, DialogueBox *arg1); -void assign_dialogue_box_id(s32 arg0); -void func_800C54E8(s32 arg0, unk800C54E8 *arg1, s32 arg2, s32 arg3, s32 arg4); +void set_current_text_background_colour(s32 dialogueBoxID, s32 red, s32 green, s32 blue, s32 alpha); +void move_dialogue_box_to_front(s32 dialogueBoxID, DialogueBox *box); +void assign_dialogue_box_id(s32 dialogueBoxID); void open_dialogue_box(s32 dialogueBoxID); void close_dialogue_box(s32 dialogueBoxID); -UNUSED void func_800C564C(s32 dialogueBoxID); -UNUSED void func_800C5678(s32 dialogueBoxID); -UNUSED void func_800C56A4(s32 dialogueBoxID); +UNUSED void set_dialogue_box_unused_flag(s32 dialogueBoxID); +UNUSED void dialogue_box_clear_flags(s32 dialogueBoxID); +UNUSED void enable_dialogue_box_vertices(s32 dialogueBoxID); void func_800C56D0(s32 dialogueBoxID); void render_dialogue_boxes(Gfx **dlist, Matrix **mat, VertexList **verts); void render_fill_rectangle(Gfx **dlist, s32 ulx, s32 uly, s32 lrx, s32 lry); void render_dialogue_box(Gfx **dlist, Matrix **mat, VertexList **verts, s32 dialogueBoxID); void parse_string_with_number(char *input, char *output, s32 number); void s32_to_string(char **outString, s32 number); - -void load_font(s32 fontID); //Non Matching -void unload_font(s32 arg0); //Non Matching -void func_800C45A4(Gfx **dlist, DialogueBoxBackground *arg1, char *text, AlignmentFlags alignmentFlags, f32 arg4); //Non Matching -s32 func_800C4DA0(char *text, s32 x, s32 font); //Non Matching -void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s32 arg4, s32 arg5); //Non Matching +void load_font(s32 fontID); +void unload_font(s32 fontID); +void render_text_string(Gfx **dlist, DialogueBoxBackground *box, char *text, AlignmentFlags alignmentFlags, f32 scisScale); +s32 get_text_width(char *text, s32 x, s32 font); +void *render_dialogue_text(s32 dialogueBoxID, s32 posX, s32 posY, char *text, s32 number, s32 flags); #endif diff --git a/src/game.c b/src/game.c index 1ec0f99e..38ea4e58 100644 --- a/src/game.c +++ b/src/game.c @@ -641,7 +641,7 @@ UNUSED u8 get_total_level_header_count(void) { /** * Returns the name of the level from the passed ID */ -u8 *get_level_name(MapId levelId) { +char *get_level_name(MapId levelId) { u8 *levelName; u8 numberOfNullPointers = 0; diff --git a/src/game.h b/src/game.h index a8f7dfb0..605c1cfa 100644 --- a/src/game.h +++ b/src/game.h @@ -95,7 +95,7 @@ MapId func_8006BD88(void); u8 get_current_level_race_type(void); LevelHeader *get_current_level_header(void); u8 get_total_level_header_count(void); -u8 *get_level_name(MapId levelId); +char *get_level_name(MapId levelId); void func_8006BEFC(void); void func_8006BFC8(s8 *arg0); void func_8006C164(void); diff --git a/src/main.c b/src/main.c index b006a59c..56aad644 100644 --- a/src/main.c +++ b/src/main.c @@ -9,34 +9,48 @@ /************ .bss ************/ u64 *gThread1StackPointer; // stack pointer for thread 1 -u64 gThread3Stack[1024]; +u64 gThread3Stack[0x400]; u64 *gThread3StackPointer; // stack pointer for thread 3 OSThread gThread1; // OSThread for thread 1 OSThread gThread3; // OSThread for thread 3 -u64 D_8011FAC0[512]; //Thread1 stack? +UNUSED u64 gUnusedThreadStack[0x200]; //Thread1 stack? /******************************/ +/** + * Where it all begins. + * Once the boot procedure is finished in IPL3, this function is run. + * It kicks things off by initialising thread1, which serves as the top level +*/ void main(void) { osInitialize(); osCreateThread(&gThread1, 1, &thread1_main, 0, &gThread1StackPointer, OS_PRIORITY_IDLE); osStartThread(&gThread1); } +/** + * Initialise the crash handler thread, then initialise the main game thread. + * Reset the start and endpoint of the game thread stack, then set thread priority to zero, effectively + * stopping this thread, as it's no longer needed. +*/ void thread1_main(UNUSED void *unused) { thread0_create(); osCreateThread(&gThread3, 3, &thread3_main, 0, &gThread3StackPointer, 10); - gThread3Stack[1024] = 0; + gThread3Stack[0x400] = 0; gThread3Stack[0] = 0; osStartThread(&gThread3); osSetThreadPri(NULL, 0); while (1) {} } +/** + * Increments the start and endpoint of the stack. + * They should have an equal value, so if they don't, that triggers a printout saying a stack wraparound has occured. +*/ void thread3_verify_stack(void) { - gThread3Stack[1024]++; + gThread3Stack[0x400]++; gThread3Stack[0]++; - if ((gThread3Stack[1024] != gThread3Stack[0])) { + if ((gThread3Stack[0x400] != gThread3Stack[0])) { rmonPrintf("WARNING: Stack overflow/underflow!!!\n"); } } diff --git a/src/menu.c b/src/menu.c index 92011af4..421cc2f6 100644 --- a/src/menu.c +++ b/src/menu.c @@ -6142,8 +6142,8 @@ void render_track_select_setup_ui(s32 updateRate) { } set_current_dialogue_background_colour(7, 255, sp84, 0, sMenuGuiOpacity); if ((D_801263E0 == -1) || ((D_801263E0 == 2) && (D_801269C8 == 4) && is_adventure_two_unlocked())) { - s4 = func_800C4DA0(gMenuText[ASSET_MENU_TEXT_ADVENTURE2], 0, 0); // "ADVENTURE" - temp = func_800C4DA0(gMenuText[ASSET_MENU_TEXT_ADVENTURETWO2], 0, 0); // "ADVENTURE TWO" + s4 = get_text_width(gMenuText[ASSET_MENU_TEXT_ADVENTURE2], 0, 0); // "ADVENTURE" + temp = get_text_width(gMenuText[ASSET_MENU_TEXT_ADVENTURETWO2], 0, 0); // "ADVENTURE TWO" if (s4 < temp) { s4 = temp; } @@ -6294,7 +6294,7 @@ void render_track_select_setup_ui(s32 updateRate) { } if (sp74) { - s32 temp_v0_12 = func_800C4DA0(gMenuText[ASSET_MENU_TEXT_NUMBEROFRACERS], 0, 0); // "NUMBER OF RACERS" + s32 temp_v0_12 = get_text_width(gMenuText[ASSET_MENU_TEXT_NUMBEROFRACERS], 0, 0); // "NUMBER OF RACERS" if ((gTwoPlayerRacerCountMenu.width - 0xC) < temp_v0_12) { s4 = temp_v0_12 + 0xC; } else { @@ -6764,7 +6764,7 @@ void func_80093D40(UNUSED s32 updateRate) { s32 alpha; for (i = 0, xPos = SCREEN_WIDTH_HALF; i < gMenuOptionCap; i++) { - x = func_800C4DA0(gMenuOptionText[i], 0, 0) + 8; + x = get_text_width(gMenuOptionText[i], 0, 0) + 8; if (xPos < x) { xPos = x; } diff --git a/src/object_functions.c b/src/object_functions.c index 1eb089ac..2e2d9cb6 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -2985,7 +2985,61 @@ void obj_init_trigger(Object *obj, LevelObjectEntry_Trigger *entry) { } -GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_trigger.s") +void obj_loop_trigger(Object *obj, UNUSED s32 updateRate) { + s32 i; + s32 curRaceType; + s32 numRacers; + LevelObjectEntry_Trigger *triggerEntry; + Object *racerObj; + Object **racers; + Object_Trigger *trigger; + Object_Racer *racer; + Settings *settings; + f32 diffX; + f32 diffY; + f32 diffZ; + f32 radiusF; + s32 flags; + f32 distance; + s32 courseFlags; + + triggerEntry = (LevelObjectEntry_Trigger *) obj->segment.unk3C_a.level_entry; + trigger = (Object_Trigger *) obj->unk64; + settings = get_settings(); + courseFlags = settings->courseFlagsPtr[settings->courseId]; + curRaceType = get_current_level_race_type(); + if (triggerEntry->unk9 >= 0) { + flags = 0x10000 << triggerEntry->unk9; + if (obj->unk4C->unk13 < trigger->unk10) { + if (((u8) curRaceType != RACETYPE_HUBWORLD) || !(courseFlags & flags)) { + radiusF = trigger->unk10; + racers = get_racer_objects(&numRacers); + for (i = 0; i < numRacers; i++) { + racerObj = racers[i]; + racer = (Object_Racer*)racerObj->unk64; + if ((!(trigger->unk14 & 1) && racer->playerIndex == PLAYER_COMPUTER) || (!(trigger->unk14 & 2) && racer->playerIndex != PLAYER_COMPUTER)) { + diffX = racerObj->segment.trans.x_position - obj->segment.trans.x_position; + diffY = racerObj->segment.trans.y_position - obj->segment.trans.y_position; + diffZ = racerObj->segment.trans.z_position - obj->segment.trans.z_position; + distance = sqrtf((diffX * diffX) + (diffY * diffY) + (diffZ * diffZ)); + if (distance < radiusF) { + distance = (trigger->unk0 * racerObj->segment.trans.x_position) + (trigger->unk8 * racerObj->segment.trans.z_position) + trigger->unkC; + if (distance < 0.0f) { + settings->courseFlagsPtr[settings->courseId] |= flags; + if (triggerEntry->unkB != 0xFF) { + func_800C31EC(triggerEntry->unkB); + } + if (triggerEntry->unkC != 0xFF) { + func_80021400(triggerEntry->unkC + 0x80); + } + } + } + } + } + } + } + } +} void obj_init_bridge_whaleramp(Object *obj, LevelObjectEntry_Bridge_WhaleRamp *entry) { Object_Bridge_WhaleRamp *temp = &obj->unk64->bridge_whale_ramp; @@ -3002,7 +3056,126 @@ void obj_init_bridge_whaleramp(Object *obj, LevelObjectEntry_Bridge_WhaleRamp *e } } -GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_bridge_whaleramp.s") +/** + * Moving bridge loop behaviour. + * In Whale Bay and Boulder Canyon, there exist two bridge objects you can use. + * This function makes the whale oscillate and move upwards when a player gets near. + * For the boulder canyon bridge, it raises and plays a bell sound while it's set to be raised. +*/ +void obj_loop_bridge_whaleramp(Object *obj, s32 updateRate) { + Object *racerObj; + UNUSED ObjectTransform *temp_v0_4; + f32 temp_f2; + Object_Bridge_WhaleRamp *whaleRamp; + LevelObjectEntry_Bridge_WhaleRamp *entry; + f32 updateRateF; + s32 var_v0; + f32 sp50; + f32 sp4C; + f32 sp48; + f32 sp44; + f32 sp40; + f32 sp3C; + Object_Racer *racer; + + whaleRamp = (Object_Bridge_WhaleRamp *) obj->unk64; + entry = (LevelObjectEntry_Bridge_WhaleRamp *) obj->segment.unk3C_a.level_entry; + updateRateF = updateRate; + + if (osTvType == TV_TYPE_PAL) { + updateRateF *= 1.2; + } + + if (entry->unkB != 3) { + if (obj->unk78 != 0) { + temp_f2 = (2.0 * (f32) entry->unkE); + if (temp_f2 > 0.0f) { + if (obj->segment.trans.y_position < (whaleRamp->unk0 + temp_f2)) { + obj->segment.trans.y_position += (updateRateF * 2); + } + } else { + if ((whaleRamp->unk0 + temp_f2) < obj->segment.trans.y_position) { + obj->segment.trans.y_position -= (updateRateF * 2); + } + } + } else if (entry->unkC > 0) { + if (whaleRamp->unk0 < obj->segment.trans.y_position) { + obj->segment.trans.y_position -= (updateRateF * 2); + } + } else { + if (obj->segment.trans.y_position < whaleRamp->unk0) { + obj->segment.trans.y_position += (updateRateF * 2); + } + } + } else if (obj->unk78 != 0) { + if (obj->segment.trans.x_rotation >= -0x12FF) { + obj->segment.trans.x_rotation -= (updateRate * 0x2D); + } + if (whaleRamp->unk4 == 0) { + whaleRamp = whaleRamp; + func_8001E36C(entry->unkA, &sp50, &sp4C, &sp48); + func_80009558(SOUND_DRAWBRIDGE_BELL, sp50, sp4C, sp48, 1, &whaleRamp->unk4); + } + } else { + if (obj->segment.trans.x_rotation < 0) { + obj->segment.trans.x_rotation = obj->segment.trans.x_rotation + (updateRate * 0x28); + if (whaleRamp->unk4 == 0) { + whaleRamp = whaleRamp; + func_8001E36C(entry->unkA, &sp44, &sp40, &sp3C); + func_80009558(SOUND_DRAWBRIDGE_BELL, sp44, sp40, sp3C, 1, &whaleRamp->unk4); + } + } else { + obj->segment.trans.x_rotation = 0; + if (whaleRamp->unk4 != 0) { + func_800096F8(whaleRamp->unk4); + } + } + } + + switch (entry->unkB) { + case 0: + obj->unk78 = 0; + if (obj->unk4C->unk13 < entry->unkC) { + obj->unk78 = 1; + } + break; + case 2: + obj->unk78 = 1; + racerObj = get_racer_object(0); + if (racerObj != NULL) { + racer = (Object_Racer *) racerObj->unk64; + switch(racer->unk1D6) { + default: + var_v0 = 1; + break; + case 1: + var_v0 = 2; + break; + case 2: + var_v0 = 4; + break; + } + if (entry->unkF & var_v0) { + obj->unk78 = NULL; + } + } + break; + default: + if (func_8001E2EC(entry->unkA) != 0) { + obj->unk78 = (entry->unkD * 2); + } + if (obj->unk78 > 0) { + obj->unk78 -= updateRate; + } else { + obj->unk78 = 0; + } + break; + } + + obj->unk4C->unk13 = 255; + obj->unk4C->unk0 = NULL; + obj->unk4C->unk14 &= 0xFFF7; +} void obj_init_rampswitch(Object *obj, LevelObjectEntry_RampSwitch *entry) { obj->unk4C->unk14 = 2; @@ -3062,7 +3235,69 @@ void obj_init_treasuresucker(Object *obj, LevelObjectEntry_TreasureSucker *entry obj->action = (entry->unk8 - 1) & 3; } -GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_treasuresucker.s") +/** + * Smokey's castle treasure box loop function. + * When the player approaches carrying bananas, it spawns visual objects to enter it, then takes them from the player. +*/ +void obj_loop_treasuresucker(Object *obj, s32 updateRate) { + Object *racerObj; + f32 scale; + Object_Racer *racer; + f32 diffX; + f32 diffY; + f32 diffZ; + Object *newObj; + LevelObjectEntryCommon spawnObj; + s32 doSpawnObj; + + racerObj = get_racer_object(obj->unk78); + if (racerObj != NULL) { + racer = (Object_Racer *) racerObj->unk64; + doSpawnObj = FALSE; + if (racer->bananas != 0 && obj->unk7C.word == 0) { + diffX = obj->segment.trans.x_position - racerObj->segment.trans.x_position; + diffY = obj->segment.trans.y_position - racerObj->segment.trans.y_position; + diffZ = obj->segment.trans.z_position - racerObj->segment.trans.z_position; + diffX = (diffX * diffX) + (diffY * diffY) + (diffZ * diffZ); // Required to match. + if (diffX < 225 * 225) { + obj->unk7C.word = 8; + doSpawnObj = TRUE; + } + } + if (obj->unk7C.word > 0) { + obj->unk7C.word -= updateRate; + if (obj->unk7C.word <= 0) { + if (racer->bananas > 0) { + racer->bananas--; + if (racer->bananas != 0) { + doSpawnObj = TRUE; + } + obj->unk7C.word = 8; + } else { + obj->unk7C.word = 0; + } + } + } + if (doSpawnObj) { + spawnObj.x = racerObj->segment.trans.x_position; + spawnObj.y = (s16) racerObj->segment.trans.y_position + 10; + spawnObj.z = racerObj->segment.trans.z_position; + spawnObj.size = 8; + spawnObj.objectID = BHV_SNOWBALL_2; + newObj = spawn_object(&spawnObj, 1); + if (newObj != NULL) { + newObj->segment.unk3C_a.level_entry = NULL; + newObj->segment.y_velocity = 10.0f; + scale = (newObj->segment.y_velocity * 2) / 0.5; + newObj->segment.x_velocity = (obj->segment.trans.x_position - racerObj->segment.trans.x_position) / scale; + newObj->segment.z_velocity = (obj->segment.trans.z_position - racerObj->segment.trans.z_position) / scale; + newObj->unk7C.word = (s32) racer; + newObj->unk78 = scale; + } + } + } +} + void obj_init_flycoin(UNUSED Object *obj, UNUSED LevelObjectEntry_FlyCoin *entry) { } @@ -3137,7 +3372,139 @@ void obj_init_banana(Object *obj, UNUSED LevelObjectEntry_Banana *entry) { } } -GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_banana.s") +/** + * Banana loop behaviour. + * When dropped by a player, will have initial velocity to give some spread. + * When touched by a player, will increase their banana count. +*/ +void obj_loop_banana(Object *obj, s32 updateRate) { + Object *racerObj; // sp6C + Object_Racer *racer; // sp68 + f32 tempPos[3]; // 5C, 60, 64 + f32 sp58; + f32 updateRateF; // sp54 + f32 velX; + f32 velZ; + s32 sp48; + s32 sp44; + s8 sp43; + Object_Banana *banana; // sp3C + Object_78_Banana *obj78; + s32 racerPrevUnk180; // sp34 + + updateRateF = updateRate; + if (osTvType == TV_TYPE_PAL) { + updateRateF *= 1.2; + } + banana = (Object_Banana *) obj->unk64; + obj->segment.unk18 += updateRate * 8; + obj78 = (Object_78_Banana *) &obj->unk78; + if (obj->unk78 == -1) { + obj->segment.trans.unk6 |= 0x4000; + obj78->unk6 -= updateRate; + obj->unk74 = 1; + func_800AFC3C(obj, updateRate); + if (obj78->unk6 <= 0) { + gParticlePtrList_addObject(obj); + } + } else { + if (banana->unk8 > 0) { + banana->unk8 -= updateRate; + } else { + banana->unk8 = 0; + banana->unk0 = 0; + } + if (obj78->unk0 == 1) { + tempPos[0] = obj->segment.trans.x_position + (obj->segment.x_velocity * updateRateF); + tempPos[1] = obj->segment.trans.y_position + (obj->segment.y_velocity * updateRateF); + tempPos[2] = obj->segment.trans.z_position + (obj->segment.z_velocity * updateRateF); + sp58 = 8.0f; + func_80031130(1, &obj->segment.trans.x_position, tempPos, -1); + sp48 = 0; + func_80031600(&obj->segment.trans.x_position, tempPos, &sp58, &sp43, 1, &sp48); + obj->segment.x_velocity = (tempPos[0] - obj->segment.trans.x_position) / updateRateF; + obj->segment.y_velocity = (tempPos[1] - obj->segment.trans.y_position) / updateRateF; + obj->segment.z_velocity = (tempPos[2] - obj->segment.trans.z_position) / updateRateF; + obj->segment.trans.x_position = tempPos[0]; + obj->segment.trans.y_position = tempPos[1]; + obj->segment.trans.z_position = tempPos[2]; + if (banana->unk9 != 2) { + obj->segment.y_velocity -= 1.0; + obj->segment.x_velocity *= 0.95; + obj->segment.z_velocity *= 0.95; + } else { + obj->segment.x_velocity = 0.0f; + obj->segment.y_velocity = 0.0f; + obj->segment.z_velocity = 0.0f; + } + velX = obj->segment.x_velocity; + if (velX < 0.0) { + velX = -velX; + } + velZ = obj->segment.z_velocity; + if (velZ < 0.0) { + velZ = -velZ; + } + if (sp48 > 0 && velX < 0.5 && velZ < 0.5) { + obj78->unk0 = 0; + } + sp58 = -10000.0f; + if (func_8002B9BC(obj, &sp58, NULL, 1) != 0 && obj->segment.trans.y_position < sp58) { + obj78->unk0 = 0; + obj->segment.trans.y_position = sp58; + } + } + sp44 = 70; + if (banana->unk9 != 2) { + sp44 = 55; + } + + if (obj78->unk4 > 0) { + obj78->unk4 -= updateRate; + } else { + obj78->unk4 = 0; + } + if (obj->unk4C->unk13 < 0x78) { + if (get_current_level_race_type() == RACETYPE_CHALLENGE_BANANAS) { + racerObj = obj->unk4C->unk0; + if (racerObj != NULL && racerObj->segment.header->behaviorId == BHV_RACER) { + racer = (Object_Racer *) racerObj->unk64; + if (racer->playerIndex == PLAYER_COMPUTER) { + sp44 += 30; + } + } + } + } + if (obj->unk4C->unk13 < sp44 && obj78->unk4 == 0) { + racerObj = obj->unk4C->unk0; + if (racerObj != NULL && racerObj->segment.header->behaviorId == BHV_RACER) { + racer = (Object_Racer *) racerObj->unk64; + if ((get_current_level_race_type() != RACETYPE_CHALLENGE_BANANAS) || racer->bananas < 2) { + racerPrevUnk180 = racer->unk180; + func_80009558( SOUND_SELECT, racerObj->segment.trans.x_position, racerObj->segment.trans.y_position, racerObj->segment.trans.z_position, 4, &racer->unk180); + if (racerPrevUnk180 != 0) { + func_800096F8(racerPrevUnk180); + } + if ((racer->playerIndex != PLAYER_COMPUTER) && racer->bananas == 9) { + play_sound_spatial(racer->characterId + SOUND_UNK_7B, racerObj->segment.trans.x_position, racerObj->segment.trans.y_position, racerObj->segment.trans.z_position, NULL + ); + } + racer->bananas++; + if (banana->spawner != NULL) { + banana->spawner->unk7C.word = 1; + } + if (get_number_of_active_players() > TWO_PLAYERS) { + gParticlePtrList_addObject(obj); + } else { + obj78->unk0 = -1; + obj->unk74 = 1; + func_800AFC3C(obj, updateRate); + } + } + } + } + } +} void obj_init_silvercoin_adv2(Object *obj, UNUSED LevelObjectEntry_SilverCoinAdv2 *entry) { obj->unk4C->unk14 = 2; @@ -3753,7 +4120,165 @@ void obj_init_frog(Object *obj, LevelObjectEntry_Frog *entry) { } } -GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_frog.s") +/** + * Overworld frog loop function. + * Hops, skips, jumps around. Can be flattened by players. + * If a Drumstick frog exists after beating all 4 trophy races, he can be squashed and will be unlocked as a playable character. +*/ +void obj_loop_frog(Object *obj, s32 updateRate) { + UNUSED s32 pad0; + s32 i; + s32 sp104; + s32 var_v1; + UNUSED u8 pad[0x90]; + f32 sp6C; + UNUSED u8 pad2[0xC]; + Object_Frog *frog; + f32 diffX; + f32 diffY; + f32 diffZ; + f32 cosine; + f32 updateRateF; + Object *racerObj; + + updateRateF = updateRate; + if (osTvType == TV_TYPE_PAL) { + updateRateF *= 1.2; + } + frog = (Object_Frog *) obj->unk64; + switch (frog->unk14) { + case 0: + sp104 = FALSE; + if (frog->unk19 > 0) { + frog->unk19 -= updateRate; + } + if (func_80016DE8(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 96.0f, 1, (unk80042178 *) &racerObj) > 0) { + diffX = obj->segment.trans.x_position - racerObj->segment.trans.x_position; + diffY = obj->segment.trans.y_position - racerObj->segment.trans.y_position; + diffZ = obj->segment.trans.z_position - racerObj->segment.trans.z_position; + if (frog->unk19 <= 0 && (diffX * diffX) + (diffY * diffY) + (diffZ * diffZ) < 40.0f * 40.0f) { + if (frog->unk15 != 0) { + func_80009558(SOUND_VOICE_DRUMSTICK_POSITIVE2, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); + set_eeprom_settings_value(2); + set_magic_code_flags(CHEAT_CONTROL_DRUMSTICK); + func_8006D8A4(); + gParticlePtrList_addObject(obj); + break; + } else { + frog->unk14 = 2; + func_80009558(SOUND_SPLAT, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); + } + } else { + frog->unk1C = 72.0f; + if (frog->unk15 != 0) { + frog->unk1C *= 1.34f; + } + frog->unk1A = arctan2_f(-diffX, -diffZ) + 0x8000; + sp104 = TRUE; + } + } else { + frog->unk16 -= updateRate; + if (frog->unk16 < 0) { + sp104 = TRUE; + frog->unk1C = get_random_number_from_range(0x28, 0x48); + frog->unk1A = get_random_number_from_range(-0x4000, 0x4000) + obj->segment.trans.y_rotation; + } + } + if (sp104) { + for(i = 0, var_v1 = FALSE; i < 4 && var_v1 == FALSE; i++) { + frog->unk28 = sins_f(frog->unk1A) * frog->unk1C; + frog->unk2C = coss_f(frog->unk1A) * -frog->unk1C; + diffX = (obj->segment.trans.x_position + frog->unk28) - frog->unk0; + diffZ = (obj->segment.trans.z_position + frog->unk2C) - frog->unk8; + if ((diffX * diffX) + (diffZ * diffZ) < frog->unk10) { + var_v1 = TRUE; + } else { + frog->unk1A += 0x4000; + } + } + if (var_v1 == FALSE) { + diffX = frog->unk0 - obj->segment.trans.x_position; + diffZ = frog->unk8 - obj->segment.trans.z_position; + frog->unk1A = arctan2_f(diffX, diffZ); + } + if (frog->unk15 != 0) { + func_80009558(SOUND_VOICE_DRUMSTICK_POSITIVE6, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); + } else { + func_80009558(SOUND_RIBBIT, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); + } + frog->unk14 = 1; + frog->unk20 = obj->segment.trans.x_position; + frog->unk24 = obj->segment.trans.z_position; + frog->unk18 = 32; + obj->segment.trans.y_rotation = -frog->unk1A; + } + default: + break; + case 1: + frog->unk18 -= updateRate; + if (frog->unk19 > 0) { + frog->unk19 -= updateRate; + } + if (frog->unk18 < 0) { + frog->unk14 = 0; + frog->unk16 = get_random_number_from_range(0, 300); + frog->unk18 = 0; + } + obj->segment.unk18 = ((32 - frog->unk18) << 3) / 3; + cosine = (coss_f(frog->unk18 << 10) + 1.0f) * 0.5f; + obj->segment.trans.x_position = frog->unk20; + obj->segment.trans.z_position = frog->unk24; + obj->segment.x_velocity = frog->unk28 * cosine; + obj->segment.z_velocity = frog->unk2C * cosine; + func_80011560(); + func_80011570(obj, obj->segment.x_velocity, 0.0f, obj->segment.z_velocity); + if (func_8002BAB0(obj->segment.unk2C.half.lower, obj->segment.trans.x_position, obj->segment.trans.z_position, &sp6C) != 0) { + obj->segment.trans.y_position = 0.0f; + func_80011560(); + func_80011570(obj, 0.0f, sp6C, 0.0f); + } + if (frog->unk19 <= 0 && (frog->unk18 < 6 || frog->unk18 >= 27)) { + if (func_80016DE8(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 40.0f, 0, (unk80042178 *) &racerObj) != 0) { + if (frog->unk15 != 0) { + func_80009558(SOUND_VOICE_DRUMSTICK_POSITIVE2, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); + set_eeprom_settings_value(2); + set_magic_code_flags(CHEAT_CONTROL_DRUMSTICK); + func_8006D8A4(); + gParticlePtrList_addObject(obj); + } else { + frog->unk14 = 2; + func_80009558(SOUND_SPLAT, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); + } + } + } + break; + case 2: + frog->unk30 -= 0.15f * updateRateF; + if (frog->unk30 < 0.05f) { + frog->unk30 = 0.05f; + frog->unk14 = 3; + frog->unk16 = 40; + } + break; + case 3: + frog->unk16 -= updateRate; + if (frog->unk16 < 0) { + frog->unk14 = 4; + func_80009558(SOUND_PLOP2, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, NULL); + } + break; + case 4: + if (frog->unk30 > 1.0f) { + frog->unk30 = 1.0f; + frog->unk14 = 0; + frog->unk16 = 0; + frog->unk19 = 60; + } else { + frog->unk30 += 0.15f * updateRateF; + } + break; + } +} void obj_loop_pigrocketeer(Object *obj, s32 speed) { Object *someObj; @@ -3785,7 +4310,62 @@ void obj_init_levelname(Object *obj, LevelObjectEntry_LevelName *entry) { func_800C56D0(4); } -GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_levelname.s") +/** + * Overworld level name behaviour. + * Placed at a level entrance, when a player gets near, display the level name on screen. +*/ +void obj_loop_levelname(Object *obj, s32 updateRate) { + s32 textWidth; + s32 x1; + s32 y1; + s32 x2; + s32 y2; + UNUSED s32 pad[5]; + char *levelName; + Object *racerObj; + f32 diffX; + f32 diffZ; + Object_LevelName_78 *temp_s0; + + racerObj = get_racer_object_by_port(0); + if (racerObj != NULL) { + diffX = obj->segment.trans.x_position - racerObj->segment.trans.x_position; + diffZ = obj->segment.trans.z_position - racerObj->segment.trans.z_position; + temp_s0 = (Object_LevelName_78 *) &obj->unk78; + if ((diffX * diffX) + (diffZ * diffZ) < temp_s0->radius) { + temp_s0->unk6 += updateRate * 16; + if (temp_s0->unk6 > 256) { + temp_s0->unk6 = 256; + } + } else { + temp_s0->unk6 -= updateRate * 16; + if (temp_s0->unk6 < 0) { + temp_s0->unk6 = 0; + } + } + if (temp_s0->unk6 > 0) { + levelName = get_level_name(temp_s0->unk4); + textWidth = (get_text_width(levelName, 0, 0) + 24) >> 1; + x1 = SCREEN_WIDTH_HALF - textWidth; + x2 = textWidth + SCREEN_WIDTH_HALF; + if (osTvType == TV_TYPE_PAL) { + y1 = SCREEN_HEIGHT - 16; + y2 = SCREEN_HEIGHT - 16 + 24; + } else { + y1 = SCREEN_HEIGHT - 38; + y2 = SCREEN_HEIGHT - 38 + 20; + } + assign_dialogue_box_id(4); + set_current_dialogue_box_coords(4, x1, y1, x2, y2); + set_current_dialogue_background_colour(4, 128, 64, 128, (temp_s0->unk6 * SCREEN_WIDTH_HALF) >> 8); + set_current_text_background_colour(4, 0, 0, 0, 0); + set_dialogue_font(4, 0); + set_current_text_colour(4, 255, 255, 255, 0, (temp_s0->unk6 * 255) >> 8); + render_dialogue_text(4, (x2 - x1) >> 1, ((y2 - y1) >> 1) + 2, levelName, 1, 12); + open_dialogue_box(4); + } + } +} void obj_loop_wizghosts(Object *obj, s32 speed) { func_8001F460(obj, speed, obj); diff --git a/src/object_functions.h b/src/object_functions.h index 104b66b3..448ff62a 100644 --- a/src/object_functions.h +++ b/src/object_functions.h @@ -225,6 +225,18 @@ typedef struct unk80041A90_MidiFade { f32 unk14; } unk80041A90_MidiFade; +typedef struct Object_78_Banana { + s32 unk0; + s16 unk4; + s16 unk6; +} Object_78_Banana; + +typedef struct Object_LevelName_78 { + f32 radius; + s16 unk4; + s16 unk6; +} Object_LevelName_78; + // Unsure about the signed/unsigned with these arrays. extern u16 D_800DC980[20]; extern u16 D_800DC9A8[20]; @@ -369,6 +381,18 @@ void obj_loop_flycoin(Object *obj, s32 updateRate); void func_8003FC44(f32 x, f32 y, f32 z, s32 objectID, s32 arg4, f32 scale, s32 arg6); void obj_loop_stopwatchman(Object *obj, s32 updateRate); void obj_loop_parkwarden(Object *obj, s32 updateRate); +void obj_loop_bridge_whaleramp(Object *obj, s32 updateRate); +void obj_loop_frog(Object *obj, s32 updateRate); +void obj_loop_levelname(Object *obj, s32 updateRate); +void obj_loop_banana(Object *obj, s32 updateRate); +void obj_loop_collectegg(Object *obj, s32 updateRate); +void obj_loop_weather(Object *obj, s32 updateRate); +void obj_init_groundzipper(Object *arg0, LevelObjectEntry_GroundZipper *entry); +void obj_init_goldenballoon(Object *obj, LevelObjectEntry_GoldenBalloon *entry); +void obj_init_midifadepoint(Object *obj, LevelObjectEntry_MidiFadePoint *entry); +void obj_loop_trigger(Object *obj, s32 updateRate); +void obj_init_weather(Object *obj, LevelObjectEntry_Weather *entry); +void obj_loop_treasuresucker(Object *obj, s32 updateRate); //Non Matching void obj_loop_lavaspurt(Object *obj, s32 speed); @@ -376,6 +400,38 @@ void obj_loop_animator(Object *obj, s32 speed); void obj_loop_vehicleanim(Object *obj, s32 speed); void obj_loop_snowball(Object *obj, s32 speed); void obj_loop_goldenballoon(Object *obj, s32 speed); +void obj_loop_fireball_octoweapon(Object *obj, s32 updateRate); +void obj_loop_groundzipper(Object *obj, s32 updateRate); +void obj_loop_lasergun(Object *obj, s32 updateRate); +void obj_loop_laserbolt(Object *obj, s32 updateRate); +void obj_loop_posarrow(Object *obj, s32 updateRate); +void obj_loop_effectbox(Object *obj, s32 updateRate); +void obj_loop_bananacreator(Object *obj, s32 updateRate); +void obj_loop_butterfly(Object *obj, s32 updateRate); +void obj_loop_airzippers_waterzippers(Object *obj, s32 updateRate); +void obj_loop_char_select(Object *obj, s32 updateRate); +void obj_loop_log(Object *obj, s32 updateRate); +void obj_loop_texscroll(Object *obj, s32 updateRate); +void obj_loop_weaponballoon(Object *obj, s32 updateRate); +void obj_loop_door(Object *obj, s32 updateRate); +void obj_loop_bonus(Object *obj, s32 updateRate); +void obj_loop_modechange(Object *obj, s32 updateRate); +void obj_loop_exit(Object *obj, s32 updateRate); +void obj_loop_fish(Object *obj, s32 updateRate); +void obj_loop_scenery(Object *obj, s32 updateRate); +void obj_init_midifade(Object *obj, LevelObjectEntry_MidiFade *entry); +void obj_init_butterfly(); +void obj_init_trigger(Object *obj, LevelObjectEntry_Trigger *entry); +void obj_init_animation(); +void obj_init_lensflareswitch(); +void obj_init_lensflare(Object *obj, LevelObjectEntry_LensFlare *entry); +void obj_init_weaponballoon(Object *obj, LevelObjectEntry_WeaponBalloon *entry); +void obj_init_door(Object *obj, LevelObjectEntry_Door *entry); +void obj_init_audio(Object *obj, LevelObjectEntry_Audio *entry); +void obj_init_bombexplosion(Object *obj, LevelObjectEntry_BombExplosion *entry); +void obj_init_fish(Object *obj, LevelObjectEntry_Fish *entry); +void obj_init_scenery(Object *obj, LevelObjectEntry_Scenery *entry); +void calc_env_mapping_for_object(ObjectModel *, s16, s16, s16); s32 func_8001C524(f32 x, f32 y, f32 z, s32 arg3); s32 func_8001CC48(s32, s32, s32); diff --git a/src/objects.c b/src/objects.c index fc9148fc..757853cb 100644 --- a/src/objects.c +++ b/src/objects.c @@ -21,6 +21,7 @@ #include "math_util.h" #include "camera.h" #include "waves.h" +#include "object_functions.h" /************ .data ************/ @@ -336,39 +337,39 @@ void func_8000BF8C(void) { s32 i; func_8001D258(0.67f, 0.33f, 0, -0x2000, 0); - D_8011AE68 = (s32 *)new_sub_memory_pool(0x15800, 0x200); - gParticlePtrList = (Object **)allocate_from_main_pool_safe(0x320, COLOUR_TAG_BLUE); - D_8011AE6C = (s32 *)allocate_from_main_pool_safe(0x50, COLOUR_TAG_BLUE); - D_8011AE74 = (Object **)allocate_from_main_pool_safe(0x200, COLOUR_TAG_BLUE); - D_8011AECC = (unknown8011AECC *)allocate_from_main_pool_safe(0xE10, COLOUR_TAG_BLUE); - D_8011AEDC = (u32 *)allocate_from_main_pool_safe(0x50, COLOUR_TAG_BLUE); - gRacers = (Object *)allocate_from_main_pool_safe(0x28, COLOUR_TAG_BLUE); - gRacersByPort = (s32 *)allocate_from_main_pool_safe(0x28, COLOUR_TAG_BLUE); - gRacersByPosition = (Object **)allocate_from_main_pool_safe(0x28, COLOUR_TAG_BLUE); - D_8011AF04 = (u32 *)allocate_from_main_pool_safe(0x200, COLOUR_TAG_BLUE); - D_8011ADCC = (s8 *)allocate_from_main_pool_safe(8, COLOUR_TAG_BLUE); - D_8011AFF4 = (unk800179D0 *)allocate_from_main_pool_safe(0x400, COLOUR_TAG_BLUE); - gAssetsLvlObjTranslationTable = (s16 *)load_asset_section_from_rom(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE); + D_8011AE68 = (s32 *) new_sub_memory_pool(0x15800, 0x200); + gParticlePtrList = (Object **) allocate_from_main_pool_safe(0x320, COLOUR_TAG_BLUE); + D_8011AE6C = (s32 *) allocate_from_main_pool_safe(0x50, COLOUR_TAG_BLUE); + D_8011AE74 = (Object **) allocate_from_main_pool_safe(0x200, COLOUR_TAG_BLUE); + D_8011AECC = (unknown8011AECC *) allocate_from_main_pool_safe(0xE10, COLOUR_TAG_BLUE); + D_8011AEDC = allocate_from_main_pool_safe(0x50, COLOUR_TAG_BLUE); + gRacers = allocate_from_main_pool_safe(0x28, COLOUR_TAG_BLUE); + gRacersByPort = (Object **) allocate_from_main_pool_safe(0x28, COLOUR_TAG_BLUE); + gRacersByPosition = (Object **) allocate_from_main_pool_safe(0x28, COLOUR_TAG_BLUE); + D_8011AF04 = allocate_from_main_pool_safe(0x200, COLOUR_TAG_BLUE); + D_8011ADCC = allocate_from_main_pool_safe(8, COLOUR_TAG_BLUE); + D_8011AFF4 = (unk800179D0 *) allocate_from_main_pool_safe(0x400, COLOUR_TAG_BLUE); + gAssetsLvlObjTranslationTable = (s16 *) load_asset_section_from_rom(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE); gAssetsLvlObjTranslationTableLength = (get_size_of_asset_section(ASSET_LEVEL_OBJECT_TRANSLATION_TABLE) >> 1) - 1; while (gAssetsLvlObjTranslationTable[gAssetsLvlObjTranslationTableLength] == 0) { gAssetsLvlObjTranslationTableLength--; } D_8011AD58 = (s32 *)allocate_from_main_pool_safe(0x800, COLOUR_TAG_BLUE); - gAssetsObjectHeadersTable = load_asset_section_from_rom(ASSET_OBJECT_HEADERS_TABLE); + gAssetsObjectHeadersTable = (s32 *) load_asset_section_from_rom(ASSET_OBJECT_HEADERS_TABLE); gAssetsObjectHeadersTableLength = 0; while (-1 != gAssetsObjectHeadersTable[gAssetsObjectHeadersTableLength]) { gAssetsObjectHeadersTableLength++; } gAssetsObjectHeadersTableLength--; - D_8011AE48 = (s32 *)allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength * 4, COLOUR_TAG_WHITE); - D_8011AE4C = (u8 *)allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength, COLOUR_TAG_WHITE); + D_8011AE48 = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength * 4, COLOUR_TAG_WHITE); + D_8011AE4C = allocate_from_main_pool_safe(gAssetsObjectHeadersTableLength, COLOUR_TAG_WHITE); for (i = 0; i < gAssetsObjectHeadersTableLength; i++) { (*D_8011AE4C)[i] = 0; } - gAssetsMiscSection = load_asset_section_from_rom(ASSET_MISC); - gAssetsMiscTable = load_asset_section_from_rom(ASSET_MISC_TABLE); + gAssetsMiscSection = (s32 *) load_asset_section_from_rom(ASSET_MISC); + gAssetsMiscTable = (s32 *) load_asset_section_from_rom(ASSET_MISC_TABLE); gAssetsMiscTableLength = 0; while (-1 != gAssetsMiscTable[gAssetsMiscTableLength]) { gAssetsMiscTableLength++; @@ -385,7 +386,7 @@ void func_8000BF8C(void) { #ifdef NON_EQUIVALENT // Decrypts cheats -void decrypt_magic_codes(u8 *data, s32 length) { +void decrypt_magic_codes(s32 *data, s32 length) { u8 sp3; u8 sp2; u8 sp1; @@ -477,8 +478,8 @@ void func_8000C604(void) { objCount = 0; D_8011AE60 = 0; func_8000C460(); - free_from_memory_pool(D_8011AEB0[0]); - free_from_memory_pool(D_8011AEB0[1]); + free_from_memory_pool((void *) D_8011AEB0[0]); + free_from_memory_pool((void *) D_8011AEB0[1]); } GLOBAL_ASM("asm/non_matchings/objects/func_8000C718.s") @@ -487,7 +488,7 @@ void func_8000C844(s32 arg0) { if ((*D_8011AE4C)[arg0] != 0) { (*D_8011AE4C)[arg0]--; if ((*D_8011AE4C)[arg0] == 0) { - free_from_memory_pool((*D_8011AE48)[arg0]); + free_from_memory_pool((void *) (*D_8011AE48)[arg0]); } } } @@ -708,7 +709,7 @@ s32 func_8000E558(Object *arg0){ if (arg0->segment.unk3C_a.level_entry == NULL) { return TRUE; } - temp_v0 = arg0->segment.unk3C_a.level_entry; + temp_v0 = (s32) arg0->segment.unk3C_a.level_entry; new_var2 = D_8011AE98[0]; if ((temp_v0 >= new_var2) && (((D_8011AEA0 * 8) + new_var2) >= temp_v0)) { return FALSE; @@ -769,7 +770,7 @@ void func_8000F758(Object *obj) { GLOBAL_ASM("asm/non_matchings/objects/func_8000F7EC.s") GLOBAL_ASM("asm/non_matchings/objects/func_8000F99C.s") -s32 func_8000FAC4(Object *obj, s32 arg1) { +s32 func_8000FAC4(Object *obj, Object_6C *arg1) { ObjHeaderParticleEntry *particleDataEntry; s32 i; @@ -777,9 +778,9 @@ s32 func_8000FAC4(Object *obj, s32 arg1) { particleDataEntry = obj->segment.header->objectParticles; for(i = 0; i < obj->segment.header->unk57; i++) { if ((particleDataEntry[i].upper & 0xFFFF0000) == 0xFFFF0000) { - func_800AF1E0(&obj->unk6C[i], (particleDataEntry[i].upper >> 8) & 0xFF, particleDataEntry[i].upper & 0xFF); + func_800AF1E0((unk800AF29C *) &obj->unk6C[i], (particleDataEntry[i].upper >> 8) & 0xFF, particleDataEntry[i].upper & 0xFF); } else { - func_800AF29C(&obj->unk6C[i], + func_800AF29C((unk800AF29C *) &obj->unk6C[i], (particleDataEntry[i].upper >> 0x18) & 0xFF, (particleDataEntry[i].upper >> 0x10) & 0xFF, particleDataEntry[i].upper & 0xFFFF, @@ -799,7 +800,7 @@ s32 func_8000FBCC(Object *arg0, Object_60 *arg1) { arg1->unk4 = NULL; objHeader = ((ObjectSegment*) arg0)->header; if (objHeader->unk32) { - arg1->unk4 = load_texture((s32) ((ObjectHeader *) objHeader)->unk34); + arg1->unk4 = (s32 *) load_texture((s32) ((ObjectHeader *) objHeader)->unk34); objHeader = ((ObjectSegment*)arg0)->header; } ((Object_50*) arg1)->unk0 = (f32) objHeader->unk4; @@ -832,13 +833,13 @@ s32 func_8000FC6C(struct_8000FC6C_3 *arg0, struct_8000FC6C *arg1) { s32 func_8000FD20(unk8000FD20 *arg0, unk8000FD20_2 *arg1) { arg0->unk4C = arg1; arg1->unk13 = 0xFF; - return 0x28; + return 40; } -s32 func_8000FD34(unk8000FD34 *arg0, s32 arg1) { +s32 func_8000FD34(unk8000FD34 *arg0, unk_80016BC4_2 *arg1) { arg0->unk5C = arg1; func_80016BC4(arg0); - return 0x10C; + return 268; } GLOBAL_ASM("asm/non_matchings/objects/func_8000FD54.s") @@ -880,7 +881,7 @@ void gParticlePtrList_flush(void) { D_8011AE7C--; } objCount--; - if (0); + if (0) {} // Fakematch for (j = search_indx; j < objCount; j++) { gObjPtrList[j] = gObjPtrList[j + 1]; } @@ -1127,15 +1128,16 @@ void render_3d_billboard(Object *obj) { } if (obj->behaviorId == BHV_BOMB_EXPLOSION) { + //!@bug Never true, because the type is u8. if (obj->segment.unk38.half.lower > 255) { obj->segment.unk38.half.lower = obj->unk7C.word & 0xFF; } else { - obj->segment.unk38.half.lower = ((obj->segment.unk38.half.lower * (obj->unk7C.word & 0xFF)) >> 8); + obj->segment.unk38.half.lower = (obj->segment.unk38.half.lower * (obj->unk7C.word & 0xFF)) >> 8; } } alpha = obj->segment.unk38.half.lower; - if (alpha >= 256) { + if (alpha > 255) { alpha = 255; } @@ -1145,7 +1147,7 @@ void render_3d_billboard(Object *obj) { } if (alpha < 255) { - flags |= 4; + flags |= RENDER_SEMI_TRANSPARENT; hasPrimCol = TRUE; } if ((obj->behaviorId == 5) && (obj->segment.trans.scale == 6.0f)) { @@ -1259,7 +1261,7 @@ void func_80012E28(Object *this) { f32 tmp_f0; f32 temp; - if (this->behaviorId == 1) { + if (this->behaviorId == BHV_RACER) { sp_20 = &this->unk64->racer; this->segment.trans.y_rotation += sp_20->y_rotation_offset; @@ -1283,13 +1285,13 @@ void func_80012E28(Object *this) { } } -void func_80012F30(Object *arg0) { - if (arg0->behaviorId == 1) { - Object_Racer *object_64 = &arg0->unk64->racer; - arg0->segment.trans.y_rotation -= object_64->y_rotation_offset; - arg0->segment.trans.x_rotation -= object_64->x_rotation_offset; - arg0->segment.trans.z_rotation -= object_64->z_rotation_offset; - arg0->segment.trans.y_position -= D_8011ADD0; +void func_80012F30(Object *obj) { + if (obj->behaviorId == BHV_RACER) { + Object_Racer *racer = &obj->unk64->racer; + obj->segment.trans.y_rotation -= racer->y_rotation_offset; + obj->segment.trans.x_rotation -= racer->x_rotation_offset; + obj->segment.trans.z_rotation -= racer->z_rotation_offset; + obj->segment.trans.y_position -= D_8011ADD0; } } @@ -1311,7 +1313,7 @@ void render_object(Object *this) { } void func_80013548(Object *obj) { - if ((obj->segment.trans.unk6 & 0x8000) == 0 && obj->segment.header->behaviorId == 1) { + if (!(obj->segment.trans.unk6 & 0x8000) && obj->segment.header->behaviorId == BHV_RACER) { obj->segment.trans.x_position -= obj->unk64->racer.carBobX; obj->segment.trans.y_position -= obj->unk64->racer.carBobY; obj->segment.trans.z_position -= obj->unk64->racer.carBobZ; @@ -1374,7 +1376,7 @@ void render_racer_shield(Gfx **dList, Matrix **mtx, VertexList **vtxList, Object shear *= scale; gfxData = D_800DC75C->unk68[shieldType]; mdl = gfxData->objModel; - D_800DC75C->unk44 = gfxData->unk4[gfxData->unk1F]; + D_800DC75C->unk44 = (Vertex *) gfxData->unk4[gfxData->unk1F]; gDPSetEnvColor(gObjectCurrDisplayList++, 255, 255, 255, 0); if (racer->shieldTimer < 64) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, racer->shieldTimer * 4); @@ -1406,7 +1408,7 @@ void render_racer_magnet(Gfx **dList, Matrix **mtx, VertexList **vtxList, Object s32 var_t0; s32 opacity; f32 shear; - s32 pad; + UNUSED s32 pad; racer = (Object_Racer *) obj->unk64; var_t0 = racer->unk2 * 4; @@ -1438,7 +1440,7 @@ void render_racer_magnet(Gfx **dList, Matrix **mtx, VertexList **vtxList, Object D_800DC764->segment.trans.z_rotation = 0; gfxData = *D_800DC764->unk68; mdl = gfxData->objModel; - D_800DC764->unk44 = gfxData->unk4[gfxData->unk1F]; + D_800DC764->unk44 = (Vertex *) gfxData->unk4[gfxData->unk1F]; opacity = (((D_8011B078[(var_t0 * 4) + 1] * 8) & 0x7F) + 0x80); func_8007F594(&gObjectCurrDisplayList, 2, 0xFFFFFF00 | opacity, D_800DC84C[racer->unk184]); func_80068FA8(&gObjectCurrDisplayList, &gObjectCurrMatrix, D_800DC764, obj, shear); @@ -1469,7 +1471,8 @@ void func_800142B8(void) { for (j = 0; j < currObj->segment.header->numberOfModelIds; j++) { curr_68 = currObj->unk68[j]; if (curr_68 != NULL && curr_68->unk20 > 0) { - curr_68->unk20 = curr_68->unk20-- & 0x03; + curr_68->unk20 &= 0x03; + curr_68->unk20--; } } } @@ -1499,7 +1502,7 @@ void func_80016BC4(unk8000FD34 *arg0) { var_s0 = 0; if (var_v1 > 0) { do { - temp_v0 = *(arg0->unk68 + var_s0); + temp_v0 = (s32 *) *(arg0->unk68 + var_s0); if (temp_v0 != NULL) { func_8006017C(*temp_v0); var_v1 = arg0->unk40->unk55; @@ -1536,8 +1539,8 @@ unk800179D0 *func_80017978(s32 arg0, s32 arg1) { for(i = 0; i < 16; i++) { entry = &D_8011AFF4[i]; if (entry->unk0 == 0) { - entry->unk04 = arg0; - entry->unk08 = arg1; + entry->unk04 = (u32 *) arg0; + entry->unk08 = (u32 *) arg1; entry->unk0 = 2; return entry; } @@ -1701,26 +1704,26 @@ void func_8001B790(void) { gHasGhostToSave = 0; } -Object *func_8001B7A8(Object *arg0, s32 arg1, f32 *arg2) { - s32 temp; - Object *temp_v1; - arg1 = (arg0->obj.obj8001B7A8.unk112 - arg1) - 1; - if ((arg1 < 0) || (arg1 >= gNumRacers)) { +Object *func_8001B7A8(Object *racer, s32 position, f32 *distance) { + UNUSED s32 temp; + Object *tempRacer; + position = (racer->obj.obj8001B7A8.unk112 - position) - 1; + if (position < 0 || position >= gNumRacers) { return NULL; } - temp_v1 = gRacersByPosition[arg1]; - if (temp_v1 == NULL) { + tempRacer = gRacersByPosition[position]; + if (tempRacer == NULL) { return NULL; } - *arg2 = func_8001B834(arg0, temp_v1->unk64); - return temp_v1; + *distance = func_8001B834((Object_Racer *) racer, (Object_Racer *) tempRacer->unk64); + return tempRacer; } f32 func_8001B834(Object_Racer *racer1, Object_Racer *racer2) { Object_Racer *temp_racer; f32 var_f2; s32 r1_ccp; - s32 temp_lo; + UNUSED s32 temp_lo; s32 var_v1; s32 r1_lcp; @@ -1861,7 +1864,7 @@ s32 func_8001C48C(Object *obj) { s32 i; for(i = 0; i < 128; i++) { if ((*D_8011AF04)[i] == 0) { - (*D_8011AF04)[i] = obj; + (*D_8011AF04)[i] = (u32) obj; return i; } } @@ -1869,7 +1872,7 @@ s32 func_8001C48C(Object *obj) { } s32 func_8001C524(f32 xDiff, f32 yDiff, f32 zDiff, s32 someFlag) { - f32 pad[6]; + UNUSED f32 pad[6]; s32 sp64; f32 x; f32 len; @@ -2039,8 +2042,8 @@ void func_8001E36C(s32 arg0, f32 *arg1, f32 *arg2, f32 *arg3) { current_obj = gObjPtrList[i]; if (current_obj != NULL - && (current_obj->segment.trans.unk6 & 0x8000) == 0 - && current_obj->behaviorId == 39 + && !(current_obj->segment.trans.unk6 & 0x8000) + && current_obj->behaviorId == BHV_RAMP_SWITCH && current_obj->action == arg0) { *arg1 = current_obj->segment.trans.x_position; *arg2 = current_obj->segment.trans.y_position; @@ -2303,260 +2306,260 @@ void run_object_init_func(Object *obj, void *entry, s32 arg2) { obj->behaviorId = obj->segment.header->behaviorId; switch (obj->behaviorId) { case BHV_RACER: - obj_init_racer(obj, (LevelObjectEntry_Racer *)entry); + obj_init_racer(obj, (LevelObjectEntry_CharacterFlag *) entry); break; case BHV_SCENERY: - obj_init_scenery(obj, (LevelObjectEntry_Scenery*)entry); + obj_init_scenery(obj, (LevelObjectEntry_Scenery*) entry); break; case BHV_FISH: - obj_init_fish(obj, (LevelObjectEntry_Fish *)entry); + obj_init_fish(obj, (LevelObjectEntry_Fish *) entry); break; case BHV_ANIMATOR: - obj_init_animator(obj, (LevelObjectEntry_Animator *)entry, arg2); + obj_init_animator(obj, (LevelObjectEntry_Animator *) entry, arg2); break; case BHV_SMOKE: - obj_init_smoke(obj, (LevelObjectEntry_Smoke *)entry); + obj_init_smoke(obj, (LevelObjectEntry_Smoke *) entry); break; case BHV_UNK_19: - obj_init_unknown25(obj, (LevelObjectEntry_Unknown25 *)entry); + obj_init_unknown25(obj, (LevelObjectEntry_Unknown25 *) entry); break; case BHV_BOMB_EXPLOSION: - obj_init_bombexplosion(obj, (LevelObjectEntry_BombExplosion *)entry); + obj_init_bombexplosion(obj, (LevelObjectEntry_BombExplosion *) entry); break; case BHV_EXIT: - obj_init_exit(obj, (LevelObjectEntry_Exit *)entry); + obj_init_exit(obj, (LevelObjectEntry_Exit *) entry); break; case BHV_AUDIO: - obj_init_audio(obj, (LevelObjectEntry_Audio *)entry); + obj_init_audio(obj, (LevelObjectEntry_Audio *) entry); break; case BHV_AUDIO_LINE: case BHV_AUDIO_LINE_2: - obj_init_audioline(obj, (LevelObjectEntry_AudioLine *)entry); + obj_init_audioline(obj, (LevelObjectEntry_AudioLine *) entry); break; case BHV_AUDIO_REVERB: - obj_init_audioreverb(obj, (LevelObjectEntry_AudioReverb *)entry); + obj_init_audioreverb(obj, (LevelObjectEntry_AudioReverb *) entry); break; case BHV_CAMERA_CONTROL: - obj_init_cameracontrol(obj, (LevelObjectEntry_CameraControl *)entry); + obj_init_cameracontrol(obj, (LevelObjectEntry_CameraControl *) entry); break; case BHV_SETUP_POINT: - obj_init_setuppoint(obj, (LevelObjectEntry_SetupPoint *)entry); + obj_init_setuppoint(obj, (LevelObjectEntry_SetupPoint *) entry); break; case BHV_DINO_WHALE: - obj_init_dino_whale(obj, (LevelObjectEntry_Dino_Whale *)entry); + obj_init_dino_whale(obj, (LevelObjectEntry_Dino_Whale *) entry); break; case BHV_CHECKPOINT: - obj_init_checkpoint(obj, (LevelObjectEntry_Checkpoint *)entry, arg2); + obj_init_checkpoint(obj, (LevelObjectEntry_Checkpoint *) entry, arg2); break; case BHV_MODECHANGE: - obj_init_modechange(obj, (LevelObjectEntry_ModeChange *)entry); + obj_init_modechange(obj, (LevelObjectEntry_ModeChange *) entry); break; case BHV_BONUS: - obj_init_bonus(obj, (LevelObjectEntry_Bonus *)entry); + obj_init_bonus(obj, (LevelObjectEntry_Bonus *) entry); break; case BHV_DOOR: - obj_init_door(obj, (LevelObjectEntry_Door *)entry); + obj_init_door(obj, (LevelObjectEntry_Door *) entry); break; case BHV_TT_DOOR: - obj_init_ttdoor(obj, (LevelObjectEntry_TTDoor *)entry); + obj_init_ttdoor(obj, (LevelObjectEntry_TTDoor *) entry); break; case BHV_FOG_CHANGER: - obj_init_fogchanger(obj, (LevelObjectEntry_FogChanger *)entry); + obj_init_fogchanger(obj, (LevelObjectEntry_FogChanger *) entry); break; case BHV_AINODE: - obj_init_ainode(obj, (LevelObjectEntry_AiNode *)entry); + obj_init_ainode(obj, (LevelObjectEntry_AiNode *) entry); break; case BHV_WEAPON_BALLOON: - obj_init_weaponballoon(obj, (LevelObjectEntry_WeaponBalloon *)entry); + obj_init_weaponballoon(obj, (LevelObjectEntry_WeaponBalloon *) entry); break; case BHV_BALLOON_POP: - obj_init_wballoonpop(obj, (LevelObjectEntry_WBalloonPop *)entry); + obj_init_wballoonpop(obj, (LevelObjectEntry_WBalloonPop *) entry); break; case BHV_WEAPON: case BHV_WEAPON_2: - obj_init_weapon(obj, (LevelObjectEntry_Weapon *)entry); + obj_init_weapon(obj, (LevelObjectEntry_Weapon *) entry); break; case BHV_SKY_CONTROL: - obj_init_skycontrol(obj, (LevelObjectEntry_SkyControl *)entry); + obj_init_skycontrol(obj, (LevelObjectEntry_SkyControl *) entry); break; case BHV_TORCH_MIST: - obj_init_torch_mist(obj, (LevelObjectEntry_Torch_Mist *)entry); + obj_init_torch_mist(obj, (LevelObjectEntry_Torch_Mist *) entry); break; case BHV_TEXTURE_SCROLL: - obj_init_texscroll(obj, (LevelObjectEntry_TexScroll *)entry, arg2); + obj_init_texscroll(obj, (LevelObjectEntry_TexScroll *) entry, arg2); break; case BHV_STOPWATCH_MAN: - obj_init_stopwatchman(obj, (LevelObjectEntry_StopWatchMan *)entry); + obj_init_stopwatchman(obj, (LevelObjectEntry_StopWatchMan *) entry); break; case BHV_BANANA: - obj_init_banana(obj, (LevelObjectEntry_Banana *)entry); + obj_init_banana(obj, (LevelObjectEntry_Banana *) entry); break; case BHV_LIGHT_RGBA: - obj_init_rgbalight(obj, (LevelObjectEntry_RgbaLight *)entry, arg2); + obj_init_rgbalight(obj, (LevelObjectEntry_RgbaLight *) entry, arg2); break; case BHV_BUOY_PIRATE_SHIP: - obj_init_buoy_pirateship(obj, (LevelObjectEntry_Buoy_PirateShip *)entry, arg2); + obj_init_buoy_pirateship(obj, (LevelObjectEntry_Buoy_PirateShip *) entry, arg2); break; case BHV_LOG: - obj_init_log(obj, (LevelObjectEntry_Log *)entry, arg2); + obj_init_log(obj, (LevelObjectEntry_Log *) entry, arg2); break; case BHV_WEATHER: - obj_init_weather(obj, (LevelObjectEntry_Weather *)entry); + obj_init_weather(obj, (LevelObjectEntry_Weather *) entry); break; case BHV_BRIDGE_WHALE_RAMP: - obj_init_bridge_whaleramp(obj, (LevelObjectEntry_Bridge_WhaleRamp *)entry); + obj_init_bridge_whaleramp(obj, (LevelObjectEntry_Bridge_WhaleRamp *) entry); break; case BHV_RAMP_SWITCH: - obj_init_rampswitch(obj, (LevelObjectEntry_RampSwitch *)entry); + obj_init_rampswitch(obj, (LevelObjectEntry_RampSwitch *) entry); break; case BHV_SEA_MONSTER: - obj_init_seamonster(obj, (LevelObjectEntry_SeaMonster *)entry); + obj_init_seamonster(obj, (LevelObjectEntry_SeaMonster *) entry); break; case BHV_LENS_FLARE: - obj_init_lensflare(obj, (LevelObjectEntry_LensFlare *)entry); + obj_init_lensflare(obj, (LevelObjectEntry_LensFlare *) entry); break; case BHV_LENS_FLARE_SWITCH: - obj_init_lensflareswitch(obj, (LevelObjectEntry_LensFlareSwitch *)entry); + obj_init_lensflareswitch(obj, (LevelObjectEntry_LensFlareSwitch *) entry); break; case BHV_COLLECT_EGG: - obj_init_collectegg(obj, (LevelObjectEntry_CollectEgg *)entry); + obj_init_collectegg(obj, (LevelObjectEntry_CollectEgg *) entry); break; case BHV_EGG_CREATOR: - obj_init_eggcreator(obj, (LevelObjectEntry_EggCreator *)entry); + obj_init_eggcreator(obj, (LevelObjectEntry_EggCreator *) entry); break; case BHV_CHARACTER_FLAG: - obj_init_characterflag(obj, (LevelObjectEntry_CharacterFlag *)entry); + obj_init_characterflag(obj, (LevelObjectEntry_CharacterFlag *) entry); break; case BHV_ANIMATION: - obj_init_animation(obj, (LevelObjectEntry_Animation *)entry); + obj_init_animation(obj, (LevelObjectEntry_Animation *) entry); break; case BHV_INFO_POINT: - obj_init_infopoint(obj, (LevelObjectEntry_InfoPoint *)entry); + obj_init_infopoint(obj, (LevelObjectEntry_InfoPoint *) entry); break; case BHV_TRIGGER: - obj_init_trigger(obj, (LevelObjectEntry_Trigger *)entry); + obj_init_trigger(obj, (LevelObjectEntry_Trigger *) entry); break; case BHV_ZIPPER_WATER: case BHV_ZIPPER_AIR: - obj_init_airzippers_waterzippers(obj, (LevelObjectEntry_AirZippers_WaterZippers *)entry); + obj_init_airzippers_waterzippers(obj, (LevelObjectEntry_AirZippers_WaterZippers *) entry); break; case BHV_UNK_3A: - obj_init_unknown58(obj, (LevelObjectEntry_Unknown58 *)entry); + obj_init_unknown58(obj, (LevelObjectEntry_Unknown58 *) entry); break; case BHV_WAVE_GENERATOR: - obj_init_wavegenerator(obj, (LevelObjectEntry_WaveGenerator *)entry, arg2); + obj_init_wavegenerator(obj, (LevelObjectEntry_WaveGenerator *) entry, arg2); break; case BHV_BUTTERFLY: - obj_init_butterfly(obj, (LevelObjectEntry_Butterfly *)entry); + obj_init_butterfly(obj, (LevelObjectEntry_Butterfly *) entry); break; case BHV_PARK_WARDEN: - obj_init_parkwarden(obj, (LevelObjectEntry_Parkwarden *)entry); + obj_init_parkwarden(obj, (LevelObjectEntry_Parkwarden *) entry); break; case BHV_WORLD_KEY: - obj_init_worldkey(obj, (LevelObjectEntry_WorldKey *)entry); + obj_init_worldkey(obj, (LevelObjectEntry_WorldKey *) entry); break; case BHV_BANANA_SPAWNER: - obj_init_bananacreator(obj, (LevelObjectEntry_BananaCreator *)entry); + obj_init_bananacreator(obj, (LevelObjectEntry_BananaCreator *) entry); break; case BHV_TREASURE_SUCKER: - obj_init_treasuresucker(obj, (LevelObjectEntry_TreasureSucker *)entry); + obj_init_treasuresucker(obj, (LevelObjectEntry_TreasureSucker *) entry); break; case BHV_LAVA_SPURT: - obj_init_lavaspurt(obj, (LevelObjectEntry_LavaSpurt *)entry); + obj_init_lavaspurt(obj, (LevelObjectEntry_LavaSpurt *) entry); break; case BHV_POS_ARROW: - obj_init_posarrow(obj, (LevelObjectEntry_PosArrow *)entry); + obj_init_posarrow(obj, (LevelObjectEntry_PosArrow *) entry); break; case BHV_HIT_TESTER: case BHV_HIT_TESTER_3: - obj_init_hittester(obj, (LevelObjectEntry_HitTester *)entry); + obj_init_hittester(obj, (LevelObjectEntry_HitTester *) entry); break; case BHV_HIT_TESTER_2: case BHV_DYNAMIC_LIGHT_OBJECT_2: case BHV_HIT_TESTER_4: - obj_init_dynamic_lighting_object(obj, (LevelObjectEntry_DynamicLightingObject *)entry); + obj_init_dynamic_lighting_object(obj, (LevelObjectEntry_DynamicLightingObject *) entry); break; case BHV_SNOWBALL: case BHV_SNOWBALL_3: - obj_init_unknown96(obj, (LevelObjectEntry_Unknown96 *)entry); + obj_init_unknown96(obj, (LevelObjectEntry_Unknown96 *) entry); break; case BHV_SNOWBALL_2: case BHV_SNOWBALL_4: - obj_init_snowball(obj, (LevelObjectEntry_Snowball *)entry); + obj_init_snowball(obj, (LevelObjectEntry_Snowball *) entry); break; case BHV_MIDI_FADE: - obj_init_midifade(obj, (LevelObjectEntry_MidiFade *)entry); + obj_init_midifade(obj, (LevelObjectEntry_MidiFade *) entry); break; case BHV_MIDI_FADE_POINT: - obj_init_midifadepoint(obj, (LevelObjectEntry_MidiFadePoint *)entry); + obj_init_midifadepoint(obj, (LevelObjectEntry_MidiFadePoint *) entry); break; case BHV_MIDI_CHANNEL_SET: - obj_init_midichset(obj, (LevelObjectEntry_Midichset *)entry); + obj_init_midichset(obj, (LevelObjectEntry_Midichset *) entry); break; case BHV_EFFECT_BOX: - obj_init_effectbox(obj, (LevelObjectEntry_EffectBox *)entry); + obj_init_effectbox(obj, (LevelObjectEntry_EffectBox *) entry); break; case BHV_TROPHY_CABINET: - obj_init_trophycab(obj, (LevelObjectEntry_TrophyCab *)entry); + obj_init_trophycab(obj, (LevelObjectEntry_TrophyCab *) entry); break; case BHV_BUBBLER: - obj_init_bubbler(obj, (LevelObjectEntry_Bubbler *)entry); + obj_init_bubbler(obj, (LevelObjectEntry_Bubbler *) entry); break; case BHV_FLY_COIN: - obj_init_flycoin(obj, (LevelObjectEntry_FlyCoin *)entry); + obj_init_flycoin(obj, (LevelObjectEntry_FlyCoin *) entry); break; case BHV_GOLDEN_BALLOON: - obj_init_goldenballoon(obj, (LevelObjectEntry_GoldenBalloon *)entry); + obj_init_goldenballoon(obj, (LevelObjectEntry_GoldenBalloon *) entry); break; case BHV_LASER_BOLT: - obj_init_laserbolt(obj, (LevelObjectEntry_Laserbolt *)entry); + obj_init_laserbolt(obj, (LevelObjectEntry_Laserbolt *) entry); break; case BHV_LASER_GUN: - obj_init_lasergun(obj, (LevelObjectEntry_Lasergun *)entry); + obj_init_lasergun(obj, (LevelObjectEntry_Lasergun *) entry); break; case BHV_ZIPPER_GROUND: - obj_init_groundzipper(obj, (LevelObjectEntry_GroundZipper *)entry); + obj_init_groundzipper(obj, (LevelObjectEntry_GroundZipper *) entry); break; case BHV_OVERRIDE_POS: - obj_init_overridepos(obj, (LevelObjectEntry_OverridePos *)entry); + obj_init_overridepos(obj, (LevelObjectEntry_OverridePos *) entry); break; case BHV_WIZPIG_SHIP: - obj_init_wizpigship(obj, (LevelObjectEntry_WizpigShip *)entry); + obj_init_wizpigship(obj, (LevelObjectEntry_WizpigShip *) entry); break; case BHV_BOOST: - obj_init_boost(obj, (LevelObjectEntry_Boost *)entry); + obj_init_boost(obj, (LevelObjectEntry_Boost *) entry); break; case BHV_SILVER_COIN: - obj_init_silvercoin(obj, (LevelObjectEntry_SilverCoin *)entry); + obj_init_silvercoin(obj, (LevelObjectEntry_SilverCoin *) entry); break; case BHV_WARDEN_SMOKE: - obj_init_wardensmoke(obj, (LevelObjectEntry_WardenSmoke *)entry); + obj_init_wardensmoke(obj, (LevelObjectEntry_WardenSmoke *) entry); break; case BHV_UNK_5E: - obj_init_unknown94(obj, (LevelObjectEntry_Unknown94 *)entry, arg2); + obj_init_unknown94(obj, (LevelObjectEntry_Unknown94 *) entry, arg2); break; case BHV_TELEPORT: - obj_init_teleport(obj, (LevelObjectEntry_Teleport *)entry); + obj_init_teleport(obj, (LevelObjectEntry_Teleport *) entry); break; case BHV_ROCKET_SIGNPOST: case BHV_ROCKET_SIGNPOST_2: - obj_init_lighthouse_rocketsignpost(obj, (LevelObjectEntry_Lighthouse_RocketSignpost *)entry); + obj_init_lighthouse_rocketsignpost(obj, (LevelObjectEntry_Lighthouse_RocketSignpost *) entry); break; case BHV_RANGE_TRIGGER: - obj_init_rangetrigger(obj, (LevelObjectEntry_RangeTrigger *)entry); + obj_init_rangetrigger(obj, (LevelObjectEntry_RangeTrigger *) entry); break; case BHV_FIREBALL_OCTOWEAPON: case BHV_FIREBALL_OCTOWEAPON_2: - obj_init_fireball_octoweapon(obj, (LevelObjectEntry_Fireball_Octoweapon *)entry); + obj_init_fireball_octoweapon(obj, (LevelObjectEntry_Fireball_Octoweapon *) entry); break; case BHV_FROG: - obj_init_frog(obj, (LevelObjectEntry_Frog *)entry); + obj_init_frog(obj, (LevelObjectEntry_Frog *) entry); break; case BHV_SILVER_COIN_2: - obj_init_silvercoin_adv2(obj, (LevelObjectEntry_SilverCoinAdv2 *)entry); + obj_init_silvercoin_adv2(obj, (LevelObjectEntry_SilverCoinAdv2 *) entry); break; case BHV_LEVEL_NAME: - obj_init_levelname(obj, (LevelObjectEntry_LevelName *)entry); + obj_init_levelname(obj, (LevelObjectEntry_LevelName *) entry); break; } } @@ -2692,246 +2695,246 @@ s32 func_80023E30(s32 arg0) { return value; } -void run_object_loop_func(Object *obj, s32 arg1) { +void run_object_loop_func(Object *obj, s32 updateRate) { func_800B76B8(1, obj->unk4A); switch (obj->behaviorId) { case BHV_SCENERY: - obj_loop_scenery(obj, arg1); + obj_loop_scenery(obj, updateRate); break; case BHV_FISH: - obj_loop_fish(obj, arg1); + obj_loop_fish(obj, updateRate); break; case BHV_ANIMATOR: - obj_loop_animator(obj, arg1); + obj_loop_animator(obj, updateRate); break; case BHV_SMOKE: - obj_loop_smoke(obj, arg1); + obj_loop_smoke(obj, updateRate); break; case BHV_UNK_19: - obj_loop_unknown25(obj, arg1); + obj_loop_unknown25(obj, updateRate); break; case BHV_BOMB_EXPLOSION: - obj_loop_bombexplosion(obj, arg1); + obj_loop_bombexplosion(obj, updateRate); break; case BHV_EXIT: - obj_loop_exit(obj, arg1); + obj_loop_exit(obj, updateRate); break; case BHV_CAMERA_CONTROL: - obj_loop_cameracontrol(obj, arg1); + obj_loop_cameracontrol(obj, updateRate); break; case BHV_SETUP_POINT: - obj_loop_setuppoint(obj, arg1); + obj_loop_setuppoint(obj, updateRate); break; case BHV_DINO_WHALE: - obj_loop_dino_whale(obj, arg1); + obj_loop_dino_whale(obj, updateRate); break; case BHV_CHECKPOINT: - obj_loop_checkpoint(obj, arg1); + obj_loop_checkpoint(obj, updateRate); break; case BHV_MODECHANGE: - obj_loop_modechange(obj, arg1); + obj_loop_modechange(obj, updateRate); break; case BHV_BONUS: - obj_loop_bonus(obj, arg1); + obj_loop_bonus(obj, updateRate); break; case BHV_DOOR: - obj_loop_door(obj, arg1); + obj_loop_door(obj, updateRate); break; case BHV_FOG_CHANGER: obj_loop_fogchanger(obj); break; case BHV_AINODE: - obj_loop_ainode(obj, arg1); + obj_loop_ainode(obj, updateRate); break; case BHV_WEAPON_BALLOON: - obj_loop_weaponballoon(obj, arg1); + obj_loop_weaponballoon(obj, updateRate); break; case BHV_BALLOON_POP: - obj_loop_wballoonpop(obj, arg1); + obj_loop_wballoonpop(obj, updateRate); break; case BHV_WEAPON: case BHV_WEAPON_2: - obj_loop_weapon(obj, arg1); + obj_loop_weapon(obj, updateRate); break; case BHV_SKY_CONTROL: - obj_loop_skycontrol(obj, arg1); + obj_loop_skycontrol(obj, updateRate); break; case BHV_TORCH_MIST: - obj_loop_torch_mist(obj, arg1); + obj_loop_torch_mist(obj, updateRate); break; case BHV_TEXTURE_SCROLL: - obj_loop_texscroll(obj, arg1); + obj_loop_texscroll(obj, updateRate); break; case BHV_STOPWATCH_MAN: - obj_loop_stopwatchman(obj, arg1); + obj_loop_stopwatchman(obj, updateRate); break; case BHV_BANANA: - obj_loop_banana(obj, arg1); + obj_loop_banana(obj, updateRate); break; case BHV_BUOY_PIRATE_SHIP: - obj_loop_buoy_pirateship(obj, arg1); + obj_loop_buoy_pirateship(obj, updateRate); break; case BHV_LOG: - obj_loop_log(obj, arg1); + obj_loop_log(obj, updateRate); break; case BHV_WEATHER: - obj_loop_weather(obj, arg1); + obj_loop_weather(obj, updateRate); break; case BHV_BRIDGE_WHALE_RAMP: - obj_loop_bridge_whaleramp(obj, arg1); + obj_loop_bridge_whaleramp(obj, updateRate); break; case BHV_RAMP_SWITCH: - obj_loop_rampswitch(obj, arg1); + obj_loop_rampswitch(obj, updateRate); break; case BHV_SEA_MONSTER: - obj_loop_seamonster(obj, arg1); + obj_loop_seamonster(obj, updateRate); break; case BHV_COLLECT_EGG: - obj_loop_collectegg(obj, arg1); + obj_loop_collectegg(obj, updateRate); break; case BHV_EGG_CREATOR: - obj_loop_eggcreator(obj, arg1); + obj_loop_eggcreator(obj, updateRate); break; case BHV_CHARACTER_FLAG: - obj_loop_characterflag(obj, arg1); + obj_loop_characterflag(obj, updateRate); break; case BHV_ANIMATED_OBJECT: case BHV_ANIMATED_OBJECT_2: case BHV_ANIMATED_OBJECT_3: case BHV_ANIMATED_OBJECT_4: - obj_loop_animobject(obj, arg1); + obj_loop_animobject(obj, updateRate); break; case BHV_WIZPIG_GHOSTS: - obj_loop_wizghosts(obj, arg1); + obj_loop_wizghosts(obj, updateRate); break; case BHV_CAMERA_ANIMATION: - obj_loop_animcamera(obj, arg1); + obj_loop_animcamera(obj, updateRate); break; case BHV_INFO_POINT: - obj_loop_infopoint(obj, arg1); + obj_loop_infopoint(obj, updateRate); break; case BHV_CAR_ANIMATION: - obj_loop_animcar(obj, arg1); + obj_loop_animcar(obj, updateRate); break; case BHV_CHARACTER_SELECT: - obj_loop_char_select(obj, arg1); + obj_loop_char_select(obj, updateRate); break; case BHV_TRIGGER: - obj_loop_trigger(obj, arg1); + obj_loop_trigger(obj, updateRate); break; case BHV_VEHICLE_ANIMATION: - obj_loop_vehicleanim(obj, arg1); + obj_loop_vehicleanim(obj, updateRate); break; case BHV_ZIPPER_WATER: case BHV_ZIPPER_AIR: - obj_loop_airzippers_waterzippers(obj, arg1); + obj_loop_airzippers_waterzippers(obj, updateRate); break; case BHV_UNK_3A: - obj_loop_unknown58(obj, arg1); + obj_loop_unknown58(obj, updateRate); break; case BHV_WAVE_POWER: obj_loop_wavepower(obj); break; case BHV_BUTTERFLY: - obj_loop_butterfly(obj, arg1); + obj_loop_butterfly(obj, updateRate); break; case BHV_PARK_WARDEN: - obj_loop_parkwarden(obj, arg1); + obj_loop_parkwarden(obj, updateRate); break; case BHV_WORLD_KEY: - obj_loop_worldkey(obj, arg1); //arg1=speed + obj_loop_worldkey(obj, updateRate); //arg1=speed break; case BHV_BANANA_SPAWNER: - obj_loop_bananacreator(obj, arg1); + obj_loop_bananacreator(obj, updateRate); break; case BHV_TREASURE_SUCKER: - obj_loop_treasuresucker(obj, arg1); + obj_loop_treasuresucker(obj, updateRate); break; case BHV_LAVA_SPURT: - obj_loop_lavaspurt(obj, arg1); + obj_loop_lavaspurt(obj, updateRate); break; case BHV_POS_ARROW: - obj_loop_posarrow(obj, arg1); + obj_loop_posarrow(obj, updateRate); break; case BHV_HIT_TESTER: case BHV_HIT_TESTER_2: case BHV_HIT_TESTER_3: case BHV_HIT_TESTER_4: - obj_loop_hittester(obj, arg1); + obj_loop_hittester(obj, updateRate); break; case BHV_SNOWBALL: case BHV_SNOWBALL_2: case BHV_SNOWBALL_3: case BHV_SNOWBALL_4: - obj_loop_snowball(obj, arg1); + obj_loop_snowball(obj, updateRate); break; case BHV_EFFECT_BOX: - obj_loop_effectbox(obj, arg1); + obj_loop_effectbox(obj, updateRate); break; case BHV_TROPHY_CABINET: - obj_loop_trophycab(obj, arg1); + obj_loop_trophycab(obj, updateRate); break; case BHV_BUBBLER: - obj_loop_bubbler(obj, arg1); + obj_loop_bubbler(obj, updateRate); break; case BHV_FLY_COIN: - obj_loop_flycoin(obj, arg1); + obj_loop_flycoin(obj, updateRate); break; case BHV_GOLDEN_BALLOON: - obj_loop_goldenballoon(obj, arg1); + obj_loop_goldenballoon(obj, updateRate); break; case BHV_LASER_BOLT: - obj_loop_laserbolt(obj, arg1); + obj_loop_laserbolt(obj, updateRate); break; case BHV_LASER_GUN: - obj_loop_lasergun(obj, arg1); + obj_loop_lasergun(obj, updateRate); break; case BHV_PARK_WARDEN_2: - obj_loop_gbparkwarden(obj, arg1); + obj_loop_gbparkwarden(obj, updateRate); break; case BHV_ZIPPER_GROUND: - obj_loop_groundzipper(obj, arg1); + obj_loop_groundzipper(obj, updateRate); break; case BHV_WIZPIG_SHIP: - obj_loop_wizpigship(obj, arg1); + obj_loop_wizpigship(obj, updateRate); break; case BHV_SILVER_COIN: case BHV_SILVER_COIN_2: - obj_loop_silvercoin(obj, arg1); + obj_loop_silvercoin(obj, updateRate); break; case BHV_WARDEN_SMOKE: - obj_loop_wardensmoke(obj, arg1); + obj_loop_wardensmoke(obj, updateRate); break; case BHV_UNK_5E: - obj_loop_unknown94(obj, arg1); + obj_loop_unknown94(obj, updateRate); break; case BHV_TELEPORT: - obj_loop_teleport(obj, arg1); + obj_loop_teleport(obj, updateRate); break; case BHV_RANGE_TRIGGER: - obj_loop_rangetrigger(obj, arg1); + obj_loop_rangetrigger(obj, updateRate); break; case BHV_ROCKET_SIGNPOST_2: - obj_loop_rocketsignpost(obj, arg1); + obj_loop_rocketsignpost(obj, updateRate); break; case BHV_FIREBALL_OCTOWEAPON: case BHV_FIREBALL_OCTOWEAPON_2: - obj_loop_fireball_octoweapon(obj, arg1); + obj_loop_fireball_octoweapon(obj, updateRate); break; case BHV_FROG: - obj_loop_frog(obj, arg1); + obj_loop_frog(obj, updateRate); break; case BHV_TT_DOOR: - obj_loop_ttdoor(obj, arg1); + obj_loop_ttdoor(obj, updateRate); break; case BHV_DOOR_OPENER: - obj_loop_dooropener(obj, arg1); + obj_loop_dooropener(obj, updateRate); break; case BHV_PIG_ROCKETEER: - obj_loop_pigrocketeer(obj, arg1); + obj_loop_pigrocketeer(obj, updateRate); break; case BHV_LEVEL_NAME: - obj_loop_levelname(obj, arg1); + obj_loop_levelname(obj, updateRate); break; } func_800B76B8(1, -1); diff --git a/src/objects.h b/src/objects.h index 22a1b01c..1c2f9ec7 100644 --- a/src/objects.h +++ b/src/objects.h @@ -383,7 +383,7 @@ void func_80012C3C(Gfx** dlist); void func_80012C98(Gfx **dlist); void func_80012CE8(Gfx **dlist); void func_80012D5C(Gfx **dlist, Matrix **mats, VertexList **verts, Object *object); -void func_80012F30(Object *arg0); +void func_80012F30(Object *obj); void render_object(Object *this); void func_80013548(Object *arg0); void func_800142B8(void); @@ -448,7 +448,7 @@ void func_800245B4(s16 arg0); void func_80012E28(Object *this); f32 catmull_rom_interpolation(f32*, s32, f32); f32 cubic_spline_interpolation(f32 *, s32, f32, f32 *); -s32 func_80031F88(Object*, s32); +s32 func_80031F88(Object*, ObjectHeader24 *); s16 func_8001C418(f32 yPos); void func_80021400(s32 arg0); s32 func_8001B668(s32 arg0); @@ -465,12 +465,14 @@ void func_8000B290(void); void func_80016BC4(unk8000FD34*); s32 func_8001C48C(Object *obj); void func_80022CFC(s32 arg0, f32 x, f32 y, f32 z); +Object *func_8001B7A8(Object *racer, s32 position, f32 *distance); +s32 func_8000FD34(unk8000FD34 *arg0, unk_80016BC4_2 *arg1); //Non Matching void calc_dynamic_lighting_for_object_1(Object *, ObjectModel *, s16, Object *, f32, f32); void calc_dynamic_lighting_for_object_2(Object *, ObjectModel *, s16, f32); void gParticlePtrList_flush(void); -void decrypt_magic_codes(u8 *arg0, s32 length); +void decrypt_magic_codes(s32 *arg0, s32 length); void func_80011AD0(Object *this); s32 func_80014814(s32 *); void func_80015348(s32, s32); @@ -482,12 +484,16 @@ void func_8000B750(Object *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); void func_80022E18(s32); /* extern */ void func_80018CE0(Object* obj, f32 xPos, f32 yPos, f32 zPos, s32 updateRate); /* extern */ s32 func_800185E4(s8, Object* obj, f32 xPos, f32 yPos, f32 zPos, f32* checkpointDistance, u8*); /* extern */ -Object *func_8001B7A8(Object *arg0, s32 arg1, f32 *arg2); void func_80011134(Object *, s32); void func_800113CC(Object *, s32, s32, s32, s32); s32 func_800143A8(ObjectModel*, Object*, s32, s32, s32); /* extern */ void func_80068FA8(Gfx**, Matrix**, Object*, Object*, f32); /* extern */ -void func_800138A8(Object*, unk80068514_arg4*, s16*, s32); +void func_800138A8(Object*, unk80068514_arg4*, ObjectTransformExt *, s32); Object *func_8002342C(f32 x, f32 z); +void func_8006017C(s32); +void func_8001709C(); +void func_80012F94(Object *); +void render_3d_model(Object *); +void func_800101AC(Object *, s32); #endif diff --git a/src/particles.c b/src/particles.c index 9e060353..5745d6f0 100644 --- a/src/particles.c +++ b/src/particles.c @@ -7,6 +7,7 @@ #include "asset_enums.h" #include "memory.h" #include "textures_sprites.h" +#include "thread0_epc.h" /************ .rodata ************/ @@ -175,7 +176,7 @@ u16 D_80127CD2; s32 D_80127CD4; s8 gDebugPrintBufferStart[2300]; s32 gDebugPrintBufferEnd[1026]; -s32 D_801295E0[108]; +OSThread D_801295E0; s32 D_80129790[6]; // Osmesg stuff s32 D_801297A8[8]; s32 D_801297C8[8]; @@ -260,35 +261,42 @@ void func_800AE490(void) { gParticleBehavioursAssetTable = NULL; } } -#ifdef NON_EQUIVALENT + void init_particle_assets(void) { + s32 *new_var2; s32 i; - + u32 new_var; + s32 temp; func_800AE490(); - gParticlesAssetTable = load_asset_section_from_rom(ASSET_PARTICLES_TABLE); + gParticlesAssetTable = (s32) load_asset_section_from_rom(ASSET_PARTICLES_TABLE); + gParticlesAssetTableCount = -1; + while (((s32) gParticlesAssetTable[gParticlesAssetTableCount + 1]) != -1){ + gParticlesAssetTableCount++; + } - for (gParticlesAssetTableCount = -1; (s32)gParticlesAssetTable[gParticlesAssetTableCount + 1] != -1; gParticlesAssetTableCount++) { - } - gParticlesAssets = load_asset_section_from_rom(ASSET_PARTICLES); + gParticlesAssets = (s32 *) load_asset_section_from_rom(ASSET_PARTICLES); for (i = 0; i < gParticlesAssetTableCount; i++) { - gParticlesAssetTable[i] = (u8 *)gParticlesAssets + (s32)gParticlesAssetTable[i]; + gParticlesAssetTable[i] = (unk800E2CF0 *) (((u8 *) gParticlesAssets) + ((s32) gParticlesAssetTable[i])); } - gParticleBehavioursAssetTable = load_asset_section_from_rom(ASSET_PARTICLE_BEHAVIORS_TABLE); - for (gParticleBehavioursAssetTableCount = -1; (s32)gParticleBehavioursAssetTable[gParticleBehavioursAssetTableCount + 1] != -1; gParticleBehavioursAssetTableCount++) { - } - gParticleBehavioursAssets = load_asset_section_from_rom(ASSET_PARTICLE_BEHAVIORS); + + gParticleBehavioursAssetTable = (s32) load_asset_section_from_rom(ASSET_PARTICLE_BEHAVIORS_TABLE); + gParticleBehavioursAssetTableCount = -1; + while (((s32) gParticleBehavioursAssetTable[gParticleBehavioursAssetTableCount + 1]) != (-1)) { + gParticleBehavioursAssetTableCount++; + } + + gParticleBehavioursAssets = (s32) load_asset_section_from_rom(ASSET_PARTICLE_BEHAVIORS); for (i = 0; i < gParticleBehavioursAssetTableCount; i++) { - gParticleBehavioursAssetTable[i] = (u8 *)gParticleBehavioursAssets + (s32)gParticleBehavioursAssetTable[i]; - if ((s32)gParticleBehavioursAssetTable[i]->unk9C != -1) { - gParticleBehavioursAssetTable[i]->unk9C = get_misc_asset(gParticleBehavioursAssetTable[i]->unk9C); + new_var = -1; + gParticleBehavioursAssetTable[i] = (ParticleBehavior *) (((u8 *) gParticleBehavioursAssets) + ((s32) gParticleBehavioursAssetTable[i])); + if (((s32) gParticleBehavioursAssetTable[i]->unk9C) != new_var) + { + new_var2 = gParticleBehavioursAssetTable[i]->unk9C; + gParticleBehavioursAssetTable[i]->unk9C = get_misc_asset(new_var2); } } } -#else -GLOBAL_ASM("asm/non_matchings/particles/init_particle_assets.s") -#endif - GLOBAL_ASM("asm/non_matchings/particles/func_800AE728.s") void func_800AEE14(unk800AF024 *arg0, Vertex **arg1, Triangle **arg2) { diff --git a/src/particles.h b/src/particles.h index 0d8c698b..85c48ef4 100644 --- a/src/particles.h +++ b/src/particles.h @@ -3,6 +3,7 @@ #include "types.h" #include "structs.h" +#include "libultra_internal.h" /* Size: 0xA0 bytes */ typedef struct ParticleBehavior { @@ -128,6 +129,7 @@ extern s32 D_80127CC8; extern s32 D_80127CB4; extern s16 D_80127CB0; extern s16 D_80127CB2; +extern OSThread D_801295E0; extern ParticleBehavior **gParticleBehavioursAssetTable; extern s32 gParticleBehavioursAssetTableCount; @@ -149,11 +151,11 @@ void func_800AF29C(unk800AF29C *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s1 void func_800AF6E4(Object *obj, s32 arg1); void func_800B2260(unk800B2260 *arg0); void func_800B263C(unk800B2260_C *arg0); +void init_particle_assets(void); void func_800AF134(unk800B2260 *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5); // Non Matching void func_800AF404(s32 arg0); // Non Matching void func_800AFC3C(Object *, s32); // Non Matching -void init_particle_assets(void); // Non Matching void func_800AE728(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); // Non Matching void func_800AF714(Object*, s32); // Non matching diff --git a/src/thread0_epc.c b/src/thread0_epc.c index d8c0041c..31fa23aa 100644 --- a/src/thread0_epc.c +++ b/src/thread0_epc.c @@ -11,6 +11,7 @@ #include "controller.h" #include "game.h" #include "stacks.h" +#include "particles.h" /************ .rodata ************/ @@ -45,7 +46,6 @@ s32 D_801299B0[64]; /******************************/ -extern OSThread D_801295E0; extern OSMesgQueue D_80129790; extern OSMesg D_801297A8; extern OSMesgQueue D_801297E8; diff --git a/src/unknown_0255E0.h b/src/unknown_0255E0.h index c67aa2a6..f5b9c6fa 100644 --- a/src/unknown_0255E0.h +++ b/src/unknown_0255E0.h @@ -149,5 +149,6 @@ void func_800BA8E4(Gfx**, Matrix**, s32); void func_8002DE30(Object*); void func_8002E234(Object*, s32); void func_80030DE0(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6); +s32 func_8002BAB0(s16, f32, f32, f32*); #endif