Decompiled 2 functions from unknown_255E0

This commit is contained in:
David Benepe
2021-08-18 20:36:56 -05:00
parent b24d622d6d
commit 6e53834843
16 changed files with 633 additions and 284 deletions
+7 -7
View File
@@ -113,24 +113,24 @@ s32 is_drumstick_unlocked(void) {
}
```
As of August 15th 2021, this is our current score:
As of August 18th 2021, this is our current score:
```
=======================================================
ADVENTURE ONE (ASM -> C Decompilation)
------------------- 14.00% Complete -------------------
# Decompiled functions: 874
# GLOBAL_ASM remaining: 903
# NON_MATCHING functions: 92
------------------- 14.25% Complete -------------------
# Decompiled functions: 884
# GLOBAL_ASM remaining: 894
# NON_MATCHING functions: 100
--------------------- Game Status ---------------------
Balloons: 8/47, Keys: 1/4, Trophies: 0/5
T.T. Amulets: 0/4, Wizpig Amulets: 0/4
-------------------------------------------------------
We are collecting eggs in Fire Mountain. (0/3 Eggs)
We are collecting eggs in Fire Mountain. (1/3 Eggs)
=======================================================
ADVENTURE TWO (Cleanup & Documentation)
------------------- 0.75% Complete -------------------
# Documented functions: 61
# Undocumented remaining: 1716
# Undocumented remaining: 1717
--------------------- Game Status ---------------------
Balloons: 0/47, Keys: 0/4, Trophies: 0/5
T.T. Amulets: 0/4, Wizpig Amulets: 0/4
@@ -1,88 +0,0 @@
glabel func_8007F460
/* 080060 8007F460 948E0000 */ lhu $t6, ($a0)
/* 080064 8007F464 00000000 */ nop
/* 080068 8007F468 29C10002 */ slti $at, $t6, 2
/* 08006C 8007F46C 14200047 */ bnez $at, .L8007F58C
/* 080070 8007F470 00000000 */ nop
/* 080074 8007F474 948F0004 */ lhu $t7, 4($a0)
/* 080078 8007F478 94830006 */ lhu $v1, 6($a0)
/* 08007C 8007F47C 01E5C021 */ addu $t8, $t7, $a1
/* 080080 8007F480 3302FFFF */ andi $v0, $t8, 0xffff
/* 080084 8007F484 0043082A */ slt $at, $v0, $v1
/* 080088 8007F488 14200006 */ bnez $at, .L8007F4A4
/* 08008C 8007F48C A4980004 */ sh $t8, 4($a0)
.L8007F490:
/* 080090 8007F490 0043C823 */ subu $t9, $v0, $v1
/* 080094 8007F494 3322FFFF */ andi $v0, $t9, 0xffff
/* 080098 8007F498 0043082A */ slt $at, $v0, $v1
/* 08009C 8007F49C 1020FFFC */ beqz $at, .L8007F490
/* 0800A0 8007F4A0 A4990004 */ sh $t9, 4($a0)
.L8007F4A4:
/* 0800A4 8007F4A4 94830002 */ lhu $v1, 2($a0)
/* 0800A8 8007F4A8 00000000 */ nop
/* 0800AC 8007F4AC 00034080 */ sll $t0, $v1, 2
/* 0800B0 8007F4B0 00884821 */ addu $t1, $a0, $t0
/* 0800B4 8007F4B4 9525000E */ lhu $a1, 0xe($t1)
/* 0800B8 8007F4B8 00000000 */ nop
/* 0800BC 8007F4BC 0045082A */ slt $at, $v0, $a1
/* 0800C0 8007F4C0 14200013 */ bnez $at, .L8007F510
/* 0800C4 8007F4C4 00000000 */ nop
.L8007F4C8:
/* 0800C8 8007F4C8 948C0000 */ lhu $t4, ($a0)
/* 0800CC 8007F4CC 246B0001 */ addiu $t3, $v1, 1
/* 0800D0 8007F4D0 3163FFFF */ andi $v1, $t3, 0xffff
/* 0800D4 8007F4D4 00455023 */ subu $t2, $v0, $a1
/* 0800D8 8007F4D8 006C082A */ slt $at, $v1, $t4
/* 0800DC 8007F4DC A48A0004 */ sh $t2, 4($a0)
/* 0800E0 8007F4E0 14200003 */ bnez $at, .L8007F4F0
/* 0800E4 8007F4E4 A48B0002 */ sh $t3, 2($a0)
/* 0800E8 8007F4E8 A4800002 */ sh $zero, 2($a0)
/* 0800EC 8007F4EC 3003FFFF */ andi $v1, $zero, 0xffff
.L8007F4F0:
/* 0800F0 8007F4F0 00036880 */ sll $t5, $v1, 2
/* 0800F4 8007F4F4 008D7021 */ addu $t6, $a0, $t5
/* 0800F8 8007F4F8 95C5000E */ lhu $a1, 0xe($t6)
/* 0800FC 8007F4FC 94820004 */ lhu $v0, 4($a0)
/* 080100 8007F500 00000000 */ nop
/* 080104 8007F504 0045082A */ slt $at, $v0, $a1
/* 080108 8007F508 1020FFEF */ beqz $at, .L8007F4C8
/* 08010C 8007F50C 00000000 */ nop
.L8007F510:
/* 080110 8007F510 948F0000 */ lhu $t7, ($a0)
/* 080114 8007F514 24670001 */ addiu $a3, $v1, 1
/* 080118 8007F518 00EF082A */ slt $at, $a3, $t7
/* 08011C 8007F51C 00602825 */ move $a1, $v1
/* 080120 8007F520 14200002 */ bnez $at, .L8007F52C
/* 080124 8007F524 00E03025 */ move $a2, $a3
/* 080128 8007F528 00003025 */ move $a2, $zero
.L8007F52C:
/* 08012C 8007F52C 0006C880 */ sll $t9, $a2, 2
/* 080130 8007F530 00994021 */ addu $t0, $a0, $t9
/* 080134 8007F534 9509000C */ lhu $t1, 0xc($t0)
/* 080138 8007F538 0005C080 */ sll $t8, $a1, 2
/* 08013C 8007F53C 01220019 */ multu $t1, $v0
/* 080140 8007F540 00981821 */ addu $v1, $a0, $t8
/* 080144 8007F544 946B000E */ lhu $t3, 0xe($v1)
/* 080148 8007F548 946D000C */ lhu $t5, 0xc($v1)
/* 08014C 8007F54C 00005012 */ mflo $t2
/* 080150 8007F550 00000000 */ nop
/* 080154 8007F554 00000000 */ nop
/* 080158 8007F558 014B001A */ div $zero, $t2, $t3
/* 08015C 8007F55C 15600002 */ bnez $t3, .L8007F568
/* 080160 8007F560 00000000 */ nop
/* 080164 8007F564 0007000D */ break 7
.L8007F568:
/* 080168 8007F568 2401FFFF */ li $at, -1
/* 08016C 8007F56C 15610004 */ bne $t3, $at, .L8007F580
/* 080170 8007F570 3C018000 */ lui $at, 0x8000
/* 080174 8007F574 15410002 */ bne $t2, $at, .L8007F580
/* 080178 8007F578 00000000 */ nop
/* 08017C 8007F57C 0006000D */ break 6
.L8007F580:
/* 080180 8007F580 00006012 */ mflo $t4
/* 080184 8007F584 018D7021 */ addu $t6, $t4, $t5
/* 080188 8007F588 AC8E0008 */ sw $t6, 8($a0)
.L8007F58C:
/* 08018C 8007F58C 03E00008 */ jr $ra
/* 080190 8007F590 00000000 */ nop
@@ -11,8 +11,8 @@ glabel func_800249F0
/* 025614 80024A14 0C01AF6C */ jal get_current_level_header
/* 025618 80024A18 AFA70034 */ sw $a3, 0x34($sp)
/* 02561C 80024A1C 3C048012 */ lui $a0, %hi(D_8011B0F8) # $a0, 0x8012
/* 025620 80024A20 3C05800E */ lui $a1, %hi(D_800DC91C) # $a1, 0x800e
/* 025624 80024A24 24A5C91C */ addiu $a1, %lo(D_800DC91C) # addiu $a1, $a1, -0x36e4
/* 025620 80024A20 3C05800E */ lui $a1, %hi(gCurrentLevelHeader2) # $a1, 0x800e
/* 025624 80024A24 24A5C91C */ addiu $a1, %lo(gCurrentLevelHeader2) # addiu $a1, $a1, -0x36e4
/* 025628 80024A28 2484B0F8 */ addiu $a0, %lo(D_8011B0F8) # addiu $a0, $a0, -0x4f08
/* 02562C 80024A2C ACA20000 */ sw $v0, ($a1)
/* 025630 80024A30 AC800000 */ sw $zero, ($a0)
@@ -78,8 +78,8 @@ glabel func_800249F0
/* 02570C 80024B0C 0C027B20 */ jal is_in_two_player_adventure
/* 025710 80024B10 00000000 */ nop
/* 025714 80024B14 1040000B */ beqz $v0, .L80024B44
/* 025718 80024B18 3C0E800E */ lui $t6, %hi(D_800DC91C) # $t6, 0x800e
/* 02571C 80024B1C 8DCEC91C */ lw $t6, %lo(D_800DC91C)($t6)
/* 025718 80024B18 3C0E800E */ lui $t6, %hi(gCurrentLevelHeader2) # $t6, 0x800e
/* 02571C 80024B1C 8DCEC91C */ lw $t6, %lo(gCurrentLevelHeader2)($t6)
/* 025720 80024B20 00000000 */ nop
/* 025724 80024B24 81C3004C */ lb $v1, 0x4c($t6)
/* 025728 80024B28 00000000 */ nop
@@ -100,8 +100,8 @@ glabel func_800249F0
/* 025754 80024B54 00000000 */ nop
/* 025758 80024B58 13000006 */ beqz $t8, .L80024B74
/* 02575C 80024B5C 3C04800E */ lui $a0, %hi(gCurrentLevelModel) # $a0, 0x800e
/* 025760 80024B60 3C05800E */ lui $a1, %hi(D_800DC91C) # $a1, 0x800e
/* 025764 80024B64 8CA5C91C */ lw $a1, %lo(D_800DC91C)($a1)
/* 025760 80024B60 3C05800E */ lui $a1, %hi(gCurrentLevelHeader2) # $a1, 0x800e
/* 025764 80024B64 8CA5C91C */ lw $a1, %lo(gCurrentLevelHeader2)($a1)
/* 025768 80024B68 8C84C918 */ lw $a0, %lo(gCurrentLevelModel)($a0)
/* 02576C 80024B6C 0C02E0AD */ jal func_800B82B4
/* 025770 80024B70 00000000 */ nop
@@ -204,8 +204,8 @@ glabel func_800249F0
/* 0258E4 80024CE4 0C00B637 */ jal func_8002D8DC
/* 0258E8 80024CE8 00003025 */ move $a2, $zero
/* 0258EC 80024CEC AE000000 */ sw $zero, ($s0)
/* 0258F0 80024CF0 3C02800E */ lui $v0, %hi(D_800DC91C) # $v0, 0x800e
/* 0258F4 80024CF4 8C42C91C */ lw $v0, %lo(D_800DC91C)($v0)
/* 0258F0 80024CF0 3C02800E */ lui $v0, %hi(gCurrentLevelHeader2) # $v0, 0x800e
/* 0258F4 80024CF4 8C42C91C */ lw $v0, %lo(gCurrentLevelHeader2)($v0)
/* 0258F8 80024CF8 3C018012 */ lui $at, %hi(D_8011B0E1) # $at, 0x8012
/* 0258FC 80024CFC 904C00B7 */ lbu $t4, 0xb7($v0)
/* 025900 80024D00 00000000 */ nop
@@ -58,8 +58,8 @@ glabel func_80024D54
/* 025A28 80024E28 24040002 */ li $a0, 2
/* 025A2C 80024E2C 0C00B637 */ jal func_8002D8DC
/* 025A30 80024E30 24050002 */ li $a1, 2
/* 025A34 80024E34 3C03800E */ lui $v1, %hi(D_800DC91C) # $v1, 0x800e
/* 025A38 80024E38 8C63C91C */ lw $v1, %lo(D_800DC91C)($v1)
/* 025A34 80024E34 3C03800E */ lui $v1, %hi(gCurrentLevelHeader2) # $v1, 0x800e
/* 025A38 80024E38 8C63C91C */ lw $v1, %lo(gCurrentLevelHeader2)($v1)
/* 025A3C 80024E3C 00001025 */ move $v0, $zero
/* 025A40 80024E40 0062C821 */ addu $t9, $v1, $v0
.L80024E44:
@@ -70,8 +70,8 @@ glabel func_80024D54
/* 025A54 80024E54 8FA50084 */ lw $a1, 0x84($sp)
/* 025A58 80024E58 0C01FC93 */ jal func_8007F24C
/* 025A5C 80024E5C AFA20034 */ sw $v0, 0x34($sp)
/* 025A60 80024E60 3C03800E */ lui $v1, %hi(D_800DC91C) # $v1, 0x800e
/* 025A64 80024E64 8C63C91C */ lw $v1, %lo(D_800DC91C)($v1)
/* 025A60 80024E60 3C03800E */ lui $v1, %hi(gCurrentLevelHeader2) # $v1, 0x800e
/* 025A64 80024E64 8C63C91C */ lw $v1, %lo(gCurrentLevelHeader2)($v1)
/* 025A68 80024E68 8FA20034 */ lw $v0, 0x34($sp)
/* 025A6C 80024E6C 00000000 */ nop
.L80024E70:
@@ -84,10 +84,10 @@ glabel func_80024D54
/* 025A88 80024E88 10810007 */ beq $a0, $at, .L80024EA8
/* 025A8C 80024E8C 00000000 */ nop
/* 025A90 80024E90 8FA50084 */ lw $a1, 0x84($sp)
/* 025A94 80024E94 0C01FD18 */ jal func_8007F460
/* 025A94 80024E94 0C01FD18 */ jal update_pulsating_light_data
/* 025A98 80024E98 00000000 */ nop
/* 025A9C 80024E9C 3C03800E */ lui $v1, %hi(D_800DC91C) # $v1, 0x800e
/* 025AA0 80024EA0 8C63C91C */ lw $v1, %lo(D_800DC91C)($v1)
/* 025A9C 80024E9C 3C03800E */ lui $v1, %hi(gCurrentLevelHeader2) # $v1, 0x800e
/* 025AA0 80024EA0 8C63C91C */ lw $v1, %lo(gCurrentLevelHeader2)($v1)
/* 025AA4 80024EA4 00000000 */ nop
.L80024EA8:
/* 025AA8 80024EA8 3C048012 */ lui $a0, %hi(D_8011B0E0) # $a0, 0x8012
@@ -126,8 +126,8 @@ glabel func_80024D54
/* 025B20 80024F20 846E00A8 */ lh $t6, 0xa8($v1)
/* 025B24 80024F24 00086A40 */ sll $t5, $t0, 9
/* 025B28 80024F28 25A8FFFF */ addiu $t0, $t5, -1
/* 025B2C 80024F2C 3C02800E */ lui $v0, %hi(D_800DC91C) # $v0, 0x800e
/* 025B30 80024F30 2442C91C */ addiu $v0, %lo(D_800DC91C) # addiu $v0, $v0, -0x36e4
/* 025B2C 80024F2C 3C02800E */ lui $v0, %hi(gCurrentLevelHeader2) # $v0, 0x800e
/* 025B30 80024F30 2442C91C */ addiu $v0, %lo(gCurrentLevelHeader2) # addiu $v0, $v0, -0x36e4
/* 025B34 80024F34 3C058012 */ lui $a1, %hi(D_8011B114) # $a1, 0x8012
/* 025B38 80024F38 3C068012 */ lui $a2, %hi(D_8011B110) # $a2, 0x8012
/* 025B3C 80024F3C 24C6B110 */ addiu $a2, %lo(D_8011B110) # addiu $a2, $a2, -0x4ef0
@@ -275,8 +275,8 @@ glabel func_80024D54
/* 025D54 80025154 02202025 */ move $a0, $s1
/* 025D58 80025158 0C01A102 */ jal func_80068408
/* 025D5C 8002515C 02402825 */ move $a1, $s2
/* 025D60 80025160 3C0E800E */ lui $t6, %hi(D_800DC91C) # $t6, 0x800e
/* 025D64 80025164 8DCEC91C */ lw $t6, %lo(D_800DC91C)($t6)
/* 025D60 80025160 3C0E800E */ lui $t6, %hi(gCurrentLevelHeader2) # $t6, 0x800e
/* 025D64 80025164 8DCEC91C */ lw $t6, %lo(gCurrentLevelHeader2)($t6)
/* 025D68 80025168 2401FFFF */ li $at, -1
/* 025D6C 8002516C 81D80049 */ lb $t8, 0x49($t6)
/* 025D70 80025170 00000000 */ nop
@@ -315,8 +315,8 @@ glabel func_80024D54
/* 025DE8 800251E8 2404FFFF */ li $a0, -1
/* 025DEC 800251EC 0C02ACC2 */ jal func_800AB308
/* 025DF0 800251F0 2405FE00 */ li $a1, -512
/* 025DF4 800251F4 3C0B800E */ lui $t3, %hi(D_800DC91C) # $t3, 0x800e
/* 025DF8 800251F8 8D6BC91C */ lw $t3, %lo(D_800DC91C)($t3)
/* 025DF4 800251F4 3C0B800E */ lui $t3, %hi(gCurrentLevelHeader2) # $t3, 0x800e
/* 025DF8 800251F8 8D6BC91C */ lw $t3, %lo(gCurrentLevelHeader2)($t3)
/* 025DFC 800251FC 2A610002 */ slti $at, $s3, 2
/* 025E00 80025200 856C0090 */ lh $t4, 0x90($t3)
/* 025E04 80025204 00000000 */ nop
@@ -10,8 +10,8 @@ glabel func_80028050
/* 028C70 80028070 AFB30020 */ sw $s3, 0x20($sp)
/* 028C74 80028074 0C01A748 */ jal func_80069D20
/* 028C78 80028078 AFB2001C */ sw $s2, 0x1c($sp)
/* 028C7C 8002807C 3C0E800E */ lui $t6, %hi(D_800DC91C) # $t6, 0x800e
/* 028C80 80028080 8DCEC91C */ lw $t6, %lo(D_800DC91C)($t6)
/* 028C7C 8002807C 3C0E800E */ lui $t6, %hi(gCurrentLevelHeader2) # $t6, 0x800e
/* 028C80 80028080 8DCEC91C */ lw $t6, %lo(gCurrentLevelHeader2)($t6)
/* 028C84 80028084 00409025 */ move $s2, $v0
/* 028C88 80028088 8DC300A4 */ lw $v1, 0xa4($t6)
/* 028C8C 8002808C 00000000 */ nop
@@ -41,10 +41,10 @@ glabel func_80028050
/* 028CEC 800280EC 46040302 */ mul.s $f12, $f0, $f4
/* 028CF0 800280F0 C7A6010C */ lwc1 $f6, 0x10c($sp)
/* 028CF4 800280F4 8FA70074 */ lw $a3, 0x74($sp)
/* 028CF8 800280F8 3C04800E */ lui $a0, %hi(D_800DC91C) # $a0, 0x800e
/* 028CF8 800280F8 3C04800E */ lui $a0, %hi(gCurrentLevelHeader2) # $a0, 0x800e
/* 028CFC 800280FC 46083082 */ mul.s $f2, $f6, $f8
/* 028D00 80028100 46006487 */ neg.s $f18, $f12
/* 028D04 80028104 8C84C91C */ lw $a0, %lo(D_800DC91C)($a0)
/* 028D04 80028104 8C84C91C */ lw $a0, %lo(gCurrentLevelHeader2)($a0)
/* 028D08 80028108 46029200 */ add.s $f8, $f18, $f2
/* 028D0C 8002810C 46029281 */ sub.s $f10, $f18, $f2
/* 028D10 80028110 E7A80030 */ swc1 $f8, 0x30($sp)
@@ -325,8 +325,8 @@ glabel func_80028050
/* 02915C 8002855C 03236021 */ addu $t4, $t9, $v1
/* 029160 80028560 0C01A102 */ jal func_80068408
/* 029164 80028564 A7AC0124 */ sh $t4, 0x124($sp)
/* 029168 80028568 3C04800E */ lui $a0, %hi(D_800DC91C) # $a0, 0x800e
/* 02916C 8002856C 8C84C91C */ lw $a0, %lo(D_800DC91C)($a0)
/* 029168 80028568 3C04800E */ lui $a0, %hi(gCurrentLevelHeader2) # $a0, 0x800e
/* 02916C 8002856C 8C84C91C */ lw $a0, %lo(gCurrentLevelHeader2)($a0)
/* 029170 80028570 2403FFFF */ li $v1, -1
/* 029174 80028574 8C8A0074 */ lw $t2, 0x74($a0)
/* 029178 80028578 2406FFFF */ li $a2, -1
@@ -1,7 +1,7 @@
glabel func_800289B8
/* 0295B8 800289B8 27BDFFC8 */ addiu $sp, $sp, -0x38
/* 0295BC 800289BC 3C02800E */ lui $v0, %hi(D_800DC91C) # $v0, 0x800e
/* 0295C0 800289C0 8C42C91C */ lw $v0, %lo(D_800DC91C)($v0)
/* 0295BC 800289BC 3C02800E */ lui $v0, %hi(gCurrentLevelHeader2) # $v0, 0x800e
/* 0295C0 800289C0 8C42C91C */ lw $v0, %lo(gCurrentLevelHeader2)($v0)
/* 0295C4 800289C4 AFBF001C */ sw $ra, 0x1c($sp)
/* 0295C8 800289C8 AFB00018 */ sw $s0, 0x18($sp)
/* 0295CC 800289CC 904E00C1 */ lbu $t6, 0xc1($v0)
@@ -1,59 +1,5 @@
glabel func_80029D14
/* 02A914 80029D14 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 02A918 80029D18 3C08800E */ lui $t0, %hi(gCurrentLevelModel) # $t0, 0x800e
/* 02A91C 80029D1C 8D08C918 */ lw $t0, %lo(gCurrentLevelModel)($t0)
/* 02A920 80029D20 AFBF0014 */ sw $ra, 0x14($sp)
/* 02A924 80029D24 AFA60020 */ sw $a2, 0x20($sp)
/* 02A928 80029D28 850E001A */ lh $t6, 0x1a($t0)
/* 02A92C 80029D2C 00803825 */ move $a3, $a0
/* 02A930 80029D30 008E082A */ slt $at, $a0, $t6
/* 02A934 80029D34 10200026 */ beqz $at, .L80029DD0
/* 02A938 80029D38 3C038012 */ lui $v1, %hi(D_8011B0D4) # $v1, 0x8012
/* 02A93C 80029D3C 8C63B0D4 */ lw $v1, %lo(D_8011B0D4)($v1)
/* 02A940 80029D40 2401FFFF */ li $at, -1
/* 02A944 80029D44 1061000B */ beq $v1, $at, .L80029D74
/* 02A948 80029D48 24020001 */ li $v0, 1
/* 02A94C 80029D4C 8D0F0010 */ lw $t7, 0x10($t0)
/* 02A950 80029D50 0004C8C3 */ sra $t9, $a0, 3
/* 02A954 80029D54 01E3C021 */ addu $t8, $t7, $v1
/* 02A958 80029D58 03194821 */ addu $t1, $t8, $t9
/* 02A95C 80029D5C 91220000 */ lbu $v0, ($t1)
/* 02A960 80029D60 308A0007 */ andi $t2, $a0, 7
/* 02A964 80029D64 01421006 */ srlv $v0, $v0, $t2
/* 02A968 80029D68 304B00FF */ andi $t3, $v0, 0xff
/* 02A96C 80029D6C 10000001 */ b .L80029D74
/* 02A970 80029D70 01601025 */ move $v0, $t3
.L80029D74:
/* 02A974 80029D74 304C0001 */ andi $t4, $v0, 1
/* 02A978 80029D78 11800015 */ beqz $t4, .L80029DD0
/* 02A97C 80029D7C 00077080 */ sll $t6, $a3, 2
/* 02A980 80029D80 8D0D0008 */ lw $t5, 8($t0)
/* 02A984 80029D84 01C77023 */ subu $t6, $t6, $a3
/* 02A988 80029D88 000E7080 */ sll $t6, $t6, 2
/* 02A98C 80029D8C AFA70018 */ sw $a3, 0x18($sp)
/* 02A990 80029D90 AFA5001C */ sw $a1, 0x1c($sp)
/* 02A994 80029D94 0C00A97E */ jal func_8002A5F8
/* 02A998 80029D98 01AE2021 */ addu $a0, $t5, $t6
/* 02A99C 80029D9C 8FA5001C */ lw $a1, 0x1c($sp)
/* 02A9A0 80029DA0 8FA70018 */ lw $a3, 0x18($sp)
/* 02A9A4 80029DA4 1040000B */ beqz $v0, .L80029DD4
/* 02A9A8 80029DA8 8FBF0014 */ lw $ra, 0x14($sp)
/* 02A9AC 80029DAC 8FAF0020 */ lw $t7, 0x20($sp)
/* 02A9B0 80029DB0 8CB80000 */ lw $t8, ($a1)
/* 02A9B4 80029DB4 00000000 */ nop
/* 02A9B8 80029DB8 01F8C821 */ addu $t9, $t7, $t8
/* 02A9BC 80029DBC A3270000 */ sb $a3, ($t9)
/* 02A9C0 80029DC0 8CA90000 */ lw $t1, ($a1)
/* 02A9C4 80029DC4 00000000 */ nop
/* 02A9C8 80029DC8 252A0001 */ addiu $t2, $t1, 1
/* 02A9CC 80029DCC ACAA0000 */ sw $t2, ($a1)
.L80029DD0:
/* 02A9D0 80029DD0 8FBF0014 */ lw $ra, 0x14($sp)
.L80029DD4:
/* 02A9D4 80029DD4 27BD0018 */ addiu $sp, $sp, 0x18
/* 02A9D8 80029DD8 03E00008 */ jr $ra
/* 02A9DC 80029DDC 00000000 */ nop
# Unused
glabel func_80029DE0
/* 02A9E0 80029DE0 3C02800E */ lui $v0, %hi(gCurrentLevelModel) # $v0, 0x800e
/* 02A9E4 80029DE4 8C42C918 */ lw $v0, %lo(gCurrentLevelModel)($v0)
/* 02A9E8 80029DE8 00803025 */ move $a2, $a0
@@ -40,7 +40,7 @@ glabel render_level_geometry_and_objects
/* 029C2C 8002902C 00002025 */ move $a0, $zero
/* 029C30 80029030 00002825 */ move $a1, $zero
/* 029C34 80029034 27A700D8 */ addiu $a3, $sp, 0xd8
/* 029C38 80029038 0C00A6BE */ jal func_80029AF8
/* 029C38 80029038 0C00A6BE */ jal traverse_segments_bsp_tree
/* 029C3C 8002903C 24C6FFFF */ addiu $a2, $a2, -1
/* 029C40 80029040 3C10800E */ lui $s0, %hi(gCurrentLevelModel) # $s0, 0x800e
/* 029C44 80029044 8E10C918 */ lw $s0, %lo(gCurrentLevelModel)($s0)
@@ -148,9 +148,9 @@ glabel render_level_segment
/* 02A46C 8002986C 3C19FB00 */ lui $t9, 0xfb00
/* 02A470 80029870 260C0008 */ addiu $t4, $s0, 8
/* 02A474 80029874 AE4C0000 */ sw $t4, ($s2)
/* 02A478 80029878 3C0B800E */ lui $t3, %hi(D_800DC91C) # $t3, 0x800e
/* 02A478 80029878 3C0B800E */ lui $t3, %hi(gCurrentLevelHeader2) # $t3, 0x800e
/* 02A47C 8002987C AE190000 */ sw $t9, ($s0)
/* 02A480 80029880 8D6BC91C */ lw $t3, %lo(D_800DC91C)($t3)
/* 02A480 80029880 8D6BC91C */ lw $t3, %lo(gCurrentLevelHeader2)($t3)
/* 02A484 80029884 00186880 */ sll $t5, $t8, 2
/* 02A488 80029888 016D7021 */ addu $t6, $t3, $t5
/* 02A48C 8002988C 8DC20070 */ lw $v0, 0x70($t6)
@@ -179,8 +179,8 @@ glabel render_level_segment
/* 02A4E0 800298E0 00115B40 */ sll $t3, $s1, 0xd
/* 02A4E4 800298E4 05610046 */ bgez $t3, .L80029A00
/* 02A4E8 800298E8 02402025 */ move $a0, $s2
/* 02A4EC 800298EC 3C19800E */ lui $t9, %hi(D_800DC91C) # $t9, 0x800e
/* 02A4F0 800298F0 8F39C91C */ lw $t9, %lo(D_800DC91C)($t9)
/* 02A4EC 800298EC 3C19800E */ lui $t9, %hi(gCurrentLevelHeader2) # $t9, 0x800e
/* 02A4F0 800298F0 8F39C91C */ lw $t9, %lo(gCurrentLevelHeader2)($t9)
/* 02A4F4 800298F4 8E500000 */ lw $s0, ($s2)
/* 02A4F8 800298F8 8F2E00AC */ lw $t6, 0xac($t9)
/* 02A4FC 800298FC 260F0008 */ addiu $t7, $s0, 8
@@ -1,4 +1,4 @@
glabel func_80029AF8
glabel traverse_segments_bsp_tree
/* 02A6F8 80029AF8 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 02A6FC 80029AFC AFBE0040 */ sw $fp, 0x40($sp)
/* 02A700 80029B00 AFB7003C */ sw $s7, 0x3c($sp)
@@ -83,12 +83,12 @@ glabel func_80029AF8
/* 02A82C 80029C2C AFB30010 */ sw $s3, 0x10($sp)
/* 02A830 80029C30 02802825 */ move $a1, $s4
/* 02A834 80029C34 02403825 */ move $a3, $s2
/* 02A838 80029C38 0C00A6BE */ jal func_80029AF8
/* 02A838 80029C38 0C00A6BE */ jal traverse_segments_bsp_tree
/* 02A83C 80029C3C 24C6FFFF */ addiu $a2, $a2, -1
/* 02A840 80029C40 10000004 */ b .L80029C54
/* 02A844 80029C44 86040002 */ lh $a0, 2($s0)
.L80029C48:
/* 02A848 80029C48 0C00A745 */ jal func_80029D14
/* 02A848 80029C48 0C00A745 */ jal add_segment_to_order
/* 02A84C 80029C4C 02802025 */ move $a0, $s4
/* 02A850 80029C50 86040002 */ lh $a0, 2($s0)
.L80029C54:
@@ -101,7 +101,7 @@ glabel func_80029AF8
.L80029C6C:
/* 02A86C 80029C6C 02A02025 */ move $a0, $s5
/* 02A870 80029C70 02602825 */ move $a1, $s3
/* 02A874 80029C74 0C00A745 */ jal func_80029D14
/* 02A874 80029C74 0C00A745 */ jal add_segment_to_order
/* 02A878 80029C78 02403025 */ move $a2, $s2
/* 02A87C 80029C7C 1000001A */ b .L80029CE8
/* 02A880 80029C80 8FBF0044 */ lw $ra, 0x44($sp)
@@ -113,12 +113,12 @@ glabel func_80029AF8
/* 02A894 80029C94 92050005 */ lbu $a1, 5($s0)
/* 02A898 80029C98 AFB30010 */ sw $s3, 0x10($sp)
/* 02A89C 80029C9C 02A03025 */ move $a2, $s5
/* 02A8A0 80029CA0 0C00A6BE */ jal func_80029AF8
/* 02A8A0 80029CA0 0C00A6BE */ jal traverse_segments_bsp_tree
/* 02A8A4 80029CA4 02403825 */ move $a3, $s2
/* 02A8A8 80029CA8 10000004 */ b .L80029CBC
/* 02A8AC 80029CAC 86040000 */ lh $a0, ($s0)
.L80029CB0:
/* 02A8B0 80029CB0 0C00A745 */ jal func_80029D14
/* 02A8B0 80029CB0 0C00A745 */ jal add_segment_to_order
/* 02A8B4 80029CB4 02A02025 */ move $a0, $s5
/* 02A8B8 80029CB8 86040000 */ lh $a0, ($s0)
.L80029CBC:
@@ -131,7 +131,7 @@ glabel func_80029AF8
.L80029CD4:
/* 02A8D4 80029CD4 02802025 */ move $a0, $s4
/* 02A8D8 80029CD8 02602825 */ move $a1, $s3
/* 02A8DC 80029CDC 0C00A745 */ jal func_80029D14
/* 02A8DC 80029CDC 0C00A745 */ jal add_segment_to_order
/* 02A8E0 80029CE0 02403025 */ move $a2, $s2
/* 02A8E4 80029CE4 8FBF0044 */ lw $ra, 0x44($sp)
.L80029CE8:
@@ -711,7 +711,7 @@ glabel load_level
/* 06C88C 8006BC8C 8E2E0000 */ lw $t6, ($s1)
/* 06C890 8006BC90 00000000 */ nop
/* 06C894 8006BC94 8DC400AC */ lw $a0, 0xac($t6)
/* 06C898 8006BC98 0C01FD05 */ jal func_8007F414
/* 06C898 8006BC98 0C01FD05 */ jal init_pulsating_light_data
/* 06C89C 8006BC9C 00000000 */ nop
/* 06C8A0 8006BCA0 8E230000 */ lw $v1, ($s1)
/* 06C8A4 8006BCA4 00000000 */ nop
+59 -9
View File
@@ -67,7 +67,7 @@ typedef struct TextureHeader {
/* 0x03 */ u8 unk3;
/* 0x04 */ u8 unk4;
/* 0x05 */ u8 numberOfInstances; // Always 1 in the ROM.
/* 0x06 */ u16 flags;
/* 0x06 */ s16 flags;
// 0x04 = Interlaced texture
// 0x40 = U clamp flag. 0 = Wrap, 1 = Clamp
// 0x80 = V clamp flag. 0 = Wrap, 1 = Clamp
@@ -180,6 +180,30 @@ typedef struct Settings {
/* 0x0117 */ u8 display_times;
} Settings;
/* Unknown size */
typedef struct LevelHeader_70 {
u8 pad0[0x10];
/* 0x10 */ u8 red;
/* 0x11 */ u8 green;
/* 0x12 */ u8 blue;
/* 0x13 */ u8 alpha;
} LevelHeader_70;
// Used to update the pulsating lights in Spaceport Alpha
typedef struct PulsatingLightDataFrame {
u16 value;
u16 time;
} PulsatingLightDataFrame;
typedef struct PulsatingLightData {
u16 numberFrames;
u16 currentFrame;
u16 time;
u16 totalTime;
s32 outColorValue;
PulsatingLightDataFrame frames[1]; // Length varies based on numberFrames.
} PulsatingLightData;
/* Size: 0xC4 bytes */
typedef struct LevelHeader {
/* 0x00 */ s8 world;
@@ -222,8 +246,9 @@ typedef struct LevelHeader {
/* 0x53 */ u8 unk53;
/* 0x54 */ u16 instruments;
/* 0x56 */ u8 pad56[0x1E];
/* 0x56 */ u8 pad56[0x1A];
/* 0x70 */ LevelHeader_70 *unk70;
/* 0x74 */ s8 *unk74[7];
// Weather related?
@@ -243,7 +268,7 @@ typedef struct LevelHeader {
/* 0xA4 */ s32 unkA4;
/* 0xA8 */ u16 unkA8;
/* 0xAA */ u16 unkAA;
/* 0xAC */ s8 *unkAC;
/* 0xAC */ PulsatingLightData *pulseLightData;
/* 0xB0 */ s16 unkB0;
/* 0xB2 */ u8 unkB2;
@@ -327,13 +352,20 @@ typedef struct TriangleBatchInfo {
/* 0x00 */ u8 textureIndex; // 0xFF = No texture
/* 0x02 */ s16 verticesOffset;
/* 0x04 */ s16 facesOffset;
/* 0x06 */ u8 unk6;
/* 0x06 */ u8 unk6; // 0xFF = vertex colors, otherwise use dynamic lighting normals (Objects only)
/* 0x07 */ u8 unk7;
/* 0x08 */ u32 flags;
// 0x00000002 = ???
// 0x00000008 = ???
// 0x00000010 = Depth write
// 0x00000100 = Hidden/Invisible geometry
// 0x00000200 = ??? Used in func_80060AC8
// 0x00000800 = ???
// 0x00002000 = ???
// 0x00008000 = Environment mapping
// 0x00010000 = Texture is animated
// 0x00040000 = Has pulsating light data.
// 0x70000000 = bits 28, 29, & 30 are some kind of index. Not used in any levels.
} TriangleBatchInfo;
/* Size: 8 bytes */
@@ -392,13 +424,22 @@ typedef struct LevelModelSegmentBoundingBox {
s16 unkA;
} LevelModelSegmentBoundingBox;
/* Size: 8 bytes */
typedef struct BspTreeNode {
s16 leftNode; // less than split value
s16 rightNode; // greater or equal to split value?
u8 splitType; // 0 = Camera X, 1 = Camera Y, 2 = Camera Z
u8 segmentIndex;
s16 splitValue; // Decides left or right
} BspTreeNode;
typedef struct LevelModel {
/* 0x00 */ TextureInfo *textures;
/* 0x04 */ LevelModelSegment *segments;
/* 0x08 */ LevelModelSegmentBoundingBox *segmentsBoundingBoxes;
/* 0x0C */ s32 unkC;
/* 0x10 */ s32 *segmentsBitfields;
/* 0x14 */ s32 *segmentsBspTree;
/* 0x10 */ u8 *segmentsBitfields;
/* 0x14 */ BspTreeNode *segmentsBspTree;
/* 0x18 */ s16 numberOfTextures;
/* 0x1A */ s16 numberOfSegments;
u8 pad1C[4];
@@ -425,7 +466,10 @@ typedef struct Object_40 {
f32 unk4;
f32 unk8;
f32 unkC;
u8 pad10[0x2D];
u8 pad10[0x20];
u16 unk30;
s16 unk32;
u8 pad34[0x9];
u8 unk3D;
u8 pad3E[0x15];
s8 unk53;
@@ -449,6 +493,12 @@ typedef struct Object_4C {
s8 unk17;
} Object_4C;
typedef struct Object_50 {
u8 pad0[0x8];
s16 unk8;
s16 unkA;
} Object_50;
typedef struct Object_54 {
s32 unk0;
u8 unk4;
@@ -559,7 +609,7 @@ typedef struct Object {
/* 0x0000 */ s16 y_rotation;
/* 0x0002 */ s16 x_rotation;
/* 0x0004 */ s16 z_rotation;
/* 0x0006 */ s16 unk6;
/* 0x0006 */ s16 unk6; // Flags?
/* 0x0008 */ f32 scale;
/* 0x000C */ f32 x_position;
/* 0x0010 */ f32 y_position;
@@ -594,7 +644,7 @@ typedef struct Object {
/* 0x0048 */ s16 unk48;
/* 0x004A */ s16 unk4A;
/* 0x004C */ Object_4C *unk4C; //player + 0x318
/* 0x0050 */ void *unk50; //player + 0x2F4
/* 0x0050 */ Object_50 *unk50; //player + 0x2F4
/* 0x0054 */ Object_54 *unk54; //player + 0x2C0
/* 0x0058 */ void *unk58; //player + 0x304
/* 0x005C */ Object_5C *unk5C;
+32 -23
View File
@@ -1304,33 +1304,42 @@ void func_8007F1E8(unk8007F1E8 *arg0) {
GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007F24C.s")
typedef struct unk8007F414_E {
u16 unk0;
u16 unk2;
} unk8007F414_E;
typedef struct unk8007F414 {
u16 unk0;
u16 unk2;
u16 unk4;
u16 unk6;
s32 unk8;
u16 unkC;
unk8007F414_E unkE[1];
} unk8007F414;
void func_8007F414(unk8007F414 *arg0) {
void init_pulsating_light_data(PulsatingLightData *data) {
s32 i;
arg0->unk2 = 0;
arg0->unk4 = 0;
arg0->unk6 = 0;
arg0->unk8 = arg0->unkC;
for (i = 0; i < arg0->unk0; i++) {
arg0->unk6 += arg0->unkE[i].unk0;
data->currentFrame = 0;
data->time = 0;
data->totalTime = 0;
data->outColorValue = data->frames[0].value;
for (i = 0; i < data->numberFrames; i++) {
data->totalTime += data->frames[i].time;
}
}
GLOBAL_ASM("asm/non_matchings/textures_sprites/func_8007F460.s")
void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta) {
s32 thisFrameIndex, nextFrameIndex;
if (data->numberFrames > 1) {
data->time += timeDelta;
while (data->time >= data->totalTime) {
data->time -= data->totalTime;
}
while (data->time >= data->frames[data->currentFrame].time) {
data->time -= data->frames[data->currentFrame].time;
data->currentFrame++;
if (data->currentFrame >= data->numberFrames) {
data->currentFrame = 0;
}
}
thisFrameIndex = data->currentFrame;
nextFrameIndex = thisFrameIndex + 1;
if (nextFrameIndex >= data->numberFrames) {
nextFrameIndex = 0;
}
data->outColorValue = data->frames[thisFrameIndex].value +
((data->frames[nextFrameIndex].value * data->time) / data->frames[thisFrameIndex].time);
}
}
#ifdef NON_MATCHING
void func_8007F594(Gfx **dlist, u32 index, u32 primitiveColor, u32 environmentColor) {
+486 -55
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -23,7 +23,7 @@ extern f32 D_800DC884[10];
extern f32 D_800DC8AC[27];
extern LevelModel* gCurrentLevelModel;
extern LevelHeader *D_800DC91C;
extern LevelHeader *gCurrentLevelHeader;
extern s32 D_800DC920;
extern s32 D_800DC924;
+4 -3
View File
@@ -632,9 +632,10 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, s32 vehicleId,
gCurrentLevelHeader->unkA8 = (u16)0;
gCurrentLevelHeader->unkAA = (u16)0;
}
if ((s32)gCurrentLevelHeader->unkAC != -1) {
gCurrentLevelHeader->unkAC = get_misc_asset((s32)gCurrentLevelHeader->unkAC);
func_8007F414(gCurrentLevelHeader->unkAC);
if ((s32)gCurrentLevelHeader->pulseLightData != -1) {
// Only used in spaceport alpha for some pulsating lights.
gCurrentLevelHeader->pulseLightData = get_misc_asset((s32)gCurrentLevelHeader->pulseLightData);
init_pulsating_light_data(gCurrentLevelHeader->pulseLightData);
}
update_camera_fov(gCurrentLevelHeader->cameraFOV);
func_80077B34(gCurrentLevelHeader->bgColorRed, gCurrentLevelHeader->bgColorGreen, gCurrentLevelHeader->bgColorBlue);