mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Fully decompiled func_80023E30 & func_80034860
This commit is contained in:
@@ -1,136 +0,0 @@
|
||||
.late_rodata
|
||||
glabel jpt_800E5A3C
|
||||
.word L80023E5C, L80023E64, L80023F40, L80023F40, L80023E6C, L80023F40, L80023F14, L80023F40, L80023F40, L80023F40, L80023F40, L80023E74, L80023F14, L80023E7C, L80023F40, L80023F40, L80023E84, L80023F14, L80023F40, L80023F40, L80023F40, L80023F40, L80023F40, L80023E9C, L80023F40, L80023F14, L80023F40, L80023F40, L80023F40, L80023F14, L80023EA4, L80023EAC, L80023F40, L80023F40, L80023F40, L80023F14, L80023F40, L80023EBC, L80023EC4, L80023ECC, L80023F14, L80023F40, L80023F40, L80023F40, L80023ED4, L80023F40, L80023F40, L80023EDC, L80023F24, L80023EEC, L80023F24, L80023F14, L80023F40, L80023EF4, L80023F14, L80023EEC, L80023F14, L80023F40, L80023F40, L80023F40, L80023F24, L80023F2C, L80023EE4, L80023EAC, L80023F40, L80023F40, L80023EB4, L80023F14, L80023F40, L80023E8C, L80023F40, L80023E8C, L80023F40, L80023EFC, L80023F40, L80023F40, L80023E84, L80023F14, L80023F14, L80023EEC, L80023F0C, L80023F1C, L80023F40, L80023EEC, L80023F40, L80023EEC, L80023F40, L80023EAC, L80023F40, L80023F40, L80023F04, L80023F40, L80023F14, L80023F40, L80023EFC, L80023E8C, L80023E8C, L80023F14, L80023EFC, L80023EFC, L80023E94, L80023E94, L80023E94, L80023E94, L80023F40, L80023F40, L80023F40, L80023F14, L80023F34, L80023EAC, L80023E7C, L80023F40, L80023F40, L80023F3C, L80023EEC, L80023F14
|
||||
|
||||
.text
|
||||
glabel func_80023E30
|
||||
/* 024A30 80023E30 248EFFFF */ addiu $t6, $a0, -1
|
||||
/* 024A34 80023E34 2DC10074 */ sltiu $at, $t6, 0x74
|
||||
/* 024A38 80023E38 10200041 */ beqz $at, .L80023F40
|
||||
/* 024A3C 80023E3C 00001825 */ move $v1, $zero
|
||||
/* 024A40 80023E40 000E7080 */ sll $t6, $t6, 2
|
||||
/* 024A44 80023E44 3C01800E */ lui $at, %hi(jpt_800E5A3C) # $at, 0x800e
|
||||
/* 024A48 80023E48 002E0821 */ addu $at, $at, $t6
|
||||
/* 024A4C 80023E4C 8C2E5A3C */ lw $t6, %lo(jpt_800E5A3C)($at)
|
||||
/* 024A50 80023E50 00000000 */ nop
|
||||
/* 024A54 80023E54 01C00008 */ jr $t6
|
||||
/* 024A58 80023E58 00000000 */ nop
|
||||
glabel L80023E5C
|
||||
/* 024A5C 80023E5C 03E00008 */ jr $ra
|
||||
/* 024A60 80023E60 2402001F */ li $v0, 31
|
||||
|
||||
glabel L80023E64
|
||||
/* 024A64 80023E64 03E00008 */ jr $ra
|
||||
/* 024A68 80023E68 24020013 */ li $v0, 19
|
||||
|
||||
glabel L80023E6C
|
||||
/* 024A6C 80023E6C 03E00008 */ jr $ra
|
||||
/* 024A70 80023E70 24020016 */ li $v0, 22
|
||||
|
||||
glabel L80023E74
|
||||
/* 024A74 80023E74 03E00008 */ jr $ra
|
||||
/* 024A78 80023E78 2402001B */ li $v0, 27
|
||||
|
||||
glabel L80023E7C
|
||||
/* 024A7C 80023E7C 03E00008 */ jr $ra
|
||||
/* 024A80 80023E80 24020030 */ li $v0, 48
|
||||
|
||||
glabel L80023E84
|
||||
/* 024A84 80023E84 03E00008 */ jr $ra
|
||||
/* 024A88 80023E88 24020012 */ li $v0, 18
|
||||
|
||||
glabel L80023E8C
|
||||
/* 024A8C 80023E8C 03E00008 */ jr $ra
|
||||
/* 024A90 80023E90 2402003B */ li $v0, 59
|
||||
|
||||
glabel L80023E94
|
||||
/* 024A94 80023E94 03E00008 */ jr $ra
|
||||
/* 024A98 80023E98 2402003A */ li $v0, 58
|
||||
|
||||
glabel L80023E9C
|
||||
/* 024A9C 80023E9C 03E00008 */ jr $ra
|
||||
/* 024AA0 80023EA0 24020004 */ li $v0, 4
|
||||
|
||||
glabel L80023EA4
|
||||
/* 024AA4 80023EA4 03E00008 */ jr $ra
|
||||
/* 024AA8 80023EA8 2402001B */ li $v0, 27
|
||||
|
||||
glabel L80023EAC
|
||||
/* 024AAC 80023EAC 03E00008 */ jr $ra
|
||||
/* 024AB0 80023EB0 24020012 */ li $v0, 18
|
||||
|
||||
glabel L80023EB4
|
||||
/* 024AB4 80023EB4 03E00008 */ jr $ra
|
||||
/* 024AB8 80023EB8 24020030 */ li $v0, 48
|
||||
|
||||
glabel L80023EBC
|
||||
/* 024ABC 80023EBC 03E00008 */ jr $ra
|
||||
/* 024AC0 80023EC0 24020039 */ li $v0, 57
|
||||
|
||||
glabel L80023EC4
|
||||
/* 024AC4 80023EC4 03E00008 */ jr $ra
|
||||
/* 024AC8 80023EC8 24020012 */ li $v0, 18
|
||||
|
||||
glabel L80023ECC
|
||||
/* 024ACC 80023ECC 03E00008 */ jr $ra
|
||||
/* 024AD0 80023ED0 24020009 */ li $v0, 9
|
||||
|
||||
glabel L80023ED4
|
||||
/* 024AD4 80023ED4 03E00008 */ jr $ra
|
||||
/* 024AD8 80023ED8 24020012 */ li $v0, 18
|
||||
|
||||
glabel L80023EDC
|
||||
/* 024ADC 80023EDC 03E00008 */ jr $ra
|
||||
/* 024AE0 80023EE0 24020009 */ li $v0, 9
|
||||
|
||||
glabel L80023EE4
|
||||
/* 024AE4 80023EE4 03E00008 */ jr $ra
|
||||
/* 024AE8 80023EE8 24020009 */ li $v0, 9
|
||||
|
||||
glabel L80023EEC
|
||||
/* 024AEC 80023EEC 03E00008 */ jr $ra
|
||||
/* 024AF0 80023EF0 2402000B */ li $v0, 11
|
||||
|
||||
glabel L80023EF4
|
||||
/* 024AF4 80023EF4 03E00008 */ jr $ra
|
||||
/* 024AF8 80023EF8 2402000B */ li $v0, 11
|
||||
|
||||
glabel L80023EFC
|
||||
/* 024AFC 80023EFC 03E00008 */ jr $ra
|
||||
/* 024B00 80023F00 24020031 */ li $v0, 49
|
||||
|
||||
glabel L80023F04
|
||||
/* 024B04 80023F04 03E00008 */ jr $ra
|
||||
/* 024B08 80023F08 24020001 */ li $v0, 1
|
||||
|
||||
glabel L80023F0C
|
||||
/* 024B0C 80023F0C 03E00008 */ jr $ra
|
||||
/* 024B10 80023F10 2402000A */ li $v0, 10
|
||||
|
||||
glabel L80023F14
|
||||
/* 024B14 80023F14 03E00008 */ jr $ra
|
||||
/* 024B18 80023F18 24020010 */ li $v0, 16
|
||||
|
||||
glabel L80023F1C
|
||||
/* 024B1C 80023F1C 03E00008 */ jr $ra
|
||||
/* 024B20 80023F20 24020012 */ li $v0, 18
|
||||
|
||||
glabel L80023F24
|
||||
/* 024B24 80023F24 03E00008 */ jr $ra
|
||||
/* 024B28 80023F28 24020002 */ li $v0, 2
|
||||
|
||||
glabel L80023F2C
|
||||
/* 024B2C 80023F2C 03E00008 */ jr $ra
|
||||
/* 024B30 80023F30 2402001B */ li $v0, 27
|
||||
|
||||
glabel L80023F34
|
||||
/* 024B34 80023F34 03E00008 */ jr $ra
|
||||
/* 024B38 80023F38 2402000B */ li $v0, 11
|
||||
|
||||
glabel L80023F3C
|
||||
/* 024B3C 80023F3C 24030001 */ li $v1, 1
|
||||
.L80023F40:
|
||||
glabel L80023F40
|
||||
/* 024B40 80023F40 03E00008 */ jr $ra
|
||||
/* 024B44 80023F44 00601025 */ move $v0, $v1
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
.late_rodata
|
||||
glabel D_800E5FF8
|
||||
.double 1.2
|
||||
glabel D_800E6000
|
||||
.float 0.2
|
||||
|
||||
.text
|
||||
glabel func_80034860
|
||||
/* 035460 80034860 44852000 */ mtc1 $a1, $f4
|
||||
/* 035464 80034864 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000
|
||||
/* 035468 80034868 468020A0 */ cvt.s.w $f2, $f4
|
||||
/* 03546C 8003486C 8DEF0300 */ lw $t7, %lo(osTvType)($t7)
|
||||
/* 035470 80034870 27BDFFA0 */ addiu $sp, $sp, -0x60
|
||||
/* 035474 80034874 AFB00028 */ sw $s0, 0x28($sp)
|
||||
/* 035478 80034878 00808025 */ move $s0, $a0
|
||||
/* 03547C 8003487C AFBF002C */ sw $ra, 0x2c($sp)
|
||||
/* 035480 80034880 AFA50064 */ sw $a1, 0x64($sp)
|
||||
/* 035484 80034884 00004025 */ move $t0, $zero
|
||||
/* 035488 80034888 15E00007 */ bnez $t7, .L800348A8
|
||||
/* 03548C 8003488C 46001006 */ mov.s $f0, $f2
|
||||
/* 035490 80034890 3C01800E */ lui $at, %hi(D_800E5FF8 + 4) # $at, 0x800e
|
||||
/* 035494 80034894 C4295FF8 */ lwc1 $f9, %lo(D_800E5FF8)($at)
|
||||
/* 035498 80034898 C4285FFC */ lwc1 $f8, %lo(D_800E5FF8 + 4)($at)
|
||||
/* 03549C 8003489C 460011A1 */ cvt.d.s $f6, $f2
|
||||
/* 0354A0 800348A0 46283282 */ mul.d $f10, $f6, $f8
|
||||
/* 0354A4 800348A4 46205020 */ cvt.s.d $f0, $f10
|
||||
.L800348A8:
|
||||
/* 0354A8 800348A8 C612001C */ lwc1 $f18, 0x1c($s0)
|
||||
/* 0354AC 800348AC C610000C */ lwc1 $f16, 0xc($s0)
|
||||
/* 0354B0 800348B0 46009102 */ mul.s $f4, $f18, $f0
|
||||
/* 0354B4 800348B4 3C014110 */ li $at, 0x41100000 # 9.000000
|
||||
/* 0354B8 800348B8 2605000C */ addiu $a1, $s0, 0xc
|
||||
/* 0354BC 800348BC 24040001 */ li $a0, 1
|
||||
/* 0354C0 800348C0 46048180 */ add.s $f6, $f16, $f4
|
||||
/* 0354C4 800348C4 27A60040 */ addiu $a2, $sp, 0x40
|
||||
/* 0354C8 800348C8 E7A60040 */ swc1 $f6, 0x40($sp)
|
||||
/* 0354CC 800348CC C60A0020 */ lwc1 $f10, 0x20($s0)
|
||||
/* 0354D0 800348D0 C6080010 */ lwc1 $f8, 0x10($s0)
|
||||
/* 0354D4 800348D4 46005482 */ mul.s $f18, $f10, $f0
|
||||
/* 0354D8 800348D8 2407FFFF */ li $a3, -1
|
||||
/* 0354DC 800348DC 46124400 */ add.s $f16, $f8, $f18
|
||||
/* 0354E0 800348E0 44819000 */ mtc1 $at, $f18
|
||||
/* 0354E4 800348E4 E7B00044 */ swc1 $f16, 0x44($sp)
|
||||
/* 0354E8 800348E8 C6060024 */ lwc1 $f6, 0x24($s0)
|
||||
/* 0354EC 800348EC C6040014 */ lwc1 $f4, 0x14($s0)
|
||||
/* 0354F0 800348F0 46003282 */ mul.s $f10, $f6, $f0
|
||||
/* 0354F4 800348F4 E7A0005C */ swc1 $f0, 0x5c($sp)
|
||||
/* 0354F8 800348F8 A3A8004F */ sb $t0, 0x4f($sp)
|
||||
/* 0354FC 800348FC AFA50034 */ sw $a1, 0x34($sp)
|
||||
/* 035500 80034900 460A2200 */ add.s $f8, $f4, $f10
|
||||
/* 035504 80034904 E7B2003C */ swc1 $f18, 0x3c($sp)
|
||||
/* 035508 80034908 0C00C44C */ jal func_80031130
|
||||
/* 03550C 8003490C E7A80048 */ swc1 $f8, 0x48($sp)
|
||||
/* 035510 80034910 8FA40034 */ lw $a0, 0x34($sp)
|
||||
/* 035514 80034914 24180001 */ li $t8, 1
|
||||
/* 035518 80034918 27B90038 */ addiu $t9, $sp, 0x38
|
||||
/* 03551C 8003491C AFA00038 */ sw $zero, 0x38($sp)
|
||||
/* 035520 80034920 AFB90014 */ sw $t9, 0x14($sp)
|
||||
/* 035524 80034924 AFB80010 */ sw $t8, 0x10($sp)
|
||||
/* 035528 80034928 27A50040 */ addiu $a1, $sp, 0x40
|
||||
/* 03552C 8003492C 27A6003C */ addiu $a2, $sp, 0x3c
|
||||
/* 035530 80034930 0C00C580 */ jal func_80031600
|
||||
/* 035534 80034934 27A7004E */ addiu $a3, $sp, 0x4e
|
||||
/* 035538 80034938 8FA90038 */ lw $t1, 0x38($sp)
|
||||
/* 03553C 8003493C 83A8004F */ lb $t0, 0x4f($sp)
|
||||
/* 035540 80034940 C7A0005C */ lwc1 $f0, 0x5c($sp)
|
||||
/* 035544 80034944 11200014 */ beqz $t1, .L80034998
|
||||
/* 035548 80034948 00000000 */ nop
|
||||
/* 03554C 8003494C C7B00040 */ lwc1 $f16, 0x40($sp)
|
||||
/* 035550 80034950 C606000C */ lwc1 $f6, 0xc($s0)
|
||||
/* 035554 80034954 C6120010 */ lwc1 $f18, 0x10($s0)
|
||||
/* 035558 80034958 46068101 */ sub.s $f4, $f16, $f6
|
||||
/* 03555C 8003495C 00000000 */ nop
|
||||
/* 035560 80034960 46002283 */ div.s $f10, $f4, $f0
|
||||
/* 035564 80034964 E60A001C */ swc1 $f10, 0x1c($s0)
|
||||
/* 035568 80034968 C7A80044 */ lwc1 $f8, 0x44($sp)
|
||||
/* 03556C 8003496C C60A0014 */ lwc1 $f10, 0x14($s0)
|
||||
/* 035570 80034970 46124401 */ sub.s $f16, $f8, $f18
|
||||
/* 035574 80034974 00000000 */ nop
|
||||
/* 035578 80034978 46008183 */ div.s $f6, $f16, $f0
|
||||
/* 03557C 8003497C E6060020 */ swc1 $f6, 0x20($s0)
|
||||
/* 035580 80034980 C7A40048 */ lwc1 $f4, 0x48($sp)
|
||||
/* 035584 80034984 00000000 */ nop
|
||||
/* 035588 80034988 460A2201 */ sub.s $f8, $f4, $f10
|
||||
/* 03558C 8003498C 00000000 */ nop
|
||||
/* 035590 80034990 46004483 */ div.s $f18, $f8, $f0
|
||||
/* 035594 80034994 E6120024 */ swc1 $f18, 0x24($s0)
|
||||
.L80034998:
|
||||
/* 035598 80034998 C610001C */ lwc1 $f16, 0x1c($s0)
|
||||
/* 03559C 8003499C C6040020 */ lwc1 $f4, 0x20($s0)
|
||||
/* 0355A0 800349A0 46008182 */ mul.s $f6, $f16, $f0
|
||||
/* 0355A4 800349A4 C6080024 */ lwc1 $f8, 0x24($s0)
|
||||
/* 0355A8 800349A8 A3A8004F */ sb $t0, 0x4f($sp)
|
||||
/* 0355AC 800349AC 02002025 */ move $a0, $s0
|
||||
/* 0355B0 800349B0 46002282 */ mul.s $f10, $f4, $f0
|
||||
/* 0355B4 800349B4 44053000 */ mfc1 $a1, $f6
|
||||
/* 0355B8 800349B8 46004482 */ mul.s $f18, $f8, $f0
|
||||
/* 0355BC 800349BC 44065000 */ mfc1 $a2, $f10
|
||||
/* 0355C0 800349C0 44079000 */ mfc1 $a3, $f18
|
||||
/* 0355C4 800349C4 0C00455C */ jal func_80011570
|
||||
/* 0355C8 800349C8 00000000 */ nop
|
||||
/* 0355CC 800349CC 8FAA0038 */ lw $t2, 0x38($sp)
|
||||
/* 0355D0 800349D0 83A8004F */ lb $t0, 0x4f($sp)
|
||||
/* 0355D4 800349D4 1140000E */ beqz $t2, .L80034A10
|
||||
/* 0355D8 800349D8 3C014210 */ li $at, 0x42100000 # 36.000000
|
||||
/* 0355DC 800349DC C6100010 */ lwc1 $f16, 0x10($s0)
|
||||
/* 0355E0 800349E0 44813000 */ mtc1 $at, $f6
|
||||
/* 0355E4 800349E4 3C01800E */ lui $at, %hi(D_800E6000) # $at, 0x800e
|
||||
/* 0355E8 800349E8 C60C000C */ lwc1 $f12, 0xc($s0)
|
||||
/* 0355EC 800349EC 8E060014 */ lw $a2, 0x14($s0)
|
||||
/* 0355F0 800349F0 C4246000 */ lwc1 $f4, %lo(D_800E6000)($at)
|
||||
/* 0355F4 800349F4 AFA00018 */ sw $zero, 0x18($sp)
|
||||
/* 0355F8 800349F8 AFA00010 */ sw $zero, 0x10($sp)
|
||||
/* 0355FC 800349FC 2407002C */ li $a3, 44
|
||||
/* 035600 80034A00 46068381 */ sub.s $f14, $f16, $f6
|
||||
/* 035604 80034A04 0C00FF11 */ jal func_8003FC44
|
||||
/* 035608 80034A08 E7A40014 */ swc1 $f4, 0x14($sp)
|
||||
/* 03560C 80034A0C 24080001 */ li $t0, 1
|
||||
.L80034A10:
|
||||
/* 035610 80034A10 8E020078 */ lw $v0, 0x78($s0)
|
||||
/* 035614 80034A14 8FAB0064 */ lw $t3, 0x64($sp)
|
||||
/* 035618 80034A18 18400003 */ blez $v0, .L80034A28
|
||||
/* 03561C 80034A1C 004B6023 */ subu $t4, $v0, $t3
|
||||
/* 035620 80034A20 10000002 */ b .L80034A2C
|
||||
/* 035624 80034A24 AE0C0078 */ sw $t4, 0x78($s0)
|
||||
.L80034A28:
|
||||
/* 035628 80034A28 24080001 */ li $t0, 1
|
||||
.L80034A2C:
|
||||
/* 03562C 80034A2C 8E03004C */ lw $v1, 0x4c($s0)
|
||||
/* 035630 80034A30 00000000 */ nop
|
||||
/* 035634 80034A34 906D0013 */ lbu $t5, 0x13($v1)
|
||||
/* 035638 80034A38 00000000 */ nop
|
||||
/* 03563C 80034A3C 29A10050 */ slti $at, $t5, 0x50
|
||||
/* 035640 80034A40 10200023 */ beqz $at, .L80034AD0
|
||||
/* 035644 80034A44 00000000 */ nop
|
||||
/* 035648 80034A48 8C620000 */ lw $v0, ($v1)
|
||||
/* 03564C 80034A4C 00000000 */ nop
|
||||
/* 035650 80034A50 1040001F */ beqz $v0, .L80034AD0
|
||||
/* 035654 80034A54 00000000 */ nop
|
||||
/* 035658 80034A58 844E0048 */ lh $t6, 0x48($v0)
|
||||
/* 03565C 80034A5C 24040001 */ li $a0, 1
|
||||
/* 035660 80034A60 148E001B */ bne $a0, $t6, .L80034AD0
|
||||
/* 035664 80034A64 2407002C */ li $a3, 44
|
||||
/* 035668 80034A68 8C430064 */ lw $v1, 0x64($v0)
|
||||
/* 03566C 80034A6C 2401FFFF */ li $at, -1
|
||||
/* 035670 80034A70 846F0000 */ lh $t7, ($v1)
|
||||
/* 035674 80034A74 24080001 */ li $t0, 1
|
||||
/* 035678 80034A78 11E10002 */ beq $t7, $at, .L80034A84
|
||||
/* 03567C 80034A7C 24190011 */ li $t9, 17
|
||||
/* 035680 80034A80 A0640187 */ sb $a0, 0x187($v1)
|
||||
.L80034A84:
|
||||
/* 035684 80034A84 8E02007C */ lw $v0, 0x7c($s0)
|
||||
/* 035688 80034A88 241800B4 */ li $t8, 180
|
||||
/* 03568C 80034A8C 10400002 */ beqz $v0, .L80034A98
|
||||
/* 035690 80034A90 3C014210 */ li $at, 0x42100000 # 36.000000
|
||||
/* 035694 80034A94 A458000C */ sh $t8, 0xc($v0)
|
||||
.L80034A98:
|
||||
/* 035698 80034A98 C60A0010 */ lwc1 $f10, 0x10($s0)
|
||||
/* 03569C 80034A9C 44814000 */ mtc1 $at, $f8
|
||||
/* 0356A0 80034AA0 C60C000C */ lwc1 $f12, 0xc($s0)
|
||||
/* 0356A4 80034AA4 8E060014 */ lw $a2, 0x14($s0)
|
||||
/* 0356A8 80034AA8 3C013F00 */ li $at, 0x3F000000 # 0.500000
|
||||
/* 0356AC 80034AAC 44819000 */ mtc1 $at, $f18
|
||||
/* 0356B0 80034AB0 A3A8004F */ sb $t0, 0x4f($sp)
|
||||
/* 0356B4 80034AB4 AFA00018 */ sw $zero, 0x18($sp)
|
||||
/* 0356B8 80034AB8 AFB90010 */ sw $t9, 0x10($sp)
|
||||
/* 0356BC 80034ABC 46085381 */ sub.s $f14, $f10, $f8
|
||||
/* 0356C0 80034AC0 0C00FF11 */ jal func_8003FC44
|
||||
/* 0356C4 80034AC4 E7B20014 */ swc1 $f18, 0x14($sp)
|
||||
/* 0356C8 80034AC8 83A8004F */ lb $t0, 0x4f($sp)
|
||||
/* 0356CC 80034ACC 00000000 */ nop
|
||||
.L80034AD0:
|
||||
/* 0356D0 80034AD0 11000004 */ beqz $t0, .L80034AE4
|
||||
/* 0356D4 80034AD4 8FBF002C */ lw $ra, 0x2c($sp)
|
||||
/* 0356D8 80034AD8 0C003FEE */ jal gParticlePtrList_addObject
|
||||
/* 0356DC 80034ADC 02002025 */ move $a0, $s0
|
||||
/* 0356E0 80034AE0 8FBF002C */ lw $ra, 0x2c($sp)
|
||||
.L80034AE4:
|
||||
/* 0356E4 80034AE4 8FB00028 */ lw $s0, 0x28($sp)
|
||||
/* 0356E8 80034AE8 03E00008 */ jr $ra
|
||||
/* 0356EC 80034AEC 27BD0060 */ addiu $sp, $sp, 0x60
|
||||
|
||||
+4
-1
@@ -461,7 +461,10 @@ typedef struct LevelObjectEntryCommon {
|
||||
} LevelObjectEntryCommon;
|
||||
|
||||
typedef struct Object_3C {
|
||||
u8 pad0[0x8];
|
||||
u8 pad0[0x2];
|
||||
s16 unk2;
|
||||
s16 unk4;
|
||||
s16 unk6;
|
||||
s8 unk8;
|
||||
u8 pad9[0x4];
|
||||
u8 unkD;
|
||||
|
||||
+130
-105
@@ -819,7 +819,7 @@ s32 func_800113BC() {
|
||||
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_800113CC.s")
|
||||
|
||||
void func_80011560(void) {
|
||||
s32 func_80011560(void) {
|
||||
D_800DC848 = 1;
|
||||
}
|
||||
|
||||
@@ -1769,111 +1769,136 @@ void func_800238BC(Object *arg0, void *arg1) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
s32 func_80023E30(s32 arg0) {
|
||||
switch (arg0 - 1) {
|
||||
case 0x00:
|
||||
return 0x1F;
|
||||
case 0x01:
|
||||
return 0x13;
|
||||
case 0x04:
|
||||
return 0x16;
|
||||
case 0x0B:
|
||||
return 0x1B;
|
||||
case 0x0D:
|
||||
case 0x6E:
|
||||
return 0x30;
|
||||
case 0x10:
|
||||
case 0x4C:
|
||||
return 0x12;
|
||||
case 0x45:
|
||||
case 0x47:
|
||||
case 0x5F:
|
||||
case 0x60:
|
||||
return 0x3B;
|
||||
case 0x64:
|
||||
case 0x65:
|
||||
case 0x66:
|
||||
case 0x67:
|
||||
return 0x3A;
|
||||
case 0x17:
|
||||
return 0x04;
|
||||
case 0x1E:
|
||||
return 0x1B;
|
||||
case 0x1F:
|
||||
case 0x3F:
|
||||
case 0x57:
|
||||
case 0x6D:
|
||||
return 0x12;
|
||||
case 0x42:
|
||||
return 0x30;
|
||||
case 0x25:
|
||||
return 0x39;
|
||||
case 0x26:
|
||||
return 0x12;
|
||||
case 0x27:
|
||||
return 0x09;
|
||||
case 0x2C:
|
||||
return 0x12;
|
||||
case 0x2F:
|
||||
return 0x09;
|
||||
case 0x3E:
|
||||
return 0x09;
|
||||
case 0x31:
|
||||
case 0x37:
|
||||
case 0x4F:
|
||||
case 0x53:
|
||||
case 0x55:
|
||||
case 0x72:
|
||||
return 0x0B;
|
||||
case 0x35:
|
||||
return 0x0B;
|
||||
case 0x49:
|
||||
case 0x5E:
|
||||
case 0x62:
|
||||
case 0x63:
|
||||
return 0x31;
|
||||
case 0x5A:
|
||||
return 0x01;
|
||||
case 0x50:
|
||||
return 0x0A;
|
||||
case 0x06:
|
||||
case 0x0C:
|
||||
case 0x11:
|
||||
case 0x19:
|
||||
case 0x1D:
|
||||
case 0x23:
|
||||
case 0x28:
|
||||
case 0x33:
|
||||
case 0x36:
|
||||
case 0x38:
|
||||
case 0x43:
|
||||
case 0x4D:
|
||||
case 0x4E:
|
||||
case 0x5C:
|
||||
case 0x61:
|
||||
case 0x6B:
|
||||
case 0x73:
|
||||
return 0x10;
|
||||
case 0x51:
|
||||
return 0x12;
|
||||
case 0x30:
|
||||
case 0x32:
|
||||
case 0x3C:
|
||||
return 0x02;
|
||||
case 0x3D:
|
||||
return 0x1B;
|
||||
case 0x6C:
|
||||
return 0x0B;
|
||||
case 0x71:
|
||||
return 0x01;
|
||||
default:
|
||||
return 0x00;
|
||||
}
|
||||
s32 func_80023E30(s32 arg0){
|
||||
s32 value = 0;
|
||||
switch (arg0 - 1){
|
||||
case 0x00:
|
||||
value = 0x1F;
|
||||
break;
|
||||
case 0x01:
|
||||
value = 0x13;
|
||||
break;
|
||||
case 0x04:
|
||||
value = 0x16;
|
||||
break;
|
||||
case 0x0B:
|
||||
value = 0x1B;
|
||||
break;
|
||||
case 0x0D:
|
||||
case 0x6E:
|
||||
value = 0x30;
|
||||
break;
|
||||
case 0x10:
|
||||
case 0x4C:
|
||||
value = 0x12;
|
||||
break;
|
||||
case 0x45:
|
||||
case 0x47:
|
||||
case 0x5F:
|
||||
case 0x60:
|
||||
value = 0x3B;
|
||||
break;
|
||||
case 0x64:
|
||||
case 0x65:
|
||||
case 0x66:
|
||||
case 0x67:
|
||||
value = 0x3A;
|
||||
break;
|
||||
case 0x17:
|
||||
value = 0x04;
|
||||
break;
|
||||
case 0x1E:
|
||||
value = 0x1B;
|
||||
break;
|
||||
case 0x1F:
|
||||
case 0x3F:
|
||||
case 0x57:
|
||||
case 0x6D:
|
||||
value = 0x12;
|
||||
break;
|
||||
case 0x42:
|
||||
value = 0x30;
|
||||
break;
|
||||
case 0x25:
|
||||
value = 0x39;
|
||||
break;
|
||||
case 0x26:
|
||||
value = 0x12;
|
||||
break;
|
||||
case 0x27:
|
||||
value = 0x09;
|
||||
break;
|
||||
case 0x2C:
|
||||
value = 0x12;
|
||||
break;
|
||||
case 0x2F:
|
||||
value = 0x09;
|
||||
break;
|
||||
case 0x3E:
|
||||
value = 0x09;
|
||||
break;
|
||||
case 0x31:
|
||||
case 0x37:
|
||||
case 0x4F:
|
||||
case 0x53:
|
||||
case 0x55:
|
||||
case 0x72:
|
||||
value = 0x0B;
|
||||
break;
|
||||
case 0x35:
|
||||
value = 0x0B;
|
||||
break;
|
||||
case 0x49:
|
||||
case 0x5E:
|
||||
case 0x62:
|
||||
case 0x63:
|
||||
value = 0x31;
|
||||
break;
|
||||
case 0x5A:
|
||||
value = 0x01;
|
||||
break;
|
||||
case 0x50:
|
||||
value = 0x0A;
|
||||
break;
|
||||
case 0x06:
|
||||
case 0x0C:
|
||||
case 0x11:
|
||||
case 0x19:
|
||||
case 0x1D:
|
||||
case 0x23:
|
||||
case 0x28:
|
||||
case 0x33:
|
||||
case 0x36:
|
||||
case 0x38:
|
||||
case 0x43:
|
||||
case 0x4D:
|
||||
case 0x4E:
|
||||
case 0x5C:
|
||||
case 0x61:
|
||||
case 0x6B:
|
||||
case 0x73:
|
||||
value = 0x10;
|
||||
break;
|
||||
case 0x51:
|
||||
value = 0x12;
|
||||
break;
|
||||
case 0x30:
|
||||
case 0x32:
|
||||
case 0x3C:
|
||||
value = 0x02;
|
||||
break;
|
||||
case 0x3D:
|
||||
value = 0x1B;
|
||||
break;
|
||||
case 0x6C:
|
||||
value = 0x0B;
|
||||
break;
|
||||
case 0x71:
|
||||
value = 0x01;
|
||||
break;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_00BC20/func_80023E30.s")
|
||||
#endif
|
||||
|
||||
void run_object_loop_func(Object *obj, s32 arg1) {
|
||||
func_800B76B8(1, obj->unk4A);
|
||||
|
||||
@@ -151,7 +151,7 @@ void func_80011390(void);
|
||||
s32 func_8001139C();
|
||||
s32 func_800113AC();
|
||||
s32 func_800113BC();
|
||||
void func_80011560(void);
|
||||
s32 func_80011560(void);
|
||||
void func_80012C30(void);
|
||||
void func_80012C3C(Gfx** dlist);
|
||||
void func_80012C98(Gfx **dlist);
|
||||
|
||||
+455
-2
@@ -212,7 +212,152 @@ void func_80033F44(Object *arg0, s32 arg1) {
|
||||
arg0->unk4C->unk11 = 0;
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// Has a minor regalloc issue with obj4C_obj.
|
||||
|
||||
typedef struct Object80033F60_64 {
|
||||
u8 pad0[0x1C];
|
||||
s32 *unk1C;
|
||||
u8 pad20[0x8];
|
||||
s32 unk28;
|
||||
} Object80033F60_64;
|
||||
|
||||
typedef struct Object80033F60_4C_64 {
|
||||
s16 unk0;
|
||||
u8 pad2[0x185];
|
||||
s8 unk187;
|
||||
u8 pad188[0x7C];
|
||||
s16 unk204;
|
||||
} Object80033F60_4C_64;
|
||||
|
||||
s32 func_80011560(void);
|
||||
void func_80011570(Object*, f32, f32, f32);
|
||||
void func_8003FC44(f32, f32, f32, s32, s32, f32, s32);
|
||||
s16 func_80070750(f32, f32);
|
||||
s32 func_8002AD08(f32, f32**, s32);
|
||||
void func_80001D04(u16, s32 *);
|
||||
void func_8000488C(s32);
|
||||
void func_800AFC3C(Object *, s32);
|
||||
void gParticlePtrList_addObject(Object *);
|
||||
f32 sqrtf(f32);
|
||||
|
||||
void func_80033F60(Object *obj, s32 arg1) {
|
||||
Object *obj78;
|
||||
Object_4C *obj4C;
|
||||
f32 sp7C;
|
||||
Object80033F60_4C_64 *obj4C_obj64;
|
||||
Object80033F60_64 *obj64;
|
||||
Object *obj4C_obj;
|
||||
f32 phi_f2;
|
||||
s32* temp;
|
||||
f32 sp4C[7];
|
||||
|
||||
obj78 = (Object*)obj->unk78;
|
||||
|
||||
sp7C = arg1;
|
||||
if (osTvType == TV_TYPE_PAL) {
|
||||
sp7C *= 1.2;
|
||||
}
|
||||
|
||||
if ((obj->unk48 == 116) && (obj->unk7C.word < 0)) {
|
||||
obj->x_position = 0.0f;
|
||||
obj->y_position = 0.0f;
|
||||
obj->z_position = 0.0f;
|
||||
func_80011560();
|
||||
func_80011570(obj, obj78->x_position, obj78->y_position, obj78->z_position);
|
||||
} else {
|
||||
phi_f2 = (obj78->x_position - obj->x_position) * 0.1;
|
||||
if (phi_f2 > 10.0) {
|
||||
phi_f2 = 10.0f;
|
||||
}
|
||||
if (phi_f2 < -10.0) {
|
||||
phi_f2 = -10.0f;
|
||||
}
|
||||
obj->x_velocity += (phi_f2 - obj->x_velocity) * 0.125 * sp7C;
|
||||
phi_f2 = (obj78->y_position - obj->y_position) * 0.1;
|
||||
if (phi_f2 > 10.0) {
|
||||
phi_f2 = 10.0f;
|
||||
}
|
||||
if (phi_f2 < -10.0) {
|
||||
phi_f2 = -10.0f;
|
||||
}
|
||||
obj->y_velocity += (phi_f2 - obj->y_velocity) * 0.125 * sp7C;
|
||||
phi_f2 = (obj78->z_position - obj->z_position) * 0.1;
|
||||
if (phi_f2 > 10.0) {
|
||||
phi_f2 = 10.0f;
|
||||
}
|
||||
if (phi_f2 < -10.0) {
|
||||
phi_f2 = -10.0f;
|
||||
}
|
||||
obj->z_velocity += (phi_f2 - obj->z_velocity) * 0.125 * sp7C;
|
||||
if (sqrtf((obj->x_velocity * obj->x_velocity) + (obj->z_velocity * obj->z_velocity)) > 0.5) {
|
||||
obj->y_rotation = func_80070750(obj->x_velocity, obj->z_velocity);
|
||||
obj->x_rotation -= arg1 << 9;
|
||||
}
|
||||
func_80011570(obj, obj->x_velocity * sp7C, obj->y_velocity * sp7C, obj->z_velocity * sp7C);
|
||||
if (obj->unk4A == 298 && func_8002AD08(obj->y_position, &sp4C, 0)) {
|
||||
obj->y_position = sp4C[0];
|
||||
}
|
||||
}
|
||||
obj->unk18 += arg1 * 10;
|
||||
obj64 = obj->unk64;
|
||||
obj4C = obj->unk4C;
|
||||
obj4C_obj = (Object*)obj4C->unk0; // This should be a0, not v1!
|
||||
if ((obj4C_obj != NULL) && (obj4C->unk13 < 60) && (obj4C_obj->descriptor_ptr->unk54 == 1)) {
|
||||
obj4C_obj64 = obj4C_obj->unk64;
|
||||
if (obj4C_obj64->unk0 != -1) {
|
||||
if (obj->unk48 == 108) {
|
||||
obj4C_obj64->unk187 = 1;
|
||||
obj->unk7C.word = 20;
|
||||
func_8003FC44(obj->x_position, obj->y_position, obj->z_position, 44, 17, 1.0f, 1);
|
||||
gParticlePtrList_addObject(obj);
|
||||
} else if (obj->unk7C.word > 0) {
|
||||
obj4C_obj64->unk204 = 60;
|
||||
obj->unk7C.word = -60;
|
||||
obj->unk78 = obj4C_obj;
|
||||
func_80001D04(586, &obj64->unk1C);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (obj->unk48 == 108) {
|
||||
obj->unk74 = 1;
|
||||
func_800AFC3C(obj, arg1);
|
||||
obj->unk7C.word -= arg1;
|
||||
if (obj->unk7C.word < 0) {
|
||||
if (obj->unk4A == 298) {
|
||||
gParticlePtrList_addObject(obj);
|
||||
func_8003FC44(obj->x_position, obj->y_position, obj->z_position, 44, 17, 1.0f, 1);
|
||||
}
|
||||
obj->scale *= 0.9;
|
||||
if (obj->scale < 0.5) {
|
||||
gParticlePtrList_addObject(obj);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (obj->unk7C.word < 0) {
|
||||
obj->unk7C.word += arg1;
|
||||
if (obj->unk7C.word >= 0) {
|
||||
obj->unk7C.word = 0;
|
||||
}
|
||||
} else {
|
||||
obj->unk7C.word -= arg1;
|
||||
if (obj->unk7C.word <= 0) {
|
||||
obj->unk7C.word = 0;
|
||||
}
|
||||
}
|
||||
if (obj->unk7C.word == 0) {
|
||||
temp = obj64->unk1C;
|
||||
if (temp != 0) {
|
||||
func_8000488C(temp);
|
||||
}
|
||||
func_80009558(341, obj->x_position, obj->y_position, obj->z_position, 4, 0);
|
||||
gParticlePtrList_addObject(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_032760/func_80033F60.s")
|
||||
#endif
|
||||
|
||||
void func_80034530(Object *arg0, unk80034530 *arg1) {
|
||||
Object_64 *temp;
|
||||
@@ -236,7 +381,88 @@ void func_80034844(Object *arg0, s32 arg1) {
|
||||
arg0->unk4C->unk11 = 0;
|
||||
}
|
||||
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_032760/func_80034860.s")
|
||||
void func_80031130(s32, f32*, f32*, s32);
|
||||
void func_80031600(f32*, f32*, f32*, s8*, s32, s8*);
|
||||
void func_8003FC44(f32 arg0, f32 arg1, f32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6);
|
||||
|
||||
typedef struct Object_7C_80034860 {
|
||||
u8 pad0[0xC];
|
||||
s16 unkC;
|
||||
} Object_7C_80034860;
|
||||
|
||||
typedef struct Object_64_80034860 {
|
||||
s16 unk0;
|
||||
u8 unk4[0x185];
|
||||
s8 unk187;
|
||||
} Object_64_80034860;
|
||||
|
||||
void func_80034860(Object *obj, s32 arg1) {
|
||||
f32 sp5C;
|
||||
|
||||
Object *obj4C_obj;
|
||||
|
||||
Object_7C_80034860 *obj7C;
|
||||
Object_64_80034860 *obj4C_obj64;
|
||||
|
||||
s8 sp4F; // Boolean
|
||||
s8 sp4E;
|
||||
f32 sp48;
|
||||
f32 sp44;
|
||||
f32 sp40;
|
||||
f32 sp3C;
|
||||
s32 sp38; // Boolean
|
||||
|
||||
|
||||
sp4F = FALSE;
|
||||
sp5C = arg1;
|
||||
if (osTvType == TV_TYPE_PAL) {
|
||||
sp5C *= 1.2;
|
||||
}
|
||||
sp40 = obj->x_position + (obj->x_velocity * sp5C);
|
||||
sp44 = obj->y_position + (obj->y_velocity * sp5C);
|
||||
sp48 = obj->z_position + (obj->z_velocity * sp5C);
|
||||
sp3C = 9.0f;
|
||||
|
||||
func_80031130(1, &obj->x_position, &sp40, -1);
|
||||
sp38 = FALSE;
|
||||
func_80031600(&obj->x_position, &sp40, &sp3C, &sp4E, 1, &sp38);
|
||||
if (sp38) {
|
||||
obj->x_velocity = (sp40 - obj->x_position) / sp5C;
|
||||
obj->y_velocity = (sp44 - obj->y_position) / sp5C;
|
||||
obj->z_velocity = (sp48 - obj->z_position) / sp5C;
|
||||
}
|
||||
func_80011570(obj, obj->x_velocity * sp5C, obj->y_velocity * sp5C, obj->z_velocity * sp5C);
|
||||
if (sp38) {
|
||||
func_8003FC44(obj->x_position, obj->y_position - 36.0f, obj->z_position, 44, 0, 0.2, 0);
|
||||
sp4F = TRUE;
|
||||
}
|
||||
|
||||
if (obj->unk78 > 0) {
|
||||
obj->unk78 -= arg1;
|
||||
} else {
|
||||
sp4F = TRUE;
|
||||
}
|
||||
|
||||
if (obj->unk4C->unk13 < 80) {
|
||||
obj4C_obj = (Object*)obj->unk4C->unk0;
|
||||
if (obj4C_obj && (obj4C_obj->unk48 == 1)) {
|
||||
obj4C_obj64 = obj4C_obj->unk64;
|
||||
sp4F = TRUE;
|
||||
if (obj4C_obj64->unk0 != -1) {
|
||||
obj4C_obj64->unk187 = 1;
|
||||
}
|
||||
obj7C = (Object_7C_80034860 *)obj->unk7C.word;
|
||||
if (obj7C) {
|
||||
obj7C->unkC = 180;
|
||||
}
|
||||
sp4F = TRUE;
|
||||
func_8003FC44(obj->x_position, obj->y_position - 36.0f, obj->z_position, 44, 17, 0.5, 0);
|
||||
}
|
||||
}
|
||||
if (sp4F) {
|
||||
gParticlePtrList_addObject(obj);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80034AF0(Object *arg0, u8 *arg1) {
|
||||
f32 phi_f0 = (s32)(arg1[9] & 0xFF);
|
||||
@@ -255,7 +481,73 @@ void func_80034B4C(unk80034B4C *arg0, s32 arg1) {
|
||||
void func_80034B68(s32 arg0, s32 arg1) {
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
|
||||
// Has regalloc & stack issues.
|
||||
|
||||
f32 func_800707C4(s16);
|
||||
f32 func_800707F8(s16);
|
||||
Object **get_object_struct_array(s32 *count);
|
||||
|
||||
void func_80034B74(Object *obj, s32 arg1) {
|
||||
Object **objList;
|
||||
Object_3C_80034B74 *obj3C;
|
||||
Object_64_80034B74 *curObj64;
|
||||
s32 i;
|
||||
s32 numberOfObjects;
|
||||
f32 xDiff;
|
||||
f32 yDiff;
|
||||
f32 zDiff;
|
||||
f32 temp0;
|
||||
f32 temp1;
|
||||
f32 temp2;
|
||||
f32 temp3;
|
||||
f32 temp4;
|
||||
f32 temp5;
|
||||
f32 tempf0;
|
||||
u8 new_var2;
|
||||
|
||||
obj3C = obj->unk3C_a.unk3C;
|
||||
objList = get_object_struct_array(&numberOfObjects);
|
||||
temp0 = func_800707F8((((0, obj3C->unkB)) << 8) * (-1));
|
||||
temp1 = func_800707C4((obj3C->unkB << 8) * (-1));
|
||||
temp2 = obj3C->unk8 * 3;
|
||||
temp3 = obj3C->unk9 * 3;
|
||||
temp4 = obj3C->unkA * 3;
|
||||
for (i = 0; i < numberOfObjects; i++)
|
||||
{
|
||||
xDiff = objList[i]->x_position - obj->x_position;
|
||||
yDiff = objList[i]->y_position - obj->y_position;
|
||||
zDiff = objList[i]->z_position - obj->z_position;
|
||||
if (((-temp3) < yDiff) && (yDiff < temp3))
|
||||
{
|
||||
temp5 = (xDiff * temp0) + (zDiff * temp1);
|
||||
if (((-temp2) < temp5) && (temp5 < temp2))
|
||||
{
|
||||
temp5 = ((-xDiff) * temp1) + (zDiff * temp0);
|
||||
if (((-temp4) < (((-xDiff) * temp1) + (zDiff * temp0))) && (temp5 < temp4))
|
||||
{
|
||||
temp5 = temp3 / 2;
|
||||
curObj64 = objList[i]->unk64;
|
||||
curObj64->unk1FE = obj3C->unkC;
|
||||
curObj64->unk1FF = obj3C->unkD;
|
||||
if ((temp5 < yDiff) && (curObj64->unk1FE == 1))
|
||||
{
|
||||
new_var2 = curObj64->unk1FF;
|
||||
tempf0 = (new_var2 & 0xFF) * ((f32) (1.0 - ((yDiff - temp5) / temp5)));
|
||||
curObj64->unk1FF = new_var2 * ((f32) (1.0 - ((yDiff - temp5) / temp5)));
|
||||
if (tempf0 < 0.0f)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_032760/func_80034B74.s")
|
||||
#endif
|
||||
|
||||
void func_80034E70(Object *arg0, u8 *arg1) {
|
||||
arg0->unk4C->unk14 = 1;
|
||||
@@ -263,7 +555,168 @@ void func_80034E70(Object *arg0, u8 *arg1) {
|
||||
arg0->y_rotation = arg1[8] << 6 << 4; // Not sure about the values here.
|
||||
}
|
||||
|
||||
#ifdef NON_EQUIVALENT
|
||||
|
||||
void func_80001D04(u16, s32 *);
|
||||
f32 sqrtf(f32);
|
||||
void func_80001D04(u16, s32 *);
|
||||
f32 sqrtf(f32);
|
||||
u32 func_80001C08(void);
|
||||
void func_80001D04(u16, s32 *);
|
||||
Object *func_8000EA54(unk80027FC4 *, s32);
|
||||
void func_8005A3B0(void);
|
||||
void func_8006F254(void);
|
||||
void func_8009CF68(s32 arg0);
|
||||
s32 func_8009CFEC(u32 arg0);
|
||||
void func_800A3870(void);
|
||||
void func_800AB1AC(s32 arg0);
|
||||
void func_800AB1D4(u8 arg0);
|
||||
void func_800C31EC(s32);
|
||||
s32 func_800C3400(void);
|
||||
LevelHeader *get_current_level_header(void);
|
||||
Settings *get_settings(void);
|
||||
void play_sound(u8 arg0);
|
||||
void set_music_fade_timer(s32 time);
|
||||
void set_sndfx_player_voice_limit(u8 voiceLimit);
|
||||
f32 sqrtf(f32);
|
||||
|
||||
typedef struct Object_64_80034E9C {
|
||||
s32 unk0;
|
||||
s16 unk4;
|
||||
} Object_64_80034E9C;
|
||||
|
||||
typedef struct Object_54_80034E9C {
|
||||
u8 pad0[0x28];
|
||||
f32 unk28;
|
||||
f32 unk2C;
|
||||
} Object_54_80034E9C;
|
||||
|
||||
// Has regalloc & stack issues.
|
||||
|
||||
// Trophy Cabinet behavior loop
|
||||
void func_80034E9C(Object *obj, s32 arg1) {
|
||||
s32 sp34;
|
||||
s32 isTrophyRaceAvaliable;
|
||||
s32 raceType;
|
||||
unk80027FC4 sp44;
|
||||
Settings *settings;
|
||||
LevelHeader *curLevelHeader;
|
||||
Object_64_80034E9C *obj64;
|
||||
Object *trophyObj;
|
||||
Object *playerObj;
|
||||
f32 xDiff;
|
||||
f32 zDiff;
|
||||
s32 new_var2;
|
||||
|
||||
settings = get_settings();
|
||||
curLevelHeader = get_current_level_header();
|
||||
obj64 = obj->unk64;
|
||||
|
||||
// Show trophy inside the cabinet
|
||||
if (obj->unk7C.word == 0) {
|
||||
raceType = curLevelHeader->race_type;
|
||||
if ((raceType != 7) && (raceType != 6)) { // Make sure the current level is not a cutscene.
|
||||
obj->unk7C.word = 1;
|
||||
if ((settings->trophies >> (((settings->worldId - 1) ^ 0) * 2)) & 3) {
|
||||
sp44.unk0 = 128;
|
||||
sp44.unk2 = obj->unk3C_a.unk3C->unk2;
|
||||
sp44.unk4 = obj->unk3C_a.unk3C->unk4;
|
||||
sp44.unk6 = obj->unk3C_a.unk3C->unk6;
|
||||
sp44.unk1 = 8;
|
||||
trophyObj = func_8000EA54(&sp44, 1);
|
||||
if (trophyObj) {
|
||||
trophyObj->unk3C_a.unk3C = (void *) 0;
|
||||
trophyObj->y_rotation = obj->y_rotation;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
((Object_54_80034E9C *) obj->unk54)->unk2C = 0.612f;
|
||||
((Object_54_80034E9C *) obj->unk54)->unk28 = 0.0f;
|
||||
|
||||
playerObj = get_object_struct(0);
|
||||
if (playerObj) {
|
||||
xDiff = obj->x_position - playerObj->x_position;
|
||||
zDiff = playerObj->z_position - obj->z_position;
|
||||
sqrtf((xDiff * xDiff) + (zDiff * zDiff)); // Distance on X & Z axes. Not used?
|
||||
|
||||
new_var2 = settings->bosses;
|
||||
new_var2 |= 0x800; // Why OR with 0x800?
|
||||
|
||||
// Check if all the balloons have been collected.
|
||||
isTrophyRaceAvaliable = (settings->balloonsPtr[settings->worldId] < 8) ^ 1;
|
||||
if (isTrophyRaceAvaliable) {
|
||||
isTrophyRaceAvaliable = ((1 << (settings->worldId + 6)) & new_var2) != 0;
|
||||
}
|
||||
|
||||
// Hit detection between cabinet & player?
|
||||
if ((((obj->unk78 == 0) && (!func_800C3400())) && obj->unk5C->unk100) && (obj64->unk4 == 0)) {
|
||||
// A hit has been detected at this point.
|
||||
if (isTrophyRaceAvaliable) {
|
||||
obj->unk78 = 1;
|
||||
func_80001D04(303, 0);
|
||||
func_800A3870();
|
||||
}
|
||||
else
|
||||
{
|
||||
func_800C31EC(4);
|
||||
obj64->unk4 = 180;
|
||||
obj64->unk0 = 140;
|
||||
set_sndfx_player_voice_limit(16);
|
||||
set_music_fade_timer(-8);
|
||||
play_sound(17);
|
||||
}
|
||||
}
|
||||
if ((obj64->unk0 != 0) && (func_80001C08() == 0)) {
|
||||
if (arg1 < obj64->unk0) {
|
||||
obj64->unk0 -= arg1;
|
||||
}
|
||||
else
|
||||
{
|
||||
obj64->unk0 = 0;
|
||||
set_music_fade_timer(8);
|
||||
set_sndfx_player_voice_limit(6);
|
||||
}
|
||||
}
|
||||
if (obj->unk5C->unk100 || func_800C3400()) {
|
||||
obj64->unk4 = 180;
|
||||
}
|
||||
if (obj64->unk4 > 0) {
|
||||
obj64->unk4 -= arg1;
|
||||
}
|
||||
else
|
||||
{
|
||||
obj64->unk4 = 0;
|
||||
}
|
||||
if (obj->unk78 == 1) {
|
||||
func_800AB1AC(3);
|
||||
func_800AB1D4(0);
|
||||
sp34 = func_8009CFEC(4);
|
||||
if (sp34 != 0) {
|
||||
obj->unk78 = 0;
|
||||
func_8009CF68(4);
|
||||
if (sp34 == 1) {
|
||||
func_8006F254();
|
||||
obj->unk78 = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
func_800AB1D4(1);
|
||||
}
|
||||
}
|
||||
func_8005A3B0();
|
||||
}
|
||||
obj->unk5C->unk100 = NULL;
|
||||
if (isTrophyRaceAvaliable) {
|
||||
// Changes lighting/color of the cabinet?
|
||||
((Object_54_80034E9C *) obj->unk54)->unk28 = 0.552f;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/unknown_032760/func_80034E9C.s")
|
||||
#endif
|
||||
|
||||
void func_8003522C(Object *arg0, s32 arg1) {
|
||||
arg0->unk4C->unk14 = 2;
|
||||
@@ -703,7 +1156,7 @@ void func_800388D4(Object *arg0, s32 arg1) {
|
||||
Object_64_800388D4 *playerObj64 = playerObj->unk64;
|
||||
temp_a0 = playerObj64->unk0;
|
||||
if ((temp_a0 != -1) && (get_buttons_pressed_from_player(temp_a0) & Z_TRIG)) {
|
||||
func_800C31EC(arg0->unk78 & 0xFF, arg0);
|
||||
func_800C31EC(arg0->unk78 & 0xFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,22 @@ typedef struct unk80034B4C {
|
||||
s32 unk78;
|
||||
} unk80034B4C;
|
||||
|
||||
typedef struct Object_3C_80034B74 {
|
||||
u8 pad0[0x8];
|
||||
u8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
u8 unkB;
|
||||
u8 unkC;
|
||||
u8 unkD;
|
||||
} Object_3C_80034B74;
|
||||
|
||||
typedef struct Object_64_80034B74 {
|
||||
u8 pad0[0x1FE];
|
||||
u8 unk1FE;
|
||||
u8 unk1FF;
|
||||
} Object_64_80034B74;
|
||||
|
||||
typedef struct unk8003564C {
|
||||
s8 unk0;
|
||||
s8 unk1;
|
||||
|
||||
Reference in New Issue
Block a user