diff --git a/Makefile b/Makefile index 03dba07a..bd9b3edc 100755 --- a/Makefile +++ b/Makefile @@ -311,6 +311,7 @@ $(BUILD_DIR)/lib/src/al/env.o: MIPSISET := -mips1 ####################### MATH UTIL ######################### $(BUILD_DIR)/src/math_util.o: MIPSISET := -mips2 +$(BUILD_DIR)/src/collision.o: MIPSISET := -mips2 ######################## Targets ############################# diff --git a/asm/unknown_031D30/func_80031130.s b/asm/collision/func_80031130.s similarity index 100% rename from asm/unknown_031D30/func_80031130.s rename to asm/collision/func_80031130.s diff --git a/asm/unknown_031D30/func_800314DC.s b/asm/collision/func_800314DC.s similarity index 100% rename from asm/unknown_031D30/func_800314DC.s rename to asm/collision/func_800314DC.s diff --git a/asm/unknown_031D30/func_80031600.s b/asm/collision/func_80031600.s similarity index 99% rename from asm/unknown_031D30/func_80031600.s rename to asm/collision/func_80031600.s index 0d1aadda..343da3f6 100644 --- a/asm/unknown_031D30/func_80031600.s +++ b/asm/collision/func_80031600.s @@ -1,3 +1,18 @@ +.section .rodata + +glabel D_800E5F60 +.float -0.1 +glabel D_800E5F64 +.float -0.1 +glabel D_800E5F68 +.float 0.707 +glabel D_800E5F6C +.float 0.45 +glabel D_800E5F70 +.float -0.1 + +.section .text + glabel func_80031600 /* 032200 80031600 24080001 */ li $t0, 1 /* 032204 80031604 A3A80001 */ sb $t0, 1($sp) diff --git a/asm/non_matchings/objects/func_800113CC.s b/asm/non_matchings/objects/func_800113CC.s index a1a91169..74b52a44 100644 --- a/asm/non_matchings/objects/func_800113CC.s +++ b/asm/non_matchings/objects/func_800113CC.s @@ -66,7 +66,7 @@ glabel func_800113CC /* 0120C0 800114C0 C62E0010 */ lwc1 $f14, 0x10($s1) /* 0120C4 800114C4 8E260014 */ lw $a2, 0x14($s1) /* 0120C8 800114C8 4407A000 */ mfc1 $a3, $f20 -/* 0120CC 800114CC 0C01A785 */ jal func_80069E14 +/* 0120CC 800114CC 0C01A785 */ jal set_camera_shake_by_distance /* 0120D0 800114D0 E7B60010 */ swc1 $f22, 0x10($sp) /* 0120D4 800114D4 320C0001 */ andi $t4, $s0, 1 /* 0120D8 800114D8 11800003 */ beqz $t4, .L800114E8 diff --git a/asm/non_matchings/particles/func_800B0698.s b/asm/non_matchings/particles/func_800B0698.s deleted file mode 100644 index 33f6d8ab..00000000 --- a/asm/non_matchings/particles/func_800B0698.s +++ /dev/null @@ -1,349 +0,0 @@ -glabel func_800B0698 -/* 0B1298 800B0698 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0B129C 800B069C AFBF001C */ sw $ra, 0x1c($sp) -/* 0B12A0 800B06A0 AFB00018 */ sw $s0, 0x18($sp) -/* 0B12A4 800B06A4 AFA40030 */ sw $a0, 0x30($sp) -/* 0B12A8 800B06A8 84AF0008 */ lh $t7, 8($a1) -/* 0B12AC 800B06AC 3C0E800E */ lui $t6, %hi(gParticlesAssetTable) # $t6, 0x800e -/* 0B12B0 800B06B0 8DCE2CF0 */ lw $t6, %lo(gParticlesAssetTable)($t6) -/* 0B12B4 800B06B4 000FC080 */ sll $t8, $t7, 2 -/* 0B12B8 800B06B8 01D8C821 */ addu $t9, $t6, $t8 -/* 0B12BC 800B06BC 8F230000 */ lw $v1, ($t9) -/* 0B12C0 800B06C0 24010004 */ li $at, 4 -/* 0B12C4 800B06C4 90680000 */ lbu $t0, ($v1) -/* 0B12C8 800B06C8 00A03025 */ move $a2, $a1 -/* 0B12CC 800B06CC 11010003 */ beq $t0, $at, .L800B06DC -/* 0B12D0 800B06D0 24040004 */ li $a0, 4 -/* 0B12D4 800B06D4 10000131 */ b .L800B0B9C -/* 0B12D8 800B06D8 00001025 */ move $v0, $zero -.L800B06DC: -/* 0B12DC 800B06DC 8CC70000 */ lw $a3, ($a2) -/* 0B12E0 800B06E0 AFA60034 */ sw $a2, 0x34($sp) -/* 0B12E4 800B06E4 AFA3002C */ sw $v1, 0x2c($sp) -/* 0B12E8 800B06E8 0C02C72E */ jal func_800B1CB8 -/* 0B12EC 800B06EC AFA70020 */ sw $a3, 0x20($sp) -/* 0B12F0 800B06F0 8FA3002C */ lw $v1, 0x2c($sp) -/* 0B12F4 800B06F4 8FA60034 */ lw $a2, 0x34($sp) -/* 0B12F8 800B06F8 8FA70020 */ lw $a3, 0x20($sp) -/* 0B12FC 800B06FC 14400003 */ bnez $v0, .L800B070C -/* 0B1300 800B0700 00408025 */ move $s0, $v0 -/* 0B1304 800B0704 10000125 */ b .L800B0B9C -/* 0B1308 800B0708 02001025 */ move $v0, $s0 -.L800B070C: -/* 0B130C 800B070C 8FA90030 */ lw $t1, 0x30($sp) -/* 0B1310 800B0710 240B8000 */ li $t3, -32768 -/* 0B1314 800B0714 852A002E */ lh $t2, 0x2e($t1) -/* 0B1318 800B0718 A44B0006 */ sh $t3, 6($v0) -/* 0B131C 800B071C A44A002E */ sh $t2, 0x2e($v0) -/* 0B1320 800B0720 906C0001 */ lbu $t4, 1($v1) -/* 0B1324 800B0724 00000000 */ nop -/* 0B1328 800B0728 A04C0039 */ sb $t4, 0x39($v0) -/* 0B132C 800B072C 946D0002 */ lhu $t5, 2($v1) -/* 0B1330 800B0730 00000000 */ nop -/* 0B1334 800B0734 AC4D0040 */ sw $t5, 0x40($v0) -/* 0B1338 800B0738 8FAF0030 */ lw $t7, 0x30($sp) -/* 0B133C 800B073C AC460070 */ sw $a2, 0x70($v0) -/* 0B1340 800B0740 AC4F003C */ sw $t7, 0x3c($v0) -/* 0B1344 800B0744 C4640010 */ lwc1 $f4, 0x10($v1) -/* 0B1348 800B0748 C4E60050 */ lwc1 $f6, 0x50($a3) -/* 0B134C 800B074C 31AB0800 */ andi $t3, $t5, 0x800 -/* 0B1350 800B0750 46062202 */ mul.s $f8, $f4, $f6 -/* 0B1354 800B0754 44802000 */ mtc1 $zero, $f4 -/* 0B1358 800B0758 E4480008 */ swc1 $f8, 8($v0) -/* 0B135C 800B075C C4F00054 */ lwc1 $f16, 0x54($a3) -/* 0B1360 800B0760 C46A0010 */ lwc1 $f10, 0x10($v1) -/* 0B1364 800B0764 00000000 */ nop -/* 0B1368 800B0768 46105482 */ mul.s $f18, $f10, $f16 -/* 0B136C 800B076C E4520028 */ swc1 $f18, 0x28($v0) -/* 0B1370 800B0770 846E0008 */ lh $t6, 8($v1) -/* 0B1374 800B0774 A0400038 */ sb $zero, 0x38($v0) -/* 0B1378 800B0778 E4440034 */ swc1 $f4, 0x34($v0) -/* 0B137C 800B077C A44E003A */ sh $t6, 0x3a($v0) -/* 0B1380 800B0780 90780014 */ lbu $t8, 0x14($v1) -/* 0B1384 800B0784 00000000 */ nop -/* 0B1388 800B0788 A058006C */ sb $t8, 0x6c($v0) -/* 0B138C 800B078C 90790015 */ lbu $t9, 0x15($v1) -/* 0B1390 800B0790 00000000 */ nop -/* 0B1394 800B0794 A059006D */ sb $t9, 0x6d($v0) -/* 0B1398 800B0798 90680016 */ lbu $t0, 0x16($v1) -/* 0B139C 800B079C 00000000 */ nop -/* 0B13A0 800B07A0 A048006E */ sb $t0, 0x6e($v0) -/* 0B13A4 800B07A4 90690017 */ lbu $t1, 0x17($v1) -/* 0B13A8 800B07A8 11600016 */ beqz $t3, .L800B0804 -/* 0B13AC 800B07AC A049006F */ sb $t1, 0x6f($v0) -/* 0B13B0 800B07B0 8FAC0030 */ lw $t4, 0x30($sp) -/* 0B13B4 800B07B4 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0B13B8 800B07B8 8D840054 */ lw $a0, 0x54($t4) -/* 0B13BC 800B07BC 00000000 */ nop -/* 0B13C0 800B07C0 10800010 */ beqz $a0, .L800B0804 -/* 0B13C4 800B07C4 00000000 */ nop -/* 0B13C8 800B07C8 C4860000 */ lwc1 $f6, ($a0) -/* 0B13CC 800B07CC 44814000 */ mtc1 $at, $f8 -/* 0B13D0 800B07D0 00000000 */ nop -/* 0B13D4 800B07D4 46083282 */ mul.s $f10, $f6, $f8 -/* 0B13D8 800B07D8 444DF800 */ cfc1 $t5, $31 -/* 0B13DC 800B07DC 00000000 */ nop -/* 0B13E0 800B07E0 35A10003 */ ori $at, $t5, 3 -/* 0B13E4 800B07E4 38210002 */ xori $at, $at, 2 -/* 0B13E8 800B07E8 44C1F800 */ ctc1 $at, $31 -/* 0B13EC 800B07EC 00000000 */ nop -/* 0B13F0 800B07F0 46005424 */ cvt.w.s $f16, $f10 -/* 0B13F4 800B07F4 440F8000 */ mfc1 $t7, $f16 -/* 0B13F8 800B07F8 44CDF800 */ ctc1 $t5, $31 -/* 0B13FC 800B07FC 10000003 */ b .L800B080C -/* 0B1400 800B0800 A44F004A */ sh $t7, 0x4a($v0) -.L800B0804: -/* 0B1404 800B0804 240E00FF */ li $t6, 255 -/* 0B1408 800B0808 A44E004A */ sh $t6, 0x4a($v0) -.L800B080C: -/* 0B140C 800B080C 8478000E */ lh $t8, 0xe($v1) -/* 0B1410 800B0810 00000000 */ nop -/* 0B1414 800B0814 A4580060 */ sh $t8, 0x60($v0) -/* 0B1418 800B0818 84D90004 */ lh $t9, 4($a2) -/* 0B141C 800B081C 00000000 */ nop -/* 0B1420 800B0820 33280100 */ andi $t0, $t9, 0x100 -/* 0B1424 800B0824 11000004 */ beqz $t0, .L800B0838 -/* 0B1428 800B0828 00000000 */ nop -/* 0B142C 800B082C 84C9000A */ lh $t1, 0xa($a2) -/* 0B1430 800B0830 10000005 */ b .L800B0848 -/* 0B1434 800B0834 A449005C */ sh $t1, 0x5c($v0) -.L800B0838: -/* 0B1438 800B0838 906A000C */ lbu $t2, 0xc($v1) -/* 0B143C 800B083C 00000000 */ nop -/* 0B1440 800B0840 000A5A00 */ sll $t3, $t2, 8 -/* 0B1444 800B0844 A44B005C */ sh $t3, 0x5c($v0) -.L800B0848: -/* 0B1448 800B0848 906C000C */ lbu $t4, 0xc($v1) -/* 0B144C 800B084C 00000000 */ nop -/* 0B1450 800B0850 298100FF */ slti $at, $t4, 0xff -/* 0B1454 800B0854 1020000F */ beqz $at, .L800B0894 -/* 0B1458 800B0858 00000000 */ nop -/* 0B145C 800B085C 8C4D0040 */ lw $t5, 0x40($v0) -/* 0B1460 800B0860 00000000 */ nop -/* 0B1464 800B0864 31AF1000 */ andi $t7, $t5, 0x1000 -/* 0B1468 800B0868 11E00006 */ beqz $t7, .L800B0884 -/* 0B146C 800B086C 00000000 */ nop -/* 0B1470 800B0870 844E0006 */ lh $t6, 6($v0) -/* 0B1474 800B0874 00000000 */ nop -/* 0B1478 800B0878 35D80100 */ ori $t8, $t6, 0x100 -/* 0B147C 800B087C 10000005 */ b .L800B0894 -/* 0B1480 800B0880 A4580006 */ sh $t8, 6($v0) -.L800B0884: -/* 0B1484 800B0884 84590006 */ lh $t9, 6($v0) -/* 0B1488 800B0888 00000000 */ nop -/* 0B148C 800B088C 37280080 */ ori $t0, $t9, 0x80 -/* 0B1490 800B0890 A4480006 */ sh $t0, 6($v0) -.L800B0894: -/* 0B1494 800B0894 84450060 */ lh $a1, 0x60($v0) -/* 0B1498 800B0898 8444003A */ lh $a0, 0x3a($v0) -/* 0B149C 800B089C 00000000 */ nop -/* 0B14A0 800B08A0 00A4082A */ slt $at, $a1, $a0 -/* 0B14A4 800B08A4 10200014 */ beqz $at, .L800B08F8 -/* 0B14A8 800B08A8 00857823 */ subu $t7, $a0, $a1 -/* 0B14AC 800B08AC 9069000D */ lbu $t1, 0xd($v1) -/* 0B14B0 800B08B0 844B005C */ lh $t3, 0x5c($v0) -/* 0B14B4 800B08B4 00095200 */ sll $t2, $t1, 8 -/* 0B14B8 800B08B8 316CFFFF */ andi $t4, $t3, 0xffff -/* 0B14BC 800B08BC 014C6823 */ subu $t5, $t2, $t4 -/* 0B14C0 800B08C0 01AF001A */ div $zero, $t5, $t7 -/* 0B14C4 800B08C4 15E00002 */ bnez $t7, .L800B08D0 -/* 0B14C8 800B08C8 00000000 */ nop -/* 0B14CC 800B08CC 0007000D */ break 7 -.L800B08D0: -/* 0B14D0 800B08D0 2401FFFF */ li $at, -1 -/* 0B14D4 800B08D4 15E10004 */ bne $t7, $at, .L800B08E8 -/* 0B14D8 800B08D8 3C018000 */ lui $at, 0x8000 -/* 0B14DC 800B08DC 15A10002 */ bne $t5, $at, .L800B08E8 -/* 0B14E0 800B08E0 00000000 */ nop -/* 0B14E4 800B08E4 0006000D */ break 6 -.L800B08E8: -/* 0B14E8 800B08E8 00007012 */ mflo $t6 -/* 0B14EC 800B08EC A44E005E */ sh $t6, 0x5e($v0) -/* 0B14F0 800B08F0 10000003 */ b .L800B0900 -/* 0B14F4 800B08F4 8FA50030 */ lw $a1, 0x30($sp) -.L800B08F8: -/* 0B14F8 800B08F8 A440005E */ sh $zero, 0x5e($v0) -/* 0B14FC 800B08FC 8FA50030 */ lw $a1, 0x30($sp) -.L800B0900: -/* 0B1500 800B0900 02002025 */ move $a0, $s0 -/* 0B1504 800B0904 AFA3002C */ sw $v1, 0x2c($sp) -/* 0B1508 800B0908 AFA60034 */ sw $a2, 0x34($sp) -/* 0B150C 800B090C 0C02C0F0 */ jal func_800B03C0 -/* 0B1510 800B0910 AFA70020 */ sw $a3, 0x20($sp) -/* 0B1514 800B0914 8FA70020 */ lw $a3, 0x20($sp) -/* 0B1518 800B0918 8FA3002C */ lw $v1, 0x2c($sp) -/* 0B151C 800B091C 8CF80000 */ lw $t8, ($a3) -/* 0B1520 800B0920 8FA50030 */ lw $a1, 0x30($sp) -/* 0B1524 800B0924 8FA60034 */ lw $a2, 0x34($sp) -/* 0B1528 800B0928 33190080 */ andi $t9, $t8, 0x80 -/* 0B152C 800B092C 1320000A */ beqz $t9, .L800B0958 -/* 0B1530 800B0930 00000000 */ nop -/* 0B1534 800B0934 84E80044 */ lh $t0, 0x44($a3) -/* 0B1538 800B0938 00000000 */ nop -/* 0B153C 800B093C A6080000 */ sh $t0, ($s0) -/* 0B1540 800B0940 84E90046 */ lh $t1, 0x46($a3) -/* 0B1544 800B0944 00000000 */ nop -/* 0B1548 800B0948 A6090002 */ sh $t1, 2($s0) -/* 0B154C 800B094C 84EB0048 */ lh $t3, 0x48($a3) -/* 0B1550 800B0950 10000010 */ b .L800B0994 -/* 0B1554 800B0954 A60B0004 */ sh $t3, 4($s0) -.L800B0958: -/* 0B1558 800B0958 84AA0000 */ lh $t2, ($a1) -/* 0B155C 800B095C 84EC0044 */ lh $t4, 0x44($a3) -/* 0B1560 800B0960 00000000 */ nop -/* 0B1564 800B0964 014C6821 */ addu $t5, $t2, $t4 -/* 0B1568 800B0968 A60D0000 */ sh $t5, ($s0) -/* 0B156C 800B096C 84EE0046 */ lh $t6, 0x46($a3) -/* 0B1570 800B0970 84AF0002 */ lh $t7, 2($a1) -/* 0B1574 800B0974 00000000 */ nop -/* 0B1578 800B0978 01EEC021 */ addu $t8, $t7, $t6 -/* 0B157C 800B097C A6180002 */ sh $t8, 2($s0) -/* 0B1580 800B0980 84E80048 */ lh $t0, 0x48($a3) -/* 0B1584 800B0984 84B90004 */ lh $t9, 4($a1) -/* 0B1588 800B0988 00000000 */ nop -/* 0B158C 800B098C 03284821 */ addu $t1, $t9, $t0 -/* 0B1590 800B0990 A6090004 */ sh $t1, 4($s0) -.L800B0994: -/* 0B1594 800B0994 84EB004A */ lh $t3, 0x4a($a3) -/* 0B1598 800B0998 02002025 */ move $a0, $s0 -/* 0B159C 800B099C A60B0062 */ sh $t3, 0x62($s0) -/* 0B15A0 800B09A0 84EA004C */ lh $t2, 0x4c($a3) -/* 0B15A4 800B09A4 00000000 */ nop -/* 0B15A8 800B09A8 A60A0064 */ sh $t2, 0x64($s0) -/* 0B15AC 800B09AC 84EC004E */ lh $t4, 0x4e($a3) -/* 0B15B0 800B09B0 00000000 */ nop -/* 0B15B4 800B09B4 A60C0066 */ sh $t4, 0x66($s0) -/* 0B15B8 800B09B8 AFA70020 */ sw $a3, 0x20($sp) -/* 0B15BC 800B09BC AFA60034 */ sw $a2, 0x34($sp) -/* 0B15C0 800B09C0 0C02C004 */ jal func_800B0010 -/* 0B15C4 800B09C4 AFA3002C */ sw $v1, 0x2c($sp) -/* 0B15C8 800B09C8 8E0D0040 */ lw $t5, 0x40($s0) -/* 0B15CC 800B09CC 3C01800E */ lui $at, %hi(D_800E2E2C) # $at, 0x800e -/* 0B15D0 800B09D0 000D7903 */ sra $t7, $t5, 4 -/* 0B15D4 800B09D4 31EE0007 */ andi $t6, $t7, 7 -/* 0B15D8 800B09D8 000EC080 */ sll $t8, $t6, 2 -/* 0B15DC 800B09DC 00380821 */ addu $at, $at, $t8 -/* 0B15E0 800B09E0 C4322E2C */ lwc1 $f18, %lo(D_800E2E2C)($at) -/* 0B15E4 800B09E4 92190039 */ lbu $t9, 0x39($s0) -/* 0B15E8 800B09E8 8FA3002C */ lw $v1, 0x2c($sp) -/* 0B15EC 800B09EC 8FA60034 */ lw $a2, 0x34($sp) -/* 0B15F0 800B09F0 8FA70020 */ lw $a3, 0x20($sp) -/* 0B15F4 800B09F4 24010005 */ li $at, 5 -/* 0B15F8 800B09F8 17210011 */ bne $t9, $at, .L800B0A40 -/* 0B15FC 800B09FC E6120068 */ swc1 $f18, 0x68($s0) -/* 0B1600 800B0A00 C600001C */ lwc1 $f0, 0x1c($s0) -/* 0B1604 800B0A04 C6020020 */ lwc1 $f2, 0x20($s0) -/* 0B1608 800B0A08 46000102 */ mul.s $f4, $f0, $f0 -/* 0B160C 800B0A0C C60E0024 */ lwc1 $f14, 0x24($s0) -/* 0B1610 800B0A10 AFA70020 */ sw $a3, 0x20($sp) -/* 0B1614 800B0A14 AFA60034 */ sw $a2, 0x34($sp) -/* 0B1618 800B0A18 46021182 */ mul.s $f6, $f2, $f2 -/* 0B161C 800B0A1C AFA3002C */ sw $v1, 0x2c($sp) -/* 0B1620 800B0A20 460E7282 */ mul.s $f10, $f14, $f14 -/* 0B1624 800B0A24 46062200 */ add.s $f8, $f4, $f6 -/* 0B1628 800B0A28 0C0326B4 */ jal sqrtf -/* 0B162C 800B0A2C 460A4300 */ add.s $f12, $f8, $f10 -/* 0B1630 800B0A30 8FA3002C */ lw $v1, 0x2c($sp) -/* 0B1634 800B0A34 8FA60034 */ lw $a2, 0x34($sp) -/* 0B1638 800B0A38 8FA70020 */ lw $a3, 0x20($sp) -/* 0B163C 800B0A3C E6000058 */ swc1 $f0, 0x58($s0) -.L800B0A40: -/* 0B1640 800B0A40 8CE20000 */ lw $v0, ($a3) -/* 0B1644 800B0A44 2401FFFF */ li $at, -1 -/* 0B1648 800B0A48 30480002 */ andi $t0, $v0, 2 -/* 0B164C 800B0A4C 1100000D */ beqz $t0, .L800B0A84 -/* 0B1650 800B0A50 304E0008 */ andi $t6, $v0, 8 -/* 0B1654 800B0A54 84C90010 */ lh $t1, 0x10($a2) -/* 0B1658 800B0A58 84EB001C */ lh $t3, 0x1c($a3) -/* 0B165C 800B0A5C 84CC0012 */ lh $t4, 0x12($a2) -/* 0B1660 800B0A60 012B5021 */ addu $t2, $t1, $t3 -/* 0B1664 800B0A64 A4CA0010 */ sh $t2, 0x10($a2) -/* 0B1668 800B0A68 84ED001E */ lh $t5, 0x1e($a3) -/* 0B166C 800B0A6C 00000000 */ nop -/* 0B1670 800B0A70 018D7821 */ addu $t7, $t4, $t5 -/* 0B1674 800B0A74 A4CF0012 */ sh $t7, 0x12($a2) -/* 0B1678 800B0A78 8CE20000 */ lw $v0, ($a3) -/* 0B167C 800B0A7C 00000000 */ nop -/* 0B1680 800B0A80 304E0008 */ andi $t6, $v0, 8 -.L800B0A84: -/* 0B1684 800B0A84 11C0000A */ beqz $t6, .L800B0AB0 -/* 0B1688 800B0A88 00000000 */ nop -/* 0B168C 800B0A8C 84D80014 */ lh $t8, 0x14($a2) -/* 0B1690 800B0A90 84F9002A */ lh $t9, 0x2a($a3) -/* 0B1694 800B0A94 84C90016 */ lh $t1, 0x16($a2) -/* 0B1698 800B0A98 03194021 */ addu $t0, $t8, $t9 -/* 0B169C 800B0A9C A4C80014 */ sh $t0, 0x14($a2) -/* 0B16A0 800B0AA0 84EB002C */ lh $t3, 0x2c($a3) -/* 0B16A4 800B0AA4 00000000 */ nop -/* 0B16A8 800B0AA8 012B5021 */ addu $t2, $t1, $t3 -/* 0B16AC 800B0AAC A4CA0016 */ sh $t2, 0x16($a2) -.L800B0AB0: -/* 0B16B0 800B0AB0 846C0006 */ lh $t4, 6($v1) -/* 0B16B4 800B0AB4 A6000018 */ sh $zero, 0x18($s0) -/* 0B16B8 800B0AB8 A60C001A */ sh $t4, 0x1a($s0) -/* 0B16BC 800B0ABC 84640004 */ lh $a0, 4($v1) -/* 0B16C0 800B0AC0 8E050044 */ lw $a1, 0x44($s0) -/* 0B16C4 800B0AC4 14810003 */ bne $a0, $at, .L800B0AD4 -/* 0B16C8 800B0AC8 00000000 */ nop -/* 0B16CC 800B0ACC 10000026 */ b .L800B0B68 -/* 0B16D0 800B0AD0 ACA00000 */ sw $zero, ($a1) -.L800B0AD4: -/* 0B16D4 800B0AD4 AFA3002C */ sw $v1, 0x2c($sp) -/* 0B16D8 800B0AD8 0C01EB9D */ jal load_texture -/* 0B16DC 800B0ADC AFA50024 */ sw $a1, 0x24($sp) -/* 0B16E0 800B0AE0 8FA50024 */ lw $a1, 0x24($sp) -/* 0B16E4 800B0AE4 8FA3002C */ lw $v1, 0x2c($sp) -/* 0B16E8 800B0AE8 1040001F */ beqz $v0, .L800B0B68 -/* 0B16EC 800B0AEC ACA20000 */ sw $v0, ($a1) -/* 0B16F0 800B0AF0 844F0006 */ lh $t7, 6($v0) -/* 0B16F4 800B0AF4 00000000 */ nop -/* 0B16F8 800B0AF8 31EE0004 */ andi $t6, $t7, 4 -/* 0B16FC 800B0AFC 11C0000F */ beqz $t6, .L800B0B3C -/* 0B1700 800B0B00 00000000 */ nop -/* 0B1704 800B0B04 8E180040 */ lw $t8, 0x40($s0) -/* 0B1708 800B0B08 00000000 */ nop -/* 0B170C 800B0B0C 33191000 */ andi $t9, $t8, 0x1000 -/* 0B1710 800B0B10 13200006 */ beqz $t9, .L800B0B2C -/* 0B1714 800B0B14 00000000 */ nop -/* 0B1718 800B0B18 86080006 */ lh $t0, 6($s0) -/* 0B171C 800B0B1C 00000000 */ nop -/* 0B1720 800B0B20 35090100 */ ori $t1, $t0, 0x100 -/* 0B1724 800B0B24 10000005 */ b .L800B0B3C -/* 0B1728 800B0B28 A6090006 */ sh $t1, 6($s0) -.L800B0B2C: -/* 0B172C 800B0B2C 860B0006 */ lh $t3, 6($s0) -/* 0B1730 800B0B30 00000000 */ nop -/* 0B1734 800B0B34 356A0080 */ ori $t2, $t3, 0x80 -/* 0B1738 800B0B38 A60A0006 */ sh $t2, 6($s0) -.L800B0B3C: -/* 0B173C 800B0B3C 8E0C0040 */ lw $t4, 0x40($s0) -/* 0B1740 800B0B40 24010002 */ li $at, 2 -/* 0B1744 800B0B44 318D0003 */ andi $t5, $t4, 3 -/* 0B1748 800B0B48 15A10007 */ bne $t5, $at, .L800B0B68 -/* 0B174C 800B0B4C 00000000 */ nop -/* 0B1750 800B0B50 8CAF0000 */ lw $t7, ($a1) -/* 0B1754 800B0B54 00000000 */ nop -/* 0B1758 800B0B58 95EE0012 */ lhu $t6, 0x12($t7) -/* 0B175C 800B0B5C 00000000 */ nop -/* 0B1760 800B0B60 25D8FFFF */ addiu $t8, $t6, -1 -/* 0B1764 800B0B64 A6180018 */ sh $t8, 0x18($s0) -.L800B0B68: -/* 0B1768 800B0B68 A2000075 */ sb $zero, 0x75($s0) -/* 0B176C 800B0B6C 9479000A */ lhu $t9, 0xa($v1) -/* 0B1770 800B0B70 A2000077 */ sb $zero, 0x77($s0) -/* 0B1774 800B0B74 00194282 */ srl $t0, $t9, 0xa -/* 0B1778 800B0B78 A2080076 */ sb $t0, 0x76($s0) -/* 0B177C 800B0B7C 8CA90000 */ lw $t1, ($a1) -/* 0B1780 800B0B80 02001025 */ move $v0, $s0 -/* 0B1784 800B0B84 15200005 */ bnez $t1, .L800B0B9C -/* 0B1788 800B0B88 00000000 */ nop -/* 0B178C 800B0B8C 0C02C810 */ jal func_800B2040 -/* 0B1790 800B0B90 02002025 */ move $a0, $s0 -/* 0B1794 800B0B94 10000001 */ b .L800B0B9C -/* 0B1798 800B0B98 00001025 */ move $v0, $zero -.L800B0B9C: -/* 0B179C 800B0B9C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B17A0 800B0BA0 8FB00018 */ lw $s0, 0x18($sp) -/* 0B17A4 800B0BA4 03E00008 */ jr $ra -/* 0B17A8 800B0BA8 27BD0030 */ addiu $sp, $sp, 0x30 - diff --git a/asm/non_matchings/particles/func_800B1130.s b/asm/non_matchings/particles/func_800B1130.s deleted file mode 100644 index 7132e24c..00000000 --- a/asm/non_matchings/particles/func_800B1130.s +++ /dev/null @@ -1,801 +0,0 @@ -.late_rodata -glabel D_800E8BC8 -.double 0.00001525878906 -glabel D_800E8BD0 -.double 0.00001525878906 -glabel D_800E8BD8 -.float 0.1 - -.text -glabel func_800B1130 -/* 0B1D30 800B1130 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0B1D34 800B1134 AFBF001C */ sw $ra, 0x1c($sp) -/* 0B1D38 800B1138 AFB10018 */ sw $s1, 0x18($sp) -/* 0B1D3C 800B113C AFB00014 */ sw $s0, 0x14($sp) -/* 0B1D40 800B1140 AFA40040 */ sw $a0, 0x40($sp) -/* 0B1D44 800B1144 84AF0008 */ lh $t7, 8($a1) -/* 0B1D48 800B1148 3C0E800E */ lui $t6, %hi(gParticlesAssetTable) # $t6, 0x800e -/* 0B1D4C 800B114C 8DCE2CF0 */ lw $t6, %lo(gParticlesAssetTable)($t6) -/* 0B1D50 800B1150 000FC080 */ sll $t8, $t7, 2 -/* 0B1D54 800B1154 01D8C821 */ addu $t9, $t6, $t8 -/* 0B1D58 800B1158 8F270000 */ lw $a3, ($t9) -/* 0B1D5C 800B115C 24010003 */ li $at, 3 -/* 0B1D60 800B1160 90E60000 */ lbu $a2, ($a3) -/* 0B1D64 800B1164 00000000 */ nop -/* 0B1D68 800B1168 10C10003 */ beq $a2, $at, .L800B1178 -/* 0B1D6C 800B116C 24010004 */ li $at, 4 -/* 0B1D70 800B1170 14C10003 */ bne $a2, $at, .L800B1180 -/* 0B1D74 800B1174 00000000 */ nop -.L800B1178: -/* 0B1D78 800B1178 100002CA */ b .L800B1CA4 -/* 0B1D7C 800B117C 00001025 */ move $v0, $zero -.L800B1180: -/* 0B1D80 800B1180 8CB10000 */ lw $s1, ($a1) -/* 0B1D84 800B1184 00C02025 */ move $a0, $a2 -/* 0B1D88 800B1188 8E28009C */ lw $t0, 0x9c($s1) -/* 0B1D8C 800B118C AFA70038 */ sw $a3, 0x38($sp) -/* 0B1D90 800B1190 AFA50044 */ sw $a1, 0x44($sp) -/* 0B1D94 800B1194 0C02C72E */ jal func_800B1CB8 -/* 0B1D98 800B1198 AFA80028 */ sw $t0, 0x28($sp) -/* 0B1D9C 800B119C 8FA70038 */ lw $a3, 0x38($sp) -/* 0B1DA0 800B11A0 8FA80028 */ lw $t0, 0x28($sp) -/* 0B1DA4 800B11A4 14400003 */ bnez $v0, .L800B11B4 -/* 0B1DA8 800B11A8 00408025 */ move $s0, $v0 -/* 0B1DAC 800B11AC 100002BD */ b .L800B1CA4 -/* 0B1DB0 800B11B0 02001025 */ move $v0, $s0 -.L800B11B4: -/* 0B1DB4 800B11B4 8FA90040 */ lw $t1, 0x40($sp) -/* 0B1DB8 800B11B8 240B8000 */ li $t3, -32768 -/* 0B1DBC 800B11BC 852A002E */ lh $t2, 0x2e($t1) -/* 0B1DC0 800B11C0 A44B0006 */ sh $t3, 6($v0) -/* 0B1DC4 800B11C4 A44A002E */ sh $t2, 0x2e($v0) -/* 0B1DC8 800B11C8 90EC0001 */ lbu $t4, 1($a3) -/* 0B1DCC 800B11CC 240A00FF */ li $t2, 255 -/* 0B1DD0 800B11D0 A04C0039 */ sb $t4, 0x39($v0) -/* 0B1DD4 800B11D4 94ED0002 */ lhu $t5, 2($a3) -/* 0B1DD8 800B11D8 AC49003C */ sw $t1, 0x3c($v0) -/* 0B1DDC 800B11DC 31AE0800 */ andi $t6, $t5, 0x800 -/* 0B1DE0 800B11E0 11C00014 */ beqz $t6, .L800B1234 -/* 0B1DE4 800B11E4 AC4D0040 */ sw $t5, 0x40($v0) -/* 0B1DE8 800B11E8 8D230054 */ lw $v1, 0x54($t1) -/* 0B1DEC 800B11EC 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0B1DF0 800B11F0 10600010 */ beqz $v1, .L800B1234 -/* 0B1DF4 800B11F4 00000000 */ nop -/* 0B1DF8 800B11F8 C4640000 */ lwc1 $f4, ($v1) -/* 0B1DFC 800B11FC 44813000 */ mtc1 $at, $f6 -/* 0B1E00 800B1200 00000000 */ nop -/* 0B1E04 800B1204 46062202 */ mul.s $f8, $f4, $f6 -/* 0B1E08 800B1208 4458F800 */ cfc1 $t8, $31 -/* 0B1E0C 800B120C 00000000 */ nop -/* 0B1E10 800B1210 37010003 */ ori $at, $t8, 3 -/* 0B1E14 800B1214 38210002 */ xori $at, $at, 2 -/* 0B1E18 800B1218 44C1F800 */ ctc1 $at, $31 -/* 0B1E1C 800B121C 00000000 */ nop -/* 0B1E20 800B1220 460042A4 */ cvt.w.s $f10, $f8 -/* 0B1E24 800B1224 44195000 */ mfc1 $t9, $f10 -/* 0B1E28 800B1228 44D8F800 */ ctc1 $t8, $31 -/* 0B1E2C 800B122C 10000002 */ b .L800B1238 -/* 0B1E30 800B1230 A459004A */ sh $t9, 0x4a($v0) -.L800B1234: -/* 0B1E34 800B1234 A44A004A */ sh $t2, 0x4a($v0) -.L800B1238: -/* 0B1E38 800B1238 8E2B005C */ lw $t3, 0x5c($s1) -/* 0B1E3C 800B123C C6300050 */ lwc1 $f16, 0x50($s1) -/* 0B1E40 800B1240 000B6380 */ sll $t4, $t3, 0xe -/* 0B1E44 800B1244 05810015 */ bgez $t4, .L800B129C -/* 0B1E48 800B1248 00000000 */ nop -/* 0B1E4C 800B124C 8E25008C */ lw $a1, 0x8c($s1) -/* 0B1E50 800B1250 E7B00024 */ swc1 $f16, 0x24($sp) -/* 0B1E54 800B1254 AFA80028 */ sw $t0, 0x28($sp) -/* 0B1E58 800B1258 AFA70038 */ sw $a3, 0x38($sp) -/* 0B1E5C 800B125C 0C01BE53 */ jal get_random_number_from_range -/* 0B1E60 800B1260 00052023 */ negu $a0, $a1 -/* 0B1E64 800B1264 44829000 */ mtc1 $v0, $f18 -/* 0B1E68 800B1268 3C01800F */ lui $at, %hi(D_800E8BC8 + 4) # $at, 0x800f -/* 0B1E6C 800B126C 46809120 */ cvt.s.w $f4, $f18 -/* 0B1E70 800B1270 C4298BC8 */ lwc1 $f9, %lo(D_800E8BC8)($at) -/* 0B1E74 800B1274 C4288BCC */ lwc1 $f8, %lo(D_800E8BC8 + 4)($at) -/* 0B1E78 800B1278 460021A1 */ cvt.d.s $f6, $f4 -/* 0B1E7C 800B127C 46283282 */ mul.d $f10, $f6, $f8 -/* 0B1E80 800B1280 C7B00024 */ lwc1 $f16, 0x24($sp) -/* 0B1E84 800B1284 8FA70038 */ lw $a3, 0x38($sp) -/* 0B1E88 800B1288 460084A1 */ cvt.d.s $f18, $f16 -/* 0B1E8C 800B128C 8FA80028 */ lw $t0, 0x28($sp) -/* 0B1E90 800B1290 462A9100 */ add.d $f4, $f18, $f10 -/* 0B1E94 800B1294 8FA90040 */ lw $t1, 0x40($sp) -/* 0B1E98 800B1298 46202420 */ cvt.s.d $f16, $f4 -.L800B129C: -/* 0B1E9C 800B129C C4E60010 */ lwc1 $f6, 0x10($a3) -/* 0B1EA0 800B12A0 00000000 */ nop -/* 0B1EA4 800B12A4 46103202 */ mul.s $f8, $f6, $f16 -/* 0B1EA8 800B12A8 E6080008 */ swc1 $f8, 8($s0) -/* 0B1EAC 800B12AC 8E2D005C */ lw $t5, 0x5c($s1) -/* 0B1EB0 800B12B0 C6300054 */ lwc1 $f16, 0x54($s1) -/* 0B1EB4 800B12B4 000D7B40 */ sll $t7, $t5, 0xd -/* 0B1EB8 800B12B8 05E10015 */ bgez $t7, .L800B1310 -/* 0B1EBC 800B12BC 00000000 */ nop -/* 0B1EC0 800B12C0 8E250090 */ lw $a1, 0x90($s1) -/* 0B1EC4 800B12C4 E7B00024 */ swc1 $f16, 0x24($sp) -/* 0B1EC8 800B12C8 AFA80028 */ sw $t0, 0x28($sp) -/* 0B1ECC 800B12CC AFA70038 */ sw $a3, 0x38($sp) -/* 0B1ED0 800B12D0 0C01BE53 */ jal get_random_number_from_range -/* 0B1ED4 800B12D4 00052023 */ negu $a0, $a1 -/* 0B1ED8 800B12D8 44829000 */ mtc1 $v0, $f18 -/* 0B1EDC 800B12DC 3C01800F */ lui $at, %hi(D_800E8BD0 + 4) # $at, 0x800f -/* 0B1EE0 800B12E0 468092A0 */ cvt.s.w $f10, $f18 -/* 0B1EE4 800B12E4 C4278BD0 */ lwc1 $f7, %lo(D_800E8BD0)($at) -/* 0B1EE8 800B12E8 C4268BD4 */ lwc1 $f6, %lo(D_800E8BD0 + 4)($at) -/* 0B1EEC 800B12EC 46005121 */ cvt.d.s $f4, $f10 -/* 0B1EF0 800B12F0 46262202 */ mul.d $f8, $f4, $f6 -/* 0B1EF4 800B12F4 C7B00024 */ lwc1 $f16, 0x24($sp) -/* 0B1EF8 800B12F8 8FA70038 */ lw $a3, 0x38($sp) -/* 0B1EFC 800B12FC 460084A1 */ cvt.d.s $f18, $f16 -/* 0B1F00 800B1300 8FA80028 */ lw $t0, 0x28($sp) -/* 0B1F04 800B1304 46289280 */ add.d $f10, $f18, $f8 -/* 0B1F08 800B1308 8FA90040 */ lw $t1, 0x40($sp) -/* 0B1F0C 800B130C 46205420 */ cvt.s.d $f16, $f10 -.L800B1310: -/* 0B1F10 800B1310 8E2E0000 */ lw $t6, ($s1) -/* 0B1F14 800B1314 00000000 */ nop -/* 0B1F18 800B1318 31D81000 */ andi $t8, $t6, 0x1000 -/* 0B1F1C 800B131C 13000016 */ beqz $t8, .L800B1378 -/* 0B1F20 800B1320 00000000 */ nop -/* 0B1F24 800B1324 C520001C */ lwc1 $f0, 0x1c($t1) -/* 0B1F28 800B1328 C5220020 */ lwc1 $f2, 0x20($t1) -/* 0B1F2C 800B132C 46000102 */ mul.s $f4, $f0, $f0 -/* 0B1F30 800B1330 C52E0024 */ lwc1 $f14, 0x24($t1) -/* 0B1F34 800B1334 E7B00024 */ swc1 $f16, 0x24($sp) -/* 0B1F38 800B1338 AFA80028 */ sw $t0, 0x28($sp) -/* 0B1F3C 800B133C 46021182 */ mul.s $f6, $f2, $f2 -/* 0B1F40 800B1340 AFA70038 */ sw $a3, 0x38($sp) -/* 0B1F44 800B1344 460E7202 */ mul.s $f8, $f14, $f14 -/* 0B1F48 800B1348 46062480 */ add.s $f18, $f4, $f6 -/* 0B1F4C 800B134C 0C0326B4 */ jal sqrtf -/* 0B1F50 800B1350 46089300 */ add.s $f12, $f18, $f8 -/* 0B1F54 800B1354 C7B00024 */ lwc1 $f16, 0x24($sp) -/* 0B1F58 800B1358 3C01800F */ lui $at, %hi(D_800E8BD8) # $at, 0x800f -/* 0B1F5C 800B135C 46100282 */ mul.s $f10, $f0, $f16 -/* 0B1F60 800B1360 C4248BD8 */ lwc1 $f4, %lo(D_800E8BD8)($at) -/* 0B1F64 800B1364 8FA70038 */ lw $a3, 0x38($sp) -/* 0B1F68 800B1368 8FA80028 */ lw $t0, 0x28($sp) -/* 0B1F6C 800B136C 46045182 */ mul.s $f6, $f10, $f4 -/* 0B1F70 800B1370 10000005 */ b .L800B1388 -/* 0B1F74 800B1374 E6060028 */ swc1 $f6, 0x28($s0) -.L800B1378: -/* 0B1F78 800B1378 C4F20010 */ lwc1 $f18, 0x10($a3) -/* 0B1F7C 800B137C 00000000 */ nop -/* 0B1F80 800B1380 46109202 */ mul.s $f8, $f18, $f16 -/* 0B1F84 800B1384 E6080028 */ swc1 $f8, 0x28($s0) -.L800B1388: -/* 0B1F88 800B1388 84E5000A */ lh $a1, 0xa($a3) -/* 0B1F8C 800B138C AFA80028 */ sw $t0, 0x28($sp) -/* 0B1F90 800B1390 AFA70038 */ sw $a3, 0x38($sp) -/* 0B1F94 800B1394 0C01BE53 */ jal get_random_number_from_range -/* 0B1F98 800B1398 00052023 */ negu $a0, $a1 -/* 0B1F9C 800B139C 8FA70038 */ lw $a3, 0x38($sp) -/* 0B1FA0 800B13A0 8FA60044 */ lw $a2, 0x44($sp) -/* 0B1FA4 800B13A4 84F90008 */ lh $t9, 8($a3) -/* 0B1FA8 800B13A8 8FA80028 */ lw $t0, 0x28($sp) -/* 0B1FAC 800B13AC 44805000 */ mtc1 $zero, $f10 -/* 0B1FB0 800B13B0 00595021 */ addu $t2, $v0, $t9 -/* 0B1FB4 800B13B4 A60A003A */ sh $t2, 0x3a($s0) -/* 0B1FB8 800B13B8 A2000038 */ sb $zero, 0x38($s0) -/* 0B1FBC 800B13BC 3C03800E */ lui $v1, %hi(D_800E2D00) # $v1, 0x800e -/* 0B1FC0 800B13C0 E60A0034 */ swc1 $f10, 0x34($s0) -/* 0B1FC4 800B13C4 8C632D00 */ lw $v1, %lo(D_800E2D00)($v1) -/* 0B1FC8 800B13C8 2401FFFF */ li $at, -1 -/* 0B1FCC 800B13CC 10600003 */ beqz $v1, .L800B13DC -/* 0B1FD0 800B13D0 00000000 */ nop -/* 0B1FD4 800B13D4 10000036 */ b .L800B14B0 -/* 0B1FD8 800B13D8 AE03006C */ sw $v1, 0x6c($s0) -.L800B13DC: -/* 0B1FDC 800B13DC 11010028 */ beq $t0, $at, .L800B1480 -/* 0B1FE0 800B13E0 00000000 */ nop -/* 0B1FE4 800B13E4 84CB001E */ lh $t3, 0x1e($a2) -/* 0B1FE8 800B13E8 00000000 */ nop -/* 0B1FEC 800B13EC 256C0001 */ addiu $t4, $t3, 1 -/* 0B1FF0 800B13F0 A4CC001E */ sh $t4, 0x1e($a2) -/* 0B1FF4 800B13F4 8D0D0000 */ lw $t5, ($t0) -/* 0B1FF8 800B13F8 84C2001E */ lh $v0, 0x1e($a2) -/* 0B1FFC 800B13FC 00000000 */ nop -/* 0B2000 800B1400 004D082A */ slt $at, $v0, $t5 -/* 0B2004 800B1404 14200005 */ bnez $at, .L800B141C -/* 0B2008 800B1408 000278C0 */ sll $t7, $v0, 3 -/* 0B200C 800B140C A4C0001E */ sh $zero, 0x1e($a2) -/* 0B2010 800B1410 84C2001E */ lh $v0, 0x1e($a2) -/* 0B2014 800B1414 00000000 */ nop -/* 0B2018 800B1418 000278C0 */ sll $t7, $v0, 3 -.L800B141C: -/* 0B201C 800B141C 010F7021 */ addu $t6, $t0, $t7 -/* 0B2020 800B1420 91D80014 */ lbu $t8, 0x14($t6) -/* 0B2024 800B1424 00000000 */ nop -/* 0B2028 800B1428 A218006C */ sb $t8, 0x6c($s0) -/* 0B202C 800B142C 84D9001E */ lh $t9, 0x1e($a2) -/* 0B2030 800B1430 00000000 */ nop -/* 0B2034 800B1434 001950C0 */ sll $t2, $t9, 3 -/* 0B2038 800B1438 010A5821 */ addu $t3, $t0, $t2 -/* 0B203C 800B143C 916C0015 */ lbu $t4, 0x15($t3) -/* 0B2040 800B1440 00000000 */ nop -/* 0B2044 800B1444 A20C006D */ sb $t4, 0x6d($s0) -/* 0B2048 800B1448 84CD001E */ lh $t5, 0x1e($a2) -/* 0B204C 800B144C 00000000 */ nop -/* 0B2050 800B1450 000D78C0 */ sll $t7, $t5, 3 -/* 0B2054 800B1454 010F7021 */ addu $t6, $t0, $t7 -/* 0B2058 800B1458 91D80016 */ lbu $t8, 0x16($t6) -/* 0B205C 800B145C 00000000 */ nop -/* 0B2060 800B1460 A218006E */ sb $t8, 0x6e($s0) -/* 0B2064 800B1464 84D9001E */ lh $t9, 0x1e($a2) -/* 0B2068 800B1468 00000000 */ nop -/* 0B206C 800B146C 001950C0 */ sll $t2, $t9, 3 -/* 0B2070 800B1470 010A5821 */ addu $t3, $t0, $t2 -/* 0B2074 800B1474 916C0017 */ lbu $t4, 0x17($t3) -/* 0B2078 800B1478 1000000D */ b .L800B14B0 -/* 0B207C 800B147C A20C006F */ sb $t4, 0x6f($s0) -.L800B1480: -/* 0B2080 800B1480 90ED0014 */ lbu $t5, 0x14($a3) -/* 0B2084 800B1484 00000000 */ nop -/* 0B2088 800B1488 A20D006C */ sb $t5, 0x6c($s0) -/* 0B208C 800B148C 90EF0015 */ lbu $t7, 0x15($a3) -/* 0B2090 800B1490 00000000 */ nop -/* 0B2094 800B1494 A20F006D */ sb $t7, 0x6d($s0) -/* 0B2098 800B1498 90EE0016 */ lbu $t6, 0x16($a3) -/* 0B209C 800B149C 00000000 */ nop -/* 0B20A0 800B14A0 A20E006E */ sb $t6, 0x6e($s0) -/* 0B20A4 800B14A4 90F80017 */ lbu $t8, 0x17($a3) -/* 0B20A8 800B14A8 00000000 */ nop -/* 0B20AC 800B14AC A218006F */ sb $t8, 0x6f($s0) -.L800B14B0: -/* 0B20B0 800B14B0 8E23005C */ lw $v1, 0x5c($s1) -/* 0B20B4 800B14B4 3C0100F0 */ lui $at, 0xf0 -/* 0B20B8 800B14B8 0061C824 */ and $t9, $v1, $at -/* 0B20BC 800B14BC 13200037 */ beqz $t9, .L800B159C -/* 0B20C0 800B14C0 03201825 */ move $v1, $t9 -/* 0B20C4 800B14C4 001952C0 */ sll $t2, $t9, 0xb -/* 0B20C8 800B14C8 0541000D */ bgez $t2, .L800B1500 -/* 0B20CC 800B14CC 00036A80 */ sll $t5, $v1, 0xa -/* 0B20D0 800B14D0 92250098 */ lbu $a1, 0x98($s1) -/* 0B20D4 800B14D4 AFA70038 */ sw $a3, 0x38($sp) -/* 0B20D8 800B14D8 AFB9003C */ sw $t9, 0x3c($sp) -/* 0B20DC 800B14DC 0C01BE53 */ jal get_random_number_from_range -/* 0B20E0 800B14E0 00052023 */ negu $a0, $a1 -/* 0B20E4 800B14E4 920B006C */ lbu $t3, 0x6c($s0) -/* 0B20E8 800B14E8 8FA3003C */ lw $v1, 0x3c($sp) -/* 0B20EC 800B14EC 8FA60044 */ lw $a2, 0x44($sp) -/* 0B20F0 800B14F0 8FA70038 */ lw $a3, 0x38($sp) -/* 0B20F4 800B14F4 01626021 */ addu $t4, $t3, $v0 -/* 0B20F8 800B14F8 A20C006C */ sb $t4, 0x6c($s0) -/* 0B20FC 800B14FC 00036A80 */ sll $t5, $v1, 0xa -.L800B1500: -/* 0B2100 800B1500 05A1000D */ bgez $t5, .L800B1538 -/* 0B2104 800B1504 0003C240 */ sll $t8, $v1, 9 -/* 0B2108 800B1508 92250099 */ lbu $a1, 0x99($s1) -/* 0B210C 800B150C AFA70038 */ sw $a3, 0x38($sp) -/* 0B2110 800B1510 AFA3003C */ sw $v1, 0x3c($sp) -/* 0B2114 800B1514 0C01BE53 */ jal get_random_number_from_range -/* 0B2118 800B1518 00052023 */ negu $a0, $a1 -/* 0B211C 800B151C 920F006D */ lbu $t7, 0x6d($s0) -/* 0B2120 800B1520 8FA3003C */ lw $v1, 0x3c($sp) -/* 0B2124 800B1524 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2128 800B1528 8FA70038 */ lw $a3, 0x38($sp) -/* 0B212C 800B152C 01E27021 */ addu $t6, $t7, $v0 -/* 0B2130 800B1530 A20E006D */ sb $t6, 0x6d($s0) -/* 0B2134 800B1534 0003C240 */ sll $t8, $v1, 9 -.L800B1538: -/* 0B2138 800B1538 0701000D */ bgez $t8, .L800B1570 -/* 0B213C 800B153C 00035A00 */ sll $t3, $v1, 8 -/* 0B2140 800B1540 9225009A */ lbu $a1, 0x9a($s1) -/* 0B2144 800B1544 AFA70038 */ sw $a3, 0x38($sp) -/* 0B2148 800B1548 AFA3003C */ sw $v1, 0x3c($sp) -/* 0B214C 800B154C 0C01BE53 */ jal get_random_number_from_range -/* 0B2150 800B1550 00052023 */ negu $a0, $a1 -/* 0B2154 800B1554 9219006E */ lbu $t9, 0x6e($s0) -/* 0B2158 800B1558 8FA3003C */ lw $v1, 0x3c($sp) -/* 0B215C 800B155C 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2160 800B1560 8FA70038 */ lw $a3, 0x38($sp) -/* 0B2164 800B1564 03225021 */ addu $t2, $t9, $v0 -/* 0B2168 800B1568 A20A006E */ sb $t2, 0x6e($s0) -/* 0B216C 800B156C 00035A00 */ sll $t3, $v1, 8 -.L800B1570: -/* 0B2170 800B1570 0561000A */ bgez $t3, .L800B159C -/* 0B2174 800B1574 00000000 */ nop -/* 0B2178 800B1578 9225009B */ lbu $a1, 0x9b($s1) -/* 0B217C 800B157C AFA70038 */ sw $a3, 0x38($sp) -/* 0B2180 800B1580 0C01BE53 */ jal get_random_number_from_range -/* 0B2184 800B1584 00052023 */ negu $a0, $a1 -/* 0B2188 800B1588 920C006F */ lbu $t4, 0x6f($s0) -/* 0B218C 800B158C 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2190 800B1590 8FA70038 */ lw $a3, 0x38($sp) -/* 0B2194 800B1594 01826821 */ addu $t5, $t4, $v0 -/* 0B2198 800B1598 A20D006F */ sb $t5, 0x6f($s0) -.L800B159C: -/* 0B219C 800B159C 84EF000E */ lh $t7, 0xe($a3) -/* 0B21A0 800B15A0 3C04800E */ lui $a0, %hi(D_800E2EEC) # $a0, 0x800e -/* 0B21A4 800B15A4 A60F0060 */ sh $t7, 0x60($s0) -/* 0B21A8 800B15A8 24842EEC */ addiu $a0, %lo(D_800E2EEC) # addiu $a0, $a0, 0x2eec -/* 0B21AC 800B15AC 8C980000 */ lw $t8, ($a0) -/* 0B21B0 800B15B0 90EE000C */ lbu $t6, 0xc($a3) -/* 0B21B4 800B15B4 00000000 */ nop -/* 0B21B8 800B15B8 01D80019 */ multu $t6, $t8 -/* 0B21BC 800B15BC 0000C812 */ mflo $t9 -/* 0B21C0 800B15C0 A619005C */ sh $t9, 0x5c($s0) -/* 0B21C4 800B15C4 90EA000C */ lbu $t2, 0xc($a3) -/* 0B21C8 800B15C8 00000000 */ nop -/* 0B21CC 800B15CC 294100FF */ slti $at, $t2, 0xff -/* 0B21D0 800B15D0 1020000F */ beqz $at, .L800B1610 -/* 0B21D4 800B15D4 00000000 */ nop -/* 0B21D8 800B15D8 8E0B0040 */ lw $t3, 0x40($s0) -/* 0B21DC 800B15DC 00000000 */ nop -/* 0B21E0 800B15E0 316C1000 */ andi $t4, $t3, 0x1000 -/* 0B21E4 800B15E4 11800006 */ beqz $t4, .L800B1600 -/* 0B21E8 800B15E8 00000000 */ nop -/* 0B21EC 800B15EC 860D0006 */ lh $t5, 6($s0) -/* 0B21F0 800B15F0 00000000 */ nop -/* 0B21F4 800B15F4 35AF0100 */ ori $t7, $t5, 0x100 -/* 0B21F8 800B15F8 10000005 */ b .L800B1610 -/* 0B21FC 800B15FC A60F0006 */ sh $t7, 6($s0) -.L800B1600: -/* 0B2200 800B1600 860E0006 */ lh $t6, 6($s0) -/* 0B2204 800B1604 00000000 */ nop -/* 0B2208 800B1608 35D80080 */ ori $t8, $t6, 0x80 -/* 0B220C 800B160C A6180006 */ sh $t8, 6($s0) -.L800B1610: -/* 0B2210 800B1610 86020060 */ lh $v0, 0x60($s0) -/* 0B2214 800B1614 8603003A */ lh $v1, 0x3a($s0) -/* 0B2218 800B1618 00000000 */ nop -/* 0B221C 800B161C 0043082A */ slt $at, $v0, $v1 -/* 0B2220 800B1620 10200018 */ beqz $at, .L800B1684 -/* 0B2224 800B1624 00000000 */ nop -/* 0B2228 800B1628 90F9000D */ lbu $t9, 0xd($a3) -/* 0B222C 800B162C 90EA000C */ lbu $t2, 0xc($a3) -/* 0B2230 800B1630 8C8C0000 */ lw $t4, ($a0) -/* 0B2234 800B1634 032A5823 */ subu $t3, $t9, $t2 -/* 0B2238 800B1638 016C0019 */ multu $t3, $t4 -/* 0B223C 800B163C 00627823 */ subu $t7, $v1, $v0 -/* 0B2240 800B1640 00006812 */ mflo $t5 -/* 0B2244 800B1644 00000000 */ nop -/* 0B2248 800B1648 00000000 */ nop -/* 0B224C 800B164C 01AF001A */ div $zero, $t5, $t7 -/* 0B2250 800B1650 15E00002 */ bnez $t7, .L800B165C -/* 0B2254 800B1654 00000000 */ nop -/* 0B2258 800B1658 0007000D */ break 7 -.L800B165C: -/* 0B225C 800B165C 2401FFFF */ li $at, -1 -/* 0B2260 800B1660 15E10004 */ bne $t7, $at, .L800B1674 -/* 0B2264 800B1664 3C018000 */ lui $at, 0x8000 -/* 0B2268 800B1668 15A10002 */ bne $t5, $at, .L800B1674 -/* 0B226C 800B166C 00000000 */ nop -/* 0B2270 800B1670 0006000D */ break 6 -.L800B1674: -/* 0B2274 800B1674 00007012 */ mflo $t6 -/* 0B2278 800B1678 A60E005E */ sh $t6, 0x5e($s0) -/* 0B227C 800B167C 10000003 */ b .L800B168C -/* 0B2280 800B1680 A3A00023 */ sb $zero, 0x23($sp) -.L800B1684: -/* 0B2284 800B1684 A600005E */ sh $zero, 0x5e($s0) -/* 0B2288 800B1688 A3A00023 */ sb $zero, 0x23($sp) -.L800B168C: -/* 0B228C 800B168C 84F80006 */ lh $t8, 6($a3) -/* 0B2290 800B1690 8602002C */ lh $v0, 0x2c($s0) -/* 0B2294 800B1694 24010080 */ li $at, 128 -/* 0B2298 800B1698 14410046 */ bne $v0, $at, .L800B17B4 -/* 0B229C 800B169C A618001A */ sh $t8, 0x1a($s0) -/* 0B22A0 800B16A0 84E40004 */ lh $a0, 4($a3) -/* 0B22A4 800B16A4 0C01F04B */ jal func_8007C12C -/* 0B22A8 800B16A8 00002825 */ move $a1, $zero -/* 0B22AC 800B16AC 8FA60044 */ lw $a2, 0x44($sp) -/* 0B22B0 800B16B0 1040003D */ beqz $v0, .L800B17A8 -/* 0B22B4 800B16B4 AE020044 */ sw $v0, 0x44($s0) -/* 0B22B8 800B16B8 8C4A0008 */ lw $t2, 8($v0) -/* 0B22BC 800B16BC 00000000 */ nop -/* 0B22C0 800B16C0 8D4B0000 */ lw $t3, ($t2) -/* 0B22C4 800B16C4 00000000 */ nop -/* 0B22C8 800B16C8 856C0006 */ lh $t4, 6($t3) -/* 0B22CC 800B16CC 00000000 */ nop -/* 0B22D0 800B16D0 318D0004 */ andi $t5, $t4, 4 -/* 0B22D4 800B16D4 11A0000F */ beqz $t5, .L800B1714 -/* 0B22D8 800B16D8 00000000 */ nop -/* 0B22DC 800B16DC 8E0F0040 */ lw $t7, 0x40($s0) -/* 0B22E0 800B16E0 00000000 */ nop -/* 0B22E4 800B16E4 31EE1000 */ andi $t6, $t7, 0x1000 -/* 0B22E8 800B16E8 11C00006 */ beqz $t6, .L800B1704 -/* 0B22EC 800B16EC 00000000 */ nop -/* 0B22F0 800B16F0 86180006 */ lh $t8, 6($s0) -/* 0B22F4 800B16F4 00000000 */ nop -/* 0B22F8 800B16F8 37190100 */ ori $t9, $t8, 0x100 -/* 0B22FC 800B16FC 10000005 */ b .L800B1714 -/* 0B2300 800B1700 A6190006 */ sh $t9, 6($s0) -.L800B1704: -/* 0B2304 800B1704 860A0006 */ lh $t2, 6($s0) -/* 0B2308 800B1708 00000000 */ nop -/* 0B230C 800B170C 354B0080 */ ori $t3, $t2, 0x80 -/* 0B2310 800B1710 A60B0006 */ sh $t3, 6($s0) -.L800B1714: -/* 0B2314 800B1714 8E2C0000 */ lw $t4, ($s1) -/* 0B2318 800B1718 00000000 */ nop -/* 0B231C 800B171C 318D0800 */ andi $t5, $t4, 0x800 -/* 0B2320 800B1720 11A00012 */ beqz $t5, .L800B176C -/* 0B2324 800B1724 00000000 */ nop -/* 0B2328 800B1728 8E0F0044 */ lw $t7, 0x44($s0) -/* 0B232C 800B172C 00002025 */ move $a0, $zero -/* 0B2330 800B1730 85E50000 */ lh $a1, ($t7) -/* 0B2334 800B1734 0C01BE53 */ jal get_random_number_from_range -/* 0B2338 800B1738 24A5FFFF */ addiu $a1, $a1, -1 -/* 0B233C 800B173C 8E180040 */ lw $t8, 0x40($s0) -/* 0B2340 800B1740 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2344 800B1744 00027200 */ sll $t6, $v0, 8 -/* 0B2348 800B1748 24010002 */ li $at, 2 -/* 0B234C 800B174C 33190003 */ andi $t9, $t8, 3 -/* 0B2350 800B1750 17210063 */ bne $t9, $at, .L800B18E0 -/* 0B2354 800B1754 A60E0018 */ sh $t6, 0x18($s0) -/* 0B2358 800B1758 860A0018 */ lh $t2, 0x18($s0) -/* 0B235C 800B175C 00000000 */ nop -/* 0B2360 800B1760 354B00FF */ ori $t3, $t2, 0xff -/* 0B2364 800B1764 1000005E */ b .L800B18E0 -/* 0B2368 800B1768 A60B0018 */ sh $t3, 0x18($s0) -.L800B176C: -/* 0B236C 800B176C 8E0C0040 */ lw $t4, 0x40($s0) -/* 0B2370 800B1770 24010002 */ li $at, 2 -/* 0B2374 800B1774 318D0003 */ andi $t5, $t4, 3 -/* 0B2378 800B1778 15A10009 */ bne $t5, $at, .L800B17A0 -/* 0B237C 800B177C 00000000 */ nop -/* 0B2380 800B1780 8E0F0044 */ lw $t7, 0x44($s0) -/* 0B2384 800B1784 00000000 */ nop -/* 0B2388 800B1788 85EE0000 */ lh $t6, ($t7) -/* 0B238C 800B178C 00000000 */ nop -/* 0B2390 800B1790 000EC200 */ sll $t8, $t6, 8 -/* 0B2394 800B1794 2719FFFF */ addiu $t9, $t8, -1 -/* 0B2398 800B1798 10000051 */ b .L800B18E0 -/* 0B239C 800B179C A6190018 */ sh $t9, 0x18($s0) -.L800B17A0: -/* 0B23A0 800B17A0 1000004F */ b .L800B18E0 -/* 0B23A4 800B17A4 A6000018 */ sh $zero, 0x18($s0) -.L800B17A8: -/* 0B23A8 800B17A8 240A0001 */ li $t2, 1 -/* 0B23AC 800B17AC 1000004C */ b .L800B18E0 -/* 0B23B0 800B17B0 A3AA0023 */ sb $t2, 0x23($sp) -.L800B17B4: -/* 0B23B4 800B17B4 24010002 */ li $at, 2 -/* 0B23B8 800B17B8 10410003 */ beq $v0, $at, .L800B17C8 -/* 0B23BC 800B17BC 24010001 */ li $at, 1 -/* 0B23C0 800B17C0 14410048 */ bne $v0, $at, .L800B18E4 -/* 0B23C4 800B17C4 83AB0023 */ lb $t3, 0x23($sp) -.L800B17C8: -/* 0B23C8 800B17C8 8E030044 */ lw $v1, 0x44($s0) -/* 0B23CC 800B17CC 00000000 */ nop -/* 0B23D0 800B17D0 10600044 */ beqz $v1, .L800B18E4 -/* 0B23D4 800B17D4 83AB0023 */ lb $t3, 0x23($sp) -/* 0B23D8 800B17D8 84E40004 */ lh $a0, 4($a3) -/* 0B23DC 800B17DC 0C01EB9D */ jal load_texture -/* 0B23E0 800B17E0 AFA30030 */ sw $v1, 0x30($sp) -/* 0B23E4 800B17E4 8FA30030 */ lw $v1, 0x30($sp) -/* 0B23E8 800B17E8 8FA60044 */ lw $a2, 0x44($sp) -/* 0B23EC 800B17EC 1040003A */ beqz $v0, .L800B18D8 -/* 0B23F0 800B17F0 AC620000 */ sw $v0, ($v1) -/* 0B23F4 800B17F4 844C0006 */ lh $t4, 6($v0) -/* 0B23F8 800B17F8 00000000 */ nop -/* 0B23FC 800B17FC 318D0004 */ andi $t5, $t4, 4 -/* 0B2400 800B1800 11A0000F */ beqz $t5, .L800B1840 -/* 0B2404 800B1804 00000000 */ nop -/* 0B2408 800B1808 8E0F0040 */ lw $t7, 0x40($s0) -/* 0B240C 800B180C 00000000 */ nop -/* 0B2410 800B1810 31EE1000 */ andi $t6, $t7, 0x1000 -/* 0B2414 800B1814 11C00006 */ beqz $t6, .L800B1830 -/* 0B2418 800B1818 00000000 */ nop -/* 0B241C 800B181C 86180006 */ lh $t8, 6($s0) -/* 0B2420 800B1820 00000000 */ nop -/* 0B2424 800B1824 37190100 */ ori $t9, $t8, 0x100 -/* 0B2428 800B1828 10000005 */ b .L800B1840 -/* 0B242C 800B182C A6190006 */ sh $t9, 6($s0) -.L800B1830: -/* 0B2430 800B1830 860A0006 */ lh $t2, 6($s0) -/* 0B2434 800B1834 00000000 */ nop -/* 0B2438 800B1838 354B0080 */ ori $t3, $t2, 0x80 -/* 0B243C 800B183C A60B0006 */ sh $t3, 6($s0) -.L800B1840: -/* 0B2440 800B1840 8E2C0000 */ lw $t4, ($s1) -/* 0B2444 800B1844 00000000 */ nop -/* 0B2448 800B1848 318D0800 */ andi $t5, $t4, 0x800 -/* 0B244C 800B184C 11A00014 */ beqz $t5, .L800B18A0 -/* 0B2450 800B1850 00000000 */ nop -/* 0B2454 800B1854 8C6F0000 */ lw $t7, ($v1) -/* 0B2458 800B1858 00002025 */ move $a0, $zero -/* 0B245C 800B185C 95E50012 */ lhu $a1, 0x12($t7) -/* 0B2460 800B1860 00000000 */ nop -/* 0B2464 800B1864 00057203 */ sra $t6, $a1, 8 -/* 0B2468 800B1868 0C01BE53 */ jal get_random_number_from_range -/* 0B246C 800B186C 25C5FFFF */ addiu $a1, $t6, -1 -/* 0B2470 800B1870 8E190040 */ lw $t9, 0x40($s0) -/* 0B2474 800B1874 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2478 800B1878 0002C200 */ sll $t8, $v0, 8 -/* 0B247C 800B187C 24010002 */ li $at, 2 -/* 0B2480 800B1880 332A0003 */ andi $t2, $t9, 3 -/* 0B2484 800B1884 15410016 */ bne $t2, $at, .L800B18E0 -/* 0B2488 800B1888 A6180018 */ sh $t8, 0x18($s0) -/* 0B248C 800B188C 860B0018 */ lh $t3, 0x18($s0) -/* 0B2490 800B1890 00000000 */ nop -/* 0B2494 800B1894 356C00FF */ ori $t4, $t3, 0xff -/* 0B2498 800B1898 10000011 */ b .L800B18E0 -/* 0B249C 800B189C A60C0018 */ sh $t4, 0x18($s0) -.L800B18A0: -/* 0B24A0 800B18A0 8E0D0040 */ lw $t5, 0x40($s0) -/* 0B24A4 800B18A4 24010002 */ li $at, 2 -/* 0B24A8 800B18A8 31AF0003 */ andi $t7, $t5, 3 -/* 0B24AC 800B18AC 15E10008 */ bne $t7, $at, .L800B18D0 -/* 0B24B0 800B18B0 00000000 */ nop -/* 0B24B4 800B18B4 8C6E0000 */ lw $t6, ($v1) -/* 0B24B8 800B18B8 00000000 */ nop -/* 0B24BC 800B18BC 95D80012 */ lhu $t8, 0x12($t6) -/* 0B24C0 800B18C0 00000000 */ nop -/* 0B24C4 800B18C4 2719FFFF */ addiu $t9, $t8, -1 -/* 0B24C8 800B18C8 10000005 */ b .L800B18E0 -/* 0B24CC 800B18CC A6190018 */ sh $t9, 0x18($s0) -.L800B18D0: -/* 0B24D0 800B18D0 10000003 */ b .L800B18E0 -/* 0B24D4 800B18D4 A6000018 */ sh $zero, 0x18($s0) -.L800B18D8: -/* 0B24D8 800B18D8 240A0001 */ li $t2, 1 -/* 0B24DC 800B18DC A3AA0023 */ sb $t2, 0x23($sp) -.L800B18E0: -/* 0B24E0 800B18E0 83AB0023 */ lb $t3, 0x23($sp) -.L800B18E4: -/* 0B24E4 800B18E4 00000000 */ nop -/* 0B24E8 800B18E8 15600012 */ bnez $t3, .L800B1934 -/* 0B24EC 800B18EC 8FA50040 */ lw $a1, 0x40($sp) -/* 0B24F0 800B18F0 8602002C */ lh $v0, 0x2c($s0) -/* 0B24F4 800B18F4 24010001 */ li $at, 1 -/* 0B24F8 800B18F8 14410007 */ bne $v0, $at, .L800B1918 -/* 0B24FC 800B18FC 24010002 */ li $at, 2 -/* 0B2500 800B1900 0C02BC29 */ jal func_800AF0A4 -/* 0B2504 800B1904 02002025 */ move $a0, $s0 -/* 0B2508 800B1908 8FA60044 */ lw $a2, 0x44($sp) -/* 0B250C 800B190C 8602002C */ lh $v0, 0x2c($s0) -/* 0B2510 800B1910 00000000 */ nop -/* 0B2514 800B1914 24010002 */ li $at, 2 -.L800B1918: -/* 0B2518 800B1918 14410006 */ bne $v0, $at, .L800B1934 -/* 0B251C 800B191C 8FA50040 */ lw $a1, 0x40($sp) -/* 0B2520 800B1920 0C02BC3C */ jal func_800AF0F0 -/* 0B2524 800B1924 02002025 */ move $a0, $s0 -/* 0B2528 800B1928 8FA60044 */ lw $a2, 0x44($sp) -/* 0B252C 800B192C 00000000 */ nop -/* 0B2530 800B1930 8FA50040 */ lw $a1, 0x40($sp) -.L800B1934: -/* 0B2534 800B1934 02002025 */ move $a0, $s0 -/* 0B2538 800B1938 0C02C0F0 */ jal func_800B03C0 -/* 0B253C 800B193C 02203825 */ move $a3, $s1 -/* 0B2540 800B1940 8E2C0000 */ lw $t4, ($s1) -/* 0B2544 800B1944 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2548 800B1948 318D0080 */ andi $t5, $t4, 0x80 -/* 0B254C 800B194C 11A0000B */ beqz $t5, .L800B197C -/* 0B2550 800B1950 8FB90040 */ lw $t9, 0x40($sp) -/* 0B2554 800B1954 862F0044 */ lh $t7, 0x44($s1) -/* 0B2558 800B1958 00000000 */ nop -/* 0B255C 800B195C A60F0000 */ sh $t7, ($s0) -/* 0B2560 800B1960 862E0046 */ lh $t6, 0x46($s1) -/* 0B2564 800B1964 00000000 */ nop -/* 0B2568 800B1968 A60E0002 */ sh $t6, 2($s0) -/* 0B256C 800B196C 86380048 */ lh $t8, 0x48($s1) -/* 0B2570 800B1970 10000013 */ b .L800B19C0 -/* 0B2574 800B1974 A6180004 */ sh $t8, 4($s0) -/* 0B2578 800B1978 8FB90040 */ lw $t9, 0x40($sp) -.L800B197C: -/* 0B257C 800B197C 862B0044 */ lh $t3, 0x44($s1) -/* 0B2580 800B1980 872A0000 */ lh $t2, ($t9) -/* 0B2584 800B1984 00000000 */ nop -/* 0B2588 800B1988 014B6021 */ addu $t4, $t2, $t3 -/* 0B258C 800B198C A60C0000 */ sh $t4, ($s0) -/* 0B2590 800B1990 8FAD0040 */ lw $t5, 0x40($sp) -/* 0B2594 800B1994 862E0046 */ lh $t6, 0x46($s1) -/* 0B2598 800B1998 85AF0002 */ lh $t7, 2($t5) -/* 0B259C 800B199C 00000000 */ nop -/* 0B25A0 800B19A0 01EEC021 */ addu $t8, $t7, $t6 -/* 0B25A4 800B19A4 A6180002 */ sh $t8, 2($s0) -/* 0B25A8 800B19A8 8FB90040 */ lw $t9, 0x40($sp) -/* 0B25AC 800B19AC 862B0048 */ lh $t3, 0x48($s1) -/* 0B25B0 800B19B0 872A0004 */ lh $t2, 4($t9) -/* 0B25B4 800B19B4 00000000 */ nop -/* 0B25B8 800B19B8 014B6021 */ addu $t4, $t2, $t3 -/* 0B25BC 800B19BC A60C0004 */ sh $t4, 4($s0) -.L800B19C0: -/* 0B25C0 800B19C0 8E23005C */ lw $v1, 0x5c($s1) -/* 0B25C4 800B19C4 00000000 */ nop -/* 0B25C8 800B19C8 306D3800 */ andi $t5, $v1, 0x3800 -/* 0B25CC 800B19CC 11A00023 */ beqz $t5, .L800B1A5C -/* 0B25D0 800B19D0 01A01825 */ move $v1, $t5 -/* 0B25D4 800B19D4 31AF0800 */ andi $t7, $t5, 0x800 -/* 0B25D8 800B19D8 11E0000B */ beqz $t7, .L800B1A08 -/* 0B25DC 800B19DC 30791000 */ andi $t9, $v1, 0x1000 -/* 0B25E0 800B19E0 86250080 */ lh $a1, 0x80($s1) -/* 0B25E4 800B19E4 AFAD003C */ sw $t5, 0x3c($sp) -/* 0B25E8 800B19E8 0C01BE53 */ jal get_random_number_from_range -/* 0B25EC 800B19EC 00052023 */ negu $a0, $a1 -/* 0B25F0 800B19F0 860E0000 */ lh $t6, ($s0) -/* 0B25F4 800B19F4 8FA3003C */ lw $v1, 0x3c($sp) -/* 0B25F8 800B19F8 8FA60044 */ lw $a2, 0x44($sp) -/* 0B25FC 800B19FC 01C2C021 */ addu $t8, $t6, $v0 -/* 0B2600 800B1A00 A6180000 */ sh $t8, ($s0) -/* 0B2604 800B1A04 30791000 */ andi $t9, $v1, 0x1000 -.L800B1A08: -/* 0B2608 800B1A08 1320000B */ beqz $t9, .L800B1A38 -/* 0B260C 800B1A0C 306C2000 */ andi $t4, $v1, 0x2000 -/* 0B2610 800B1A10 86250082 */ lh $a1, 0x82($s1) -/* 0B2614 800B1A14 AFA3003C */ sw $v1, 0x3c($sp) -/* 0B2618 800B1A18 0C01BE53 */ jal get_random_number_from_range -/* 0B261C 800B1A1C 00052023 */ negu $a0, $a1 -/* 0B2620 800B1A20 860A0002 */ lh $t2, 2($s0) -/* 0B2624 800B1A24 8FA3003C */ lw $v1, 0x3c($sp) -/* 0B2628 800B1A28 8FA60044 */ lw $a2, 0x44($sp) -/* 0B262C 800B1A2C 01425821 */ addu $t3, $t2, $v0 -/* 0B2630 800B1A30 A60B0002 */ sh $t3, 2($s0) -/* 0B2634 800B1A34 306C2000 */ andi $t4, $v1, 0x2000 -.L800B1A38: -/* 0B2638 800B1A38 11800008 */ beqz $t4, .L800B1A5C -/* 0B263C 800B1A3C 00000000 */ nop -/* 0B2640 800B1A40 86250084 */ lh $a1, 0x84($s1) -/* 0B2644 800B1A44 0C01BE53 */ jal get_random_number_from_range -/* 0B2648 800B1A48 00052023 */ negu $a0, $a1 -/* 0B264C 800B1A4C 860D0004 */ lh $t5, 4($s0) -/* 0B2650 800B1A50 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2654 800B1A54 01A27821 */ addu $t7, $t5, $v0 -/* 0B2658 800B1A58 A60F0004 */ sh $t7, 4($s0) -.L800B1A5C: -/* 0B265C 800B1A5C 862E004A */ lh $t6, 0x4a($s1) -/* 0B2660 800B1A60 3C010001 */ lui $at, (0x0001C000 >> 16) # lui $at, 1 -/* 0B2664 800B1A64 A60E0062 */ sh $t6, 0x62($s0) -/* 0B2668 800B1A68 8638004C */ lh $t8, 0x4c($s1) -/* 0B266C 800B1A6C 3421C000 */ ori $at, (0x0001C000 & 0xFFFF) # ori $at, $at, 0xc000 -/* 0B2670 800B1A70 A6180064 */ sh $t8, 0x64($s0) -/* 0B2674 800B1A74 8639004E */ lh $t9, 0x4e($s1) -/* 0B2678 800B1A78 00000000 */ nop -/* 0B267C 800B1A7C A6190066 */ sh $t9, 0x66($s0) -/* 0B2680 800B1A80 8E23005C */ lw $v1, 0x5c($s1) -/* 0B2684 800B1A84 00000000 */ nop -/* 0B2688 800B1A88 00615024 */ and $t2, $v1, $at -/* 0B268C 800B1A8C 11400023 */ beqz $t2, .L800B1B1C -/* 0B2690 800B1A90 01401825 */ move $v1, $t2 -/* 0B2694 800B1A94 314B4000 */ andi $t3, $t2, 0x4000 -/* 0B2698 800B1A98 1160000B */ beqz $t3, .L800B1AC8 -/* 0B269C 800B1A9C 306F8000 */ andi $t7, $v1, 0x8000 -/* 0B26A0 800B1AA0 86250086 */ lh $a1, 0x86($s1) -/* 0B26A4 800B1AA4 AFAA003C */ sw $t2, 0x3c($sp) -/* 0B26A8 800B1AA8 0C01BE53 */ jal get_random_number_from_range -/* 0B26AC 800B1AAC 00052023 */ negu $a0, $a1 -/* 0B26B0 800B1AB0 860C0062 */ lh $t4, 0x62($s0) -/* 0B26B4 800B1AB4 8FA3003C */ lw $v1, 0x3c($sp) -/* 0B26B8 800B1AB8 8FA60044 */ lw $a2, 0x44($sp) -/* 0B26BC 800B1ABC 01826821 */ addu $t5, $t4, $v0 -/* 0B26C0 800B1AC0 A60D0062 */ sh $t5, 0x62($s0) -/* 0B26C4 800B1AC4 306F8000 */ andi $t7, $v1, 0x8000 -.L800B1AC8: -/* 0B26C8 800B1AC8 11E0000B */ beqz $t7, .L800B1AF8 -/* 0B26CC 800B1ACC 0003CBC0 */ sll $t9, $v1, 0xf -/* 0B26D0 800B1AD0 86250088 */ lh $a1, 0x88($s1) -/* 0B26D4 800B1AD4 AFA3003C */ sw $v1, 0x3c($sp) -/* 0B26D8 800B1AD8 0C01BE53 */ jal get_random_number_from_range -/* 0B26DC 800B1ADC 00052023 */ negu $a0, $a1 -/* 0B26E0 800B1AE0 860E0064 */ lh $t6, 0x64($s0) -/* 0B26E4 800B1AE4 8FA3003C */ lw $v1, 0x3c($sp) -/* 0B26E8 800B1AE8 8FA60044 */ lw $a2, 0x44($sp) -/* 0B26EC 800B1AEC 01C2C021 */ addu $t8, $t6, $v0 -/* 0B26F0 800B1AF0 A6180064 */ sh $t8, 0x64($s0) -/* 0B26F4 800B1AF4 0003CBC0 */ sll $t9, $v1, 0xf -.L800B1AF8: -/* 0B26F8 800B1AF8 07210009 */ bgez $t9, .L800B1B20 -/* 0B26FC 800B1AFC 8FA50040 */ lw $a1, 0x40($sp) -/* 0B2700 800B1B00 8625008A */ lh $a1, 0x8a($s1) -/* 0B2704 800B1B04 0C01BE53 */ jal get_random_number_from_range -/* 0B2708 800B1B08 00052023 */ negu $a0, $a1 -/* 0B270C 800B1B0C 860A0066 */ lh $t2, 0x66($s0) -/* 0B2710 800B1B10 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2714 800B1B14 01425821 */ addu $t3, $t2, $v0 -/* 0B2718 800B1B18 A60B0066 */ sh $t3, 0x66($s0) -.L800B1B1C: -/* 0B271C 800B1B1C 8FA50040 */ lw $a1, 0x40($sp) -.L800B1B20: -/* 0B2720 800B1B20 02002025 */ move $a0, $s0 -/* 0B2724 800B1B24 0C02C004 */ jal func_800B0010 -/* 0B2728 800B1B28 02203825 */ move $a3, $s1 -/* 0B272C 800B1B2C 8E0C0040 */ lw $t4, 0x40($s0) -/* 0B2730 800B1B30 3C01800E */ lui $at, %hi(D_800E2E2C) # $at, 0x800e -/* 0B2734 800B1B34 000C6903 */ sra $t5, $t4, 4 -/* 0B2738 800B1B38 31AF0007 */ andi $t7, $t5, 7 -/* 0B273C 800B1B3C 000F7080 */ sll $t6, $t7, 2 -/* 0B2740 800B1B40 002E0821 */ addu $at, $at, $t6 -/* 0B2744 800B1B44 C4242E2C */ lwc1 $f4, %lo(D_800E2E2C)($at) -/* 0B2748 800B1B48 92180039 */ lbu $t8, 0x39($s0) -/* 0B274C 800B1B4C 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2750 800B1B50 24010005 */ li $at, 5 -/* 0B2754 800B1B54 1701000D */ bne $t8, $at, .L800B1B8C -/* 0B2758 800B1B58 E6040068 */ swc1 $f4, 0x68($s0) -/* 0B275C 800B1B5C C600001C */ lwc1 $f0, 0x1c($s0) -/* 0B2760 800B1B60 C6020020 */ lwc1 $f2, 0x20($s0) -/* 0B2764 800B1B64 46000182 */ mul.s $f6, $f0, $f0 -/* 0B2768 800B1B68 C60E0024 */ lwc1 $f14, 0x24($s0) -/* 0B276C 800B1B6C 46021482 */ mul.s $f18, $f2, $f2 -/* 0B2770 800B1B70 00000000 */ nop -/* 0B2774 800B1B74 460E7282 */ mul.s $f10, $f14, $f14 -/* 0B2778 800B1B78 46123200 */ add.s $f8, $f6, $f18 -/* 0B277C 800B1B7C 0C0326B4 */ jal sqrtf -/* 0B2780 800B1B80 460A4300 */ add.s $f12, $f8, $f10 -/* 0B2784 800B1B84 8FA60044 */ lw $a2, 0x44($sp) -/* 0B2788 800B1B88 E6000058 */ swc1 $f0, 0x58($s0) -.L800B1B8C: -/* 0B278C 800B1B8C 8E390000 */ lw $t9, ($s1) -/* 0B2790 800B1B90 00000000 */ nop -/* 0B2794 800B1B94 332A0002 */ andi $t2, $t9, 2 -/* 0B2798 800B1B98 1140001B */ beqz $t2, .L800B1C08 -/* 0B279C 800B1B9C 00000000 */ nop -/* 0B27A0 800B1BA0 90CB0006 */ lbu $t3, 6($a2) -/* 0B27A4 800B1BA4 00000000 */ nop -/* 0B27A8 800B1BA8 256C0001 */ addiu $t4, $t3, 1 -/* 0B27AC 800B1BAC A0CC0006 */ sb $t4, 6($a2) -/* 0B27B0 800B1BB0 862D001A */ lh $t5, 0x1a($s1) -/* 0B27B4 800B1BB4 318200FF */ andi $v0, $t4, 0xff -/* 0B27B8 800B1BB8 004D082A */ slt $at, $v0, $t5 -/* 0B27BC 800B1BBC 14200012 */ bnez $at, .L800B1C08 -/* 0B27C0 800B1BC0 00000000 */ nop -/* 0B27C4 800B1BC4 84CF000C */ lh $t7, 0xc($a2) -/* 0B27C8 800B1BC8 862E001C */ lh $t6, 0x1c($s1) -/* 0B27CC 800B1BCC 84D9000E */ lh $t9, 0xe($a2) -/* 0B27D0 800B1BD0 01EEC021 */ addu $t8, $t7, $t6 -/* 0B27D4 800B1BD4 A4D8000C */ sh $t8, 0xc($a2) -/* 0B27D8 800B1BD8 862A001E */ lh $t2, 0x1e($s1) -/* 0B27DC 800B1BDC 84CC0010 */ lh $t4, 0x10($a2) -/* 0B27E0 800B1BE0 032A5821 */ addu $t3, $t9, $t2 -/* 0B27E4 800B1BE4 A4CB000E */ sh $t3, 0xe($a2) -/* 0B27E8 800B1BE8 862D0018 */ lh $t5, 0x18($s1) -/* 0B27EC 800B1BEC 00000000 */ nop -/* 0B27F0 800B1BF0 018D7821 */ addu $t7, $t4, $t5 -/* 0B27F4 800B1BF4 A4CF0010 */ sh $t7, 0x10($a2) -/* 0B27F8 800B1BF8 862E001A */ lh $t6, 0x1a($s1) -/* 0B27FC 800B1BFC 00000000 */ nop -/* 0B2800 800B1C00 004EC023 */ subu $t8, $v0, $t6 -/* 0B2804 800B1C04 A0D80006 */ sb $t8, 6($a2) -.L800B1C08: -/* 0B2808 800B1C08 8E390000 */ lw $t9, ($s1) -/* 0B280C 800B1C0C 00000000 */ nop -/* 0B2810 800B1C10 332A0008 */ andi $t2, $t9, 8 -/* 0B2814 800B1C14 1140001B */ beqz $t2, .L800B1C84 -/* 0B2818 800B1C18 00000000 */ nop -/* 0B281C 800B1C1C 90CB0007 */ lbu $t3, 7($a2) -/* 0B2820 800B1C20 00000000 */ nop -/* 0B2824 800B1C24 256C0001 */ addiu $t4, $t3, 1 -/* 0B2828 800B1C28 A0CC0007 */ sb $t4, 7($a2) -/* 0B282C 800B1C2C 862D0028 */ lh $t5, 0x28($s1) -/* 0B2830 800B1C30 318200FF */ andi $v0, $t4, 0xff -/* 0B2834 800B1C34 004D082A */ slt $at, $v0, $t5 -/* 0B2838 800B1C38 14200012 */ bnez $at, .L800B1C84 -/* 0B283C 800B1C3C 00000000 */ nop -/* 0B2840 800B1C40 84CF0012 */ lh $t7, 0x12($a2) -/* 0B2844 800B1C44 862E002A */ lh $t6, 0x2a($s1) -/* 0B2848 800B1C48 84D90014 */ lh $t9, 0x14($a2) -/* 0B284C 800B1C4C 01EEC021 */ addu $t8, $t7, $t6 -/* 0B2850 800B1C50 A4D80012 */ sh $t8, 0x12($a2) -/* 0B2854 800B1C54 862A002C */ lh $t2, 0x2c($s1) -/* 0B2858 800B1C58 84CC0016 */ lh $t4, 0x16($a2) -/* 0B285C 800B1C5C 032A5821 */ addu $t3, $t9, $t2 -/* 0B2860 800B1C60 A4CB0014 */ sh $t3, 0x14($a2) -/* 0B2864 800B1C64 862D002E */ lh $t5, 0x2e($s1) -/* 0B2868 800B1C68 00000000 */ nop -/* 0B286C 800B1C6C 018D7821 */ addu $t7, $t4, $t5 -/* 0B2870 800B1C70 A4CF0016 */ sh $t7, 0x16($a2) -/* 0B2874 800B1C74 862E0028 */ lh $t6, 0x28($s1) -/* 0B2878 800B1C78 00000000 */ nop -/* 0B287C 800B1C7C 004EC023 */ subu $t8, $v0, $t6 -/* 0B2880 800B1C80 A0D80007 */ sb $t8, 7($a2) -.L800B1C84: -/* 0B2884 800B1C84 8E190044 */ lw $t9, 0x44($s0) -/* 0B2888 800B1C88 02001025 */ move $v0, $s0 -/* 0B288C 800B1C8C 17200005 */ bnez $t9, .L800B1CA4 -/* 0B2890 800B1C90 00000000 */ nop -/* 0B2894 800B1C94 0C02C810 */ jal func_800B2040 -/* 0B2898 800B1C98 02002025 */ move $a0, $s0 -/* 0B289C 800B1C9C 10000001 */ b .L800B1CA4 -/* 0B28A0 800B1CA0 00001025 */ move $v0, $zero -.L800B1CA4: -/* 0B28A4 800B1CA4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B28A8 800B1CA8 8FB00014 */ lw $s0, 0x14($sp) -/* 0B28AC 800B1CAC 8FB10018 */ lw $s1, 0x18($sp) -/* 0B28B0 800B1CB0 03E00008 */ jr $ra -/* 0B28B4 800B1CB4 27BD0040 */ addiu $sp, $sp, 0x40 - diff --git a/asm/non_matchings/racer/func_80046524.s b/asm/non_matchings/racer/func_80046524.s index 892fc799..db6a2d52 100644 --- a/asm/non_matchings/racer/func_80046524.s +++ b/asm/non_matchings/racer/func_80046524.s @@ -195,12 +195,12 @@ glabel func_80046524 /* 047328 80046728 00000000 */ nop /* 04732C 8004672C 8FA60128 */ lw $a2, 0x128($sp) /* 047330 80046730 02202025 */ move $a0, $s1 -/* 047334 80046734 0C014871 */ jal func_800521C4 +/* 047334 80046734 0C014871 */ jal handle_racer_head_turning /* 047338 80046738 02002825 */ move $a1, $s0 /* 04733C 8004673C 10000003 */ b .L8004674C /* 047340 80046740 00000000 */ nop .L80046744: -/* 047344 80046744 0C0148D3 */ jal func_8005234C +/* 047344 80046744 0C0148D3 */ jal slowly_reset_head_angle /* 047348 80046748 02002025 */ move $a0, $s0 .L8004674C: /* 04734C 8004674C 3C198012 */ lui $t9, %hi(gCurrentRacerInput) # $t9, 0x8012 diff --git a/asm/non_matchings/racer/func_80049794.s b/asm/non_matchings/racer/func_80049794.s index 133e1a50..b42e492d 100644 --- a/asm/non_matchings/racer/func_80049794.s +++ b/asm/non_matchings/racer/func_80049794.s @@ -393,12 +393,12 @@ glabel func_80049794 /* 04A87C 80049C7C 00000000 */ nop /* 04A880 80049C80 8FA600F8 */ lw $a2, 0xf8($sp) /* 04A884 80049C84 02202025 */ move $a0, $s1 -/* 04A888 80049C88 0C014871 */ jal func_800521C4 +/* 04A888 80049C88 0C014871 */ jal handle_racer_head_turning /* 04A88C 80049C8C 02002825 */ move $a1, $s0 /* 04A890 80049C90 10000003 */ b .L80049CA0 /* 04A894 80049C94 00000000 */ nop .L80049C98: -/* 04A898 80049C98 0C0148D3 */ jal func_8005234C +/* 04A898 80049C98 0C0148D3 */ jal slowly_reset_head_angle /* 04A89C 80049C9C 02002025 */ move $a0, $s0 .L80049CA0: /* 04A8A0 80049CA0 3C0E8012 */ lui $t6, %hi(gCurrentRacerInput) # $t6, 0x8012 diff --git a/asm/non_matchings/racer/func_8004F7F4.s b/asm/non_matchings/racer/func_8004F7F4.s index 7dc90009..774bc375 100644 --- a/asm/non_matchings/racer/func_8004F7F4.s +++ b/asm/non_matchings/racer/func_8004F7F4.s @@ -108,7 +108,7 @@ glabel func_8004F7F4 /* 05053C 8004F93C 02002825 */ move $a1, $s0 /* 050540 8004F940 8FA600C0 */ lw $a2, 0xc0($sp) /* 050544 8004F944 02202025 */ move $a0, $s1 -/* 050548 8004F948 0C014871 */ jal func_800521C4 +/* 050548 8004F948 0C014871 */ jal handle_racer_head_turning /* 05054C 8004F94C 02002825 */ move $a1, $s0 /* 050550 8004F950 3C018012 */ lui $at, %hi(D_8011D550) # $at, 0x8012 /* 050554 8004F954 A420D550 */ sh $zero, %lo(D_8011D550)($at) diff --git a/asm/non_matchings/unknown_05CEF0/func_8005C364.s b/asm/non_matchings/unknown_05CEF0/func_8005C364.s deleted file mode 100644 index 726ebfed..00000000 --- a/asm/non_matchings/unknown_05CEF0/func_8005C364.s +++ /dev/null @@ -1,498 +0,0 @@ -.late_rodata -glabel D_800E6A10 -.double 0.3 -glabel D_800E6A18 -.double -0.1 -glabel D_800E6A20 -.double 0.1 -glabel D_800E6A28 -.double 700.0 - -.text -glabel func_8005C364 -/* 05CF64 8005C364 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 05CF68 8005C368 AFA40058 */ sw $a0, 0x58($sp) -/* 05CF6C 8005C36C AFBF002C */ sw $ra, 0x2c($sp) -/* 05CF70 8005C370 AFB10028 */ sw $s1, 0x28($sp) -/* 05CF74 8005C374 AFB00024 */ sw $s0, 0x24($sp) -/* 05CF78 8005C378 3C04800E */ lui $a0, %hi(D_800DCDE0) # $a0, 0x800e -/* 05CF7C 8005C37C 00E08025 */ move $s0, $a3 -/* 05CF80 8005C380 00C08825 */ move $s1, $a2 -/* 05CF84 8005C384 E7B50018 */ swc1 $f21, 0x18($sp) -/* 05CF88 8005C388 E7B4001C */ swc1 $f20, 0x1c($sp) -/* 05CF8C 8005C38C AFA5005C */ sw $a1, 0x5c($sp) -/* 05CF90 8005C390 0C01729E */ jal func_8005CA78 -/* 05CF94 8005C394 2484CDE0 */ addiu $a0, %lo(D_800DCDE0) # addiu $a0, $a0, -0x3220 -/* 05CF98 8005C398 8FA2006C */ lw $v0, 0x6c($sp) -/* 05CF9C 8005C39C 8FA50068 */ lw $a1, 0x68($sp) -/* 05CFA0 8005C3A0 8C4E0000 */ lw $t6, ($v0) -/* 05CFA4 8005C3A4 2403FFEF */ li $v1, -17 -/* 05CFA8 8005C3A8 01C37824 */ and $t7, $t6, $v1 -/* 05CFAC 8005C3AC AC4F0000 */ sw $t7, ($v0) -/* 05CFB0 8005C3B0 8CB80000 */ lw $t8, ($a1) -/* 05CFB4 8005C3B4 24010001 */ li $at, 1 -/* 05CFB8 8005C3B8 0303C824 */ and $t9, $t8, $v1 -/* 05CFBC 8005C3BC ACB90000 */ sw $t9, ($a1) -/* 05CFC0 8005C3C0 822A003B */ lb $t2, 0x3b($s1) -/* 05CFC4 8005C3C4 00000000 */ nop -/* 05CFC8 8005C3C8 A7AA0056 */ sh $t2, 0x56($sp) -/* 05CFCC 8005C3CC 862B0018 */ lh $t3, 0x18($s1) -/* 05CFD0 8005C3D0 00000000 */ nop -/* 05CFD4 8005C3D4 A7AB0054 */ sh $t3, 0x54($sp) -/* 05CFD8 8005C3D8 860C016A */ lh $t4, 0x16a($s0) -/* 05CFDC 8005C3DC 00000000 */ nop -/* 05CFE0 8005C3E0 A7AC0052 */ sh $t4, 0x52($sp) -/* 05CFE4 8005C3E4 820D01D8 */ lb $t5, 0x1d8($s0) -/* 05CFE8 8005C3E8 00000000 */ nop -/* 05CFEC 8005C3EC 15A10008 */ bne $t5, $at, .L8005C410 -/* 05CFF0 8005C3F0 8FA90070 */ lw $t1, 0x70($sp) -/* 05CFF4 8005C3F4 0C008500 */ jal func_80021400 -/* 05CFF8 8005C3F8 24040082 */ li $a0, 130 -/* 05CFFC 8005C3FC 820E01D8 */ lb $t6, 0x1d8($s0) -/* 05D000 8005C400 8FA50068 */ lw $a1, 0x68($sp) -/* 05D004 8005C404 25CF0001 */ addiu $t7, $t6, 1 -/* 05D008 8005C408 A20F01D8 */ sb $t7, 0x1d8($s0) -/* 05D00C 8005C40C 8FA90070 */ lw $t1, 0x70($sp) -.L8005C410: -/* 05D010 8005C410 86180000 */ lh $t8, ($s0) -/* 05D014 8005C414 8D220000 */ lw $v0, ($t1) -/* 05D018 8005C418 2408FFFF */ li $t0, -1 -/* 05D01C 8005C41C 1518001D */ bne $t0, $t8, .L8005C494 -/* 05D020 8005C420 00401825 */ move $v1, $v0 -/* 05D024 8005C424 24010064 */ li $at, 100 -/* 05D028 8005C428 1041001A */ beq $v0, $at, .L8005C494 -/* 05D02C 8005C42C 2459FFF1 */ addiu $t9, $v0, -0xf -/* 05D030 8005C430 07210016 */ bgez $t9, .L8005C48C -/* 05D034 8005C434 AD390000 */ sw $t9, ($t1) -/* 05D038 8005C438 3C0B8012 */ lui $t3, %hi(D_8011D5CC) # $t3, 0x8012 -/* 05D03C 8005C43C 816BD5CC */ lb $t3, %lo(D_8011D5CC)($t3) -/* 05D040 8005C440 00002025 */ move $a0, $zero -/* 05D044 8005C444 15600009 */ bnez $t3, .L8005C46C -/* 05D048 8005C448 240D0001 */ li $t5, 1 -/* 05D04C 8005C44C 0C0172C1 */ jal func_8005CB04 -/* 05D050 8005C450 AFA20040 */ sw $v0, 0x40($sp) -/* 05D054 8005C454 8FA30040 */ lw $v1, 0x40($sp) -/* 05D058 8005C458 8FA50068 */ lw $a1, 0x68($sp) -/* 05D05C 8005C45C 8FA90070 */ lw $t1, 0x70($sp) -/* 05D060 8005C460 240C0005 */ li $t4, 5 -/* 05D064 8005C464 A20C01D3 */ sb $t4, 0x1d3($s0) -/* 05D068 8005C468 240D0001 */ li $t5, 1 -.L8005C46C: -/* 05D06C 8005C46C 3C018012 */ lui $at, %hi(D_8011D5CC) # $at, 0x8012 -/* 05D070 8005C470 A02DD5CC */ sb $t5, %lo(D_8011D5CC)($at) -/* 05D074 8005C474 AD200000 */ sw $zero, ($t1) -/* 05D078 8005C478 8CAE0000 */ lw $t6, ($a1) -/* 05D07C 8005C47C 00000000 */ nop -/* 05D080 8005C480 35CF8000 */ ori $t7, $t6, 0x8000 -/* 05D084 8005C484 10000003 */ b .L8005C494 -/* 05D088 8005C488 ACAF0000 */ sw $t7, ($a1) -.L8005C48C: -/* 05D08C 8005C48C 3C018012 */ lui $at, %hi(D_8011D5CC) # $at, 0x8012 -/* 05D090 8005C490 A020D5CC */ sb $zero, %lo(D_8011D5CC)($at) -.L8005C494: -/* 05D094 8005C494 8FA40058 */ lw $a0, 0x58($sp) -/* 05D098 8005C498 8FA5005C */ lw $a1, 0x5c($sp) -/* 05D09C 8005C49C 02203025 */ move $a2, $s1 -/* 05D0A0 8005C4A0 02003825 */ move $a3, $s0 -/* 05D0A4 8005C4A4 0C013DFD */ jal func_8004F7F4 -/* 05D0A8 8005C4A8 AFA30040 */ sw $v1, 0x40($sp) -/* 05D0AC 8005C4AC 8FA30040 */ lw $v1, 0x40($sp) -/* 05D0B0 8005C4B0 8FA90070 */ lw $t1, 0x70($sp) -/* 05D0B4 8005C4B4 44808000 */ mtc1 $zero, $f16 -/* 05D0B8 8005C4B8 AD230000 */ sw $v1, ($t1) -/* 05D0BC 8005C4BC E6100030 */ swc1 $f16, 0x30($s0) -/* 05D0C0 8005C4C0 87B80052 */ lh $t8, 0x52($sp) -/* 05D0C4 8005C4C4 2408FFFF */ li $t0, -1 -/* 05D0C8 8005C4C8 A618016A */ sh $t8, 0x16a($s0) -/* 05D0CC 8005C4CC 87B90056 */ lh $t9, 0x56($sp) -/* 05D0D0 8005C4D0 00000000 */ nop -/* 05D0D4 8005C4D4 A239003B */ sb $t9, 0x3b($s1) -/* 05D0D8 8005C4D8 87AA0054 */ lh $t2, 0x54($sp) -/* 05D0DC 8005C4DC 00000000 */ nop -/* 05D0E0 8005C4E0 A62A0018 */ sh $t2, 0x18($s1) -/* 05D0E4 8005C4E4 820B0187 */ lb $t3, 0x187($s0) -/* 05D0E8 8005C4E8 00000000 */ nop -/* 05D0EC 8005C4EC 11600022 */ beqz $t3, .L8005C578 -/* 05D0F0 8005C4F0 00000000 */ nop -/* 05D0F4 8005C4F4 8223003B */ lb $v1, 0x3b($s1) -/* 05D0F8 8005C4F8 24050003 */ li $a1, 3 -/* 05D0FC 8005C4FC 10A3001E */ beq $a1, $v1, .L8005C578 -/* 05D100 8005C500 3C01401E */ li $at, 0x401E0000 # 2.468750 -/* 05D104 8005C504 A20301CD */ sb $v1, 0x1cd($s0) -/* 05D108 8005C508 C6240020 */ lwc1 $f4, 0x20($s1) -/* 05D10C 8005C50C 44814800 */ mtc1 $at, $f9 -/* 05D110 8005C510 44804000 */ mtc1 $zero, $f8 -/* 05D114 8005C514 460021A1 */ cvt.d.s $f6, $f4 -/* 05D118 8005C518 46283280 */ add.d $f10, $f6, $f8 -/* 05D11C 8005C51C A225003B */ sb $a1, 0x3b($s1) -/* 05D120 8005C520 462054A0 */ cvt.s.d $f18, $f10 -/* 05D124 8005C524 24040001 */ li $a0, 1 -/* 05D128 8005C528 0C0172C1 */ jal func_8005CB04 -/* 05D12C 8005C52C E6320020 */ swc1 $f18, 0x20($s1) -/* 05D130 8005C530 24040011 */ li $a0, 17 -/* 05D134 8005C534 0C000741 */ jal play_sound_global -/* 05D138 8005C538 00002825 */ move $a1, $zero -/* 05D13C 8005C53C 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 05D140 8005C540 44816000 */ mtc1 $at, $f12 -/* 05D144 8005C544 0C01A7CA */ jal func_80069F28 -/* 05D148 8005C548 00000000 */ nop -/* 05D14C 8005C54C 3C01800E */ lui $at, %hi(D_800E6A10 + 4) # $at, 0x800e -/* 05D150 8005C550 C604002C */ lwc1 $f4, 0x2c($s0) -/* 05D154 8005C554 C4296A10 */ lwc1 $f9, %lo(D_800E6A10)($at) -/* 05D158 8005C558 C4286A14 */ lwc1 $f8, %lo(D_800E6A10 + 4)($at) -/* 05D15C 8005C55C 460021A1 */ cvt.d.s $f6, $f4 -/* 05D160 8005C560 46283282 */ mul.d $f10, $f6, $f8 -/* 05D164 8005C564 44808000 */ mtc1 $zero, $f16 -/* 05D168 8005C568 2408FFFF */ li $t0, -1 -/* 05D16C 8005C56C E610000C */ swc1 $f16, 0xc($s0) -/* 05D170 8005C570 462054A0 */ cvt.s.d $f18, $f10 -/* 05D174 8005C574 E612002C */ swc1 $f18, 0x2c($s0) -.L8005C578: -/* 05D178 8005C578 8E0C0148 */ lw $t4, 0x148($s0) -/* 05D17C 8005C57C 24050003 */ li $a1, 3 -/* 05D180 8005C580 11800011 */ beqz $t4, .L8005C5C8 -/* 05D184 8005C584 A2000187 */ sb $zero, 0x187($s0) -/* 05D188 8005C588 C620001C */ lwc1 $f0, 0x1c($s1) -/* 05D18C 8005C58C C6220024 */ lwc1 $f2, 0x24($s1) -/* 05D190 8005C590 46000502 */ mul.s $f20, $f0, $f0 -/* 05D194 8005C594 00000000 */ nop -/* 05D198 8005C598 46021382 */ mul.s $f14, $f2, $f2 -/* 05D19C 8005C59C 00000000 */ nop -/* 05D1A0 8005C5A0 4614A102 */ mul.s $f4, $f20, $f20 -/* 05D1A4 8005C5A4 00000000 */ nop -/* 05D1A8 8005C5A8 460E7182 */ mul.s $f6, $f14, $f14 -/* 05D1AC 8005C5AC 0C0326B4 */ jal sqrtf -/* 05D1B0 8005C5B0 46062300 */ add.s $f12, $f4, $f6 -/* 05D1B4 8005C5B4 46000207 */ neg.s $f8, $f0 -/* 05D1B8 8005C5B8 44808000 */ mtc1 $zero, $f16 -/* 05D1BC 8005C5BC E608002C */ swc1 $f8, 0x2c($s0) -/* 05D1C0 8005C5C0 2408FFFF */ li $t0, -1 -/* 05D1C4 8005C5C4 24050003 */ li $a1, 3 -.L8005C5C8: -/* 05D1C8 8005C5C8 8E2D0068 */ lw $t5, 0x68($s1) -/* 05D1CC 8005C5CC 8223003B */ lb $v1, 0x3b($s1) -/* 05D1D0 8005C5D0 8DA20000 */ lw $v0, ($t5) -/* 05D1D4 8005C5D4 000378C0 */ sll $t7, $v1, 3 -/* 05D1D8 8005C5D8 8C440000 */ lw $a0, ($v0) -/* 05D1DC 8005C5DC 00000000 */ nop -/* 05D1E0 8005C5E0 8C8E0044 */ lw $t6, 0x44($a0) -/* 05D1E4 8005C5E4 00000000 */ nop -/* 05D1E8 8005C5E8 01CFC021 */ addu $t8, $t6, $t7 -/* 05D1EC 8005C5EC 8F190004 */ lw $t9, 4($t8) -/* 05D1F0 8005C5F0 00000000 */ nop -/* 05D1F4 8005C5F4 00195100 */ sll $t2, $t9, 4 -/* 05D1F8 8005C5F8 254BFFEF */ addiu $t3, $t2, -0x11 -/* 05D1FC 8005C5FC 448B5000 */ mtc1 $t3, $f10 -/* 05D200 8005C600 10A3003B */ beq $a1, $v1, .L8005C6F0 -/* 05D204 8005C604 46805520 */ cvt.s.w $f20, $f10 -/* 05D208 8005C608 C612002C */ lwc1 $f18, 0x2c($s0) -/* 05D20C 8005C60C 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 05D210 8005C610 44812800 */ mtc1 $at, $f5 -/* 05D214 8005C614 44802000 */ mtc1 $zero, $f4 -/* 05D218 8005C618 46009021 */ cvt.d.s $f0, $f18 -/* 05D21C 8005C61C 4624003C */ c.lt.d $f0, $f4 -/* 05D220 8005C620 240C0001 */ li $t4, 1 -/* 05D224 8005C624 45000010 */ bc1f .L8005C668 -/* 05D228 8005C628 3C01800E */ lui $at, %hi(D_800E6A18 + 4) # $at, 0x800e -/* 05D22C 8005C62C A22C003B */ sb $t4, 0x3b($s1) -/* 05D230 8005C630 C7A8005C */ lwc1 $f8, 0x5c($sp) -/* 05D234 8005C634 C606002C */ lwc1 $f6, 0x2c($s0) -/* 05D238 8005C638 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 05D23C 8005C63C 46083282 */ mul.s $f10, $f6, $f8 -/* 05D240 8005C640 44812800 */ mtc1 $at, $f5 -/* 05D244 8005C644 44802000 */ mtc1 $zero, $f4 -/* 05D248 8005C648 C608000C */ lwc1 $f8, 0xc($s0) -/* 05D24C 8005C64C 460054A1 */ cvt.d.s $f18, $f10 -/* 05D250 8005C650 46249182 */ mul.d $f6, $f18, $f4 -/* 05D254 8005C654 460042A1 */ cvt.d.s $f10, $f8 -/* 05D258 8005C658 46265481 */ sub.d $f18, $f10, $f6 -/* 05D25C 8005C65C 46209120 */ cvt.s.d $f4, $f18 -/* 05D260 8005C660 1000002B */ b .L8005C710 -/* 05D264 8005C664 E604000C */ swc1 $f4, 0xc($s0) -.L8005C668: -/* 05D268 8005C668 C4296A18 */ lwc1 $f9, %lo(D_800E6A18)($at) -/* 05D26C 8005C66C C4286A1C */ lwc1 $f8, %lo(D_800E6A18 + 4)($at) -/* 05D270 8005C670 3C01800E */ lui $at, %hi(D_800E6A20 + 4) # $at, 0x800e -/* 05D274 8005C674 4628003C */ c.lt.d $f0, $f8 -/* 05D278 8005C678 240D0002 */ li $t5, 2 -/* 05D27C 8005C67C 45010008 */ bc1t .L8005C6A0 -/* 05D280 8005C680 00000000 */ nop -/* 05D284 8005C684 C42B6A20 */ lwc1 $f11, %lo(D_800E6A20)($at) -/* 05D288 8005C688 C42A6A24 */ lwc1 $f10, %lo(D_800E6A20 + 4)($at) -/* 05D28C 8005C68C 00000000 */ nop -/* 05D290 8005C690 4620503C */ c.lt.d $f10, $f0 -/* 05D294 8005C694 00000000 */ nop -/* 05D298 8005C698 4500000C */ bc1f .L8005C6CC -/* 05D29C 8005C69C 00000000 */ nop -.L8005C6A0: -/* 05D2A0 8005C6A0 A22D003B */ sb $t5, 0x3b($s1) -/* 05D2A4 8005C6A4 C7B2005C */ lwc1 $f18, 0x5c($sp) -/* 05D2A8 8005C6A8 C606002C */ lwc1 $f6, 0x2c($s0) -/* 05D2AC 8005C6AC 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05D2B0 8005C6B0 46123102 */ mul.s $f4, $f6, $f18 -/* 05D2B4 8005C6B4 44814000 */ mtc1 $at, $f8 -/* 05D2B8 8005C6B8 C606000C */ lwc1 $f6, 0xc($s0) -/* 05D2BC 8005C6BC 46082282 */ mul.s $f10, $f4, $f8 -/* 05D2C0 8005C6C0 460A3481 */ sub.s $f18, $f6, $f10 -/* 05D2C4 8005C6C4 10000012 */ b .L8005C710 -/* 05D2C8 8005C6C8 E612000C */ swc1 $f18, 0xc($s0) -.L8005C6CC: -/* 05D2CC 8005C6CC A220003B */ sb $zero, 0x3b($s1) -/* 05D2D0 8005C6D0 C604000C */ lwc1 $f4, 0xc($s0) -/* 05D2D4 8005C6D4 C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 05D2D8 8005C6D8 46002221 */ cvt.d.s $f8, $f4 -/* 05D2DC 8005C6DC 460032A1 */ cvt.d.s $f10, $f6 -/* 05D2E0 8005C6E0 462A4480 */ add.d $f18, $f8, $f10 -/* 05D2E4 8005C6E4 46209120 */ cvt.s.d $f4, $f18 -/* 05D2E8 8005C6E8 10000009 */ b .L8005C710 -/* 05D2EC 8005C6EC E604000C */ swc1 $f4, 0xc($s0) -.L8005C6F0: -/* 05D2F0 8005C6F0 C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 05D2F4 8005C6F4 C608000C */ lwc1 $f8, 0xc($s0) -/* 05D2F8 8005C6F8 46003021 */ cvt.d.s $f0, $f6 -/* 05D2FC 8005C6FC 46200480 */ add.d $f18, $f0, $f0 -/* 05D300 8005C700 460042A1 */ cvt.d.s $f10, $f8 -/* 05D304 8005C704 46325100 */ add.d $f4, $f10, $f18 -/* 05D308 8005C708 462021A0 */ cvt.s.d $f6, $f4 -/* 05D30C 8005C70C E606000C */ swc1 $f6, 0xc($s0) -.L8005C710: -/* 05D310 8005C710 C600000C */ lwc1 $f0, 0xc($s0) -/* 05D314 8005C714 00000000 */ nop -/* 05D318 8005C718 4610003C */ c.lt.s $f0, $f16 -/* 05D31C 8005C71C 00000000 */ nop -/* 05D320 8005C720 4500000A */ bc1f .L8005C74C -/* 05D324 8005C724 00000000 */ nop -.L8005C728: -/* 05D328 8005C728 46140200 */ add.s $f8, $f0, $f20 -/* 05D32C 8005C72C E608000C */ swc1 $f8, 0xc($s0) -/* 05D330 8005C730 A4480010 */ sh $t0, 0x10($v0) -/* 05D334 8005C734 C600000C */ lwc1 $f0, 0xc($s0) -/* 05D338 8005C738 00000000 */ nop -/* 05D33C 8005C73C 4610003C */ c.lt.s $f0, $f16 -/* 05D340 8005C740 00000000 */ nop -/* 05D344 8005C744 4501FFF8 */ bc1t .L8005C728 -/* 05D348 8005C748 00000000 */ nop -.L8005C74C: -/* 05D34C 8005C74C 4600A03C */ c.lt.s $f20, $f0 -/* 05D350 8005C750 00000000 */ nop -/* 05D354 8005C754 4500000A */ bc1f .L8005C780 -/* 05D358 8005C758 00000000 */ nop -.L8005C75C: -/* 05D35C 8005C75C 46140281 */ sub.s $f10, $f0, $f20 -/* 05D360 8005C760 E60A000C */ swc1 $f10, 0xc($s0) -/* 05D364 8005C764 A4480010 */ sh $t0, 0x10($v0) -/* 05D368 8005C768 C600000C */ lwc1 $f0, 0xc($s0) -/* 05D36C 8005C76C 00000000 */ nop -/* 05D370 8005C770 4600A03C */ c.lt.s $f20, $f0 -/* 05D374 8005C774 00000000 */ nop -/* 05D378 8005C778 4501FFF8 */ bc1t .L8005C75C -/* 05D37C 8005C77C 00000000 */ nop -.L8005C780: -/* 05D380 8005C780 844E0010 */ lh $t6, 0x10($v0) -/* 05D384 8005C784 00000000 */ nop -/* 05D388 8005C788 150E000A */ bne $t0, $t6, .L8005C7B4 -/* 05D38C 8005C78C 00000000 */ nop -/* 05D390 8005C790 822F003B */ lb $t7, 0x3b($s1) -/* 05D394 8005C794 00000000 */ nop -/* 05D398 8005C798 14AF0006 */ bne $a1, $t7, .L8005C7B4 -/* 05D39C 8005C79C 00000000 */ nop -/* 05D3A0 8005C7A0 921801CD */ lbu $t8, 0x1cd($s0) -/* 05D3A4 8005C7A4 00000000 */ nop -/* 05D3A8 8005C7A8 A238003B */ sb $t8, 0x3b($s1) -/* 05D3AC 8005C7AC C600000C */ lwc1 $f0, 0xc($s0) -/* 05D3B0 8005C7B0 00000000 */ nop -.L8005C7B4: -/* 05D3B4 8005C7B4 444AF800 */ cfc1 $t2, $31 -/* 05D3B8 8005C7B8 86390018 */ lh $t9, 0x18($s1) -/* 05D3BC 8005C7BC 35410003 */ ori $at, $t2, 3 -/* 05D3C0 8005C7C0 38210002 */ xori $at, $at, 2 -/* 05D3C4 8005C7C4 44C1F800 */ ctc1 $at, $31 -/* 05D3C8 8005C7C8 A7B90054 */ sh $t9, 0x54($sp) -/* 05D3CC 8005C7CC 460004A4 */ cvt.w.s $f18, $f0 -/* 05D3D0 8005C7D0 822C003B */ lb $t4, 0x3b($s1) -/* 05D3D4 8005C7D4 440B9000 */ mfc1 $t3, $f18 -/* 05D3D8 8005C7D8 24010001 */ li $at, 1 -/* 05D3DC 8005C7DC 44CAF800 */ ctc1 $t2, $31 -/* 05D3E0 8005C7E0 AE200074 */ sw $zero, 0x74($s1) -/* 05D3E4 8005C7E4 1581000C */ bne $t4, $at, .L8005C818 -/* 05D3E8 8005C7E8 A62B0018 */ sh $t3, 0x18($s1) -/* 05D3EC 8005C7EC 87A60054 */ lh $a2, 0x54($sp) -/* 05D3F0 8005C7F0 240D00AD */ li $t5, 173 -/* 05D3F4 8005C7F4 AFAD0010 */ sw $t5, 0x10($sp) -/* 05D3F8 8005C7F8 02202025 */ move $a0, $s1 -/* 05D3FC 8005C7FC 24050002 */ li $a1, 2 -/* 05D400 8005C800 0C0044F3 */ jal func_800113CC -/* 05D404 8005C804 240700AC */ li $a3, 172 -/* 05D408 8005C808 8E2E0074 */ lw $t6, 0x74($s1) -/* 05D40C 8005C80C 00000000 */ nop -/* 05D410 8005C810 35CF0003 */ ori $t7, $t6, 3 -/* 05D414 8005C814 AE2F0074 */ sw $t7, 0x74($s1) -.L8005C818: -/* 05D418 8005C818 8FA50058 */ lw $a1, 0x58($sp) -/* 05D41C 8005C81C 0C02BF0F */ jal func_800AFC3C -/* 05D420 8005C820 02202025 */ move $a0, $s1 -/* 05D424 8005C824 02202025 */ move $a0, $s1 -/* 05D428 8005C828 02002825 */ move $a1, $s0 -/* 05D42C 8005C82C 0C017412 */ jal func_8005D048 -/* 05D430 8005C830 24060078 */ li $a2, 120 -/* 05D434 8005C834 8222003B */ lb $v0, 0x3b($s1) -/* 05D438 8005C838 24010001 */ li $at, 1 -/* 05D43C 8005C83C 10410006 */ beq $v0, $at, .L8005C858 -/* 05D440 8005C840 00002025 */ move $a0, $zero -/* 05D444 8005C844 24010002 */ li $at, 2 -/* 05D448 8005C848 10410005 */ beq $v0, $at, .L8005C860 -/* 05D44C 8005C84C 24050100 */ li $a1, 256 -/* 05D450 8005C850 10000003 */ b .L8005C860 -/* 05D454 8005C854 24051500 */ li $a1, 5376 -.L8005C858: -/* 05D458 8005C858 10000001 */ b .L8005C860 -/* 05D45C 8005C85C 24052500 */ li $a1, 9472 -.L8005C860: -/* 05D460 8005C860 0C006EB2 */ jal get_racer_object -/* 05D464 8005C864 AFA50038 */ sw $a1, 0x38($sp) -/* 05D468 8005C868 AFA20030 */ sw $v0, 0x30($sp) -/* 05D46C 8005C86C C626000C */ lwc1 $f6, 0xc($s1) -/* 05D470 8005C870 C444000C */ lwc1 $f4, 0xc($v0) -/* 05D474 8005C874 C62A0014 */ lwc1 $f10, 0x14($s1) -/* 05D478 8005C878 46062501 */ sub.s $f20, $f4, $f6 -/* 05D47C 8005C87C C4480014 */ lwc1 $f8, 0x14($v0) -/* 05D480 8005C880 4614A482 */ mul.s $f18, $f20, $f20 -/* 05D484 8005C884 460A4381 */ sub.s $f14, $f8, $f10 -/* 05D488 8005C888 E7AE0048 */ swc1 $f14, 0x48($sp) -/* 05D48C 8005C88C 460E7102 */ mul.s $f4, $f14, $f14 -/* 05D490 8005C890 0C0326B4 */ jal sqrtf -/* 05D494 8005C894 46049300 */ add.s $f12, $f18, $f4 -/* 05D498 8005C898 3C01800E */ lui $at, %hi(D_800E6A28 + 4) # $at, 0x800e -/* 05D49C 8005C89C C4296A28 */ lwc1 $f9, %lo(D_800E6A28)($at) -/* 05D4A0 8005C8A0 C4286A2C */ lwc1 $f8, %lo(D_800E6A28 + 4)($at) -/* 05D4A4 8005C8A4 460001A1 */ cvt.d.s $f6, $f0 -/* 05D4A8 8005C8A8 4628303C */ c.lt.d $f6, $f8 -/* 05D4AC 8005C8AC 8FA50038 */ lw $a1, 0x38($sp) -/* 05D4B0 8005C8B0 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 05D4B4 8005C8B4 4500001E */ bc1f .L8005C930 -/* 05D4B8 8005C8B8 00000000 */ nop -/* 05D4BC 8005C8BC 4600A306 */ mov.s $f12, $f20 -/* 05D4C0 8005C8C0 0C01C1D4 */ jal arctan2_f -/* 05D4C4 8005C8C4 AFA50038 */ sw $a1, 0x38($sp) -/* 05D4C8 8005C8C8 86380000 */ lh $t8, ($s1) -/* 05D4CC 8005C8CC 34018000 */ li $at, 32768 -/* 05D4D0 8005C8D0 3319FFFF */ andi $t9, $t8, 0xffff -/* 05D4D4 8005C8D4 00591823 */ subu $v1, $v0, $t9 -/* 05D4D8 8005C8D8 00611821 */ addu $v1, $v1, $at -/* 05D4DC 8005C8DC 8FA50038 */ lw $a1, 0x38($sp) -/* 05D4E0 8005C8E0 34018001 */ li $at, 32769 -/* 05D4E4 8005C8E4 0061082A */ slt $at, $v1, $at -/* 05D4E8 8005C8E8 14200004 */ bnez $at, .L8005C8FC -/* 05D4EC 8005C8EC 00051023 */ negu $v0, $a1 -/* 05D4F0 8005C8F0 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 05D4F4 8005C8F4 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 05D4F8 8005C8F8 00611821 */ addu $v1, $v1, $at -.L8005C8FC: -/* 05D4FC 8005C8FC 28618000 */ slti $at, $v1, -0x8000 -/* 05D500 8005C900 10200002 */ beqz $at, .L8005C90C -/* 05D504 8005C904 3401FFFF */ li $at, 65535 -/* 05D508 8005C908 00611821 */ addu $v1, $v1, $at -.L8005C90C: -/* 05D50C 8005C90C 00A3082A */ slt $at, $a1, $v1 -/* 05D510 8005C910 10200003 */ beqz $at, .L8005C920 -/* 05D514 8005C914 0062082A */ slt $at, $v1, $v0 -/* 05D518 8005C918 00A01825 */ move $v1, $a1 -/* 05D51C 8005C91C 0062082A */ slt $at, $v1, $v0 -.L8005C920: -/* 05D520 8005C920 10200002 */ beqz $at, .L8005C92C -/* 05D524 8005C924 00000000 */ nop -/* 05D528 8005C928 00401825 */ move $v1, $v0 -.L8005C92C: -/* 05D52C 8005C92C A603016C */ sh $v1, 0x16c($s0) -.L8005C930: -/* 05D530 8005C930 822A003B */ lb $t2, 0x3b($s1) -/* 05D534 8005C934 24010001 */ li $at, 1 -/* 05D538 8005C938 1541000B */ bne $t2, $at, .L8005C968 -/* 05D53C 8005C93C 3C028012 */ lui $v0, %hi(D_8011D5C0) # $v0, 0x8012 -/* 05D540 8005C940 820B01E7 */ lb $t3, 0x1e7($s0) -/* 05D544 8005C944 00000000 */ nop -/* 05D548 8005C948 316C001F */ andi $t4, $t3, 0x1f -/* 05D54C 8005C94C 2981000A */ slti $at, $t4, 0xa -/* 05D550 8005C950 10200006 */ beqz $at, .L8005C96C -/* 05D554 8005C954 8FA30030 */ lw $v1, 0x30($sp) -/* 05D558 8005C958 860D016C */ lh $t5, 0x16c($s0) -/* 05D55C 8005C95C 00000000 */ nop -/* 05D560 8005C960 000D7043 */ sra $t6, $t5, 1 -/* 05D564 8005C964 A60E016C */ sh $t6, 0x16c($s0) -.L8005C968: -/* 05D568 8005C968 8FA30030 */ lw $v1, 0x30($sp) -.L8005C96C: -/* 05D56C 8005C96C 2442D5C0 */ addiu $v0, %lo(D_8011D5C0) # addiu $v0, $v0, -0x2a40 -/* 05D570 8005C970 C4420000 */ lwc1 $f2, ($v0) -/* 05D574 8005C974 C4600010 */ lwc1 $f0, 0x10($v1) -/* 05D578 8005C978 44809000 */ mtc1 $zero, $f18 -/* 05D57C 8005C97C 4600103C */ c.lt.s $f2, $f0 -/* 05D580 8005C980 8C700064 */ lw $s0, 0x64($v1) -/* 05D584 8005C984 45000005 */ bc1f .L8005C99C -/* 05D588 8005C988 3C014079 */ li $at, 0x40790000 # 3.890625 -/* 05D58C 8005C98C E4400000 */ swc1 $f0, ($v0) -/* 05D590 8005C990 C4600010 */ lwc1 $f0, 0x10($v1) -/* 05D594 8005C994 C4420000 */ lwc1 $f2, ($v0) -/* 05D598 8005C998 00000000 */ nop -.L8005C99C: -/* 05D59C 8005C99C 44819800 */ mtc1 $at, $f19 -/* 05D5A0 8005C9A0 460002A1 */ cvt.d.s $f10, $f0 -/* 05D5A4 8005C9A4 46325100 */ add.d $f4, $f10, $f18 -/* 05D5A8 8005C9A8 460011A1 */ cvt.d.s $f6, $f2 -/* 05D5AC 8005C9AC 4626203C */ c.lt.d $f4, $f6 -/* 05D5B0 8005C9B0 00000000 */ nop -/* 05D5B4 8005C9B4 4500000F */ bc1f .L8005C9F4 -/* 05D5B8 8005C9B8 00000000 */ nop -/* 05D5BC 8005C9BC 0C030063 */ jal func_800C018C -/* 05D5C0 8005C9C0 00000000 */ nop -/* 05D5C4 8005C9C4 14400007 */ bnez $v0, .L8005C9E4 -/* 05D5C8 8005C9C8 00000000 */ nop -/* 05D5CC 8005C9CC 0C027B20 */ jal is_in_two_player_adventure -/* 05D5D0 8005C9D0 00000000 */ nop -/* 05D5D4 8005C9D4 10400003 */ beqz $v0, .L8005C9E4 -/* 05D5D8 8005C9D8 00000000 */ nop -/* 05D5DC 8005C9DC 0C01BCE6 */ jal func_8006F398 -/* 05D5E0 8005C9E0 00000000 */ nop -.L8005C9E4: -/* 05D5E4 8005C9E4 0C01BC50 */ jal func_8006F140 -/* 05D5E8 8005C9E8 24040001 */ li $a0, 1 -/* 05D5EC 8005C9EC 8FA30030 */ lw $v1, 0x30($sp) -/* 05D5F0 8005C9F0 00000000 */ nop -.L8005C9F4: -/* 05D5F4 8005C9F4 8C62004C */ lw $v0, 0x4c($v1) -/* 05D5F8 8005C9F8 3C058012 */ lui $a1, %hi(D_8011D5C4) # $a1, 0x8012 -/* 05D5FC 8005C9FC 8C4F0000 */ lw $t7, ($v0) -/* 05D600 8005CA00 24A5D5C4 */ addiu $a1, %lo(D_8011D5C4) # addiu $a1, $a1, -0x2a3c -/* 05D604 8005CA04 162F000B */ bne $s1, $t7, .L8005CA34 -/* 05D608 8005CA08 00000000 */ nop -/* 05D60C 8005CA0C 84580014 */ lh $t8, 0x14($v0) -/* 05D610 8005CA10 00000000 */ nop -/* 05D614 8005CA14 33190008 */ andi $t9, $t8, 8 -/* 05D618 8005CA18 13200006 */ beqz $t9, .L8005CA34 -/* 05D61C 8005CA1C 00000000 */ nop -/* 05D620 8005CA20 822A003B */ lb $t2, 0x3b($s1) -/* 05D624 8005CA24 24010001 */ li $at, 1 -/* 05D628 8005CA28 15410002 */ bne $t2, $at, .L8005CA34 -/* 05D62C 8005CA2C 240B0004 */ li $t3, 4 -/* 05D630 8005CA30 A20B0187 */ sb $t3, 0x187($s0) -.L8005CA34: -/* 05D634 8005CA34 820C01D8 */ lb $t4, 0x1d8($s0) -/* 05D638 8005CA38 00000000 */ nop -/* 05D63C 8005CA3C 11800008 */ beqz $t4, .L8005CA60 -/* 05D640 8005CA40 8FBF002C */ lw $ra, 0x2c($sp) -/* 05D644 8005CA44 80AD0000 */ lb $t5, ($a1) -/* 05D648 8005CA48 240E0001 */ li $t6, 1 -/* 05D64C 8005CA4C 15A00003 */ bnez $t5, .L8005CA5C -/* 05D650 8005CA50 02002025 */ move $a0, $s0 -/* 05D654 8005CA54 0C0172DA */ jal func_8005CB68 -/* 05D658 8005CA58 A0AE0000 */ sb $t6, ($a1) -.L8005CA5C: -/* 05D65C 8005CA5C 8FBF002C */ lw $ra, 0x2c($sp) -.L8005CA60: -/* 05D660 8005CA60 C7B50018 */ lwc1 $f21, 0x18($sp) -/* 05D664 8005CA64 C7B4001C */ lwc1 $f20, 0x1c($sp) -/* 05D668 8005CA68 8FB00024 */ lw $s0, 0x24($sp) -/* 05D66C 8005CA6C 8FB10028 */ lw $s1, 0x28($sp) -/* 05D670 8005CA70 03E00008 */ jr $ra -/* 05D674 8005CA74 27BD0058 */ addiu $sp, $sp, 0x58 - diff --git a/asm/non_matchings/unknown_05DCD0/func_8005D0D0.s b/asm/non_matchings/unknown_05DCD0/func_8005D0D0.s deleted file mode 100644 index dd1ab7da..00000000 --- a/asm/non_matchings/unknown_05DCD0/func_8005D0D0.s +++ /dev/null @@ -1,515 +0,0 @@ -.late_rodata -glabel D_800E6A30 -.double 0.3 -glabel D_800E6A38 -.double -0.1 -glabel D_800E6A40 -.double 0.1 -glabel D_800E6A48 -.double 700.0 - -.text -glabel func_8005D0D0 -/* 05DCD0 8005D0D0 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 05DCD4 8005D0D4 AFA40060 */ sw $a0, 0x60($sp) -/* 05DCD8 8005D0D8 AFBF002C */ sw $ra, 0x2c($sp) -/* 05DCDC 8005D0DC AFB10028 */ sw $s1, 0x28($sp) -/* 05DCE0 8005D0E0 AFB00024 */ sw $s0, 0x24($sp) -/* 05DCE4 8005D0E4 3C04800E */ lui $a0, %hi(D_800DCE00) # $a0, 0x800e -/* 05DCE8 8005D0E8 00E08025 */ move $s0, $a3 -/* 05DCEC 8005D0EC 00C08825 */ move $s1, $a2 -/* 05DCF0 8005D0F0 E7B50018 */ swc1 $f21, 0x18($sp) -/* 05DCF4 8005D0F4 E7B4001C */ swc1 $f20, 0x1c($sp) -/* 05DCF8 8005D0F8 AFA50064 */ sw $a1, 0x64($sp) -/* 05DCFC 8005D0FC 0C01729E */ jal func_8005CA78 -/* 05DD00 8005D100 2484CE00 */ addiu $a0, %lo(D_800DCE00) # addiu $a0, $a0, -0x3200 -/* 05DD04 8005D104 8FA20074 */ lw $v0, 0x74($sp) -/* 05DD08 8005D108 8FA50070 */ lw $a1, 0x70($sp) -/* 05DD0C 8005D10C 8C4E0000 */ lw $t6, ($v0) -/* 05DD10 8005D110 2403FFEF */ li $v1, -17 -/* 05DD14 8005D114 01C37824 */ and $t7, $t6, $v1 -/* 05DD18 8005D118 AC4F0000 */ sw $t7, ($v0) -/* 05DD1C 8005D11C 8CB80000 */ lw $t8, ($a1) -/* 05DD20 8005D120 24010001 */ li $at, 1 -/* 05DD24 8005D124 0303C824 */ and $t9, $t8, $v1 -/* 05DD28 8005D128 ACB90000 */ sw $t9, ($a1) -/* 05DD2C 8005D12C 822A003B */ lb $t2, 0x3b($s1) -/* 05DD30 8005D130 00000000 */ nop -/* 05DD34 8005D134 A7AA005E */ sh $t2, 0x5e($sp) -/* 05DD38 8005D138 862B0018 */ lh $t3, 0x18($s1) -/* 05DD3C 8005D13C 00000000 */ nop -/* 05DD40 8005D140 A7AB005C */ sh $t3, 0x5c($sp) -/* 05DD44 8005D144 860C016A */ lh $t4, 0x16a($s0) -/* 05DD48 8005D148 00000000 */ nop -/* 05DD4C 8005D14C A7AC005A */ sh $t4, 0x5a($sp) -/* 05DD50 8005D150 820D01D8 */ lb $t5, 0x1d8($s0) -/* 05DD54 8005D154 00000000 */ nop -/* 05DD58 8005D158 15A1000C */ bne $t5, $at, .L8005D18C -/* 05DD5C 8005D15C 8FA90078 */ lw $t1, 0x78($sp) -/* 05DD60 8005D160 0C008D5A */ jal func_80023568 -/* 05DD64 8005D164 00000000 */ nop -/* 05DD68 8005D168 10400008 */ beqz $v0, .L8005D18C -/* 05DD6C 8005D16C 8FA90078 */ lw $t1, 0x78($sp) -/* 05DD70 8005D170 0C008500 */ jal func_80021400 -/* 05DD74 8005D174 24040082 */ li $a0, 130 -/* 05DD78 8005D178 820E01D8 */ lb $t6, 0x1d8($s0) -/* 05DD7C 8005D17C 00000000 */ nop -/* 05DD80 8005D180 25CF0001 */ addiu $t7, $t6, 1 -/* 05DD84 8005D184 A20F01D8 */ sb $t7, 0x1d8($s0) -/* 05DD88 8005D188 8FA90078 */ lw $t1, 0x78($sp) -.L8005D18C: -/* 05DD8C 8005D18C 24040064 */ li $a0, 100 -/* 05DD90 8005D190 8D230000 */ lw $v1, ($t1) -/* 05DD94 8005D194 8FA50070 */ lw $a1, 0x70($sp) -/* 05DD98 8005D198 14640002 */ bne $v1, $a0, .L8005D1A4 -/* 05DD9C 8005D19C 3C018012 */ lui $at, %hi(D_8011D5D0) # $at, 0x8012 -/* 05DDA0 8005D1A0 A020D5D0 */ sb $zero, %lo(D_8011D5D0)($at) -.L8005D1A4: -/* 05DDA4 8005D1A4 86180000 */ lh $t8, ($s0) -/* 05DDA8 8005D1A8 2408FFFF */ li $t0, -1 -/* 05DDAC 8005D1AC 1518001F */ bne $t0, $t8, .L8005D22C -/* 05DDB0 8005D1B0 00000000 */ nop -/* 05DDB4 8005D1B4 8D220000 */ lw $v0, ($t1) -/* 05DDB8 8005D1B8 00000000 */ nop -/* 05DDBC 8005D1BC 1082001B */ beq $a0, $v0, .L8005D22C -/* 05DDC0 8005D1C0 2459FFF1 */ addiu $t9, $v0, -0xf -/* 05DDC4 8005D1C4 07210017 */ bgez $t9, .L8005D224 -/* 05DDC8 8005D1C8 AD390000 */ sw $t9, ($t1) -/* 05DDCC 8005D1CC 3C0B8012 */ lui $t3, %hi(D_8011D5D1) # $t3, 0x8012 -/* 05DDD0 8005D1D0 816BD5D1 */ lb $t3, %lo(D_8011D5D1)($t3) -/* 05DDD4 8005D1D4 00002025 */ move $a0, $zero -/* 05DDD8 8005D1D8 1560000A */ bnez $t3, .L8005D204 -/* 05DDDC 8005D1DC 240D0001 */ li $t5, 1 -/* 05DDE0 8005D1E0 0C0172C1 */ jal func_8005CB04 -/* 05DDE4 8005D1E4 AFA30048 */ sw $v1, 0x48($sp) -/* 05DDE8 8005D1E8 8FA30048 */ lw $v1, 0x48($sp) -/* 05DDEC 8005D1EC 8FA90078 */ lw $t1, 0x78($sp) -/* 05DDF0 8005D1F0 240C0003 */ li $t4, 3 -/* 05DDF4 8005D1F4 A20C01D3 */ sb $t4, 0x1d3($s0) -/* 05DDF8 8005D1F8 8FA50070 */ lw $a1, 0x70($sp) -/* 05DDFC 8005D1FC 00000000 */ nop -/* 05DE00 8005D200 240D0001 */ li $t5, 1 -.L8005D204: -/* 05DE04 8005D204 3C018012 */ lui $at, %hi(D_8011D5D1) # $at, 0x8012 -/* 05DE08 8005D208 A02DD5D1 */ sb $t5, %lo(D_8011D5D1)($at) -/* 05DE0C 8005D20C AD200000 */ sw $zero, ($t1) -/* 05DE10 8005D210 8CAE0000 */ lw $t6, ($a1) -/* 05DE14 8005D214 00000000 */ nop -/* 05DE18 8005D218 35CF8000 */ ori $t7, $t6, 0x8000 -/* 05DE1C 8005D21C 10000003 */ b .L8005D22C -/* 05DE20 8005D220 ACAF0000 */ sw $t7, ($a1) -.L8005D224: -/* 05DE24 8005D224 3C018012 */ lui $at, %hi(D_8011D5D1) # $at, 0x8012 -/* 05DE28 8005D228 A020D5D1 */ sb $zero, %lo(D_8011D5D1)($at) -.L8005D22C: -/* 05DE2C 8005D22C 8FA40060 */ lw $a0, 0x60($sp) -/* 05DE30 8005D230 8FA50064 */ lw $a1, 0x64($sp) -/* 05DE34 8005D234 02203025 */ move $a2, $s1 -/* 05DE38 8005D238 02003825 */ move $a3, $s0 -/* 05DE3C 8005D23C 0C013DFD */ jal func_8004F7F4 -/* 05DE40 8005D240 AFA30048 */ sw $v1, 0x48($sp) -/* 05DE44 8005D244 8FA30048 */ lw $v1, 0x48($sp) -/* 05DE48 8005D248 8FA90078 */ lw $t1, 0x78($sp) -/* 05DE4C 8005D24C 44808000 */ mtc1 $zero, $f16 -/* 05DE50 8005D250 AD230000 */ sw $v1, ($t1) -/* 05DE54 8005D254 E6100030 */ swc1 $f16, 0x30($s0) -/* 05DE58 8005D258 87B8005A */ lh $t8, 0x5a($sp) -/* 05DE5C 8005D25C 00000000 */ nop -/* 05DE60 8005D260 A618016A */ sh $t8, 0x16a($s0) -/* 05DE64 8005D264 87B9005E */ lh $t9, 0x5e($sp) -/* 05DE68 8005D268 00000000 */ nop -/* 05DE6C 8005D26C A239003B */ sb $t9, 0x3b($s1) -/* 05DE70 8005D270 87AA005C */ lh $t2, 0x5c($sp) -/* 05DE74 8005D274 00000000 */ nop -/* 05DE78 8005D278 A62A0018 */ sh $t2, 0x18($s1) -/* 05DE7C 8005D27C 820B0187 */ lb $t3, 0x187($s0) -/* 05DE80 8005D280 00000000 */ nop -/* 05DE84 8005D284 11600023 */ beqz $t3, .L8005D314 -/* 05DE88 8005D288 00000000 */ nop -/* 05DE8C 8005D28C 8223003B */ lb $v1, 0x3b($s1) -/* 05DE90 8005D290 24010004 */ li $at, 4 -/* 05DE94 8005D294 1061001F */ beq $v1, $at, .L8005D314 -/* 05DE98 8005D298 240C0004 */ li $t4, 4 -/* 05DE9C 8005D29C A20301CD */ sb $v1, 0x1cd($s0) -/* 05DEA0 8005D2A0 A22C003B */ sb $t4, 0x3b($s1) -/* 05DEA4 8005D2A4 E610000C */ swc1 $f16, 0xc($s0) -/* 05DEA8 8005D2A8 0C0172C1 */ jal func_8005CB04 -/* 05DEAC 8005D2AC 24040001 */ li $a0, 1 -/* 05DEB0 8005D2B0 24040011 */ li $a0, 17 -/* 05DEB4 8005D2B4 0C000741 */ jal play_sound_global -/* 05DEB8 8005D2B8 00002825 */ move $a1, $zero -/* 05DEBC 8005D2BC 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 05DEC0 8005D2C0 44816000 */ mtc1 $at, $f12 -/* 05DEC4 8005D2C4 0C01A7CA */ jal func_80069F28 -/* 05DEC8 8005D2C8 00000000 */ nop -/* 05DECC 8005D2CC A2000187 */ sb $zero, 0x187($s0) -/* 05DED0 8005D2D0 3C01800E */ lui $at, %hi(D_800E6A30 + 4) # $at, 0x800e -/* 05DED4 8005D2D4 C604002C */ lwc1 $f4, 0x2c($s0) -/* 05DED8 8005D2D8 C4296A30 */ lwc1 $f9, %lo(D_800E6A30)($at) -/* 05DEDC 8005D2DC C4286A34 */ lwc1 $f8, %lo(D_800E6A30 + 4)($at) -/* 05DEE0 8005D2E0 460021A1 */ cvt.d.s $f6, $f4 -/* 05DEE4 8005D2E4 46283282 */ mul.d $f10, $f6, $f8 -/* 05DEE8 8005D2E8 3C01401E */ li $at, 0x401E0000 # 2.468750 -/* 05DEEC 8005D2EC 44814800 */ mtc1 $at, $f9 -/* 05DEF0 8005D2F0 44804000 */ mtc1 $zero, $f8 -/* 05DEF4 8005D2F4 462054A0 */ cvt.s.d $f18, $f10 -/* 05DEF8 8005D2F8 E612002C */ swc1 $f18, 0x2c($s0) -/* 05DEFC 8005D2FC C6240020 */ lwc1 $f4, 0x20($s1) -/* 05DF00 8005D300 00000000 */ nop -/* 05DF04 8005D304 460021A1 */ cvt.d.s $f6, $f4 -/* 05DF08 8005D308 46283280 */ add.d $f10, $f6, $f8 -/* 05DF0C 8005D30C 462054A0 */ cvt.s.d $f18, $f10 -/* 05DF10 8005D310 E6320020 */ swc1 $f18, 0x20($s1) -.L8005D314: -/* 05DF14 8005D314 8E0D0148 */ lw $t5, 0x148($s0) -/* 05DF18 8005D318 00000000 */ nop -/* 05DF1C 8005D31C 11A0000E */ beqz $t5, .L8005D358 -/* 05DF20 8005D320 00000000 */ nop -/* 05DF24 8005D324 C620001C */ lwc1 $f0, 0x1c($s1) -/* 05DF28 8005D328 C6220024 */ lwc1 $f2, 0x24($s1) -/* 05DF2C 8005D32C 46000502 */ mul.s $f20, $f0, $f0 -/* 05DF30 8005D330 00000000 */ nop -/* 05DF34 8005D334 46021382 */ mul.s $f14, $f2, $f2 -/* 05DF38 8005D338 00000000 */ nop -/* 05DF3C 8005D33C 4614A102 */ mul.s $f4, $f20, $f20 -/* 05DF40 8005D340 00000000 */ nop -/* 05DF44 8005D344 460E7182 */ mul.s $f6, $f14, $f14 -/* 05DF48 8005D348 0C0326B4 */ jal sqrtf -/* 05DF4C 8005D34C 46062300 */ add.s $f12, $f4, $f6 -/* 05DF50 8005D350 46000207 */ neg.s $f8, $f0 -/* 05DF54 8005D354 E608002C */ swc1 $f8, 0x2c($s0) -.L8005D358: -/* 05DF58 8005D358 82040192 */ lb $a0, 0x192($s0) -/* 05DF5C 8005D35C 920501C8 */ lbu $a1, 0x1c8($s0) -/* 05DF60 8005D360 0C006E87 */ jal find_next_checkpoint_node -/* 05DF64 8005D364 AFA0003C */ sw $zero, 0x3c($sp) -/* 05DF68 8005D368 820E01CA */ lb $t6, 0x1ca($s0) -/* 05DF6C 8005D36C 8FA3003C */ lw $v1, 0x3c($sp) -/* 05DF70 8005D370 004E7821 */ addu $t7, $v0, $t6 -/* 05DF74 8005D374 81F80036 */ lb $t8, 0x36($t7) -/* 05DF78 8005D378 44808000 */ mtc1 $zero, $f16 -/* 05DF7C 8005D37C 24010001 */ li $at, 1 -/* 05DF80 8005D380 17010002 */ bne $t8, $at, .L8005D38C -/* 05DF84 8005D384 2408FFFF */ li $t0, -1 -/* 05DF88 8005D388 24030001 */ li $v1, 1 -.L8005D38C: -/* 05DF8C 8005D38C 8239003B */ lb $t9, 0x3b($s1) -/* 05DF90 8005D390 24010004 */ li $at, 4 -/* 05DF94 8005D394 13210063 */ beq $t9, $at, .L8005D524 -/* 05DF98 8005D398 00000000 */ nop -/* 05DF9C 8005D39C C60A002C */ lwc1 $f10, 0x2c($s0) -/* 05DFA0 8005D3A0 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 05DFA4 8005D3A4 44819800 */ mtc1 $at, $f19 -/* 05DFA8 8005D3A8 44809000 */ mtc1 $zero, $f18 -/* 05DFAC 8005D3AC 46005021 */ cvt.d.s $f0, $f10 -/* 05DFB0 8005D3B0 4632003C */ c.lt.d $f0, $f18 -/* 05DFB4 8005D3B4 3C01800E */ lui $at, %hi(D_800E6A38 + 4) # $at, 0x800e -/* 05DFB8 8005D3B8 45000036 */ bc1f .L8005D494 -/* 05DFBC 8005D3BC 00000000 */ nop -/* 05DFC0 8005D3C0 10600024 */ beqz $v1, .L8005D454 -/* 05DFC4 8005D3C4 240B0003 */ li $t3, 3 -/* 05DFC8 8005D3C8 920A01CD */ lbu $t2, 0x1cd($s0) -/* 05DFCC 8005D3CC 24010003 */ li $at, 3 -/* 05DFD0 8005D3D0 11410004 */ beq $t2, $at, .L8005D3E4 -/* 05DFD4 8005D3D4 3C014220 */ li $at, 0x42200000 # 40.000000 -/* 05DFD8 8005D3D8 44812000 */ mtc1 $at, $f4 -/* 05DFDC 8005D3DC 00000000 */ nop -/* 05DFE0 8005D3E0 E604000C */ swc1 $f4, 0xc($s0) -.L8005D3E4: -/* 05DFE4 8005D3E4 A22B003B */ sb $t3, 0x3b($s1) -/* 05DFE8 8005D3E8 820201E1 */ lb $v0, 0x1e1($s0) -/* 05DFEC 8005D3EC 240D0028 */ li $t5, 40 -/* 05DFF0 8005D3F0 00026040 */ sll $t4, $v0, 1 -/* 05DFF4 8005D3F4 01AC1023 */ subu $v0, $t5, $t4 -/* 05DFF8 8005D3F8 04410003 */ bgez $v0, .L8005D408 -/* 05DFFC 8005D3FC 2841004A */ slti $at, $v0, 0x4a -/* 05E000 8005D400 00001025 */ move $v0, $zero -/* 05E004 8005D404 2841004A */ slti $at, $v0, 0x4a -.L8005D408: -/* 05E008 8005D408 14200002 */ bnez $at, .L8005D414 -/* 05E00C 8005D40C 00000000 */ nop -/* 05E010 8005D410 24020049 */ li $v0, 73 -.L8005D414: -/* 05E014 8005D414 44823000 */ mtc1 $v0, $f6 -/* 05E018 8005D418 C600000C */ lwc1 $f0, 0xc($s0) -/* 05E01C 8005D41C 46803220 */ cvt.s.w $f8, $f6 -/* 05E020 8005D420 3C013FD0 */ li $at, 0x3FD00000 # 1.625000 -/* 05E024 8005D424 44812800 */ mtc1 $at, $f5 -/* 05E028 8005D428 46004281 */ sub.s $f10, $f8, $f0 -/* 05E02C 8005D42C 44802000 */ mtc1 $zero, $f4 -/* 05E030 8005D430 460054A1 */ cvt.d.s $f18, $f10 -/* 05E034 8005D434 46249182 */ mul.d $f6, $f18, $f4 -/* 05E038 8005D438 46000221 */ cvt.d.s $f8, $f0 -/* 05E03C 8005D43C 240E0003 */ li $t6, 3 -/* 05E040 8005D440 A20E01CD */ sb $t6, 0x1cd($s0) -/* 05E044 8005D444 46264280 */ add.d $f10, $f8, $f6 -/* 05E048 8005D448 462054A0 */ cvt.s.d $f18, $f10 -/* 05E04C 8005D44C 1000003C */ b .L8005D540 -/* 05E050 8005D450 E612000C */ swc1 $f18, 0xc($s0) -.L8005D454: -/* 05E054 8005D454 A20001CD */ sb $zero, 0x1cd($s0) -/* 05E058 8005D458 A220003B */ sb $zero, 0x3b($s1) -/* 05E05C 8005D45C C7A80064 */ lwc1 $f8, 0x64($sp) -/* 05E060 8005D460 C604002C */ lwc1 $f4, 0x2c($s0) -/* 05E064 8005D464 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 05E068 8005D468 46082182 */ mul.s $f6, $f4, $f8 -/* 05E06C 8005D46C 44819800 */ mtc1 $at, $f19 -/* 05E070 8005D470 44809000 */ mtc1 $zero, $f18 -/* 05E074 8005D474 C608000C */ lwc1 $f8, 0xc($s0) -/* 05E078 8005D478 460032A1 */ cvt.d.s $f10, $f6 -/* 05E07C 8005D47C 46325102 */ mul.d $f4, $f10, $f18 -/* 05E080 8005D480 460041A1 */ cvt.d.s $f6, $f8 -/* 05E084 8005D484 46243281 */ sub.d $f10, $f6, $f4 -/* 05E088 8005D488 462054A0 */ cvt.s.d $f18, $f10 -/* 05E08C 8005D48C 1000002C */ b .L8005D540 -/* 05E090 8005D490 E612000C */ swc1 $f18, 0xc($s0) -.L8005D494: -/* 05E094 8005D494 C4296A38 */ lwc1 $f9, %lo(D_800E6A38)($at) -/* 05E098 8005D498 C4286A3C */ lwc1 $f8, %lo(D_800E6A38 + 4)($at) -/* 05E09C 8005D49C 3C01800E */ lui $at, %hi(D_800E6A40 + 4) # $at, 0x800e -/* 05E0A0 8005D4A0 4628003C */ c.lt.d $f0, $f8 -/* 05E0A4 8005D4A4 240F0001 */ li $t7, 1 -/* 05E0A8 8005D4A8 45010008 */ bc1t .L8005D4CC -/* 05E0AC 8005D4AC 24180001 */ li $t8, 1 -/* 05E0B0 8005D4B0 C4276A40 */ lwc1 $f7, %lo(D_800E6A40)($at) -/* 05E0B4 8005D4B4 C4266A44 */ lwc1 $f6, %lo(D_800E6A40 + 4)($at) -/* 05E0B8 8005D4B8 24190002 */ li $t9, 2 -/* 05E0BC 8005D4BC 4620303C */ c.lt.d $f6, $f0 -/* 05E0C0 8005D4C0 240A0002 */ li $t2, 2 -/* 05E0C4 8005D4C4 4500000D */ bc1f .L8005D4FC -/* 05E0C8 8005D4C8 00000000 */ nop -.L8005D4CC: -/* 05E0CC 8005D4CC A20F01CD */ sb $t7, 0x1cd($s0) -/* 05E0D0 8005D4D0 A238003B */ sb $t8, 0x3b($s1) -/* 05E0D4 8005D4D4 C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 05E0D8 8005D4D8 C604002C */ lwc1 $f4, 0x2c($s0) -/* 05E0DC 8005D4DC 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05E0E0 8005D4E0 460A2482 */ mul.s $f18, $f4, $f10 -/* 05E0E4 8005D4E4 44814000 */ mtc1 $at, $f8 -/* 05E0E8 8005D4E8 C604000C */ lwc1 $f4, 0xc($s0) -/* 05E0EC 8005D4EC 46089182 */ mul.s $f6, $f18, $f8 -/* 05E0F0 8005D4F0 46062281 */ sub.s $f10, $f4, $f6 -/* 05E0F4 8005D4F4 10000012 */ b .L8005D540 -/* 05E0F8 8005D4F8 E60A000C */ swc1 $f10, 0xc($s0) -.L8005D4FC: -/* 05E0FC 8005D4FC A21901CD */ sb $t9, 0x1cd($s0) -/* 05E100 8005D500 A22A003B */ sb $t2, 0x3b($s1) -/* 05E104 8005D504 C612000C */ lwc1 $f18, 0xc($s0) -/* 05E108 8005D508 C7A40064 */ lwc1 $f4, 0x64($sp) -/* 05E10C 8005D50C 46009221 */ cvt.d.s $f8, $f18 -/* 05E110 8005D510 460021A1 */ cvt.d.s $f6, $f4 -/* 05E114 8005D514 46264280 */ add.d $f10, $f8, $f6 -/* 05E118 8005D518 462054A0 */ cvt.s.d $f18, $f10 -/* 05E11C 8005D51C 10000008 */ b .L8005D540 -/* 05E120 8005D520 E612000C */ swc1 $f18, 0xc($s0) -.L8005D524: -/* 05E124 8005D524 C604000C */ lwc1 $f4, 0xc($s0) -/* 05E128 8005D528 C7A60064 */ lwc1 $f6, 0x64($sp) -/* 05E12C 8005D52C 46002221 */ cvt.d.s $f8, $f4 -/* 05E130 8005D530 460032A1 */ cvt.d.s $f10, $f6 -/* 05E134 8005D534 462A4480 */ add.d $f18, $f8, $f10 -/* 05E138 8005D538 46209120 */ cvt.s.d $f4, $f18 -/* 05E13C 8005D53C E604000C */ swc1 $f4, 0xc($s0) -.L8005D540: -/* 05E140 8005D540 8E2B0068 */ lw $t3, 0x68($s1) -/* 05E144 8005D544 822D003B */ lb $t5, 0x3b($s1) -/* 05E148 8005D548 8D620000 */ lw $v0, ($t3) -/* 05E14C 8005D54C 000D70C0 */ sll $t6, $t5, 3 -/* 05E150 8005D550 8C430000 */ lw $v1, ($v0) -/* 05E154 8005D554 C600000C */ lwc1 $f0, 0xc($s0) -/* 05E158 8005D558 8C6C0044 */ lw $t4, 0x44($v1) -/* 05E15C 8005D55C 4610003C */ c.lt.s $f0, $f16 -/* 05E160 8005D560 018E7821 */ addu $t7, $t4, $t6 -/* 05E164 8005D564 8DF80004 */ lw $t8, 4($t7) -/* 05E168 8005D568 00000000 */ nop -/* 05E16C 8005D56C 0018C900 */ sll $t9, $t8, 4 -/* 05E170 8005D570 272AFFEF */ addiu $t2, $t9, -0x11 -/* 05E174 8005D574 448A3000 */ mtc1 $t2, $f6 -/* 05E178 8005D578 4500000A */ bc1f .L8005D5A4 -/* 05E17C 8005D57C 46803520 */ cvt.s.w $f20, $f6 -.L8005D580: -/* 05E180 8005D580 46140200 */ add.s $f8, $f0, $f20 -/* 05E184 8005D584 E608000C */ swc1 $f8, 0xc($s0) -/* 05E188 8005D588 A4480010 */ sh $t0, 0x10($v0) -/* 05E18C 8005D58C C600000C */ lwc1 $f0, 0xc($s0) -/* 05E190 8005D590 00000000 */ nop -/* 05E194 8005D594 4610003C */ c.lt.s $f0, $f16 -/* 05E198 8005D598 00000000 */ nop -/* 05E19C 8005D59C 4501FFF8 */ bc1t .L8005D580 -/* 05E1A0 8005D5A0 00000000 */ nop -.L8005D5A4: -/* 05E1A4 8005D5A4 4600A03C */ c.lt.s $f20, $f0 -/* 05E1A8 8005D5A8 00000000 */ nop -/* 05E1AC 8005D5AC 4500000A */ bc1f .L8005D5D8 -/* 05E1B0 8005D5B0 00000000 */ nop -.L8005D5B4: -/* 05E1B4 8005D5B4 46140281 */ sub.s $f10, $f0, $f20 -/* 05E1B8 8005D5B8 E60A000C */ swc1 $f10, 0xc($s0) -/* 05E1BC 8005D5BC A4480010 */ sh $t0, 0x10($v0) -/* 05E1C0 8005D5C0 C600000C */ lwc1 $f0, 0xc($s0) -/* 05E1C4 8005D5C4 00000000 */ nop -/* 05E1C8 8005D5C8 4600A03C */ c.lt.s $f20, $f0 -/* 05E1CC 8005D5CC 00000000 */ nop -/* 05E1D0 8005D5D0 4501FFF8 */ bc1t .L8005D5B4 -/* 05E1D4 8005D5D4 00000000 */ nop -.L8005D5D8: -/* 05E1D8 8005D5D8 844B0010 */ lh $t3, 0x10($v0) -/* 05E1DC 8005D5DC 8223003B */ lb $v1, 0x3b($s1) -/* 05E1E0 8005D5E0 150B0009 */ bne $t0, $t3, .L8005D608 -/* 05E1E4 8005D5E4 24010004 */ li $at, 4 -/* 05E1E8 8005D5E8 14610007 */ bne $v1, $at, .L8005D608 -/* 05E1EC 8005D5EC 00000000 */ nop -/* 05E1F0 8005D5F0 920D01CD */ lbu $t5, 0x1cd($s0) -/* 05E1F4 8005D5F4 00000000 */ nop -/* 05E1F8 8005D5F8 A22D003B */ sb $t5, 0x3b($s1) -/* 05E1FC 8005D5FC C600000C */ lwc1 $f0, 0xc($s0) -/* 05E200 8005D600 8223003B */ lb $v1, 0x3b($s1) -/* 05E204 8005D604 00000000 */ nop -.L8005D608: -/* 05E208 8005D608 444EF800 */ cfc1 $t6, $31 -/* 05E20C 8005D60C 862C0018 */ lh $t4, 0x18($s1) -/* 05E210 8005D610 35C10003 */ ori $at, $t6, 3 -/* 05E214 8005D614 38210002 */ xori $at, $at, 2 -/* 05E218 8005D618 44C1F800 */ ctc1 $at, $31 -/* 05E21C 8005D61C A7AC005C */ sh $t4, 0x5c($sp) -/* 05E220 8005D620 460004A4 */ cvt.w.s $f18, $f0 -/* 05E224 8005D624 AE200074 */ sw $zero, 0x74($s1) -/* 05E228 8005D628 440F9000 */ mfc1 $t7, $f18 -/* 05E22C 8005D62C 44CEF800 */ ctc1 $t6, $31 -/* 05E230 8005D630 1460000C */ bnez $v1, .L8005D664 -/* 05E234 8005D634 A62F0018 */ sh $t7, 0x18($s1) -/* 05E238 8005D638 87A6005C */ lh $a2, 0x5c($sp) -/* 05E23C 8005D63C 241800AD */ li $t8, 173 -/* 05E240 8005D640 AFB80010 */ sw $t8, 0x10($sp) -/* 05E244 8005D644 02202025 */ move $a0, $s1 -/* 05E248 8005D648 24050002 */ li $a1, 2 -/* 05E24C 8005D64C 0C0044F3 */ jal func_800113CC -/* 05E250 8005D650 240700AC */ li $a3, 172 -/* 05E254 8005D654 8E390074 */ lw $t9, 0x74($s1) -/* 05E258 8005D658 00000000 */ nop -/* 05E25C 8005D65C 372A0003 */ ori $t2, $t9, 3 -/* 05E260 8005D660 AE2A0074 */ sw $t2, 0x74($s1) -.L8005D664: -/* 05E264 8005D664 8FA50060 */ lw $a1, 0x60($sp) -/* 05E268 8005D668 0C02BF0F */ jal func_800AFC3C -/* 05E26C 8005D66C 02202025 */ move $a0, $s1 -/* 05E270 8005D670 02202025 */ move $a0, $s1 -/* 05E274 8005D674 02002825 */ move $a1, $s0 -/* 05E278 8005D678 0C017412 */ jal func_8005D048 -/* 05E27C 8005D67C 24060028 */ li $a2, 40 -/* 05E280 8005D680 0C006EB2 */ jal get_racer_object -/* 05E284 8005D684 00002025 */ move $a0, $zero -/* 05E288 8005D688 AFA20034 */ sw $v0, 0x34($sp) -/* 05E28C 8005D68C C626000C */ lwc1 $f6, 0xc($s1) -/* 05E290 8005D690 C444000C */ lwc1 $f4, 0xc($v0) -/* 05E294 8005D694 C62A0014 */ lwc1 $f10, 0x14($s1) -/* 05E298 8005D698 46062501 */ sub.s $f20, $f4, $f6 -/* 05E29C 8005D69C C4480014 */ lwc1 $f8, 0x14($v0) -/* 05E2A0 8005D6A0 4614A482 */ mul.s $f18, $f20, $f20 -/* 05E2A4 8005D6A4 460A4381 */ sub.s $f14, $f8, $f10 -/* 05E2A8 8005D6A8 E7AE0050 */ swc1 $f14, 0x50($sp) -/* 05E2AC 8005D6AC 460E7102 */ mul.s $f4, $f14, $f14 -/* 05E2B0 8005D6B0 0C0326B4 */ jal sqrtf -/* 05E2B4 8005D6B4 46049300 */ add.s $f12, $f18, $f4 -/* 05E2B8 8005D6B8 3C01800E */ lui $at, %hi(D_800E6A48 + 4) # $at, 0x800e -/* 05E2BC 8005D6BC C4296A48 */ lwc1 $f9, %lo(D_800E6A48)($at) -/* 05E2C0 8005D6C0 C4286A4C */ lwc1 $f8, %lo(D_800E6A48 + 4)($at) -/* 05E2C4 8005D6C4 460001A1 */ cvt.d.s $f6, $f0 -/* 05E2C8 8005D6C8 4628303C */ c.lt.d $f6, $f8 -/* 05E2CC 8005D6CC C7AE0050 */ lwc1 $f14, 0x50($sp) -/* 05E2D0 8005D6D0 4500001B */ bc1f .L8005D740 -/* 05E2D4 8005D6D4 00000000 */ nop -/* 05E2D8 8005D6D8 0C01C1D4 */ jal arctan2_f -/* 05E2DC 8005D6DC 4600A306 */ mov.s $f12, $f20 -/* 05E2E0 8005D6E0 862B0000 */ lh $t3, ($s1) -/* 05E2E4 8005D6E4 34018000 */ li $at, 32768 -/* 05E2E8 8005D6E8 316DFFFF */ andi $t5, $t3, 0xffff -/* 05E2EC 8005D6EC 004D1823 */ subu $v1, $v0, $t5 -/* 05E2F0 8005D6F0 00611821 */ addu $v1, $v1, $at -/* 05E2F4 8005D6F4 34018001 */ li $at, 32769 -/* 05E2F8 8005D6F8 0061082A */ slt $at, $v1, $at -/* 05E2FC 8005D6FC 14200003 */ bnez $at, .L8005D70C -/* 05E300 8005D700 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 05E304 8005D704 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 05E308 8005D708 00611821 */ addu $v1, $v1, $at -.L8005D70C: -/* 05E30C 8005D70C 28618000 */ slti $at, $v1, -0x8000 -/* 05E310 8005D710 10200002 */ beqz $at, .L8005D71C -/* 05E314 8005D714 3401FFFF */ li $at, 65535 -/* 05E318 8005D718 00611821 */ addu $v1, $v1, $at -.L8005D71C: -/* 05E31C 8005D71C 28610C01 */ slti $at, $v1, 0xc01 -/* 05E320 8005D720 14200003 */ bnez $at, .L8005D730 -/* 05E324 8005D724 2861F400 */ slti $at, $v1, -0xc00 -/* 05E328 8005D728 24030C00 */ li $v1, 3072 -/* 05E32C 8005D72C 2861F400 */ slti $at, $v1, -0xc00 -.L8005D730: -/* 05E330 8005D730 10200002 */ beqz $at, .L8005D73C -/* 05E334 8005D734 00000000 */ nop -/* 05E338 8005D738 2403F400 */ li $v1, -3072 -.L8005D73C: -/* 05E33C 8005D73C A603016C */ sh $v1, 0x16c($s0) -.L8005D740: -/* 05E340 8005D740 8223003B */ lb $v1, 0x3b($s1) -/* 05E344 8005D744 24010001 */ li $at, 1 -/* 05E348 8005D748 1461000D */ bne $v1, $at, .L8005D780 -/* 05E34C 8005D74C 3C058012 */ lui $a1, %hi(D_8011D5D0) # $a1, 0x8012 -/* 05E350 8005D750 820C01E7 */ lb $t4, 0x1e7($s0) -/* 05E354 8005D754 00000000 */ nop -/* 05E358 8005D758 318E001F */ andi $t6, $t4, 0x1f -/* 05E35C 8005D75C 29C1000A */ slti $at, $t6, 0xa -/* 05E360 8005D760 10200008 */ beqz $at, .L8005D784 -/* 05E364 8005D764 24010003 */ li $at, 3 -/* 05E368 8005D768 860F016C */ lh $t7, 0x16c($s0) -/* 05E36C 8005D76C 00000000 */ nop -/* 05E370 8005D770 000FC043 */ sra $t8, $t7, 1 -/* 05E374 8005D774 A618016C */ sh $t8, 0x16c($s0) -/* 05E378 8005D778 8223003B */ lb $v1, 0x3b($s1) -/* 05E37C 8005D77C 00000000 */ nop -.L8005D780: -/* 05E380 8005D780 24010003 */ li $at, 3 -.L8005D784: -/* 05E384 8005D784 14610002 */ bne $v1, $at, .L8005D790 -/* 05E388 8005D788 24A5D5D0 */ addiu $a1, %lo(D_8011D5D0) # addiu $a1, $a1, -0x2a30 -/* 05E38C 8005D78C A600016C */ sh $zero, 0x16c($s0) -.L8005D790: -/* 05E390 8005D790 8FA30034 */ lw $v1, 0x34($sp) -/* 05E394 8005D794 00000000 */ nop -/* 05E398 8005D798 8C62004C */ lw $v0, 0x4c($v1) -/* 05E39C 8005D79C 8C700064 */ lw $s0, 0x64($v1) -/* 05E3A0 8005D7A0 8C590000 */ lw $t9, ($v0) -/* 05E3A4 8005D7A4 00000000 */ nop -/* 05E3A8 8005D7A8 1639000B */ bne $s1, $t9, .L8005D7D8 -/* 05E3AC 8005D7AC 00000000 */ nop -/* 05E3B0 8005D7B0 844A0014 */ lh $t2, 0x14($v0) -/* 05E3B4 8005D7B4 00000000 */ nop -/* 05E3B8 8005D7B8 314B0008 */ andi $t3, $t2, 8 -/* 05E3BC 8005D7BC 11600006 */ beqz $t3, .L8005D7D8 -/* 05E3C0 8005D7C0 00000000 */ nop -/* 05E3C4 8005D7C4 822D003B */ lb $t5, 0x3b($s1) -/* 05E3C8 8005D7C8 24010001 */ li $at, 1 -/* 05E3CC 8005D7CC 15A10002 */ bne $t5, $at, .L8005D7D8 -/* 05E3D0 8005D7D0 240C0004 */ li $t4, 4 -/* 05E3D4 8005D7D4 A20C0187 */ sb $t4, 0x187($s0) -.L8005D7D8: -/* 05E3D8 8005D7D8 820E01D8 */ lb $t6, 0x1d8($s0) -/* 05E3DC 8005D7DC 00000000 */ nop -/* 05E3E0 8005D7E0 11C00008 */ beqz $t6, .L8005D804 -/* 05E3E4 8005D7E4 8FBF002C */ lw $ra, 0x2c($sp) -/* 05E3E8 8005D7E8 80AF0000 */ lb $t7, ($a1) -/* 05E3EC 8005D7EC 24180001 */ li $t8, 1 -/* 05E3F0 8005D7F0 15E00003 */ bnez $t7, .L8005D800 -/* 05E3F4 8005D7F4 02002025 */ move $a0, $s0 -/* 05E3F8 8005D7F8 0C0172DA */ jal func_8005CB68 -/* 05E3FC 8005D7FC A0B80000 */ sb $t8, ($a1) -.L8005D800: -/* 05E400 8005D800 8FBF002C */ lw $ra, 0x2c($sp) -.L8005D804: -/* 05E404 8005D804 C7B50018 */ lwc1 $f21, 0x18($sp) -/* 05E408 8005D808 C7B4001C */ lwc1 $f20, 0x1c($sp) -/* 05E40C 8005D80C 8FB00024 */ lw $s0, 0x24($sp) -/* 05E410 8005D810 8FB10028 */ lw $s1, 0x28($sp) -/* 05E414 8005D814 03E00008 */ jr $ra -/* 05E418 8005D818 27BD0060 */ addiu $sp, $sp, 0x60 - -/* 05E41C 8005D81C 00000000 */ nop diff --git a/asm/non_matchings/unknown_05DCD0/func_8005D820.s b/asm/non_matchings/unknown_05DCD0/func_8005D820.s deleted file mode 100644 index 3af34fb4..00000000 --- a/asm/non_matchings/unknown_05DCD0/func_8005D820.s +++ /dev/null @@ -1,710 +0,0 @@ -.late_rodata -glabel D_800E6A50 -.double 0.3 -glabel D_800E6A58 -.double -0.3 -glabel D_800E6A60 -.double 0.27 -glabel D_800E6A68 -.double 0.45 -glabel jpt_800E6A70 -.word L8005DBEC, L8005DC10, L8005DC48, L8005DC64, L8005DCBC, L8005DCE8 -glabel D_800E6A88 -.double -0.1 -glabel D_800E6A90 -.double 0.1 -glabel D_800E6A98 -.double 700.0 - -.text -glabel func_8005D820 -/* 05E420 8005D820 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 05E424 8005D824 AFA40060 */ sw $a0, 0x60($sp) -/* 05E428 8005D828 AFBF002C */ sw $ra, 0x2c($sp) -/* 05E42C 8005D82C AFB10028 */ sw $s1, 0x28($sp) -/* 05E430 8005D830 AFB00024 */ sw $s0, 0x24($sp) -/* 05E434 8005D834 3C04800E */ lui $a0, %hi(D_800DCE20) # $a0, 0x800e -/* 05E438 8005D838 00E08025 */ move $s0, $a3 -/* 05E43C 8005D83C 00C08825 */ move $s1, $a2 -/* 05E440 8005D840 E7B50018 */ swc1 $f21, 0x18($sp) -/* 05E444 8005D844 E7B4001C */ swc1 $f20, 0x1c($sp) -/* 05E448 8005D848 AFA50064 */ sw $a1, 0x64($sp) -/* 05E44C 8005D84C 0C01729E */ jal func_8005CA78 -/* 05E450 8005D850 2484CE20 */ addiu $a0, %lo(D_800DCE20) # addiu $a0, $a0, -0x31e0 -/* 05E454 8005D854 822E003B */ lb $t6, 0x3b($s1) -/* 05E458 8005D858 3C01800E */ lui $at, %hi(D_800E6A50 + 4) # $at, 0x800e -/* 05E45C 8005D85C A7AE005E */ sh $t6, 0x5e($sp) -/* 05E460 8005D860 860F016A */ lh $t7, 0x16a($s0) -/* 05E464 8005D864 862A0018 */ lh $t2, 0x18($s1) -/* 05E468 8005D868 A7AF005A */ sh $t7, 0x5a($sp) -/* 05E46C 8005D86C C604002C */ lwc1 $f4, 0x2c($s0) -/* 05E470 8005D870 C4276A50 */ lwc1 $f7, %lo(D_800E6A50)($at) -/* 05E474 8005D874 C4266A54 */ lwc1 $f6, %lo(D_800E6A50 + 4)($at) -/* 05E478 8005D878 46002021 */ cvt.d.s $f0, $f4 -/* 05E47C 8005D87C 4626003C */ c.lt.d $f0, $f6 -/* 05E480 8005D880 00000000 */ nop -/* 05E484 8005D884 45000009 */ bc1f .L8005D8AC -/* 05E488 8005D888 3C01800E */ lui $at, %hi(D_800E6A58 + 4) # $at, 0x800e -/* 05E48C 8005D88C C4296A58 */ lwc1 $f9, %lo(D_800E6A58)($at) -/* 05E490 8005D890 C4286A5C */ lwc1 $f8, %lo(D_800E6A58 + 4)($at) -/* 05E494 8005D894 8FB80074 */ lw $t8, 0x74($sp) -/* 05E498 8005D898 4620403C */ c.lt.d $f8, $f0 -/* 05E49C 8005D89C 00000000 */ nop -/* 05E4A0 8005D8A0 45000002 */ bc1f .L8005D8AC -/* 05E4A4 8005D8A4 00000000 */ nop -/* 05E4A8 8005D8A8 AF000000 */ sw $zero, ($t8) -.L8005D8AC: -/* 05E4AC 8005D8AC 821901D8 */ lb $t9, 0x1d8($s0) -/* 05E4B0 8005D8B0 24010001 */ li $at, 1 -/* 05E4B4 8005D8B4 1721000D */ bne $t9, $at, .L8005D8EC -/* 05E4B8 8005D8B8 8FA80078 */ lw $t0, 0x78($sp) -/* 05E4BC 8005D8BC 0C008D5A */ jal func_80023568 -/* 05E4C0 8005D8C0 A7AA005C */ sh $t2, 0x5c($sp) -/* 05E4C4 8005D8C4 87AA005C */ lh $t2, 0x5c($sp) -/* 05E4C8 8005D8C8 10400007 */ beqz $v0, .L8005D8E8 -/* 05E4CC 8005D8CC 24040082 */ li $a0, 130 -/* 05E4D0 8005D8D0 0C008500 */ jal func_80021400 -/* 05E4D4 8005D8D4 A7AA005C */ sh $t2, 0x5c($sp) -/* 05E4D8 8005D8D8 820B01D8 */ lb $t3, 0x1d8($s0) -/* 05E4DC 8005D8DC 87AA005C */ lh $t2, 0x5c($sp) -/* 05E4E0 8005D8E0 256C0001 */ addiu $t4, $t3, 1 -/* 05E4E4 8005D8E4 A20C01D8 */ sb $t4, 0x1d8($s0) -.L8005D8E8: -/* 05E4E8 8005D8E8 8FA80078 */ lw $t0, 0x78($sp) -.L8005D8EC: -/* 05E4EC 8005D8EC 24040064 */ li $a0, 100 -/* 05E4F0 8005D8F0 8D030000 */ lw $v1, ($t0) -/* 05E4F4 8005D8F4 00000000 */ nop -/* 05E4F8 8005D8F8 14640002 */ bne $v1, $a0, .L8005D904 -/* 05E4FC 8005D8FC 3C018012 */ lui $at, %hi(D_8011D5E0) # $at, 0x8012 -/* 05E500 8005D900 A020D5E0 */ sb $zero, %lo(D_8011D5E0)($at) -.L8005D904: -/* 05E504 8005D904 860D0000 */ lh $t5, ($s0) -/* 05E508 8005D908 2409FFFF */ li $t1, -1 -/* 05E50C 8005D90C 152D0021 */ bne $t1, $t5, .L8005D994 -/* 05E510 8005D910 240E0007 */ li $t6, 7 -/* 05E514 8005D914 8D020000 */ lw $v0, ($t0) -/* 05E518 8005D918 00000000 */ nop -/* 05E51C 8005D91C 1082001C */ beq $a0, $v0, .L8005D990 -/* 05E520 8005D920 244EFFC4 */ addiu $t6, $v0, -0x3c -/* 05E524 8005D924 05C10018 */ bgez $t6, .L8005D988 -/* 05E528 8005D928 AD0E0000 */ sw $t6, ($t0) -/* 05E52C 8005D92C 3C188012 */ lui $t8, %hi(D_8011D5E1) # $t8, 0x8012 -/* 05E530 8005D930 8318D5E1 */ lb $t8, %lo(D_8011D5E1)($t8) -/* 05E534 8005D934 00002025 */ move $a0, $zero -/* 05E538 8005D938 1700000A */ bnez $t8, .L8005D964 -/* 05E53C 8005D93C 8FA20070 */ lw $v0, 0x70($sp) -/* 05E540 8005D940 AFA30044 */ sw $v1, 0x44($sp) -/* 05E544 8005D944 0C0172C1 */ jal func_8005CB04 -/* 05E548 8005D948 A7AA005C */ sh $t2, 0x5c($sp) -/* 05E54C 8005D94C 8FA30044 */ lw $v1, 0x44($sp) -/* 05E550 8005D950 8FA80078 */ lw $t0, 0x78($sp) -/* 05E554 8005D954 87AA005C */ lh $t2, 0x5c($sp) -/* 05E558 8005D958 2419000A */ li $t9, 10 -/* 05E55C 8005D95C A21901D3 */ sb $t9, 0x1d3($s0) -/* 05E560 8005D960 8FA20070 */ lw $v0, 0x70($sp) -.L8005D964: -/* 05E564 8005D964 240B0001 */ li $t3, 1 -/* 05E568 8005D968 3C018012 */ lui $at, %hi(D_8011D5E1) # $at, 0x8012 -/* 05E56C 8005D96C A02BD5E1 */ sb $t3, %lo(D_8011D5E1)($at) -/* 05E570 8005D970 AD000000 */ sw $zero, ($t0) -/* 05E574 8005D974 8C4C0000 */ lw $t4, ($v0) -/* 05E578 8005D978 00000000 */ nop -/* 05E57C 8005D97C 358D8000 */ ori $t5, $t4, 0x8000 -/* 05E580 8005D980 10000003 */ b .L8005D990 -/* 05E584 8005D984 AC4D0000 */ sw $t5, ($v0) -.L8005D988: -/* 05E588 8005D988 3C018012 */ lui $at, %hi(D_8011D5E1) # $at, 0x8012 -/* 05E58C 8005D98C A020D5E1 */ sb $zero, %lo(D_8011D5E1)($at) -.L8005D990: -/* 05E590 8005D990 240E0007 */ li $t6, 7 -.L8005D994: -/* 05E594 8005D994 A20E01D6 */ sb $t6, 0x1d6($s0) -/* 05E598 8005D998 8FA50064 */ lw $a1, 0x64($sp) -/* 05E59C 8005D99C 8FA40060 */ lw $a0, 0x60($sp) -/* 05E5A0 8005D9A0 A7AA005C */ sh $t2, 0x5c($sp) -/* 05E5A4 8005D9A4 AFA30044 */ sw $v1, 0x44($sp) -/* 05E5A8 8005D9A8 02203025 */ move $a2, $s1 -/* 05E5AC 8005D9AC 0C0125E5 */ jal func_80049794 -/* 05E5B0 8005D9B0 02003825 */ move $a3, $s0 -/* 05E5B4 8005D9B4 8FA30044 */ lw $v1, 0x44($sp) -/* 05E5B8 8005D9B8 8FA80078 */ lw $t0, 0x78($sp) -/* 05E5BC 8005D9BC 820F01D7 */ lb $t7, 0x1d7($s0) -/* 05E5C0 8005D9C0 87AA005C */ lh $t2, 0x5c($sp) -/* 05E5C4 8005D9C4 A20F01D6 */ sb $t7, 0x1d6($s0) -/* 05E5C8 8005D9C8 AD030000 */ sw $v1, ($t0) -/* 05E5CC 8005D9CC AE200074 */ sw $zero, 0x74($s1) -/* 05E5D0 8005D9D0 87B8005A */ lh $t8, 0x5a($sp) -/* 05E5D4 8005D9D4 2409FFFF */ li $t1, -1 -/* 05E5D8 8005D9D8 A618016A */ sh $t8, 0x16a($s0) -/* 05E5DC 8005D9DC 87B9005E */ lh $t9, 0x5e($sp) -/* 05E5E0 8005D9E0 A62A0018 */ sh $t2, 0x18($s1) -/* 05E5E4 8005D9E4 A239003B */ sb $t9, 0x3b($s1) -/* 05E5E8 8005D9E8 820B0187 */ lb $t3, 0x187($s0) -/* 05E5EC 8005D9EC 00000000 */ nop -/* 05E5F0 8005D9F0 11600028 */ beqz $t3, .L8005DA94 -/* 05E5F4 8005D9F4 00000000 */ nop -/* 05E5F8 8005D9F8 822C003B */ lb $t4, 0x3b($s1) -/* 05E5FC 8005D9FC 24010005 */ li $at, 5 -/* 05E600 8005DA00 11810024 */ beq $t4, $at, .L8005DA94 -/* 05E604 8005DA04 00000000 */ nop -/* 05E608 8005DA08 0C0172C1 */ jal func_8005CB04 -/* 05E60C 8005DA0C 24040001 */ li $a0, 1 -/* 05E610 8005DA10 24040011 */ li $a0, 17 -/* 05E614 8005DA14 0C000741 */ jal play_sound_global -/* 05E618 8005DA18 00002825 */ move $a1, $zero -/* 05E61C 8005DA1C 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 05E620 8005DA20 44816000 */ mtc1 $at, $f12 -/* 05E624 8005DA24 0C01A7CA */ jal func_80069F28 -/* 05E628 8005DA28 00000000 */ nop -/* 05E62C 8005DA2C 3C01800E */ lui $at, %hi(D_800E6A60 + 4) # $at, 0x800e -/* 05E630 8005DA30 C62A001C */ lwc1 $f10, 0x1c($s1) -/* 05E634 8005DA34 C4216A60 */ lwc1 $f1, %lo(D_800E6A60)($at) -/* 05E638 8005DA38 C4206A64 */ lwc1 $f0, %lo(D_800E6A60 + 4)($at) -/* 05E63C 8005DA3C 460054A1 */ cvt.d.s $f18, $f10 -/* 05E640 8005DA40 46209102 */ mul.d $f4, $f18, $f0 -/* 05E644 8005DA44 C6280024 */ lwc1 $f8, 0x24($s1) -/* 05E648 8005DA48 44808000 */ mtc1 $zero, $f16 -/* 05E64C 8005DA4C 460042A1 */ cvt.d.s $f10, $f8 -/* 05E650 8005DA50 240D0005 */ li $t5, 5 -/* 05E654 8005DA54 46205482 */ mul.d $f18, $f10, $f0 -/* 05E658 8005DA58 462021A0 */ cvt.s.d $f6, $f4 -/* 05E65C 8005DA5C A22D003B */ sb $t5, 0x3b($s1) -/* 05E660 8005DA60 E626001C */ swc1 $f6, 0x1c($s1) -/* 05E664 8005DA64 3C014010 */ li $at, 0x40100000 # 2.250000 -/* 05E668 8005DA68 46209120 */ cvt.s.d $f4, $f18 -/* 05E66C 8005DA6C 44815800 */ mtc1 $at, $f11 -/* 05E670 8005DA70 E6240024 */ swc1 $f4, 0x24($s1) -/* 05E674 8005DA74 E610000C */ swc1 $f16, 0xc($s0) -/* 05E678 8005DA78 C6260020 */ lwc1 $f6, 0x20($s1) -/* 05E67C 8005DA7C 44805000 */ mtc1 $zero, $f10 -/* 05E680 8005DA80 46003221 */ cvt.d.s $f8, $f6 -/* 05E684 8005DA84 462A4480 */ add.d $f18, $f8, $f10 -/* 05E688 8005DA88 2409FFFF */ li $t1, -1 -/* 05E68C 8005DA8C 46209120 */ cvt.s.d $f4, $f18 -/* 05E690 8005DA90 E6240020 */ swc1 $f4, 0x20($s1) -.L8005DA94: -/* 05E694 8005DA94 8E0E0148 */ lw $t6, 0x148($s0) -/* 05E698 8005DA98 44808000 */ mtc1 $zero, $f16 -/* 05E69C 8005DA9C 11C0001A */ beqz $t6, .L8005DB08 -/* 05E6A0 8005DAA0 A2000187 */ sb $zero, 0x187($s0) -/* 05E6A4 8005DAA4 C620001C */ lwc1 $f0, 0x1c($s1) -/* 05E6A8 8005DAA8 C6220024 */ lwc1 $f2, 0x24($s1) -/* 05E6AC 8005DAAC 46000502 */ mul.s $f20, $f0, $f0 -/* 05E6B0 8005DAB0 00000000 */ nop -/* 05E6B4 8005DAB4 46021382 */ mul.s $f14, $f2, $f2 -/* 05E6B8 8005DAB8 00000000 */ nop -/* 05E6BC 8005DABC 4614A182 */ mul.s $f6, $f20, $f20 -/* 05E6C0 8005DAC0 00000000 */ nop -/* 05E6C4 8005DAC4 460E7202 */ mul.s $f8, $f14, $f14 -/* 05E6C8 8005DAC8 0C0326B4 */ jal sqrtf -/* 05E6CC 8005DACC 46083300 */ add.s $f12, $f6, $f8 -/* 05E6D0 8005DAD0 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 05E6D4 8005DAD4 44815800 */ mtc1 $at, $f11 -/* 05E6D8 8005DAD8 44805000 */ mtc1 $zero, $f10 -/* 05E6DC 8005DADC 46000087 */ neg.s $f2, $f0 -/* 05E6E0 8005DAE0 460014A1 */ cvt.d.s $f18, $f2 -/* 05E6E4 8005DAE4 4632503C */ c.lt.d $f10, $f18 -/* 05E6E8 8005DAE8 44808000 */ mtc1 $zero, $f16 -/* 05E6EC 8005DAEC E602002C */ swc1 $f2, 0x2c($s0) -/* 05E6F0 8005DAF0 45000005 */ bc1f .L8005DB08 -/* 05E6F4 8005DAF4 2409FFFF */ li $t1, -1 -/* 05E6F8 8005DAF8 E610002C */ swc1 $f16, 0x2c($s0) -/* 05E6FC 8005DAFC E630001C */ swc1 $f16, 0x1c($s1) -/* 05E700 8005DB00 E6300020 */ swc1 $f16, 0x20($s1) -/* 05E704 8005DB04 E6300024 */ swc1 $f16, 0x24($s1) -.L8005DB08: -/* 05E708 8005DB08 8E2F0068 */ lw $t7, 0x68($s1) -/* 05E70C 8005DB0C 8223003B */ lb $v1, 0x3b($s1) -/* 05E710 8005DB10 8DE20000 */ lw $v0, ($t7) -/* 05E714 8005DB14 0003C8C0 */ sll $t9, $v1, 3 -/* 05E718 8005DB18 8C450000 */ lw $a1, ($v0) -/* 05E71C 8005DB1C C7AC0064 */ lwc1 $f12, 0x64($sp) -/* 05E720 8005DB20 8CB80044 */ lw $t8, 0x44($a1) -/* 05E724 8005DB24 C606002C */ lwc1 $f6, 0x2c($s0) -/* 05E728 8005DB28 03195821 */ addu $t3, $t8, $t9 -/* 05E72C 8005DB2C 8D6C0004 */ lw $t4, 4($t3) -/* 05E730 8005DB30 460C3202 */ mul.s $f8, $f6, $f12 -/* 05E734 8005DB34 000C6900 */ sll $t5, $t4, 4 -/* 05E738 8005DB38 25AEFFEF */ addiu $t6, $t5, -0x11 -/* 05E73C 8005DB3C 3C01800E */ lui $at, %hi(D_800E6A68 + 4) # $at, 0x800e -/* 05E740 8005DB40 448E2000 */ mtc1 $t6, $f4 -/* 05E744 8005DB44 C4336A68 */ lwc1 $f19, %lo(D_800E6A68)($at) -/* 05E748 8005DB48 C4326A6C */ lwc1 $f18, %lo(D_800E6A68 + 4)($at) -/* 05E74C 8005DB4C 460042A1 */ cvt.d.s $f10, $f8 -/* 05E750 8005DB50 46802520 */ cvt.s.w $f20, $f4 -/* 05E754 8005DB54 44803000 */ mtc1 $zero, $f6 -/* 05E758 8005DB58 44803800 */ mtc1 $zero, $f7 -/* 05E75C 8005DB5C 46325102 */ mul.d $f4, $f10, $f18 -/* 05E760 8005DB60 462020A0 */ cvt.s.d $f2, $f4 -/* 05E764 8005DB64 46001021 */ cvt.d.s $f0, $f2 -/* 05E768 8005DB68 4626003E */ c.le.d $f0, $f6 -/* 05E76C 8005DB6C 00000000 */ nop -/* 05E770 8005DB70 4500000B */ bc1f .L8005DBA0 -/* 05E774 8005DB74 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 05E778 8005DB78 44814800 */ mtc1 $at, $f9 -/* 05E77C 8005DB7C 44804000 */ mtc1 $zero, $f8 -/* 05E780 8005DB80 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 05E784 8005DB84 4620403C */ c.lt.d $f8, $f0 -/* 05E788 8005DB88 00000000 */ nop -/* 05E78C 8005DB8C 4500000E */ bc1f .L8005DBC8 -/* 05E790 8005DB90 00000000 */ nop -/* 05E794 8005DB94 44811000 */ mtc1 $at, $f2 -/* 05E798 8005DB98 1000000C */ b .L8005DBCC -/* 05E79C 8005DB9C 2C610006 */ sltiu $at, $v1, 6 -.L8005DBA0: -/* 05E7A0 8005DBA0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05E7A4 8005DBA4 44815800 */ mtc1 $at, $f11 -/* 05E7A8 8005DBA8 44805000 */ mtc1 $zero, $f10 -/* 05E7AC 8005DBAC 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05E7B0 8005DBB0 462A003C */ c.lt.d $f0, $f10 -/* 05E7B4 8005DBB4 00000000 */ nop -/* 05E7B8 8005DBB8 45000003 */ bc1f .L8005DBC8 -/* 05E7BC 8005DBBC 00000000 */ nop -/* 05E7C0 8005DBC0 44811000 */ mtc1 $at, $f2 -/* 05E7C4 8005DBC4 00000000 */ nop -.L8005DBC8: -/* 05E7C8 8005DBC8 2C610006 */ sltiu $at, $v1, 6 -.L8005DBCC: -/* 05E7CC 8005DBCC 1020004F */ beqz $at, .L8005DD0C -/* 05E7D0 8005DBD0 00037880 */ sll $t7, $v1, 2 -/* 05E7D4 8005DBD4 3C01800E */ lui $at, %hi(jpt_800E6A70) # $at, 0x800e -/* 05E7D8 8005DBD8 002F0821 */ addu $at, $at, $t7 -/* 05E7DC 8005DBDC 8C2F6A70 */ lw $t7, %lo(jpt_800E6A70)($at) -/* 05E7E0 8005DBE0 00000000 */ nop -/* 05E7E4 8005DBE4 01E00008 */ jr $t7 -/* 05E7E8 8005DBE8 00000000 */ nop -glabel L8005DBEC -/* 05E7EC 8005DBEC C612000C */ lwc1 $f18, 0xc($s0) -/* 05E7F0 8005DBF0 460061A1 */ cvt.d.s $f6, $f12 -/* 05E7F4 8005DBF4 46009121 */ cvt.d.s $f4, $f18 -/* 05E7F8 8005DBF8 46262200 */ add.d $f8, $f4, $f6 -/* 05E7FC 8005DBFC A20001CD */ sb $zero, 0x1cd($s0) -/* 05E800 8005DC00 462042A0 */ cvt.s.d $f10, $f8 -/* 05E804 8005DC04 24040002 */ li $a0, 2 -/* 05E808 8005DC08 10000041 */ b .L8005DD10 -/* 05E80C 8005DC0C E60A000C */ swc1 $f10, 0xc($s0) -glabel L8005DC10 -/* 05E810 8005DC10 921801CD */ lbu $t8, 0x1cd($s0) -/* 05E814 8005DC14 24040002 */ li $a0, 2 -/* 05E818 8005DC18 14980006 */ bne $a0, $t8, .L8005DC34 -/* 05E81C 8005DC1C 00000000 */ nop -/* 05E820 8005DC20 C612000C */ lwc1 $f18, 0xc($s0) -/* 05E824 8005DC24 00000000 */ nop -/* 05E828 8005DC28 46029100 */ add.s $f4, $f18, $f2 -/* 05E82C 8005DC2C 10000038 */ b .L8005DD10 -/* 05E830 8005DC30 E604000C */ swc1 $f4, 0xc($s0) -.L8005DC34: -/* 05E834 8005DC34 C606000C */ lwc1 $f6, 0xc($s0) -/* 05E838 8005DC38 00000000 */ nop -/* 05E83C 8005DC3C 46023201 */ sub.s $f8, $f6, $f2 -/* 05E840 8005DC40 10000033 */ b .L8005DD10 -/* 05E844 8005DC44 E608000C */ swc1 $f8, 0xc($s0) -glabel L8005DC48 -/* 05E848 8005DC48 C60A000C */ lwc1 $f10, 0xc($s0) -/* 05E84C 8005DC4C 24190002 */ li $t9, 2 -/* 05E850 8005DC50 46025481 */ sub.s $f18, $f10, $f2 -/* 05E854 8005DC54 A21901CD */ sb $t9, 0x1cd($s0) -/* 05E858 8005DC58 E612000C */ swc1 $f18, 0xc($s0) -/* 05E85C 8005DC5C 1000002C */ b .L8005DD10 -/* 05E860 8005DC60 24040002 */ li $a0, 2 -glabel L8005DC64 -/* 05E864 8005DC64 920B01CD */ lbu $t3, 0x1cd($s0) -/* 05E868 8005DC68 24010004 */ li $at, 4 -/* 05E86C 8005DC6C 1561000A */ bne $t3, $at, .L8005DC98 -/* 05E870 8005DC70 00000000 */ nop -/* 05E874 8005DC74 C604000C */ lwc1 $f4, 0xc($s0) -/* 05E878 8005DC78 46006021 */ cvt.d.s $f0, $f12 -/* 05E87C 8005DC7C 46200200 */ add.d $f8, $f0, $f0 -/* 05E880 8005DC80 24040002 */ li $a0, 2 -/* 05E884 8005DC84 460021A1 */ cvt.d.s $f6, $f4 -/* 05E888 8005DC88 46283281 */ sub.d $f10, $f6, $f8 -/* 05E88C 8005DC8C 462054A0 */ cvt.s.d $f18, $f10 -/* 05E890 8005DC90 1000001F */ b .L8005DD10 -/* 05E894 8005DC94 E612000C */ swc1 $f18, 0xc($s0) -.L8005DC98: -/* 05E898 8005DC98 C604000C */ lwc1 $f4, 0xc($s0) -/* 05E89C 8005DC9C 46006021 */ cvt.d.s $f0, $f12 -/* 05E8A0 8005DCA0 46200200 */ add.d $f8, $f0, $f0 -/* 05E8A4 8005DCA4 460021A1 */ cvt.d.s $f6, $f4 -/* 05E8A8 8005DCA8 46283280 */ add.d $f10, $f6, $f8 -/* 05E8AC 8005DCAC 462054A0 */ cvt.s.d $f18, $f10 -/* 05E8B0 8005DCB0 E612000C */ swc1 $f18, 0xc($s0) -/* 05E8B4 8005DCB4 10000016 */ b .L8005DD10 -/* 05E8B8 8005DCB8 24040002 */ li $a0, 2 -glabel L8005DCBC -/* 05E8BC 8005DCBC C604000C */ lwc1 $f4, 0xc($s0) -/* 05E8C0 8005DCC0 46006021 */ cvt.d.s $f0, $f12 -/* 05E8C4 8005DCC4 46200200 */ add.d $f8, $f0, $f0 -/* 05E8C8 8005DCC8 240C0004 */ li $t4, 4 -/* 05E8CC 8005DCCC 460021A1 */ cvt.d.s $f6, $f4 -/* 05E8D0 8005DCD0 46283280 */ add.d $f10, $f6, $f8 -/* 05E8D4 8005DCD4 A20C01CD */ sb $t4, 0x1cd($s0) -/* 05E8D8 8005DCD8 462054A0 */ cvt.s.d $f18, $f10 -/* 05E8DC 8005DCDC 24040002 */ li $a0, 2 -/* 05E8E0 8005DCE0 1000000B */ b .L8005DD10 -/* 05E8E4 8005DCE4 E612000C */ swc1 $f18, 0xc($s0) -glabel L8005DCE8 -/* 05E8E8 8005DCE8 C604000C */ lwc1 $f4, 0xc($s0) -/* 05E8EC 8005DCEC 46006021 */ cvt.d.s $f0, $f12 -/* 05E8F0 8005DCF0 46200200 */ add.d $f8, $f0, $f0 -/* 05E8F4 8005DCF4 24040002 */ li $a0, 2 -/* 05E8F8 8005DCF8 460021A1 */ cvt.d.s $f6, $f4 -/* 05E8FC 8005DCFC 46283280 */ add.d $f10, $f6, $f8 -/* 05E900 8005DD00 462054A0 */ cvt.s.d $f18, $f10 -/* 05E904 8005DD04 10000002 */ b .L8005DD10 -/* 05E908 8005DD08 E612000C */ swc1 $f18, 0xc($s0) -.L8005DD0C: -/* 05E90C 8005DD0C 24040002 */ li $a0, 2 -.L8005DD10: -/* 05E910 8005DD10 C600000C */ lwc1 $f0, 0xc($s0) -/* 05E914 8005DD14 00000000 */ nop -/* 05E918 8005DD18 4600A03E */ c.le.s $f20, $f0 -/* 05E91C 8005DD1C 00000000 */ nop -/* 05E920 8005DD20 4500000A */ bc1f .L8005DD4C -/* 05E924 8005DD24 00000000 */ nop -.L8005DD28: -/* 05E928 8005DD28 46140101 */ sub.s $f4, $f0, $f20 -/* 05E92C 8005DD2C E604000C */ swc1 $f4, 0xc($s0) -/* 05E930 8005DD30 A4490010 */ sh $t1, 0x10($v0) -/* 05E934 8005DD34 C600000C */ lwc1 $f0, 0xc($s0) -/* 05E938 8005DD38 00000000 */ nop -/* 05E93C 8005DD3C 4600A03E */ c.le.s $f20, $f0 -/* 05E940 8005DD40 00000000 */ nop -/* 05E944 8005DD44 4501FFF8 */ bc1t .L8005DD28 -/* 05E948 8005DD48 00000000 */ nop -.L8005DD4C: -/* 05E94C 8005DD4C 4610003E */ c.le.s $f0, $f16 -/* 05E950 8005DD50 00000000 */ nop -/* 05E954 8005DD54 4500000A */ bc1f .L8005DD80 -/* 05E958 8005DD58 00000000 */ nop -.L8005DD5C: -/* 05E95C 8005DD5C 46140180 */ add.s $f6, $f0, $f20 -/* 05E960 8005DD60 E606000C */ swc1 $f6, 0xc($s0) -/* 05E964 8005DD64 A4490010 */ sh $t1, 0x10($v0) -/* 05E968 8005DD68 C600000C */ lwc1 $f0, 0xc($s0) -/* 05E96C 8005DD6C 00000000 */ nop -/* 05E970 8005DD70 4610003E */ c.le.s $f0, $f16 -/* 05E974 8005DD74 00000000 */ nop -/* 05E978 8005DD78 4501FFF8 */ bc1t .L8005DD5C -/* 05E97C 8005DD7C 00000000 */ nop -.L8005DD80: -/* 05E980 8005DD80 8223003B */ lb $v1, 0x3b($s1) -/* 05E984 8005DD84 00000000 */ nop -/* 05E988 8005DD88 14830011 */ bne $a0, $v1, .L8005DDD0 -/* 05E98C 8005DD8C 00000000 */ nop -/* 05E990 8005DD90 820D01E2 */ lb $t5, 0x1e2($s0) -/* 05E994 8005DD94 3C01C01A */ li $at, 0xC01A0000 # -2.406250 -/* 05E998 8005DD98 15A0000D */ bnez $t5, .L8005DDD0 -/* 05E99C 8005DD9C 00000000 */ nop -/* 05E9A0 8005DDA0 C608002C */ lwc1 $f8, 0x2c($s0) -/* 05E9A4 8005DDA4 44819800 */ mtc1 $at, $f19 -/* 05E9A8 8005DDA8 44809000 */ mtc1 $zero, $f18 -/* 05E9AC 8005DDAC 460042A1 */ cvt.d.s $f10, $f8 -/* 05E9B0 8005DDB0 4632503C */ c.lt.d $f10, $f18 -/* 05E9B4 8005DDB4 24060003 */ li $a2, 3 -/* 05E9B8 8005DDB8 45000005 */ bc1f .L8005DDD0 -/* 05E9BC 8005DDBC 00000000 */ nop -/* 05E9C0 8005DDC0 A226003B */ sb $a2, 0x3b($s1) -/* 05E9C4 8005DDC4 E610000C */ swc1 $f16, 0xc($s0) -/* 05E9C8 8005DDC8 8223003B */ lb $v1, 0x3b($s1) -/* 05E9CC 8005DDCC 00000000 */ nop -.L8005DDD0: -/* 05E9D0 8005DDD0 844E0010 */ lh $t6, 0x10($v0) -/* 05E9D4 8005DDD4 24060003 */ li $a2, 3 -/* 05E9D8 8005DDD8 112E0003 */ beq $t1, $t6, .L8005DDE8 -/* 05E9DC 8005DDDC 24010005 */ li $at, 5 -/* 05E9E0 8005DDE0 1460006A */ bnez $v1, .L8005DF8C -/* 05E9E4 8005DDE4 24010005 */ li $at, 5 -.L8005DDE8: -/* 05E9E8 8005DDE8 14610009 */ bne $v1, $at, .L8005DE10 -/* 05E9EC 8005DDEC 24010001 */ li $at, 1 -/* 05E9F0 8005DDF0 920F01CD */ lbu $t7, 0x1cd($s0) -/* 05E9F4 8005DDF4 00000000 */ nop -/* 05E9F8 8005DDF8 A22F003B */ sb $t7, 0x3b($s1) -/* 05E9FC 8005DDFC E610000C */ swc1 $f16, 0xc($s0) -/* 05EA00 8005DE00 8223003B */ lb $v1, 0x3b($s1) -/* 05EA04 8005DE04 10000062 */ b .L8005DF90 -/* 05EA08 8005DE08 4458F800 */ cfc1 $t8, $31 -/* 05EA0C 8005DE0C 24010001 */ li $at, 1 -.L8005DE10: -/* 05EA10 8005DE10 1461000B */ bne $v1, $at, .L8005DE40 -/* 05EA14 8005DE14 00000000 */ nop -/* 05EA18 8005DE18 921801CD */ lbu $t8, 0x1cd($s0) -/* 05EA1C 8005DE1C 00000000 */ nop -/* 05EA20 8005DE20 17000003 */ bnez $t8, .L8005DE30 -/* 05EA24 8005DE24 00000000 */ nop -/* 05EA28 8005DE28 10000002 */ b .L8005DE34 -/* 05EA2C 8005DE2C A224003B */ sb $a0, 0x3b($s1) -.L8005DE30: -/* 05EA30 8005DE30 A220003B */ sb $zero, 0x3b($s1) -.L8005DE34: -/* 05EA34 8005DE34 8223003B */ lb $v1, 0x3b($s1) -/* 05EA38 8005DE38 10000055 */ b .L8005DF90 -/* 05EA3C 8005DE3C 4458F800 */ cfc1 $t8, $31 -.L8005DE40: -/* 05EA40 8005DE40 14C3000B */ bne $a2, $v1, .L8005DE70 -/* 05EA44 8005DE44 3C01800E */ lui $at, %hi(D_800E6A88 + 4) # $at, 0x800e -/* 05EA48 8005DE48 921901CD */ lbu $t9, 0x1cd($s0) -/* 05EA4C 8005DE4C 24010004 */ li $at, 4 -/* 05EA50 8005DE50 17210003 */ bne $t9, $at, .L8005DE60 -/* 05EA54 8005DE54 240B0004 */ li $t3, 4 -/* 05EA58 8005DE58 10000002 */ b .L8005DE64 -/* 05EA5C 8005DE5C A224003B */ sb $a0, 0x3b($s1) -.L8005DE60: -/* 05EA60 8005DE60 A22B003B */ sb $t3, 0x3b($s1) -.L8005DE64: -/* 05EA64 8005DE64 8223003B */ lb $v1, 0x3b($s1) -/* 05EA68 8005DE68 10000049 */ b .L8005DF90 -/* 05EA6C 8005DE6C 4458F800 */ cfc1 $t8, $31 -.L8005DE70: -/* 05EA70 8005DE70 C604002C */ lwc1 $f4, 0x2c($s0) -/* 05EA74 8005DE74 C4276A88 */ lwc1 $f7, %lo(D_800E6A88)($at) -/* 05EA78 8005DE78 C4266A8C */ lwc1 $f6, %lo(D_800E6A88 + 4)($at) -/* 05EA7C 8005DE7C 46002021 */ cvt.d.s $f0, $f4 -/* 05EA80 8005DE80 4620303C */ c.lt.d $f6, $f0 -/* 05EA84 8005DE84 3C01800E */ lui $at, %hi(D_800E6A90 + 4) # $at, 0x800e -/* 05EA88 8005DE88 4500001C */ bc1f .L8005DEFC -/* 05EA8C 8005DE8C 00000000 */ nop -/* 05EA90 8005DE90 C4296A90 */ lwc1 $f9, %lo(D_800E6A90)($at) -/* 05EA94 8005DE94 C4286A94 */ lwc1 $f8, %lo(D_800E6A90 + 4)($at) -/* 05EA98 8005DE98 00000000 */ nop -/* 05EA9C 8005DE9C 4628003C */ c.lt.d $f0, $f8 -/* 05EAA0 8005DEA0 00000000 */ nop -/* 05EAA4 8005DEA4 45000015 */ bc1f .L8005DEFC -/* 05EAA8 8005DEA8 00000000 */ nop -/* 05EAAC 8005DEAC 1483000F */ bne $a0, $v1, .L8005DEEC -/* 05EAB0 8005DEB0 240C0001 */ li $t4, 1 -/* 05EAB4 8005DEB4 A22C003B */ sb $t4, 0x3b($s1) -/* 05EAB8 8005DEB8 822E003B */ lb $t6, 0x3b($s1) -/* 05EABC 8005DEBC 8CAD0044 */ lw $t5, 0x44($a1) -/* 05EAC0 8005DEC0 000E78C0 */ sll $t7, $t6, 3 -/* 05EAC4 8005DEC4 01AFC021 */ addu $t8, $t5, $t7 -/* 05EAC8 8005DEC8 8F190004 */ lw $t9, 4($t8) -/* 05EACC 8005DECC 00000000 */ nop -/* 05EAD0 8005DED0 00195900 */ sll $t3, $t9, 4 -/* 05EAD4 8005DED4 256CFFEF */ addiu $t4, $t3, -0x11 -/* 05EAD8 8005DED8 448C5000 */ mtc1 $t4, $f10 -/* 05EADC 8005DEDC 00000000 */ nop -/* 05EAE0 8005DEE0 468054A0 */ cvt.s.w $f18, $f10 -/* 05EAE4 8005DEE4 10000002 */ b .L8005DEF0 -/* 05EAE8 8005DEE8 E612000C */ swc1 $f18, 0xc($s0) -.L8005DEEC: -/* 05EAEC 8005DEEC A220003B */ sb $zero, 0x3b($s1) -.L8005DEF0: -/* 05EAF0 8005DEF0 8223003B */ lb $v1, 0x3b($s1) -/* 05EAF4 8005DEF4 10000026 */ b .L8005DF90 -/* 05EAF8 8005DEF8 4458F800 */ cfc1 $t8, $31 -.L8005DEFC: -/* 05EAFC 8005DEFC 14600006 */ bnez $v1, .L8005DF18 -/* 05EB00 8005DF00 24010004 */ li $at, 4 -/* 05EB04 8005DF04 240E0001 */ li $t6, 1 -/* 05EB08 8005DF08 A22E003B */ sb $t6, 0x3b($s1) -/* 05EB0C 8005DF0C E610000C */ swc1 $f16, 0xc($s0) -/* 05EB10 8005DF10 8223003B */ lb $v1, 0x3b($s1) -/* 05EB14 8005DF14 00000000 */ nop -.L8005DF18: -/* 05EB18 8005DF18 1461001C */ bne $v1, $at, .L8005DF8C -/* 05EB1C 8005DF1C 00000000 */ nop -/* 05EB20 8005DF20 820D01E2 */ lb $t5, 0x1e2($s0) -/* 05EB24 8005DF24 3C01C018 */ li $at, 0xC0180000 # -2.375000 -/* 05EB28 8005DF28 11A00018 */ beqz $t5, .L8005DF8C -/* 05EB2C 8005DF2C 00000000 */ nop -/* 05EB30 8005DF30 C606002C */ lwc1 $f6, 0x2c($s0) -/* 05EB34 8005DF34 44812800 */ mtc1 $at, $f5 -/* 05EB38 8005DF38 44802000 */ mtc1 $zero, $f4 -/* 05EB3C 8005DF3C 46003221 */ cvt.d.s $f8, $f6 -/* 05EB40 8005DF40 4628203C */ c.lt.d $f4, $f8 -/* 05EB44 8005DF44 00000000 */ nop -/* 05EB48 8005DF48 45000010 */ bc1f .L8005DF8C -/* 05EB4C 8005DF4C 00000000 */ nop -/* 05EB50 8005DF50 A226003B */ sb $a2, 0x3b($s1) -/* 05EB54 8005DF54 8238003B */ lb $t8, 0x3b($s1) -/* 05EB58 8005DF58 8CAF0044 */ lw $t7, 0x44($a1) -/* 05EB5C 8005DF5C 0018C8C0 */ sll $t9, $t8, 3 -/* 05EB60 8005DF60 01F95821 */ addu $t3, $t7, $t9 -/* 05EB64 8005DF64 8D6C0004 */ lw $t4, 4($t3) -/* 05EB68 8005DF68 00000000 */ nop -/* 05EB6C 8005DF6C 000C7100 */ sll $t6, $t4, 4 -/* 05EB70 8005DF70 25CDFFEF */ addiu $t5, $t6, -0x11 -/* 05EB74 8005DF74 448D5000 */ mtc1 $t5, $f10 -/* 05EB78 8005DF78 00000000 */ nop -/* 05EB7C 8005DF7C 468054A0 */ cvt.s.w $f18, $f10 -/* 05EB80 8005DF80 E612000C */ swc1 $f18, 0xc($s0) -/* 05EB84 8005DF84 8223003B */ lb $v1, 0x3b($s1) -/* 05EB88 8005DF88 00000000 */ nop -.L8005DF8C: -/* 05EB8C 8005DF8C 4458F800 */ cfc1 $t8, $31 -.L8005DF90: -/* 05EB90 8005DF90 C606000C */ lwc1 $f6, 0xc($s0) -/* 05EB94 8005DF94 37010003 */ ori $at, $t8, 3 -/* 05EB98 8005DF98 38210002 */ xori $at, $at, 2 -/* 05EB9C 8005DF9C 44C1F800 */ ctc1 $at, $31 -/* 05EBA0 8005DFA0 862A0018 */ lh $t2, 0x18($s1) -/* 05EBA4 8005DFA4 46003124 */ cvt.w.s $f4, $f6 -/* 05EBA8 8005DFA8 24010001 */ li $at, 1 -/* 05EBAC 8005DFAC 440F2000 */ mfc1 $t7, $f4 -/* 05EBB0 8005DFB0 44D8F800 */ ctc1 $t8, $31 -/* 05EBB4 8005DFB4 AE200074 */ sw $zero, 0x74($s1) -/* 05EBB8 8005DFB8 10610017 */ beq $v1, $at, .L8005E018 -/* 05EBBC 8005DFBC A62F0018 */ sh $t7, 0x18($s1) -/* 05EBC0 8005DFC0 10830015 */ beq $a0, $v1, .L8005E018 -/* 05EBC4 8005DFC4 000AC903 */ sra $t9, $t2, 4 -/* 05EBC8 8005DFC8 00195C00 */ sll $t3, $t9, 0x10 -/* 05EBCC 8005DFCC 000B5403 */ sra $t2, $t3, 0x10 -/* 05EBD0 8005DFD0 14600002 */ bnez $v1, .L8005DFDC -/* 05EBD4 8005DFD4 24020001 */ li $v0, 1 -/* 05EBD8 8005DFD8 24020003 */ li $v0, 3 -.L8005DFDC: -/* 05EBDC 8005DFDC 1542000E */ bne $t2, $v0, .L8005E018 -/* 05EBE0 8005DFE0 00000000 */ nop -/* 05EBE4 8005DFE4 862D0018 */ lh $t5, 0x18($s1) -/* 05EBE8 8005DFE8 244E0001 */ addiu $t6, $v0, 1 -/* 05EBEC 8005DFEC 000DC103 */ sra $t8, $t5, 4 -/* 05EBF0 8005DFF0 15D80009 */ bne $t6, $t8, .L8005E018 -/* 05EBF4 8005DFF4 24040223 */ li $a0, 547 -/* 05EBF8 8005DFF8 8E25000C */ lw $a1, 0xc($s1) -/* 05EBFC 8005DFFC 8E260010 */ lw $a2, 0x10($s1) -/* 05EC00 8005E000 8E270014 */ lw $a3, 0x14($s1) -/* 05EC04 8005E004 240F0004 */ li $t7, 4 -/* 05EC08 8005E008 AFAF0010 */ sw $t7, 0x10($sp) -/* 05EC0C 8005E00C 0C002556 */ jal func_80009558 -/* 05EC10 8005E010 AFA00014 */ sw $zero, 0x14($sp) -/* 05EC14 8005E014 2409FFFF */ li $t1, -1 -.L8005E018: -/* 05EC18 8005E018 821901D7 */ lb $t9, 0x1d7($s0) -/* 05EC1C 8005E01C 24010007 */ li $at, 7 -/* 05EC20 8005E020 17210010 */ bne $t9, $at, .L8005E064 -/* 05EC24 8005E024 8FA50060 */ lw $a1, 0x60($sp) -/* 05EC28 8005E028 860B0000 */ lh $t3, ($s0) -/* 05EC2C 8005E02C 00000000 */ nop -/* 05EC30 8005E030 152B000C */ bne $t1, $t3, .L8005E064 -/* 05EC34 8005E034 8FA50060 */ lw $a1, 0x60($sp) -/* 05EC38 8005E038 0C008D5A */ jal func_80023568 -/* 05EC3C 8005E03C 00000000 */ nop -/* 05EC40 8005E040 10400007 */ beqz $v0, .L8005E060 -/* 05EC44 8005E044 02202025 */ move $a0, $s1 -/* 05EC48 8005E048 240C00A5 */ li $t4, 165 -/* 05EC4C 8005E04C AFAC0010 */ sw $t4, 0x10($sp) -/* 05EC50 8005E050 02002825 */ move $a1, $s0 -/* 05EC54 8005E054 3C0642C8 */ lui $a2, 0x42c8 -/* 05EC58 8005E058 0C017881 */ jal func_8005E204 -/* 05EC5C 8005E05C 24070089 */ li $a3, 137 -.L8005E060: -/* 05EC60 8005E060 8FA50060 */ lw $a1, 0x60($sp) -.L8005E064: -/* 05EC64 8005E064 0C02BF0F */ jal func_800AFC3C -/* 05EC68 8005E068 02202025 */ move $a0, $s1 -/* 05EC6C 8005E06C 02202025 */ move $a0, $s1 -/* 05EC70 8005E070 02002825 */ move $a1, $s0 -/* 05EC74 8005E074 0C017412 */ jal func_8005D048 -/* 05EC78 8005E078 24060028 */ li $a2, 40 -/* 05EC7C 8005E07C 0C006EB2 */ jal get_racer_object -/* 05EC80 8005E080 00002025 */ move $a0, $zero -/* 05EC84 8005E084 AFA20034 */ sw $v0, 0x34($sp) -/* 05EC88 8005E088 C62A000C */ lwc1 $f10, 0xc($s1) -/* 05EC8C 8005E08C C448000C */ lwc1 $f8, 0xc($v0) -/* 05EC90 8005E090 C6260014 */ lwc1 $f6, 0x14($s1) -/* 05EC94 8005E094 460A4501 */ sub.s $f20, $f8, $f10 -/* 05EC98 8005E098 C4520014 */ lwc1 $f18, 0x14($v0) -/* 05EC9C 8005E09C 4614A102 */ mul.s $f4, $f20, $f20 -/* 05ECA0 8005E0A0 46069381 */ sub.s $f14, $f18, $f6 -/* 05ECA4 8005E0A4 E7AE0050 */ swc1 $f14, 0x50($sp) -/* 05ECA8 8005E0A8 460E7202 */ mul.s $f8, $f14, $f14 -/* 05ECAC 8005E0AC 0C0326B4 */ jal sqrtf -/* 05ECB0 8005E0B0 46082300 */ add.s $f12, $f4, $f8 -/* 05ECB4 8005E0B4 3C01800E */ lui $at, %hi(D_800E6A98 + 4) # $at, 0x800e -/* 05ECB8 8005E0B8 C4336A98 */ lwc1 $f19, %lo(D_800E6A98)($at) -/* 05ECBC 8005E0BC C4326A9C */ lwc1 $f18, %lo(D_800E6A98 + 4)($at) -/* 05ECC0 8005E0C0 460002A1 */ cvt.d.s $f10, $f0 -/* 05ECC4 8005E0C4 4632503C */ c.lt.d $f10, $f18 -/* 05ECC8 8005E0C8 C7AE0050 */ lwc1 $f14, 0x50($sp) -/* 05ECCC 8005E0CC 4500001B */ bc1f .L8005E13C -/* 05ECD0 8005E0D0 00000000 */ nop -/* 05ECD4 8005E0D4 0C01C1D4 */ jal arctan2_f -/* 05ECD8 8005E0D8 4600A306 */ mov.s $f12, $f20 -/* 05ECDC 8005E0DC 862D0000 */ lh $t5, ($s1) -/* 05ECE0 8005E0E0 34018000 */ li $at, 32768 -/* 05ECE4 8005E0E4 31AEFFFF */ andi $t6, $t5, 0xffff -/* 05ECE8 8005E0E8 004E1823 */ subu $v1, $v0, $t6 -/* 05ECEC 8005E0EC 00611821 */ addu $v1, $v1, $at -/* 05ECF0 8005E0F0 34018001 */ li $at, 32769 -/* 05ECF4 8005E0F4 0061082A */ slt $at, $v1, $at -/* 05ECF8 8005E0F8 14200003 */ bnez $at, .L8005E108 -/* 05ECFC 8005E0FC 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 05ED00 8005E100 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 05ED04 8005E104 00611821 */ addu $v1, $v1, $at -.L8005E108: -/* 05ED08 8005E108 28618000 */ slti $at, $v1, -0x8000 -/* 05ED0C 8005E10C 10200002 */ beqz $at, .L8005E118 -/* 05ED10 8005E110 3401FFFF */ li $at, 65535 -/* 05ED14 8005E114 00611821 */ addu $v1, $v1, $at -.L8005E118: -/* 05ED18 8005E118 28610C01 */ slti $at, $v1, 0xc01 -/* 05ED1C 8005E11C 14200003 */ bnez $at, .L8005E12C -/* 05ED20 8005E120 2861F400 */ slti $at, $v1, -0xc00 -/* 05ED24 8005E124 24030C00 */ li $v1, 3072 -/* 05ED28 8005E128 2861F400 */ slti $at, $v1, -0xc00 -.L8005E12C: -/* 05ED2C 8005E12C 10200002 */ beqz $at, .L8005E138 -/* 05ED30 8005E130 00000000 */ nop -/* 05ED34 8005E134 2403F400 */ li $v1, -3072 -.L8005E138: -/* 05ED38 8005E138 A603016C */ sh $v1, 0x16c($s0) -.L8005E13C: -/* 05ED3C 8005E13C 8238003B */ lb $t8, 0x3b($s1) -/* 05ED40 8005E140 3C058012 */ lui $a1, %hi(D_8011D5E0) # $a1, 0x8012 -/* 05ED44 8005E144 2B010002 */ slti $at, $t8, 2 -/* 05ED48 8005E148 1420000B */ bnez $at, .L8005E178 -/* 05ED4C 8005E14C 24A5D5E0 */ addiu $a1, %lo(D_8011D5E0) # addiu $a1, $a1, -0x2a20 -/* 05ED50 8005E150 820F01E7 */ lb $t7, 0x1e7($s0) -/* 05ED54 8005E154 00000000 */ nop -/* 05ED58 8005E158 31F9001F */ andi $t9, $t7, 0x1f -/* 05ED5C 8005E15C 2B21000A */ slti $at, $t9, 0xa -/* 05ED60 8005E160 10200006 */ beqz $at, .L8005E17C -/* 05ED64 8005E164 8FA30034 */ lw $v1, 0x34($sp) -/* 05ED68 8005E168 860B016C */ lh $t3, 0x16c($s0) -/* 05ED6C 8005E16C 00000000 */ nop -/* 05ED70 8005E170 000B6043 */ sra $t4, $t3, 1 -/* 05ED74 8005E174 A60C016C */ sh $t4, 0x16c($s0) -.L8005E178: -/* 05ED78 8005E178 8FA30034 */ lw $v1, 0x34($sp) -.L8005E17C: -/* 05ED7C 8005E17C 00000000 */ nop -/* 05ED80 8005E180 8C62004C */ lw $v0, 0x4c($v1) -/* 05ED84 8005E184 8C700064 */ lw $s0, 0x64($v1) -/* 05ED88 8005E188 8C4D0000 */ lw $t5, ($v0) -/* 05ED8C 8005E18C 00000000 */ nop -/* 05ED90 8005E190 162D000B */ bne $s1, $t5, .L8005E1C0 -/* 05ED94 8005E194 00000000 */ nop -/* 05ED98 8005E198 844E0014 */ lh $t6, 0x14($v0) -/* 05ED9C 8005E19C 00000000 */ nop -/* 05EDA0 8005E1A0 31D80008 */ andi $t8, $t6, 8 -/* 05EDA4 8005E1A4 13000006 */ beqz $t8, .L8005E1C0 -/* 05EDA8 8005E1A8 00000000 */ nop -/* 05EDAC 8005E1AC 822F003B */ lb $t7, 0x3b($s1) -/* 05EDB0 8005E1B0 24010001 */ li $at, 1 -/* 05EDB4 8005E1B4 15E10002 */ bne $t7, $at, .L8005E1C0 -/* 05EDB8 8005E1B8 24190004 */ li $t9, 4 -/* 05EDBC 8005E1BC A2190187 */ sb $t9, 0x187($s0) -.L8005E1C0: -/* 05EDC0 8005E1C0 820B01D8 */ lb $t3, 0x1d8($s0) -/* 05EDC4 8005E1C4 00000000 */ nop -/* 05EDC8 8005E1C8 11600008 */ beqz $t3, .L8005E1EC -/* 05EDCC 8005E1CC 8FBF002C */ lw $ra, 0x2c($sp) -/* 05EDD0 8005E1D0 80AC0000 */ lb $t4, ($a1) -/* 05EDD4 8005E1D4 240D0001 */ li $t5, 1 -/* 05EDD8 8005E1D8 15800003 */ bnez $t4, .L8005E1E8 -/* 05EDDC 8005E1DC 02002025 */ move $a0, $s0 -/* 05EDE0 8005E1E0 0C0172DA */ jal func_8005CB68 -/* 05EDE4 8005E1E4 A0AD0000 */ sb $t5, ($a1) -.L8005E1E8: -/* 05EDE8 8005E1E8 8FBF002C */ lw $ra, 0x2c($sp) -.L8005E1EC: -/* 05EDEC 8005E1EC C7B50018 */ lwc1 $f21, 0x18($sp) -/* 05EDF0 8005E1F0 C7B4001C */ lwc1 $f20, 0x1c($sp) -/* 05EDF4 8005E1F4 8FB00024 */ lw $s0, 0x24($sp) -/* 05EDF8 8005E1F8 8FB10028 */ lw $s1, 0x28($sp) -/* 05EDFC 8005E1FC 03E00008 */ jr $ra -/* 05EE00 8005E200 27BD0060 */ addiu $sp, $sp, 0x60 - diff --git a/asm/non_matchings/unknown_05DCD0/func_8005E204.s b/asm/non_matchings/unknown_05DCD0/func_8005E204.s deleted file mode 100644 index 2f5e5f4e..00000000 --- a/asm/non_matchings/unknown_05DCD0/func_8005E204.s +++ /dev/null @@ -1,184 +0,0 @@ -glabel func_8005E204 -/* 05EE04 8005E204 27BDFF78 */ addiu $sp, $sp, -0x88 -/* 05EE08 8005E208 AFB70044 */ sw $s7, 0x44($sp) -/* 05EE0C 8005E20C AFB30034 */ sw $s3, 0x34($sp) -/* 05EE10 8005E210 E7B40024 */ swc1 $f20, 0x24($sp) -/* 05EE14 8005E214 4486A000 */ mtc1 $a2, $f20 -/* 05EE18 8005E218 00809825 */ move $s3, $a0 -/* 05EE1C 8005E21C 00A0B825 */ move $s7, $a1 -/* 05EE20 8005E220 AFBF004C */ sw $ra, 0x4c($sp) -/* 05EE24 8005E224 AFB00028 */ sw $s0, 0x28($sp) -/* 05EE28 8005E228 00E08025 */ move $s0, $a3 -/* 05EE2C 8005E22C AFBE0048 */ sw $fp, 0x48($sp) -/* 05EE30 8005E230 AFB60040 */ sw $s6, 0x40($sp) -/* 05EE34 8005E234 AFB5003C */ sw $s5, 0x3c($sp) -/* 05EE38 8005E238 AFB40038 */ sw $s4, 0x38($sp) -/* 05EE3C 8005E23C AFB20030 */ sw $s2, 0x30($sp) -/* 05EE40 8005E240 AFB1002C */ sw $s1, 0x2c($sp) -/* 05EE44 8005E244 E7B50020 */ swc1 $f21, 0x20($sp) -/* 05EE48 8005E248 27A5007C */ addiu $a1, $sp, 0x7c -/* 05EE4C 8005E24C 0C003A62 */ jal func_8000E988 -/* 05EE50 8005E250 27A40080 */ addiu $a0, $sp, 0x80 -/* 05EE54 8005E254 320F0100 */ andi $t7, $s0, 0x100 -/* 05EE58 8005E258 000FC043 */ sra $t8, $t7, 1 -/* 05EE5C 8005E25C 37190008 */ ori $t9, $t8, 8 -/* 05EE60 8005E260 A3B00064 */ sb $s0, 0x64($sp) -/* 05EE64 8005E264 A3B90065 */ sb $t9, 0x65($sp) -/* 05EE68 8005E268 C6E60038 */ lwc1 $f6, 0x38($s7) -/* 05EE6C 8005E26C C664000C */ lwc1 $f4, 0xc($s3) -/* 05EE70 8005E270 46143202 */ mul.s $f8, $f6, $f20 -/* 05EE74 8005E274 8FAE007C */ lw $t6, 0x7c($sp) -/* 05EE78 8005E278 8FBE0098 */ lw $fp, 0x98($sp) -/* 05EE7C 8005E27C 0000A825 */ move $s5, $zero -/* 05EE80 8005E280 46082281 */ sub.s $f10, $f4, $f8 -/* 05EE84 8005E284 4448F800 */ cfc1 $t0, $31 -/* 05EE88 8005E288 00000000 */ nop -/* 05EE8C 8005E28C 35010003 */ ori $at, $t0, 3 -/* 05EE90 8005E290 38210002 */ xori $at, $at, 2 -/* 05EE94 8005E294 44C1F800 */ ctc1 $at, $31 -/* 05EE98 8005E298 00000000 */ nop -/* 05EE9C 8005E29C 46005424 */ cvt.w.s $f16, $f10 -/* 05EEA0 8005E2A0 44098000 */ mfc1 $t1, $f16 -/* 05EEA4 8005E2A4 44C8F800 */ ctc1 $t0, $31 -/* 05EEA8 8005E2A8 A7A90066 */ sh $t1, 0x66($sp) -/* 05EEAC 8005E2AC C6E6003C */ lwc1 $f6, 0x3c($s7) -/* 05EEB0 8005E2B0 C6720010 */ lwc1 $f18, 0x10($s3) -/* 05EEB4 8005E2B4 46143102 */ mul.s $f4, $f6, $f20 -/* 05EEB8 8005E2B8 46049201 */ sub.s $f8, $f18, $f4 -/* 05EEBC 8005E2BC 444AF800 */ cfc1 $t2, $31 -/* 05EEC0 8005E2C0 00000000 */ nop -/* 05EEC4 8005E2C4 35410003 */ ori $at, $t2, 3 -/* 05EEC8 8005E2C8 38210002 */ xori $at, $at, 2 -/* 05EECC 8005E2CC 44C1F800 */ ctc1 $at, $31 -/* 05EED0 8005E2D0 00000000 */ nop -/* 05EED4 8005E2D4 460042A4 */ cvt.w.s $f10, $f8 -/* 05EED8 8005E2D8 440B5000 */ mfc1 $t3, $f10 -/* 05EEDC 8005E2DC 44CAF800 */ ctc1 $t2, $31 -/* 05EEE0 8005E2E0 A7AB0068 */ sh $t3, 0x68($sp) -/* 05EEE4 8005E2E4 C6E60040 */ lwc1 $f6, 0x40($s7) -/* 05EEE8 8005E2E8 C6700014 */ lwc1 $f16, 0x14($s3) -/* 05EEEC 8005E2EC 46143482 */ mul.s $f18, $f6, $f20 -/* 05EEF0 8005E2F0 46128101 */ sub.s $f4, $f16, $f18 -/* 05EEF4 8005E2F4 444CF800 */ cfc1 $t4, $31 -/* 05EEF8 8005E2F8 00000000 */ nop -/* 05EEFC 8005E2FC 35810003 */ ori $at, $t4, 3 -/* 05EF00 8005E300 38210002 */ xori $at, $at, 2 -/* 05EF04 8005E304 44C1F800 */ ctc1 $at, $31 -/* 05EF08 8005E308 3C014010 */ li $at, 0x40100000 # 2.250000 -/* 05EF0C 8005E30C 46002224 */ cvt.w.s $f8, $f4 -/* 05EF10 8005E310 440D4000 */ mfc1 $t5, $f8 -/* 05EF14 8005E314 44CCF800 */ ctc1 $t4, $31 -/* 05EF18 8005E318 19C00058 */ blez $t6, .L8005E47C -/* 05EF1C 8005E31C A7AD006A */ sh $t5, 0x6a($sp) -/* 05EF20 8005E320 4481A800 */ mtc1 $at, $f21 -/* 05EF24 8005E324 4480A000 */ mtc1 $zero, $f20 -/* 05EF28 8005E328 0040B025 */ move $s6, $v0 -.L8005E32C: -/* 05EF2C 8005E32C 8ED10000 */ lw $s1, ($s6) -/* 05EF30 8005E330 2401006B */ li $at, 107 -/* 05EF34 8005E334 862F0048 */ lh $t7, 0x48($s1) -/* 05EF38 8005E338 00000000 */ nop -/* 05EF3C 8005E33C 15E1004B */ bne $t7, $at, .L8005E46C -/* 05EF40 8005E340 8FAF007C */ lw $t7, 0x7c($sp) -/* 05EF44 8005E344 8E32003C */ lw $s2, 0x3c($s1) -/* 05EF48 8005E348 82F80193 */ lb $t8, 0x193($s7) -/* 05EF4C 8005E34C 82420008 */ lb $v0, 8($s2) -/* 05EF50 8005E350 27190001 */ addiu $t9, $t8, 1 -/* 05EF54 8005E354 13220003 */ beq $t9, $v0, .L8005E364 -/* 05EF58 8005E358 00000000 */ nop -/* 05EF5C 8005E35C 14400043 */ bnez $v0, .L8005E46C -/* 05EF60 8005E360 8FAF007C */ lw $t7, 0x7c($sp) -.L8005E364: -/* 05EF64 8005E364 C62A000C */ lwc1 $f10, 0xc($s1) -/* 05EF68 8005E368 C666000C */ lwc1 $f6, 0xc($s3) -/* 05EF6C 8005E36C C6300010 */ lwc1 $f16, 0x10($s1) -/* 05EF70 8005E370 46065001 */ sub.s $f0, $f10, $f6 -/* 05EF74 8005E374 C6720010 */ lwc1 $f18, 0x10($s3) -/* 05EF78 8005E378 46000282 */ mul.s $f10, $f0, $f0 -/* 05EF7C 8005E37C 46128081 */ sub.s $f2, $f16, $f18 -/* 05EF80 8005E380 C6240014 */ lwc1 $f4, 0x14($s1) -/* 05EF84 8005E384 C6680014 */ lwc1 $f8, 0x14($s3) -/* 05EF88 8005E388 46021182 */ mul.s $f6, $f2, $f2 -/* 05EF8C 8005E38C 46082381 */ sub.s $f14, $f4, $f8 -/* 05EF90 8005E390 460E7482 */ mul.s $f18, $f14, $f14 -/* 05EF94 8005E394 46065400 */ add.s $f16, $f10, $f6 -/* 05EF98 8005E398 0C0326B4 */ jal sqrtf -/* 05EF9C 8005E39C 46128300 */ add.s $f12, $f16, $f18 -/* 05EFA0 8005E3A0 82480009 */ lb $t0, 9($s2) -/* 05EFA4 8005E3A4 46000121 */ cvt.d.s $f4, $f0 -/* 05EFA8 8005E3A8 310900FF */ andi $t1, $t0, 0xff -/* 05EFAC 8005E3AC 44894000 */ mtc1 $t1, $f8 -/* 05EFB0 8005E3B0 00000000 */ nop -/* 05EFB4 8005E3B4 468042A0 */ cvt.s.w $f10, $f8 -/* 05EFB8 8005E3B8 460051A1 */ cvt.d.s $f6, $f10 -/* 05EFBC 8005E3BC 46343402 */ mul.d $f16, $f6, $f20 -/* 05EFC0 8005E3C0 4630203C */ c.lt.d $f4, $f16 -/* 05EFC4 8005E3C4 00000000 */ nop -/* 05EFC8 8005E3C8 45000026 */ bc1f .L8005E464 -/* 05EFCC 8005E3CC 00000000 */ nop -/* 05EFD0 8005E3D0 8E2A0078 */ lw $t2, 0x78($s1) -/* 05EFD4 8005E3D4 240B0001 */ li $t3, 1 -/* 05EFD8 8005E3D8 15400023 */ bnez $t2, .L8005E468 -/* 05EFDC 8005E3DC 27A40064 */ addiu $a0, $sp, 0x64 -/* 05EFE0 8005E3E0 AE2B0078 */ sw $t3, 0x78($s1) -/* 05EFE4 8005E3E4 0C003A95 */ jal spawn_object -/* 05EFE8 8005E3E8 24050001 */ li $a1, 1 -/* 05EFEC 8005E3EC 1040001E */ beqz $v0, .L8005E468 -/* 05EFF0 8005E3F0 00408025 */ move $s0, $v0 -/* 05EFF4 8005E3F4 AC40003C */ sw $zero, 0x3c($v0) -/* 05EFF8 8005E3F8 C672001C */ lwc1 $f18, 0x1c($s3) -/* 05EFFC 8005E3FC 00002025 */ move $a0, $zero -/* 05F000 8005E400 E452001C */ swc1 $f18, 0x1c($v0) -/* 05F004 8005E404 C6680020 */ lwc1 $f8, 0x20($s3) -/* 05F008 8005E408 240500FF */ li $a1, 255 -/* 05F00C 8005E40C E4480020 */ swc1 $f8, 0x20($v0) -/* 05F010 8005E410 C66A0024 */ lwc1 $f10, 0x24($s3) -/* 05F014 8005E414 AC510078 */ sw $s1, 0x78($v0) -/* 05F018 8005E418 E44A0024 */ swc1 $f10, 0x24($v0) -/* 05F01C 8005E41C 824C000A */ lb $t4, 0xa($s2) -/* 05F020 8005E420 33D4FFFF */ andi $s4, $fp, 0xffff -/* 05F024 8005E424 000C6900 */ sll $t5, $t4, 4 -/* 05F028 8005E428 01AC6823 */ subu $t5, $t5, $t4 -/* 05F02C 8005E42C 000D6880 */ sll $t5, $t5, 2 -/* 05F030 8005E430 0C01BE53 */ jal get_random_number_from_range -/* 05F034 8005E434 AC4D007C */ sw $t5, 0x7c($v0) -/* 05F038 8005E438 8E05000C */ lw $a1, 0xc($s0) -/* 05F03C 8005E43C 8E060010 */ lw $a2, 0x10($s0) -/* 05F040 8005E440 8E070014 */ lw $a3, 0x14($s0) -/* 05F044 8005E444 A6020018 */ sh $v0, 0x18($s0) -/* 05F048 8005E448 240E0004 */ li $t6, 4 -/* 05F04C 8005E44C AFAE0010 */ sw $t6, 0x10($sp) -/* 05F050 8005E450 AFA00014 */ sw $zero, 0x14($sp) -/* 05F054 8005E454 0C002556 */ jal func_80009558 -/* 05F058 8005E458 3284FFFF */ andi $a0, $s4, 0xffff -/* 05F05C 8005E45C 10000003 */ b .L8005E46C -/* 05F060 8005E460 8FAF007C */ lw $t7, 0x7c($sp) -.L8005E464: -/* 05F064 8005E464 AE200078 */ sw $zero, 0x78($s1) -.L8005E468: -/* 05F068 8005E468 8FAF007C */ lw $t7, 0x7c($sp) -.L8005E46C: -/* 05F06C 8005E46C 26B50001 */ addiu $s5, $s5, 1 -/* 05F070 8005E470 02AF082A */ slt $at, $s5, $t7 -/* 05F074 8005E474 1420FFAD */ bnez $at, .L8005E32C -/* 05F078 8005E478 26D60004 */ addiu $s6, $s6, 4 -.L8005E47C: -/* 05F07C 8005E47C 8FBF004C */ lw $ra, 0x4c($sp) -/* 05F080 8005E480 C7B50020 */ lwc1 $f21, 0x20($sp) -/* 05F084 8005E484 C7B40024 */ lwc1 $f20, 0x24($sp) -/* 05F088 8005E488 8FB00028 */ lw $s0, 0x28($sp) -/* 05F08C 8005E48C 8FB1002C */ lw $s1, 0x2c($sp) -/* 05F090 8005E490 8FB20030 */ lw $s2, 0x30($sp) -/* 05F094 8005E494 8FB30034 */ lw $s3, 0x34($sp) -/* 05F098 8005E498 8FB40038 */ lw $s4, 0x38($sp) -/* 05F09C 8005E49C 8FB5003C */ lw $s5, 0x3c($sp) -/* 05F0A0 8005E4A0 8FB60040 */ lw $s6, 0x40($sp) -/* 05F0A4 8005E4A4 8FB70044 */ lw $s7, 0x44($sp) -/* 05F0A8 8005E4A8 8FBE0048 */ lw $fp, 0x48($sp) -/* 05F0AC 8005E4AC 03E00008 */ jr $ra -/* 05F0B0 8005E4B0 27BD0088 */ addiu $sp, $sp, 0x88 - -/* 05F0B4 8005E4B4 00000000 */ nop -/* 05F0B8 8005E4B8 00000000 */ nop -/* 05F0BC 8005E4BC 00000000 */ nop - diff --git a/asm/non_matchings/unknown_05F0C0/func_8005E4C0.s b/asm/non_matchings/unknown_05F0C0/func_8005E4C0.s deleted file mode 100644 index 33f46eb8..00000000 --- a/asm/non_matchings/unknown_05F0C0/func_8005E4C0.s +++ /dev/null @@ -1,408 +0,0 @@ -.late_rodata -glabel D_800E6AA0 -.double 0.3 -glabel D_800E6AA8 -.double 700.0 - -.text -glabel func_8005E4C0 -/* 05F0C0 8005E4C0 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 05F0C4 8005E4C4 AFA40058 */ sw $a0, 0x58($sp) -/* 05F0C8 8005E4C8 AFBF002C */ sw $ra, 0x2c($sp) -/* 05F0CC 8005E4CC AFB10028 */ sw $s1, 0x28($sp) -/* 05F0D0 8005E4D0 AFB00024 */ sw $s0, 0x24($sp) -/* 05F0D4 8005E4D4 3C04800E */ lui $a0, %hi(D_800DCE40) # $a0, 0x800e -/* 05F0D8 8005E4D8 00E08025 */ move $s0, $a3 -/* 05F0DC 8005E4DC 00C08825 */ move $s1, $a2 -/* 05F0E0 8005E4E0 E7B50018 */ swc1 $f21, 0x18($sp) -/* 05F0E4 8005E4E4 E7B4001C */ swc1 $f20, 0x1c($sp) -/* 05F0E8 8005E4E8 AFA5005C */ sw $a1, 0x5c($sp) -/* 05F0EC 8005E4EC 0C01729E */ jal func_8005CA78 -/* 05F0F0 8005E4F0 2484CE40 */ addiu $a0, %lo(D_800DCE40) # addiu $a0, $a0, -0x31c0 -/* 05F0F4 8005E4F4 8FA2006C */ lw $v0, 0x6c($sp) -/* 05F0F8 8005E4F8 8FA50068 */ lw $a1, 0x68($sp) -/* 05F0FC 8005E4FC 8C4E0000 */ lw $t6, ($v0) -/* 05F100 8005E500 2403FFEF */ li $v1, -17 -/* 05F104 8005E504 01C37824 */ and $t7, $t6, $v1 -/* 05F108 8005E508 AC4F0000 */ sw $t7, ($v0) -/* 05F10C 8005E50C 8CB80000 */ lw $t8, ($a1) -/* 05F110 8005E510 24010001 */ li $at, 1 -/* 05F114 8005E514 0303C824 */ and $t9, $t8, $v1 -/* 05F118 8005E518 ACB90000 */ sw $t9, ($a1) -/* 05F11C 8005E51C 822A003B */ lb $t2, 0x3b($s1) -/* 05F120 8005E520 00000000 */ nop -/* 05F124 8005E524 A7AA0056 */ sh $t2, 0x56($sp) -/* 05F128 8005E528 862B0018 */ lh $t3, 0x18($s1) -/* 05F12C 8005E52C 00000000 */ nop -/* 05F130 8005E530 A7AB0054 */ sh $t3, 0x54($sp) -/* 05F134 8005E534 860C016A */ lh $t4, 0x16a($s0) -/* 05F138 8005E538 00000000 */ nop -/* 05F13C 8005E53C A7AC0052 */ sh $t4, 0x52($sp) -/* 05F140 8005E540 820D01D8 */ lb $t5, 0x1d8($s0) -/* 05F144 8005E544 00000000 */ nop -/* 05F148 8005E548 15A10008 */ bne $t5, $at, .L8005E56C -/* 05F14C 8005E54C 8FA90070 */ lw $t1, 0x70($sp) -/* 05F150 8005E550 0C008500 */ jal func_80021400 -/* 05F154 8005E554 24040082 */ li $a0, 130 -/* 05F158 8005E558 820E01D8 */ lb $t6, 0x1d8($s0) -/* 05F15C 8005E55C 8FA50068 */ lw $a1, 0x68($sp) -/* 05F160 8005E560 25CF0001 */ addiu $t7, $t6, 1 -/* 05F164 8005E564 A20F01D8 */ sb $t7, 0x1d8($s0) -/* 05F168 8005E568 8FA90070 */ lw $t1, 0x70($sp) -.L8005E56C: -/* 05F16C 8005E56C 24040064 */ li $a0, 100 -/* 05F170 8005E570 8D230000 */ lw $v1, ($t1) -/* 05F174 8005E574 00000000 */ nop -/* 05F178 8005E578 14640002 */ bne $v1, $a0, .L8005E584 -/* 05F17C 8005E57C 3C018012 */ lui $at, %hi(D_8011D5F0) # $at, 0x8012 -/* 05F180 8005E580 A020D5F0 */ sb $zero, %lo(D_8011D5F0)($at) -.L8005E584: -/* 05F184 8005E584 86180000 */ lh $t8, ($s0) -/* 05F188 8005E588 2408FFFF */ li $t0, -1 -/* 05F18C 8005E58C 1518001E */ bne $t0, $t8, .L8005E608 -/* 05F190 8005E590 00000000 */ nop -/* 05F194 8005E594 8D220000 */ lw $v0, ($t1) -/* 05F198 8005E598 00000000 */ nop -/* 05F19C 8005E59C 1082001A */ beq $a0, $v0, .L8005E608 -/* 05F1A0 8005E5A0 2459FFE2 */ addiu $t9, $v0, -0x1e -/* 05F1A4 8005E5A4 07210016 */ bgez $t9, .L8005E600 -/* 05F1A8 8005E5A8 AD390000 */ sw $t9, ($t1) -/* 05F1AC 8005E5AC 3C0B8012 */ lui $t3, %hi(D_8011D5F1) # $t3, 0x8012 -/* 05F1B0 8005E5B0 816BD5F1 */ lb $t3, %lo(D_8011D5F1)($t3) -/* 05F1B4 8005E5B4 00002025 */ move $a0, $zero -/* 05F1B8 8005E5B8 15600009 */ bnez $t3, .L8005E5E0 -/* 05F1BC 8005E5BC 240D0001 */ li $t5, 1 -/* 05F1C0 8005E5C0 0C0172C1 */ jal func_8005CB04 -/* 05F1C4 8005E5C4 AFA30040 */ sw $v1, 0x40($sp) -/* 05F1C8 8005E5C8 8FA30040 */ lw $v1, 0x40($sp) -/* 05F1CC 8005E5CC 8FA50068 */ lw $a1, 0x68($sp) -/* 05F1D0 8005E5D0 8FA90070 */ lw $t1, 0x70($sp) -/* 05F1D4 8005E5D4 240C0005 */ li $t4, 5 -/* 05F1D8 8005E5D8 A20C01D3 */ sb $t4, 0x1d3($s0) -/* 05F1DC 8005E5DC 240D0001 */ li $t5, 1 -.L8005E5E0: -/* 05F1E0 8005E5E0 3C018012 */ lui $at, %hi(D_8011D5F1) # $at, 0x8012 -/* 05F1E4 8005E5E4 A02DD5F1 */ sb $t5, %lo(D_8011D5F1)($at) -/* 05F1E8 8005E5E8 AD200000 */ sw $zero, ($t1) -/* 05F1EC 8005E5EC 8CAE0000 */ lw $t6, ($a1) -/* 05F1F0 8005E5F0 00000000 */ nop -/* 05F1F4 8005E5F4 35CF8000 */ ori $t7, $t6, 0x8000 -/* 05F1F8 8005E5F8 10000003 */ b .L8005E608 -/* 05F1FC 8005E5FC ACAF0000 */ sw $t7, ($a1) -.L8005E600: -/* 05F200 8005E600 3C018012 */ lui $at, %hi(D_8011D5F1) # $at, 0x8012 -/* 05F204 8005E604 A020D5F1 */ sb $zero, %lo(D_8011D5F1)($at) -.L8005E608: -/* 05F208 8005E608 8FA40058 */ lw $a0, 0x58($sp) -/* 05F20C 8005E60C 8FA5005C */ lw $a1, 0x5c($sp) -/* 05F210 8005E610 02203025 */ move $a2, $s1 -/* 05F214 8005E614 02003825 */ move $a3, $s0 -/* 05F218 8005E618 0C013DFD */ jal func_8004F7F4 -/* 05F21C 8005E61C AFA30040 */ sw $v1, 0x40($sp) -/* 05F220 8005E620 8FA30040 */ lw $v1, 0x40($sp) -/* 05F224 8005E624 8FA90070 */ lw $t1, 0x70($sp) -/* 05F228 8005E628 44808000 */ mtc1 $zero, $f16 -/* 05F22C 8005E62C AD230000 */ sw $v1, ($t1) -/* 05F230 8005E630 E6100030 */ swc1 $f16, 0x30($s0) -/* 05F234 8005E634 87B80052 */ lh $t8, 0x52($sp) -/* 05F238 8005E638 2408FFFF */ li $t0, -1 -/* 05F23C 8005E63C A618016A */ sh $t8, 0x16a($s0) -/* 05F240 8005E640 87B90056 */ lh $t9, 0x56($sp) -/* 05F244 8005E644 00000000 */ nop -/* 05F248 8005E648 A239003B */ sb $t9, 0x3b($s1) -/* 05F24C 8005E64C 87AA0054 */ lh $t2, 0x54($sp) -/* 05F250 8005E650 00000000 */ nop -/* 05F254 8005E654 A62A0018 */ sh $t2, 0x18($s1) -/* 05F258 8005E658 820B0187 */ lb $t3, 0x187($s0) -/* 05F25C 8005E65C 00000000 */ nop -/* 05F260 8005E660 11600023 */ beqz $t3, .L8005E6F0 -/* 05F264 8005E664 00000000 */ nop -/* 05F268 8005E668 8222003B */ lb $v0, 0x3b($s1) -/* 05F26C 8005E66C 24010002 */ li $at, 2 -/* 05F270 8005E670 1041001F */ beq $v0, $at, .L8005E6F0 -/* 05F274 8005E674 240C0002 */ li $t4, 2 -/* 05F278 8005E678 A20201CD */ sb $v0, 0x1cd($s0) -/* 05F27C 8005E67C C6240020 */ lwc1 $f4, 0x20($s1) -/* 05F280 8005E680 3C01401E */ li $at, 0x401E0000 # 2.468750 -/* 05F284 8005E684 44814800 */ mtc1 $at, $f9 -/* 05F288 8005E688 44804000 */ mtc1 $zero, $f8 -/* 05F28C 8005E68C 460021A1 */ cvt.d.s $f6, $f4 -/* 05F290 8005E690 46283280 */ add.d $f10, $f6, $f8 -/* 05F294 8005E694 A22C003B */ sb $t4, 0x3b($s1) -/* 05F298 8005E698 462054A0 */ cvt.s.d $f18, $f10 -/* 05F29C 8005E69C 24040001 */ li $a0, 1 -/* 05F2A0 8005E6A0 0C0172C1 */ jal func_8005CB04 -/* 05F2A4 8005E6A4 E6320020 */ swc1 $f18, 0x20($s1) -/* 05F2A8 8005E6A8 24040011 */ li $a0, 17 -/* 05F2AC 8005E6AC 0C000741 */ jal play_sound_global -/* 05F2B0 8005E6B0 00002825 */ move $a1, $zero -/* 05F2B4 8005E6B4 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 05F2B8 8005E6B8 44816000 */ mtc1 $at, $f12 -/* 05F2BC 8005E6BC 0C01A7CA */ jal func_80069F28 -/* 05F2C0 8005E6C0 00000000 */ nop -/* 05F2C4 8005E6C4 3C01800E */ lui $at, %hi(D_800E6AA0 + 4) # $at, 0x800e -/* 05F2C8 8005E6C8 C604002C */ lwc1 $f4, 0x2c($s0) -/* 05F2CC 8005E6CC C4296AA0 */ lwc1 $f9, %lo(D_800E6AA0)($at) -/* 05F2D0 8005E6D0 C4286AA4 */ lwc1 $f8, %lo(D_800E6AA0 + 4)($at) -/* 05F2D4 8005E6D4 460021A1 */ cvt.d.s $f6, $f4 -/* 05F2D8 8005E6D8 46283282 */ mul.d $f10, $f6, $f8 -/* 05F2DC 8005E6DC 44808000 */ mtc1 $zero, $f16 -/* 05F2E0 8005E6E0 2408FFFF */ li $t0, -1 -/* 05F2E4 8005E6E4 E610000C */ swc1 $f16, 0xc($s0) -/* 05F2E8 8005E6E8 462054A0 */ cvt.s.d $f18, $f10 -/* 05F2EC 8005E6EC E612002C */ swc1 $f18, 0x2c($s0) -.L8005E6F0: -/* 05F2F0 8005E6F0 8E0D0148 */ lw $t5, 0x148($s0) -/* 05F2F4 8005E6F4 A2000187 */ sb $zero, 0x187($s0) -/* 05F2F8 8005E6F8 11A00010 */ beqz $t5, .L8005E73C -/* 05F2FC 8005E6FC 00000000 */ nop -/* 05F300 8005E700 C620001C */ lwc1 $f0, 0x1c($s1) -/* 05F304 8005E704 C6220024 */ lwc1 $f2, 0x24($s1) -/* 05F308 8005E708 46000502 */ mul.s $f20, $f0, $f0 -/* 05F30C 8005E70C 00000000 */ nop -/* 05F310 8005E710 46021382 */ mul.s $f14, $f2, $f2 -/* 05F314 8005E714 00000000 */ nop -/* 05F318 8005E718 4614A102 */ mul.s $f4, $f20, $f20 -/* 05F31C 8005E71C 00000000 */ nop -/* 05F320 8005E720 460E7182 */ mul.s $f6, $f14, $f14 -/* 05F324 8005E724 0C0326B4 */ jal sqrtf -/* 05F328 8005E728 46062300 */ add.s $f12, $f4, $f6 -/* 05F32C 8005E72C 46000207 */ neg.s $f8, $f0 -/* 05F330 8005E730 44808000 */ mtc1 $zero, $f16 -/* 05F334 8005E734 E608002C */ swc1 $f8, 0x2c($s0) -/* 05F338 8005E738 2408FFFF */ li $t0, -1 -.L8005E73C: -/* 05F33C 8005E73C 8E2E0068 */ lw $t6, 0x68($s1) -/* 05F340 8005E740 8238003B */ lb $t8, 0x3b($s1) -/* 05F344 8005E744 8DC20000 */ lw $v0, ($t6) -/* 05F348 8005E748 0018C8C0 */ sll $t9, $t8, 3 -/* 05F34C 8005E74C 8C430000 */ lw $v1, ($v0) -/* 05F350 8005E750 240E0001 */ li $t6, 1 -/* 05F354 8005E754 8C6F0044 */ lw $t7, 0x44($v1) -/* 05F358 8005E758 00000000 */ nop -/* 05F35C 8005E75C 01F95021 */ addu $t2, $t7, $t9 -/* 05F360 8005E760 8D4B0004 */ lw $t3, 4($t2) -/* 05F364 8005E764 A22E003B */ sb $t6, 0x3b($s1) -/* 05F368 8005E768 C7B2005C */ lwc1 $f18, 0x5c($sp) -/* 05F36C 8005E76C 000B6100 */ sll $t4, $t3, 4 -/* 05F370 8005E770 258DFFEF */ addiu $t5, $t4, -0x11 -/* 05F374 8005E774 448D5000 */ mtc1 $t5, $f10 -/* 05F378 8005E778 C604000C */ lwc1 $f4, 0xc($s0) -/* 05F37C 8005E77C 460090A1 */ cvt.d.s $f2, $f18 -/* 05F380 8005E780 46221200 */ add.d $f8, $f2, $f2 -/* 05F384 8005E784 46805520 */ cvt.s.w $f20, $f10 -/* 05F388 8005E788 460021A1 */ cvt.d.s $f6, $f4 -/* 05F38C 8005E78C 46283280 */ add.d $f10, $f6, $f8 -/* 05F390 8005E790 462054A0 */ cvt.s.d $f18, $f10 -/* 05F394 8005E794 E612000C */ swc1 $f18, 0xc($s0) -/* 05F398 8005E798 C600000C */ lwc1 $f0, 0xc($s0) -/* 05F39C 8005E79C 00000000 */ nop -/* 05F3A0 8005E7A0 4610003C */ c.lt.s $f0, $f16 -/* 05F3A4 8005E7A4 00000000 */ nop -/* 05F3A8 8005E7A8 4500000A */ bc1f .L8005E7D4 -/* 05F3AC 8005E7AC 00000000 */ nop -.L8005E7B0: -/* 05F3B0 8005E7B0 46140100 */ add.s $f4, $f0, $f20 -/* 05F3B4 8005E7B4 E604000C */ swc1 $f4, 0xc($s0) -/* 05F3B8 8005E7B8 A4480010 */ sh $t0, 0x10($v0) -/* 05F3BC 8005E7BC C600000C */ lwc1 $f0, 0xc($s0) -/* 05F3C0 8005E7C0 00000000 */ nop -/* 05F3C4 8005E7C4 4610003C */ c.lt.s $f0, $f16 -/* 05F3C8 8005E7C8 00000000 */ nop -/* 05F3CC 8005E7CC 4501FFF8 */ bc1t .L8005E7B0 -/* 05F3D0 8005E7D0 00000000 */ nop -.L8005E7D4: -/* 05F3D4 8005E7D4 4600A03C */ c.lt.s $f20, $f0 -/* 05F3D8 8005E7D8 00000000 */ nop -/* 05F3DC 8005E7DC 4500000A */ bc1f .L8005E808 -/* 05F3E0 8005E7E0 00000000 */ nop -.L8005E7E4: -/* 05F3E4 8005E7E4 46140181 */ sub.s $f6, $f0, $f20 -/* 05F3E8 8005E7E8 E606000C */ swc1 $f6, 0xc($s0) -/* 05F3EC 8005E7EC A4480010 */ sh $t0, 0x10($v0) -/* 05F3F0 8005E7F0 C600000C */ lwc1 $f0, 0xc($s0) -/* 05F3F4 8005E7F4 00000000 */ nop -/* 05F3F8 8005E7F8 4600A03C */ c.lt.s $f20, $f0 -/* 05F3FC 8005E7FC 00000000 */ nop -/* 05F400 8005E800 4501FFF8 */ bc1t .L8005E7E4 -/* 05F404 8005E804 00000000 */ nop -.L8005E808: -/* 05F408 8005E808 84580010 */ lh $t8, 0x10($v0) -/* 05F40C 8005E80C 00000000 */ nop -/* 05F410 8005E810 15180009 */ bne $t0, $t8, .L8005E838 -/* 05F414 8005E814 00000000 */ nop -/* 05F418 8005E818 822F003B */ lb $t7, 0x3b($s1) -/* 05F41C 8005E81C 24010002 */ li $at, 2 -/* 05F420 8005E820 15E10005 */ bne $t7, $at, .L8005E838 -/* 05F424 8005E824 24190001 */ li $t9, 1 -/* 05F428 8005E828 A239003B */ sb $t9, 0x3b($s1) -/* 05F42C 8005E82C E610000C */ swc1 $f16, 0xc($s0) -/* 05F430 8005E830 C600000C */ lwc1 $f0, 0xc($s0) -/* 05F434 8005E834 00000000 */ nop -.L8005E838: -/* 05F438 8005E838 444AF800 */ cfc1 $t2, $31 -/* 05F43C 8005E83C 00000000 */ nop -/* 05F440 8005E840 35410003 */ ori $at, $t2, 3 -/* 05F444 8005E844 38210002 */ xori $at, $at, 2 -/* 05F448 8005E848 44C1F800 */ ctc1 $at, $31 -/* 05F44C 8005E84C 00000000 */ nop -/* 05F450 8005E850 46000224 */ cvt.w.s $f8, $f0 -/* 05F454 8005E854 440B4000 */ mfc1 $t3, $f8 -/* 05F458 8005E858 44CAF800 */ ctc1 $t2, $31 -/* 05F45C 8005E85C A62B0018 */ sh $t3, 0x18($s1) -/* 05F460 8005E860 860C0000 */ lh $t4, ($s0) -/* 05F464 8005E864 00000000 */ nop -/* 05F468 8005E868 150C000F */ bne $t0, $t4, .L8005E8A8 -/* 05F46C 8005E86C 00000000 */ nop -/* 05F470 8005E870 0C008D5A */ jal func_80023568 -/* 05F474 8005E874 00000000 */ nop -/* 05F478 8005E878 44808000 */ mtc1 $zero, $f16 -/* 05F47C 8005E87C 1040000A */ beqz $v0, .L8005E8A8 -/* 05F480 8005E880 24010006 */ li $at, 6 -/* 05F484 8005E884 14410002 */ bne $v0, $at, .L8005E890 -/* 05F488 8005E888 24070110 */ li $a3, 272 -/* 05F48C 8005E88C 2407012A */ li $a3, 298 -.L8005E890: -/* 05F490 8005E890 44068000 */ mfc1 $a2, $f16 -/* 05F494 8005E894 240D0245 */ li $t5, 581 -/* 05F498 8005E898 AFAD0010 */ sw $t5, 0x10($sp) -/* 05F49C 8005E89C 02202025 */ move $a0, $s1 -/* 05F4A0 8005E8A0 0C017881 */ jal func_8005E204 -/* 05F4A4 8005E8A4 02002825 */ move $a1, $s0 -.L8005E8A8: -/* 05F4A8 8005E8A8 AE200074 */ sw $zero, 0x74($s1) -/* 05F4AC 8005E8AC 8FA50058 */ lw $a1, 0x58($sp) -/* 05F4B0 8005E8B0 0C02BF0F */ jal func_800AFC3C -/* 05F4B4 8005E8B4 02202025 */ move $a0, $s1 -/* 05F4B8 8005E8B8 02202025 */ move $a0, $s1 -/* 05F4BC 8005E8BC 02002825 */ move $a1, $s0 -/* 05F4C0 8005E8C0 0C017412 */ jal func_8005D048 -/* 05F4C4 8005E8C4 24060028 */ li $a2, 40 -/* 05F4C8 8005E8C8 8222003B */ lb $v0, 0x3b($s1) -/* 05F4CC 8005E8CC 24010001 */ li $at, 1 -/* 05F4D0 8005E8D0 10410006 */ beq $v0, $at, .L8005E8EC -/* 05F4D4 8005E8D4 00002025 */ move $a0, $zero -/* 05F4D8 8005E8D8 24010002 */ li $at, 2 -/* 05F4DC 8005E8DC 10410005 */ beq $v0, $at, .L8005E8F4 -/* 05F4E0 8005E8E0 24050100 */ li $a1, 256 -/* 05F4E4 8005E8E4 10000003 */ b .L8005E8F4 -/* 05F4E8 8005E8E8 24051500 */ li $a1, 5376 -.L8005E8EC: -/* 05F4EC 8005E8EC 10000001 */ b .L8005E8F4 -/* 05F4F0 8005E8F0 24052500 */ li $a1, 9472 -.L8005E8F4: -/* 05F4F4 8005E8F4 0C006EB2 */ jal get_racer_object -/* 05F4F8 8005E8F8 AFA50038 */ sw $a1, 0x38($sp) -/* 05F4FC 8005E8FC AFA20030 */ sw $v0, 0x30($sp) -/* 05F500 8005E900 C632000C */ lwc1 $f18, 0xc($s1) -/* 05F504 8005E904 C44A000C */ lwc1 $f10, 0xc($v0) -/* 05F508 8005E908 C6260014 */ lwc1 $f6, 0x14($s1) -/* 05F50C 8005E90C 46125501 */ sub.s $f20, $f10, $f18 -/* 05F510 8005E910 C4440014 */ lwc1 $f4, 0x14($v0) -/* 05F514 8005E914 4614A202 */ mul.s $f8, $f20, $f20 -/* 05F518 8005E918 46062381 */ sub.s $f14, $f4, $f6 -/* 05F51C 8005E91C E7AE0048 */ swc1 $f14, 0x48($sp) -/* 05F520 8005E920 460E7282 */ mul.s $f10, $f14, $f14 -/* 05F524 8005E924 0C0326B4 */ jal sqrtf -/* 05F528 8005E928 460A4300 */ add.s $f12, $f8, $f10 -/* 05F52C 8005E92C 3C01800E */ lui $at, %hi(D_800E6AA8 + 4) # $at, 0x800e -/* 05F530 8005E930 C4256AA8 */ lwc1 $f5, %lo(D_800E6AA8)($at) -/* 05F534 8005E934 C4246AAC */ lwc1 $f4, %lo(D_800E6AA8 + 4)($at) -/* 05F538 8005E938 460004A1 */ cvt.d.s $f18, $f0 -/* 05F53C 8005E93C 4624903C */ c.lt.d $f18, $f4 -/* 05F540 8005E940 8FA50038 */ lw $a1, 0x38($sp) -/* 05F544 8005E944 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 05F548 8005E948 4500001E */ bc1f .L8005E9C4 -/* 05F54C 8005E94C 00000000 */ nop -/* 05F550 8005E950 4600A306 */ mov.s $f12, $f20 -/* 05F554 8005E954 0C01C1D4 */ jal arctan2_f -/* 05F558 8005E958 AFA50038 */ sw $a1, 0x38($sp) -/* 05F55C 8005E95C 862E0000 */ lh $t6, ($s1) -/* 05F560 8005E960 34018000 */ li $at, 32768 -/* 05F564 8005E964 31D8FFFF */ andi $t8, $t6, 0xffff -/* 05F568 8005E968 00581823 */ subu $v1, $v0, $t8 -/* 05F56C 8005E96C 00611821 */ addu $v1, $v1, $at -/* 05F570 8005E970 8FA50038 */ lw $a1, 0x38($sp) -/* 05F574 8005E974 34018001 */ li $at, 32769 -/* 05F578 8005E978 0061082A */ slt $at, $v1, $at -/* 05F57C 8005E97C 14200004 */ bnez $at, .L8005E990 -/* 05F580 8005E980 00051023 */ negu $v0, $a1 -/* 05F584 8005E984 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 05F588 8005E988 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 05F58C 8005E98C 00611821 */ addu $v1, $v1, $at -.L8005E990: -/* 05F590 8005E990 28618000 */ slti $at, $v1, -0x8000 -/* 05F594 8005E994 10200002 */ beqz $at, .L8005E9A0 -/* 05F598 8005E998 3401FFFF */ li $at, 65535 -/* 05F59C 8005E99C 00611821 */ addu $v1, $v1, $at -.L8005E9A0: -/* 05F5A0 8005E9A0 00A3082A */ slt $at, $a1, $v1 -/* 05F5A4 8005E9A4 10200003 */ beqz $at, .L8005E9B4 -/* 05F5A8 8005E9A8 0062082A */ slt $at, $v1, $v0 -/* 05F5AC 8005E9AC 00A01825 */ move $v1, $a1 -/* 05F5B0 8005E9B0 0062082A */ slt $at, $v1, $v0 -.L8005E9B4: -/* 05F5B4 8005E9B4 10200002 */ beqz $at, .L8005E9C0 -/* 05F5B8 8005E9B8 00000000 */ nop -/* 05F5BC 8005E9BC 00401825 */ move $v1, $v0 -.L8005E9C0: -/* 05F5C0 8005E9C0 A603016C */ sh $v1, 0x16c($s0) -.L8005E9C4: -/* 05F5C4 8005E9C4 822F003B */ lb $t7, 0x3b($s1) -/* 05F5C8 8005E9C8 24010001 */ li $at, 1 -/* 05F5CC 8005E9CC 15E1000B */ bne $t7, $at, .L8005E9FC -/* 05F5D0 8005E9D0 3C058012 */ lui $a1, %hi(D_8011D5F0) # $a1, 0x8012 -/* 05F5D4 8005E9D4 821901E7 */ lb $t9, 0x1e7($s0) -/* 05F5D8 8005E9D8 00000000 */ nop -/* 05F5DC 8005E9DC 332A001F */ andi $t2, $t9, 0x1f -/* 05F5E0 8005E9E0 2941000A */ slti $at, $t2, 0xa -/* 05F5E4 8005E9E4 10200006 */ beqz $at, .L8005EA00 -/* 05F5E8 8005E9E8 8FA30030 */ lw $v1, 0x30($sp) -/* 05F5EC 8005E9EC 860B016C */ lh $t3, 0x16c($s0) -/* 05F5F0 8005E9F0 00000000 */ nop -/* 05F5F4 8005E9F4 000B6043 */ sra $t4, $t3, 1 -/* 05F5F8 8005E9F8 A60C016C */ sh $t4, 0x16c($s0) -.L8005E9FC: -/* 05F5FC 8005E9FC 8FA30030 */ lw $v1, 0x30($sp) -.L8005EA00: -/* 05F600 8005EA00 24A5D5F0 */ addiu $a1, %lo(D_8011D5F0) # addiu $a1, $a1, -0x2a10 -/* 05F604 8005EA04 8C62004C */ lw $v0, 0x4c($v1) -/* 05F608 8005EA08 8C700064 */ lw $s0, 0x64($v1) -/* 05F60C 8005EA0C 8C4D0000 */ lw $t5, ($v0) -/* 05F610 8005EA10 00000000 */ nop -/* 05F614 8005EA14 162D000B */ bne $s1, $t5, .L8005EA44 -/* 05F618 8005EA18 00000000 */ nop -/* 05F61C 8005EA1C 844E0014 */ lh $t6, 0x14($v0) -/* 05F620 8005EA20 00000000 */ nop -/* 05F624 8005EA24 31D80008 */ andi $t8, $t6, 8 -/* 05F628 8005EA28 13000006 */ beqz $t8, .L8005EA44 -/* 05F62C 8005EA2C 00000000 */ nop -/* 05F630 8005EA30 822F003B */ lb $t7, 0x3b($s1) -/* 05F634 8005EA34 24010001 */ li $at, 1 -/* 05F638 8005EA38 15E10002 */ bne $t7, $at, .L8005EA44 -/* 05F63C 8005EA3C 24190004 */ li $t9, 4 -/* 05F640 8005EA40 A2190187 */ sb $t9, 0x187($s0) -.L8005EA44: -/* 05F644 8005EA44 820A01D8 */ lb $t2, 0x1d8($s0) -/* 05F648 8005EA48 00000000 */ nop -/* 05F64C 8005EA4C 11400008 */ beqz $t2, .L8005EA70 -/* 05F650 8005EA50 8FBF002C */ lw $ra, 0x2c($sp) -/* 05F654 8005EA54 80AB0000 */ lb $t3, ($a1) -/* 05F658 8005EA58 240C0001 */ li $t4, 1 -/* 05F65C 8005EA5C 15600003 */ bnez $t3, .L8005EA6C -/* 05F660 8005EA60 02002025 */ move $a0, $s0 -/* 05F664 8005EA64 0C0172DA */ jal func_8005CB68 -/* 05F668 8005EA68 A0AC0000 */ sb $t4, ($a1) -.L8005EA6C: -/* 05F66C 8005EA6C 8FBF002C */ lw $ra, 0x2c($sp) -.L8005EA70: -/* 05F670 8005EA70 C7B50018 */ lwc1 $f21, 0x18($sp) -/* 05F674 8005EA74 C7B4001C */ lwc1 $f20, 0x1c($sp) -/* 05F678 8005EA78 8FB00024 */ lw $s0, 0x24($sp) -/* 05F67C 8005EA7C 8FB10028 */ lw $s1, 0x28($sp) -/* 05F680 8005EA80 03E00008 */ jr $ra -/* 05F684 8005EA84 27BD0058 */ addiu $sp, $sp, 0x58 - -/* 05F688 8005EA88 00000000 */ nop -/* 05F68C 8005EA8C 00000000 */ nop - diff --git a/asm/non_matchings/unknown_05F690/func_8005EA90.s b/asm/non_matchings/unknown_05F690/func_8005EA90.s deleted file mode 100644 index fbdfa6b5..00000000 --- a/asm/non_matchings/unknown_05F690/func_8005EA90.s +++ /dev/null @@ -1,610 +0,0 @@ -.late_rodata -glabel D_800E6AB0 -.double 0.3 -glabel D_800E6AB8 -.double -0.3 -glabel D_800E6AC0 -.double 0.4 -glabel D_800E6AC8 -.double 0.45 -glabel jpt_800E6AD0 -.word L8005EE9C, L8005EEC0, L8005EEF8, L8005EF14, L8005EF6C, L8005EF98 -glabel D_800E6AE8 -.double -0.1 -glabel D_800E6AF0 -.double 0.1 - -.text -glabel func_8005EA90 -/* 05F690 8005EA90 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 05F694 8005EA94 AFA40040 */ sw $a0, 0x40($sp) -/* 05F698 8005EA98 AFBF0024 */ sw $ra, 0x24($sp) -/* 05F69C 8005EA9C AFB10020 */ sw $s1, 0x20($sp) -/* 05F6A0 8005EAA0 AFB0001C */ sw $s0, 0x1c($sp) -/* 05F6A4 8005EAA4 3C04800E */ lui $a0, %hi(D_800DCE60) # $a0, 0x800e -/* 05F6A8 8005EAA8 00E08025 */ move $s0, $a3 -/* 05F6AC 8005EAAC 00C08825 */ move $s1, $a2 -/* 05F6B0 8005EAB0 AFA50044 */ sw $a1, 0x44($sp) -/* 05F6B4 8005EAB4 0C01729E */ jal func_8005CA78 -/* 05F6B8 8005EAB8 2484CE60 */ addiu $a0, %lo(D_800DCE60) # addiu $a0, $a0, -0x31a0 -/* 05F6BC 8005EABC A20001EC */ sb $zero, 0x1ec($s0) -/* 05F6C0 8005EAC0 822E003B */ lb $t6, 0x3b($s1) -/* 05F6C4 8005EAC4 3C01800E */ lui $at, %hi(D_800E6AB0 + 4) # $at, 0x800e -/* 05F6C8 8005EAC8 A7AE003E */ sh $t6, 0x3e($sp) -/* 05F6CC 8005EACC 862F0018 */ lh $t7, 0x18($s1) -/* 05F6D0 8005EAD0 C4276AB0 */ lwc1 $f7, %lo(D_800E6AB0)($at) -/* 05F6D4 8005EAD4 A7AF003C */ sh $t7, 0x3c($sp) -/* 05F6D8 8005EAD8 8618016A */ lh $t8, 0x16a($s0) -/* 05F6DC 8005EADC C4266AB4 */ lwc1 $f6, %lo(D_800E6AB0 + 4)($at) -/* 05F6E0 8005EAE0 A7B8003A */ sh $t8, 0x3a($sp) -/* 05F6E4 8005EAE4 C604002C */ lwc1 $f4, 0x2c($s0) -/* 05F6E8 8005EAE8 00000000 */ nop -/* 05F6EC 8005EAEC 46002021 */ cvt.d.s $f0, $f4 -/* 05F6F0 8005EAF0 4626003C */ c.lt.d $f0, $f6 -/* 05F6F4 8005EAF4 00000000 */ nop -/* 05F6F8 8005EAF8 45000009 */ bc1f .L8005EB20 -/* 05F6FC 8005EAFC 3C01800E */ lui $at, %hi(D_800E6AB8 + 4) # $at, 0x800e -/* 05F700 8005EB00 C4296AB8 */ lwc1 $f9, %lo(D_800E6AB8)($at) -/* 05F704 8005EB04 C4286ABC */ lwc1 $f8, %lo(D_800E6AB8 + 4)($at) -/* 05F708 8005EB08 8FB90054 */ lw $t9, 0x54($sp) -/* 05F70C 8005EB0C 4620403C */ c.lt.d $f8, $f0 -/* 05F710 8005EB10 00000000 */ nop -/* 05F714 8005EB14 45000002 */ bc1f .L8005EB20 -/* 05F718 8005EB18 00000000 */ nop -/* 05F71C 8005EB1C AF200000 */ sw $zero, ($t9) -.L8005EB20: -/* 05F720 8005EB20 820A01D8 */ lb $t2, 0x1d8($s0) -/* 05F724 8005EB24 24010001 */ li $at, 1 -/* 05F728 8005EB28 1541000C */ bne $t2, $at, .L8005EB5C -/* 05F72C 8005EB2C 8FA30058 */ lw $v1, 0x58($sp) -/* 05F730 8005EB30 0C008D5A */ jal func_80023568 -/* 05F734 8005EB34 00000000 */ nop -/* 05F738 8005EB38 10400008 */ beqz $v0, .L8005EB5C -/* 05F73C 8005EB3C 8FA30058 */ lw $v1, 0x58($sp) -/* 05F740 8005EB40 0C008500 */ jal func_80021400 -/* 05F744 8005EB44 24040082 */ li $a0, 130 -/* 05F748 8005EB48 820B01D8 */ lb $t3, 0x1d8($s0) -/* 05F74C 8005EB4C 00000000 */ nop -/* 05F750 8005EB50 256C0001 */ addiu $t4, $t3, 1 -/* 05F754 8005EB54 A20C01D8 */ sb $t4, 0x1d8($s0) -/* 05F758 8005EB58 8FA30058 */ lw $v1, 0x58($sp) -.L8005EB5C: -/* 05F75C 8005EB5C 24040064 */ li $a0, 100 -/* 05F760 8005EB60 8C690000 */ lw $t1, ($v1) -/* 05F764 8005EB64 00000000 */ nop -/* 05F768 8005EB68 15240002 */ bne $t1, $a0, .L8005EB74 -/* 05F76C 8005EB6C 3C018012 */ lui $at, %hi(D_8011D600) # $at, 0x8012 -/* 05F770 8005EB70 A020D600 */ sb $zero, %lo(D_8011D600)($at) -.L8005EB74: -/* 05F774 8005EB74 860D0000 */ lh $t5, ($s0) -/* 05F778 8005EB78 2408FFFF */ li $t0, -1 -/* 05F77C 8005EB7C 150D001E */ bne $t0, $t5, .L8005EBF8 -/* 05F780 8005EB80 A20001F5 */ sb $zero, 0x1f5($s0) -/* 05F784 8005EB84 8C620000 */ lw $v0, ($v1) -/* 05F788 8005EB88 00000000 */ nop -/* 05F78C 8005EB8C 1082001A */ beq $a0, $v0, .L8005EBF8 -/* 05F790 8005EB90 244EFFE2 */ addiu $t6, $v0, -0x1e -/* 05F794 8005EB94 05C10016 */ bgez $t6, .L8005EBF0 -/* 05F798 8005EB98 AC6E0000 */ sw $t6, ($v1) -/* 05F79C 8005EB9C 3C188012 */ lui $t8, %hi(D_8011D601) # $t8, 0x8012 -/* 05F7A0 8005EBA0 8318D601 */ lb $t8, %lo(D_8011D601)($t8) -/* 05F7A4 8005EBA4 00002025 */ move $a0, $zero -/* 05F7A8 8005EBA8 17000008 */ bnez $t8, .L8005EBCC -/* 05F7AC 8005EBAC 8FA20050 */ lw $v0, 0x50($sp) -/* 05F7B0 8005EBB0 0C0172C1 */ jal func_8005CB04 -/* 05F7B4 8005EBB4 AFA90028 */ sw $t1, 0x28($sp) -/* 05F7B8 8005EBB8 8FA30058 */ lw $v1, 0x58($sp) -/* 05F7BC 8005EBBC 8FA90028 */ lw $t1, 0x28($sp) -/* 05F7C0 8005EBC0 2419000A */ li $t9, 10 -/* 05F7C4 8005EBC4 A21901D3 */ sb $t9, 0x1d3($s0) -/* 05F7C8 8005EBC8 8FA20050 */ lw $v0, 0x50($sp) -.L8005EBCC: -/* 05F7CC 8005EBCC 240A0001 */ li $t2, 1 -/* 05F7D0 8005EBD0 3C018012 */ lui $at, %hi(D_8011D601) # $at, 0x8012 -/* 05F7D4 8005EBD4 A02AD601 */ sb $t2, %lo(D_8011D601)($at) -/* 05F7D8 8005EBD8 AC600000 */ sw $zero, ($v1) -/* 05F7DC 8005EBDC 8C4B0000 */ lw $t3, ($v0) -/* 05F7E0 8005EBE0 00000000 */ nop -/* 05F7E4 8005EBE4 356C8000 */ ori $t4, $t3, 0x8000 -/* 05F7E8 8005EBE8 10000003 */ b .L8005EBF8 -/* 05F7EC 8005EBEC AC4C0000 */ sw $t4, ($v0) -.L8005EBF0: -/* 05F7F0 8005EBF0 3C018012 */ lui $at, %hi(D_8011D601) # $at, 0x8012 -/* 05F7F4 8005EBF4 A020D601 */ sb $zero, %lo(D_8011D601)($at) -.L8005EBF8: -/* 05F7F8 8005EBF8 240D000C */ li $t5, 12 -/* 05F7FC 8005EBFC A20D01D6 */ sb $t5, 0x1d6($s0) -/* 05F800 8005EC00 8FA50044 */ lw $a1, 0x44($sp) -/* 05F804 8005EC04 8FA40040 */ lw $a0, 0x40($sp) -/* 05F808 8005EC08 AFA90028 */ sw $t1, 0x28($sp) -/* 05F80C 8005EC0C 02203025 */ move $a2, $s1 -/* 05F810 8005EC10 0C0125E5 */ jal func_80049794 -/* 05F814 8005EC14 02003825 */ move $a3, $s0 -/* 05F818 8005EC18 8FA30058 */ lw $v1, 0x58($sp) -/* 05F81C 8005EC1C 8FA90028 */ lw $t1, 0x28($sp) -/* 05F820 8005EC20 820E01D7 */ lb $t6, 0x1d7($s0) -/* 05F824 8005EC24 00000000 */ nop -/* 05F828 8005EC28 A20E01D6 */ sb $t6, 0x1d6($s0) -/* 05F82C 8005EC2C AC690000 */ sw $t1, ($v1) -/* 05F830 8005EC30 AE200074 */ sw $zero, 0x74($s1) -/* 05F834 8005EC34 87AF003A */ lh $t7, 0x3a($sp) -/* 05F838 8005EC38 00000000 */ nop -/* 05F83C 8005EC3C A60F016A */ sh $t7, 0x16a($s0) -/* 05F840 8005EC40 87B8003E */ lh $t8, 0x3e($sp) -/* 05F844 8005EC44 00000000 */ nop -/* 05F848 8005EC48 A238003B */ sb $t8, 0x3b($s1) -/* 05F84C 8005EC4C 87B9003C */ lh $t9, 0x3c($sp) -/* 05F850 8005EC50 00000000 */ nop -/* 05F854 8005EC54 A6390018 */ sh $t9, 0x18($s1) -/* 05F858 8005EC58 820A0187 */ lb $t2, 0x187($s0) -/* 05F85C 8005EC5C 00000000 */ nop -/* 05F860 8005EC60 11400027 */ beqz $t2, .L8005ED00 -/* 05F864 8005EC64 00000000 */ nop -/* 05F868 8005EC68 822B003B */ lb $t3, 0x3b($s1) -/* 05F86C 8005EC6C 24010005 */ li $at, 5 -/* 05F870 8005EC70 11610023 */ beq $t3, $at, .L8005ED00 -/* 05F874 8005EC74 00000000 */ nop -/* 05F878 8005EC78 0C0172C1 */ jal func_8005CB04 -/* 05F87C 8005EC7C 24040001 */ li $a0, 1 -/* 05F880 8005EC80 24040011 */ li $a0, 17 -/* 05F884 8005EC84 0C000741 */ jal play_sound_global -/* 05F888 8005EC88 00002825 */ move $a1, $zero -/* 05F88C 8005EC8C 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 05F890 8005EC90 44816000 */ mtc1 $at, $f12 -/* 05F894 8005EC94 0C01A7CA */ jal func_80069F28 -/* 05F898 8005EC98 00000000 */ nop -/* 05F89C 8005EC9C 3C01800E */ lui $at, %hi(D_800E6AC0 + 4) # $at, 0x800e -/* 05F8A0 8005ECA0 C62A001C */ lwc1 $f10, 0x1c($s1) -/* 05F8A4 8005ECA4 C4216AC0 */ lwc1 $f1, %lo(D_800E6AC0)($at) -/* 05F8A8 8005ECA8 C4206AC4 */ lwc1 $f0, %lo(D_800E6AC0 + 4)($at) -/* 05F8AC 8005ECAC 46005121 */ cvt.d.s $f4, $f10 -/* 05F8B0 8005ECB0 46202182 */ mul.d $f6, $f4, $f0 -/* 05F8B4 8005ECB4 C62A0024 */ lwc1 $f10, 0x24($s1) -/* 05F8B8 8005ECB8 44809000 */ mtc1 $zero, $f18 -/* 05F8BC 8005ECBC 46005121 */ cvt.d.s $f4, $f10 -/* 05F8C0 8005ECC0 240C0005 */ li $t4, 5 -/* 05F8C4 8005ECC4 46203220 */ cvt.s.d $f8, $f6 -/* 05F8C8 8005ECC8 A22C003B */ sb $t4, 0x3b($s1) -/* 05F8CC 8005ECCC 46202182 */ mul.d $f6, $f4, $f0 -/* 05F8D0 8005ECD0 E628001C */ swc1 $f8, 0x1c($s1) -/* 05F8D4 8005ECD4 3C014010 */ li $at, 0x40100000 # 2.250000 -/* 05F8D8 8005ECD8 46203220 */ cvt.s.d $f8, $f6 -/* 05F8DC 8005ECDC 44803000 */ mtc1 $zero, $f6 -/* 05F8E0 8005ECE0 E6280024 */ swc1 $f8, 0x24($s1) -/* 05F8E4 8005ECE4 E612000C */ swc1 $f18, 0xc($s0) -/* 05F8E8 8005ECE8 C62A0020 */ lwc1 $f10, 0x20($s1) -/* 05F8EC 8005ECEC 44813800 */ mtc1 $at, $f7 -/* 05F8F0 8005ECF0 46005121 */ cvt.d.s $f4, $f10 -/* 05F8F4 8005ECF4 46262200 */ add.d $f8, $f4, $f6 -/* 05F8F8 8005ECF8 462042A0 */ cvt.s.d $f10, $f8 -/* 05F8FC 8005ECFC E62A0020 */ swc1 $f10, 0x20($s1) -.L8005ED00: -/* 05F900 8005ED00 8E0D0148 */ lw $t5, 0x148($s0) -/* 05F904 8005ED04 A2000187 */ sb $zero, 0x187($s0) -/* 05F908 8005ED08 11A00019 */ beqz $t5, .L8005ED70 -/* 05F90C 8005ED0C 00000000 */ nop -/* 05F910 8005ED10 C620001C */ lwc1 $f0, 0x1c($s1) -/* 05F914 8005ED14 C62E0024 */ lwc1 $f14, 0x24($s1) -/* 05F918 8005ED18 46000082 */ mul.s $f2, $f0, $f0 -/* 05F91C 8005ED1C 00000000 */ nop -/* 05F920 8005ED20 460E7402 */ mul.s $f16, $f14, $f14 -/* 05F924 8005ED24 00000000 */ nop -/* 05F928 8005ED28 46021102 */ mul.s $f4, $f2, $f2 -/* 05F92C 8005ED2C 00000000 */ nop -/* 05F930 8005ED30 46108182 */ mul.s $f6, $f16, $f16 -/* 05F934 8005ED34 0C0326B4 */ jal sqrtf -/* 05F938 8005ED38 46062300 */ add.s $f12, $f4, $f6 -/* 05F93C 8005ED3C 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 05F940 8005ED40 44814800 */ mtc1 $at, $f9 -/* 05F944 8005ED44 44804000 */ mtc1 $zero, $f8 -/* 05F948 8005ED48 46000087 */ neg.s $f2, $f0 -/* 05F94C 8005ED4C 460012A1 */ cvt.d.s $f10, $f2 -/* 05F950 8005ED50 462A403C */ c.lt.d $f8, $f10 -/* 05F954 8005ED54 44809000 */ mtc1 $zero, $f18 -/* 05F958 8005ED58 45000005 */ bc1f .L8005ED70 -/* 05F95C 8005ED5C E602002C */ swc1 $f2, 0x2c($s0) -/* 05F960 8005ED60 E612002C */ swc1 $f18, 0x2c($s0) -/* 05F964 8005ED64 E632001C */ swc1 $f18, 0x1c($s1) -/* 05F968 8005ED68 E6320020 */ swc1 $f18, 0x20($s1) -/* 05F96C 8005ED6C E6320024 */ swc1 $f18, 0x24($s1) -.L8005ED70: -/* 05F970 8005ED70 82040192 */ lb $a0, 0x192($s0) -/* 05F974 8005ED74 920501C8 */ lbu $a1, 0x1c8($s0) -/* 05F978 8005ED78 0C006E87 */ jal find_next_checkpoint_node -/* 05F97C 8005ED7C A7A00038 */ sh $zero, 0x38($sp) -/* 05F980 8005ED80 820E01CA */ lb $t6, 0x1ca($s0) -/* 05F984 8005ED84 87A60038 */ lh $a2, 0x38($sp) -/* 05F988 8005ED88 004E7821 */ addu $t7, $v0, $t6 -/* 05F98C 8005ED8C 81F80036 */ lb $t8, 0x36($t7) -/* 05F990 8005ED90 24090001 */ li $t1, 1 -/* 05F994 8005ED94 44809000 */ mtc1 $zero, $f18 -/* 05F998 8005ED98 15380004 */ bne $t1, $t8, .L8005EDAC -/* 05F99C 8005ED9C 2408FFFF */ li $t0, -1 -/* 05F9A0 8005EDA0 00093400 */ sll $a2, $t1, 0x10 -/* 05F9A4 8005EDA4 0006CC03 */ sra $t9, $a2, 0x10 -/* 05F9A8 8005EDA8 03203025 */ move $a2, $t9 -.L8005EDAC: -/* 05F9AC 8005EDAC 862A0002 */ lh $t2, 2($s1) -/* 05F9B0 8005EDB0 C7AE0044 */ lwc1 $f14, 0x44($sp) -/* 05F9B4 8005EDB4 000A5823 */ negu $t3, $t2 -/* 05F9B8 8005EDB8 A60B0162 */ sh $t3, 0x162($s0) -/* 05F9BC 8005EDBC 8E2C0068 */ lw $t4, 0x68($s1) -/* 05F9C0 8005EDC0 8223003B */ lb $v1, 0x3b($s1) -/* 05F9C4 8005EDC4 8D820000 */ lw $v0, ($t4) -/* 05F9C8 8005EDC8 000370C0 */ sll $t6, $v1, 3 -/* 05F9CC 8005EDCC 8C450000 */ lw $a1, ($v0) -/* 05F9D0 8005EDD0 C606002C */ lwc1 $f6, 0x2c($s0) -/* 05F9D4 8005EDD4 8CAD0044 */ lw $t5, 0x44($a1) -/* 05F9D8 8005EDD8 460E3202 */ mul.s $f8, $f6, $f14 -/* 05F9DC 8005EDDC 01AE7821 */ addu $t7, $t5, $t6 -/* 05F9E0 8005EDE0 8DF80004 */ lw $t8, 4($t7) -/* 05F9E4 8005EDE4 3C01800E */ lui $at, %hi(D_800E6AC8 + 4) # $at, 0x800e -/* 05F9E8 8005EDE8 0018C900 */ sll $t9, $t8, 4 -/* 05F9EC 8005EDEC 272AFFEF */ addiu $t2, $t9, -0x11 -/* 05F9F0 8005EDF0 448A2000 */ mtc1 $t2, $f4 -/* 05F9F4 8005EDF4 C4256AC8 */ lwc1 $f5, %lo(D_800E6AC8)($at) -/* 05F9F8 8005EDF8 468020A0 */ cvt.s.w $f2, $f4 -/* 05F9FC 8005EDFC C4246ACC */ lwc1 $f4, %lo(D_800E6AC8 + 4)($at) -/* 05FA00 8005EE00 44804800 */ mtc1 $zero, $f9 -/* 05FA04 8005EE04 460042A1 */ cvt.d.s $f10, $f8 -/* 05FA08 8005EE08 46245182 */ mul.d $f6, $f10, $f4 -/* 05FA0C 8005EE0C 44804000 */ mtc1 $zero, $f8 -/* 05FA10 8005EE10 46203320 */ cvt.s.d $f12, $f6 -/* 05FA14 8005EE14 46006021 */ cvt.d.s $f0, $f12 -/* 05FA18 8005EE18 4628003E */ c.le.d $f0, $f8 -/* 05FA1C 8005EE1C 00000000 */ nop -/* 05FA20 8005EE20 4500000B */ bc1f .L8005EE50 -/* 05FA24 8005EE24 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 05FA28 8005EE28 44815800 */ mtc1 $at, $f11 -/* 05FA2C 8005EE2C 44805000 */ mtc1 $zero, $f10 -/* 05FA30 8005EE30 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 05FA34 8005EE34 4620503C */ c.lt.d $f10, $f0 -/* 05FA38 8005EE38 00000000 */ nop -/* 05FA3C 8005EE3C 4500000E */ bc1f .L8005EE78 -/* 05FA40 8005EE40 00000000 */ nop -/* 05FA44 8005EE44 44816000 */ mtc1 $at, $f12 -/* 05FA48 8005EE48 1000000C */ b .L8005EE7C -/* 05FA4C 8005EE4C 2C610006 */ sltiu $at, $v1, 6 -.L8005EE50: -/* 05FA50 8005EE50 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05FA54 8005EE54 44812800 */ mtc1 $at, $f5 -/* 05FA58 8005EE58 44802000 */ mtc1 $zero, $f4 -/* 05FA5C 8005EE5C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05FA60 8005EE60 4624003C */ c.lt.d $f0, $f4 -/* 05FA64 8005EE64 00000000 */ nop -/* 05FA68 8005EE68 45000003 */ bc1f .L8005EE78 -/* 05FA6C 8005EE6C 00000000 */ nop -/* 05FA70 8005EE70 44816000 */ mtc1 $at, $f12 -/* 05FA74 8005EE74 00000000 */ nop -.L8005EE78: -/* 05FA78 8005EE78 2C610006 */ sltiu $at, $v1, 6 -.L8005EE7C: -/* 05FA7C 8005EE7C 1020004F */ beqz $at, .L8005EFBC -/* 05FA80 8005EE80 00035880 */ sll $t3, $v1, 2 -/* 05FA84 8005EE84 3C01800E */ lui $at, %hi(jpt_800E6AD0) # $at, 0x800e -/* 05FA88 8005EE88 002B0821 */ addu $at, $at, $t3 -/* 05FA8C 8005EE8C 8C2B6AD0 */ lw $t3, %lo(jpt_800E6AD0)($at) -/* 05FA90 8005EE90 00000000 */ nop -/* 05FA94 8005EE94 01600008 */ jr $t3 -/* 05FA98 8005EE98 00000000 */ nop -glabel L8005EE9C -/* 05FA9C 8005EE9C C606000C */ lwc1 $f6, 0xc($s0) -/* 05FAA0 8005EEA0 460072A1 */ cvt.d.s $f10, $f14 -/* 05FAA4 8005EEA4 46003221 */ cvt.d.s $f8, $f6 -/* 05FAA8 8005EEA8 462A4100 */ add.d $f4, $f8, $f10 -/* 05FAAC 8005EEAC A20001CD */ sb $zero, 0x1cd($s0) -/* 05FAB0 8005EEB0 462021A0 */ cvt.s.d $f6, $f4 -/* 05FAB4 8005EEB4 24040002 */ li $a0, 2 -/* 05FAB8 8005EEB8 10000041 */ b .L8005EFC0 -/* 05FABC 8005EEBC E606000C */ swc1 $f6, 0xc($s0) -glabel L8005EEC0 -/* 05FAC0 8005EEC0 920C01CD */ lbu $t4, 0x1cd($s0) -/* 05FAC4 8005EEC4 24040002 */ li $a0, 2 -/* 05FAC8 8005EEC8 148C0006 */ bne $a0, $t4, .L8005EEE4 -/* 05FACC 8005EECC 00000000 */ nop -/* 05FAD0 8005EED0 C608000C */ lwc1 $f8, 0xc($s0) -/* 05FAD4 8005EED4 00000000 */ nop -/* 05FAD8 8005EED8 460C4280 */ add.s $f10, $f8, $f12 -/* 05FADC 8005EEDC 10000038 */ b .L8005EFC0 -/* 05FAE0 8005EEE0 E60A000C */ swc1 $f10, 0xc($s0) -.L8005EEE4: -/* 05FAE4 8005EEE4 C604000C */ lwc1 $f4, 0xc($s0) -/* 05FAE8 8005EEE8 00000000 */ nop -/* 05FAEC 8005EEEC 460C2181 */ sub.s $f6, $f4, $f12 -/* 05FAF0 8005EEF0 10000033 */ b .L8005EFC0 -/* 05FAF4 8005EEF4 E606000C */ swc1 $f6, 0xc($s0) -glabel L8005EEF8 -/* 05FAF8 8005EEF8 C608000C */ lwc1 $f8, 0xc($s0) -/* 05FAFC 8005EEFC 240D0002 */ li $t5, 2 -/* 05FB00 8005EF00 460C4281 */ sub.s $f10, $f8, $f12 -/* 05FB04 8005EF04 A20D01CD */ sb $t5, 0x1cd($s0) -/* 05FB08 8005EF08 E60A000C */ swc1 $f10, 0xc($s0) -/* 05FB0C 8005EF0C 1000002C */ b .L8005EFC0 -/* 05FB10 8005EF10 24040002 */ li $a0, 2 -glabel L8005EF14 -/* 05FB14 8005EF14 920E01CD */ lbu $t6, 0x1cd($s0) -/* 05FB18 8005EF18 24010004 */ li $at, 4 -/* 05FB1C 8005EF1C 15C1000A */ bne $t6, $at, .L8005EF48 -/* 05FB20 8005EF20 00000000 */ nop -/* 05FB24 8005EF24 C604000C */ lwc1 $f4, 0xc($s0) -/* 05FB28 8005EF28 46007021 */ cvt.d.s $f0, $f14 -/* 05FB2C 8005EF2C 46200200 */ add.d $f8, $f0, $f0 -/* 05FB30 8005EF30 24040002 */ li $a0, 2 -/* 05FB34 8005EF34 460021A1 */ cvt.d.s $f6, $f4 -/* 05FB38 8005EF38 46283281 */ sub.d $f10, $f6, $f8 -/* 05FB3C 8005EF3C 46205120 */ cvt.s.d $f4, $f10 -/* 05FB40 8005EF40 1000001F */ b .L8005EFC0 -/* 05FB44 8005EF44 E604000C */ swc1 $f4, 0xc($s0) -.L8005EF48: -/* 05FB48 8005EF48 C606000C */ lwc1 $f6, 0xc($s0) -/* 05FB4C 8005EF4C 46007021 */ cvt.d.s $f0, $f14 -/* 05FB50 8005EF50 46200280 */ add.d $f10, $f0, $f0 -/* 05FB54 8005EF54 46003221 */ cvt.d.s $f8, $f6 -/* 05FB58 8005EF58 462A4100 */ add.d $f4, $f8, $f10 -/* 05FB5C 8005EF5C 462021A0 */ cvt.s.d $f6, $f4 -/* 05FB60 8005EF60 E606000C */ swc1 $f6, 0xc($s0) -/* 05FB64 8005EF64 10000016 */ b .L8005EFC0 -/* 05FB68 8005EF68 24040002 */ li $a0, 2 -glabel L8005EF6C -/* 05FB6C 8005EF6C C608000C */ lwc1 $f8, 0xc($s0) -/* 05FB70 8005EF70 46007021 */ cvt.d.s $f0, $f14 -/* 05FB74 8005EF74 46200100 */ add.d $f4, $f0, $f0 -/* 05FB78 8005EF78 240F0004 */ li $t7, 4 -/* 05FB7C 8005EF7C 460042A1 */ cvt.d.s $f10, $f8 -/* 05FB80 8005EF80 46245180 */ add.d $f6, $f10, $f4 -/* 05FB84 8005EF84 A20F01CD */ sb $t7, 0x1cd($s0) -/* 05FB88 8005EF88 46203220 */ cvt.s.d $f8, $f6 -/* 05FB8C 8005EF8C 24040002 */ li $a0, 2 -/* 05FB90 8005EF90 1000000B */ b .L8005EFC0 -/* 05FB94 8005EF94 E608000C */ swc1 $f8, 0xc($s0) -glabel L8005EF98 -/* 05FB98 8005EF98 C60A000C */ lwc1 $f10, 0xc($s0) -/* 05FB9C 8005EF9C 46007021 */ cvt.d.s $f0, $f14 -/* 05FBA0 8005EFA0 46200180 */ add.d $f6, $f0, $f0 -/* 05FBA4 8005EFA4 24040002 */ li $a0, 2 -/* 05FBA8 8005EFA8 46005121 */ cvt.d.s $f4, $f10 -/* 05FBAC 8005EFAC 46262200 */ add.d $f8, $f4, $f6 -/* 05FBB0 8005EFB0 462042A0 */ cvt.s.d $f10, $f8 -/* 05FBB4 8005EFB4 10000002 */ b .L8005EFC0 -/* 05FBB8 8005EFB8 E60A000C */ swc1 $f10, 0xc($s0) -.L8005EFBC: -/* 05FBBC 8005EFBC 24040002 */ li $a0, 2 -.L8005EFC0: -/* 05FBC0 8005EFC0 C600000C */ lwc1 $f0, 0xc($s0) -/* 05FBC4 8005EFC4 00000000 */ nop -/* 05FBC8 8005EFC8 4600103E */ c.le.s $f2, $f0 -/* 05FBCC 8005EFCC 00000000 */ nop -/* 05FBD0 8005EFD0 4500000A */ bc1f .L8005EFFC -/* 05FBD4 8005EFD4 00000000 */ nop -.L8005EFD8: -/* 05FBD8 8005EFD8 46020101 */ sub.s $f4, $f0, $f2 -/* 05FBDC 8005EFDC E604000C */ swc1 $f4, 0xc($s0) -/* 05FBE0 8005EFE0 A4480010 */ sh $t0, 0x10($v0) -/* 05FBE4 8005EFE4 C600000C */ lwc1 $f0, 0xc($s0) -/* 05FBE8 8005EFE8 00000000 */ nop -/* 05FBEC 8005EFEC 4600103E */ c.le.s $f2, $f0 -/* 05FBF0 8005EFF0 00000000 */ nop -/* 05FBF4 8005EFF4 4501FFF8 */ bc1t .L8005EFD8 -/* 05FBF8 8005EFF8 00000000 */ nop -.L8005EFFC: -/* 05FBFC 8005EFFC 4612003E */ c.le.s $f0, $f18 -/* 05FC00 8005F000 00000000 */ nop -/* 05FC04 8005F004 4500000A */ bc1f .L8005F030 -/* 05FC08 8005F008 00000000 */ nop -.L8005F00C: -/* 05FC0C 8005F00C 46020180 */ add.s $f6, $f0, $f2 -/* 05FC10 8005F010 E606000C */ swc1 $f6, 0xc($s0) -/* 05FC14 8005F014 A4480010 */ sh $t0, 0x10($v0) -/* 05FC18 8005F018 C600000C */ lwc1 $f0, 0xc($s0) -/* 05FC1C 8005F01C 00000000 */ nop -/* 05FC20 8005F020 4612003E */ c.le.s $f0, $f18 -/* 05FC24 8005F024 00000000 */ nop -/* 05FC28 8005F028 4501FFF8 */ bc1t .L8005F00C -/* 05FC2C 8005F02C 00000000 */ nop -.L8005F030: -/* 05FC30 8005F030 8223003B */ lb $v1, 0x3b($s1) -/* 05FC34 8005F034 00000000 */ nop -/* 05FC38 8005F038 14830007 */ bne $a0, $v1, .L8005F058 -/* 05FC3C 8005F03C 00000000 */ nop -/* 05FC40 8005F040 10C00005 */ beqz $a2, .L8005F058 -/* 05FC44 8005F044 24070003 */ li $a3, 3 -/* 05FC48 8005F048 A227003B */ sb $a3, 0x3b($s1) -/* 05FC4C 8005F04C E612000C */ swc1 $f18, 0xc($s0) -/* 05FC50 8005F050 8223003B */ lb $v1, 0x3b($s1) -/* 05FC54 8005F054 00000000 */ nop -.L8005F058: -/* 05FC58 8005F058 84580010 */ lh $t8, 0x10($v0) -/* 05FC5C 8005F05C 24070003 */ li $a3, 3 -/* 05FC60 8005F060 11180003 */ beq $t0, $t8, .L8005F070 -/* 05FC64 8005F064 24010005 */ li $at, 5 -/* 05FC68 8005F068 1460005E */ bnez $v1, .L8005F1E4 -/* 05FC6C 8005F06C 00000000 */ nop -.L8005F070: -/* 05FC70 8005F070 14610008 */ bne $v1, $at, .L8005F094 -/* 05FC74 8005F074 00000000 */ nop -/* 05FC78 8005F078 921901CD */ lbu $t9, 0x1cd($s0) -/* 05FC7C 8005F07C 00000000 */ nop -/* 05FC80 8005F080 A239003B */ sb $t9, 0x3b($s1) -/* 05FC84 8005F084 E612000C */ swc1 $f18, 0xc($s0) -/* 05FC88 8005F088 8223003B */ lb $v1, 0x3b($s1) -/* 05FC8C 8005F08C 10000056 */ b .L8005F1E8 -/* 05FC90 8005F090 444EF800 */ cfc1 $t6, $31 -.L8005F094: -/* 05FC94 8005F094 1523000B */ bne $t1, $v1, .L8005F0C4 -/* 05FC98 8005F098 00000000 */ nop -/* 05FC9C 8005F09C 920A01CD */ lbu $t2, 0x1cd($s0) -/* 05FCA0 8005F0A0 00000000 */ nop -/* 05FCA4 8005F0A4 15400003 */ bnez $t2, .L8005F0B4 -/* 05FCA8 8005F0A8 00000000 */ nop -/* 05FCAC 8005F0AC 10000002 */ b .L8005F0B8 -/* 05FCB0 8005F0B0 A224003B */ sb $a0, 0x3b($s1) -.L8005F0B4: -/* 05FCB4 8005F0B4 A220003B */ sb $zero, 0x3b($s1) -.L8005F0B8: -/* 05FCB8 8005F0B8 8223003B */ lb $v1, 0x3b($s1) -/* 05FCBC 8005F0BC 1000004A */ b .L8005F1E8 -/* 05FCC0 8005F0C0 444EF800 */ cfc1 $t6, $31 -.L8005F0C4: -/* 05FCC4 8005F0C4 14E3000B */ bne $a3, $v1, .L8005F0F4 -/* 05FCC8 8005F0C8 3C01800E */ lui $at, %hi(D_800E6AE8 + 4) # $at, 0x800e -/* 05FCCC 8005F0CC 920B01CD */ lbu $t3, 0x1cd($s0) -/* 05FCD0 8005F0D0 24010004 */ li $at, 4 -/* 05FCD4 8005F0D4 15610003 */ bne $t3, $at, .L8005F0E4 -/* 05FCD8 8005F0D8 240C0004 */ li $t4, 4 -/* 05FCDC 8005F0DC 10000002 */ b .L8005F0E8 -/* 05FCE0 8005F0E0 A224003B */ sb $a0, 0x3b($s1) -.L8005F0E4: -/* 05FCE4 8005F0E4 A22C003B */ sb $t4, 0x3b($s1) -.L8005F0E8: -/* 05FCE8 8005F0E8 8223003B */ lb $v1, 0x3b($s1) -/* 05FCEC 8005F0EC 1000003E */ b .L8005F1E8 -/* 05FCF0 8005F0F0 444EF800 */ cfc1 $t6, $31 -.L8005F0F4: -/* 05FCF4 8005F0F4 C608002C */ lwc1 $f8, 0x2c($s0) -/* 05FCF8 8005F0F8 C42B6AE8 */ lwc1 $f11, %lo(D_800E6AE8)($at) -/* 05FCFC 8005F0FC C42A6AEC */ lwc1 $f10, %lo(D_800E6AE8 + 4)($at) -/* 05FD00 8005F100 46004021 */ cvt.d.s $f0, $f8 -/* 05FD04 8005F104 4620503C */ c.lt.d $f10, $f0 -/* 05FD08 8005F108 3C01800E */ lui $at, %hi(D_800E6AF0 + 4) # $at, 0x800e -/* 05FD0C 8005F10C 4500001C */ bc1f .L8005F180 -/* 05FD10 8005F110 00000000 */ nop -/* 05FD14 8005F114 C4256AF0 */ lwc1 $f5, %lo(D_800E6AF0)($at) -/* 05FD18 8005F118 C4246AF4 */ lwc1 $f4, %lo(D_800E6AF0 + 4)($at) -/* 05FD1C 8005F11C 00000000 */ nop -/* 05FD20 8005F120 4624003C */ c.lt.d $f0, $f4 -/* 05FD24 8005F124 00000000 */ nop -/* 05FD28 8005F128 45000015 */ bc1f .L8005F180 -/* 05FD2C 8005F12C 00000000 */ nop -/* 05FD30 8005F130 1483000F */ bne $a0, $v1, .L8005F170 -/* 05FD34 8005F134 00000000 */ nop -/* 05FD38 8005F138 A229003B */ sb $t1, 0x3b($s1) -/* 05FD3C 8005F13C 822E003B */ lb $t6, 0x3b($s1) -/* 05FD40 8005F140 8CAD0044 */ lw $t5, 0x44($a1) -/* 05FD44 8005F144 000E78C0 */ sll $t7, $t6, 3 -/* 05FD48 8005F148 01AFC021 */ addu $t8, $t5, $t7 -/* 05FD4C 8005F14C 8F190004 */ lw $t9, 4($t8) -/* 05FD50 8005F150 00000000 */ nop -/* 05FD54 8005F154 00195100 */ sll $t2, $t9, 4 -/* 05FD58 8005F158 254BFFEF */ addiu $t3, $t2, -0x11 -/* 05FD5C 8005F15C 448B3000 */ mtc1 $t3, $f6 -/* 05FD60 8005F160 00000000 */ nop -/* 05FD64 8005F164 46803220 */ cvt.s.w $f8, $f6 -/* 05FD68 8005F168 10000002 */ b .L8005F174 -/* 05FD6C 8005F16C E608000C */ swc1 $f8, 0xc($s0) -.L8005F170: -/* 05FD70 8005F170 A220003B */ sb $zero, 0x3b($s1) -.L8005F174: -/* 05FD74 8005F174 8223003B */ lb $v1, 0x3b($s1) -/* 05FD78 8005F178 1000001B */ b .L8005F1E8 -/* 05FD7C 8005F17C 444EF800 */ cfc1 $t6, $31 -.L8005F180: -/* 05FD80 8005F180 14600005 */ bnez $v1, .L8005F198 -/* 05FD84 8005F184 24010004 */ li $at, 4 -/* 05FD88 8005F188 A229003B */ sb $t1, 0x3b($s1) -/* 05FD8C 8005F18C E612000C */ swc1 $f18, 0xc($s0) -/* 05FD90 8005F190 8223003B */ lb $v1, 0x3b($s1) -/* 05FD94 8005F194 00000000 */ nop -.L8005F198: -/* 05FD98 8005F198 14610012 */ bne $v1, $at, .L8005F1E4 -/* 05FD9C 8005F19C 00000000 */ nop -/* 05FDA0 8005F1A0 14C00010 */ bnez $a2, .L8005F1E4 -/* 05FDA4 8005F1A4 00000000 */ nop -/* 05FDA8 8005F1A8 A227003B */ sb $a3, 0x3b($s1) -/* 05FDAC 8005F1AC 822E003B */ lb $t6, 0x3b($s1) -/* 05FDB0 8005F1B0 8CAC0044 */ lw $t4, 0x44($a1) -/* 05FDB4 8005F1B4 000E68C0 */ sll $t5, $t6, 3 -/* 05FDB8 8005F1B8 018D7821 */ addu $t7, $t4, $t5 -/* 05FDBC 8005F1BC 8DF80004 */ lw $t8, 4($t7) -/* 05FDC0 8005F1C0 00000000 */ nop -/* 05FDC4 8005F1C4 0018C900 */ sll $t9, $t8, 4 -/* 05FDC8 8005F1C8 272AFFEF */ addiu $t2, $t9, -0x11 -/* 05FDCC 8005F1CC 448A5000 */ mtc1 $t2, $f10 -/* 05FDD0 8005F1D0 00000000 */ nop -/* 05FDD4 8005F1D4 46805120 */ cvt.s.w $f4, $f10 -/* 05FDD8 8005F1D8 E604000C */ swc1 $f4, 0xc($s0) -/* 05FDDC 8005F1DC 8223003B */ lb $v1, 0x3b($s1) -/* 05FDE0 8005F1E0 00000000 */ nop -.L8005F1E4: -/* 05FDE4 8005F1E4 444EF800 */ cfc1 $t6, $31 -.L8005F1E8: -/* 05FDE8 8005F1E8 862B0018 */ lh $t3, 0x18($s1) -/* 05FDEC 8005F1EC 35C10003 */ ori $at, $t6, 3 -/* 05FDF0 8005F1F0 38210002 */ xori $at, $at, 2 -/* 05FDF4 8005F1F4 A7AB003C */ sh $t3, 0x3c($sp) -/* 05FDF8 8005F1F8 C606000C */ lwc1 $f6, 0xc($s0) -/* 05FDFC 8005F1FC 44C1F800 */ ctc1 $at, $31 -/* 05FE00 8005F200 AE200074 */ sw $zero, 0x74($s1) -/* 05FE04 8005F204 46003224 */ cvt.w.s $f8, $f6 -/* 05FE08 8005F208 24050002 */ li $a1, 2 -/* 05FE0C 8005F20C 440C4000 */ mfc1 $t4, $f8 -/* 05FE10 8005F210 44CEF800 */ ctc1 $t6, $31 -/* 05FE14 8005F214 14830008 */ bne $a0, $v1, .L8005F238 -/* 05FE18 8005F218 A62C0018 */ sh $t4, 0x18($s1) -/* 05FE1C 8005F21C 87A6003C */ lh $a2, 0x3c($sp) -/* 05FE20 8005F220 240D00AD */ li $t5, 173 -/* 05FE24 8005F224 AFAD0010 */ sw $t5, 0x10($sp) -/* 05FE28 8005F228 02202025 */ move $a0, $s1 -/* 05FE2C 8005F22C 0C0044F3 */ jal func_800113CC -/* 05FE30 8005F230 240700AC */ li $a3, 172 -/* 05FE34 8005F234 2408FFFF */ li $t0, -1 -.L8005F238: -/* 05FE38 8005F238 860F0000 */ lh $t7, ($s0) -/* 05FE3C 8005F23C 00000000 */ nop -/* 05FE40 8005F240 150F000C */ bne $t0, $t7, .L8005F274 -/* 05FE44 8005F244 8FA50040 */ lw $a1, 0x40($sp) -/* 05FE48 8005F248 0C008D5A */ jal func_80023568 -/* 05FE4C 8005F24C 00000000 */ nop -/* 05FE50 8005F250 10400007 */ beqz $v0, .L8005F270 -/* 05FE54 8005F254 02202025 */ move $a0, $s1 -/* 05FE58 8005F258 241800A5 */ li $t8, 165 -/* 05FE5C 8005F25C AFB80010 */ sw $t8, 0x10($sp) -/* 05FE60 8005F260 02002825 */ move $a1, $s0 -/* 05FE64 8005F264 3C0642C8 */ lui $a2, 0x42c8 -/* 05FE68 8005F268 0C017881 */ jal func_8005E204 -/* 05FE6C 8005F26C 24070089 */ li $a3, 137 -.L8005F270: -/* 05FE70 8005F270 8FA50040 */ lw $a1, 0x40($sp) -.L8005F274: -/* 05FE74 8005F274 0C02BF0F */ jal func_800AFC3C -/* 05FE78 8005F278 02202025 */ move $a0, $s1 -/* 05FE7C 8005F27C 02202025 */ move $a0, $s1 -/* 05FE80 8005F280 02002825 */ move $a1, $s0 -/* 05FE84 8005F284 0C017412 */ jal func_8005D048 -/* 05FE88 8005F288 24060028 */ li $a2, 40 -/* 05FE8C 8005F28C 0C006EB2 */ jal get_racer_object -/* 05FE90 8005F290 00002025 */ move $a0, $zero -/* 05FE94 8005F294 8C43004C */ lw $v1, 0x4c($v0) -/* 05FE98 8005F298 8C500064 */ lw $s0, 0x64($v0) -/* 05FE9C 8005F29C 8C790000 */ lw $t9, ($v1) -/* 05FEA0 8005F2A0 3C058012 */ lui $a1, %hi(D_8011D600) # $a1, 0x8012 -/* 05FEA4 8005F2A4 1639000B */ bne $s1, $t9, .L8005F2D4 -/* 05FEA8 8005F2A8 24A5D600 */ addiu $a1, %lo(D_8011D600) # addiu $a1, $a1, -0x2a00 -/* 05FEAC 8005F2AC 846A0014 */ lh $t2, 0x14($v1) -/* 05FEB0 8005F2B0 00000000 */ nop -/* 05FEB4 8005F2B4 314B0008 */ andi $t3, $t2, 8 -/* 05FEB8 8005F2B8 11600006 */ beqz $t3, .L8005F2D4 -/* 05FEBC 8005F2BC 00000000 */ nop -/* 05FEC0 8005F2C0 822E003B */ lb $t6, 0x3b($s1) -/* 05FEC4 8005F2C4 24010001 */ li $at, 1 -/* 05FEC8 8005F2C8 15C10002 */ bne $t6, $at, .L8005F2D4 -/* 05FECC 8005F2CC 240C0004 */ li $t4, 4 -/* 05FED0 8005F2D0 A20C0187 */ sb $t4, 0x187($s0) -.L8005F2D4: -/* 05FED4 8005F2D4 820D01D8 */ lb $t5, 0x1d8($s0) -/* 05FED8 8005F2D8 00000000 */ nop -/* 05FEDC 8005F2DC 11A00008 */ beqz $t5, .L8005F300 -/* 05FEE0 8005F2E0 8FBF0024 */ lw $ra, 0x24($sp) -/* 05FEE4 8005F2E4 80AF0000 */ lb $t7, ($a1) -/* 05FEE8 8005F2E8 24180001 */ li $t8, 1 -/* 05FEEC 8005F2EC 15E00003 */ bnez $t7, .L8005F2FC -/* 05FEF0 8005F2F0 02002025 */ move $a0, $s0 -/* 05FEF4 8005F2F4 0C0172DA */ jal func_8005CB68 -/* 05FEF8 8005F2F8 A0B80000 */ sb $t8, ($a1) -.L8005F2FC: -/* 05FEFC 8005F2FC 8FBF0024 */ lw $ra, 0x24($sp) -.L8005F300: -/* 05FF00 8005F300 8FB0001C */ lw $s0, 0x1c($sp) -/* 05FF04 8005F304 8FB10020 */ lw $s1, 0x20($sp) -/* 05FF08 8005F308 03E00008 */ jr $ra -/* 05FF0C 8005F30C 27BD0040 */ addiu $sp, $sp, 0x40 - diff --git a/asm/non_matchings/unknown_05FF10/func_8005F310.s b/asm/non_matchings/unknown_05FF10/func_8005F310.s deleted file mode 100644 index acd530f9..00000000 --- a/asm/non_matchings/unknown_05FF10/func_8005F310.s +++ /dev/null @@ -1,365 +0,0 @@ -.late_rodata -glabel D_800E6B00 -.double 0.3 -glabel D_800E6B08 -.double -0.3 -glabel D_800E6B10 -.double 0.4 - -.text -glabel func_8005F310 -/* 05FF10 8005F310 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 05FF14 8005F314 AFA40040 */ sw $a0, 0x40($sp) -/* 05FF18 8005F318 AFBF0024 */ sw $ra, 0x24($sp) -/* 05FF1C 8005F31C AFB00020 */ sw $s0, 0x20($sp) -/* 05FF20 8005F320 3C04800E */ lui $a0, %hi(D_800DCE80) # $a0, 0x800e -/* 05FF24 8005F324 00C08025 */ move $s0, $a2 -/* 05FF28 8005F328 AFA50044 */ sw $a1, 0x44($sp) -/* 05FF2C 8005F32C 2484CE80 */ addiu $a0, %lo(D_800DCE80) # addiu $a0, $a0, -0x3180 -/* 05FF30 8005F330 0C01729E */ jal func_8005CA78 -/* 05FF34 8005F334 AFA7004C */ sw $a3, 0x4c($sp) -/* 05FF38 8005F338 8FA7004C */ lw $a3, 0x4c($sp) -/* 05FF3C 8005F33C 3C01800E */ lui $at, %hi(D_800E6B00) # $at, 0x800e -/* 05FF40 8005F340 A0E001EC */ sb $zero, 0x1ec($a3) -/* 05FF44 8005F344 820E003B */ lb $t6, 0x3b($s0) -/* 05FF48 8005F348 C4266B04 */ lwc1 $f6, %lo(D_800E6B00 + 4)($at) -/* 05FF4C 8005F34C A7AE003E */ sh $t6, 0x3e($sp) -/* 05FF50 8005F350 860F0018 */ lh $t7, 0x18($s0) -/* 05FF54 8005F354 C4276B00 */ lwc1 $f7, %lo(D_800E6B00)($at) -/* 05FF58 8005F358 A7AF003C */ sh $t7, 0x3c($sp) -/* 05FF5C 8005F35C 84F8016A */ lh $t8, 0x16a($a3) -/* 05FF60 8005F360 00000000 */ nop -/* 05FF64 8005F364 A7B8003A */ sh $t8, 0x3a($sp) -/* 05FF68 8005F368 C4E4002C */ lwc1 $f4, 0x2c($a3) -/* 05FF6C 8005F36C 00000000 */ nop -/* 05FF70 8005F370 46002021 */ cvt.d.s $f0, $f4 -/* 05FF74 8005F374 4626003C */ c.lt.d $f0, $f6 -/* 05FF78 8005F378 00000000 */ nop -/* 05FF7C 8005F37C 45000009 */ bc1f .L8005F3A4 -/* 05FF80 8005F380 3C01800E */ lui $at, %hi(D_800E6B08 + 4) # $at, 0x800e -/* 05FF84 8005F384 C4296B08 */ lwc1 $f9, %lo(D_800E6B08)($at) -/* 05FF88 8005F388 C4286B0C */ lwc1 $f8, %lo(D_800E6B08 + 4)($at) -/* 05FF8C 8005F38C 8FB90054 */ lw $t9, 0x54($sp) -/* 05FF90 8005F390 4620403C */ c.lt.d $f8, $f0 -/* 05FF94 8005F394 00000000 */ nop -/* 05FF98 8005F398 45000002 */ bc1f .L8005F3A4 -/* 05FF9C 8005F39C 00000000 */ nop -/* 05FFA0 8005F3A0 AF200000 */ sw $zero, ($t9) -.L8005F3A4: -/* 05FFA4 8005F3A4 80EA01D8 */ lb $t2, 0x1d8($a3) -/* 05FFA8 8005F3A8 24010001 */ li $at, 1 -/* 05FFAC 8005F3AC 1541000F */ bne $t2, $at, .L8005F3EC -/* 05FFB0 8005F3B0 8FA90058 */ lw $t1, 0x58($sp) -/* 05FFB4 8005F3B4 0C008D5A */ jal func_80023568 -/* 05FFB8 8005F3B8 AFA7004C */ sw $a3, 0x4c($sp) -/* 05FFBC 8005F3BC 8FA7004C */ lw $a3, 0x4c($sp) -/* 05FFC0 8005F3C0 10400009 */ beqz $v0, .L8005F3E8 -/* 05FFC4 8005F3C4 24040082 */ li $a0, 130 -/* 05FFC8 8005F3C8 0C008500 */ jal func_80021400 -/* 05FFCC 8005F3CC AFA7004C */ sw $a3, 0x4c($sp) -/* 05FFD0 8005F3D0 8FA7004C */ lw $a3, 0x4c($sp) -/* 05FFD4 8005F3D4 00000000 */ nop -/* 05FFD8 8005F3D8 80EB01D8 */ lb $t3, 0x1d8($a3) -/* 05FFDC 8005F3DC 00000000 */ nop -/* 05FFE0 8005F3E0 256C0001 */ addiu $t4, $t3, 1 -/* 05FFE4 8005F3E4 A0EC01D8 */ sb $t4, 0x1d8($a3) -.L8005F3E8: -/* 05FFE8 8005F3E8 8FA90058 */ lw $t1, 0x58($sp) -.L8005F3EC: -/* 05FFEC 8005F3EC 24010064 */ li $at, 100 -/* 05FFF0 8005F3F0 8D280000 */ lw $t0, ($t1) -/* 05FFF4 8005F3F4 00000000 */ nop -/* 05FFF8 8005F3F8 15010002 */ bne $t0, $at, .L8005F404 -/* 05FFFC 8005F3FC 3C018012 */ lui $at, %hi(D_8011D610) # $at, 0x8012 -/* 060000 8005F400 A020D610 */ sb $zero, %lo(D_8011D610)($at) -.L8005F404: -/* 060004 8005F404 84ED0000 */ lh $t5, ($a3) -/* 060008 8005F408 2403FFFF */ li $v1, -1 -/* 06000C 8005F40C 146D001F */ bne $v1, $t5, .L8005F48C -/* 060010 8005F410 A0E001F5 */ sb $zero, 0x1f5($a3) -/* 060014 8005F414 8D220000 */ lw $v0, ($t1) -/* 060018 8005F418 24010064 */ li $at, 100 -/* 06001C 8005F41C 1041001B */ beq $v0, $at, .L8005F48C -/* 060020 8005F420 244EFFE2 */ addiu $t6, $v0, -0x1e -/* 060024 8005F424 05C10017 */ bgez $t6, .L8005F484 -/* 060028 8005F428 AD2E0000 */ sw $t6, ($t1) -/* 06002C 8005F42C 3C188012 */ lui $t8, %hi(D_8011D611) # $t8, 0x8012 -/* 060030 8005F430 8318D611 */ lb $t8, %lo(D_8011D611)($t8) -/* 060034 8005F434 00002025 */ move $a0, $zero -/* 060038 8005F438 17000009 */ bnez $t8, .L8005F460 -/* 06003C 8005F43C 8FA20050 */ lw $v0, 0x50($sp) -/* 060040 8005F440 AFA7004C */ sw $a3, 0x4c($sp) -/* 060044 8005F444 0C0172C1 */ jal func_8005CB04 -/* 060048 8005F448 AFA8002C */ sw $t0, 0x2c($sp) -/* 06004C 8005F44C 8FA7004C */ lw $a3, 0x4c($sp) -/* 060050 8005F450 8FA8002C */ lw $t0, 0x2c($sp) -/* 060054 8005F454 8FA90058 */ lw $t1, 0x58($sp) -/* 060058 8005F458 00000000 */ nop -/* 06005C 8005F45C 8FA20050 */ lw $v0, 0x50($sp) -.L8005F460: -/* 060060 8005F460 24190001 */ li $t9, 1 -/* 060064 8005F464 3C018012 */ lui $at, %hi(D_8011D611) # $at, 0x8012 -/* 060068 8005F468 A039D611 */ sb $t9, %lo(D_8011D611)($at) -/* 06006C 8005F46C AD200000 */ sw $zero, ($t1) -/* 060070 8005F470 8C4A0000 */ lw $t2, ($v0) -/* 060074 8005F474 00000000 */ nop -/* 060078 8005F478 354B8000 */ ori $t3, $t2, 0x8000 -/* 06007C 8005F47C 10000003 */ b .L8005F48C -/* 060080 8005F480 AC4B0000 */ sw $t3, ($v0) -.L8005F484: -/* 060084 8005F484 3C018012 */ lui $at, %hi(D_8011D611) # $at, 0x8012 -/* 060088 8005F488 A020D611 */ sb $zero, %lo(D_8011D611)($at) -.L8005F48C: -/* 06008C 8005F48C 240C000A */ li $t4, 10 -/* 060090 8005F490 A0EC01D6 */ sb $t4, 0x1d6($a3) -/* 060094 8005F494 8FA50044 */ lw $a1, 0x44($sp) -/* 060098 8005F498 8FA40040 */ lw $a0, 0x40($sp) -/* 06009C 8005F49C AFA8002C */ sw $t0, 0x2c($sp) -/* 0600A0 8005F4A0 AFA7004C */ sw $a3, 0x4c($sp) -/* 0600A4 8005F4A4 0C0125E5 */ jal func_80049794 -/* 0600A8 8005F4A8 02003025 */ move $a2, $s0 -/* 0600AC 8005F4AC 8FA7004C */ lw $a3, 0x4c($sp) -/* 0600B0 8005F4B0 8FA8002C */ lw $t0, 0x2c($sp) -/* 0600B4 8005F4B4 80ED01D7 */ lb $t5, 0x1d7($a3) -/* 0600B8 8005F4B8 2403FFFF */ li $v1, -1 -/* 0600BC 8005F4BC A0ED01D6 */ sb $t5, 0x1d6($a3) -/* 0600C0 8005F4C0 8FAE0058 */ lw $t6, 0x58($sp) -/* 0600C4 8005F4C4 00000000 */ nop -/* 0600C8 8005F4C8 ADC80000 */ sw $t0, ($t6) -/* 0600CC 8005F4CC AE000074 */ sw $zero, 0x74($s0) -/* 0600D0 8005F4D0 87AF003A */ lh $t7, 0x3a($sp) -/* 0600D4 8005F4D4 00000000 */ nop -/* 0600D8 8005F4D8 A4EF016A */ sh $t7, 0x16a($a3) -/* 0600DC 8005F4DC 87B8003E */ lh $t8, 0x3e($sp) -/* 0600E0 8005F4E0 00000000 */ nop -/* 0600E4 8005F4E4 A218003B */ sb $t8, 0x3b($s0) -/* 0600E8 8005F4E8 87B9003C */ lh $t9, 0x3c($sp) -/* 0600EC 8005F4EC 00000000 */ nop -/* 0600F0 8005F4F0 A6190018 */ sh $t9, 0x18($s0) -/* 0600F4 8005F4F4 80EA0187 */ lb $t2, 0x187($a3) -/* 0600F8 8005F4F8 00000000 */ nop -/* 0600FC 8005F4FC 11400029 */ beqz $t2, .L8005F5A4 -/* 060100 8005F500 00000000 */ nop -/* 060104 8005F504 820B003B */ lb $t3, 0x3b($s0) -/* 060108 8005F508 24010001 */ li $at, 1 -/* 06010C 8005F50C 11610025 */ beq $t3, $at, .L8005F5A4 -/* 060110 8005F510 24040001 */ li $a0, 1 -/* 060114 8005F514 0C0172C1 */ jal func_8005CB04 -/* 060118 8005F518 AFA7004C */ sw $a3, 0x4c($sp) -/* 06011C 8005F51C 24040011 */ li $a0, 17 -/* 060120 8005F520 0C000741 */ jal play_sound_global -/* 060124 8005F524 00002825 */ move $a1, $zero -/* 060128 8005F528 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 06012C 8005F52C 44816000 */ mtc1 $at, $f12 -/* 060130 8005F530 0C01A7CA */ jal func_80069F28 -/* 060134 8005F534 00000000 */ nop -/* 060138 8005F538 3C01800E */ lui $at, %hi(D_800E6B10 + 4) # $at, 0x800e -/* 06013C 8005F53C C60A001C */ lwc1 $f10, 0x1c($s0) -/* 060140 8005F540 C4216B10 */ lwc1 $f1, %lo(D_800E6B10)($at) -/* 060144 8005F544 C4206B14 */ lwc1 $f0, %lo(D_800E6B10 + 4)($at) -/* 060148 8005F548 46005121 */ cvt.d.s $f4, $f10 -/* 06014C 8005F54C 46202182 */ mul.d $f6, $f4, $f0 -/* 060150 8005F550 C60A0024 */ lwc1 $f10, 0x24($s0) -/* 060154 8005F554 8FA7004C */ lw $a3, 0x4c($sp) -/* 060158 8005F558 46005121 */ cvt.d.s $f4, $f10 -/* 06015C 8005F55C 44809000 */ mtc1 $zero, $f18 -/* 060160 8005F560 46203220 */ cvt.s.d $f8, $f6 -/* 060164 8005F564 240C0001 */ li $t4, 1 -/* 060168 8005F568 46202182 */ mul.d $f6, $f4, $f0 -/* 06016C 8005F56C E608001C */ swc1 $f8, 0x1c($s0) -/* 060170 8005F570 A20C003B */ sb $t4, 0x3b($s0) -/* 060174 8005F574 3C014010 */ li $at, 0x40100000 # 2.250000 -/* 060178 8005F578 2403FFFF */ li $v1, -1 -/* 06017C 8005F57C 46203220 */ cvt.s.d $f8, $f6 -/* 060180 8005F580 44803000 */ mtc1 $zero, $f6 -/* 060184 8005F584 E6080024 */ swc1 $f8, 0x24($s0) -/* 060188 8005F588 E4F2000C */ swc1 $f18, 0xc($a3) -/* 06018C 8005F58C C60A0020 */ lwc1 $f10, 0x20($s0) -/* 060190 8005F590 44813800 */ mtc1 $at, $f7 -/* 060194 8005F594 46005121 */ cvt.d.s $f4, $f10 -/* 060198 8005F598 46262200 */ add.d $f8, $f4, $f6 -/* 06019C 8005F59C 462042A0 */ cvt.s.d $f10, $f8 -/* 0601A0 8005F5A0 E60A0020 */ swc1 $f10, 0x20($s0) -.L8005F5A4: -/* 0601A4 8005F5A4 8CED0148 */ lw $t5, 0x148($a3) -/* 0601A8 8005F5A8 44809000 */ mtc1 $zero, $f18 -/* 0601AC 8005F5AC 11A0001B */ beqz $t5, .L8005F61C -/* 0601B0 8005F5B0 A0E00187 */ sb $zero, 0x187($a3) -/* 0601B4 8005F5B4 C600001C */ lwc1 $f0, 0x1c($s0) -/* 0601B8 8005F5B8 C60E0024 */ lwc1 $f14, 0x24($s0) -/* 0601BC 8005F5BC 46000082 */ mul.s $f2, $f0, $f0 -/* 0601C0 8005F5C0 AFA7004C */ sw $a3, 0x4c($sp) -/* 0601C4 8005F5C4 460E7402 */ mul.s $f16, $f14, $f14 -/* 0601C8 8005F5C8 00000000 */ nop -/* 0601CC 8005F5CC 46021102 */ mul.s $f4, $f2, $f2 -/* 0601D0 8005F5D0 00000000 */ nop -/* 0601D4 8005F5D4 46108182 */ mul.s $f6, $f16, $f16 -/* 0601D8 8005F5D8 0C0326B4 */ jal sqrtf -/* 0601DC 8005F5DC 46062300 */ add.s $f12, $f4, $f6 -/* 0601E0 8005F5E0 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 0601E4 8005F5E4 44814800 */ mtc1 $at, $f9 -/* 0601E8 8005F5E8 44804000 */ mtc1 $zero, $f8 -/* 0601EC 8005F5EC 46000087 */ neg.s $f2, $f0 -/* 0601F0 8005F5F0 460012A1 */ cvt.d.s $f10, $f2 -/* 0601F4 8005F5F4 8FA7004C */ lw $a3, 0x4c($sp) -/* 0601F8 8005F5F8 462A403C */ c.lt.d $f8, $f10 -/* 0601FC 8005F5FC 44809000 */ mtc1 $zero, $f18 -/* 060200 8005F600 2403FFFF */ li $v1, -1 -/* 060204 8005F604 45000005 */ bc1f .L8005F61C -/* 060208 8005F608 E4E2002C */ swc1 $f2, 0x2c($a3) -/* 06020C 8005F60C E4F2002C */ swc1 $f18, 0x2c($a3) -/* 060210 8005F610 E612001C */ swc1 $f18, 0x1c($s0) -/* 060214 8005F614 E6120020 */ swc1 $f18, 0x20($s0) -/* 060218 8005F618 E6120024 */ swc1 $f18, 0x24($s0) -.L8005F61C: -/* 06021C 8005F61C C7A40044 */ lwc1 $f4, 0x44($sp) -/* 060220 8005F620 C4E6000C */ lwc1 $f6, 0xc($a3) -/* 060224 8005F624 46002321 */ cvt.d.s $f12, $f4 -/* 060228 8005F628 462C6280 */ add.d $f10, $f12, $f12 -/* 06022C 8005F62C 46003221 */ cvt.d.s $f8, $f6 -/* 060230 8005F630 462A4100 */ add.d $f4, $f8, $f10 -/* 060234 8005F634 462021A0 */ cvt.s.d $f6, $f4 -/* 060238 8005F638 E4E6000C */ swc1 $f6, 0xc($a3) -/* 06023C 8005F63C 8E0E0068 */ lw $t6, 0x68($s0) -/* 060240 8005F640 8218003B */ lb $t8, 0x3b($s0) -/* 060244 8005F644 8DC20000 */ lw $v0, ($t6) -/* 060248 8005F648 0018C8C0 */ sll $t9, $t8, 3 -/* 06024C 8005F64C 8C440000 */ lw $a0, ($v0) -/* 060250 8005F650 C4E0000C */ lwc1 $f0, 0xc($a3) -/* 060254 8005F654 8C8F0044 */ lw $t7, 0x44($a0) -/* 060258 8005F658 00000000 */ nop -/* 06025C 8005F65C 01F95021 */ addu $t2, $t7, $t9 -/* 060260 8005F660 8D4B0004 */ lw $t3, 4($t2) -/* 060264 8005F664 00000000 */ nop -/* 060268 8005F668 000B6100 */ sll $t4, $t3, 4 -/* 06026C 8005F66C 258DFFEF */ addiu $t5, $t4, -0x11 -/* 060270 8005F670 448D4000 */ mtc1 $t5, $f8 -/* 060274 8005F674 00000000 */ nop -/* 060278 8005F678 468040A0 */ cvt.s.w $f2, $f8 -/* 06027C 8005F67C 4600103E */ c.le.s $f2, $f0 -/* 060280 8005F680 00000000 */ nop -/* 060284 8005F684 4500000A */ bc1f .L8005F6B0 -/* 060288 8005F688 00000000 */ nop -.L8005F68C: -/* 06028C 8005F68C 46020281 */ sub.s $f10, $f0, $f2 -/* 060290 8005F690 E4EA000C */ swc1 $f10, 0xc($a3) -/* 060294 8005F694 A4430010 */ sh $v1, 0x10($v0) -/* 060298 8005F698 C4E0000C */ lwc1 $f0, 0xc($a3) -/* 06029C 8005F69C 00000000 */ nop -/* 0602A0 8005F6A0 4600103E */ c.le.s $f2, $f0 -/* 0602A4 8005F6A4 00000000 */ nop -/* 0602A8 8005F6A8 4501FFF8 */ bc1t .L8005F68C -/* 0602AC 8005F6AC 00000000 */ nop -.L8005F6B0: -/* 0602B0 8005F6B0 4612003E */ c.le.s $f0, $f18 -/* 0602B4 8005F6B4 00000000 */ nop -/* 0602B8 8005F6B8 4500000A */ bc1f .L8005F6E4 -/* 0602BC 8005F6BC 00000000 */ nop -.L8005F6C0: -/* 0602C0 8005F6C0 46020100 */ add.s $f4, $f0, $f2 -/* 0602C4 8005F6C4 E4E4000C */ swc1 $f4, 0xc($a3) -/* 0602C8 8005F6C8 A4430010 */ sh $v1, 0x10($v0) -/* 0602CC 8005F6CC C4E0000C */ lwc1 $f0, 0xc($a3) -/* 0602D0 8005F6D0 00000000 */ nop -/* 0602D4 8005F6D4 4612003E */ c.le.s $f0, $f18 -/* 0602D8 8005F6D8 00000000 */ nop -/* 0602DC 8005F6DC 4501FFF8 */ bc1t .L8005F6C0 -/* 0602E0 8005F6E0 00000000 */ nop -.L8005F6E4: -/* 0602E4 8005F6E4 820E003B */ lb $t6, 0x3b($s0) -/* 0602E8 8005F6E8 24010001 */ li $at, 1 -/* 0602EC 8005F6EC 15C10009 */ bne $t6, $at, .L8005F714 -/* 0602F0 8005F6F0 00000000 */ nop -/* 0602F4 8005F6F4 84580010 */ lh $t8, 0x10($v0) -/* 0602F8 8005F6F8 00000000 */ nop -/* 0602FC 8005F6FC 14780005 */ bne $v1, $t8, .L8005F714 -/* 060300 8005F700 00000000 */ nop -/* 060304 8005F704 A200003B */ sb $zero, 0x3b($s0) -/* 060308 8005F708 E4F2000C */ swc1 $f18, 0xc($a3) -/* 06030C 8005F70C C4E0000C */ lwc1 $f0, 0xc($a3) -/* 060310 8005F710 00000000 */ nop -.L8005F714: -/* 060314 8005F714 444FF800 */ cfc1 $t7, $31 -/* 060318 8005F718 AE000074 */ sw $zero, 0x74($s0) -/* 06031C 8005F71C 35E10003 */ ori $at, $t7, 3 -/* 060320 8005F720 38210002 */ xori $at, $at, 2 -/* 060324 8005F724 44C1F800 */ ctc1 $at, $31 -/* 060328 8005F728 02002025 */ move $a0, $s0 -/* 06032C 8005F72C 460001A4 */ cvt.w.s $f6, $f0 -/* 060330 8005F730 44193000 */ mfc1 $t9, $f6 -/* 060334 8005F734 44CFF800 */ ctc1 $t7, $31 -/* 060338 8005F738 A6190018 */ sh $t9, 0x18($s0) -/* 06033C 8005F73C 8FA50040 */ lw $a1, 0x40($sp) -/* 060340 8005F740 0C02BDC5 */ jal func_800AF714 -/* 060344 8005F744 AFA7004C */ sw $a3, 0x4c($sp) -/* 060348 8005F748 8FA5004C */ lw $a1, 0x4c($sp) -/* 06034C 8005F74C 02002025 */ move $a0, $s0 -/* 060350 8005F750 0C017412 */ jal func_8005D048 -/* 060354 8005F754 24060028 */ li $a2, 40 -/* 060358 8005F758 8FAA0058 */ lw $t2, 0x58($sp) -/* 06035C 8005F75C 24010064 */ li $at, 100 -/* 060360 8005F760 8D4B0000 */ lw $t3, ($t2) -/* 060364 8005F764 00000000 */ nop -/* 060368 8005F768 11610018 */ beq $t3, $at, .L8005F7CC -/* 06036C 8005F76C 00000000 */ nop -/* 060370 8005F770 0C002FD1 */ jal func_8000BF44 -/* 060374 8005F774 2404FFFF */ li $a0, -1 -/* 060378 8005F778 10400014 */ beqz $v0, .L8005F7CC -/* 06037C 8005F77C 00000000 */ nop -/* 060380 8005F780 8C430064 */ lw $v1, 0x64($v0) -/* 060384 8005F784 AC400078 */ sw $zero, 0x78($v0) -/* 060388 8005F788 10600010 */ beqz $v1, .L8005F7CC -/* 06038C 8005F78C 24180002 */ li $t8, 2 -/* 060390 8005F790 8FAD0040 */ lw $t5, 0x40($sp) -/* 060394 8005F794 906C0072 */ lbu $t4, 0x72($v1) -/* 060398 8005F798 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 06039C 8005F79C 44814000 */ mtc1 $at, $f8 -/* 0603A0 8005F7A0 018D7021 */ addu $t6, $t4, $t5 -/* 0603A4 8005F7A4 A06E0072 */ sb $t6, 0x72($v1) -/* 0603A8 8005F7A8 A0780070 */ sb $t8, 0x70($v1) -/* 0603AC 8005F7AC 240F0001 */ li $t7, 1 -/* 0603B0 8005F7B0 E4680074 */ swc1 $f8, 0x74($v1) -/* 0603B4 8005F7B4 AFAF0010 */ sw $t7, 0x10($sp) -/* 0603B8 8005F7B8 02002025 */ move $a0, $s0 -/* 0603BC 8005F7BC 2405FFFF */ li $a1, -1 -/* 0603C0 8005F7C0 24060002 */ li $a2, 2 -/* 0603C4 8005F7C4 0C002DD4 */ jal func_8000B750 -/* 0603C8 8005F7C8 24070001 */ li $a3, 1 -.L8005F7CC: -/* 0603CC 8005F7CC 0C006EB2 */ jal get_racer_object -/* 0603D0 8005F7D0 00002025 */ move $a0, $zero -/* 0603D4 8005F7D4 8C43004C */ lw $v1, 0x4c($v0) -/* 0603D8 8005F7D8 8C470064 */ lw $a3, 0x64($v0) -/* 0603DC 8005F7DC 8C790000 */ lw $t9, ($v1) -/* 0603E0 8005F7E0 3C058012 */ lui $a1, %hi(D_8011D610) # $a1, 0x8012 -/* 0603E4 8005F7E4 1619000B */ bne $s0, $t9, .L8005F814 -/* 0603E8 8005F7E8 24A5D610 */ addiu $a1, %lo(D_8011D610) # addiu $a1, $a1, -0x29f0 -/* 0603EC 8005F7EC 846A0014 */ lh $t2, 0x14($v1) -/* 0603F0 8005F7F0 00000000 */ nop -/* 0603F4 8005F7F4 314B0008 */ andi $t3, $t2, 8 -/* 0603F8 8005F7F8 11600006 */ beqz $t3, .L8005F814 -/* 0603FC 8005F7FC 00000000 */ nop -/* 060400 8005F800 820C003B */ lb $t4, 0x3b($s0) -/* 060404 8005F804 24010001 */ li $at, 1 -/* 060408 8005F808 15810002 */ bne $t4, $at, .L8005F814 -/* 06040C 8005F80C 240D0004 */ li $t5, 4 -/* 060410 8005F810 A0ED0187 */ sb $t5, 0x187($a3) -.L8005F814: -/* 060414 8005F814 80EE01D8 */ lb $t6, 0x1d8($a3) -/* 060418 8005F818 00000000 */ nop -/* 06041C 8005F81C 11C00008 */ beqz $t6, .L8005F840 -/* 060420 8005F820 8FBF0024 */ lw $ra, 0x24($sp) -/* 060424 8005F824 80B80000 */ lb $t8, ($a1) -/* 060428 8005F828 240F0001 */ li $t7, 1 -/* 06042C 8005F82C 17000003 */ bnez $t8, .L8005F83C -/* 060430 8005F830 00E02025 */ move $a0, $a3 -/* 060434 8005F834 0C0172DA */ jal func_8005CB68 -/* 060438 8005F838 A0AF0000 */ sb $t7, ($a1) -.L8005F83C: -/* 06043C 8005F83C 8FBF0024 */ lw $ra, 0x24($sp) -.L8005F840: -/* 060440 8005F840 8FB00020 */ lw $s0, 0x20($sp) -/* 060444 8005F844 03E00008 */ jr $ra -/* 060448 8005F848 27BD0040 */ addiu $sp, $sp, 0x40 - -/* 06044C 8005F84C 00000000 */ nop diff --git a/asm/unknown_031D30.s b/asm/unknown_031D30.s deleted file mode 100644 index 5e1229be..00000000 --- a/asm/unknown_031D30.s +++ /dev/null @@ -1,34 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x80031130 */ - -.include "macros.inc" - -.set noat # allow manual use of $at -.set noreorder # dont insert nops after branches -.set gp=64 # 64-bit instructions are used - -.section .text - -.include "asm/unknown_031D30/func_80031130.s" -.include "asm/unknown_031D30/func_800314DC.s" -.include "asm/unknown_031D30/func_80031600.s" - -.section .rodata - -glabel D_800E5F60 -.float -0.1 - -glabel D_800E5F64 -.float -0.1 - -glabel D_800E5F68 -.float 0.707 - -glabel D_800E5F6C -.float 0.45 - -glabel D_800E5F70 -.float -0.1 - - - diff --git a/include/PR/gu.h b/include/PR/gu.h index 6c291e1f..6527777d 100644 --- a/include/PR/gu.h +++ b/include/PR/gu.h @@ -21,8 +21,6 @@ void guMtxIdent(Mtx *m); void guMtxIdentF(float mf[4][4]); void guMtxL2F(float mf[4][4], Mtx *m); void guNormalize(float *, float *, float *); -void guMtxXFMF(float mf[4][4], float x, float y, float z, - float *ox, float *oy, float *oz); /* Used only in Fast3DEX2 */ void guLookAtReflect (Mtx *m, LookAt *l, float xEye, float yEye, float zEye, diff --git a/include/enums.h b/include/enums.h index a5b1529c..3567471c 100644 --- a/include/enums.h +++ b/include/enums.h @@ -21,8 +21,20 @@ typedef enum Vehicle { VEHICLE_CAR, VEHICLE_HOVERCRAFT, VEHICLE_PLANE, + VEHICLE_FLYING_CAR, + VEHICLE_LOOPDELOOP, + VEHICLE_TRICKY, + VEHICLE_BLUEY, + VEHICLE_SMOKEY, + VEHICLE_PTERODACTYL, + VEHICLE_SNOWBALL, + VEHICLE_CARPET, + VEHICLE_BUBBLER, + VEHICLE_WIZPIG, + VEHICLE_ROCKET, - NUMBER_OF_VEHICLE_TYPES + NUMBER_OF_VEHICLE_TYPES, + NUMBER_OF_PLAYER_VEHICLES = 3 } Vehicle; typedef enum CameraMode { @@ -174,7 +186,7 @@ typedef enum SurfaceType { SURFACE_DEFAULT, SURFACE_GRASS, SURFACE_SAND, - SURFACE_UNK03, + SURFACE_ZIP_PAD, SURFACE_STONE, SURFACE_UNK05, SURFACE_UNK06, diff --git a/include/level_object_entries.h b/include/level_object_entries.h index fcea0105..fc2c7d08 100644 --- a/include/level_object_entries.h +++ b/include/level_object_entries.h @@ -229,7 +229,7 @@ typedef struct LevelObjectEntry_ModeChange { /* 0x00 */ LevelObjectEntryCommon common; /* 0x08 */ u8 unk8; /* 0x09 */ u8 unk9; - /* 0x0A */ u8 unkA; + /* 0x0A */ u8 vehicleID; } LevelObjectEntry_ModeChange; typedef struct LevelObjectEntry_StopWatchMan { diff --git a/include/structs.h b/include/structs.h index 9daeecc3..8fa6d17a 100644 --- a/include/structs.h +++ b/include/structs.h @@ -835,7 +835,7 @@ typedef struct Object_CollectEgg { typedef struct Object_UnkId58 { /* 0x000 */ u8 pad0[0x1D6]; - /* 0x1D6 */ s8 unk1D6; + /* 0x1D6 */ s8 vehicleID; } Object_UnkId58; typedef struct Object_CharacterFlag { @@ -1027,7 +1027,7 @@ typedef struct Object_Racer { /* 0x0C8 */ f32 unkC8; /* 0x0CC */ f32 unkCC; /* 0x0D0 */ f32 unkD0; - /* 0x0D4 */ s32 unkD4; + /* 0x0D4 */ f32 unkD4; /* 0x0D8 */ Vec3f unkD8; /* 0x0E4 */ Vec3f unkE4; /* 0x0F0 */ Vec3f unkF0; @@ -1057,8 +1057,8 @@ typedef struct Object_Racer { /* 0x164 */ s16 z_rotation_offset; /* 0x166 */ s16 unk166; // I don't know exactly what these are, but this one in particular seems to cause a Y position offset. /* 0x168 */ s16 unk168; - /* 0x16A */ s16 unk16A; - /* 0x166 */ s16 unk16C; // As for these, they seem to affect the turning direction of the racer's head. + /* 0x16A */ s16 headAngle; + /* 0x166 */ s16 headAngleTarget; /* 0x16E */ s16 unk16E; /* 0x170 */ s16 unk170; /* 0x172 */ s8 balloon_type; @@ -1119,10 +1119,10 @@ typedef struct Object_Racer { /* 0x1D1 */ s8 unk1D1; /* 0x1D2 */ s8 unk1D2; /* 0x1D3 */ s8 boostTimer; - /* 0x1D4 */ u8 unk1D4; - /* 0x1D5 */ u8 unk1D5; - /* 0x1D6 */ s8 unk1D6; - /* 0x1D7 */ s8 unk1D7; + /* 0x1D4 */ s8 unk1D4; + /* 0x1D5 */ s8 unk1D5; + /* 0x1D6 */ s8 vehicleID; + /* 0x1D7 */ s8 vehicleIDPrev; /* 0x1D8 */ s8 raceFinished; /* 0x1D9 */ s8 unk1D9; /* 0x1DA */ u8 unk1DA; @@ -1168,7 +1168,7 @@ typedef struct Object_Racer { /* 0x206 */ s16 unk206; /* 0x208 */ s8 unk208; /* 0x209 */ u8 unk209; - /* 0x20A */ u8 unk20A; + /* 0x20A */ u8 lightFlags; /* 0x20B */ u8 unk20B; /* 0x20C */ u8 throttleReleased; /* 0x20D */ u8 unk20D; @@ -1201,7 +1201,7 @@ typedef struct Object_ModeChange { /* 0x08 */ f32 unk8; /* 0x0C */ f32 unkC; /* 0x10 */ s32 unk10; - /* 0x14 */ u8 unk14; + /* 0x14 */ u8 vehicleID; } Object_ModeChange; typedef struct Object_GoldenBalloon { @@ -1379,6 +1379,15 @@ typedef struct Object_AnimatedObject { s8 unk3A; } Object_AnimatedObject; +typedef struct Object_WizpigRocket { + u8 pad0[0x70]; + u8 unk70; + u8 unk71; + u8 unk72; + u8 unk73; + f32 unk74; +} Object_WizpigRocket; + typedef struct Object_64 { union { Object_Laser laser; @@ -1427,6 +1436,7 @@ typedef struct Object_64 { Object_Fireball_Octoweapon fireball_octoweapon; Object_LaserGun lasergun; Object_AnimatedObject animatedObject; + Object_WizpigRocket wizpigRocket; }; } Object_64; @@ -1462,7 +1472,7 @@ typedef struct ParticleBehavior { f32 unk4; f32 unk8; f32 unkC; - u8 pad10[4]; + u8 pad10[0x4]; s16 unk14; s16 unk16; s16 unk18; @@ -1473,10 +1483,37 @@ typedef struct ParticleBehavior { s16 unk22; s16 unk24; s16 unk26; - u8 pad28[0x18]; + s16 unk28; + s16 unk2A; + s16 unk2C; + s16 unk2E; + u8 pad30[0x10]; s16 unk40; s16 unk42; - u8 pad44[0x58]; + s16 unk44; + s16 unk46; + s16 unk48; + s16 unk4A; + s16 unk4C; + s16 unk4E; + f32 unk50; + f32 unk54; + u8 pad58[0x4]; + s32 unk5C; + u8 pad60[0x20]; + s16 unk80; + s16 unk82; + s16 unk84; + s16 unk86; + s16 unk88; + s16 unk8A; + s32 unk8C; + s32 unk90; + u8 pad94[0x4]; + u8 unk98; + u8 unk99; + u8 unk9A; + u8 unk9B; s32 *unk9C; } ParticleBehavior; @@ -1707,6 +1744,7 @@ typedef struct Object { /* 0x0078 */ ObjectTransform *trans78; /* 0x0078 */ s32 action; /* 0x0078 */ f32 unk78f; + /* 0x0078 */ struct Object *unk78_obj; }; union { @@ -1863,10 +1901,15 @@ typedef struct ByteColour { } ByteColour; typedef struct { - u8 r; - u8 g; - u8 b; - u8 a; +union { +struct { + u8 r; + u8 g; + u8 b; + u8 a; +}; +u32 word; +}; } ColourRGBA; #endif diff --git a/lib/src/libc/xprintf.h b/lib/src/libc/xprintf.h index 58962bf3..9fb792ac 100644 --- a/lib/src/libc/xprintf.h +++ b/lib/src/libc/xprintf.h @@ -1,5 +1,5 @@ -#ifndef _PRINTF_H_ -#define _PRINTF_H_ +#ifndef _XPRINTF_H_ +#define _XPRINTF_H_ #include "types.h" #include diff --git a/src/camera.c b/src/camera.c index 8abab526..31947894 100644 --- a/src/camera.c +++ b/src/camera.c @@ -1298,28 +1298,34 @@ f32 func_80069DC8(f32 x, f32 y, f32 z) { return oz; } -void func_80069E14(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f14; - f32 temp_f2; +/** + * Apply a shake to the camera based on the distance to the source. +*/ +void set_camera_shake_by_distance(f32 x, f32 y, f32 z, f32 dist, f32 magnitude) { + f32 diffX; + f32 distance; + f32 diffZ; + f32 diffY; s32 i; for (i = 0; i <= gNumberOfViewports; i++) { - temp_f0 = arg0 - gActiveCameraStack[i].trans.x_position; - temp_f2 = arg1 - gActiveCameraStack[i].trans.y_position; - temp_f14 = arg2 - gActiveCameraStack[i].trans.z_position; - temp_f0_2 = sqrtf(((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) + (temp_f14 * temp_f14)); - if (temp_f0_2 < arg3) { - gActiveCameraStack[i].unk30 = ((arg3 - temp_f0_2) * arg4) / arg3; + diffX = x - gActiveCameraStack[i].trans.x_position; + diffY = y - gActiveCameraStack[i].trans.y_position; + diffZ = z - gActiveCameraStack[i].trans.z_position; + distance = sqrtf(((diffX * diffX) + (diffY * diffY)) + (diffZ * diffZ)); + if (distance < dist) { + gActiveCameraStack[i].unk30 = ((dist - distance) * magnitude) / dist; } } } -void func_80069F28(f32 arg0) { +/** + * Apply a shake to all active cameras. +*/ +void set_camera_shake(f32 magnitude) { s32 i; for (i = 0; i <= gNumberOfViewports; i++) { - gActiveCameraStack[i].unk30 = arg0; + gActiveCameraStack[i].unk30 = magnitude; } } diff --git a/src/camera.h b/src/camera.h index 72fffec0..aa77fad6 100644 --- a/src/camera.h +++ b/src/camera.h @@ -148,8 +148,8 @@ Matrix *func_80069DA4(void); MatrixS *func_80069DB0(void); Matrix *func_80069DBC(void); f32 func_80069DC8(f32 x, f32 y, f32 z); -void func_80069E14(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4); -void func_80069F28(f32 arg0); +void set_camera_shake_by_distance(f32 x, f32 y, f32 z, f32 dist, f32 magnitude); +void set_camera_shake(f32 magnitude); UNUSED void debug_print_float_matrix_values(f32 *mtx); OSMesgQueue *get_si_mesg_queue(void); void initialise_player_ids(void); diff --git a/src/collision.c b/src/collision.c new file mode 100644 index 00000000..6b743603 --- /dev/null +++ b/src/collision.c @@ -0,0 +1,86 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x80031130 */ + +#include "collision.h" + +#include "types.h" +#include "macros.h" + +/*******************************/ + +// All handwritten assembly, below. + +// Collision for a different segment +GLOBAL_ASM("asm/collision/func_80031130.s") +// Might be segment related. +#ifdef NON_EQUIVALENT +s32 func_800314DC(LevelModelSegmentBoundingBox *a0, s32 a1, s32 a2, s32 a3, s32 t5) { + s32 v0 = 0; + s32 v1; + s32 t0, t1, t2, t3, t4; + + if (a0 == NULL) + return v0; + + t0 = a0->x1; + t1 = a0->z1; + t2 = a0->x2; + t3 = a0->z2; + + if (a3 < t0) + a3 = t0; + + if (a1 < t0) + a1 = t0; + + if (t5 < t1) + t5 = t1; + + if (a2 < t1) + a2 = t1; + + if (t2 < a3) + a3 = t2; + + if (t2 < a1) + a1 = t2; + + if (t3 < t5) + t5 = t3; + + if (t3 < a2) + a2 = t3; + + v1 = 1; + + t2 = ((t2 - t0) >> 3) + 1; + t4 = t2 + t0; + + while (v1 < (1 << 8)) { + if (t4 >= a1 && a3 >= t0) + v0 |= v1; + + v1 <<= 1; + t4 += t2; + t0 += t2; + } + + t2 = ((t3 - t1) >> 3) + 1; + t4 = t2 + t1; + + while (v1 < (1 << 16)) { + if (t4 >= a2 && t5 >= t1) + v0 |= v1; + + v1 <<= 1; + t4 += t2; + t1 += t2; + } + + return v0; +} +#else +GLOBAL_ASM("asm/collision/func_800314DC.s") +#endif +// Player collision for the current segment +GLOBAL_ASM("asm/collision/func_80031600.s") diff --git a/src/collision.h b/src/collision.h new file mode 100644 index 00000000..aefb4419 --- /dev/null +++ b/src/collision.h @@ -0,0 +1,11 @@ +#ifndef _COLLISION_H_ +#define _COLLISION_H_ + +#include "types.h" +#include "structs.h" + +void func_80031130(s32, f32 *, f32*, s32); +s32 func_800314DC(LevelModelSegmentBoundingBox *segment, s32 x1, s32 z1, s32 x2, s32 z2); +s32 func_80031600(f32 *pos, f32 *pos2, f32*, s8 *surface, s32, s32 *); + +#endif diff --git a/src/game.c b/src/game.c index 82c3dde4..53729215 100644 --- a/src/game.c +++ b/src/game.c @@ -567,7 +567,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl func_80000CBC(); func_80031BB8(0x20); var_s0 = VEHICLE_CAR; - if (vehicleId >= VEHICLE_CAR && vehicleId < NUMBER_OF_VEHICLE_TYPES) { + if (vehicleId >= VEHICLE_CAR && vehicleId < NUMBER_OF_PLAYER_VEHICLES) { var_s0 = gCurrentLevelHeader->unk4F[vehicleId]; } func_80017E74(var_s0); diff --git a/src/game_ui.c b/src/game_ui.c index 403b279d..8446a26b 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -734,7 +734,7 @@ void render_speedometer(Object *obj, UNUSED s32 updateRate) { if (!check_if_showing_cutscene_camera()) { racer64 = obj->unk64; if (racer64->racer.raceFinished == FALSE) { - if (racer64->racer.unk1D6 == 2) { + if (racer64->racer.vehicleID == VEHICLE_PLANE) { vel = sqrtf((obj->segment.x_velocity * obj->segment.x_velocity) + (obj->segment.y_velocity * obj->segment.y_velocity) + (obj->segment.z_velocity * obj->segment.z_velocity)); } else { vel = sqrtf((obj->segment.x_velocity * obj->segment.x_velocity) + (obj->segment.z_velocity * obj->segment.z_velocity)); @@ -823,7 +823,7 @@ void render_race_start(s32 arg0, s32 updateRate) { racerGroup = get_racer_objects(&numRacerObjects); randomRacer = racerGroup[get_random_number_from_range(1, numRacerObjects) - 1]; racer = (Object_Racer*)randomRacer->unk64; - if (racer->unk1D6 == 0) { + if (racer->vehicleID == VEHICLE_CAR) { if (get_random_number_from_range(0, 100) >= 96) { sp4C = 1.25 - ((get_random_number_from_range(0, 7) * 0.5) / 7.0); func_800095E8(76, randomRacer->segment.trans.x_position, randomRacer->segment.trans.y_position, randomRacer->segment.trans.z_position, 4, ((get_random_number_from_range(0, 7) * 63) / 7) + 24, sp4C * 100.0f, &D_80126D3C); @@ -1929,7 +1929,7 @@ void render_minimap_and_misc_hud(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 u D_80126CDC->unk1E4 = 0; D_80126CDC->unk1E6 = 14; } - if (func_8002341C() && someRacer->unk1D6 == 10) { + if (func_8002341C() && someRacer->vehicleID == VEHICLE_CARPET) { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, 255, 0, 255, opacity); } else { gDPSetPrimColor(gHUDCurrDisplayList++, 0, 0, gHudMinimapColours[someRacer->characterId].red, gHudMinimapColours[someRacer->characterId].green, gHudMinimapColours[someRacer->characterId].blue, opacity); diff --git a/src/math_util.h b/src/math_util.h index 80c7ce67..31eb585a 100644 --- a/src/math_util.h +++ b/src/math_util.h @@ -52,7 +52,5 @@ void f32_matrix_from_position(Matrix *mtx, f32 x, f32 y, f32 z); void f32_matrix_from_scale(Matrix, f32, f32, f32); s32 atan2s(s32 xDelta, s32 zDelta); f32 area_triangle_2d(f32 x0, f32 z0, f32 x1, f32 z1, f32 x2, f32 z2); -void func_80031130(s32, f32*, f32*, s32); -s32 func_80031600(f32*, f32*, f32*, s8* surface, s32, s32*); #endif // MATH_UTIL_H diff --git a/src/menu.c b/src/menu.c index af1e60c4..a406559e 100644 --- a/src/menu.c +++ b/src/menu.c @@ -914,17 +914,17 @@ s32 gMenuSubOption = 0; s32 D_800E098C = 0; //Player ID or controllerIndex maybe? ColourRGBA D_800E0990[4] = { - { 64, 64, 255, 160 }, - { 255, 64, 64, 160 }, - { 208, 192, 32, 176 }, - { 32, 192, 64, 176 }, + {{{ 64, 64, 255, 160 }}}, + {{{ 255, 64, 64, 160 }}}, + {{{ 208, 192, 32, 176 }}}, + {{{ 32, 192, 64, 176 }}}, }; ColourRGBA D_800E09A0[4] = { - { 0, 255, 0, 128 }, - { 0, 255, 0, 96 }, - { 0, 0, 255, 96 }, - { 0, 0, 255, 128 }, + {{{ 0, 255, 0, 128 }}}, + {{{ 0, 255, 0, 96 }}}, + {{{ 0, 0, 255, 96 }}}, + {{{ 0, 0, 255, 128 }}}, }; // BAD CONTROLLER PAK / If you wish to change / Controller Pak or Rumble Pak, / please do so now. diff --git a/src/object_functions.c b/src/object_functions.c index 65c78d9a..cd3e7646 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -29,6 +29,7 @@ #include "unknown_005740.h" #include "object_models.h" #include "lib/src/libc/rmonPrintf.h" +#include "collision.h" /************ .data ************/ @@ -977,6 +978,7 @@ void obj_loop_unknown58(Object *obj, s32 updateRate) { Object *someOtherObj; Object_UnkId58 *someOtherObj64; Object_60 *obj60; + s8 vehicleID; obj->segment.unk38.byte.unk3B = 0; obj->segment.animFrame = 40; @@ -989,8 +991,8 @@ void obj_loop_unknown58(Object *obj, s32 updateRate) { someOtherObj64 = &someOtherObj->unk64->unkid58; obj60 = obj->unk60; if (obj60->unk0 == 1) { - s8 temp = someOtherObj64->unk1D6; - if (temp == 1 || temp == 2) { + vehicleID = someOtherObj64->vehicleID; + if (vehicleID == VEHICLE_HOVERCRAFT || vehicleID == VEHICLE_PLANE) { someObj = (Object *) obj60->unk4; someObj->segment.trans.y_rotation = 0x4000; someObj->segment.unk38.byte.unk3A++; @@ -1219,7 +1221,7 @@ void obj_loop_stopwatchman(Object *obj, s32 updateRate) { func_80030DE0(0, tt->unk11, tt->unk12, tt->unk13, tt->unk20, tt->unk22, 0xB4); play_music(header->music); func_80001074(header->instruments); - racer->unk118 = func_80004B40(racer->characterId, racer->unk1D6); + racer->unk118 = func_80004B40(racer->characterId, racer->vehicleID); } obj->unk7C.word = 0xB4; func_80011570(obj, obj->segment.x_velocity * updateRateF, obj->segment.y_velocity * updateRateF, obj->segment.z_velocity * updateRateF); @@ -2255,23 +2257,23 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { } if (var_a2_2 & 0x80) { D_8011D4E0 = var_a2_2 & 0x7F; - if (D_8011D4E0 != racer64->racer.unk1D6) { + if (D_8011D4E0 != racer64->racer.vehicleID) { obj->action = TAJ_MODE_TRANSFORM_BEGIN; taj->unk4 = 0; // Voice clips: Abrakadabra, Alakazam, Alakazoom? - play_taj_voice_clip((racer64->racer.unk1D6 + 0x235), 1); + play_taj_voice_clip((racer64->racer.vehicleID + SOUND_VOICE_TAJ_ABRAKADABRA), 1); } else { set_menu_id_if_option_equal(0x62, 2); } } if (var_a2_2 & 0x40) { D_8011D4E0 = var_a2_2 & 0xF; - if (D_8011D4E0 != racer64->racer.unk1D6) { + if (D_8011D4E0 != racer64->racer.vehicleID) { D_8011D4E0 |= 0x80; obj->action = TAJ_MODE_TRANSFORM_BEGIN; taj->unk4 = 0.0f; // Voice clips: Abrakadabra, Alakazam, Alakazoom? - play_taj_voice_clip((racer64->racer.unk1D6 + 0x235), 1); + play_taj_voice_clip((racer64->racer.vehicleID + SOUND_VOICE_TAJ_ABRAKADABRA), 1); } else { obj->action = TAJ_MODE_SET_CHALLENGE; func_800C01D8(&D_800DC978); @@ -2351,7 +2353,7 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { } obj->action = TAJ_MODE_TELEPORT_AWAY_BEGIN; play_sound_global(SOUND_WHOOSH4, NULL); - racer64->racer.unk118 = func_80004B40(racer64->racer.characterId, racer64->racer.unk1D6); + racer64->racer.unk118 = func_80004B40(racer64->racer.characterId, racer64->racer.vehicleID); } break; case TAJ_MODE_TELEPORT_TO_PLAYER_BEGIN: @@ -2409,12 +2411,12 @@ void obj_loop_parkwarden(Object *obj, s32 updateRate) { if (obj->segment.unk38.byte.unk39 > var_a2) { obj->segment.unk38.byte.unk39 -= var_a2; } else { - racer64->racer.unk118 = func_80004B40(racer64->racer.characterId, racer64->racer.unk1D6); + racer64->racer.unk118 = func_80004B40(racer64->racer.characterId, racer64->racer.vehicleID); func_80030DE0(0, taj->unk11, taj->unk12, taj->unk13, taj->unk20, taj->unk22, 0xB4); set_music_player_voice_limit(levelHeader->voiceLimit); play_music(levelHeader->music); func_80001074(levelHeader->instruments); - func_800228EC(racer64->racer.unk1D6); + func_800228EC(racer64->racer.vehicleID); temp_v0_12 = func_8002342C(obj->segment.trans.x_position, obj->segment.trans.z_position); if (temp_v0_12 != NULL) { obj->segment.trans.x_position = temp_v0_12->segment.trans.x_position; @@ -2651,6 +2653,10 @@ void obj_init_checkpoint(Object *obj, LevelObjectEntry_Checkpoint *entry, UNUSED void obj_loop_checkpoint(UNUSED Object *obj, UNUSED s32 updateRate) { } +/** + * Vehicle mode changer initialisation function. + * Sets direction and vehicleID based off spawn info. +*/ void obj_init_modechange(Object *obj, LevelObjectEntry_ModeChange *entry) { f32 phi_f0; Object_ModeChange *obj64; @@ -2667,13 +2673,17 @@ void obj_init_modechange(Object *obj, LevelObjectEntry_ModeChange *entry) { obj64->unk8 = coss_f(obj->segment.trans.y_rotation); obj64->unkC = -((obj64->unk0 * obj->segment.trans.x_position) + (obj64->unk8 * obj->segment.trans.z_position)); obj64->unk10 = entry->unk8; - obj64->unk14 = entry->unkA; + obj64->vehicleID = entry->vehicleID; obj->interactObj->unk14 = 2; obj->interactObj->unk11 = 0; obj->interactObj->unk10 = entry->unk8; obj->interactObj->unk12 = 0; } +/** + * Vehicle mode changer loop behaviour. + * Racers that pass through will have their vehicle type changed. This is usually used for loop-de-loops. +*/ void obj_loop_modechange(Object *obj, UNUSED s32 updateRate) { Object *racerObj; Object **racerObjects; @@ -2695,7 +2705,7 @@ void obj_loop_modechange(Object *obj, UNUSED s32 updateRate) { for (i = 0; i < numRacers; i++) { racerObj = racerObjects[i]; racer = (Object_Racer *) racerObj->unk64; - if (racer->unk1D6 != modeChange->unk14) { + if (racer->vehicleID != modeChange->vehicleID) { 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; @@ -2704,12 +2714,12 @@ void obj_loop_modechange(Object *obj, UNUSED s32 updateRate) { dist = ((modeChange->unk0 * racerObj->segment.trans.x_position) + (modeChange->unk8 * racerObj->segment.trans.z_position) + modeChange->unkC); if (dist < 0.0f) { racer->unk1E0 = 0; - if (modeChange->unk14 == 0) { - racer->unk1D6 = racer->unk1D7; + if (modeChange->vehicleID == VEHICLE_CAR) { + racer->vehicleID = racer->vehicleIDPrev; } else { - racer->unk1D6 = modeChange->unk14; + racer->vehicleID = modeChange->vehicleID; } - if (modeChange->unk14 == 4) { + if (modeChange->vehicleID == VEHICLE_LOOPDELOOP) { if (racer->raceFinished == FALSE) { func_80072348(racer->playerIndex, 8); } @@ -3264,15 +3274,15 @@ void obj_loop_bridge_whaleramp(Object *obj, s32 updateRate) { racerObj = get_racer_object(0); if (racerObj != NULL) { racer = (Object_Racer *) racerObj->unk64; - switch(racer->unk1D6) { + switch(racer->vehicleID) { default: - var_v0 = 1; + var_v0 = VEHICLE_HOVERCRAFT; break; case 1: - var_v0 = 2; + var_v0 = VEHICLE_PLANE; break; case 2: - var_v0 = 4; + var_v0 = VEHICLE_LOOPDELOOP; break; } if (entry->unkF & var_v0) { @@ -3852,7 +3862,7 @@ void obj_loop_weaponballoon(Object *obj, s32 updateRate) { interactObj = obj->interactObj->obj; if (interactObj != NULL && interactObj->segment.header->behaviorId == BHV_RACER) { racer = (Object_Racer *) interactObj->unk64; - if (racer->unk1D6 < 5 || racer->playerIndex != PLAYER_COMPUTER) { + if (racer->vehicleID < VEHICLE_TRICKY|| racer->playerIndex != PLAYER_COMPUTER) { currentBalloon = racer->balloon_type; racer->balloon_type = obj->unk78; if (currentBalloon == racer->balloon_type && racer->balloon_quantity != 0) { @@ -4541,7 +4551,7 @@ void obj_init_midichset(Object *obj, LevelObjectEntry_Midichset *entry) { } void obj_init_bubbler(Object *obj, LevelObjectEntry_Bubbler *entry) { - func_800AF134((Object *) obj->unk6C, entry->unk9, entry->unk8, 0, 0, 0); + func_800AF134((Particle *) obj->unk6C, entry->unk9, entry->unk8, 0, 0, 0); obj->unk78 = entry->unkA; } diff --git a/src/object_models.c b/src/object_models.c index 5df1d093..686b9f10 100644 --- a/src/object_models.c +++ b/src/object_models.c @@ -63,10 +63,10 @@ void func_8005F850(void) { D_8011D644 = (s32) allocate_from_main_pool_safe(0xC00, COLOUR_TAG_GREEN); D_8011D640 = 0; - // Anti-tamper check. + // Antipiracy measure checksum = 0; for (i = 0; i < gFunc80024D54Length; i++) { - checksum += *(u8 *)(((s32)&render_scene) + i); + checksum += *(u8 *)(((s32) &render_scene) + i); } if (checksum != gTractionTableChecksum) { antipiracy_modify_surface_traction_table(); diff --git a/src/objects.c b/src/objects.c index 039b7909..ff115a80 100644 --- a/src/objects.c +++ b/src/objects.c @@ -673,8 +673,8 @@ void func_8000E2B4(void) { gRacersByPort[0] = player; *gRacersByPosition = player; player_64 = &player->unk64->racer; - player_64->unk1D6 = gOverworldVehicle; - player_64->unk1D7 = gOverworldVehicle; + player_64->vehicleID = gOverworldVehicle; + player_64->vehicleIDPrev = gOverworldVehicle; player_64->unk2 = 0; player_64->characterId = (s8) settings->racers[0].character; player_64->playerIndex = 0; @@ -828,9 +828,9 @@ s32 func_8000FAC4(Object *obj, Object_6C *arg1) { particleDataEntry = obj->segment.header->objectParticles; for(i = 0; i < obj->segment.header->unk57; i++) { if ((particleDataEntry[i].upper & 0xFFFF0000) == 0xFFFF0000) { - func_800AF1E0((Object *) &obj->unk6C[i], (particleDataEntry[i].upper >> 8) & 0xFF, particleDataEntry[i].upper & 0xFF); + func_800AF1E0((Particle *) &obj->unk6C[i], (particleDataEntry[i].upper >> 8) & 0xFF, particleDataEntry[i].upper & 0xFF); } else { - func_800AF29C((Object *) &obj->unk6C[i], + func_800AF29C((Particle *) &obj->unk6C[i], (particleDataEntry[i].upper >> 0x18) & 0xFF, (particleDataEntry[i].upper >> 0x10) & 0xFF, particleDataEntry[i].upper & 0xFFFF, @@ -1318,7 +1318,7 @@ void func_80012E28(Object *this) { this->segment.trans.x_rotation += sp_20->x_rotation_offset; this->segment.trans.z_rotation += sp_20->z_rotation_offset; sp_1c = 0.0f; - if (sp_20->unk1D7 < 5) { + if (sp_20->vehicleIDPrev < VEHICLE_TRICKY) { sp_1c = coss_f(sp_20->z_rotation_offset); tmp_f2 = sp_1c; @@ -1397,8 +1397,8 @@ void render_racer_shield(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o if (var_a2 > 10) { var_a2 = 0; } - var_a1 = racer->unk1D6; - if (var_a1 > 2) { + var_a1 = racer->vehicleID; + if (var_a1 >= NUMBER_OF_PLAYER_VEHICLES) { var_a1 = 0; } shield = ((struct RacerShieldGfx *) get_misc_asset(MISC_ASSET_SHIELD_DATA)); @@ -1468,8 +1468,8 @@ void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o gObjectCurrMatrix = *mtx; gObjectCurrVertexList = *vtxList; magnet = (f32 *) get_misc_asset(MISC_ASSET_MAGNET_DATA); - var_a0 = racer->unk1D6; - if (var_a0 < 0 || var_a0 > 2) { + var_a0 = racer->vehicleID; + if (var_a0 < VEHICLE_CAR || var_a0 >= NUMBER_OF_PLAYER_VEHICLES) { var_a0 = 0; } magnet = &magnet[var_a0 * 5]; diff --git a/src/objects.h b/src/objects.h index 2a333cf1..dfc8d69b 100644 --- a/src/objects.h +++ b/src/objects.h @@ -377,7 +377,7 @@ Object **func_8000E988(s32 *arg0, s32 *cnt); s32 getObjectCount(void); s32 func_8000E9C0(void); void func_8000E9D0(Object *arg0); -void gParticlePtrList_addObject(Object *object); +void gParticlePtrList_addObject(); s32 func_80010018(void); s32 func_80010028(s32 arg0); void func_80011390(void); @@ -520,5 +520,6 @@ void func_80008438(Object**, s32, s32); void func_8001E6EC(s8); void func_8001E89C(void); void func_800155B8(void); +void func_800230D0(Object*, Object_Racer*); #endif diff --git a/src/particles.c b/src/particles.c index fba09f0f..a8f071f6 100644 --- a/src/particles.c +++ b/src/particles.c @@ -70,7 +70,7 @@ unk800E2CF0 **gParticlesAssetTable = NULL; s32 gParticleBehavioursAssetTableCount = 0; s32 *gParticleBehavioursAssets = NULL; ParticleBehavior **gParticleBehavioursAssetTable = NULL; -s32 D_800E2D00[2] = { 0, 0 }; +ColourRGBA D_800E2D00[2] = {{{{ 0 }}}, {{{ 0 }}}}; // Are these just Triangles? unk800E2D08 D_800E2D08[5] = { @@ -274,7 +274,7 @@ void init_particle_assets(void) { func_800AE490(); gParticlesAssetTable = (unk800E2CF0 **) load_asset_section_from_rom(ASSET_PARTICLES_TABLE); gParticlesAssetTableCount = -1; - while (((s32) gParticlesAssetTable[gParticlesAssetTableCount + 1]) != -1){ + while (((s32) gParticlesAssetTable[gParticlesAssetTableCount + 1]) != -1) { gParticlesAssetTableCount++; } @@ -285,7 +285,7 @@ void init_particle_assets(void) { gParticleBehavioursAssetTable = (ParticleBehavior **) load_asset_section_from_rom(ASSET_PARTICLE_BEHAVIORS_TABLE); gParticleBehavioursAssetTableCount = -1; - while (((s32) gParticleBehavioursAssetTable[gParticleBehavioursAssetTableCount + 1]) != (-1)) { + while (((s32) gParticleBehavioursAssetTable[gParticleBehavioursAssetTableCount + 1]) != -1) { gParticleBehavioursAssetTableCount++; } @@ -293,8 +293,7 @@ void init_particle_assets(void) { for (i = 0; i < gParticleBehavioursAssetTableCount; i++) { new_var = -1; gParticleBehavioursAssetTable[i] = (ParticleBehavior *) (((u8 *) gParticleBehavioursAssets) + ((s32) gParticleBehavioursAssetTable[i])); - if (((u32) gParticleBehavioursAssetTable[i]->unk9C) != new_var) - { + if (((u32) gParticleBehavioursAssetTable[i]->unk9C) != new_var) { new_var2 = gParticleBehavioursAssetTable[i]->unk9C; gParticleBehavioursAssetTable[i]->unk9C = (s32 *) get_misc_asset((s32) new_var2); } @@ -453,7 +452,7 @@ void func_800AF0F0(Object *obj) { temp_v1->unk1C = temp_t8; } -void func_800AF134(Object *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5) { +void func_800AF134(Particle *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5) { ParticleBehavior *temp; if (arg2 >= gParticlesAssetTableCount) { arg2 = 0; @@ -462,13 +461,13 @@ void func_800AF134(Object *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg arg1 = 0; } temp = gParticleBehavioursAssetTable[arg1]; - if (arg0->segment.particle.unk8 != arg2 || temp != arg0->segment.particle.behaviour) { + if (arg0->unk8 != arg2 || temp != arg0->behaviour) { func_800B2260(arg0); func_800AF29C(arg0, arg1, arg2, arg3, arg4, arg5); } } -void func_800AF1E0(Object *arg0, s32 arg1, s32 arg2) { +void func_800AF1E0(Particle *arg0, s32 arg1, s32 arg2) { ParticleBehavior *temp_v0; if (arg1 < gParticleBehavioursAssetTableCount) { @@ -477,49 +476,49 @@ void func_800AF1E0(Object *arg0, s32 arg1, s32 arg2) { } } -void func_800AF29C(Object *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5) { +void func_800AF29C(Particle *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5) { ParticleBehavior *temp_v1; s32 temp_v0_2; s32 flags; temp_v1 = gParticleBehavioursAssetTable[arg1]; - arg0->segment.particle.unk8 = arg2; - arg0->segment.animFrame = arg3; - arg0->segment.particle.behaviour = temp_v1; - arg0->segment.unk1A = arg4; - arg0->segment.unk1C_half.unk1C = arg5; - arg0->segment.unk1C_half.unk1E = 0; + arg0->unk8 = arg2; + arg0->unk18 = arg3; + arg0->behaviour = temp_v1; + arg0->unk1A = arg4; + arg0->unk1C = arg5; + arg0->unk1E = 0; flags = temp_v1->flags; if (flags & 0x4000) { - arg0->segment.particle.unk4 = 0x4000; - arg0->segment.particle.unk6 = 0; - arg0->segment.particle.pos.x = 0.0f; - arg0->segment.particle.pos.y = 0.0f; - arg0->segment.particle.pos.z = 0.0f; + arg0->flags = 0x4000; + arg0->unk6 = 0; + arg0->pos.x = 0.0f; + arg0->pos.y = 0.0f; + arg0->pos.z = 0.0f; } else if (flags & 0x400) { - arg0->segment.particle.unk6 = 0; - arg0->segment.particle.unk4 = 0x400; + arg0->unk6 = 0; + arg0->flags = 0x400; temp_v0_2 = gParticlesAssetTable[arg2]->unk8; if (temp_v0_2 < 0x100) { - arg0->segment.particle.unk7 = temp_v0_2; + arg0->unk7 = temp_v0_2; } else { - arg0->segment.particle.unk7 = 0xFF; + arg0->unk7 = 0xFF; } - arg0->segment.particle.unkC_400.unkC = (s32 *) allocate_from_main_pool_safe(arg0->segment.particle.unk7 * 4, COLOUR_TAG_SEMITRANS_GREY); - arg0->segment.particle.unkC_400.unk10 = temp_v1->unk14; - arg0->segment.particle.unkC_400.unk12 = temp_v1->unk16; - arg0->segment.particle.unkC_400.unk14 = temp_v1->unk22; - arg0->segment.particle.unkC_400.unk16 = temp_v1->unk24; + arg0->unkC_400.unkC = (s32 *) allocate_from_main_pool_safe(arg0->unk7 * 4, COLOUR_TAG_SEMITRANS_GREY); + arg0->unkC_400.unk10 = temp_v1->unk14; + arg0->unkC_400.unk12 = temp_v1->unk16; + arg0->unkC_400.unk14 = temp_v1->unk22; + arg0->unkC_400.unk16 = temp_v1->unk24; } else { - arg0->segment.particle.unk4 = 0; - arg0->segment.particle.unkC.unkC = temp_v1->unk14; - arg0->segment.particle.unkC.unkE = temp_v1->unk16; - arg0->segment.particle.unkC.unk10 = temp_v1->unk18; - arg0->segment.particle.unkC.unk12 = temp_v1->unk22; - arg0->segment.particle.unkC.unk14 = temp_v1->unk24; - arg0->segment.particle.unkC.unk16 = temp_v1->unk26; + arg0->flags = 0; + arg0->unkC.unkC = temp_v1->unk14; + arg0->unkC.unkE = temp_v1->unk16; + arg0->unkC.unk10 = temp_v1->unk18; + arg0->unkC.unk12 = temp_v1->unk22; + arg0->unkC.unk14 = temp_v1->unk24; + arg0->unkC.unk16 = temp_v1->unk26; } } @@ -548,50 +547,50 @@ GLOBAL_ASM("asm/non_matchings/particles/func_800AF404.s") void func_800AF52C(Object *obj, s32 arg1) { s32 i; - Object_6C_800AF52C *temp_v0; + Particle *temp_v0; ParticleBehavior *temp_v1; - Object *temp; + Particle2 *temp; - temp_v0 = &((Object_6C_800AF52C *) obj->unk6C)[arg1]; - temp_v1 = temp_v0->unk0; + temp_v0 = (Particle *) &obj->unk6C[arg1]; + temp_v1 = temp_v0->behaviour; temp_v0->unkA = 0; - if (temp_v0->unk4 & 0x4000) { + if (temp_v0->flags & 0x4000) { ((ObjectSegment *) temp_v0)->trans.x_position = obj->segment.trans.x_position; ((ObjectSegment *) temp_v0)->trans.y_position = obj->segment.trans.y_position; ((ObjectSegment *) temp_v0)->trans.z_position = obj->segment.trans.z_position; - } else if (temp_v0->unk4 & 0x400) { + } else if (temp_v0->flags & 0x400) { temp_v0->unkA = gParticlesAssetTable[temp_v0->unk8]->unk17 << 8; if (temp_v0->unk6 > 0) { // Useless if statement, since the loop already does this. for (i = 0; i < temp_v0->unk6; i++){ - temp = temp_v0->unkC_arr[i]; - temp->segment.unk38.half.unk3A = 0; + temp = temp_v0->unkC_60[i]; + temp->unk38.half.unk3A = 0; } } if (temp_v1->flags & 1) { - temp_v0->unk10 = temp_v1->unk14; - temp_v0->unk12 = temp_v1->unk16; + temp_v0->unkC.unk10 = temp_v1->unk14; + temp_v0->unkC.unk12 = temp_v1->unk16; } if (temp_v1->flags & 4) { - temp_v0->unk14 = temp_v1->unk22; - temp_v0->unk16 = temp_v1->unk24; + temp_v0->unkC.unk14 = temp_v1->unk22; + temp_v0->unkC.unk16 = temp_v1->unk24; } } else { if (temp_v1->flags & 1) { temp_v0->unk6 = 0; - temp_v0->unkC = temp_v1->unk14; - temp_v0->unkE = temp_v1->unk16; - temp_v0->unk10 = temp_v1->unk18; + temp_v0->unkC.unkC = temp_v1->unk14; + temp_v0->unkC.unkE = temp_v1->unk16; + temp_v0->unkC.unk10 = temp_v1->unk18; } if (temp_v1->flags & 4) { temp_v0->unk7 = 0; - temp_v0->unk12 = temp_v1->unk22; - temp_v0->unk14 = temp_v1->unk24; - temp_v0->unk16 = temp_v1->unk26; + temp_v0->unkC.unk12 = temp_v1->unk22; + temp_v0->unkC.unk14 = temp_v1->unk24; + temp_v0->unkC.unk16 = temp_v1->unk26; } } - temp_v0->unk4 &= 0xFDFF; - temp_v0->unk4 |= 0xA000; + temp_v0->flags &= 0xFDFF; + temp_v0->flags |= 0xA000; obj->segment.unk1A++; } @@ -607,34 +606,34 @@ void func_800AF6E4(Object *obj, s32 arg1) { GLOBAL_ASM("asm/non_matchings/particles/func_800AF714.s") GLOBAL_ASM("asm/non_matchings/particles/func_800AFC3C.s") -void func_800AFE5C(s32 arg0, Object_6C_800AF52C *arg1) { - Object *temp_s0; +void func_800AFE5C(unk800B1CB8 *arg0, Particle *arg1) { + Particle2 *temp_s0; Object *tempObj; - Object *tempObj2; + Particle2 *tempObj2; s32 i; ParticleBehavior *temp_s4; - temp_s4 = arg1->unk0; - if (arg1->unk4 & 0x4000) { + temp_s4 = arg1->behaviour; + if (arg1->flags & 0x4000) { tempObj = func_800B0BAC(); if (tempObj != NULL) { func_8000E9D0(tempObj); } - arg1->unk4 &= 0xDFFF; + arg1->flags &= 0xDFFF; if (arg1->unk6 + 64 > 255) { arg1->unk6 = 255; } else { arg1->unk6 += 64; } - } else if (arg1->unk4 & 0x400) { + } else if (arg1->flags & 0x400) { if (arg1->unk6 < arg1->unk7) { temp_s0 = func_800B0698(arg0, arg1); - arg1->unk4 &= 0xDFFF; + arg1->flags &= 0xDFFF; if (temp_s0 != NULL) { - func_8000E9D0(temp_s0); - temp_s0->unk74_bytes.first = arg1->unk6; - temp_s0->segment.unk40 |= 0x2000; - arg1->unkC_arr[arg1->unk6] = temp_s0; + func_8000E9D0((Object *) temp_s0); + temp_s0->unk74 = arg1->unk6; + temp_s0->unk40 |= 0x2000; + arg1->unkC_60[arg1->unk6] = temp_s0; arg1->unk6++; } } @@ -644,10 +643,10 @@ void func_800AFE5C(s32 arg0, Object_6C_800AF52C *arg1) { for (i = 0; i < temp_s4->unk42; i++) { tempObj2 = func_800B1130(arg0, arg1); if (tempObj2 != NULL) { - func_8000E9D0(tempObj2); + func_8000E9D0((Object *) tempObj2); func_800B22FC(tempObj2, arg1->unkA); } - arg1->unk4 &= ~0x2000; + arg1->flags &= ~0x2000; } } } @@ -710,7 +709,7 @@ void func_800B0010(Object *arg0, Object *arg1, unk800B03C0_arg2 *arg2, Object *a } f32_vec3_apply_object_rotation3((ObjectTransform* ) &sp28, (f32*) &sp30); } else { - f32_vec3_apply_object_rotation3((ObjectTransform* )&arg2->unk12, (f32*) &sp30); + f32_vec3_apply_object_rotation3((ObjectTransform* ) &arg2->unk12, (f32*) &sp30); } f32_vec3_apply_object_rotation((ObjectTransform* ) arg0->segment.unk3C_a.unk3C_ptr, (f32*) &sp30); arg0->segment.x_velocity += sp30.x; @@ -770,9 +769,345 @@ void func_800B03C0(Object *arg0, ObjectTransform *arg1, unk800B03C0_arg2 *arg2, arg0->segment.trans.z_position += arg1->z_position; } -GLOBAL_ASM("asm/non_matchings/particles/func_800B0698.s") +Particle2 *func_800B0698(unk800B1CB8 *arg0, Particle *arg1) { + unk800E2CF0 *sp2C; + unk800E2CD8 *var_v0; + TextureHeader **sp24; + ParticleBehavior *sp20; + f32 temp_f0; + f32 temp_f14; + f32 temp_f2; + + sp2C = gParticlesAssetTable[arg1->unk8]; + if (sp2C->unk0 != 4) { + return NULL; + } + sp20 = arg1->behaviour; + var_v0 = (unk800E2CD8 *) func_800B1CB8(4); + if (var_v0 == NULL) { + return (Particle2 *) var_v0; + } + var_v0->unk0.unk2E = arg0->unk2E; + var_v0->unk0.unk6 = -0x8000; + var_v0->unk0.unk39 = sp2C->unk1; + var_v0->unk0.unk40 = sp2C->unk2; + var_v0->unk0.unk3C = arg0; + var_v0->unk70 = arg1; + var_v0->unk0.unk8 = sp2C->unk10 * sp20->unk50; + var_v0->unk0.unk28 = sp2C->unk10 * sp20->unk54; + var_v0->unk0.unk3A = sp2C->unk8; + var_v0->unk0.unk34 = 0.0f; + var_v0->unk0.unk38 = 0; + var_v0->unk0.unk6C.r = sp2C->unk14; + var_v0->unk0.unk6C.g = sp2C->unk15; + var_v0->unk0.unk6C.b = sp2C->unk16; + var_v0->unk0.unk6C.a = sp2C->unk17; + if (var_v0->unk0.unk40 & 0x800 && arg0->unk54 != NULL) { + var_v0->unk0.unk4A = *arg0->unk54 * 255.0f; + } else { + var_v0->unk0.unk4A = 0xFF; + } + var_v0->unk0.unk60 = sp2C->unkE; + if (arg1->flags & 0x100) { + var_v0->unk0.unk5C = arg1->unkA; + } else { + var_v0->unk0.unk5C = sp2C->unkC << 8; + } + if (sp2C->unkC < 255) { + if (var_v0->unk0.unk40 & 0x1000) { + var_v0->unk0.unk6 |= 0x100; + } else { + var_v0->unk0.unk6 |= 0x80; + } + } + if (var_v0->unk0.unk60 < var_v0->unk0.unk3A) { + var_v0->unk0.unk5E = ((sp2C->unkD << 8) - (var_v0->unk0.unk5C & 0xFFFF)) / (var_v0->unk0.unk3A - var_v0->unk0.unk60); + } else { + var_v0->unk0.unk5E = 0; + } + func_800B03C0((Object *) var_v0, (ObjectTransform *) arg0, (unk800B03C0_arg2 *) arg1, (Object *)sp20); + if (sp20->flags & 0x80) { + var_v0->unk0.unk0 = sp20->unk44; + var_v0->unk0.unk2 = sp20->unk46; + var_v0->unk0.unk4 = sp20->unk48; + } else { + var_v0->unk0.unk0 = arg0->unk0 + sp20->unk44; + var_v0->unk0.unk2 = arg0->unk2 + sp20->unk46; + var_v0->unk0.unk4 = arg0->unk4 + sp20->unk48; + } + var_v0->unk0.unk62 = sp20->unk4A; + var_v0->unk0.unk64 = sp20->unk4C; + var_v0->unk0.unk66 = sp20->unk4E; + func_800B0010((Object *) var_v0, (Object *) arg0, (unk800B03C0_arg2 *) arg1, (Object *)sp20); + var_v0->unk0.unk68 = D_800E2E2C[(var_v0->unk0.unk40 >> 4) & 7]; + if (var_v0->unk0.unk39 == 5) { + temp_f0 = var_v0->unk0.unk1C; + temp_f2 = var_v0->unk0.unk20; + temp_f14 = var_v0->unk0.unk24; + var_v0->unk0.unk58 = sqrtf((temp_f0 * temp_f0) + (temp_f2 * temp_f2) + (temp_f14 * temp_f14)); + } + if (sp20->flags & 2) { + arg1->unkC.unk10 += sp20->unk1C; + arg1->unkC.unk12 += sp20->unk1E; + } + if (sp20->flags & 8) { + arg1->unkC.unk14 += sp20->unk2A; + arg1->unkC.unk16 += sp20->unk2C; + } + var_v0->unk0.unk1A = sp2C->unk6; + var_v0->unk0.unk18 = 0; + sp24 = (TextureHeader **) var_v0->unk0.unk44; + if (sp2C->unk4 == -1) { + *sp24 = NULL; + } else { + *sp24 = load_texture(sp2C->unk4); + if ((*sp24) != NULL) { + if ((*sp24)->flags & 4) { + if (var_v0->unk0.unk40 & 0x1000) { + var_v0->unk0.unk6 |= 0x100; + } else { + var_v0->unk0.unk6 |= 0x80; + } + } + if ((var_v0->unk0.unk40 & 3) == 2) { + var_v0->unk0.unk18 = (*sp24)->numOfTextures - 1; + } + } + } + var_v0->unk75 = 0; + var_v0->unk76 = ((u32) (u16) sp2C->unkA) >> 10; + var_v0->unk77 = 0; + if (*sp24 == NULL) { + func_800B2040((Particle2 *) var_v0); + return NULL; + } + return (Particle2 *) var_v0; +} + GLOBAL_ASM("asm/non_matchings/particles/func_800B0BAC.s") -GLOBAL_ASM("asm/non_matchings/particles/func_800B1130.s") + +Particle2 *func_800B1130(unk800B1CB8 *arg0, Particle *arg1) { + s32 sp3C; + unk800E2CF0 *sp38; + unk800B1CB8* var_v0; + TextureHeader **sp30; + ParticleBehavior *partBeh; + unk800B1130_SP28 *sp28; + f32 sp24; + s8 sp23; + + sp38 = gParticlesAssetTable[arg1->unk8]; + if (sp38->unk0 == 3 || sp38->unk0 == 4) { + return NULL; + } + partBeh = arg1->behaviour; + sp28 = (unk800B1130_SP28 *) partBeh->unk9C; + + var_v0 = func_800B1CB8(sp38->unk0); + if (var_v0 == NULL) { + return (Particle2 *) var_v0; + } + var_v0->unk2E = arg0->unk2E; + var_v0->unk6 = -0x8000; + var_v0->unk39 = sp38->unk1; + var_v0->unk40 = sp38->unk2; + var_v0->unk3C = arg0; + if (var_v0->unk40 & 0x800 && arg0->unk54 != NULL) { + var_v0->unk4A = *arg0->unk54 * 255.0f; + } else { + var_v0->unk4A = 255; + } + sp24 = partBeh->unk50; + if (partBeh->unk5C & 0x20000) { + sp24 += (f32) get_random_number_from_range(-partBeh->unk8C, partBeh->unk8C) * 0.00001525878906; + } + var_v0->unk8 = sp38->unk10 * sp24; + sp24 = partBeh->unk54; + if (partBeh->unk5C & 0x40000) { + sp24 += (f32) get_random_number_from_range(-partBeh->unk90, partBeh->unk90) * 0.00001525878906; + } + if (partBeh->flags & 0x1000) { + var_v0->unk28 = sqrtf((arg0->unk1C * arg0->unk1C) + (arg0->unk20 * arg0->unk20) + (arg0->unk24 * arg0->unk24)) * sp24 * 0.1f; + } else { + var_v0->unk28 = sp38->unk10 * sp24; + } + var_v0->unk3A = get_random_number_from_range(-sp38->unkA, sp38->unkA) + sp38->unk8; + var_v0->unk38 = 0; + var_v0->unk34 = 0.0f; + if (D_800E2D00[0].word != 0) { + var_v0->unk6C.word = D_800E2D00[0].word; + } else if ((s32) sp28 != -1) { + arg1->unk1E++; + if (arg1->unk1E >= sp28->unk0) { + arg1->unk1E = 0; + } + var_v0->unk6C.r = sp28[arg1->unk1E + 2].r; + var_v0->unk6C.g = sp28[arg1->unk1E + 2].g; + var_v0->unk6C.b = sp28[arg1->unk1E + 2].b; + var_v0->unk6C.a = sp28[arg1->unk1E + 2].a; + } else { + var_v0->unk6C.r = sp38->unk14; + var_v0->unk6C.g = sp38->unk15; + var_v0->unk6C.b = sp38->unk16; + var_v0->unk6C.a = sp38->unk17; + } + sp3C = partBeh->unk5C & 0xF00000; + if (sp3C != 0) { + if (sp3C & 0x100000) { + var_v0->unk6C.r += get_random_number_from_range(-partBeh->unk98, partBeh->unk98); + } + if ((sp3C << 10) < 0) { + var_v0->unk6C.g += get_random_number_from_range(-partBeh->unk99, partBeh->unk99); + } + if ((sp3C << 9) < 0) { + var_v0->unk6C.b += get_random_number_from_range(-partBeh->unk9A, partBeh->unk9A); + } + if ((sp3C << 8) < 0) { + var_v0->unk6C.a += get_random_number_from_range(-partBeh->unk9B, partBeh->unk9B); + } + } + var_v0->unk60 = sp38->unkE; + var_v0->unk5C = sp38->unkC * D_800E2EEC; + if (sp38->unkC < 0xFF) { + if (var_v0->unk40 & 0x1000) { + var_v0->unk6 |= 0x100; + } else { + var_v0->unk6 |= 0x80; + } + } + if (var_v0->unk60 < var_v0->unk3A) { + var_v0->unk5E = (s16) (((sp38->unkD - sp38->unkC) * D_800E2EEC) / (var_v0->unk3A - var_v0->unk60)); + } else { + var_v0->unk5E = 0; + } + sp23 = 0; + var_v0->unk1A = sp38->unk6; + if (var_v0->unk2C == 0x80) { + var_v0->unk44 = (unk800B1CB8_44 *) func_8007C12C(sp38->unk4, 0); + if (var_v0->unk44 != 0) { + if ((*var_v0->unk44->unk8)->unk6 & 4) { + if (var_v0->unk40 & 0x1000) { + var_v0->unk6 |= 0x100; + } else { + var_v0->unk6 |= 0x80; + } + } + if (partBeh->flags & 0x800) { + var_v0->unk18 = get_random_number_from_range(0, var_v0->unk44->unk0 - 1) << 8; + if ((var_v0->unk40 & 3) == 2) { + var_v0->unk18 |= 0xFF; + } + } else if ((var_v0->unk40 & 3) == 2) { + var_v0->unk18 = (var_v0->unk44->unk0 << 8) - 1; + } else { + var_v0->unk18 = 0; + } + } else { + sp23 = 1; + } + } else if ((var_v0->unk2C == 2) || (var_v0->unk2C == 1)) { + sp30 = (TextureHeader **) var_v0->unk44; + if (sp30 != 0) { + (*sp30) = load_texture(sp38->unk4); + if ((*sp30) != NULL) { + if ((*sp30)->flags & 4) { + if (var_v0->unk40 & 0x1000) { + var_v0->unk6 |= 0x100; + } else { + var_v0->unk6 |= 0x80; + } + } + if (partBeh->flags & 0x800) { + var_v0->unk18 = get_random_number_from_range(0, ((*sp30)->numOfTextures >> 8) - 1) << 8; + if ((var_v0->unk40 & 3) == 2) { + var_v0->unk18 |= 0xFF; + } + } else if ((var_v0->unk40 & 3) == 2) { + var_v0->unk18 = (*sp30)->numOfTextures - 1; + } else { + var_v0->unk18 = 0; + } + } else { + sp23 = 1; + } + } + } + if (sp23 == 0) { + if (var_v0->unk2C == 1) { + func_800AF0A4((Object* ) var_v0); + } + if (var_v0->unk2C == 2) { + func_800AF0F0((Object* ) var_v0); + } + } + func_800B03C0((Object *) var_v0, (ObjectTransform *) arg0, (unk800B03C0_arg2 *) arg1, (Object *) partBeh); + if (partBeh->flags & 0x80) { + var_v0->unk0 = partBeh->unk44; + var_v0->unk2 = partBeh->unk46; + var_v0->unk4 = partBeh->unk48; + } else { + var_v0->unk0 = arg0->unk0 + partBeh->unk44; + var_v0->unk2 = arg0->unk2 + partBeh->unk46; + var_v0->unk4 = arg0->unk4 + partBeh->unk48; + } + sp3C = partBeh->unk5C & 0x3800; + if (sp3C != 0) { + if (sp3C & 0x800) { + var_v0->unk0 += get_random_number_from_range(-partBeh->unk80, partBeh->unk80); + } + if (sp3C & 0x1000) { + var_v0->unk2 += get_random_number_from_range(-partBeh->unk82, partBeh->unk82); + } + if (sp3C & 0x2000) { + var_v0->unk4 += get_random_number_from_range(-partBeh->unk84, partBeh->unk84); + } + } + var_v0->unk62 = partBeh->unk4A; + var_v0->unk64 = partBeh->unk4C; + var_v0->unk66 = partBeh->unk4E; + sp3C = partBeh->unk5C & 0x1C000; + if (sp3C != 0) { + if (sp3C & 0x4000) { + var_v0->unk62 += get_random_number_from_range(-partBeh->unk86, partBeh->unk86); + } + if (sp3C & 0x8000) { + var_v0->unk64 += get_random_number_from_range(-partBeh->unk88, partBeh->unk88); + } + if ((sp3C << 0xF) < 0) { + var_v0->unk66 += get_random_number_from_range(-partBeh->unk8A, partBeh->unk8A); + } + } + func_800B0010((Object *) var_v0, (Object *) arg0, (unk800B03C0_arg2 *) arg1, (Object *) partBeh); + var_v0->unk68 = D_800E2E2C[(var_v0->unk40 >> 4) & 7]; + if (var_v0->unk39 == 5) { + var_v0->unk58 = sqrtf((var_v0->unk1C * var_v0->unk1C) + (var_v0->unk20 * var_v0->unk20) + (var_v0->unk24 * var_v0->unk24)); + } + if (partBeh->flags & 2) { + arg1->unk6++; + if (arg1->unk6 >= partBeh->unk1A) { + arg1->unkC.unkC += partBeh->unk1C; + arg1->unkC.unkE += partBeh->unk1E; + arg1->unkC.unk10 += partBeh->unk18; + arg1->unk6 -= partBeh->unk1A; + } + } + if (partBeh->flags & 8) { + arg1->unk7++; + if (arg1->unk7 >= partBeh->unk28) { + arg1->unkC.unk12 += partBeh->unk2A; + arg1->unkC.unk14 += partBeh->unk2C; + arg1->unkC.unk16 += partBeh->unk2E; + arg1->unk7 -= partBeh->unk28; + } + } + if (var_v0->unk44 == 0) { + func_800B2040((Particle2 *) var_v0); + return NULL; + } else { + return (Particle2 *) var_v0; + } +} + unk800B1CB8 *func_800B1CB8(s32 arg0) { s32 i; @@ -869,14 +1204,14 @@ unk800B1CB8 *func_800B1CB8(s32 arg0) { return var_v1; } -void func_800B2040(unk800B2260_C *arg0) { +void func_800B2040(Particle2 *arg0) { TextureHeader *tex; switch (arg0->unk2C) { case 0x80: if (D_800E2CB8 > 0) { if (arg0->unk44 != NULL) { - free_sprite(arg0->unk44); + free_sprite((Sprite *) arg0->unk44); } D_800E2CB8--; arg0->unk2C = 0; @@ -887,7 +1222,7 @@ void func_800B2040(unk800B2260_C *arg0) { case 1: if (D_800E2CA0 > 0) {\ if (((unk800B2260_C_44 *) arg0->unk44)->texture != NULL) { - free_texture(((DrawTexture *) arg0->unk44)->texture); + free_texture(arg0->unk44_1->texture); } D_800E2CA0--; arg0->unk2C = 0; @@ -895,7 +1230,7 @@ void func_800B2040(unk800B2260_C *arg0) { break; case 2: if (D_800E2CAC > 0) { - tex = ((unk800B2260_C_44 *) arg0->unk44)->texture; + tex = arg0->unk44_1->texture; if (tex != NULL) { free_texture(tex); } @@ -905,7 +1240,7 @@ void func_800B2040(unk800B2260_C *arg0) { break; case 3: if (D_800E2CC4 > 0) { - tex = ((unk800B2260_C_44 *) arg0->unk44)->texture; + tex = arg0->unk44_1->texture; if (tex != NULL) { free_texture(tex); } @@ -916,7 +1251,7 @@ void func_800B2040(unk800B2260_C *arg0) { case 4: if (D_800E2CD0 > 0) { func_800B263C(arg0); - tex = ((unk800B2260_C_44* ) arg0->unk44)->texture; + tex = arg0->unk44_1->texture; if (tex != NULL) { free_texture(tex); } @@ -928,76 +1263,76 @@ void func_800B2040(unk800B2260_C *arg0) { } -void func_800B2260(Object *arg0) { - unk800B2260_C *temp_v0; +void func_800B2260(Particle *arg0) { + Particle2 *temp_v0; s32 i; - if (arg0->segment.particle.unk4 & 0x400) { - if (arg0->segment.particle.unkC_60 != NULL) { - for (i = 0; i < arg0->segment.particle.unk6; i++) { - temp_v0 = arg0->segment.particle.unkC_60[i]; - temp_v0->unk3A = 0; + if (arg0->flags & 0x400) { + if (arg0->unkC_60 != NULL) { + for (i = 0; i < arg0->unk6; i++) { + temp_v0 = arg0->unkC_60[i]; + temp_v0->unk38.half.unk3A = 0; temp_v0->unk70 = 0; } - free_from_memory_pool(arg0->segment.particle.unkC_60); - arg0->segment.particle.unkC_60 = NULL; + free_from_memory_pool(arg0->unkC_60); + arg0->unkC_60 = NULL; } } } -void func_800B22FC(Object *arg0, s32 arg1) { +void func_800B22FC(Particle2 *arg0, s32 arg1) { LevelModelSegmentBoundingBox *temp_v0_2; - Object *sp20; + Particle2 *sp20; D_80127C80 = arg1; sp20 = NULL; - if (arg0->segment.unk2C.half.upper == 3) { + if (arg0->unk2C == 3) { func_800B26E0(); } else { - if (arg0->segment.unk40 & 3) { + if (arg0->unk40 & 3) { if (D_80127C80 > 0) { sp20 = NULL; func_800B2FBC(arg0); sp20 = NULL; } } - if (arg0->segment.unk2C.half.upper == 4) { + if (arg0->unk2C == 4) { sp20 = arg0; - arg0->unk74_bytes.second = 1 - arg0->unk74_bytes.second; - arg0->unk74_bytes.fourth = 0; + arg0->unk75 = 1 - arg0->unk75; + arg0->unk77 = 0; } if (sp20 == NULL || (sp20 != NULL && sp20->unk70 != 0)) { - if (arg0->segment.unk38.byte.unk39 == 2) { + if (arg0->unk38.byte.unk39 == 2) { func_800B3358(arg0); - } else if (arg0->segment.unk38.byte.unk39 == 3) { + } else if (arg0->unk38.byte.unk39 == 3) { func_800B3240(arg0); - } else if (arg0->segment.unk38.byte.unk39 == 4) { + } else if (arg0->unk38.byte.unk39 == 4) { func_800B3140(arg0); - } else if (arg0->segment.unk38.byte.unk39 == 5) { + } else if (arg0->unk38.byte.unk39 == 5) { func_800B3564(arg0); } else { func_800B34B0(arg0); } } - temp_v0_2 = func_8002A2DC(arg0->segment.unk2C.half.lower); + temp_v0_2 = func_8002A2DC(arg0->unk2E); if (temp_v0_2 != NULL) { - if (arg0->segment.trans.x_position < temp_v0_2->x1 || temp_v0_2->x2 < arg0->segment.trans.x_position || arg0->segment.trans.y_position < temp_v0_2->y1 || temp_v0_2->y2 < arg0->segment.trans.y_position || arg0->segment.trans.z_position < temp_v0_2->z1 || temp_v0_2->z2 < arg0->segment.trans.z_position) { - arg0->segment.unk2C.half.lower = get_level_segment_index_from_position(arg0->segment.trans.x_position, arg0->segment.trans.y_position, arg0->segment.trans.z_position); + if (arg0->trans.x_position < temp_v0_2->x1 || temp_v0_2->x2 < arg0->trans.x_position || arg0->trans.y_position < temp_v0_2->y1 || temp_v0_2->y2 < arg0->trans.y_position || arg0->trans.z_position < temp_v0_2->z1 || temp_v0_2->z2 < arg0->trans.z_position) { + arg0->unk2E = get_level_segment_index_from_position(arg0->trans.x_position, arg0->trans.y_position, arg0->trans.z_position); } } else { - arg0->segment.unk2C.half.lower = get_level_segment_index_from_position(arg0->segment.trans.x_position, arg0->segment.trans.y_position, arg0->segment.trans.z_position); + arg0->unk2E = get_level_segment_index_from_position(arg0->trans.x_position, arg0->trans.y_position, arg0->trans.z_position); } - arg0->segment.unk38.half.unk3A -= D_80127C80; - if (arg0->segment.unk38.half.unk3A <= 0) { + arg0->unk38.half.unk3A -= D_80127C80; + if (arg0->unk38.half.unk3A <= 0) { gParticlePtrList_addObject(arg0); } else { if (arg0->unk60_halfs.unk60 == 0) { arg0->unk5C_halfs.unk5C += D_80127C80 * arg0->unk5C_halfs.unk5E; if (arg0->unk5C_halfs.unk5C < 0xFF) { - if (arg0->segment.unk40 & 0x1000) { - arg0->segment.trans.unk6 |= 0x100; + if (arg0->unk40 & 0x1000) { + arg0->trans.unk6 |= 0x100; } else { - arg0->segment.trans.unk6 |= 0x80; + arg0->trans.unk6 |= 0x80; } } } else { @@ -1012,21 +1347,21 @@ void func_800B22FC(Object *arg0, s32 arg1) { } -void func_800B263C(unk800B2260_C *arg0) { - Object *new_var; - unk800B2260_C *new_var2; - Object *temp_v0; +void func_800B263C(Particle2 *arg0) { + Particle *new_var; + Particle2 *new_var2; + Particle *temp_v0; s32 i; - temp_v0 = (Object *) arg0->unk70; + temp_v0 = (Particle *) arg0->unk70; if (temp_v0 != NULL) { new_var = temp_v0; - if (temp_v0->segment.particle.unk6 != 0) { - if (arg0 == temp_v0->segment.particle.unkC_60[arg0->unk74]) { - temp_v0->segment.particle.unk6--; - for (i = arg0->unk74; i < temp_v0->segment.particle.unk6; i++) { - new_var->segment.particle.unkC_60[i] = new_var->segment.particle.unkC_60[i + 1]; - new_var2 = new_var->segment.particle.unkC_60[i]; + if (temp_v0->unk6 != 0) { + if (arg0 == temp_v0->unkC_60[arg0->unk74]) { + temp_v0->unk6--; + for (i = arg0->unk74; i < temp_v0->unk6; i++) { + new_var->unkC_60[i] = new_var->unkC_60[i + 1]; + new_var2 = new_var->unkC_60[i]; new_var2->unk74 = i; } } @@ -1036,7 +1371,7 @@ void func_800B263C(unk800B2260_C *arg0) { GLOBAL_ASM("asm/non_matchings/particles/func_800B26E0.s") -void func_800B2FBC(Object *arg0) { +void func_800B2FBC(Particle2 *arg0) { s32 someFlag; s32 keepGoing; s32 i; @@ -1048,47 +1383,47 @@ void func_800B2FBC(Object *arg0) { keepGoing = -1; i = 128; // This is needed to match. - if (arg0->segment.unk2C.half.upper == i) { - var_a1 = arg0->unk44_0->unk0 * 256; + if (arg0->unk2C == i) { + var_a1 = arg0->unk44->unk0 * 256; } else { - var_a1 = arg0->unk44_0->unk0Ptr->unk12; + var_a1 = arg0->unk44->unk0Ptr->unk12; } - someFlag4 = arg0->segment.unk40 & 1; - someFlag2 = arg0->segment.unk40 & 2; - someFlag3 = arg0->segment.unk40 & 4; - someFlag = arg0->segment.unk40 & 8; + someFlag4 = arg0->unk40 & 1; + someFlag2 = arg0->unk40 & 2; + someFlag3 = arg0->unk40 & 4; + someFlag = arg0->unk40 & 8; for (i = 0; (i++ < D_80127C80) && keepGoing;) { if (!someFlag) { - arg0->segment.animFrame += arg0->segment.unk1A; - if (arg0->segment.animFrame >= var_a1) { + arg0->unk18 += arg0->unk1A; + if (arg0->unk18 >= var_a1) { if (someFlag2) { - arg0->segment.animFrame = ((var_a1 * 2) - arg0->segment.animFrame) - 1; + arg0->unk18 = ((var_a1 * 2) - arg0->unk18) - 1; someFlag = TRUE; - arg0->segment.unk40 |= 8; + arg0->unk40 |= 8; } else if (someFlag3) { - arg0->segment.animFrame -= var_a1; + arg0->unk18 -= var_a1; } else { - arg0->segment.animFrame = var_a1 - 1; + arg0->unk18 = var_a1 - 1; keepGoing = FALSE; - arg0->segment.unk40 &= ~3; + arg0->unk40 &= ~3; } } } else { - arg0->segment.animFrame -= arg0->segment.unk1A; - if (arg0->segment.animFrame < 0) { + arg0->unk18 -= arg0->unk1A; + if (arg0->unk18 < 0) { if (someFlag3) { if (someFlag4) { - arg0->segment.animFrame = -arg0->segment.animFrame; + arg0->unk18 = -arg0->unk18; someFlag = FALSE; - arg0->segment.unk40 &= ~8; + arg0->unk40 &= ~8; } else { - arg0->segment.animFrame += var_a1; + arg0->unk18 += var_a1; } } else { - arg0->segment.animFrame = 0; + arg0->unk18 = 0; keepGoing = FALSE; - arg0->segment.unk40 &= ~3; + arg0->unk40 &= ~3; } } } diff --git a/src/particles.h b/src/particles.h index b5668f09..b13bbfd5 100644 --- a/src/particles.h +++ b/src/particles.h @@ -6,9 +6,20 @@ #include "libultra_internal.h" typedef struct unk800E2CF0 { - u8 pad0[8]; + u8 unk0; + u8 unk1; + u16 unk2; + s16 unk4; + s16 unk6; s16 unk8; - u8 padA[13]; + s16 unkA; + u8 unkC; + u8 unkD; + s16 unkE; + f32 unk10; + u8 unk14; + u8 unk15; + u8 unk16; u8 unk17; } unk800E2CF0; @@ -46,41 +57,241 @@ typedef struct unk800B2260_C_44 { TextureHeader *texture; } unk800B2260_C_44; +typedef struct unk800B1CB8_44_8 { + u8 pad0[6]; + s16 unk6; +} unk800B1CB8_44_8; +typedef struct unk800B1CB8_44 { + s16 unk0; + u8 pad2[6]; + unk800B1CB8_44_8 **unk8; +} unk800B1CB8_44; + typedef struct unk800B1CB8 { - u8 pad0[0x2C]; + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + f32 unk8; + u8 padC[0xC]; + s16 unk18; + s16 unk1A; + f32 unk1C; + f32 unk20; + f32 unk24; + f32 unk28; s16 unk2C; - u8 pad2E[0x1A]; + s16 unk2E; + u8 pad30[0x4]; + f32 unk34; + u8 unk38; + u8 unk39; + s16 unk3A; + struct unk800B1CB8 *unk3C; + s32 unk40; + struct unk800B1CB8_44 *unk44; s16 unk48; - u8 pad4A[0x26]; + s16 unk4A; + u8 pad4C[0x8]; + f32 *unk54; + f32 unk58; + s16 unk5C; + s16 unk5E; + s16 unk60; + s16 unk62; + s16 unk64; + s16 unk66; + f32 unk68; + ColourRGBA unk6C; } unk800B1CB8; /* Size: 0x78 bytes */ typedef struct unk800E2CD8 { - unk800B1CB8 unk0; - u8 pad80[8]; + unk800B1CB8 unk0; + struct Particle *unk70; + u8 pad74; + u8 unk75; + u8 unk76; + u8 unk77; } unk800E2CD8; -/* Size: 32 bytes */ -typedef struct Object_6C_800AF52C { - ParticleBehavior *unk0; - s16 unk4; - u8 unk6; - u8 unk7; - s16 unk8; - s16 unkA; +typedef struct unk800B1130_8 { + u8 pad0[6]; + s16 unk6; +} unk800B1130_8; + +typedef struct unk800B1130 { + u8 pad0[8]; + unk800B1130_8 **unk8; + u8 padC[0x6]; + u16 unk12; +} unk800B1130; + +typedef struct unk800B1130_SP28 { + s32 unk0; + u8 r; + u8 g; + u8 b; + u8 a; +} unk800B1130_SP28; + +typedef struct Particle { union { - Object **unkC_arr; - struct { - s16 unkC; - s16 unkE; - }; + /* 0x0000 */ ParticleBehavior *behaviour; + /* 0x0000 */ s32 unk0; }; - s16 unk10; - s16 unk12; - s16 unk14; - s16 unk16; - u8 pad18[0x8]; -} Object_6C_800AF52C; + /* 0x0004 */ s16 flags; + /* 0x0006 */ u8 unk6; + /* 0x0007 */ u8 unk7; + /* 0x0008 */ s16 unk8; + /* 0x000A */ s16 unkA; + union { + /* 0x000C */ Vec3f pos; + /* 0x000C */ unk800AF29C_C unkC; + /* 0x000C */ struct Particle2 **unkC_60; + /* 0x000C */ unk800AF29C_C_400 unkC_400; + }; + /* 0x0018 */ s16 unk18; + /* 0x0018 */ s16 unk1A; + /* 0x001C */ s16 unk1C; + /* 0x001E */ s16 unk1E; + /* 0x0020 */ s16 unk20; + /* 0x0022 */ s16 unk22; + /* 0x0024 */ s16 unk24; + /* 0x0026 */ s16 unk26; + /* 0x0028 */ s16 unk28; + /* 0x002A */ s16 unk2A; + /* 0x002C */ s16 unk2C; + /* 0x002E */ s16 unk2E; + /* 0x0030 */ f32 unk30; + /* 0x0034 */ f32 unk34; + union { + struct { + /* 0x0038 */ u8 unk38; + /* 0x0039 */ u8 unk39; + /* 0x003A */ s8 unk3A; + /* 0x003B */ s8 unk3B; + } byte; + struct { + /* 0x0038 */ s16 unk38; + /* 0x003A */ s16 unk3A; + } half; + f32 unk38_f32; + } unk38; + /* 0x003C */ f32 unk3C; + /* 0x0040 */ s32 unk40; + + union { + /* 0x0044 */ unk800B0698_44 *unk44; + /* 0x0044 */ TextureHeader *unk44_0; + }; + /* 0x0048 */ s16 behaviorId; + /* 0x004A */ s16 unk4A; + /* 0x004C */ f32 unk4C_f32; + /* 0x0050 */ f32 unk50_f32; + /* 0x0054 */ f32 unk54_f32; + /* 0x0058 */ f32 unk58_f32; + union { + struct { + /* 0x005C */ s16 unk5C; + /* 0x005E */ s16 unk5E; + } unk5C_halfs; + /* 0x005C */ s32 unk5C_s32; + }; + union { + struct { + /* 0x0060 */ s16 unk60; + /* 0x0062 */ s16 unk62; + } unk60_halfs; + /* 0x0060 */ s32 unk60_s32; + }; + /* 0x0064 */ s16 unk64; + /* 0x0066 */ s16 unk66; + union { + /* 0x0068 */ Object_68 **gfxData; + struct { + /* 0x0068 */ s16 unk68; + /* 0x006A */ s16 unk6A; + } unk68_halfs; + }; + /* 0x006C */ s16 unk6C; + /* 0x006E */ s16 unk6E; +} Particle; + +typedef struct Particle2 { + /* 0x0000 */ ObjectTransform trans; + /* 0x0018 */ s16 unk18; + /* 0x0018 */ s16 unk1A; + /* 0x001C */ s16 unk1C; + /* 0x001E */ s16 unk1E; + /* 0x0020 */ s16 unk20; + /* 0x0022 */ s16 unk22; + /* 0x0024 */ s16 unk24; + /* 0x0026 */ s16 unk26; + /* 0x0028 */ s16 unk28; + /* 0x002A */ s16 unk2A; + /* 0x002C */ s16 unk2C; + /* 0x002E */ s16 unk2E; + /* 0x0030 */ f32 unk30; + /* 0x0034 */ f32 unk34; + union { + struct { + /* 0x0038 */ u8 unk38; + /* 0x0039 */ u8 unk39; + /* 0x003A */ s8 unk3A; + /* 0x003B */ s8 unk3B; + } byte; + struct { + /* 0x0038 */ s16 unk38; + /* 0x003A */ s16 unk3A; + } half; + f32 unk38_f32; + } unk38; + /* 0x003C */ f32 unk3C; + /* 0x0040 */ s32 unk40; + + union { + /* 0x0044 */ unk800B0698_44 *unk44; + /* 0x0044 */ TextureHeader *unk44_0; + /* 0x0044 */ unk800B2260_C_44 *unk44_1; + }; + /* 0x0048 */ s16 behaviorId; + /* 0x004A */ s16 unk4A; + /* 0x004C */ f32 unk4C_f32; + /* 0x0050 */ f32 unk50_f32; + /* 0x0054 */ f32 unk54_f32; + /* 0x0058 */ f32 unk58_f32; + union { + struct { + /* 0x005C */ s16 unk5C; + /* 0x005E */ s16 unk5E; + } unk5C_halfs; + /* 0x005C */ s32 unk5C_s32; + }; + union { + struct { + /* 0x0060 */ s16 unk60; + /* 0x0062 */ s16 unk62; + } unk60_halfs; + /* 0x0060 */ s32 unk60_s32; + }; + /* 0x0064 */ s16 unk64; + /* 0x0066 */ s16 unk66; + union { + /* 0x0068 */ Object_68 **gfxData; + struct { + /* 0x0068 */ s16 unk68; + /* 0x006A */ s16 unk6A; + } unk68_halfs; + }; + /* 0x006C */ s16 unk6C; + /* 0x006E */ s16 unk6E; + /* 0x0070 */ struct Particle *unk70; + /* 0x0074 */ u8 unk74; + /* 0x0075 */ u8 unk75; + /* 0x0076 */ u8 unk76; + /* 0x0077 */ u8 unk77; +} Particle2; extern unk800E2CF0 **gParticlesAssetTable; extern s32 gParticlesAssetTableCount; @@ -114,31 +325,34 @@ void func_800AEF88(unk800AF024 *arg0, Vertex **arg1, Triangle **arg2); void func_800AF024(unk800AF024 *arg0, Vertex **arg1, Triangle **arg2); void func_800AF0A4(Object *obj); void func_800AF0F0(Object *obj); -void func_800AF1E0(Object *arg0, s32 arg1, s32 arg2); -void func_800AF29C(Object *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5); +void func_800AF1E0(Particle *arg0, s32 arg1, s32 arg2); +void func_800AF29C(Particle *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5); void func_800AF6E4(Object *obj, s32 arg1); -void func_800B2260(Object *arg0); -void func_800B263C(unk800B2260_C *arg0); +void func_800B2260(Particle *arg0); +void func_800B263C(Particle2 *arg0); void init_particle_assets(void); -void func_800B2FBC(Object *arg0); +void func_800B2FBC(Particle2 *arg0); void func_800B03C0(Object *arg0, ObjectTransform *arg1, unk800B03C0_arg2 *arg2, Object *arg3); -void func_800B2040(unk800B2260_C *arg0); -void func_800B22FC(Object *arg0, s32 arg1); +void func_800B2040(Particle2 *arg0); +void func_800B22FC(Particle2 *arg0, s32 arg1); void func_800B0010(Object *arg0, Object *arg1, unk800B03C0_arg2 *arg2, Object *arg3); +Particle2 *func_800B0698(unk800B1CB8 *arg0, Particle *arg1); +unk800B1CB8 *func_800B1CB8(s32 arg0); +void func_800AFE5C(unk800B1CB8 *arg0, Particle *arg1); +Particle2 *func_800B1130(unk800B1CB8 *arg0, Particle *arg1); +void func_800AF52C(Object *obj, s32 arg1); +void func_800AF134(Particle *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5); -void func_800AF134(Object *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 func_800AE728(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); // Non Matching void func_800AF714(Object*, s32); // Non matching -Object* func_800B1130(s32, void*); -Object* func_800B0BAC(); -Object *func_800B0698(s32, void*); +Object *func_800B0BAC(); void func_800B26E0(); -void func_800B3140(Object *); -void func_800B3240(Object *); -void func_800B3358(Object *); -void func_800B34B0(Object *); -void func_800B3564(Object *); +void func_800B3140(Particle2 *); +void func_800B3240(Particle2 *); +void func_800B3358(Particle2 *); +void func_800B34B0(Particle2 *); +void func_800B3564(Particle2 *); #endif diff --git a/src/printf.h b/src/printf.h index 6fad8cb3..19f01437 100644 --- a/src/printf.h +++ b/src/printf.h @@ -52,5 +52,7 @@ void set_render_printf_position(u16 xpos, u16 ypos); // Non Matching s32 render_printf(const char *format, ...); // Non Matchingg void func_800B3740(Object *, Gfx **, MatrixS **, Vertex **, s32); // Non Matching s32 func_800B653C(Gfx**, s8*); +void func_800B4668(Object*, s32, s32, s32); +void func_800B46BC(Object*, s32, s32, s32); #endif diff --git a/src/racer.c b/src/racer.c index a48a356e..b34e5e22 100644 --- a/src/racer.c +++ b/src/racer.c @@ -20,15 +20,12 @@ #include "math_util.h" #include "unknown_0255E0.h" #include "weather.h" -#include "unknown_05CEF0.h" -#include "unknown_05DCD0.h" -#include "unknown_05F0C0.h" -#include "unknown_05F690.h" -#include "unknown_05FF10.h" +#include "vehicle_misc.h" #include "unknown_005740.h" #include "game_ui.h" #include "object_models.h" #include "unknown_003260.h" +#include "collision.h" #define MAX_NUMBER_OF_GHOST_NODES 360 @@ -42,7 +39,7 @@ /************ .data ************/ s32 gObjLoopGoldenBalloonLength = 0x310; -s16 D_800DCB54 = 0; +s16 gAntiPiracyHeadroll = 0; s32 D_800DCB58 = 0; // Currently unknown, might be a different type. s32 D_800DCB5C = 0; // Currently unknown, might be a different type. @@ -291,7 +288,7 @@ void func_80042D20(Object *obj, Object_Racer *racer, s32 updateRate) { if (var_t0 != 0) { temp_v0 = func_80023568(); if (gRaceStartTimer == 0) { - if (racer->unk1D6 != 4) { + if (racer->vehicleID != VEHICLE_LOOPDELOOP) { temp_v1_2 = racerID - 1; if (racer->unk20B < racerID && temp_v1_2 >= 0 && temp_v1_2 < numRacers) { if (racerGroup[temp_v1_2]->unk64->racer.playerIndex != PLAYER_COMPUTER) { @@ -959,7 +956,7 @@ void func_8004C0A0(s32 updateRate, Object *obj, Object_Racer *racer) { s32 temp_v1; s32 phi_v0; - if (racer->unk1D7 != 10) { + if (racer->vehicleIDPrev != VEHICLE_CARPET) { //!@bug Typo. Should've been `== 0`, not `= 0`. if ((racer->unk1F2 = 0)) { return; // This never gets called because of the typo. @@ -1011,7 +1008,7 @@ void func_8004C140(Object *obj, Object_Racer *racer) { if (racer->unk1C9 == 8) { racer->unk1C9 = 0; } - if (racer->unk1D6 < 5) { + if (racer->vehicleID < VEHICLE_TRICKY) { play_random_character_voice(obj, SOUND_VOICE_CHARACTER_NEGATIVE, 8, 129); switch (racer->attackType) { case ATTACK_EXPLOSION: @@ -1316,21 +1313,24 @@ void update_camera_loop(f32 updateRate, Object* obj, Object_Racer* racer) { gCameraObject->trans.z_position += gCameraObject->z_velocity; } -void func_8004D95C(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer) { +/** + * Updates the carpet vehicle that Taj uses during the overworld race challenges. +*/ +void update_carpet(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer) { s16 sp26; if (racer->unk118 != 0) { func_80006AC8(obj); } - if (func_8002341C() && racer->unk1D6 == 10) { + if (func_8002341C() && racer->vehicleID == VEHICLE_CARPET) { obj->interactObj->unk14 = 0; } sp26 = obj->segment.animFrame; - racer->unk1D6 = 10; + racer->vehicleID = VEHICLE_CARPET; func_80049794(updateRate, updateRateF, obj, racer); - racer->unk1D6 = racer->unk1D7; + racer->vehicleID = racer->vehicleIDPrev; obj->segment.unk38.byte.unk3B = 0; - if (racer->unk1D6 == 10) { + if (racer->vehicleID == VEHICLE_CARPET) { if (racer->unk154 != NULL) { racer->unk154->segment.trans.x_position = obj->segment.trans.x_position; racer->unk154->segment.trans.y_position = obj->segment.trans.y_position; @@ -1448,7 +1448,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer) { func_80043ECC(0, NULL, 0); D_8011D583 = i; gStartBoostTime = 0; - tempRacer->unk20A = 0; + tempRacer->lightFlags = 0; } /** @@ -1470,8 +1470,7 @@ void update_player_racer(Object *obj, s32 updateRate) { f32 temp_f12; LevelHeader *header; CheckpointNode *checkpointNode; - s32 angleVel; - UNUSED s32 pad; + UNUSED s32 pad[2]; s32 i; struct LevelObjectEntryCommon newObject; @@ -1608,7 +1607,7 @@ void update_player_racer(Object *obj, s32 updateRate) { } set_object_stack_pos(tempRacer->playerIndex); gCameraObject = (ObjectCamera *) func_80069CFC(); - tempRacer->unk1E7++; + tempRacer->unk1E7++; //!@delta gCurrentPlayerIndex = tempRacer->playerIndex; if ((tempRacer->raceFinished == TRUE) || (context == 1)) { tempRacer->unk1CA = 1; @@ -1708,7 +1707,7 @@ void update_player_racer(Object *obj, s32 updateRate) { } } } - if (tempRacer->unk1D6 != 1) { + if (tempRacer->vehicleID != VEHICLE_HOVERCRAFT) { waterHeight = -10000.0f; // So I assume this func exists to find the water height. D_8011D504 = func_8002AD08(obj->segment.trans.y_position, &waterHeight, D_8011D4F8); @@ -1733,42 +1732,20 @@ void update_player_racer(Object *obj, s32 updateRate) { } } func_8002ACC8(0); - switch (tempRacer->unk1D6) { - case 0: - func_8004F7F4(updateRate, delta, obj, tempRacer); - break; - case 4: - func_8004CC20(updateRate, delta, obj, tempRacer); - break; - case 1: - func_80046524(updateRate, delta, obj, tempRacer); - break; - case 2: - func_80049794(updateRate, delta, obj, tempRacer); - break; - case 3: - case 10: - func_8004D95C(updateRate, delta, obj, tempRacer); - break; - case 5: - func_8005C364(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); - break; - case 6: - func_8005D0D0(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); - break; - case 7: - case 8: - func_8005D820(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentStickX, &gRaceStartTimer); - break; - case 11: - func_8005E4C0(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); - break; - case 12: - func_8005EA90(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); - break; - case 13: - func_8005F310(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); - break; + switch (tempRacer->vehicleID) { + case VEHICLE_CAR: func_8004F7F4(updateRate, delta, obj, tempRacer); break; + case VEHICLE_LOOPDELOOP: func_8004CC20(updateRate, delta, obj, tempRacer); break; + case VEHICLE_HOVERCRAFT: func_80046524(updateRate, delta, obj, tempRacer); break; + case VEHICLE_PLANE: func_80049794(updateRate, delta, obj, tempRacer); break; + case VEHICLE_FLYING_CAR: /* fall through */ + case VEHICLE_CARPET: update_carpet(updateRate, delta, obj, tempRacer); break; + case VEHICLE_TRICKY: update_tricky(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_BLUEY: update_bluey(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_SMOKEY: /* fall through */ + case VEHICLE_PTERODACTYL: update_smokey(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentStickX, &gRaceStartTimer); break; + case VEHICLE_BUBBLER: update_bubbler(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_WIZPIG: update_wizpig(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_ROCKET: update_rocket(updateRate, delta, obj, tempRacer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; } if (tempRacer->magnetTimer == 0) { if (tempRacer->magnetSoundMask) { @@ -1838,7 +1815,7 @@ void update_player_racer(Object *obj, s32 updateRate) { if (tempRacer->unk15C) { tempRacer->unk15C->segment.trans.x_position = checkpointNode->obj->segment.trans.x_position; tempRacer->unk15C->segment.trans.y_position = checkpointNode->obj->segment.trans.y_position; - if (tempRacer->unk1D6 == 0) { + if (tempRacer->vehicleID == VEHICLE_CAR) { tempRacer->unk15C->segment.trans.y_position -= 30.0; } tempRacer->unk15C->segment.trans.z_position = checkpointNode->obj->segment.trans.z_position; @@ -1862,7 +1839,7 @@ void update_player_racer(Object *obj, s32 updateRate) { if (tempRacer->unk15C) { tempRacer->unk15C->segment.animFrame += 8 * updateRate; } - if ((tempRacer->unk1BA > 400) || (tempRacer->unk1BA < -400)) { + if (tempRacer->unk1BA > 400 || tempRacer->unk1BA < -400) { func_80022E18(2); } } @@ -1896,18 +1873,17 @@ void update_player_racer(Object *obj, s32 updateRate) { tempRacer->stretch_height_cap = 1.0f; } - tempVar = ((tempRacer->unk16C - tempRacer->unk16A) * updateRate) >> 3; + tempVar = ((tempRacer->headAngleTarget - tempRacer->headAngle) * updateRate) >> 3; if (tempVar > 0x800) { tempVar = 0x800; } if (tempVar < -0x800) { tempVar = -0x800; } - angleVel = D_800DCB54; - if (angleVel) { - tempRacer->unk16A += angleVel; + if (gAntiPiracyHeadroll) { + tempRacer->headAngle += gAntiPiracyHeadroll; } else { - tempRacer->unk16A += tempVar; + tempRacer->headAngle += tempVar; } if ((gCurrentButtonsPressed & R_TRIG) && tempRacer->unk1EB) { tempRacer->unk1EC = 1; @@ -1964,7 +1940,7 @@ void update_player_racer(Object *obj, s32 updateRate) { tempRacer->unk150 = NULL; } tempRacer->unk1FE = -1; - func_8004F77C(tempRacer); + set_racer_tail_lights(tempRacer); if (tempRacer->unk20E) { if (tempRacer->unk210 > updateRate) { tempRacer->unk210 -= updateRate; @@ -1989,28 +1965,33 @@ void update_player_racer(Object *obj, s32 updateRate) { } } -void func_8004F77C(Object_Racer *racer) { - s32 temp; +/** + * When braking or driving in a place considered dark, a timer counts up and then sets flags. + * These flags correspond to the lights on the back of the car being enabled and what colour they are. + * When you exit this dark place, the timer counts back down and the lights stop. +*/ +void set_racer_tail_lights(Object_Racer *racer) { + s32 lightTimer; - racer->unk20A &= ~0x80; + racer->lightFlags &= ~RACER_LIGHT_BRAKE; if ((gCurrentRacerInput & B_BUTTON)) { - racer->unk20A |= 0x80; + racer->lightFlags |= RACER_LIGHT_BRAKE; } - temp = racer->unk20A & 0xF; - if ((racer->unk20A & 0xC0)) { - temp++; - if (temp >= 3) { - temp = 2; + lightTimer = racer->lightFlags & RACER_LIGHT_TIMER; + if (racer->lightFlags & (RACER_LIGHT_BRAKE | RACER_LIGHT_NIGHT)) { + lightTimer++; + if (lightTimer > 2) { + lightTimer = 2; } } else { - temp--; - if (temp < 0) { - temp = 0; + lightTimer--; + if (lightTimer < 0) { + lightTimer = 0; } } - racer->unk20A = (racer->unk20A & 0xFFF0) | temp; + racer->lightFlags = (racer->lightFlags & 0xFFF0) | lightTimer; } GLOBAL_ASM("asm/non_matchings/racer/func_8004F7F4.s") @@ -2428,7 +2409,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR racer_play_sound(obj, SOUND_BOUNCE2); } // If driving over a zip pad, apply a boost. - if (racer->boostTimer == 0 && surfaceType == SURFACE_UNK03) { + if (racer->boostTimer == 0 && surfaceType == SURFACE_ZIP_PAD) { racer->boostTimer = normalise_time(45); racer->boostType = BOOST_LARGE; racer_play_sound(obj, SOUND_ZIP_PAD_BOOST); @@ -2518,7 +2499,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR tempVel *= 0.25; } if ((gCurrentStickY < -25) && !(gCurrentRacerInput & A_BUTTON) && (gCurrentRacerInput & B_BUTTON)) { - if (racer->unk1D7 >= 5) { + if (racer->vehicleIDPrev >= 5) { tempVel *= 0.3; } racer->velocity += tempVel; @@ -2546,7 +2527,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR if (D_8011D586 != 0) { surfaceTraction = 0.0f; } - if (racer->brake < 0.9 && racer->unk1D7 < 5 && gRaceStartTimer == 0) { + if (racer->brake < 0.9 && racer->vehicleIDPrev < 5 && gRaceStartTimer == 0) { if (racer->pitch < 0.0) { velocityDiff = -racer->pitch; velocityDiff -= 0.3; @@ -2593,81 +2574,92 @@ void func_800521B8(s32 arg0) { D_8011D582 = arg0; } -void func_800521C4(Object *obj, Object_Racer *racer, UNUSED s32 arg2) { +/** + * Find a nearby racer and set the head to turn to face them. + * Otherwise, if stationary, set a random angle to turn to periodically. +*/ +void handle_racer_head_turning(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) { Object *tempObj; s8 foundObj; f32 distance; - s32 tempVel; + s32 intendedAngle; - foundObj = 0; + foundObj = FALSE; if (func_80023568()) { tempObj = get_racer_object(1); - foundObj = func_80052388(obj, racer, tempObj, 160000.0f); + foundObj = turn_head_towards_object(obj, racer, tempObj, 400.0f * 400.0f); } - if (!foundObj) { + if (foundObj == FALSE) { tempObj = func_8001B7A8((Object *) racer, 1, &distance); if (tempObj && !gRaceStartTimer) { - foundObj = func_80052388(obj, racer, tempObj, 160000.0f); + foundObj = turn_head_towards_object(obj, racer, tempObj, 400.0f * 400.0f); } } - if (!foundObj) { + if (foundObj == FALSE) { tempObj = func_8001B7A8((Object *) racer, -1, &distance); if (tempObj && !gRaceStartTimer) { - foundObj = func_80052388(obj, racer, tempObj, 30000.0f); + foundObj = turn_head_towards_object(obj, racer, tempObj, 30000.0f); } } - if (!foundObj) { + if (foundObj == FALSE) { if ((racer->unk1E7 & 0x1F) < 2) { - tempVel = racer->velocity * 1280.0f; + intendedAngle = racer->velocity * 1280.0f; - if (tempVel < 0) { - tempVel = -tempVel; + if (intendedAngle < 0) { + intendedAngle = -intendedAngle; } - if (tempVel > 0x2800) { - tempVel = 0x2800; + if (intendedAngle > 0x2800) { + intendedAngle = 0x2800; } - tempVel = 0x2800 - tempVel; + intendedAngle = 0x2800 - intendedAngle; - racer->unk16C = get_random_number_from_range(-tempVel, tempVel); + racer->headAngleTarget = get_random_number_from_range(-intendedAngle, intendedAngle); } } } -// Ran by the AI. Seems to be direction related of some sorts. -void func_8005234C(Object_Racer *racer) { - racer->unk16C -= racer->unk16C >> 3; - if (racer->unk16C >= -9 && racer->unk16C < 10) { // Deadzone? - racer->unk16C = 0; +/** + * Over time, set the head angle target to zero. + * The character's head will start to face forward. +*/ +void slowly_reset_head_angle(Object_Racer *racer) { + racer->headAngleTarget -= racer->headAngleTarget >> 3; + if (racer->headAngleTarget > -10 && racer->headAngleTarget < 10) { + racer->headAngleTarget = 0; } } -s32 func_80052388(Object *obj1, Object_Racer *racer, Object *obj2, f32 distance) { - s32 rotation; +/** + * Compute angle between objects, then set the intended angle for the character's head to face + * an object. +*/ +s32 turn_head_towards_object(Object *obj, Object_Racer *racer, Object *targetObj, f32 distance) { + s32 intendedAngle; f32 xDiff; f32 zDiff; s32 ret = FALSE; - xDiff = obj2->segment.trans.x_position - obj1->segment.trans.x_position; - zDiff = obj2->segment.trans.z_position - obj1->segment.trans.z_position; + xDiff = targetObj->segment.trans.x_position - obj->segment.trans.x_position; + zDiff = targetObj->segment.trans.z_position - obj->segment.trans.z_position; if ((xDiff * xDiff) + (zDiff * zDiff) < distance) { - rotation = (arctan2_f(xDiff, zDiff) - (obj1->segment.trans.y_rotation & 0xFFFF)) + 0x8000; - WRAP(rotation, -0x8000, 0x8000); - CLAMP(rotation, -0x3000, 0x3000); - racer->unk16C = rotation; + intendedAngle = (arctan2_f(xDiff, zDiff) - (obj->segment.trans.y_rotation & 0xFFFF)) + 0x8000; + WRAP(intendedAngle, -0x8000, 0x8000); + CLAMP(intendedAngle, -0x3000, 0x3000); + racer->headAngleTarget = intendedAngle; if ((racer->unk1E7 & 0x3F) < 0x1F) { - racer->unk16C = 0; + racer->headAngleTarget = 0; } - racer = (struct Object_Racer *) obj2->unk64; - rotation = arctan2_f(xDiff, zDiff) - (obj1->segment.trans.y_rotation & 0xFFFF); - WRAP(rotation, -0x8000, 0x8000); - CLAMP(rotation, -0x3000, 0x3000); - racer->unk16C = rotation; - if (ret) {} + racer = (struct Object_Racer *) targetObj->unk64; + intendedAngle = arctan2_f(xDiff, zDiff) - (obj->segment.trans.y_rotation & 0xFFFF); + WRAP(intendedAngle, -0x8000, 0x8000); + CLAMP(intendedAngle, -0x3000, 0x3000); + racer->headAngleTarget = intendedAngle; + if (ret) {} // Fakematch ret = TRUE; if ((racer->unk1E7 & 0x1F) < 0xA) { - racer->unk16C = 0; + racer->headAngleTarget = 0; } } return ret; @@ -3125,17 +3117,17 @@ void racer_attack_handler(Object* obj, Object_Racer* racer, s32 updateRate) { racer->squish_timer = 0; } if (racer->attackType == 0 || racer->shieldTimer > 0) { - racer->attackType = 0; + racer->attackType = ATTACK_NONE; } else { - if ((racer->squish_timer == 0) || racer->attackType != 4) { - if ((racer->attackType != 2) && (racer->attackType != 4)) { + if ((racer->squish_timer == 0) || racer->attackType != ATTACK_SQUISHED) { + if (racer->attackType != ATTACK_SPIN && racer->attackType != ATTACK_SQUISHED) { drop_bananas(obj, racer, 2); } racer->unk18C = 360; if (racer->unk1C9 == 8) { racer->unk1C9 = 0; } - if (racer->unk1D6 < 5) { + if (racer->vehicleID < VEHICLE_TRICKY) { play_random_character_voice(obj, SOUND_VOICE_CHARACTER_NEGATIVE, 8, 129); switch (racer->attackType) { // Getting hit by a rocket, or running into a landmine. @@ -3172,7 +3164,7 @@ void racer_attack_handler(Object* obj, Object_Racer* racer, s32 updateRate) { racer_play_sound(obj, SOUND_WHEE); break; } - racer->attackType = 0; + racer->attackType = ATTACK_NONE; } } } @@ -3245,7 +3237,7 @@ void func_80054110(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR tempAngle = 73; } obj->segment.animFrame = tempAngle; - func_8005234C(racer); + slowly_reset_head_angle(racer); angle = gCurrentCarSteerVel - (u16) racer->y_rotation_vel; WRAP(angle, -0x8000, 0x8000); angle >>= 2; @@ -3289,7 +3281,7 @@ void func_80054110(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR } if (!racer->unk201) { obj->unk74 = 0; - } else if (racer->unk1D6 < 5) { + } else if (racer->vehicleID < VEHICLE_TRICKY) { func_800AF714(obj, updateRate); } func_80053750(obj, racer, updateRateF); @@ -3394,11 +3386,11 @@ void func_8005492C(Object* obj, Object_Racer* racer, s32 updateRate, f32 updateR gCurrentSurfaceType = surfaceType; racer->drift_direction = 0; racer->unk10C = 0; - if (surfaceType == 4) { + if (surfaceType == SURFACE_STONE) { multiplier = 0.25f; racer->lateral_velocity = 0.0f; } - if (racer->boostTimer == 0 && surfaceType == SURFACE_UNK03) { + if (racer->boostTimer == 0 && surfaceType == SURFACE_ZIP_PAD) { racer->boostTimer = normalise_time(45); racer->boostType = 3; } @@ -3492,7 +3484,7 @@ void func_80055A84(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) { s32 xRot; f32 angleX; f32 *temp_v0; - f32 tempPos[3]; + Vec3f tempPos; s32 i; f32 sp40; s8 surface; @@ -3503,29 +3495,29 @@ void func_80055A84(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) { } temp_v0 =(f32 *) get_misc_asset(MISC_ASSET_UNK38); surface = -1; - sp40 = temp_v0[racer->unk1D7]; - tempPos[0] = obj->segment.trans.x_position; - tempPos[1] = obj->segment.trans.y_position; - tempPos[2] = obj->segment.trans.z_position; + sp40 = temp_v0[racer->vehicleIDPrev]; + tempPos.x = obj->segment.trans.x_position; + tempPos.y = obj->segment.trans.y_position; + tempPos.z = obj->segment.trans.z_position; D_8011D548 = 0.0f; D_8011D54C = 0.0f; sp74 = 0; flags = 0; - if (racer->playerIndex != PLAYER_COMPUTER || racer->unk1D7 < 5) { - flags = func_80017248(obj, 1, &sp74, &racer->unkD8, tempPos, &sp40, &surface); + if (racer->playerIndex != PLAYER_COMPUTER || racer->vehicleIDPrev < VEHICLE_TRICKY) { + flags = func_80017248(obj, 1, &sp74, &racer->unkD8, &tempPos.x, &sp40, &surface); } if (flags & 0x80) { - D_8011D548 = tempPos[0] - obj->segment.trans.x_position; - D_8011D54C = tempPos[2] - obj->segment.trans.z_position; + D_8011D548 = tempPos.x - obj->segment.trans.x_position; + D_8011D54C = tempPos.z - obj->segment.trans.z_position; flags &= ~0x80; } shouldSquish = 0; - if (flags && tempPos[1] < obj->segment.trans.y_position - 4.0) { + if (flags && tempPos.y < obj->segment.trans.y_position - 4.0) { shouldSquish = 1; } - func_80031130(1, &racer->unkD8.x, tempPos, racer->unk1D6); + func_80031130(1, &racer->unkD8.x, &tempPos.x, racer->vehicleID); sp74 = 0; - racer->unk1E3 = func_80031600(&racer->unkD8.x, tempPos, &sp40, &surface, 1, &sp74); + racer->unk1E3 = func_80031600(&racer->unkD8.x, &tempPos.x, &sp40, &surface, 1, &sp74); racer->unk1E4 = flags; racer->unk1E3 |= flags; racer->unk1E2 = 0; @@ -3541,7 +3533,7 @@ void func_80055A84(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) { } } for (i = 0; i < 3; i++) { - racer->unkD8.f[i] = tempPos[i]; + racer->unkD8.f[i] = tempPos.f[i]; } racer->wheel_surfaces[0] = surface; i = 1; @@ -3565,14 +3557,14 @@ void func_80055A84(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) { if ((xRot < 0x2000) && (xRot > -0x2000)) { obj->segment.trans.x_rotation = xRot; } - if (racer->unk1D6 == 4) { + if (racer->vehicleID == VEHICLE_LOOPDELOOP) { if (1) xRot -= (u16) obj->segment.trans.x_rotation; WRAP(xRot, -0x8000, 0x8000); obj->segment.trans.x_rotation += xRot >> 2; } } - if (racer->unk1D6 != 4 && racer->unk1D6 != 2 && racer->unk1D6 != 10 && racer->unk1D6 != 7) { + if (racer->vehicleID != VEHICLE_LOOPDELOOP && racer->vehicleID != VEHICLE_PLANE && racer->vehicleID != VEHICLE_CARPET && racer->vehicleID != VEHICLE_SMOKEY) { CLAMP(racer->x_rotation_vel, -0x3400, 0x3400); CLAMP(obj->segment.trans.x_rotation, -0x3400, 0x3400); } @@ -3716,7 +3708,7 @@ void handle_racer_items(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) objID = 14; break; case WEAPON_OIL_SLICK: - if (racer->unk1D6 != 2) { + if (racer->vehicleID != VEHICLE_PLANE) { objID = 130; } else { objID = 235; @@ -3829,7 +3821,7 @@ void handle_racer_items(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) spawnedObj->segment.z_velocity = obj->segment.z_velocity - (racer->oz1 * velocity); spawnedObj->segment.trans.y_rotation = obj->segment.trans.y_rotation; spawnedObj->segment.trans.x_rotation = obj->segment.trans.x_rotation; - if (racer->unk1D6 == 1 && racer->unk1E5) { + if (racer->vehicleID == VEHICLE_HOVERCRAFT && racer->unk1E5) { if (spawnedObj->segment.trans.x_rotation > -0x400 && spawnedObj->segment.trans.x_rotation < 0x400) { spawnedObj->segment.trans.x_rotation = 0; } @@ -3851,7 +3843,7 @@ void handle_racer_items(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) soundID = SOUND_PLOP; break; case WEAPON_OIL_SLICK: - if (racer->unk1D6 != 2) { + if (racer->vehicleID != VEHICLE_PLANE) { spawnedObj->unk50->unk0 = 0; } soundID = SOUND_SPLOINK2; @@ -4170,7 +4162,7 @@ void drop_bananas(Object *obj, Object_Racer *racer, s32 number) { if (bananaObj != NULL) { bananaObj->segment.unk3C_a.level_entry = NULL; temp = (Object_Banana *)bananaObj->unk64; - temp->unk9 = racer->unk1D6; + temp->unk9 = racer->vehicleID; bananaObj->segment.x_velocity = racer->ox1 * 2; bananaObj->segment.y_velocity = (0.0f - racer->oy1) + 5.0; bananaObj->segment.z_velocity = racer->oz1 * 2; @@ -4609,7 +4601,7 @@ void update_camera_finish_race(UNUSED f32 updateRate, Object *obj, Object_Racer yDiff = gCameraObject->trans.y_position - obj->segment.trans.y_position; zDiff = gCameraObject->trans.z_position - obj->segment.trans.z_position; distance = sqrtf((xDiff * xDiff) + (zDiff * zDiff)); - gCameraObject->trans.y_rotation = (s16) (0x8000 - atan2s((s32) xDiff, (s32) zDiff)); + gCameraObject->trans.y_rotation = 0x8000 - atan2s(xDiff, zDiff); gCameraObject->trans.x_rotation = atan2s((s32) yDiff, (s32) distance); gCameraObject->trans.z_rotation = 0; gCameraObject->segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position); @@ -4626,11 +4618,9 @@ void update_camera_fixed(f32 updateRate, Object *obj, Object_Racer *racer) { delta = (s32) updateRate; xDiff = gCameraObject->trans.x_position - obj->segment.trans.x_position; zDiff = gCameraObject->trans.z_position - obj->segment.trans.z_position; - gCameraObject->trans.y_rotation += ((((-atan2s((s32) xDiff, (s32) zDiff)) - - gCameraObject->trans.y_rotation) + 0x8000) * delta) >> 4; - gCameraObject->trans.z_rotation -= (((s32) (gCameraObject->trans.z_rotation * delta)) >> 4); - gCameraObject->segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, - racer->oy1, gCameraObject->trans.z_position); + gCameraObject->trans.y_rotation += ((((-atan2s(xDiff, zDiff)) - gCameraObject->trans.y_rotation) + 0x8000) * delta) >> 4; + gCameraObject->trans.z_rotation -= ((s32) (gCameraObject->trans.z_rotation * delta)) >> 4; + gCameraObject->segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position); } // Think this is used to calculate the path for the AI. @@ -4931,9 +4921,9 @@ void func_8005A3D0(void) { for (i = 0; i < gObjLoopGoldenBalloonLength; i++) { count += temp[i]; } - + // Antipiracy measure if (count != gObjLoopGoldenBalloonChecksum) { - D_800DCB54 = 0x800; + gAntiPiracyHeadroll = 0x800; } } @@ -4993,21 +4983,21 @@ void racer_enter_door(Object_Racer* racer, s32 updateRate) { } void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF) { - s32 var_t2; // sp9C + s32 var_t2; Object **objects; - s32 renderContext; //sp94 - s32 countOfObjects; //sp90 - f32 xPos; //sp8C - f32 yPos; //sp88 - f32 zPos; //sp84 - f32 sp80; //sp80 + s32 renderContext; + s32 countOfObjects; + f32 xPos; + f32 yPos; + f32 zPos; + f32 lastCheckpointDist; Object *playerOneObj; - f32 var_fv1; //sp78 + f32 var_fv1; Object *playerTwoObj; - LevelHeader *levelHeader; //sp70 + LevelHeader *levelHeader; s32 temp_v0_10; f32 temp_f0; - CheckpointNode *temp_v0_9; + CheckpointNode *checkpoint; Object_Racer *tempRacer; f32 temp_fv1_2; @@ -5027,14 +5017,14 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR } else { racer->unk18C = 0; } - gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_RACER_WEIGHT); + gCurrentRacerMiscAssetPtr = (f32 *) get_misc_asset(MISC_RACER_WEIGHT); gCurrentRacerWeightStat = gCurrentRacerMiscAssetPtr[racer->characterId] * 0.45; if (racer->unk204 > 0) { gCurrentRacerWeightStat = -0.02f; } - gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_RACER_HANDLING); + gCurrentRacerMiscAssetPtr = (f32 *) get_misc_asset(MISC_RACER_HANDLING); gCurrentRacerHandlingStat = gCurrentRacerMiscAssetPtr[racer->characterId]; - gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_ASSET_UNK0B); + gCurrentRacerMiscAssetPtr = (f32 *) get_misc_asset(MISC_ASSET_UNK0B); D_8011D574 = gCurrentRacerMiscAssetPtr[racer->characterId]; xPos = obj->segment.trans.x_position; yPos = obj->segment.trans.y_position; @@ -5047,16 +5037,9 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR } } - racer->unk1E7++; + racer->unk1E7++; //!@delta - if ( - func_8002341C() || - func_80023568() || - racer->unk1D6 == 4 || - D_8011D544 > 120.0f || - gRaceStartTimer != 0 || - (levelHeader->race_type & RACETYPE_CHALLENGE_BATTLE) - ) { + if (func_8002341C() || func_80023568() || racer->vehicleID == VEHICLE_LOOPDELOOP || D_8011D544 > 120.0f || gRaceStartTimer != 0 || levelHeader->race_type & RACETYPE_CHALLENGE_BATTLE) { racer->unk201 = 30; } @@ -5101,7 +5084,7 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR racer->throttleReleased = 1; } if (racer->unk1FE == 3) { - gCurrentRacerWeightStat *= ((f32)racer->unk1FF / 256); + gCurrentRacerWeightStat *= ((f32) racer->unk1FF / 256); } if (racer->unk1FE == 1) { gCurrentRacerWeightStat -= ((gCurrentRacerWeightStat * racer->unk1FF) / 128); @@ -5118,15 +5101,15 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR racer->unk88 -= racer->unk88 * 0.0625 * updateRateF; } gCurrentRacerHandlingStat = 1; - gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_ASSET_UNK21); - D_8011D568 = (f32 *)get_misc_asset(obj->segment.header->unk5D); + gCurrentRacerMiscAssetPtr = (f32 *) get_misc_asset(MISC_ASSET_UNK21); + D_8011D568 = (f32 *) get_misc_asset(obj->segment.header->unk5D); if ((obj->segment.y_velocity < 4.0) && ((racer->unk1E2 >= 3) || (racer->buoyancy != 0.0))) { racer->unk1F1 = 0; } if (racer->magnetTimer != 0) { racer_activate_magnet(obj, racer, updateRate); } - if (racer->unk1D6 != 1) { + if (racer->vehicleID != VEHICLE_HOVERCRAFT) { racer->unk1E5 = 0; racer->buoyancy = 0; D_8011D5AE = 0; @@ -5142,47 +5125,47 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR gCurrentButtonsPressed = 0; } // The case statements break must be on the same line as the function call in order to match - switch (racer->unk1D6) { - case 0: func_8004F7F4(updateRate, updateRateF, obj, racer); break; - case 4: func_8004CC20(updateRate, updateRateF, obj, racer); break; - case 1: func_80046524(updateRate, updateRateF, obj, racer); break; - case 2: func_80049794(updateRate, updateRateF, obj, racer); break; - case 3: /* fall through */ - case 10:func_8004D95C(updateRate, updateRateF, obj, racer); break; - case 5: func_8005C364(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; - case 6: func_8005D0D0(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; - case 7: /* fall through */ - case 8: func_8005D820(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentStickX, &gRaceStartTimer); break; - case 11:func_8005E4C0(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; - case 12:func_8005EA90(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; - case 13:func_8005F310(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + switch (racer->vehicleID) { + case VEHICLE_CAR: func_8004F7F4(updateRate, updateRateF, obj, racer); break; + case VEHICLE_LOOPDELOOP: func_8004CC20(updateRate, updateRateF, obj, racer); break; + case VEHICLE_HOVERCRAFT: func_80046524(updateRate, updateRateF, obj, racer); break; + case VEHICLE_PLANE: func_80049794(updateRate, updateRateF, obj, racer); break; + case VEHICLE_FLYING_CAR: /* fall through */ + case VEHICLE_CARPET: update_carpet(updateRate, updateRateF, obj, racer); break; + case VEHICLE_TRICKY: update_tricky(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_BLUEY: update_bluey(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_SMOKEY: /* fall through */ + case VEHICLE_PTERODACTYL: update_smokey(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentStickX, &gRaceStartTimer); break; + case VEHICLE_BUBBLER: update_bubbler(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_WIZPIG: update_wizpig(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case VEHICLE_ROCKET: update_rocket(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; } if (renderContext != DRAW_MENU) { func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); } - sp80 = racer->checkpoint_distance; + lastCheckpointDist = racer->checkpoint_distance; countOfObjects = racer->checkpoint; var_t2 = func_800185E4(racer->checkpoint, obj, xPos, yPos, zPos, &racer->checkpoint_distance, &racer->unk1C8); if (var_t2 == -100) { func_8005C270(racer); } - temp_v0_9 = find_next_checkpoint_node(racer->checkpoint, racer->unk1C8); - if (temp_v0_9->unk36[racer->unk1CA] == 5) { + checkpoint = find_next_checkpoint_node(racer->checkpoint, racer->unk1C8); + if (checkpoint->unk36[racer->unk1CA] == 5) { racer->unk201 = 30; if (racer->unk1E5 != 0) { racer->unk1C8 = 1; } } - if (temp_v0_9->unk36[racer->unk1CA] == 6) { + if (checkpoint->unk36[racer->unk1CA] == 6) { racer->lap = levelHeader->laps + 1; } - if (temp_v0_9->unk36[racer->unk1CA] == 4) { + if (checkpoint->unk36[racer->unk1CA] == 4) { if (racer->velocity < -4.0) { racer->velocity *= 0.9; } } if (var_t2 == 0) { - if (temp_v0_9->unk36[racer->unk1CA] == 2) { + if (checkpoint->unk36[racer->unk1CA] == 2) { racer->unk1C8 = 1; } temp_v0_10 = get_checkpoint_count(); @@ -5200,8 +5183,8 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR } racer->unk1A8 = 10000; } else { - if ((racer->playerIndex == -1) && (sp80 < racer->checkpoint_distance)) { - racer->checkpoint_distance = sp80; + if (racer->playerIndex == PLAYER_COMPUTER && lastCheckpointDist < racer->checkpoint_distance) { + racer->checkpoint_distance = lastCheckpointDist; } racer->unk1A8 = var_t2; } @@ -5239,12 +5222,12 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR racer->stretch_height = racer->stretch_height_cap; racer->stretch_height_cap = 1.0f; } - var_t2 = ((racer->unk16C - racer->unk16A) * updateRate) >> 3; + var_t2 = ((racer->headAngleTarget - racer->headAngle) * updateRate) >> 3; CLAMP(var_t2, -0x800, 0x800) - if (D_800DCB54 != 0) { - racer->unk16A += D_800DCB54; + if (gAntiPiracyHeadroll) { + racer->headAngle += gAntiPiracyHeadroll; } else { - racer->unk16A += var_t2; + racer->headAngle += var_t2; } if (racer->shieldTimer > 0) { if (racer->shieldTimer > 60) { @@ -5284,7 +5267,7 @@ void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR racer->unk150 = NULL; } racer->unk1FE = 0xFF; - func_8004F77C(racer); + set_racer_tail_lights(racer); } #ifdef NON_EQUIVALENT @@ -5339,7 +5322,7 @@ void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR if (sp11C != 0) { racer->unk1C9 = 0; racer->unk1F5 = 0; - racer->attackType = 0; + racer->attackType = ATTACK_NONE; racer->lateral_velocity = 0; sp94 = 20.0f; if (racer->unk124 < -20.0f) { @@ -5354,7 +5337,7 @@ void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR var_f12 *= 1.3; } var_a2 = &spEC; - if (racer->unk1D6 == 1) { + if (racer->vehicleID == VEHICLE_HOVERCRAFT) { var_v0 = (racer->unk1BE & 0xFFFF) - (racer->unk1C2 & 0xFFFF); if (var_v0 >= 0x8001) { var_v0 += 0xFFFF0001; diff --git a/src/racer.h b/src/racer.h index f3fd383e..86c4b3ed 100644 --- a/src/racer.h +++ b/src/racer.h @@ -93,6 +93,15 @@ typedef enum WeaponType { WEAPON_NITRO_LEVEL_3 } WeaponType; +typedef enum LightFlags { + RACER_LIGHT_UNK00 = 0, + RACER_LIGHT_TIMER = 0xF, + RACER_LIGHT_UNK10 = (1 << 4), + RACER_LIGHT_UNK20 = (1 << 5), + RACER_LIGHT_NIGHT = (1 << 6), + RACER_LIGHT_BRAKE = (1 << 7) +} LightFlags; + typedef struct ObjectCamera { /* 0x0014 */ ObjectTransform trans; /* 0x0018 */ f32 unk18; @@ -155,74 +164,14 @@ typedef struct unk800579B0 { s8 unk1E1; } unk800579B0; -extern ObjectCamera *gCameraObject; -extern s32 gObjLoopGoldenBalloonLength; -extern s16 D_800DCB54; -extern s32 D_800DCB58; -extern s32 D_800DCB5C; - -// Not sure if D_800DCB58 & D_800DCB5C are actually a part of this array. -extern f32 D_800DCB60[14]; - -extern s32 gNumViewports; -extern f32 gSurfaceTractionTable[19]; - -extern f32 D_800DCBE8[19]; - -// Unused? Not sure if this is actually an array or just some random data. -extern s32 D_800DCC34[19]; - -extern s32 D_800DCC80[]; - -extern s16 D_800DCCB4[12]; - -extern u16 D_800DCCCC[20]; - -// Used for some sort of bit mask -extern s32 D_800DCCF4[19]; - -// Used for some sort of bit mask -extern s32 D_800DCD40[20]; - -extern s8 D_800DCD90[15]; - -// Unused? -extern s8 D_800DCDA0[8]; - -extern s8 D_800DCDA8[8]; - -extern s32 gObjLoopGoldenBalloonChecksum; - -extern ObjectTransform D_8011D510; - -extern s32 gCurrentStickX; -extern s32 gRaceStartTimer; -extern s32 gCurrentStickY; -extern f32 gCurrentRacerWeightStat; -extern u32 gCurrentRacerInput; -extern f32 gCurrentRacerHandlingStat; -extern f32 *gCurrentRacerMiscAssetPtr; -extern s32 gCurrentPlayerIndex; -extern u32 gCurrentButtonsPressed; -extern u32 gCurrentButtonsReleased; -extern s8 D_8011D5AE; -extern s8 D_8011D584; -extern f32 D_8011D574; -extern f32 *D_8011D568; -extern f32 D_8011D544; - -extern struct TempStruct8 **D_8011D5B0; - -s32 get_random_number_from_range(s32, s32); //? - s32 func_80044450(s32 cap); void func_8004C0A0(s32 updateRate, Object *obj, Object_Racer *racer); void func_8004C140(Object *obj, Object_Racer *racer); -void func_8004D95C(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer); -void func_8004F77C(Object_Racer *arg0); +void update_carpet(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer); +void set_racer_tail_lights(Object_Racer *arg0); s32 func_80052188(void); void func_800521B8(s32 arg0); -void func_8005234C(Object_Racer *racer); +void slowly_reset_head_angle(Object_Racer *racer); void func_80052988(Object *obj, Object_Racer *arg1, s32 action, s32 arg3, s32 duration, s32 arg5, s32 arg6, s32 arg7); void handle_car_steering(Object_Racer *racer); void func_800535C4(unk800535C4 *arg0, unk800535C4_2 *arg1); @@ -247,7 +196,7 @@ void func_8005A3B0(void); void func_8005A3C0(void); void func_8005A3D0(void); void antipiracy_modify_surface_traction_table(void); -s32 func_80052388(Object *obj1, Object_Racer *racer, Object *obj2, f32 distance); +s32 turn_head_towards_object(Object *obj, Object_Racer *racer, Object *targetObj, f32 distance); void func_80055A84(Object *obj, Object_Racer *racer, s32 arg2); void func_8005C270(Object_Racer *racer); f32 handle_racer_top_speed(Object *obj, Object_Racer *racer); @@ -262,7 +211,7 @@ void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer); void update_camera_finish_challenge(f32 arg0, Object *obj, Object_Racer *racer); void update_camera_finish_race(f32 arg0, Object *obj, Object_Racer *racer); void update_camera_fixed(f32 arg0, Object *obj, Object_Racer *racer); -void func_800521C4(Object *obj, Object_Racer *racer, s32 arg2); +void handle_racer_head_turning(Object *obj, Object_Racer *racer, s32 updateRate); void func_80050754(Object *obj, Object_Racer *racer, f32 divisor); void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer); void func_80044170(Object *obj, Object_Racer *racer, s32 updateRate); diff --git a/src/unknown_0255E0.h b/src/unknown_0255E0.h index 0e4774fe..0fa8dc5b 100644 --- a/src/unknown_0255E0.h +++ b/src/unknown_0255E0.h @@ -134,7 +134,7 @@ Gfx *func_8002581C(u8 *segmentIds, s32 numberOfSegments, s32 currentViewportInde s32 func_80027568(void); s32 func_8002CC30(LevelModelSegment*); s8 func_8002B0F4(s16, f32 xPos, f32 zPos, struct TempStruct8**); -s8 func_8002AD08(f32 yPos, f32* waterHeight, f32*); +s32 func_8002AD08(f32 yPos, f32* waterHeight, f32*); void func_800278E8(s32); void func_80028050(void); void func_80028CD0(s32); diff --git a/src/unknown_05CEF0.h b/src/unknown_05CEF0.h deleted file mode 100644 index 60ac0001..00000000 --- a/src/unknown_05CEF0.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _UNKNOWN_05CEF0_H_ -#define _UNKNOWN_05CEF0_H_ - -#include "types.h" -#include "structs.h" - -/* Unknown size */ -typedef struct unk8005C2F0 { - u8 pad0[0xC]; - f32 unkC; - u8 pad10[0x108]; - s32 unk118; -} unk8005C2F0; - -extern u16 D_800DCDE0[16]; -extern f32 D_8011D5C0; -extern s8 D_8011D5C4; -extern s8 D_8011D5CC; - -void func_8005C2F0(Object *object, unk8005C2F0 *arg1); -void func_8005CA78(u16 *arg0); -void func_8005CA84(f32 x, f32 y, f32 z, s32 arg3); -void func_8005CB04(s32 arg0); -void func_8005D048(Object *object, Object_Racer *arg1, s32 arg2); -void func_8005CB68(Object_Racer *racer, s8 *arg1); // Non Matching -void func_8005C364(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ - -#endif diff --git a/src/unknown_05DCD0.c b/src/unknown_05DCD0.c deleted file mode 100644 index c9b641a8..00000000 --- a/src/unknown_05DCD0.c +++ /dev/null @@ -1,38 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x8005D0D0 */ - -#include "unknown_05DCD0.h" - -#include "types.h" -#include "macros.h" - -/************ .data ************/ - -s16 D_800DCE00[16] = { - 0x022D, 0x00A7, 0x00A8, 0x00B7, 0x00B8, 0x00F4, 0x00F5, 0x00FA, 0x00FB, 0x0229, 0x022A, 0x002E, 0x002F, 0x0030, 0x0000, 0x0000 -}; - -s16 D_800DCE20[16] = { - 0x022C, 0x00A5, 0x00A6, 0x00B5, 0x00B6, 0x00F2, 0x00F3, 0x00F8, 0x00F9, 0x0227, 0x0228, 0x002E, 0x002F, 0x0030, 0x0000, 0x0000 -}; - -/*******************************/ - -/************ .bss ************/ - -s8 D_8011D5D0; -s8 D_8011D5D1; - -// These 3 might be a file boundary. -s32 D_8011D5D4; -s32 D_8011D5D8; -s32 D_8011D5DC; - -s8 D_8011D5E0; -s8 D_8011D5E1; - -/******************************/ - -GLOBAL_ASM("asm/non_matchings/unknown_05DCD0/func_8005D0D0.s") -GLOBAL_ASM("asm/non_matchings/unknown_05DCD0/func_8005D820.s") -GLOBAL_ASM("asm/non_matchings/unknown_05DCD0/func_8005E204.s") diff --git a/src/unknown_05DCD0.h b/src/unknown_05DCD0.h deleted file mode 100644 index d6f58a38..00000000 --- a/src/unknown_05DCD0.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _UNKNOWN_05DCD0_H_ -#define _UNKNOWN_05DCD0_H_ - -#include "types.h" -#include "structs.h" - -extern s16 D_800DCE00[16]; -extern s16 D_800DCE20[16]; - - -void func_8005D820(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, s32 *currentStickX, s32 *startTimer); /* extern */ -void func_8005D0D0(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ - -#endif diff --git a/src/unknown_05F0C0.c b/src/unknown_05F0C0.c deleted file mode 100644 index 062d198b..00000000 --- a/src/unknown_05F0C0.c +++ /dev/null @@ -1,27 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x8005E4C0 */ - -#include "unknown_05F0C0.h" - -#include "types.h" -#include "macros.h" - -/************ .data ************/ - -s16 D_800DCE40[16] = { - 0x0244, 0x0242, 0x0243, 0x0245, - 0x0246, 0x0247, 0x0248, 0x00F6, - 0x00F7, 0x0225, 0x0226, 0x002E, - 0x002F, 0x0030, 0x0000, 0x0000, -}; - -/*******************************/ - -/************ .bss ************/ - -s8 D_8011D5F0; -s8 D_8011D5F1; - -/******************************/ - -GLOBAL_ASM("asm/non_matchings/unknown_05F0C0/func_8005E4C0.s") diff --git a/src/unknown_05F0C0.h b/src/unknown_05F0C0.h deleted file mode 100644 index 4b5a6a7e..00000000 --- a/src/unknown_05F0C0.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _UNKNOWN_05F0C0_H_ -#define _UNKNOWN_05F0C0_H_ - -#include "types.h" -#include "structs.h" - -extern s16 D_800DCE40[16]; - -void func_8005E4C0(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ - -#endif diff --git a/src/unknown_05F690.c b/src/unknown_05F690.c deleted file mode 100644 index e3370a80..00000000 --- a/src/unknown_05F690.c +++ /dev/null @@ -1,24 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x8005EA90 */ - -#include "unknown_05F690.h" - -#include "types.h" -#include "macros.h" - -/************ .data ************/ - -s16 D_800DCE60[14] = { - 0x022C, 0x00A5, 0x00A6, 0x0057, 0x0051, 0x006D, 0x0052, 0x00F8, 0x00F9, 0x0227, 0x0228, 0x002E, 0x002F, 0x0030 -}; - -/*******************************/ - -/************ .bss ************/ - -s8 D_8011D600; -s8 D_8011D601; - -/******************************/ - -GLOBAL_ASM("asm/non_matchings/unknown_05F690/func_8005EA90.s") diff --git a/src/unknown_05F690.h b/src/unknown_05F690.h deleted file mode 100644 index 8e0be470..00000000 --- a/src/unknown_05F690.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _UNKNOWN_05F690_H_ -#define _UNKNOWN_05F690_H_ - -#include "types.h" -#include "structs.h" - -extern s16 D_800DCE60[14]; - -void func_8005EA90(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ - -#endif diff --git a/src/unknown_05FF10.c b/src/unknown_05FF10.c deleted file mode 100644 index 025424b7..00000000 --- a/src/unknown_05FF10.c +++ /dev/null @@ -1,164 +0,0 @@ -/* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x8005F310 */ - -#include "unknown_05FF10.h" - -#include "types.h" -#include "macros.h" -#include "racer.h" -#include "unknown_05CEF0.h" -#include "objects.h" -#include "audio.h" -#include "camera.h" -#include "particles.h" - -/************ .data ************/ - -//sSoundEffectsPool index values? -s16 D_800DCE80[14] = { - SOUND_VOICE_BOSS_LAUGH2, - SOUND_VOICE_TRICKY_HM, - SOUND_VOICE_TRICKY_HMMM, - SOUND_VOICE_WIZPIG_LAUGH4, - SOUND_VOICE_WIZPIG_LAUGH2, - SOUND_VOICE_WIZPIG_GROAN, - SOUND_VOICE_WIZPIG_LAUGH3, - SOUND_VOICE_SMOKEY_HAH, - SOUND_VOICE_SMOKEY_LAUGH, - SOUND_VOICE_SMOKEY_HM, - SOUND_VOICE_SMOKEY_HM2, - SOUND_VOICE_CONKER_YEHAHA, - SOUND_VOICE_TIMBER_WOW, - SOUND_WHOOSH2 -}; - -/*******************************/ - -/************ .bss ************/ - -s8 D_8011D610; -s8 D_8011D611; - -/******************************/ - -#ifdef NON_EQUIVALENT -// Seems to be mostly regalloc and stack differences -void func_8005F310(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { - s16 sp3E; - s16 sp3C; - s16 sp3A; - Object *tempObj; - Object_64 *obj64; - Object_68 *obj68; - f32 zVelSquared; - f32 xVelSquared; - f32 temp_f2_3; - - func_8005CA78(D_800DCE80); - racer->unk1EC = 0; - sp3E = obj->segment.unk38.byte.unk3A; - sp3C = obj->segment.animFrame; - sp3A = racer->unk16A; - if ((racer->velocity < 0.3) && (racer->velocity > -0.3)) { - *buttonsPressed = 0; - } - if (racer->raceFinished == TRUE && func_80023568()) { - func_80021400(130); - racer->raceFinished++; - } - if (*startTimer == 100) { - D_8011D610 = 0; - } - racer->unk1F5 = 0; - if (racer->playerIndex == -1) { - if (*startTimer != 100) { - *startTimer -= 30; - if (*startTimer < 0) { - if (D_8011D611 == 0) { - func_8005CB04(0); - } - D_8011D611 = 1; - *startTimer = 0; - *input |= A_BUTTON; - } else { - D_8011D611 = 0; - } - } - } - racer->unk1D6 = 10; - func_80049794(updateRate, updateRateF, obj, racer); - racer->unk1D6 = racer->unk1D7; - obj->unk74 = 0; - racer->unk16A = sp3A; - obj->segment.unk38.byte.unk3A = sp3E; - obj->segment.animFrame = sp3C; - if ((racer->attackType != ATTACK_NONE) && (obj->segment.unk38.byte.unk3A != 1)) { - func_8005CB04(1); - play_sound_global(SOUND_EXPLOSION, NULL); - func_80069F28(12.0f); - obj->segment.x_velocity *= 0.4; - obj->segment.z_velocity *= 0.4; - obj->segment.unk38.byte.unk3A = 1; - racer->unkC = 0; - obj->segment.y_velocity += 4.0; - } - racer->attackType = ATTACK_NONE; - if (racer->unk148 != NULL) { - xVelSquared = obj->segment.x_velocity * obj->segment.x_velocity; - zVelSquared = obj->segment.z_velocity * obj->segment.z_velocity; - racer->velocity = -sqrtf((xVelSquared * xVelSquared) + (zVelSquared * zVelSquared)); - if (racer->velocity > -0.5) { - racer->velocity = 0; - obj->segment.x_velocity = 0; - obj->segment.y_velocity = 0; - obj->segment.z_velocity = 0; - } - } - racer->unkC += (updateRateF * 2.0); - obj68 = obj->unk68[0]; - temp_f2_3 = ((obj68->objModel->animations[obj->segment.unk38.byte.unk3A].unk4 * 16) - 17); - while (temp_f2_3 <= racer->unkC) { - racer->unkC -= temp_f2_3; - obj68->unk10 = -1; - } - while (racer->unkC <= 0) { - racer->unkC += temp_f2_3; - obj68->unk10 = -1; - } - if ((obj->segment.unk38.byte.unk3A == 1) && (obj68->unk10 == -1)) { - obj->segment.unk38.byte.unk3A = 0; - racer->unkC = 0; - } - obj->unk74 = 0; - obj->segment.animFrame = racer->unkC; - func_800AF714(obj, updateRate); - func_8005D048(obj, racer, 40); - if (*startTimer != 100) { - tempObj = func_8000BF44(-1); - if (tempObj != NULL) { - tempObj->unk78 = 0; - obj64 = tempObj->unk64; - if (obj64 != NULL) { - // This part here is HIHGLY suspicious, and probably wrong. - // It's probably an unidentified unk64 struct. - // Though it could actually be effect box once we add some defined attributes. - obj64->effect_box.pad0[0x72] += updateRate; - obj64->effect_box.pad0[0x70] = 2; - obj64->racer.unk74 = 1.0f; - func_8000B750(obj, -1, 2, 1, 1); - } - } - } - tempObj = get_racer_object(0); - obj64 = tempObj->unk64; - if ((obj == tempObj->interactObj->obj) && (tempObj->interactObj->unk14 & 8) && (obj->segment.unk38.byte.unk3A == 1)) { - obj64->racer.attackType = ATTACK_SQUISHED; - } - if ((obj64->racer.raceFinished != FALSE) && (D_8011D610 == 0)) { - D_8011D610 = 1; - func_8005CB68(obj64, &D_8011D610); - } -} -#else -GLOBAL_ASM("asm/non_matchings/unknown_05FF10/func_8005F310.s") -#endif diff --git a/src/unknown_05FF10.h b/src/unknown_05FF10.h deleted file mode 100644 index f6f1602d..00000000 --- a/src/unknown_05FF10.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _UNKNOWN_05FF10_H_ -#define _UNKNOWN_05FF10_H_ - -#include "types.h" -#include "structs.h" - -extern s16 D_800DCE80[14]; - -//Nonmatching -void func_8005F310(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ - -#endif diff --git a/src/vehicle_bluey.c b/src/vehicle_bluey.c new file mode 100644 index 00000000..645dec1f --- /dev/null +++ b/src/vehicle_bluey.c @@ -0,0 +1,225 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x8005D0D0 */ + +#include "vehicle_misc.h" + +#include "types.h" +#include "macros.h" +#include "math_util.h" +#include "objects.h" +#include "object_functions.h" +#include "unknown_008C40.h" +#include "racer.h" +#include "particles.h" + +/************ .data ************/ + +u16 D_800DCE00[16] = { + SOUND_VOICE_BLUEY_EH3, + SOUND_VOICE_BLUEY_EH, + SOUND_VOICE_BLUEY_OHNO, + SOUND_VOICE_BLUEY_HAHA, + SOUND_VOICE_BLUEY_HAHA2, + SOUND_VOICE_BLUEY_EH2, + SOUND_VOICE_BLUEY_OHNO2, + SOUND_VOICE_BLUEY_HAHA3, + SOUND_VOICE_BLUEY_HAHA4, + SOUND_VOICE_BLUEY_AIEE, + SOUND_VOICE_BLUEY_OHNO3, + SOUND_VOICE_CONKER_YEHAHA, + SOUND_VOICE_TIMBER_WOW, + SOUND_WHOOSH2, + SOUND_NONE, + SOUND_NONE, +}; + +u16 D_800DCE20[16] = { + SOUND_VOICE_BOSS_LAUGH2, + SOUND_VOICE_TRICKY_HM, + SOUND_VOICE_TRICKY_HMMM, + SOUND_VOICE_WIZPIG_HA, + SOUND_VOICE_WIZPIG_H2, + SOUND_VOICE_SMOKEY_EH, + SOUND_VOICE_SMOKEY_HEH, + SOUND_VOICE_SMOKEY_HAH, + SOUND_VOICE_SMOKEY_LAUGH, + SOUND_VOICE_SMOKEY_HM, + SOUND_VOICE_SMOKEY_HM2, + SOUND_VOICE_CONKER_YEHAHA, + SOUND_VOICE_TIMBER_WOW, + SOUND_WHOOSH2, + SOUND_NONE, + SOUND_NONE, +}; + +/*******************************/ + +/************ .bss ************/ + +s8 D_8011D5D0; +s8 D_8011D5D1; + +/******************************/ + +/** + * Top level function for the Bluey vehicle, as seen in the Snowflake Mountain boss stage. +*/ +void update_bluey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { + s16 sp5E; + s16 sp5C; + s16 sp5A; + f32 xDiff; + f32 zDiff; + s32 var_v0; + s32 sp48; + ObjectModel *objModel; + Object_68 *obj68; + s32 sp3C; + UNUSED s32 pad; + Object *firstRacerObj; + + set_boss_voice_clip_offset(D_800DCE00); + *buttonsPressed &= ~R_TRIG; + *input &= ~R_TRIG; + sp5E = obj->segment.unk38.byte.unk3B; + sp5C = obj->segment.animFrame; + sp5A = racer->headAngle; + if (racer->raceFinished == TRUE && func_80023568()) { + func_80021400(130); + racer->raceFinished++; + } + sp48 = *startTimer; + if (sp48 == 100) { + D_8011D5D0 = 0; + } + if (racer->playerIndex == PLAYER_COMPUTER) { + if (*startTimer != 100) { + *startTimer -= 15; + if (*startTimer < 0) { + if (D_8011D5D1 == 0) { + func_8005CB04(0); + racer->boostTimer = 3; + } + D_8011D5D1 = 1; + *startTimer = 0; + *input |= A_BUTTON; + } else { + D_8011D5D1 = 0; + } + } + } + + func_8004F7F4(updateRate, updateRateF, obj, racer); + *startTimer = sp48; + racer->lateral_velocity = 0.0f; + racer->headAngle = sp5A; + obj->segment.unk38.byte.unk3B = (s8) sp5E; + obj->segment.animFrame = sp5C; + if (racer->attackType != ATTACK_NONE) { + if (obj->segment.unk38.byte.unk3B != 4) { + racer->unk1CD = obj->segment.unk38.byte.unk3B; + obj->segment.unk38.byte.unk3B = 4; + racer->unkC = 0.0f; + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, NULL); + set_camera_shake(12.0f); + racer->attackType = ATTACK_NONE; + racer->velocity *= 0.3; + obj->segment.y_velocity += 7.5; + } + } + if (racer->unk148 != NULL) { + xDiff = obj->segment.x_velocity * obj->segment.x_velocity; + zDiff = obj->segment.z_velocity * obj->segment.z_velocity; + racer->velocity = -sqrtf((xDiff * xDiff) + (zDiff * zDiff)); + } + sp3C = FALSE; + if ((find_next_checkpoint_node(racer->checkpoint, racer->unk1C8))->unk36[racer->unk1CA] == 1) { + sp3C = TRUE; + } + if (obj->segment.unk38.byte.unk3B != 4) { + if (racer->velocity < -2.0) { + if (sp3C) { + if (racer->unk1CD != 3) { + racer->unkC = 40.0f; + } + obj->segment.unk38.byte.unk3B = 3; + var_v0 = racer->steerAngle; + var_v0 *= 2; + var_v0 = 40 - var_v0; + if (var_v0 < 0) { + var_v0 = 0; + } + if (var_v0 > 73) { + var_v0 = 73; + } + racer->unk1CD = 3; + racer->unkC += (var_v0 - racer->unkC) * 0.25; + } else { + racer->unk1CD = 0; + obj->segment.unk38.byte.unk3B = 0; + racer->unkC -= (racer->velocity * updateRateF) * 0.5; + } + } else if (racer->velocity < -0.1 || 0.1 < racer->velocity) { + racer->unk1CD = 1; + obj->segment.unk38.byte.unk3B = 1; + racer->unkC -= racer->velocity * updateRateF * 2; + } else { + racer->unk1CD = 2; + obj->segment.unk38.byte.unk3B = 2; + racer->unkC += updateRateF * 1.0; + } + } else { + racer->unkC += updateRateF * 1.0; + } + obj68 = *obj->unk68; + objModel = obj68->objModel; + xDiff = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 16) - 17; + while (racer->unkC < 0.0f) { + racer->unkC += xDiff; + obj68->unk10 = -1; + } + while (xDiff < racer->unkC) { + racer->unkC -= xDiff; + obj68->unk10 = -1; + } + if ((obj68->unk10 == -1) && (obj->segment.unk38.byte.unk3B == 4)) { + obj->segment.unk38.byte.unk3B = racer->unk1CD; + } + sp5C = obj->segment.animFrame; + obj->segment.animFrame = racer->unkC; + obj->unk74 = 0; + if (obj->segment.unk38.byte.unk3B == 0) { + func_800113CC(obj, 2, sp5C, 172, 173); + obj->unk74 |= 3; + } + func_800AFC3C(obj, updateRate); + fade_when_near_camera(obj, racer, 0x28); + firstRacerObj = get_racer_object(0); + xDiff = firstRacerObj->segment.trans.x_position - obj->segment.trans.x_position; + zDiff = firstRacerObj->segment.trans.z_position - obj->segment.trans.z_position; + if (sqrtf((xDiff * xDiff) + (zDiff * zDiff)) < 700.0) { + sp48 = (arctan2_f(xDiff, zDiff) - (obj->segment.trans.y_rotation & 0xFFFF)) + 0x8000; + WRAP(sp48, -0x8000, 0x8000); + CLAMP(sp48, -0xC00, 0xC00); + racer->headAngleTarget = sp48; + } + if (obj->segment.unk38.byte.unk3B == 1) { + if ((racer->unk1E7 & 0x1F) < 10) { + racer->headAngleTarget >>= 1; + } + } + if (obj->segment.unk38.byte.unk3B == 3) { + racer->headAngleTarget = 0; + } + racer = (Object_Racer *) firstRacerObj->unk64; + if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) { + racer->attackType = ATTACK_SQUISHED; + } + if (racer->raceFinished) { + if (D_8011D5D0 == 0) { + D_8011D5D0 = 1; + func_8005CB68(racer, &D_8011D5D0); + } + } +} diff --git a/src/vehicle_bubbler.c b/src/vehicle_bubbler.c new file mode 100644 index 00000000..1840257a --- /dev/null +++ b/src/vehicle_bubbler.c @@ -0,0 +1,179 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x8005E4C0 */ + +#include "vehicle_misc.h" + +#include "types.h" +#include "macros.h" +#include "racer.h" +#include "math_util.h" +#include "objects.h" +#include "particles.h" +#include "printf.h" + +/************ .data ************/ + +u16 D_800DCE40[16] = { + SOUND_VOICE_BUBBLER_HOHO, + SOUND_VOICE_BUBBLER_OW, + SOUND_VOICE_BUBBLER_AUGH, + SOUND_VOICE_BUBBLER_HOHO2, + SOUND_VOICE_BUBBLER_AW, + SOUND_VOICE_BUBBLER_OW2, + SOUND_VOICE_BUBBLER_AUGH2, + SOUND_VOICE_TRICKY_LAUGH, + SOUND_VOICE_TRICKY_LAUGH2, + SOUND_VOICE_TRICKY_OW, + SOUND_VOICE_TRICKY_OW2, + SOUND_VOICE_CONKER_YEHAHA, + SOUND_VOICE_TIMBER_WOW, + SOUND_WHOOSH2, + SOUND_NONE, + SOUND_NONE, +}; + +/*******************************/ + +/************ .bss ************/ + +s8 D_8011D5F0; +s8 D_8011D5F1; + +/******************************/ + +/** + * Top level function for updating the "Bubbler" vehicle. + * Basically this controls the Bubbler boss on Sherbert Island, who follows a path, then throws special tripmines and bubble traps on the course. +*/ +void update_bubbler(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { + s16 sp56; + s16 animFrame; + s16 sp52; + s32 objectID; + f32 zDiff; + Object_68 *gfxData; + s32 timer; + UNUSED s32 pad; + s32 sp38; + ObjectModel *model; + Object *firstRacerObj; + f32 xDiff; + s32 temp2; + + set_boss_voice_clip_offset(D_800DCE40); + *buttonsPressed &= ~R_TRIG; + *input &= ~R_TRIG; + sp56 = obj->segment.unk38.byte.unk3B; + animFrame = obj->segment.animFrame; + sp52 = racer->headAngle; + if (racer->raceFinished == TRUE) { + func_80021400(130); + racer->raceFinished++; + } + timer = *startTimer; + if (timer == 100) { + D_8011D5F0 = 0; + } + if (racer->playerIndex == PLAYER_COMPUTER && *startTimer != 100) { + *startTimer -= 30; + if (*startTimer < 0) { + if (D_8011D5F1 == 0) { + func_8005CB04(0); + racer->boostTimer = 5; + } + D_8011D5F1 = 1; + *startTimer = 0; + *input |= 0x8000; + } else { + D_8011D5F1 = 0; + } + } + func_8004F7F4(updateRate, updateRateF, obj, racer); + *startTimer = timer; + racer->lateral_velocity = 0.0f; + racer->headAngle = sp52; + obj->segment.unk38.byte.unk3B = sp56; + obj->segment.animFrame = animFrame; + if (racer->attackType != ATTACK_NONE && obj->segment.unk38.byte.unk3B != 2) { + racer->unk1CD = obj->segment.unk38.byte.unk3B; + obj->segment.unk38.byte.unk3B = 2; + obj->segment.y_velocity += 7.5; + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, 0); + set_camera_shake(12.0f); + racer->velocity *= 0.3; + racer->unkC = 0.0f; + } + racer->attackType = ATTACK_NONE; + if (racer->unk148 != 0) { + xDiff = obj->segment.x_velocity * obj->segment.x_velocity; + zDiff = obj->segment.z_velocity * obj->segment.z_velocity; + racer->velocity = -sqrtf((xDiff * xDiff) + (zDiff * zDiff)); + } + gfxData = *obj->unk68; + model = gfxData->objModel; + xDiff = (model->animations[obj->segment.unk38.byte.unk3B].unk4 * 16) - 17; + obj->segment.unk38.byte.unk3B = 1; + racer->unkC += 2.0 * updateRateF; + while (racer->unkC < 0.0f) { + racer->unkC += xDiff; + gfxData->unk10 = -1; + } + while (xDiff < racer->unkC) { + racer->unkC -= xDiff; + gfxData->unk10 = -1; + } + if (gfxData->unk10 == -1 && obj->segment.unk38.byte.unk3B == 2) { + obj->segment.unk38.byte.unk3B = 1; + racer->unkC = 0.0f; + } + obj->segment.animFrame = racer->unkC; + if (racer->playerIndex == PLAYER_COMPUTER) { + temp2 = func_80023568(); + if (temp2 != 0) { + objectID = 0x110; + if (temp2 == 6) { + objectID = 0x12A; + } + func_8005E204(obj, racer, 0.0f, objectID, 0x245); + } + } + obj->unk74 = 0; + func_800AFC3C(obj, updateRate); + fade_when_near_camera(obj, racer, 0x28); + switch (obj->segment.unk38.byte.unk3B) { + case 1: + sp38 = 0x2500; + break; + case 2: + sp38 = 0x100; + break; + default: + sp38 = 0x1500; + break; + } + firstRacerObj = get_racer_object(0); + xDiff = firstRacerObj->segment.trans.x_position - obj->segment.trans.x_position; + zDiff = firstRacerObj->segment.trans.z_position - obj->segment.trans.z_position; + if (sqrtf((xDiff * xDiff) + (zDiff * zDiff)) < 700.0) { + timer = (arctan2_f(xDiff, zDiff) - (obj->segment.trans.y_rotation & 0xFFFF)) + 0x8000; + WRAP(timer, -0x8000, 0x8000); + CLAMP(timer, -sp38, sp38); + racer->headAngleTarget = timer; + } + if (obj->segment.unk38.byte.unk3B == 1) { + if ((racer->unk1E7 & 0x1F) < 10) { + racer->headAngleTarget >>= 1; + } + } + racer = (Object_Racer *) firstRacerObj->unk64; + if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) { + racer->attackType = ATTACK_SQUISHED; + } + if (racer->raceFinished) { + if (D_8011D5F0 == 0) { + D_8011D5F0 = 1; + func_8005CB68(racer, &D_8011D5F0); + } + } +} diff --git a/src/vehicle_misc.h b/src/vehicle_misc.h new file mode 100644 index 00000000..d9f74777 --- /dev/null +++ b/src/vehicle_misc.h @@ -0,0 +1,35 @@ +#ifndef _VEHICLE_MISC_H_ +#define _VEHICLE_MISC_H_ + +#include "types.h" +#include "structs.h" + +extern u16 D_800DCDE0[16]; +extern u16 D_800DCE20[16]; +extern u16 D_800DCE40[16]; +extern s16 D_800DCE60[14]; +extern s16 D_800DCE80[14]; + +typedef struct unk8005C2F0 { + u8 pad0[0xC]; + f32 unkC; + u8 pad10[0x108]; + s32 unk118; +} unk8005C2F0; + +void update_tricky(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); +void update_bluey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); +void update_bubbler(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); +void update_smokey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, s32 *stickMag, s32 *startTimer); +void update_wizpig(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); +void update_rocket(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); +void func_8005E204(Object *obj, Object_Racer *racer, f32 arg2, s32 objectID, s32 arg4); +void func_8005C2F0(Object *object, unk8005C2F0 *arg1); +void set_boss_voice_clip_offset(u16 *soundID); +void func_8005CA84(f32 x, f32 y, f32 z, s32 arg3); +void func_8005CB04(s32 arg0); +void fade_when_near_camera(Object *object, Object_Racer *racer, s32 distance); + +void func_8005CB68(Object_Racer *racer, s8 *arg1); // Non Matching + +#endif diff --git a/src/vehicle_rocket.c b/src/vehicle_rocket.c new file mode 100644 index 00000000..698db24f --- /dev/null +++ b/src/vehicle_rocket.c @@ -0,0 +1,165 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x8005F310 */ + +#include "vehicle_misc.h" + +#include "types.h" +#include "macros.h" +#include "racer.h" +#include "objects.h" +#include "audio.h" +#include "camera.h" +#include "particles.h" + +/************ .data ************/ + +//sSoundEffectsPool index values? +s16 D_800DCE80[14] = { + SOUND_VOICE_BOSS_LAUGH2, + SOUND_VOICE_TRICKY_HM, + SOUND_VOICE_TRICKY_HMMM, + SOUND_VOICE_WIZPIG_LAUGH4, + SOUND_VOICE_WIZPIG_LAUGH2, + SOUND_VOICE_WIZPIG_GROAN, + SOUND_VOICE_WIZPIG_LAUGH3, + SOUND_VOICE_SMOKEY_HAH, + SOUND_VOICE_SMOKEY_LAUGH, + SOUND_VOICE_SMOKEY_HM, + SOUND_VOICE_SMOKEY_HM2, + SOUND_VOICE_CONKER_YEHAHA, + SOUND_VOICE_TIMBER_WOW, + SOUND_WHOOSH2 +}; + +/*******************************/ + +/************ .bss ************/ + +s8 D_8011D610; +s8 D_8011D611; + +/******************************/ + +/** + * Top level update function for the Wizpig Rocket vehicle, used in the Wizpig rematch. +*/ +void update_rocket(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { + s16 sp3E; + s16 sp3C; + s16 sp3A; + f32 zDiff; + f32 xDiff; + s32 sp2C; + Object *someObj; + Object *firstRacerObj; + Object_WizpigRocket *rocket; + Object_68 *gfxData; + ObjectModel *objModel; + + set_boss_voice_clip_offset((u16* ) D_800DCE80); + racer->unk1EC = 0; + sp3E = obj->segment.unk38.byte.unk3B; + sp3C = obj->segment.animFrame; + sp3A = racer->headAngle; + if ((racer->velocity < 0.3) && (-0.3 < racer->velocity)) { + *buttonsPressed = 0; + } + if (racer->raceFinished == TRUE && func_80023568()) { + func_80021400(130); + racer->raceFinished++; + } + sp2C = *startTimer; + if (sp2C == 0x64) { + D_8011D610 = 0; + } + racer->unk1F5 = 0; + if (racer->playerIndex == PLAYER_COMPUTER) { + if (*startTimer != 100) { + *startTimer -= 30; + if (*startTimer < 0) { + if (D_8011D611 == 0) { + func_8005CB04(0); + } + D_8011D611 = 1; + *startTimer = 0; + *input |= A_BUTTON; + } else { + D_8011D611 = 0; + } + } + } + racer->vehicleID = VEHICLE_CARPET; + func_80049794(updateRate, updateRateF, obj, racer); + racer->vehicleID = racer->vehicleIDPrev; + *startTimer = sp2C; + obj->unk74 = 0; + racer->headAngle = sp3A; + obj->segment.unk38.byte.unk3B = sp3E; + obj->segment.animFrame = sp3C; + if (racer->attackType != ATTACK_NONE && obj->segment.unk38.byte.unk3B != 1) { + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, NULL); + set_camera_shake(12.0f); + obj->segment.x_velocity *= 0.4; + obj->segment.unk38.byte.unk3B = 1; + obj->segment.z_velocity *= 0.4; + racer->unkC = 0.0f; + obj->segment.y_velocity += 4.0; + } + racer->attackType = ATTACK_NONE; + if (racer->unk148 != NULL) { + xDiff = obj->segment.x_velocity * obj->segment.x_velocity; + zDiff = obj->segment.z_velocity * obj->segment.z_velocity; + racer->velocity = -sqrtf((xDiff * xDiff) + (zDiff * zDiff)); + if (racer->velocity > -0.5) { + racer->velocity = 0.0f; + obj->segment.x_velocity = 0.0f; + obj->segment.y_velocity = 0.0f; + obj->segment.z_velocity = 0.0f; + } + } + racer->unkC += 2.0 * updateRateF; + gfxData = *obj->unk68; + objModel = gfxData->objModel; + xDiff = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 16) - 17; + while (xDiff <= racer->unkC) { + racer->unkC -= xDiff; + gfxData->unk10 = -1; + } + while (racer->unkC <= 0.0f) { + racer->unkC += xDiff; + gfxData->unk10 = -1; + } + if (obj->segment.unk38.byte.unk3B == 1 && gfxData->unk10 == -1) { + obj->segment.unk38.byte.unk3B = 0; + racer->unkC = 0.0f; + } + obj->segment.animFrame = racer->unkC; + obj->unk74 = 0; + func_800AF714(obj, updateRate); + fade_when_near_camera(obj, racer, 40); + if (*startTimer != 100) { + someObj = func_8000BF44(-1); + if (someObj != NULL) { + rocket = (Object_WizpigRocket *) someObj->unk64; + someObj->unk78 = 0; + if (rocket != NULL) { + rocket->unk72 += updateRate; + rocket->unk70 = 2; + rocket->unk74 = 1.0f; + func_8000B750(obj, -1, 2, 1, 1); + } + } + } + firstRacerObj = get_racer_object(0); + racer = (Object_Racer*)firstRacerObj->unk64; + if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) { + racer->attackType = ATTACK_SQUISHED; + } + if (racer->raceFinished != 0) { + if (D_8011D610 == 0) { + D_8011D610 = 1; + func_8005CB68(racer, &D_8011D610); + } + } +} diff --git a/src/vehicle_smokey.c b/src/vehicle_smokey.c new file mode 100644 index 00000000..49b0e194 --- /dev/null +++ b/src/vehicle_smokey.c @@ -0,0 +1,294 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x8005D820 */ + +#include "vehicle_misc.h" + +#include "types.h" +#include "macros.h" +#include "math_util.h" +#include "objects.h" +#include "object_functions.h" +#include "unknown_008C40.h" +#include "racer.h" +#include "particles.h" + +/************ .bss ************/ + +s8 D_8011D5E0; +s8 D_8011D5E1; + +/******************************/ + +/** + * Top level function for updating the "Smokey" vehicle as seen in the Dragon Forest boss stage. + * Also controls the pteradactyl found in Dino domain, from when it had a larger role ingame. +*/ +void update_smokey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, s32 *stickMag, s32 *startTimer) { + s16 sp5E; + s16 sp5C; + s16 sp5A; + f32 xDiff; + f32 zDiff; + ObjectModel *objModel; + Object_68 *obj68; + s32 sp44; + f32 var_f2; + UNUSED s32 pad; + s16 newvar; + Object *firstRacerObj; + + set_boss_voice_clip_offset(D_800DCE20); + sp5E = obj->segment.unk38.byte.unk3B; + sp5C = obj->segment.animFrame; + sp5A = racer->headAngle; + if (racer->velocity < 0.3 && -0.3 < racer->velocity) { + *stickMag = 0; + } + if (racer->raceFinished == TRUE && func_80023568()) { + func_80021400(130); + racer->raceFinished++; + } + sp44 = *startTimer; + if (sp44 == 100) { + D_8011D5E0 = 0; + } + if (racer->playerIndex == PLAYER_COMPUTER && *startTimer != 100) { + *startTimer -= 60; + if (*startTimer < 0) { + if (D_8011D5E1 == 0) { + func_8005CB04(0); + racer->boostTimer = 10; + } + D_8011D5E1 = 1; + *startTimer = 0; + *input |= A_BUTTON; + } else { + D_8011D5E1 = 0; + } + } + racer->vehicleID = VEHICLE_SMOKEY; + func_80049794(updateRate, updateRateF, obj, racer); + racer->vehicleID = racer->vehicleIDPrev; + *startTimer = sp44; + obj->unk74 = 0; + racer->headAngle = sp5A; + obj->segment.unk38.byte.unk3B = sp5E; + obj->segment.animFrame = sp5C; + if (racer->attackType != ATTACK_NONE && obj->segment.unk38.byte.unk3B != 5) { + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, 0); + set_camera_shake(12.0f); + obj->segment.unk38.byte.unk3B = 5; + obj->segment.x_velocity *= 0.27; + obj->segment.z_velocity *= 0.27; + racer->unkC = 0.0f; + obj->segment.y_velocity += 4.0; + } + racer->attackType = ATTACK_NONE; + if (racer->unk148 != 0) { + xDiff = obj->segment.x_velocity * obj->segment.x_velocity; + zDiff = obj->segment.z_velocity * obj->segment.z_velocity; + racer->velocity = -sqrtf((xDiff * xDiff) + (zDiff * zDiff)); + if (racer->velocity > -0.5) { + racer->velocity = 0.0f; + obj->segment.x_velocity = 0.0f; + obj->segment.y_velocity = 0.0f; + obj->segment.z_velocity = 0.0f; + } + } + obj68 = *obj->unk68; + objModel = obj68->objModel; + xDiff = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 16) - 17; + var_f2 = (racer->velocity * updateRateF) * 0.45; + if (var_f2 <= 0.0) { + if (var_f2 > -2.0) { + var_f2 = -2.0f; + } + } else if (var_f2 < 2.0) { + var_f2 = 2.0f; + } + switch (obj->segment.unk38.byte.unk3B) { + case 0: + racer->unk1CD = 0; + racer->unkC += 1.0 * updateRateF; + break; + case 1: + if (racer->unk1CD == 2) { + racer->unkC += var_f2; + } else { + racer->unkC -= var_f2; + } + break; + case 2: + racer->unk1CD = 2; + racer->unkC -= var_f2; + break; + case 3: + if (racer->unk1CD == 4) { + racer->unkC -= 2.0 * updateRateF; + } + else { + racer->unkC += 2.0 * updateRateF; + } + break; + case 4: + racer->unk1CD = 4; + racer->unkC += 2.0 * updateRateF; + break; + case 5: + racer->unkC += 2.0 * updateRateF; + break; + default: + break; + } + while (xDiff <= racer->unkC) { + racer->unkC -= xDiff; + obj68->unk10 = -1; + } + while (racer->unkC <= 0.0f) { + racer->unkC += xDiff; + obj68->unk10 = -1; + } + if (obj->segment.unk38.byte.unk3B == 2 && racer->unk1E2 == 0 && racer->velocity < -6.5) { + obj->segment.unk38.byte.unk3B = 3; + racer->unkC = 0.0f; + } + if (obj68->unk10 == -1 || obj->segment.unk38.byte.unk3B == 0) { + if (obj->segment.unk38.byte.unk3B == 5) { + obj->segment.unk38.byte.unk3B = racer->unk1CD; + racer->unkC = 0.0f; + } else if (obj->segment.unk38.byte.unk3B == 1) { + if (racer->unk1CD == 0) { + obj->segment.unk38.byte.unk3B = 2; + } else { + obj->segment.unk38.byte.unk3B = 0; + } + } else if (obj->segment.unk38.byte.unk3B == 3) { + if (racer->unk1CD == 4) { + obj->segment.unk38.byte.unk3B = 2; + } else { + obj->segment.unk38.byte.unk3B = 4; + } + } else if (-0.1 < racer->velocity && racer->velocity < 0.1) { + if (obj->segment.unk38.byte.unk3B == 2) { + obj->segment.unk38.byte.unk3B = 1; + racer->unkC = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 16) - 17; + } else { + obj->segment.unk38.byte.unk3B = 0; + } + } else { + if (obj->segment.unk38.byte.unk3B == 0) { + obj->segment.unk38.byte.unk3B = 1; + racer->unkC = 0.0f; + } + if (obj->segment.unk38.byte.unk3B == 4 && racer->unk1E2 != 0 && racer->velocity > -6.0) { + obj->segment.unk38.byte.unk3B = 3; + racer->unkC = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 16) - 17; + } + } + } + sp5C = obj->segment.animFrame; + obj->segment.animFrame = racer->unkC; + newvar = obj->segment.animFrame >> 4; + obj->unk74 = 0; + if (obj->segment.unk38.byte.unk3B != 1 && obj->segment.unk38.byte.unk3B != 2) { + sp5C >>= 4; + newvar = 1; + if (obj->segment.unk38.byte.unk3B == 0) { + newvar = 3; + } + if (sp5C == newvar && newvar + 1 == obj->segment.animFrame >> 4) { + func_80009558(SOUND_UNK_223, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 4, 0); + } + } + if (racer->vehicleIDPrev == 7 && racer->playerIndex == PLAYER_COMPUTER && func_80023568()) { + func_8005E204(obj, racer, 100.0f, 137, 165); + } + func_800AFC3C(obj, updateRate); + fade_when_near_camera(obj, racer, 40); + firstRacerObj = get_racer_object(0); + xDiff = firstRacerObj->segment.trans.x_position - obj->segment.trans.x_position; + zDiff = firstRacerObj->segment.trans.z_position - obj->segment.trans.z_position; + if (sqrtf((xDiff * xDiff) + (zDiff * zDiff)) < 700.0) { + sp44 = (arctan2_f(xDiff, zDiff) - (obj->segment.trans.y_rotation & 0xFFFF)) + 0x8000; + if (sp44 > 0x8000) { + sp44 -= 0xFFFF; + } + if (sp44 < -0x8000) { + sp44 += 0xFFFF; + } + if (sp44 > 0xC00) { + sp44 = 0xC00; + } + if (sp44 < -0xC00) { + sp44 = -0xC00; + } + racer->headAngleTarget = sp44; + } + if (obj->segment.unk38.byte.unk3B >= 2) { + if ((racer->unk1E7 & 0x1F) < 10) { + racer->headAngleTarget >>= 1; + } + } + racer = (Object_Racer *) firstRacerObj->unk64; + if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) { + racer->attackType = ATTACK_SQUISHED; + } + if (racer->raceFinished != FALSE) { + if (D_8011D5E0 == 0) { + D_8011D5E0 = 1; + func_8005CB68(racer, &D_8011D5E0); + } + } +} + +void func_8005E204(Object *obj, Object_Racer *racer, f32 arg2, s32 objectID, s32 arg4) { + Object **var_s6; + s32 sp80; + s32 sp7C; + LevelObjectEntry *temp_s2; + Object *temp_s1; + Object *newObj; + s32 i; + LevelObjectEntryCommon spawnObj; + f32 xDiff; + f32 zDiff; + f32 yDiff; + + var_s6 = func_8000E988(&sp80, &sp7C); + spawnObj.objectID = objectID; + spawnObj.size = (((objectID & 0x100) & 0xFFFF) >> 1) | 8; + spawnObj.x = obj->segment.trans.x_position - (racer->ox1 * arg2); + spawnObj.y = obj->segment.trans.y_position - (racer->oy1 * arg2); + spawnObj.z = obj->segment.trans.z_position - (racer->oz1 * arg2); + + for (i = 0; i < sp7C; i++) { + temp_s1 = var_s6[i]; + if (temp_s1->behaviorId == BHV_UNK_6B) { + temp_s2 = temp_s1->segment.unk3C_a.level_entry; + if ((s8) temp_s2->animation.z_rotation == racer->lap + 1 || (s8) temp_s2->animation.z_rotation == 0) { + xDiff = temp_s1->segment.trans.x_position - obj->segment.trans.x_position; + yDiff = temp_s1->segment.trans.y_position - obj->segment.trans.y_position; + zDiff = temp_s1->segment.trans.z_position - obj->segment.trans.z_position; + if (sqrtf((xDiff * xDiff) + (yDiff * yDiff) + (zDiff * zDiff)) < (f32) ((s8) temp_s2->animation.x_rotation & 0xFF) * 4.0) { + if (temp_s1->unk78 == 0) { + temp_s1->unk78 = 1; + newObj = spawn_object(&spawnObj, 1); + if (newObj != NULL) { + newObj->segment.unk3C_a.level_entry = NULL; + newObj->segment.x_velocity = obj->segment.x_velocity; + newObj->segment.y_velocity = obj->segment.y_velocity; + newObj->segment.z_velocity = obj->segment.z_velocity; + newObj->unk78_obj = temp_s1; + newObj->unk7C.word = (s8) temp_s2->animation.y_rotation * 60; + newObj->segment.animFrame = get_random_number_from_range(0, 255); + func_80009558(arg4, newObj->segment.trans.x_position, newObj->segment.trans.y_position, newObj->segment.trans.z_position, 4, NULL); + } + } + } else { + temp_s1->unk78 = 0; + } + } + } + } +} diff --git a/src/unknown_05CEF0.c b/src/vehicle_tricky.c similarity index 63% rename from src/unknown_05CEF0.c rename to src/vehicle_tricky.c index 8ba22801..ca41dc55 100644 --- a/src/unknown_05CEF0.c +++ b/src/vehicle_tricky.c @@ -1,7 +1,7 @@ /* The comment below is needed for this file to be picked up by generate_ld */ /* RAM_POS: 0x8005C2F0 */ -#include "unknown_05CEF0.h" +#include "vehicle_misc.h" #include "structs.h" #include "types.h" @@ -42,7 +42,7 @@ u16 D_800DCDE0[16] = { f32 D_8011D5C0; s8 D_8011D5C4; -u16 *D_8011D5C8; +u16 *gBossSoundIDOffset; s8 D_8011D5CC; /******************************/ @@ -60,184 +60,180 @@ void func_8005C2F0(Object *object, unk8005C2F0 *arg1) { D_8011D5C4 = 0; } -#ifdef NON_MATCHING -// Regalloc differences -void func_8005C364(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { +/** + * Top level function for updating the Tricky vehicle as seen in the Dino Domain boss. +*/ +void update_tricky(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { s16 sp56; s16 sp54; s16 sp52; - Object_Racer *temp_s0; - f32 temp_f14; - s32 var_at; - s32 var_v1; - f32 temp_f20; - s32 var_a1; - Object_68 *temp_v0_2; - Object *temp_v0_4; + f32 xDiff; + f32 zDiff; + ObjectModel *objModel; + s32 sp40; + Object_68 *obj68; + s32 sp38; + UNUSED s32 pad; + Object *firstRacerObj; - func_8005CA78(D_800DCDE0); + set_boss_voice_clip_offset(D_800DCDE0); *buttonsPressed &= ~R_TRIG; *input &= ~R_TRIG; - sp56 = obj->segment.unk38.byte.unk3A; + sp56 = obj->segment.unk38.byte.unk3B; sp54 = obj->segment.animFrame; - sp52 = racer->unk16A; + sp52 = racer->headAngle; if (racer->raceFinished == TRUE) { func_80021400(130); racer->raceFinished++; } - var_v1 = *startTimer; - if ((racer->playerIndex == PLAYER_COMPUTER) && (*startTimer != 100)) { - *startTimer -= 15; - if (*startTimer < 0) { - if (D_8011D5CC == 0) { - var_v1 = *startTimer; - func_8005CB04(0); - racer->boostTimer = 5; + sp40 = *startTimer; + if (racer->playerIndex == PLAYER_COMPUTER) { + if (*startTimer != 100) { + *startTimer -= 15; + if (*startTimer < 0) { + if (D_8011D5CC == 0) { + func_8005CB04(0); + racer->boostTimer = 5; + } + D_8011D5CC = 1; + *startTimer = 0; + *input |= A_BUTTON; + } else { + D_8011D5CC = 0; } - D_8011D5CC = 1; - *startTimer = 0; - *input |= A_BUTTON; - } else { - D_8011D5CC = 0; } } + func_8004F7F4(updateRate, updateRateF, obj, racer); - *startTimer = var_v1; + *startTimer = sp40; racer->lateral_velocity = 0.0f; - racer->unk16A = sp52; - obj->segment.unk38.byte.unk3A = sp56; + racer->headAngle = sp52; + obj->segment.unk38.byte.unk3B = sp56; obj->segment.animFrame = sp54; - if ((racer->attackType != ATTACK_NONE) && (obj->segment.unk38.byte.unk3A != 3)) { - racer->unk1CD = obj->segment.unk38.byte.unk3A; - obj->segment.unk38.byte.unk3A = 3; - obj->segment.y_velocity += 7.5; - func_8005CB04(1); - play_sound_global(SOUND_EXPLOSION, NULL); - func_80069F28(12.0f); - racer->velocity *= 0.3; - racer->unkC = 0.0f; + if (racer->attackType != 0) { + if (obj->segment.unk38.byte.unk3B != 3) { + racer->unk1CD = obj->segment.unk38.byte.unk3B; + obj->segment.unk38.byte.unk3B = 3; + obj->segment.y_velocity += 7.5; + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, NULL); + set_camera_shake(12.0f); + racer->velocity *= 0.3; + racer->unkC = 0.0f; + } } racer->attackType = ATTACK_NONE; if (racer->unk148 != NULL) { - temp_f20 = obj->segment.x_velocity * obj->segment.x_velocity; - temp_f14 = obj->segment.z_velocity * obj->segment.z_velocity; - racer->velocity = -sqrtf((temp_f20 * temp_f20) + (temp_f14 * temp_f14)); + xDiff = obj->segment.x_velocity * obj->segment.x_velocity; + zDiff = obj->segment.z_velocity * obj->segment.z_velocity; + racer->velocity = -sqrtf((xDiff * xDiff) + (zDiff * zDiff)); } - temp_v0_2 = *obj->unk68; - temp_f20 = ((temp_v0_2->objModel->animations[obj->segment.unk38.byte.unk3A].unk4 * 16) - 17); - if (obj->segment.unk38.byte.unk3A != 3) { + obj68 = *obj->unk68; + objModel = obj68->objModel; + xDiff = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 16) - 17; + if (obj->segment.unk38.byte.unk3B != 3) { if (racer->velocity < -2.0) { - obj->segment.unk38.byte.unk3A = 1; - racer->unkC -= racer->velocity * updateRateF * 0.5; - } else if ((racer->velocity < -0.1) || (racer->velocity > 0.1)) { - obj->segment.unk38.byte.unk3A = 2; - racer->unkC -= racer->velocity * updateRateF * 2; + obj->segment.unk38.byte.unk3B = 1; + racer->unkC -= (racer->velocity * updateRateF) * 0.5; + } else if (racer->velocity < -0.1 || 0.1 < racer->velocity) { + obj->segment.unk38.byte.unk3B = 2; + racer->unkC -= (racer->velocity * updateRateF) * 2; } else { - obj->segment.unk38.byte.unk3A = 0; - racer->unkC += (f64) updateRateF; + obj->segment.unk38.byte.unk3B = 0; + racer->unkC += 1.0 * updateRateF; } } else { - racer->unkC += (2.0 * (f64) updateRateF); + racer->unkC += 2.0 * updateRateF; } while (racer->unkC < 0.0f) { - racer->unkC += temp_f20; - temp_v0_2->unk10 = -1; + racer->unkC += xDiff; + obj68->unk10 = -1; } - while (temp_f20 < racer->unkC) { - racer->unkC -= temp_f20; - temp_v0_2->unk10 = -1; + while (xDiff < racer->unkC) { + racer->unkC -= xDiff; + obj68->unk10 = -1; } - if ((temp_v0_2->unk10 == -1) && (obj->segment.unk38.byte.unk3A == 3)) { - obj->segment.unk38.byte.unk3A = racer->unk1CD; + if (obj68->unk10 == -1 && obj->segment.unk38.byte.unk3B == 3) { + obj->segment.unk38.byte.unk3B = racer->unk1CD; } sp54 = obj->segment.animFrame; obj->segment.animFrame = racer->unkC; obj->unk74 = 0; - if (obj->segment.unk38.byte.unk3A == 1) { + if (obj->segment.unk38.byte.unk3B == 1) { func_800113CC(obj, 2, sp54, 172, 173); obj->unk74 |= 3; } func_800AFC3C(obj, updateRate); - func_8005D048(obj, racer, 120); - - switch(obj->segment.unk38.byte.unk3A) { + fade_when_near_camera(obj, racer, 120); + switch( obj->segment.unk38.byte.unk3B) { case 1: - var_a1 = 0x2500; + sp38 = 0x2500; break; case 2: - var_a1 = 0x100; + sp38 = 0x100; break; default: - var_a1 = 0x1500; + sp38 = 0x1500; break; } - - temp_v0_4 = get_racer_object(0); - temp_f20 = temp_v0_4->segment.trans.x_position - obj->segment.trans.x_position; - temp_f14 = temp_v0_4->segment.trans.z_position - obj->segment.trans.z_position; - if (sqrtf((temp_f20 * temp_f20) + (temp_f14 * temp_f14)) < 700.0) { - var_v1 = (arctan2_f(temp_f20, temp_f14) - (obj->segment.trans.y_rotation & 0xFFFF)) + 0x8000; - if (var_v1 >= 0x8001) { - var_v1 += 0xFFFF0001; - } - if (var_v1 < -0x8000) { - var_v1 += 0xFFFF; - } - var_at = var_v1 < -var_a1; - if (var_a1 < var_v1) { - var_v1 = var_a1; - var_at = var_v1 < -var_a1; - } - if (var_at != 0) { - var_v1 = -var_a1; - } - racer->unk16C = var_v1; + firstRacerObj = get_racer_object(0); + xDiff = firstRacerObj->segment.trans.x_position - obj->segment.trans.x_position; + zDiff = firstRacerObj->segment.trans.z_position - obj->segment.trans.z_position; + if (sqrtf((xDiff * xDiff) + (zDiff * zDiff)) < 700.0) { + sp40 = (arctan2_f(xDiff, zDiff) - (obj->segment.trans.y_rotation & 0xFFFF)) + 0x8000; + WRAP(sp40, -0x8000, 0x8000); + CLAMP(sp40, -sp38, sp38); + racer->headAngleTarget = sp40; } - if ((obj->segment.unk38.byte.unk3A == 1) && ((racer->unk1E7 & 0x1F) < 10)) { - racer->unk16C >>= 1; + if (obj->segment.unk38.byte.unk3B == 1) { + if ((racer->unk1E7 & 0x1F) < 0xA) { + racer->headAngleTarget >>= 1; + } } - temp_s0 = (Object_Racer *)temp_v0_4->unk64; - if (D_8011D5C0 < temp_v0_4->segment.trans.y_position) { - D_8011D5C0 = temp_v0_4->segment.trans.y_position; + racer = (Object_Racer *) firstRacerObj->unk64; + if (D_8011D5C0 < firstRacerObj->segment.trans.y_position) { + D_8011D5C0 = firstRacerObj->segment.trans.y_position; } - if ((temp_v0_4->segment.trans.y_position + 400.0) < D_8011D5C0) { - if (!func_800C018C() && is_in_two_player_adventure()) { + if ((firstRacerObj->segment.trans.y_position + 400.0) < D_8011D5C0) { + if (func_800C018C() == 0 && is_in_two_player_adventure()) { func_8006F398(); } func_8006F140(1); } - if ((obj == temp_v0_4->interactObj->obj) && (temp_v0_4->interactObj->unk14 & 8) && (obj->segment.unk38.byte.unk3A == 1)) { - temp_s0->attackType = ATTACK_SQUISHED; + if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) { + racer->attackType = ATTACK_SQUISHED; } - if ((temp_s0->raceFinished != FALSE) && (D_8011D5C4 == 0)) { - D_8011D5C4 = 1; - func_8005CB68(temp_s0, &D_8011D5C4); + if (racer->raceFinished != FALSE) { + if (D_8011D5C4 == 0) { + D_8011D5C4 = 1; + func_8005CB68(racer, &D_8011D5C4); + } } } -#else -GLOBAL_ASM("asm/non_matchings/unknown_05CEF0/func_8005C364.s") -#endif -void func_8005CA78(u16 *arg0) { - D_8011D5C8 = arg0; +/** + * Set the sound ID offset for a given boss clip. +*/ +void set_boss_voice_clip_offset(u16 *soundID) { + gBossSoundIDOffset = soundID; } -void func_8005CA84(f32 x, f32 y, f32 z, s32 arg3) { +void func_8005CA84(f32 x, f32 y, f32 z, s32 offset) { s8 phi_v1 = get_random_number_from_range(0, 1); - if (arg3 == 0) { + if (offset == 0) { phi_v1 = 0; } - arg3 += phi_v1; - func_80009558(D_8011D5C8[arg3], x, y, z, 4, 0); + offset += phi_v1; + func_80009558(gBossSoundIDOffset[offset], x, y, z, 4, 0); } -void func_8005CB04(s32 arg0) { +void func_8005CB04(s32 offset) { s8 phi_v1 = get_random_number_from_range(0, 1); - if (arg0 == 0) { + if (offset == 0) { phi_v1 = 0; } - arg0 += phi_v1; - play_sound_global(D_8011D5C8[arg0], 0); + offset += phi_v1; + play_sound_global(gBossSoundIDOffset[offset], 0); } #ifdef NON_EQUIVALENT @@ -379,12 +375,15 @@ void func_8005CB68(Object_Racer *racer, s8 *arg1) { GLOBAL_ASM("asm/non_matchings/unknown_05CEF0/func_8005CB68.s") #endif -void func_8005D048(Object *object, Object_Racer *arg1, s32 arg2) { - Object *sp1C = get_racer_object(0); - arg1->transparency = 0xFF; +/** + * When close to the camera, fade the object so it doesn't block the screen. + */ +void fade_when_near_camera(Object *object, Object_Racer *racer, s32 distance) { + Object *player = get_racer_object(0); + racer->transparency = 255; if (!func_8001139C()) { - if ((object->segment.unk30 + arg2) < sp1C->segment.unk30) { - arg1->transparency = 0x40; + if ((object->segment.unk30 + distance) < player->segment.unk30) { + racer->transparency = 64; } } } diff --git a/src/vehicle_wizpig.c b/src/vehicle_wizpig.c new file mode 100644 index 00000000..5825ec28 --- /dev/null +++ b/src/vehicle_wizpig.c @@ -0,0 +1,243 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x8005EA90 */ + +#include "vehicle_misc.h" + +#include "types.h" +#include "macros.h" +#include "racer.h" +#include "objects.h" +#include "object_functions.h" +#include "particles.h" + +/************ .data ************/ + +s16 D_800DCE60[14] = { + SOUND_VOICE_BOSS_LAUGH2, + SOUND_VOICE_TRICKY_HM, + SOUND_VOICE_TRICKY_HMMM, + SOUND_VOICE_WIZPIG_LAUGH4, + SOUND_VOICE_WIZPIG_LAUGH2, + SOUND_VOICE_WIZPIG_GROAN, + SOUND_VOICE_WIZPIG_LAUGH3, + SOUND_VOICE_SMOKEY_HAH, + SOUND_VOICE_SMOKEY_LAUGH, + SOUND_VOICE_SMOKEY_HM, + SOUND_VOICE_SMOKEY_HM2, + SOUND_VOICE_CONKER_YEHAHA, + SOUND_VOICE_TIMBER_WOW, + SOUND_WHOOSH2 +}; + +/*******************************/ + +/************ .bss ************/ + +s8 D_8011D600; +s8 D_8011D601; + +/******************************/ + +/** + * Top level function for updating the wizpig vehicle from the first boss race against him. +*/ +void update_wizpig(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { + s16 sp3E; + s16 sp3C; + s16 sp3A; + s16 sp38; + f32 zDiff; + f32 xDiff; + f32 var_f12; + s32 sp28; + Object *firstRacerObj; + ObjectModel *objModel; + Object_68 *gfxData; + + set_boss_voice_clip_offset((u16* ) D_800DCE60); + racer->unk1EC = 0; + sp3E = obj->segment.unk38.byte.unk3B; + sp3C = obj->segment.animFrame; + sp3A = racer->headAngle; + if (racer->velocity < 0.3 && -0.3 < racer->velocity) { + *buttonsPressed = 0; + } + if (racer->raceFinished == TRUE && func_80023568()) { + func_80021400(130); + racer->raceFinished++; + } + sp28 = *startTimer; + if (sp28 == 0x64) { + D_8011D600 = 0; + } + racer->unk1F5 = 0; + if (racer->playerIndex == PLAYER_COMPUTER) { + if (*startTimer != 100) { + *startTimer -= 30; + if (*startTimer < 0) { + if (D_8011D601 == 0) { + func_8005CB04(0); + racer->boostTimer = 10; + } + D_8011D601 = 1; + *startTimer = 0; + *input |= 0x8000; + } else { + D_8011D601 = 0; + } + } + } + racer->vehicleID = VEHICLE_WIZPIG; + func_80049794(updateRate, updateRateF, obj, racer); + racer->vehicleID = racer->vehicleIDPrev; + *startTimer = sp28; + obj->unk74 = 0; + racer->headAngle = sp3A; + obj->segment.unk38.byte.unk3B = sp3E; + obj->segment.animFrame = sp3C; + if (racer->attackType != 0 && obj->segment.unk38.byte.unk3B != 5) { + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, NULL); + set_camera_shake(12.0f); + obj->segment.unk38.byte.unk3B = 5; + obj->segment.x_velocity *= 0.4; + obj->segment.z_velocity *= 0.4; + racer->unkC = 0.0f; + obj->segment.y_velocity += 4.0; + } + racer->attackType = ATTACK_NONE; + if (racer->unk148 != NULL) { + xDiff = obj->segment.x_velocity * obj->segment.x_velocity; + zDiff = (obj->segment.z_velocity * obj->segment.z_velocity); + racer->velocity = -sqrtf((xDiff * xDiff) + (zDiff * zDiff)); + if (racer->velocity > -0.5) { + racer->velocity = 0.0f; + obj->segment.x_velocity = 0.0f; + obj->segment.y_velocity = 0.0f; + obj->segment.z_velocity = 0.0f; + } + } + sp38 = 0; + sp38 = sp38; + if (find_next_checkpoint_node(racer->checkpoint, racer->unk1C8)->unk36[racer->unk1CA] == 1) { + sp38 = 1; + } + racer->x_rotation_offset = -obj->segment.trans.x_rotation; + gfxData = *obj->unk68; + objModel = gfxData->objModel; + xDiff = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 0x10) - 0x11; + var_f12 = (racer->velocity * updateRateF) * 0.45; + if (var_f12 <= 0.0) { + if (var_f12 > -2.0) { + var_f12 = -2.0f; + } + } else if (var_f12 < 2.0) { + var_f12 = 2.0f; + } + switch (obj->segment.unk38.byte.unk3B) { + case 0: + racer->unk1CD = 0; + racer->unkC += 1.0 * updateRateF; + break; + case 1: + if (racer->unk1CD == 2) { + racer->unkC += var_f12; + } else { + racer->unkC -= var_f12; + } + break; + case 2: + racer->unk1CD = 2; + racer->unkC -= var_f12; + break; + case 3: + if (racer->unk1CD == 4) { + racer->unkC -= 2.0 * updateRateF; + } else { + racer->unkC += 2.0 * updateRateF; + } + break; + case 4: + racer->unk1CD = 4; + racer->unkC += 2.0 * updateRateF; + break; + case 5: + racer->unkC += 2.0 * updateRateF; + break; + default: + break; + } + + while (xDiff <= racer->unkC) { + racer->unkC -= xDiff; + gfxData->unk10 = -1; + } + while (racer->unkC <= 0.0f){ + racer->unkC += xDiff; + gfxData->unk10 = -1; + } + if (obj->segment.unk38.byte.unk3B == 2 && sp38 != 0) { + obj->segment.unk38.byte.unk3B = 3; + racer->unkC = 0.0f; + } + if (gfxData->unk10 == -1 || obj->segment.unk38.byte.unk3B == 0) { + if (obj->segment.unk38.byte.unk3B == 5) { + obj->segment.unk38.byte.unk3B = (s8) racer->unk1CD; + racer->unkC = 0.0f; + } else if (obj->segment.unk38.byte.unk3B == 1) { + if (racer->unk1CD == 0) { + obj->segment.unk38.byte.unk3B = 2; + } else { + obj->segment.unk38.byte.unk3B = 0; + } + } else if (obj->segment.unk38.byte.unk3B == 3) { + if (racer->unk1CD == 4) { + obj->segment.unk38.byte.unk3B = 2; + } else { + obj->segment.unk38.byte.unk3B = 4; + } + } else { + if (-0.1 < racer->velocity && racer->velocity < 0.1) { + if (obj->segment.unk38.byte.unk3B == 2) { + obj->segment.unk38.byte.unk3B = 1; + racer->unkC = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 0x10) - 0x11; + } else { + obj->segment.unk38.byte.unk3B = 0; + } + } else { + if (obj->segment.unk38.byte.unk3B == 0) { + obj->segment.unk38.byte.unk3B = 1; + racer->unkC = 0.0f; + } + if ((obj->segment.unk38.byte.unk3B == 4) && (sp38 == 0)) { + obj->segment.unk38.byte.unk3B = 3; + racer->unkC = (objModel->animations[obj->segment.unk38.byte.unk3B].unk4 * 0x10) - 0x11; + } + } + } + } + sp3C = obj->segment.animFrame; + obj->segment.animFrame = racer->unkC; + obj->unk74 = 0; + if (obj->segment.unk38.byte.unk3B == 2) { + func_800113CC(obj, 2, sp3C, 0xAC, 0xAD); + } + if (racer->playerIndex == PLAYER_COMPUTER) { + if (func_80023568() != 0) { + func_8005E204(obj, racer, 100.0f, 0x89, 0xA5); + } + } + func_800AFC3C(obj, updateRate); + fade_when_near_camera(obj, racer, 0x28); + firstRacerObj = get_racer_object(0); + racer = (Object_Racer *) firstRacerObj->unk64; + if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) { + racer->attackType = ATTACK_SQUISHED; + } + if (racer->raceFinished) { + if (D_8011D600 == 0) { + D_8011D600 = 1; + func_8005CB68(racer, &D_8011D600); + } + } +} diff --git a/tools/python/score.py b/tools/python/score.py index 74d901ef..5003f853 100644 --- a/tools/python/score.py +++ b/tools/python/score.py @@ -16,7 +16,8 @@ BLACKLIST = [ ] BLACKLIST_C = [ - 'math_util.c' + 'math_util.c', + 'collision.c', ] filelist = [] @@ -174,16 +175,16 @@ def main(): if blackListEntry in filename: skipThis = True break - if not skipThis: - scoreFile = ScoreFile(SRC_DIRECTORY + '/' + filename) - totalNumberOfDecompiledFunctions += len(scoreFile.functions) - totalNumberOfGlobalAsms += scoreFile.numGlobalAsms - totalNumberOfNonMatching += scoreFile.numNonMatchings - totalNumberOfNonEquivalent += scoreFile.numNonEquivalents - totalNumberOfDocumentedFunctions += scoreFile.get_number_of_documented_functions() - totalSizeOfDecompiledFunctions += scoreFile.get_size_of_functions() - totalSizeOfDocumentedFunctions += scoreFile.get_size_of_documented_functions() - scoreFiles.append(scoreFile) + if not skipThis: + scoreFile = ScoreFile(SRC_DIRECTORY + '/' + filename) + totalNumberOfDecompiledFunctions += len(scoreFile.functions) + totalNumberOfGlobalAsms += scoreFile.numGlobalAsms + totalNumberOfNonMatching += scoreFile.numNonMatchings + totalNumberOfNonEquivalent += scoreFile.numNonEquivalents + totalNumberOfDocumentedFunctions += scoreFile.get_number_of_documented_functions() + totalSizeOfDecompiledFunctions += scoreFile.get_size_of_functions() + totalSizeOfDocumentedFunctions += scoreFile.get_size_of_documented_functions() + scoreFiles.append(scoreFile) srcFilenames = FileUtil.get_filenames_from_directory_recursive(LIB_SRC_DIRECTORY, extensions=('.c')) for filename in srcFilenames: scoreFile = ScoreFile(LIB_SRC_DIRECTORY + '/' + filename)