From 293325af32adde86f319c0650b1c420118eb06f6 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Fri, 26 Jan 2024 11:00:11 -0500 Subject: [PATCH] Particles Matches (#439) * Match func_800B26E0 * Match func_800AF714 * Match func_800B0BAC * WIP func_800AF404 * Run tidy again * Swap macro naming, and update README score. --- README.md | 24 +- asm/non_matchings/particles/func_800AF714.s | 364 ------------ asm/non_matchings/particles/func_800B0BAC.s | 375 ------------ asm/non_matchings/particles/func_800B26E0.s | 598 -------------------- include/structs.h | 6 +- src/particles.c | 486 ++++++++++++++-- src/particles.h | 82 ++- tools/permuter_settings.toml | 2 +- 8 files changed, 537 insertions(+), 1400 deletions(-) delete mode 100644 asm/non_matchings/particles/func_800AF714.s delete mode 100644 asm/non_matchings/particles/func_800B0BAC.s delete mode 100644 asm/non_matchings/particles/func_800B26E0.s diff --git a/README.md b/README.md index 02606244..c3c9e10f 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the Currently, only the US 1.0 version of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time. -As of November 30, 2023, this is our current score: +As of January 26, 2023, this is our current score: -    Decomp progress: 65.92% +    Decomp progress: 66.48% -    Documentation progress: 35.21% +    Documentation progress: 35.36% --- @@ -125,30 +125,30 @@ s32 is_drumstick_unlocked(void) { ``` -As of November 30, 2023, this is our current score: +As of January 26, 2023, this is our current score: ``` ==================================================================== ADVENTURE ONE (ASM -> C Decompilation) - -------------- 65.92% Complete (68.87% NON_MATCHING) --------------- - # Decompiled functions: 1678 - # GLOBAL_ASM remaining: 167 + -------------- 66.48% Complete (69.44% NON_MATCHING) --------------- + # Decompiled functions: 1681 + # GLOBAL_ASM remaining: 164 # NON_MATCHING functions: 16 # NON_EQUIVALENT WIP functions: 54 --------------------------- Game Status ---------------------------- Balloons: 31/47, Keys: 3/4, Trophies: 3/5 T.T. Amulets: 3/4, Wizpig Amulets: 3/4 -------------------------------------------------------------------- - We are racing in Windmill Plains. (Lap 2/3) + We are racing in Windmill Plains. (Lap 3/3) ==================================================================== ADVENTURE TWO (Cleanup & Documentation) - ------------------------- 35.21% Complete -------------------------- - # Documented functions: 825 - # Undocumented remaining: 743 + ------------------------- 35.36% Complete -------------------------- + # Documented functions: 828 + # Undocumented remaining: 740 --------------------------- Game Status ---------------------------- Balloons: 17/47, Keys: 2/4, Trophies: 1/5 T.T. Amulets: 2/4, Wizpig Amulets: 1/4 -------------------------------------------------------------------- - We are collecting silver coins in Everfrost Peak. (2/8 silver coins) + We are collecting silver coins in Everfrost Peak. (3/8 silver coins) ==================================================================== ``` diff --git a/asm/non_matchings/particles/func_800AF714.s b/asm/non_matchings/particles/func_800AF714.s deleted file mode 100644 index 9de92709..00000000 --- a/asm/non_matchings/particles/func_800AF714.s +++ /dev/null @@ -1,364 +0,0 @@ -glabel func_800AF714 -/* 0B0314 800AF714 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0B0318 800AF718 AFBF003C */ sw $ra, 0x3c($sp) -/* 0B031C 800AF71C AFBE0038 */ sw $fp, 0x38($sp) -/* 0B0320 800AF720 AFB70034 */ sw $s7, 0x34($sp) -/* 0B0324 800AF724 AFB60030 */ sw $s6, 0x30($sp) -/* 0B0328 800AF728 AFB5002C */ sw $s5, 0x2c($sp) -/* 0B032C 800AF72C AFB40028 */ sw $s4, 0x28($sp) -/* 0B0330 800AF730 AFB30024 */ sw $s3, 0x24($sp) -/* 0B0334 800AF734 AFB20020 */ sw $s2, 0x20($sp) -/* 0B0338 800AF738 AFB1001C */ sw $s1, 0x1c($sp) -/* 0B033C 800AF73C AFB00018 */ sw $s0, 0x18($sp) -/* 0B0340 800AF740 AFA50084 */ sw $a1, 0x84($sp) -/* 0B0344 800AF744 8C930064 */ lw $s3, 0x64($a0) -/* 0B0348 800AF748 8C970074 */ lw $s7, 0x74($a0) -/* 0B034C 800AF74C 827E01D6 */ lb $fp, 0x1d6($s3) -/* 0B0350 800AF750 00809025 */ move $s2, $a0 -/* 0B0354 800AF754 0C004B8A */ jal object_do_player_tumble -/* 0B0358 800AF758 00008025 */ move $s0, $zero -/* 0B035C 800AF75C 8E4E0040 */ lw $t6, 0x40($s2) -/* 0B0360 800AF760 24160002 */ li $s6, 2 -/* 0B0364 800AF764 81CF0057 */ lb $t7, 0x57($t6) -/* 0B0368 800AF768 241500FF */ li $s5, 255 -/* 0B036C 800AF76C 19E00125 */ blez $t7, .L800AFC04 -/* 0B0370 800AF770 3C14800E */ lui $s4, %hi(D_800E2E84) # $s4, 0x800e -/* 0B0374 800AF774 3C11800E */ lui $s1, %hi(D_800E2D00) # $s1, 0x800e -/* 0B0378 800AF778 26312D00 */ addiu $s1, %lo(D_800E2D00) # addiu $s1, $s1, 0x2d00 -/* 0B037C 800AF77C 26942E84 */ addiu $s4, %lo(D_800E2E84) # addiu $s4, $s4, 0x2e84 -.L800AF780: -/* 0B0380 800AF780 32F80001 */ andi $t8, $s7, 1 -/* 0B0384 800AF784 130000E8 */ beqz $t8, .L800AFB28 -/* 0B0388 800AF788 00000000 */ nop -/* 0B038C 800AF78C 13C00008 */ beqz $fp, .L800AF7B0 -/* 0B0390 800AF790 240B0001 */ li $t3, 1 -/* 0B0394 800AF794 24010001 */ li $at, 1 -/* 0B0398 800AF798 13C10099 */ beq $fp, $at, .L800AFA00 -/* 0B039C 800AF79C 00000000 */ nop -/* 0B03A0 800AF7A0 13D60083 */ beq $fp, $s6, .L800AF9B0 -/* 0B03A4 800AF7A4 00000000 */ nop -/* 0B03A8 800AF7A8 100000AA */ b .L800AFA54 -/* 0B03AC 800AF7AC 00000000 */ nop -.L800AF7B0: -/* 0B03B0 800AF7B0 0600004C */ bltz $s0, .L800AF8E4 -/* 0B03B4 800AF7B4 2A01000A */ slti $at, $s0, 0xa -/* 0B03B8 800AF7B8 1020004B */ beqz $at, .L800AF8E8 -/* 0B03BC 800AF7BC 2401000A */ li $at, 10 -/* 0B03C0 800AF7C0 8662016E */ lh $v0, 0x16e($s3) -/* 0B03C4 800AF7C4 00106140 */ sll $t4, $s0, 5 -/* 0B03C8 800AF7C8 04410002 */ bgez $v0, .L800AF7D4 -/* 0B03CC 800AF7CC 3C18800E */ lui $t8, %hi(gParticlesAssetTable) # $t8, 0x800e -/* 0B03D0 800AF7D0 00021023 */ negu $v0, $v0 -.L800AF7D4: -/* 0B03D4 800AF7D4 2442FFE8 */ addiu $v0, $v0, -0x18 -/* 0B03D8 800AF7D8 1840009E */ blez $v0, .L800AFA54 -/* 0B03DC 800AF7DC 28410021 */ slti $at, $v0, 0x21 -/* 0B03E0 800AF7E0 8E59006C */ lw $t9, 0x6c($s2) -/* 0B03E4 800AF7E4 8F182CF0 */ lw $t8, %lo(gParticlesAssetTable)($t8) -/* 0B03E8 800AF7E8 032C6821 */ addu $t5, $t9, $t4 -/* 0B03EC 800AF7EC 85AE0008 */ lh $t6, 8($t5) -/* 0B03F0 800AF7F0 3C0D800E */ lui $t5, %hi(D_800E2EC4) # $t5, 0x800e -/* 0B03F4 800AF7F4 000E7880 */ sll $t7, $t6, 2 -/* 0B03F8 800AF7F8 25AD2EC4 */ addiu $t5, %lo(D_800E2EC4) # addiu $t5, $t5, 0x2ec4 -/* 0B03FC 800AF7FC 00106080 */ sll $t4, $s0, 2 -/* 0B0400 800AF800 030FC821 */ addu $t9, $t8, $t7 -/* 0B0404 800AF804 8F270000 */ lw $a3, ($t9) -/* 0B0408 800AF808 018D4021 */ addu $t0, $t4, $t5 -/* 0B040C 800AF80C 14200002 */ bnez $at, .L800AF818 -/* 0B0410 800AF810 250A0003 */ addiu $t2, $t0, 3 -/* 0B0414 800AF814 24020020 */ li $v0, 32 -.L800AF818: -/* 0B0418 800AF818 00420019 */ multu $v0, $v0 -/* 0B041C 800AF81C 90E40014 */ lbu $a0, 0x14($a3) -/* 0B0420 800AF820 910F0000 */ lbu $t7, ($t0) -/* 0B0424 800AF824 00024900 */ sll $t1, $v0, 4 -/* 0B0428 800AF828 01E4C823 */ subu $t9, $t7, $a0 -/* 0B042C 800AF82C 28410011 */ slti $at, $v0, 0x11 -/* 0B0430 800AF830 00007012 */ mflo $t6 -/* 0B0434 800AF834 000EC083 */ sra $t8, $t6, 2 -/* 0B0438 800AF838 01381823 */ subu $v1, $t1, $t8 -/* 0B043C 800AF83C 03230019 */ multu $t9, $v1 -/* 0B0440 800AF840 91190001 */ lbu $t9, 1($t0) -/* 0B0444 800AF844 00006012 */ mflo $t4 -/* 0B0448 800AF848 000C6A03 */ sra $t5, $t4, 8 -/* 0B044C 800AF84C 01A47021 */ addu $t6, $t5, $a0 -/* 0B0450 800AF850 000E7E00 */ sll $t7, $t6, 0x18 -/* 0B0454 800AF854 AE2F0000 */ sw $t7, ($s1) -/* 0B0458 800AF858 90E50015 */ lbu $a1, 0x15($a3) -/* 0B045C 800AF85C 00000000 */ nop -/* 0B0460 800AF860 03256023 */ subu $t4, $t9, $a1 -/* 0B0464 800AF864 01830019 */ multu $t4, $v1 -/* 0B0468 800AF868 00006812 */ mflo $t5 -/* 0B046C 800AF86C 000D7203 */ sra $t6, $t5, 8 -/* 0B0470 800AF870 00AEC021 */ addu $t8, $a1, $t6 -/* 0B0474 800AF874 0018CC00 */ sll $t9, $t8, 0x10 -/* 0B0478 800AF878 01F96825 */ or $t5, $t7, $t9 -/* 0B047C 800AF87C AE2D0000 */ sw $t5, ($s1) -/* 0B0480 800AF880 90E60016 */ lbu $a2, 0x16($a3) -/* 0B0484 800AF884 910E0002 */ lbu $t6, 2($t0) -/* 0B0488 800AF888 00000000 */ nop -/* 0B048C 800AF88C 01C6C023 */ subu $t8, $t6, $a2 -/* 0B0490 800AF890 03030019 */ multu $t8, $v1 -/* 0B0494 800AF894 00007812 */ mflo $t7 -/* 0B0498 800AF898 000FCA03 */ sra $t9, $t7, 8 -/* 0B049C 800AF89C 00D96021 */ addu $t4, $a2, $t9 -/* 0B04A0 800AF8A0 000C7200 */ sll $t6, $t4, 8 -/* 0B04A4 800AF8A4 01AEC025 */ or $t8, $t5, $t6 -/* 0B04A8 800AF8A8 14200002 */ bnez $at, .L800AF8B4 -/* 0B04AC 800AF8AC AE380000 */ sw $t8, ($s1) -/* 0B04B0 800AF8B0 24090100 */ li $t1, 256 -.L800AF8B4: -/* 0B04B4 800AF8B4 90E20017 */ lbu $v0, 0x17($a3) -/* 0B04B8 800AF8B8 91590000 */ lbu $t9, ($t2) -/* 0B04BC 800AF8BC 8E2F0000 */ lw $t7, ($s1) -/* 0B04C0 800AF8C0 03226023 */ subu $t4, $t9, $v0 -/* 0B04C4 800AF8C4 01890019 */ multu $t4, $t1 -/* 0B04C8 800AF8C8 3C01800E */ lui $at, %hi(D_800E2D00) # $at, 0x800e -/* 0B04CC 800AF8CC 00006812 */ mflo $t5 -/* 0B04D0 800AF8D0 000D7203 */ sra $t6, $t5, 8 -/* 0B04D4 800AF8D4 004EC021 */ addu $t8, $v0, $t6 -/* 0B04D8 800AF8D8 01F8C825 */ or $t9, $t7, $t8 -/* 0B04DC 800AF8DC 1000005D */ b .L800AFA54 -/* 0B04E0 800AF8E0 AC392D00 */ sw $t9, %lo(D_800E2D00)($at) -.L800AF8E4: -/* 0B04E4 800AF8E4 2401000A */ li $at, 10 -.L800AF8E8: -/* 0B04E8 800AF8E8 12010009 */ beq $s0, $at, .L800AF910 -/* 0B04EC 800AF8EC 2401000B */ li $at, 11 -/* 0B04F0 800AF8F0 12010011 */ beq $s0, $at, .L800AF938 -/* 0B04F4 800AF8F4 2401000C */ li $at, 12 -/* 0B04F8 800AF8F8 12010019 */ beq $s0, $at, .L800AF960 -/* 0B04FC 800AF8FC 2401000D */ li $at, 13 -/* 0B0500 800AF900 12010021 */ beq $s0, $at, .L800AF988 -/* 0B0504 800AF904 00000000 */ nop -/* 0B0508 800AF908 10000052 */ b .L800AFA54 -/* 0B050C 800AF90C 00000000 */ nop -.L800AF910: -/* 0B0510 800AF910 926201DE */ lbu $v0, 0x1de($s3) -/* 0B0514 800AF914 00000000 */ nop -/* 0B0518 800AF918 16A20002 */ bne $s5, $v0, .L800AF924 -/* 0B051C 800AF91C 304C000F */ andi $t4, $v0, 0xf -/* 0B0520 800AF920 00005825 */ move $t3, $zero -.L800AF924: -/* 0B0524 800AF924 000C6880 */ sll $t5, $t4, 2 -/* 0B0528 800AF928 028D7021 */ addu $t6, $s4, $t5 -/* 0B052C 800AF92C 8DCF0000 */ lw $t7, ($t6) -/* 0B0530 800AF930 10000048 */ b .L800AFA54 -/* 0B0534 800AF934 AE2F0000 */ sw $t7, ($s1) -.L800AF938: -/* 0B0538 800AF938 926201DF */ lbu $v0, 0x1df($s3) -/* 0B053C 800AF93C 00000000 */ nop -/* 0B0540 800AF940 16A20002 */ bne $s5, $v0, .L800AF94C -/* 0B0544 800AF944 3058000F */ andi $t8, $v0, 0xf -/* 0B0548 800AF948 00005825 */ move $t3, $zero -.L800AF94C: -/* 0B054C 800AF94C 0018C880 */ sll $t9, $t8, 2 -/* 0B0550 800AF950 02996021 */ addu $t4, $s4, $t9 -/* 0B0554 800AF954 8D8D0000 */ lw $t5, ($t4) -/* 0B0558 800AF958 1000003E */ b .L800AFA54 -/* 0B055C 800AF95C AE2D0000 */ sw $t5, ($s1) -.L800AF960: -/* 0B0560 800AF960 926201DC */ lbu $v0, 0x1dc($s3) -/* 0B0564 800AF964 00000000 */ nop -/* 0B0568 800AF968 16A20002 */ bne $s5, $v0, .L800AF974 -/* 0B056C 800AF96C 304E000F */ andi $t6, $v0, 0xf -/* 0B0570 800AF970 00005825 */ move $t3, $zero -.L800AF974: -/* 0B0574 800AF974 000E7880 */ sll $t7, $t6, 2 -/* 0B0578 800AF978 028FC021 */ addu $t8, $s4, $t7 -/* 0B057C 800AF97C 8F190000 */ lw $t9, ($t8) -/* 0B0580 800AF980 10000034 */ b .L800AFA54 -/* 0B0584 800AF984 AE390000 */ sw $t9, ($s1) -.L800AF988: -/* 0B0588 800AF988 926201DD */ lbu $v0, 0x1dd($s3) -/* 0B058C 800AF98C 00000000 */ nop -/* 0B0590 800AF990 16A20002 */ bne $s5, $v0, .L800AF99C -/* 0B0594 800AF994 304C000F */ andi $t4, $v0, 0xf -/* 0B0598 800AF998 00005825 */ move $t3, $zero -.L800AF99C: -/* 0B059C 800AF99C 000C6880 */ sll $t5, $t4, 2 -/* 0B05A0 800AF9A0 028D7021 */ addu $t6, $s4, $t5 -/* 0B05A4 800AF9A4 8DCF0000 */ lw $t7, ($t6) -/* 0B05A8 800AF9A8 1000002A */ b .L800AFA54 -/* 0B05AC 800AF9AC AE2F0000 */ sw $t7, ($s1) -.L800AF9B0: -/* 0B05B0 800AF9B0 16000009 */ bnez $s0, .L800AF9D8 -/* 0B05B4 800AF9B4 24010001 */ li $at, 1 -/* 0B05B8 800AF9B8 927801DC */ lbu $t8, 0x1dc($s3) -/* 0B05BC 800AF9BC 00000000 */ nop -/* 0B05C0 800AF9C0 3319000F */ andi $t9, $t8, 0xf -/* 0B05C4 800AF9C4 00196080 */ sll $t4, $t9, 2 -/* 0B05C8 800AF9C8 028C6821 */ addu $t5, $s4, $t4 -/* 0B05CC 800AF9CC 8DAE0000 */ lw $t6, ($t5) -/* 0B05D0 800AF9D0 10000020 */ b .L800AFA54 -/* 0B05D4 800AF9D4 AE2E0000 */ sw $t6, ($s1) -.L800AF9D8: -/* 0B05D8 800AF9D8 1601001E */ bne $s0, $at, .L800AFA54 -/* 0B05DC 800AF9DC 00000000 */ nop -/* 0B05E0 800AF9E0 926F01DD */ lbu $t7, 0x1dd($s3) -/* 0B05E4 800AF9E4 00000000 */ nop -/* 0B05E8 800AF9E8 31F8000F */ andi $t8, $t7, 0xf -/* 0B05EC 800AF9EC 0018C880 */ sll $t9, $t8, 2 -/* 0B05F0 800AF9F0 02996021 */ addu $t4, $s4, $t9 -/* 0B05F4 800AF9F4 8D8D0000 */ lw $t5, ($t4) -/* 0B05F8 800AF9F8 10000016 */ b .L800AFA54 -/* 0B05FC 800AF9FC AE2D0000 */ sw $t5, ($s1) -.L800AFA00: -/* 0B0600 800AFA00 12160003 */ beq $s0, $s6, .L800AFA10 -/* 0B0604 800AFA04 24010003 */ li $at, 3 -/* 0B0608 800AFA08 16010012 */ bne $s0, $at, .L800AFA54 -/* 0B060C 800AFA0C 00000000 */ nop -.L800AFA10: -/* 0B0610 800AFA10 826E0002 */ lb $t6, 2($s3) -/* 0B0614 800AFA14 3C198012 */ lui $t9, %hi(D_80127C88) # $t9, 0x8012 -/* 0B0618 800AFA18 31CF0007 */ andi $t7, $t6, 7 -/* 0B061C 800AFA1C 000FC040 */ sll $t8, $t7, 1 -/* 0B0620 800AFA20 27397C88 */ addiu $t9, %lo(D_80127C88) # addiu $t9, $t9, 0x7c88 -/* 0B0624 800AFA24 8FAC0084 */ lw $t4, 0x84($sp) -/* 0B0628 800AFA28 03191821 */ addu $v1, $t8, $t9 -/* 0B062C 800AFA2C 84620000 */ lh $v0, ($v1) -/* 0B0630 800AFA30 000C6880 */ sll $t5, $t4, 2 -/* 0B0634 800AFA34 004D1021 */ addu $v0, $v0, $t5 -/* 0B0638 800AFA38 28410101 */ slti $at, $v0, 0x101 -/* 0B063C 800AFA3C 14200002 */ bnez $at, .L800AFA48 -/* 0B0640 800AFA40 00000000 */ nop -/* 0B0644 800AFA44 24020100 */ li $v0, 256 -.L800AFA48: -/* 0B0648 800AFA48 A4620000 */ sh $v0, ($v1) -/* 0B064C 800AFA4C 3C01800E */ lui $at, %hi(gParticleOpacity) # $at, 0x800e -/* 0B0650 800AFA50 AC222EEC */ sw $v0, %lo(gParticleOpacity)($at) -.L800AFA54: -/* 0B0654 800AFA54 11600060 */ beqz $t3, .L800AFBD8 -/* 0B0658 800AFA58 00000000 */ nop -/* 0B065C 800AFA5C 8E46006C */ lw $a2, 0x6c($s2) -/* 0B0660 800AFA60 00103940 */ sll $a3, $s0, 5 -/* 0B0664 800AFA64 00C71021 */ addu $v0, $a2, $a3 -/* 0B0668 800AFA68 84430004 */ lh $v1, 4($v0) -/* 0B066C 800AFA6C 02402025 */ move $a0, $s2 -/* 0B0670 800AFA70 306E8000 */ andi $t6, $v1, 0x8000 -/* 0B0674 800AFA74 15C00009 */ bnez $t6, .L800AFA9C -/* 0B0678 800AFA78 02002825 */ move $a1, $s0 -/* 0B067C 800AFA7C 0C02BD4B */ jal func_800AF52C -/* 0B0680 800AFA80 AFA70044 */ sw $a3, 0x44($sp) -/* 0B0684 800AFA84 8FA70044 */ lw $a3, 0x44($sp) -/* 0B0688 800AFA88 8E46006C */ lw $a2, 0x6c($s2) -/* 0B068C 800AFA8C 00000000 */ nop -/* 0B0690 800AFA90 00C71021 */ addu $v0, $a2, $a3 -/* 0B0694 800AFA94 84430004 */ lh $v1, 4($v0) -/* 0B0698 800AFA98 00000000 */ nop -.L800AFA9C: -/* 0B069C 800AFA9C 306F4000 */ andi $t7, $v1, 0x4000 -/* 0B06A0 800AFAA0 11E00007 */ beqz $t7, .L800AFAC0 -/* 0B06A4 800AFAA4 30790400 */ andi $t9, $v1, 0x400 -/* 0B06A8 800AFAA8 0010C140 */ sll $t8, $s0, 5 -/* 0B06AC 800AFAAC 00D82821 */ addu $a1, $a2, $t8 -/* 0B06B0 800AFAB0 0C02BF97 */ jal func_800AFE5C -/* 0B06B4 800AFAB4 02402025 */ move $a0, $s2 -/* 0B06B8 800AFAB8 10000048 */ b .L800AFBDC -/* 0B06BC 800AFABC AE200000 */ sw $zero, ($s1) -.L800AFAC0: -/* 0B06C0 800AFAC0 13200006 */ beqz $t9, .L800AFADC -/* 0B06C4 800AFAC4 02402025 */ move $a0, $s2 -/* 0B06C8 800AFAC8 00106140 */ sll $t4, $s0, 5 -/* 0B06CC 800AFACC 0C02BF97 */ jal func_800AFE5C -/* 0B06D0 800AFAD0 00CC2821 */ addu $a1, $a2, $t4 -/* 0B06D4 800AFAD4 10000041 */ b .L800AFBDC -/* 0B06D8 800AFAD8 AE200000 */ sw $zero, ($s1) -.L800AFADC: -/* 0B06DC 800AFADC 844D000A */ lh $t5, 0xa($v0) -/* 0B06E0 800AFAE0 8FAE0084 */ lw $t6, 0x84($sp) -/* 0B06E4 800AFAE4 02402025 */ move $a0, $s2 -/* 0B06E8 800AFAE8 01AE7821 */ addu $t7, $t5, $t6 -/* 0B06EC 800AFAEC A44F000A */ sh $t7, 0xa($v0) -/* 0B06F0 800AFAF0 8E46006C */ lw $a2, 0x6c($s2) -/* 0B06F4 800AFAF4 00106940 */ sll $t5, $s0, 5 -/* 0B06F8 800AFAF8 00C71021 */ addu $v0, $a2, $a3 -/* 0B06FC 800AFAFC 8C590000 */ lw $t9, ($v0) -/* 0B0700 800AFB00 8458000A */ lh $t8, 0xa($v0) -/* 0B0704 800AFB04 872C0040 */ lh $t4, 0x40($t9) -/* 0B0708 800AFB08 00000000 */ nop -/* 0B070C 800AFB0C 030C082A */ slt $at, $t8, $t4 -/* 0B0710 800AFB10 14200031 */ bnez $at, .L800AFBD8 -/* 0B0714 800AFB14 00000000 */ nop -/* 0B0718 800AFB18 0C02BF97 */ jal func_800AFE5C -/* 0B071C 800AFB1C 00CD2821 */ addu $a1, $a2, $t5 -/* 0B0720 800AFB20 1000002E */ b .L800AFBDC -/* 0B0724 800AFB24 AE200000 */ sw $zero, ($s1) -.L800AFB28: -/* 0B0728 800AFB28 8E46006C */ lw $a2, 0x6c($s2) -/* 0B072C 800AFB2C 00107140 */ sll $t6, $s0, 5 -/* 0B0730 800AFB30 00CE1021 */ addu $v0, $a2, $t6 -/* 0B0734 800AFB34 84430004 */ lh $v1, 4($v0) -/* 0B0738 800AFB38 00000000 */ nop -/* 0B073C 800AFB3C 306F8000 */ andi $t7, $v1, 0x8000 -/* 0B0740 800AFB40 11E00025 */ beqz $t7, .L800AFBD8 -/* 0B0744 800AFB44 30794000 */ andi $t9, $v1, 0x4000 -/* 0B0748 800AFB48 13200009 */ beqz $t9, .L800AFB70 -/* 0B074C 800AFB4C 306C0400 */ andi $t4, $v1, 0x400 -/* 0B0750 800AFB50 0010C140 */ sll $t8, $s0, 5 -/* 0B0754 800AFB54 00D81021 */ addu $v0, $a2, $t8 -/* 0B0758 800AFB58 A0400006 */ sb $zero, 6($v0) -/* 0B075C 800AFB5C 02402025 */ move $a0, $s2 -/* 0B0760 800AFB60 0C02BDB9 */ jal func_800AF6E4 -/* 0B0764 800AFB64 02002825 */ move $a1, $s0 -/* 0B0768 800AFB68 10000011 */ b .L800AFBB0 -/* 0B076C 800AFB6C 00000000 */ nop -.L800AFB70: -/* 0B0770 800AFB70 1180000D */ beqz $t4, .L800AFBA8 -/* 0B0774 800AFB74 02402025 */ move $a0, $s2 -/* 0B0778 800AFB78 00106940 */ sll $t5, $s0, 5 -/* 0B077C 800AFB7C 346E0200 */ ori $t6, $v1, 0x200 -/* 0B0780 800AFB80 00CD2021 */ addu $a0, $a2, $t5 -/* 0B0784 800AFB84 A44E0004 */ sh $t6, 4($v0) -/* 0B0788 800AFB88 908F0006 */ lbu $t7, 6($a0) -/* 0B078C 800AFB8C 02402025 */ move $a0, $s2 -/* 0B0790 800AFB90 15E00007 */ bnez $t7, .L800AFBB0 -/* 0B0794 800AFB94 00000000 */ nop -/* 0B0798 800AFB98 0C02BDB9 */ jal func_800AF6E4 -/* 0B079C 800AFB9C 02002825 */ move $a1, $s0 -/* 0B07A0 800AFBA0 10000003 */ b .L800AFBB0 -/* 0B07A4 800AFBA4 00000000 */ nop -.L800AFBA8: -/* 0B07A8 800AFBA8 0C02BDB9 */ jal func_800AF6E4 -/* 0B07AC 800AFBAC 02002825 */ move $a1, $s0 -.L800AFBB0: -/* 0B07B0 800AFBB0 12160003 */ beq $s0, $s6, .L800AFBC0 -/* 0B07B4 800AFBB4 24010003 */ li $at, 3 -/* 0B07B8 800AFBB8 16010007 */ bne $s0, $at, .L800AFBD8 -/* 0B07BC 800AFBBC 00000000 */ nop -.L800AFBC0: -/* 0B07C0 800AFBC0 82790002 */ lb $t9, 2($s3) -/* 0B07C4 800AFBC4 3C018012 */ lui $at, %hi(D_80127C88) # $at, 0x8012 -/* 0B07C8 800AFBC8 33380007 */ andi $t8, $t9, 7 -/* 0B07CC 800AFBCC 00186040 */ sll $t4, $t8, 1 -/* 0B07D0 800AFBD0 002C0821 */ addu $at, $at, $t4 -/* 0B07D4 800AFBD4 A4207C88 */ sh $zero, %lo(D_80127C88)($at) -.L800AFBD8: -/* 0B07D8 800AFBD8 AE200000 */ sw $zero, ($s1) -.L800AFBDC: -/* 0B07DC 800AFBDC 240E0100 */ li $t6, 256 -/* 0B07E0 800AFBE0 3C01800E */ lui $at, %hi(gParticleOpacity) # $at, 0x800e -/* 0B07E4 800AFBE4 AC2E2EEC */ sw $t6, %lo(gParticleOpacity)($at) -/* 0B07E8 800AFBE8 8E4F0040 */ lw $t7, 0x40($s2) -/* 0B07EC 800AFBEC 26100001 */ addiu $s0, $s0, 1 -/* 0B07F0 800AFBF0 81F90057 */ lb $t9, 0x57($t7) -/* 0B07F4 800AFBF4 00176842 */ srl $t5, $s7, 1 -/* 0B07F8 800AFBF8 0219082A */ slt $at, $s0, $t9 -/* 0B07FC 800AFBFC 1420FEE0 */ bnez $at, .L800AF780 -/* 0B0800 800AFC00 01A0B825 */ move $s7, $t5 -.L800AFC04: -/* 0B0804 800AFC04 0C004BCC */ jal object_undo_player_tumble -/* 0B0808 800AFC08 02402025 */ move $a0, $s2 -/* 0B080C 800AFC0C 8FBF003C */ lw $ra, 0x3c($sp) -/* 0B0810 800AFC10 8FB00018 */ lw $s0, 0x18($sp) -/* 0B0814 800AFC14 8FB1001C */ lw $s1, 0x1c($sp) -/* 0B0818 800AFC18 8FB20020 */ lw $s2, 0x20($sp) -/* 0B081C 800AFC1C 8FB30024 */ lw $s3, 0x24($sp) -/* 0B0820 800AFC20 8FB40028 */ lw $s4, 0x28($sp) -/* 0B0824 800AFC24 8FB5002C */ lw $s5, 0x2c($sp) -/* 0B0828 800AFC28 8FB60030 */ lw $s6, 0x30($sp) -/* 0B082C 800AFC2C 8FB70034 */ lw $s7, 0x34($sp) -/* 0B0830 800AFC30 8FBE0038 */ lw $fp, 0x38($sp) -/* 0B0834 800AFC34 03E00008 */ jr $ra -/* 0B0838 800AFC38 27BD0080 */ addiu $sp, $sp, 0x80 - diff --git a/asm/non_matchings/particles/func_800B0BAC.s b/asm/non_matchings/particles/func_800B0BAC.s deleted file mode 100644 index 7103416f..00000000 --- a/asm/non_matchings/particles/func_800B0BAC.s +++ /dev/null @@ -1,375 +0,0 @@ -glabel func_800B0BAC -/* 0B17AC 800B0BAC 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0B17B0 800B0BB0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0B17B4 800B0BB4 AFB00018 */ sw $s0, 0x18($sp) -/* 0B17B8 800B0BB8 84AF0008 */ lh $t7, 8($a1) -/* 0B17BC 800B0BBC 3C0E800E */ lui $t6, %hi(gParticlesAssetTable) # $t6, 0x800e -/* 0B17C0 800B0BC0 8DCE2CF0 */ lw $t6, %lo(gParticlesAssetTable)($t6) -/* 0B17C4 800B0BC4 000FC080 */ sll $t8, $t7, 2 -/* 0B17C8 800B0BC8 01D8C821 */ addu $t9, $t6, $t8 -/* 0B17CC 800B0BCC 8F280000 */ lw $t0, ($t9) -/* 0B17D0 800B0BD0 24010003 */ li $at, 3 -/* 0B17D4 800B0BD4 910A0000 */ lbu $t2, ($t0) -/* 0B17D8 800B0BD8 00808025 */ move $s0, $a0 -/* 0B17DC 800B0BDC 11410003 */ beq $t2, $at, .L800B0BEC -/* 0B17E0 800B0BE0 00A03025 */ move $a2, $a1 -/* 0B17E4 800B0BE4 1000014E */ b .L800B1120 -/* 0B17E8 800B0BE8 00001025 */ move $v0, $zero -.L800B0BEC: -/* 0B17EC 800B0BEC 8CC30000 */ lw $v1, ($a2) -/* 0B17F0 800B0BF0 24040003 */ li $a0, 3 -/* 0B17F4 800B0BF4 8C69009C */ lw $t1, 0x9c($v1) -/* 0B17F8 800B0BF8 AFA80034 */ sw $t0, 0x34($sp) -/* 0B17FC 800B0BFC AFA6003C */ sw $a2, 0x3c($sp) -/* 0B1800 800B0C00 AFA30028 */ sw $v1, 0x28($sp) -/* 0B1804 800B0C04 0C02C72E */ jal func_800B1CB8 -/* 0B1808 800B0C08 AFA90024 */ sw $t1, 0x24($sp) -/* 0B180C 800B0C0C 8FA30028 */ lw $v1, 0x28($sp) -/* 0B1810 800B0C10 8FA6003C */ lw $a2, 0x3c($sp) -/* 0B1814 800B0C14 8FA80034 */ lw $t0, 0x34($sp) -/* 0B1818 800B0C18 8FA90024 */ lw $t1, 0x24($sp) -/* 0B181C 800B0C1C 14400003 */ bnez $v0, .L800B0C2C -/* 0B1820 800B0C20 00403825 */ move $a3, $v0 -/* 0B1824 800B0C24 1000013E */ b .L800B1120 -/* 0B1828 800B0C28 00001025 */ move $v0, $zero -.L800B0C2C: -/* 0B182C 800B0C2C 860B002E */ lh $t3, 0x2e($s0) -/* 0B1830 800B0C30 240C8000 */ li $t4, -32768 -/* 0B1834 800B0C34 A44C0006 */ sh $t4, 6($v0) -/* 0B1838 800B0C38 A44B002E */ sh $t3, 0x2e($v0) -/* 0B183C 800B0C3C 910D0001 */ lbu $t5, 1($t0) -/* 0B1840 800B0C40 00000000 */ nop -/* 0B1844 800B0C44 A04D0039 */ sb $t5, 0x39($v0) -/* 0B1848 800B0C48 950F0002 */ lhu $t7, 2($t0) -/* 0B184C 800B0C4C AC50003C */ sw $s0, 0x3c($v0) -/* 0B1850 800B0C50 AC460058 */ sw $a2, 0x58($v0) -/* 0B1854 800B0C54 AC4F0040 */ sw $t7, 0x40($v0) -/* 0B1858 800B0C58 C5040010 */ lwc1 $f4, 0x10($t0) -/* 0B185C 800B0C5C C4660050 */ lwc1 $f6, 0x50($v1) -/* 0B1860 800B0C60 00000000 */ nop -/* 0B1864 800B0C64 46062202 */ mul.s $f8, $f4, $f6 -/* 0B1868 800B0C68 44802000 */ mtc1 $zero, $f4 -/* 0B186C 800B0C6C E4480008 */ swc1 $f8, 8($v0) -/* 0B1870 800B0C70 C4700054 */ lwc1 $f16, 0x54($v1) -/* 0B1874 800B0C74 C50A0010 */ lwc1 $f10, 0x10($t0) -/* 0B1878 800B0C78 3C03800E */ lui $v1, %hi(D_800E2D00) # $v1, 0x800e -/* 0B187C 800B0C7C 46105482 */ mul.s $f18, $f10, $f16 -/* 0B1880 800B0C80 E4520028 */ swc1 $f18, 0x28($v0) -/* 0B1884 800B0C84 850E0008 */ lh $t6, 8($t0) -/* 0B1888 800B0C88 A0400038 */ sb $zero, 0x38($v0) -/* 0B188C 800B0C8C E4440034 */ swc1 $f4, 0x34($v0) -/* 0B1890 800B0C90 A44E003A */ sh $t6, 0x3a($v0) -/* 0B1894 800B0C94 8C632D00 */ lw $v1, %lo(D_800E2D00)($v1) -/* 0B1898 800B0C98 00000000 */ nop -/* 0B189C 800B0C9C 10600003 */ beqz $v1, .L800B0CAC -/* 0B18A0 800B0CA0 00000000 */ nop -/* 0B18A4 800B0CA4 1000000A */ b .L800B0CD0 -/* 0B18A8 800B0CA8 AC43006C */ sw $v1, 0x6c($v0) -.L800B0CAC: -/* 0B18AC 800B0CAC 91180014 */ lbu $t8, 0x14($t0) -/* 0B18B0 800B0CB0 00000000 */ nop -/* 0B18B4 800B0CB4 A058006C */ sb $t8, 0x6c($v0) -/* 0B18B8 800B0CB8 91190015 */ lbu $t9, 0x15($t0) -/* 0B18BC 800B0CBC 00000000 */ nop -/* 0B18C0 800B0CC0 A059006D */ sb $t9, 0x6d($v0) -/* 0B18C4 800B0CC4 910A0016 */ lbu $t2, 0x16($t0) -/* 0B18C8 800B0CC8 00000000 */ nop -/* 0B18CC 800B0CCC A04A006E */ sb $t2, 0x6e($v0) -.L800B0CD0: -/* 0B18D0 800B0CD0 8C4C0040 */ lw $t4, 0x40($v0) -/* 0B18D4 800B0CD4 910B0017 */ lbu $t3, 0x17($t0) -/* 0B18D8 800B0CD8 318D0800 */ andi $t5, $t4, 0x800 -/* 0B18DC 800B0CDC 11A00014 */ beqz $t5, .L800B0D30 -/* 0B18E0 800B0CE0 A04B006F */ sb $t3, 0x6f($v0) -/* 0B18E4 800B0CE4 8E030054 */ lw $v1, 0x54($s0) -/* 0B18E8 800B0CE8 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0B18EC 800B0CEC 10600010 */ beqz $v1, .L800B0D30 -/* 0B18F0 800B0CF0 00000000 */ nop -/* 0B18F4 800B0CF4 C4660000 */ lwc1 $f6, ($v1) -/* 0B18F8 800B0CF8 44814000 */ mtc1 $at, $f8 -/* 0B18FC 800B0CFC 00000000 */ nop -/* 0B1900 800B0D00 46083282 */ mul.s $f10, $f6, $f8 -/* 0B1904 800B0D04 444FF800 */ cfc1 $t7, $31 -/* 0B1908 800B0D08 00000000 */ nop -/* 0B190C 800B0D0C 35E10003 */ ori $at, $t7, 3 -/* 0B1910 800B0D10 38210002 */ xori $at, $at, 2 -/* 0B1914 800B0D14 44C1F800 */ ctc1 $at, $31 -/* 0B1918 800B0D18 00000000 */ nop -/* 0B191C 800B0D1C 46005424 */ cvt.w.s $f16, $f10 -/* 0B1920 800B0D20 440E8000 */ mfc1 $t6, $f16 -/* 0B1924 800B0D24 44CFF800 */ ctc1 $t7, $31 -/* 0B1928 800B0D28 10000003 */ b .L800B0D38 -/* 0B192C 800B0D2C A44E004A */ sh $t6, 0x4a($v0) -.L800B0D30: -/* 0B1930 800B0D30 241800FF */ li $t8, 255 -/* 0B1934 800B0D34 A458004A */ sh $t8, 0x4a($v0) -.L800B0D38: -/* 0B1938 800B0D38 8519000E */ lh $t9, 0xe($t0) -/* 0B193C 800B0D3C 00000000 */ nop -/* 0B1940 800B0D40 A4590060 */ sh $t9, 0x60($v0) -/* 0B1944 800B0D44 910A000C */ lbu $t2, 0xc($t0) -/* 0B1948 800B0D48 00000000 */ nop -/* 0B194C 800B0D4C 000A5A00 */ sll $t3, $t2, 8 -/* 0B1950 800B0D50 A44B005C */ sh $t3, 0x5c($v0) -/* 0B1954 800B0D54 910C000C */ lbu $t4, 0xc($t0) -/* 0B1958 800B0D58 00000000 */ nop -/* 0B195C 800B0D5C 298100FF */ slti $at, $t4, 0xff -/* 0B1960 800B0D60 1020000F */ beqz $at, .L800B0DA0 -/* 0B1964 800B0D64 00000000 */ nop -/* 0B1968 800B0D68 8C4D0040 */ lw $t5, 0x40($v0) -/* 0B196C 800B0D6C 00000000 */ nop -/* 0B1970 800B0D70 31AF1000 */ andi $t7, $t5, 0x1000 -/* 0B1974 800B0D74 11E00006 */ beqz $t7, .L800B0D90 -/* 0B1978 800B0D78 00000000 */ nop -/* 0B197C 800B0D7C 844E0006 */ lh $t6, 6($v0) -/* 0B1980 800B0D80 00000000 */ nop -/* 0B1984 800B0D84 35D80100 */ ori $t8, $t6, 0x100 -/* 0B1988 800B0D88 10000005 */ b .L800B0DA0 -/* 0B198C 800B0D8C A4580006 */ sh $t8, 6($v0) -.L800B0D90: -/* 0B1990 800B0D90 84590006 */ lh $t9, 6($v0) -/* 0B1994 800B0D94 00000000 */ nop -/* 0B1998 800B0D98 372A0080 */ ori $t2, $t9, 0x80 -/* 0B199C 800B0D9C A44A0006 */ sh $t2, 6($v0) -.L800B0DA0: -/* 0B19A0 800B0DA0 84440060 */ lh $a0, 0x60($v0) -/* 0B19A4 800B0DA4 8443003A */ lh $v1, 0x3a($v0) -/* 0B19A8 800B0DA8 00000000 */ nop -/* 0B19AC 800B0DAC 0083082A */ slt $at, $a0, $v1 -/* 0B19B0 800B0DB0 10200014 */ beqz $at, .L800B0E04 -/* 0B19B4 800B0DB4 00000000 */ nop -/* 0B19B8 800B0DB8 910B000D */ lbu $t3, 0xd($t0) -/* 0B19BC 800B0DBC 910C000C */ lbu $t4, 0xc($t0) -/* 0B19C0 800B0DC0 00647023 */ subu $t6, $v1, $a0 -/* 0B19C4 800B0DC4 016C6823 */ subu $t5, $t3, $t4 -/* 0B19C8 800B0DC8 000D7A00 */ sll $t7, $t5, 8 -/* 0B19CC 800B0DCC 01EE001A */ div $zero, $t7, $t6 -/* 0B19D0 800B0DD0 15C00002 */ bnez $t6, .L800B0DDC -/* 0B19D4 800B0DD4 00000000 */ nop -/* 0B19D8 800B0DD8 0007000D */ break 7 -.L800B0DDC: -/* 0B19DC 800B0DDC 2401FFFF */ li $at, -1 -/* 0B19E0 800B0DE0 15C10004 */ bne $t6, $at, .L800B0DF4 -/* 0B19E4 800B0DE4 3C018000 */ lui $at, 0x8000 -/* 0B19E8 800B0DE8 15E10002 */ bne $t7, $at, .L800B0DF4 -/* 0B19EC 800B0DEC 00000000 */ nop -/* 0B19F0 800B0DF0 0006000D */ break 6 -.L800B0DF4: -/* 0B19F4 800B0DF4 0000C012 */ mflo $t8 -/* 0B19F8 800B0DF8 A458005E */ sh $t8, 0x5e($v0) -/* 0B19FC 800B0DFC 10000003 */ b .L800B0E0C -/* 0B1A00 800B0E00 84D90018 */ lh $t9, 0x18($a2) -.L800B0E04: -/* 0B1A04 800B0E04 A440005E */ sh $zero, 0x5e($v0) -/* 0B1A08 800B0E08 84D90018 */ lh $t9, 0x18($a2) -.L800B0E0C: -/* 0B1A0C 800B0E0C 84CA001A */ lh $t2, 0x1a($a2) -/* 0B1A10 800B0E10 84CB001C */ lh $t3, 0x1c($a2) -/* 0B1A14 800B0E14 44999000 */ mtc1 $t9, $f18 -/* 0B1A18 800B0E18 448A3000 */ mtc1 $t2, $f6 -/* 0B1A1C 800B0E1C 448B5000 */ mtc1 $t3, $f10 -/* 0B1A20 800B0E20 46809120 */ cvt.s.w $f4, $f18 -/* 0B1A24 800B0E24 02002025 */ move $a0, $s0 -/* 0B1A28 800B0E28 24C5000C */ addiu $a1, $a2, 0xc -/* 0B1A2C 800B0E2C 46803220 */ cvt.s.w $f8, $f6 -/* 0B1A30 800B0E30 E4C4000C */ swc1 $f4, 0xc($a2) -/* 0B1A34 800B0E34 46805420 */ cvt.s.w $f16, $f10 -/* 0B1A38 800B0E38 E4C80010 */ swc1 $f8, 0x10($a2) -/* 0B1A3C 800B0E3C E4D00014 */ swc1 $f16, 0x14($a2) -/* 0B1A40 800B0E40 AFA90024 */ sw $t1, 0x24($sp) -/* 0B1A44 800B0E44 AFA80034 */ sw $t0, 0x34($sp) -/* 0B1A48 800B0E48 AFA70030 */ sw $a3, 0x30($sp) -/* 0B1A4C 800B0E4C 0C01C0C8 */ jal f32_vec3_apply_object_rotation -/* 0B1A50 800B0E50 AFA6003C */ sw $a2, 0x3c($sp) -/* 0B1A54 800B0E54 8FA6003C */ lw $a2, 0x3c($sp) -/* 0B1A58 800B0E58 C604000C */ lwc1 $f4, 0xc($s0) -/* 0B1A5C 800B0E5C C4D2000C */ lwc1 $f18, 0xc($a2) -/* 0B1A60 800B0E60 8FA70030 */ lw $a3, 0x30($sp) -/* 0B1A64 800B0E64 46049180 */ add.s $f6, $f18, $f4 -/* 0B1A68 800B0E68 8FA80034 */ lw $t0, 0x34($sp) -/* 0B1A6C 800B0E6C 8FA90024 */ lw $t1, 0x24($sp) -/* 0B1A70 800B0E70 E4C6000C */ swc1 $f6, 0xc($a2) -/* 0B1A74 800B0E74 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 0B1A78 800B0E78 C4C80010 */ lwc1 $f8, 0x10($a2) -/* 0B1A7C 800B0E7C C4D20014 */ lwc1 $f18, 0x14($a2) -/* 0B1A80 800B0E80 460A4400 */ add.s $f16, $f8, $f10 -/* 0B1A84 800B0E84 2402FFFF */ li $v0, -1 -/* 0B1A88 800B0E88 E4D00010 */ swc1 $f16, 0x10($a2) -/* 0B1A8C 800B0E8C C6040014 */ lwc1 $f4, 0x14($s0) -/* 0B1A90 800B0E90 00000000 */ nop -/* 0B1A94 800B0E94 46049180 */ add.s $f6, $f18, $f4 -/* 0B1A98 800B0E98 E4C60014 */ swc1 $f6, 0x14($a2) -/* 0B1A9C 800B0E9C A0E00068 */ sb $zero, 0x68($a3) -/* 0B1AA0 800B0EA0 A0E0006A */ sb $zero, 0x6a($a3) -/* 0B1AA4 800B0EA4 A0E2006B */ sb $v0, 0x6b($a3) -/* 0B1AA8 800B0EA8 850C0006 */ lh $t4, 6($t0) -/* 0B1AAC 800B0EAC A4E00018 */ sh $zero, 0x18($a3) -/* 0B1AB0 800B0EB0 A4EC001A */ sh $t4, 0x1a($a3) -/* 0B1AB4 800B0EB4 85040004 */ lh $a0, 4($t0) -/* 0B1AB8 800B0EB8 8CE30044 */ lw $v1, 0x44($a3) -/* 0B1ABC 800B0EBC 14440003 */ bne $v0, $a0, .L800B0ECC -/* 0B1AC0 800B0EC0 00000000 */ nop -/* 0B1AC4 800B0EC4 1000002C */ b .L800B0F78 -/* 0B1AC8 800B0EC8 AC600000 */ sw $zero, ($v1) -.L800B0ECC: -/* 0B1ACC 800B0ECC AFA3002C */ sw $v1, 0x2c($sp) -/* 0B1AD0 800B0ED0 AFA6003C */ sw $a2, 0x3c($sp) -/* 0B1AD4 800B0ED4 AFA70030 */ sw $a3, 0x30($sp) -/* 0B1AD8 800B0ED8 AFA80034 */ sw $t0, 0x34($sp) -/* 0B1ADC 800B0EDC 0C01EB9D */ jal load_texture -/* 0B1AE0 800B0EE0 AFA90024 */ sw $t1, 0x24($sp) -/* 0B1AE4 800B0EE4 8FA3002C */ lw $v1, 0x2c($sp) -/* 0B1AE8 800B0EE8 8FA6003C */ lw $a2, 0x3c($sp) -/* 0B1AEC 800B0EEC 8FA70030 */ lw $a3, 0x30($sp) -/* 0B1AF0 800B0EF0 8FA80034 */ lw $t0, 0x34($sp) -/* 0B1AF4 800B0EF4 8FA90024 */ lw $t1, 0x24($sp) -/* 0B1AF8 800B0EF8 1040001F */ beqz $v0, .L800B0F78 -/* 0B1AFC 800B0EFC AC620000 */ sw $v0, ($v1) -/* 0B1B00 800B0F00 844F0006 */ lh $t7, 6($v0) -/* 0B1B04 800B0F04 00000000 */ nop -/* 0B1B08 800B0F08 31EE0004 */ andi $t6, $t7, 4 -/* 0B1B0C 800B0F0C 11C0000F */ beqz $t6, .L800B0F4C -/* 0B1B10 800B0F10 00000000 */ nop -/* 0B1B14 800B0F14 8CF80040 */ lw $t8, 0x40($a3) -/* 0B1B18 800B0F18 00000000 */ nop -/* 0B1B1C 800B0F1C 33191000 */ andi $t9, $t8, 0x1000 -/* 0B1B20 800B0F20 13200006 */ beqz $t9, .L800B0F3C -/* 0B1B24 800B0F24 00000000 */ nop -/* 0B1B28 800B0F28 84EA0006 */ lh $t2, 6($a3) -/* 0B1B2C 800B0F2C 00000000 */ nop -/* 0B1B30 800B0F30 354B0100 */ ori $t3, $t2, 0x100 -/* 0B1B34 800B0F34 10000005 */ b .L800B0F4C -/* 0B1B38 800B0F38 A4EB0006 */ sh $t3, 6($a3) -.L800B0F3C: -/* 0B1B3C 800B0F3C 84EC0006 */ lh $t4, 6($a3) -/* 0B1B40 800B0F40 00000000 */ nop -/* 0B1B44 800B0F44 358D0080 */ ori $t5, $t4, 0x80 -/* 0B1B48 800B0F48 A4ED0006 */ sh $t5, 6($a3) -.L800B0F4C: -/* 0B1B4C 800B0F4C 8CEF0040 */ lw $t7, 0x40($a3) -/* 0B1B50 800B0F50 24010002 */ li $at, 2 -/* 0B1B54 800B0F54 31EE0003 */ andi $t6, $t7, 3 -/* 0B1B58 800B0F58 15C10007 */ bne $t6, $at, .L800B0F78 -/* 0B1B5C 800B0F5C 00000000 */ nop -/* 0B1B60 800B0F60 8C780000 */ lw $t8, ($v1) -/* 0B1B64 800B0F64 00000000 */ nop -/* 0B1B68 800B0F68 97190012 */ lhu $t9, 0x12($t8) -/* 0B1B6C 800B0F6C 00000000 */ nop -/* 0B1B70 800B0F70 272AFFFF */ addiu $t2, $t9, -1 -/* 0B1B74 800B0F74 A4EA0018 */ sh $t2, 0x18($a3) -.L800B0F78: -/* 0B1B78 800B0F78 444BF800 */ cfc1 $t3, $31 -/* 0B1B7C 800B0F7C C4C8000C */ lwc1 $f8, 0xc($a2) -/* 0B1B80 800B0F80 35610003 */ ori $at, $t3, 3 -/* 0B1B84 800B0F84 38210002 */ xori $at, $at, 2 -/* 0B1B88 800B0F88 44C1F800 */ ctc1 $at, $31 -/* 0B1B8C 800B0F8C 8C6D0008 */ lw $t5, 8($v1) -/* 0B1B90 800B0F90 460042A4 */ cvt.w.s $f10, $f8 -/* 0B1B94 800B0F94 44CBF800 */ ctc1 $t3, $31 -/* 0B1B98 800B0F98 440C5000 */ mfc1 $t4, $f10 -/* 0B1B9C 800B0F9C 00000000 */ nop -/* 0B1BA0 800B0FA0 444FF800 */ cfc1 $t7, $31 -/* 0B1BA4 800B0FA4 A5AC0000 */ sh $t4, ($t5) -/* 0B1BA8 800B0FA8 35E10003 */ ori $at, $t7, 3 -/* 0B1BAC 800B0FAC 38210002 */ xori $at, $at, 2 -/* 0B1BB0 800B0FB0 44C1F800 */ ctc1 $at, $31 -/* 0B1BB4 800B0FB4 C4D00010 */ lwc1 $f16, 0x10($a2) -/* 0B1BB8 800B0FB8 8C780008 */ lw $t8, 8($v1) -/* 0B1BBC 800B0FBC 460084A4 */ cvt.w.s $f18, $f16 -/* 0B1BC0 800B0FC0 44CFF800 */ ctc1 $t7, $31 -/* 0B1BC4 800B0FC4 440E9000 */ mfc1 $t6, $f18 -/* 0B1BC8 800B0FC8 00000000 */ nop -/* 0B1BCC 800B0FCC 4459F800 */ cfc1 $t9, $31 -/* 0B1BD0 800B0FD0 A70E0002 */ sh $t6, 2($t8) -/* 0B1BD4 800B0FD4 37210003 */ ori $at, $t9, 3 -/* 0B1BD8 800B0FD8 38210002 */ xori $at, $at, 2 -/* 0B1BDC 800B0FDC 44C1F800 */ ctc1 $at, $31 -/* 0B1BE0 800B0FE0 C4C40014 */ lwc1 $f4, 0x14($a2) -/* 0B1BE4 800B0FE4 8C6B0008 */ lw $t3, 8($v1) -/* 0B1BE8 800B0FE8 460021A4 */ cvt.w.s $f6, $f4 -/* 0B1BEC 800B0FEC 2401FFFF */ li $at, -1 -/* 0B1BF0 800B0FF0 440A3000 */ mfc1 $t2, $f6 -/* 0B1BF4 800B0FF4 44D9F800 */ ctc1 $t9, $31 -/* 0B1BF8 800B0FF8 11210026 */ beq $t1, $at, .L800B1094 -/* 0B1BFC 800B0FFC A56A0004 */ sh $t2, 4($t3) -/* 0B1C00 800B1000 84CC001E */ lh $t4, 0x1e($a2) -/* 0B1C04 800B1004 00000000 */ nop -/* 0B1C08 800B1008 258D0001 */ addiu $t5, $t4, 1 -/* 0B1C0C 800B100C A4CD001E */ sh $t5, 0x1e($a2) -/* 0B1C10 800B1010 8D2F0000 */ lw $t7, ($t1) -/* 0B1C14 800B1014 84C2001E */ lh $v0, 0x1e($a2) -/* 0B1C18 800B1018 00000000 */ nop -/* 0B1C1C 800B101C 004F082A */ slt $at, $v0, $t7 -/* 0B1C20 800B1020 14200005 */ bnez $at, .L800B1038 -/* 0B1C24 800B1024 000270C0 */ sll $t6, $v0, 3 -/* 0B1C28 800B1028 A4C0001E */ sh $zero, 0x1e($a2) -/* 0B1C2C 800B102C 84C2001E */ lh $v0, 0x1e($a2) -/* 0B1C30 800B1030 00000000 */ nop -/* 0B1C34 800B1034 000270C0 */ sll $t6, $v0, 3 -.L800B1038: -/* 0B1C38 800B1038 012EC021 */ addu $t8, $t1, $t6 -/* 0B1C3C 800B103C 93190014 */ lbu $t9, 0x14($t8) -/* 0B1C40 800B1040 8C6A0008 */ lw $t2, 8($v1) -/* 0B1C44 800B1044 00000000 */ nop -/* 0B1C48 800B1048 A1590006 */ sb $t9, 6($t2) -/* 0B1C4C 800B104C 84CB001E */ lh $t3, 0x1e($a2) -/* 0B1C50 800B1050 8C6E0008 */ lw $t6, 8($v1) -/* 0B1C54 800B1054 000B60C0 */ sll $t4, $t3, 3 -/* 0B1C58 800B1058 012C6821 */ addu $t5, $t1, $t4 -/* 0B1C5C 800B105C 91AF0015 */ lbu $t7, 0x15($t5) -/* 0B1C60 800B1060 00000000 */ nop -/* 0B1C64 800B1064 A1CF0007 */ sb $t7, 7($t6) -/* 0B1C68 800B1068 84D8001E */ lh $t8, 0x1e($a2) -/* 0B1C6C 800B106C 8C6C0008 */ lw $t4, 8($v1) -/* 0B1C70 800B1070 0018C8C0 */ sll $t9, $t8, 3 -/* 0B1C74 800B1074 01395021 */ addu $t2, $t1, $t9 -/* 0B1C78 800B1078 914B0016 */ lbu $t3, 0x16($t2) -/* 0B1C7C 800B107C 00000000 */ nop -/* 0B1C80 800B1080 A18B0008 */ sb $t3, 8($t4) -/* 0B1C84 800B1084 8C6F0008 */ lw $t7, 8($v1) -/* 0B1C88 800B1088 90CD0006 */ lbu $t5, 6($a2) -/* 0B1C8C 800B108C 10000011 */ b .L800B10D4 -/* 0B1C90 800B1090 A1ED0009 */ sb $t5, 9($t7) -.L800B1094: -/* 0B1C94 800B1094 90EE006C */ lbu $t6, 0x6c($a3) -/* 0B1C98 800B1098 8C780008 */ lw $t8, 8($v1) -/* 0B1C9C 800B109C 00000000 */ nop -/* 0B1CA0 800B10A0 A30E0006 */ sb $t6, 6($t8) -/* 0B1CA4 800B10A4 8C6A0008 */ lw $t2, 8($v1) -/* 0B1CA8 800B10A8 90F9006D */ lbu $t9, 0x6d($a3) -/* 0B1CAC 800B10AC 00000000 */ nop -/* 0B1CB0 800B10B0 A1590007 */ sb $t9, 7($t2) -/* 0B1CB4 800B10B4 8C6C0008 */ lw $t4, 8($v1) -/* 0B1CB8 800B10B8 90EB006E */ lbu $t3, 0x6e($a3) -/* 0B1CBC 800B10BC 00000000 */ nop -/* 0B1CC0 800B10C0 A18B0008 */ sb $t3, 8($t4) -/* 0B1CC4 800B10C4 8C6F0008 */ lw $t7, 8($v1) -/* 0B1CC8 800B10C8 90CD0006 */ lbu $t5, 6($a2) -/* 0B1CCC 800B10CC 00000000 */ nop -/* 0B1CD0 800B10D0 A1ED0009 */ sb $t5, 9($t7) -.L800B10D4: -/* 0B1CD4 800B10D4 950E000A */ lhu $t6, 0xa($t0) -/* 0B1CD8 800B10D8 00E01025 */ move $v0, $a3 -/* 0B1CDC 800B10DC 000EC282 */ srl $t8, $t6, 0xa -/* 0B1CE0 800B10E0 A0F8006A */ sb $t8, 0x6a($a3) -/* 0B1CE4 800B10E4 8D190008 */ lw $t9, 8($t0) -/* 0B1CE8 800B10E8 00000000 */ nop -/* 0B1CEC 800B10EC 00195580 */ sll $t2, $t9, 0x16 -/* 0B1CF0 800B10F0 000A5E82 */ srl $t3, $t2, 0x1a -/* 0B1CF4 800B10F4 A0EB006B */ sb $t3, 0x6b($a3) -/* 0B1CF8 800B10F8 C608000C */ lwc1 $f8, 0xc($s0) -/* 0B1CFC 800B10FC 00000000 */ nop -/* 0B1D00 800B1100 E4E8000C */ swc1 $f8, 0xc($a3) -/* 0B1D04 800B1104 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 0B1D08 800B1108 00000000 */ nop -/* 0B1D0C 800B110C E4EA0010 */ swc1 $f10, 0x10($a3) -/* 0B1D10 800B1110 C6100014 */ lwc1 $f16, 0x14($s0) -/* 0B1D14 800B1114 00000000 */ nop -/* 0B1D18 800B1118 E4F00014 */ swc1 $f16, 0x14($a3) -/* 0B1D1C 800B111C A4C0000A */ sh $zero, 0xa($a2) -.L800B1120: -/* 0B1D20 800B1120 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B1D24 800B1124 8FB00018 */ lw $s0, 0x18($sp) -/* 0B1D28 800B1128 03E00008 */ jr $ra -/* 0B1D2C 800B112C 27BD0038 */ addiu $sp, $sp, 0x38 - diff --git a/asm/non_matchings/particles/func_800B26E0.s b/asm/non_matchings/particles/func_800B26E0.s deleted file mode 100644 index 72a9a0aa..00000000 --- a/asm/non_matchings/particles/func_800B26E0.s +++ /dev/null @@ -1,598 +0,0 @@ -.late_rodata -glabel D_800E8BF0 -.float 0.1 -glabel D_800E8BF4 -.float 0.01 - -.text -glabel func_800B26E0 -/* 0B32E0 800B26E0 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0B32E4 800B26E4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0B32E8 800B26E8 8C8E003C */ lw $t6, 0x3c($a0) -/* 0B32EC 800B26EC 00803025 */ move $a2, $a0 -/* 0B32F0 800B26F0 00001825 */ move $v1, $zero -/* 0B32F4 800B26F4 11C0000A */ beqz $t6, .L800B2720 -/* 0B32F8 800B26F8 AFAE0034 */ sw $t6, 0x34($sp) -/* 0B32FC 800B26FC 8C870058 */ lw $a3, 0x58($a0) -/* 0B3300 800B2700 00000000 */ nop -/* 0B3304 800B2704 8CF80000 */ lw $t8, ($a3) -/* 0B3308 800B2708 00000000 */ nop -/* 0B330C 800B270C 8F19009C */ lw $t9, 0x9c($t8) -/* 0B3310 800B2710 00000000 */ nop -/* 0B3314 800B2714 AFB9002C */ sw $t9, 0x2c($sp) -/* 0B3318 800B2718 8C830044 */ lw $v1, 0x44($a0) -/* 0B331C 800B271C AFA70030 */ sw $a3, 0x30($sp) -.L800B2720: -/* 0B3320 800B2720 90C80068 */ lbu $t0, 0x68($a2) -/* 0B3324 800B2724 8FA70030 */ lw $a3, 0x30($sp) -/* 0B3328 800B2728 29010002 */ slti $at, $t0, 2 -/* 0B332C 800B272C 102001CE */ beqz $at, .L800B2E68 -/* 0B3330 800B2730 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012 -/* 0B3334 800B2734 8FA90034 */ lw $t1, 0x34($sp) -/* 0B3338 800B2738 00000000 */ nop -/* 0B333C 800B273C 112001CA */ beqz $t1, .L800B2E68 -/* 0B3340 800B2740 00000000 */ nop -/* 0B3344 800B2744 8CEA0000 */ lw $t2, ($a3) -/* 0B3348 800B2748 00000000 */ nop -/* 0B334C 800B274C 8D4B0000 */ lw $t3, ($t2) -/* 0B3350 800B2750 00000000 */ nop -/* 0B3354 800B2754 316C1000 */ andi $t4, $t3, 0x1000 -/* 0B3358 800B2758 11800017 */ beqz $t4, .L800B27B8 -/* 0B335C 800B275C 00000000 */ nop -/* 0B3360 800B2760 C520001C */ lwc1 $f0, 0x1c($t1) -/* 0B3364 800B2764 C5220020 */ lwc1 $f2, 0x20($t1) -/* 0B3368 800B2768 46000102 */ mul.s $f4, $f0, $f0 -/* 0B336C 800B276C C52E0024 */ lwc1 $f14, 0x24($t1) -/* 0B3370 800B2770 AFA70030 */ sw $a3, 0x30($sp) -/* 0B3374 800B2774 AFA60050 */ sw $a2, 0x50($sp) -/* 0B3378 800B2778 46021182 */ mul.s $f6, $f2, $f2 -/* 0B337C 800B277C AFA30038 */ sw $v1, 0x38($sp) -/* 0B3380 800B2780 460E7282 */ mul.s $f10, $f14, $f14 -/* 0B3384 800B2784 46062200 */ add.s $f8, $f4, $f6 -/* 0B3388 800B2788 0C0326B4 */ jal sqrtf -/* 0B338C 800B278C 460A4300 */ add.s $f12, $f8, $f10 -/* 0B3390 800B2790 8FA60050 */ lw $a2, 0x50($sp) -/* 0B3394 800B2794 3C01800F */ lui $at, %hi(D_800E8BF0) # $at, 0x800f -/* 0B3398 800B2798 C4D00008 */ lwc1 $f16, 8($a2) -/* 0B339C 800B279C C4248BF0 */ lwc1 $f4, %lo(D_800E8BF0)($at) -/* 0B33A0 800B27A0 46008482 */ mul.s $f18, $f16, $f0 -/* 0B33A4 800B27A4 8FA30038 */ lw $v1, 0x38($sp) -/* 0B33A8 800B27A8 8FA70030 */ lw $a3, 0x30($sp) -/* 0B33AC 800B27AC 46049082 */ mul.s $f2, $f18, $f4 -/* 0B33B0 800B27B0 10000004 */ b .L800B27C4 -/* 0B33B4 800B27B4 8CCD0040 */ lw $t5, 0x40($a2) -.L800B27B8: -/* 0B33B8 800B27B8 C4C20008 */ lwc1 $f2, 8($a2) -/* 0B33BC 800B27BC 00000000 */ nop -/* 0B33C0 800B27C0 8CCD0040 */ lw $t5, 0x40($a2) -.L800B27C4: -/* 0B33C4 800B27C4 8FAF0034 */ lw $t7, 0x34($sp) -/* 0B33C8 800B27C8 31AE4000 */ andi $t6, $t5, 0x4000 -/* 0B33CC 800B27CC 15C0001B */ bnez $t6, .L800B283C -/* 0B33D0 800B27D0 27A50044 */ addiu $a1, $sp, 0x44 -/* 0B33D4 800B27D4 44800000 */ mtc1 $zero, $f0 -/* 0B33D8 800B27D8 24010001 */ li $at, 1 -/* 0B33DC 800B27DC E7A00044 */ swc1 $f0, 0x44($sp) -/* 0B33E0 800B27E0 E7A00048 */ swc1 $f0, 0x48($sp) -/* 0B33E4 800B27E4 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 0B33E8 800B27E8 80C2006A */ lb $v0, 0x6a($a2) -/* 0B33EC 800B27EC 00000000 */ nop -/* 0B33F0 800B27F0 10410007 */ beq $v0, $at, .L800B2810 -/* 0B33F4 800B27F4 24010002 */ li $at, 2 -/* 0B33F8 800B27F8 10410003 */ beq $v0, $at, .L800B2808 -/* 0B33FC 800B27FC 00000000 */ nop -/* 0B3400 800B2800 10000004 */ b .L800B2814 -/* 0B3404 800B2804 E7A20044 */ swc1 $f2, 0x44($sp) -.L800B2808: -/* 0B3408 800B2808 10000002 */ b .L800B2814 -/* 0B340C 800B280C E7A2004C */ swc1 $f2, 0x4c($sp) -.L800B2810: -/* 0B3410 800B2810 E7A20048 */ swc1 $f2, 0x48($sp) -.L800B2814: -/* 0B3414 800B2814 8FA40034 */ lw $a0, 0x34($sp) -/* 0B3418 800B2818 AFA30038 */ sw $v1, 0x38($sp) -/* 0B341C 800B281C AFA60050 */ sw $a2, 0x50($sp) -/* 0B3420 800B2820 0C01C0C8 */ jal f32_vec3_apply_object_rotation -/* 0B3424 800B2824 AFA70030 */ sw $a3, 0x30($sp) -/* 0B3428 800B2828 8FA30038 */ lw $v1, 0x38($sp) -/* 0B342C 800B282C 8FA60050 */ lw $a2, 0x50($sp) -/* 0B3430 800B2830 8FA70030 */ lw $a3, 0x30($sp) -/* 0B3434 800B2834 1000003D */ b .L800B292C -/* 0B3438 800B2838 00000000 */ nop -.L800B283C: -/* 0B343C 800B283C C5E6001C */ lwc1 $f6, 0x1c($t7) -/* 0B3440 800B2840 3C01800F */ lui $at, %hi(D_800E8BF4) # $at, 0x800f -/* 0B3444 800B2844 E7A60044 */ swc1 $f6, 0x44($sp) -/* 0B3448 800B2848 46063402 */ mul.s $f16, $f6, $f6 -/* 0B344C 800B284C C5E80020 */ lwc1 $f8, 0x20($t7) -/* 0B3450 800B2850 00000000 */ nop -/* 0B3454 800B2854 E7A80048 */ swc1 $f8, 0x48($sp) -/* 0B3458 800B2858 46084482 */ mul.s $f18, $f8, $f8 -/* 0B345C 800B285C C5EA0024 */ lwc1 $f10, 0x24($t7) -/* 0B3460 800B2860 C4288BF4 */ lwc1 $f8, %lo(D_800E8BF4)($at) -/* 0B3464 800B2864 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0B3468 800B2868 460A5182 */ mul.s $f6, $f10, $f10 -/* 0B346C 800B286C 46128100 */ add.s $f4, $f16, $f18 -/* 0B3470 800B2870 E7AA004C */ swc1 $f10, 0x4c($sp) -/* 0B3474 800B2874 46043300 */ add.s $f12, $f6, $f4 -/* 0B3478 800B2878 4608603C */ c.lt.s $f12, $f8 -/* 0B347C 800B287C 00000000 */ nop -/* 0B3480 800B2880 45000004 */ bc1f .L800B2894 -/* 0B3484 800B2884 00000000 */ nop -/* 0B3488 800B2888 44816000 */ mtc1 $at, $f12 -/* 0B348C 800B288C 1000000C */ b .L800B28C0 -/* 0B3490 800B2890 C7B00044 */ lwc1 $f16, 0x44($sp) -.L800B2894: -/* 0B3494 800B2894 AFA30038 */ sw $v1, 0x38($sp) -/* 0B3498 800B2898 AFA60050 */ sw $a2, 0x50($sp) -/* 0B349C 800B289C AFA70030 */ sw $a3, 0x30($sp) -/* 0B34A0 800B28A0 0C0326B4 */ jal sqrtf -/* 0B34A4 800B28A4 E7A2003C */ swc1 $f2, 0x3c($sp) -/* 0B34A8 800B28A8 C7A2003C */ lwc1 $f2, 0x3c($sp) -/* 0B34AC 800B28AC 8FA30038 */ lw $v1, 0x38($sp) -/* 0B34B0 800B28B0 8FA60050 */ lw $a2, 0x50($sp) -/* 0B34B4 800B28B4 8FA70030 */ lw $a3, 0x30($sp) -/* 0B34B8 800B28B8 46001303 */ div.s $f12, $f2, $f0 -/* 0B34BC 800B28BC C7B00044 */ lwc1 $f16, 0x44($sp) -.L800B28C0: -/* 0B34C0 800B28C0 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0B34C4 800B28C4 460C8482 */ mul.s $f18, $f16, $f12 -/* 0B34C8 800B28C8 C7A4004C */ lwc1 $f4, 0x4c($sp) -/* 0B34CC 800B28CC 24010001 */ li $at, 1 -/* 0B34D0 800B28D0 460C5182 */ mul.s $f6, $f10, $f12 -/* 0B34D4 800B28D4 E7B20044 */ swc1 $f18, 0x44($sp) -/* 0B34D8 800B28D8 460C2202 */ mul.s $f8, $f4, $f12 -/* 0B34DC 800B28DC E7A60048 */ swc1 $f6, 0x48($sp) -/* 0B34E0 800B28E0 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0B34E4 800B28E4 E7A8004C */ swc1 $f8, 0x4c($sp) -/* 0B34E8 800B28E8 80C2006A */ lb $v0, 0x6a($a2) -/* 0B34EC 800B28EC C7B0004C */ lwc1 $f16, 0x4c($sp) -/* 0B34F0 800B28F0 10400005 */ beqz $v0, .L800B2908 -/* 0B34F4 800B28F4 00000000 */ nop -/* 0B34F8 800B28F8 10410007 */ beq $v0, $at, .L800B2918 -/* 0B34FC 800B28FC 00000000 */ nop -/* 0B3500 800B2900 1000000A */ b .L800B292C -/* 0B3504 800B2904 00000000 */ nop -.L800B2908: -/* 0B3508 800B2908 46008487 */ neg.s $f18, $f16 -/* 0B350C 800B290C E7B20044 */ swc1 $f18, 0x44($sp) -/* 0B3510 800B2910 10000006 */ b .L800B292C -/* 0B3514 800B2914 E7AC004C */ swc1 $f12, 0x4c($sp) -.L800B2918: -/* 0B3518 800B2918 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0B351C 800B291C C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0B3520 800B2920 46005187 */ neg.s $f6, $f10 -/* 0B3524 800B2924 E7A60048 */ swc1 $f6, 0x48($sp) -/* 0B3528 800B2928 E7AC004C */ swc1 $f12, 0x4c($sp) -.L800B292C: -/* 0B352C 800B292C 106000CE */ beqz $v1, .L800B2C68 -/* 0B3530 800B2930 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012 -/* 0B3534 800B2934 90D80068 */ lbu $t8, 0x68($a2) -/* 0B3538 800B2938 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0B353C 800B293C 170000CA */ bnez $t8, .L800B2C68 -/* 0B3540 800B2940 00000000 */ nop -/* 0B3544 800B2944 C4E8000C */ lwc1 $f8, 0xc($a3) -/* 0B3548 800B2948 8C6A0008 */ lw $t2, 8($v1) -/* 0B354C 800B294C 46082400 */ add.s $f16, $f4, $f8 -/* 0B3550 800B2950 4459F800 */ cfc1 $t9, $31 -/* 0B3554 800B2954 00000000 */ nop -/* 0B3558 800B2958 37210003 */ ori $at, $t9, 3 -/* 0B355C 800B295C 38210002 */ xori $at, $at, 2 -/* 0B3560 800B2960 44C1F800 */ ctc1 $at, $31 -/* 0B3564 800B2964 00000000 */ nop -/* 0B3568 800B2968 460084A4 */ cvt.w.s $f18, $f16 -/* 0B356C 800B296C 44089000 */ mfc1 $t0, $f18 -/* 0B3570 800B2970 44D9F800 */ ctc1 $t9, $31 -/* 0B3574 800B2974 A548000A */ sh $t0, 0xa($t2) -/* 0B3578 800B2978 C4E60010 */ lwc1 $f6, 0x10($a3) -/* 0B357C 800B297C C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0B3580 800B2980 8C690008 */ lw $t1, 8($v1) -/* 0B3584 800B2984 46065100 */ add.s $f4, $f10, $f6 -/* 0B3588 800B2988 444BF800 */ cfc1 $t3, $31 -/* 0B358C 800B298C 00000000 */ nop -/* 0B3590 800B2990 35610003 */ ori $at, $t3, 3 -/* 0B3594 800B2994 38210002 */ xori $at, $at, 2 -/* 0B3598 800B2998 44C1F800 */ ctc1 $at, $31 -/* 0B359C 800B299C 00000000 */ nop -/* 0B35A0 800B29A0 46002224 */ cvt.w.s $f8, $f4 -/* 0B35A4 800B29A4 440C4000 */ mfc1 $t4, $f8 -/* 0B35A8 800B29A8 44CBF800 */ ctc1 $t3, $31 -/* 0B35AC 800B29AC A52C000C */ sh $t4, 0xc($t1) -/* 0B35B0 800B29B0 C4F20014 */ lwc1 $f18, 0x14($a3) -/* 0B35B4 800B29B4 C7B0004C */ lwc1 $f16, 0x4c($sp) -/* 0B35B8 800B29B8 8C6F0008 */ lw $t7, 8($v1) -/* 0B35BC 800B29BC 46128280 */ add.s $f10, $f16, $f18 -/* 0B35C0 800B29C0 444DF800 */ cfc1 $t5, $31 -/* 0B35C4 800B29C4 00000000 */ nop -/* 0B35C8 800B29C8 35A10003 */ ori $at, $t5, 3 -/* 0B35CC 800B29CC 38210002 */ xori $at, $at, 2 -/* 0B35D0 800B29D0 44C1F800 */ ctc1 $at, $31 -/* 0B35D4 800B29D4 00000000 */ nop -/* 0B35D8 800B29D8 460051A4 */ cvt.w.s $f6, $f10 -/* 0B35DC 800B29DC 440E3000 */ mfc1 $t6, $f6 -/* 0B35E0 800B29E0 44CDF800 */ ctc1 $t5, $31 -/* 0B35E4 800B29E4 A5EE000E */ sh $t6, 0xe($t7) -/* 0B35E8 800B29E8 8C620008 */ lw $v0, 8($v1) -/* 0B35EC 800B29EC 444CF800 */ cfc1 $t4, $31 -/* 0B35F0 800B29F0 90580006 */ lbu $t8, 6($v0) -/* 0B35F4 800B29F4 35810003 */ ori $at, $t4, 3 -/* 0B35F8 800B29F8 A0580010 */ sb $t8, 0x10($v0) -/* 0B35FC 800B29FC 8C620008 */ lw $v0, 8($v1) -/* 0B3600 800B2A00 38210002 */ xori $at, $at, 2 -/* 0B3604 800B2A04 90590007 */ lbu $t9, 7($v0) -/* 0B3608 800B2A08 44C1F800 */ ctc1 $at, $31 -/* 0B360C 800B2A0C A0590011 */ sb $t9, 0x11($v0) -/* 0B3610 800B2A10 8C620008 */ lw $v0, 8($v1) -/* 0B3614 800B2A14 00000000 */ nop -/* 0B3618 800B2A18 90480008 */ lbu $t0, 8($v0) -/* 0B361C 800B2A1C 00000000 */ nop -/* 0B3620 800B2A20 A0480012 */ sb $t0, 0x12($v0) -/* 0B3624 800B2A24 8C6B0008 */ lw $t3, 8($v1) -/* 0B3628 800B2A28 90EA0006 */ lbu $t2, 6($a3) -/* 0B362C 800B2A2C 00000000 */ nop -/* 0B3630 800B2A30 A16A0013 */ sb $t2, 0x13($t3) -/* 0B3634 800B2A34 C4E4000C */ lwc1 $f4, 0xc($a3) -/* 0B3638 800B2A38 8C6D0008 */ lw $t5, 8($v1) -/* 0B363C 800B2A3C 46002224 */ cvt.w.s $f8, $f4 -/* 0B3640 800B2A40 44CCF800 */ ctc1 $t4, $31 -/* 0B3644 800B2A44 44094000 */ mfc1 $t1, $f8 -/* 0B3648 800B2A48 00000000 */ nop -/* 0B364C 800B2A4C 444EF800 */ cfc1 $t6, $31 -/* 0B3650 800B2A50 A5A90014 */ sh $t1, 0x14($t5) -/* 0B3654 800B2A54 35C10003 */ ori $at, $t6, 3 -/* 0B3658 800B2A58 38210002 */ xori $at, $at, 2 -/* 0B365C 800B2A5C 44C1F800 */ ctc1 $at, $31 -/* 0B3660 800B2A60 C4F00010 */ lwc1 $f16, 0x10($a3) -/* 0B3664 800B2A64 8C780008 */ lw $t8, 8($v1) -/* 0B3668 800B2A68 460084A4 */ cvt.w.s $f18, $f16 -/* 0B366C 800B2A6C 44CEF800 */ ctc1 $t6, $31 -/* 0B3670 800B2A70 440F9000 */ mfc1 $t7, $f18 -/* 0B3674 800B2A74 00000000 */ nop -/* 0B3678 800B2A78 4459F800 */ cfc1 $t9, $31 -/* 0B367C 800B2A7C A70F0016 */ sh $t7, 0x16($t8) -/* 0B3680 800B2A80 37210003 */ ori $at, $t9, 3 -/* 0B3684 800B2A84 38210002 */ xori $at, $at, 2 -/* 0B3688 800B2A88 44C1F800 */ ctc1 $at, $31 -/* 0B368C 800B2A8C C4EA0014 */ lwc1 $f10, 0x14($a3) -/* 0B3690 800B2A90 8C6A0008 */ lw $t2, 8($v1) -/* 0B3694 800B2A94 460051A4 */ cvt.w.s $f6, $f10 -/* 0B3698 800B2A98 2401FFFF */ li $at, -1 -/* 0B369C 800B2A9C 44083000 */ mfc1 $t0, $f6 -/* 0B36A0 800B2AA0 44D9F800 */ ctc1 $t9, $31 -/* 0B36A4 800B2AA4 A5480018 */ sh $t0, 0x18($t2) -/* 0B36A8 800B2AA8 8FAB002C */ lw $t3, 0x2c($sp) -/* 0B36AC 800B2AAC 00000000 */ nop -/* 0B36B0 800B2AB0 1161001C */ beq $t3, $at, .L800B2B24 -/* 0B36B4 800B2AB4 00000000 */ nop -/* 0B36B8 800B2AB8 84EC001E */ lh $t4, 0x1e($a3) -/* 0B36BC 800B2ABC 8C6F0008 */ lw $t7, 8($v1) -/* 0B36C0 800B2AC0 000C48C0 */ sll $t1, $t4, 3 -/* 0B36C4 800B2AC4 01696821 */ addu $t5, $t3, $t1 -/* 0B36C8 800B2AC8 91AE0014 */ lbu $t6, 0x14($t5) -/* 0B36CC 800B2ACC 00000000 */ nop -/* 0B36D0 800B2AD0 A1EE001A */ sb $t6, 0x1a($t7) -/* 0B36D4 800B2AD4 84F9001E */ lh $t9, 0x1e($a3) -/* 0B36D8 800B2AD8 8FB8002C */ lw $t8, 0x2c($sp) -/* 0B36DC 800B2ADC 001940C0 */ sll $t0, $t9, 3 -/* 0B36E0 800B2AE0 03085021 */ addu $t2, $t8, $t0 -/* 0B36E4 800B2AE4 914C0015 */ lbu $t4, 0x15($t2) -/* 0B36E8 800B2AE8 8C6B0008 */ lw $t3, 8($v1) -/* 0B36EC 800B2AEC 00000000 */ nop -/* 0B36F0 800B2AF0 A16C001B */ sb $t4, 0x1b($t3) -/* 0B36F4 800B2AF4 84ED001E */ lh $t5, 0x1e($a3) -/* 0B36F8 800B2AF8 8FA9002C */ lw $t1, 0x2c($sp) -/* 0B36FC 800B2AFC 000D70C0 */ sll $t6, $t5, 3 -/* 0B3700 800B2B00 012E7821 */ addu $t7, $t1, $t6 -/* 0B3704 800B2B04 91F90016 */ lbu $t9, 0x16($t7) -/* 0B3708 800B2B08 8C780008 */ lw $t8, 8($v1) -/* 0B370C 800B2B0C 00000000 */ nop -/* 0B3710 800B2B10 A319001C */ sb $t9, 0x1c($t8) -/* 0B3714 800B2B14 8C6A0008 */ lw $t2, 8($v1) -/* 0B3718 800B2B18 90E80006 */ lbu $t0, 6($a3) -/* 0B371C 800B2B1C 10000011 */ b .L800B2B64 -/* 0B3720 800B2B20 A148001D */ sb $t0, 0x1d($t2) -.L800B2B24: -/* 0B3724 800B2B24 90CC006C */ lbu $t4, 0x6c($a2) -/* 0B3728 800B2B28 8C6B0008 */ lw $t3, 8($v1) -/* 0B372C 800B2B2C 00000000 */ nop -/* 0B3730 800B2B30 A16C001A */ sb $t4, 0x1a($t3) -/* 0B3734 800B2B34 8C690008 */ lw $t1, 8($v1) -/* 0B3738 800B2B38 90CD006D */ lbu $t5, 0x6d($a2) -/* 0B373C 800B2B3C 00000000 */ nop -/* 0B3740 800B2B40 A12D001B */ sb $t5, 0x1b($t1) -/* 0B3744 800B2B44 8C6F0008 */ lw $t7, 8($v1) -/* 0B3748 800B2B48 90CE006E */ lbu $t6, 0x6e($a2) -/* 0B374C 800B2B4C 00000000 */ nop -/* 0B3750 800B2B50 A1EE001C */ sb $t6, 0x1c($t7) -/* 0B3754 800B2B54 8C780008 */ lw $t8, 8($v1) -/* 0B3758 800B2B58 90F90006 */ lbu $t9, 6($a3) -/* 0B375C 800B2B5C 00000000 */ nop -/* 0B3760 800B2B60 A319001D */ sb $t9, 0x1d($t8) -.L800B2B64: -/* 0B3764 800B2B64 C4E4000C */ lwc1 $f4, 0xc($a3) -/* 0B3768 800B2B68 C7A80044 */ lwc1 $f8, 0x44($sp) -/* 0B376C 800B2B6C 8C6C0008 */ lw $t4, 8($v1) -/* 0B3770 800B2B70 46082401 */ sub.s $f16, $f4, $f8 -/* 0B3774 800B2B74 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012 -/* 0B3778 800B2B78 4448F800 */ cfc1 $t0, $31 -/* 0B377C 800B2B7C 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80 -/* 0B3780 800B2B80 35010003 */ ori $at, $t0, 3 -/* 0B3784 800B2B84 38210002 */ xori $at, $at, 2 -/* 0B3788 800B2B88 44C1F800 */ ctc1 $at, $31 -/* 0B378C 800B2B8C 00000000 */ nop -/* 0B3790 800B2B90 460084A4 */ cvt.w.s $f18, $f16 -/* 0B3794 800B2B94 440A9000 */ mfc1 $t2, $f18 -/* 0B3798 800B2B98 44C8F800 */ ctc1 $t0, $31 -/* 0B379C 800B2B9C A58A001E */ sh $t2, 0x1e($t4) -/* 0B37A0 800B2BA0 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 0B37A4 800B2BA4 C4EA0010 */ lwc1 $f10, 0x10($a3) -/* 0B37A8 800B2BA8 8C690008 */ lw $t1, 8($v1) -/* 0B37AC 800B2BAC 46065101 */ sub.s $f4, $f10, $f6 -/* 0B37B0 800B2BB0 444BF800 */ cfc1 $t3, $31 -/* 0B37B4 800B2BB4 00000000 */ nop -/* 0B37B8 800B2BB8 35610003 */ ori $at, $t3, 3 -/* 0B37BC 800B2BBC 38210002 */ xori $at, $at, 2 -/* 0B37C0 800B2BC0 44C1F800 */ ctc1 $at, $31 -/* 0B37C4 800B2BC4 00000000 */ nop -/* 0B37C8 800B2BC8 46002224 */ cvt.w.s $f8, $f4 -/* 0B37CC 800B2BCC 440D4000 */ mfc1 $t5, $f8 -/* 0B37D0 800B2BD0 44CBF800 */ ctc1 $t3, $31 -/* 0B37D4 800B2BD4 A52D0020 */ sh $t5, 0x20($t1) -/* 0B37D8 800B2BD8 C7B2004C */ lwc1 $f18, 0x4c($sp) -/* 0B37DC 800B2BDC C4F00014 */ lwc1 $f16, 0x14($a3) -/* 0B37E0 800B2BE0 8C790008 */ lw $t9, 8($v1) -/* 0B37E4 800B2BE4 46128281 */ sub.s $f10, $f16, $f18 -/* 0B37E8 800B2BE8 240D0001 */ li $t5, 1 -/* 0B37EC 800B2BEC 444EF800 */ cfc1 $t6, $31 -/* 0B37F0 800B2BF0 00000000 */ nop -/* 0B37F4 800B2BF4 35C10003 */ ori $at, $t6, 3 -/* 0B37F8 800B2BF8 38210002 */ xori $at, $at, 2 -/* 0B37FC 800B2BFC 44C1F800 */ ctc1 $at, $31 -/* 0B3800 800B2C00 00000000 */ nop -/* 0B3804 800B2C04 460051A4 */ cvt.w.s $f6, $f10 -/* 0B3808 800B2C08 440F3000 */ mfc1 $t7, $f6 -/* 0B380C 800B2C0C 44CEF800 */ ctc1 $t6, $31 -/* 0B3810 800B2C10 A72F0022 */ sh $t7, 0x22($t9) -/* 0B3814 800B2C14 8C620008 */ lw $v0, 8($v1) -/* 0B3818 800B2C18 00000000 */ nop -/* 0B381C 800B2C1C 90580006 */ lbu $t8, 6($v0) -/* 0B3820 800B2C20 00000000 */ nop -/* 0B3824 800B2C24 A0580024 */ sb $t8, 0x24($v0) -/* 0B3828 800B2C28 8C620008 */ lw $v0, 8($v1) -/* 0B382C 800B2C2C 00000000 */ nop -/* 0B3830 800B2C30 90480007 */ lbu $t0, 7($v0) -/* 0B3834 800B2C34 00000000 */ nop -/* 0B3838 800B2C38 A0480025 */ sb $t0, 0x25($v0) -/* 0B383C 800B2C3C 8C620008 */ lw $v0, 8($v1) -/* 0B3840 800B2C40 00000000 */ nop -/* 0B3844 800B2C44 904A0008 */ lbu $t2, 8($v0) -/* 0B3848 800B2C48 00000000 */ nop -/* 0B384C 800B2C4C A04A0026 */ sb $t2, 0x26($v0) -/* 0B3850 800B2C50 8C6B0008 */ lw $t3, 8($v1) -/* 0B3854 800B2C54 90EC0006 */ lbu $t4, 6($a3) -/* 0B3858 800B2C58 00000000 */ nop -/* 0B385C 800B2C5C A16C0027 */ sb $t4, 0x27($t3) -/* 0B3860 800B2C60 100000C1 */ b .L800B2F68 -/* 0B3864 800B2C64 A0CD0068 */ sb $t5, 0x68($a2) -.L800B2C68: -/* 0B3868 800B2C68 1060007D */ beqz $v1, .L800B2E60 -/* 0B386C 800B2C6C 00000000 */ nop -/* 0B3870 800B2C70 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0B3874 800B2C74 C4E8000C */ lwc1 $f8, 0xc($a3) -/* 0B3878 800B2C78 8C6F0008 */ lw $t7, 8($v1) -/* 0B387C 800B2C7C 46082400 */ add.s $f16, $f4, $f8 -/* 0B3880 800B2C80 4449F800 */ cfc1 $t1, $31 -/* 0B3884 800B2C84 00000000 */ nop -/* 0B3888 800B2C88 35210003 */ ori $at, $t1, 3 -/* 0B388C 800B2C8C 38210002 */ xori $at, $at, 2 -/* 0B3890 800B2C90 44C1F800 */ ctc1 $at, $31 -/* 0B3894 800B2C94 00000000 */ nop -/* 0B3898 800B2C98 460084A4 */ cvt.w.s $f18, $f16 -/* 0B389C 800B2C9C 440E9000 */ mfc1 $t6, $f18 -/* 0B38A0 800B2CA0 44C9F800 */ ctc1 $t1, $31 -/* 0B38A4 800B2CA4 A5EE0028 */ sh $t6, 0x28($t7) -/* 0B38A8 800B2CA8 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0B38AC 800B2CAC C4E60010 */ lwc1 $f6, 0x10($a3) -/* 0B38B0 800B2CB0 8C680008 */ lw $t0, 8($v1) -/* 0B38B4 800B2CB4 46065100 */ add.s $f4, $f10, $f6 -/* 0B38B8 800B2CB8 4459F800 */ cfc1 $t9, $31 -/* 0B38BC 800B2CBC 00000000 */ nop -/* 0B38C0 800B2CC0 37210003 */ ori $at, $t9, 3 -/* 0B38C4 800B2CC4 38210002 */ xori $at, $at, 2 -/* 0B38C8 800B2CC8 44C1F800 */ ctc1 $at, $31 -/* 0B38CC 800B2CCC 00000000 */ nop -/* 0B38D0 800B2CD0 46002224 */ cvt.w.s $f8, $f4 -/* 0B38D4 800B2CD4 44184000 */ mfc1 $t8, $f8 -/* 0B38D8 800B2CD8 44D9F800 */ ctc1 $t9, $31 -/* 0B38DC 800B2CDC A518002A */ sh $t8, 0x2a($t0) -/* 0B38E0 800B2CE0 C7B0004C */ lwc1 $f16, 0x4c($sp) -/* 0B38E4 800B2CE4 C4F20014 */ lwc1 $f18, 0x14($a3) -/* 0B38E8 800B2CE8 8C6B0008 */ lw $t3, 8($v1) -/* 0B38EC 800B2CEC 46128280 */ add.s $f10, $f16, $f18 -/* 0B38F0 800B2CF0 444AF800 */ cfc1 $t2, $31 -/* 0B38F4 800B2CF4 00000000 */ nop -/* 0B38F8 800B2CF8 35410003 */ ori $at, $t2, 3 -/* 0B38FC 800B2CFC 38210002 */ xori $at, $at, 2 -/* 0B3900 800B2D00 44C1F800 */ ctc1 $at, $31 -/* 0B3904 800B2D04 00000000 */ nop -/* 0B3908 800B2D08 460051A4 */ cvt.w.s $f6, $f10 -/* 0B390C 800B2D0C 440C3000 */ mfc1 $t4, $f6 -/* 0B3910 800B2D10 44CAF800 */ ctc1 $t2, $31 -/* 0B3914 800B2D14 A56C002C */ sh $t4, 0x2c($t3) -/* 0B3918 800B2D18 8C620008 */ lw $v0, 8($v1) -/* 0B391C 800B2D1C 00000000 */ nop -/* 0B3920 800B2D20 904D001A */ lbu $t5, 0x1a($v0) -/* 0B3924 800B2D24 00000000 */ nop -/* 0B3928 800B2D28 A04D002E */ sb $t5, 0x2e($v0) -/* 0B392C 800B2D2C 8C620008 */ lw $v0, 8($v1) -/* 0B3930 800B2D30 00000000 */ nop -/* 0B3934 800B2D34 9049001B */ lbu $t1, 0x1b($v0) -/* 0B3938 800B2D38 00000000 */ nop -/* 0B393C 800B2D3C A049002F */ sb $t1, 0x2f($v0) -/* 0B3940 800B2D40 8C620008 */ lw $v0, 8($v1) -/* 0B3944 800B2D44 00000000 */ nop -/* 0B3948 800B2D48 904E001C */ lbu $t6, 0x1c($v0) -/* 0B394C 800B2D4C 00000000 */ nop -/* 0B3950 800B2D50 A04E0030 */ sb $t6, 0x30($v0) -/* 0B3954 800B2D54 8C790008 */ lw $t9, 8($v1) -/* 0B3958 800B2D58 90EF0006 */ lbu $t7, 6($a3) -/* 0B395C 800B2D5C 00000000 */ nop -/* 0B3960 800B2D60 A32F0031 */ sb $t7, 0x31($t9) -/* 0B3964 800B2D64 C7A80044 */ lwc1 $f8, 0x44($sp) -/* 0B3968 800B2D68 C4E4000C */ lwc1 $f4, 0xc($a3) -/* 0B396C 800B2D6C 8C6A0008 */ lw $t2, 8($v1) -/* 0B3970 800B2D70 46082401 */ sub.s $f16, $f4, $f8 -/* 0B3974 800B2D74 4458F800 */ cfc1 $t8, $31 -/* 0B3978 800B2D78 00000000 */ nop -/* 0B397C 800B2D7C 37010003 */ ori $at, $t8, 3 -/* 0B3980 800B2D80 38210002 */ xori $at, $at, 2 -/* 0B3984 800B2D84 44C1F800 */ ctc1 $at, $31 -/* 0B3988 800B2D88 00000000 */ nop -/* 0B398C 800B2D8C 460084A4 */ cvt.w.s $f18, $f16 -/* 0B3990 800B2D90 44089000 */ mfc1 $t0, $f18 -/* 0B3994 800B2D94 44D8F800 */ ctc1 $t8, $31 -/* 0B3998 800B2D98 A5480032 */ sh $t0, 0x32($t2) -/* 0B399C 800B2D9C C7A60048 */ lwc1 $f6, 0x48($sp) -/* 0B39A0 800B2DA0 C4EA0010 */ lwc1 $f10, 0x10($a3) -/* 0B39A4 800B2DA4 8C6D0008 */ lw $t5, 8($v1) -/* 0B39A8 800B2DA8 46065101 */ sub.s $f4, $f10, $f6 -/* 0B39AC 800B2DAC 444CF800 */ cfc1 $t4, $31 -/* 0B39B0 800B2DB0 00000000 */ nop -/* 0B39B4 800B2DB4 35810003 */ ori $at, $t4, 3 -/* 0B39B8 800B2DB8 38210002 */ xori $at, $at, 2 -/* 0B39BC 800B2DBC 44C1F800 */ ctc1 $at, $31 -/* 0B39C0 800B2DC0 00000000 */ nop -/* 0B39C4 800B2DC4 46002224 */ cvt.w.s $f8, $f4 -/* 0B39C8 800B2DC8 440B4000 */ mfc1 $t3, $f8 -/* 0B39CC 800B2DCC 44CCF800 */ ctc1 $t4, $31 -/* 0B39D0 800B2DD0 A5AB0034 */ sh $t3, 0x34($t5) -/* 0B39D4 800B2DD4 C7B2004C */ lwc1 $f18, 0x4c($sp) -/* 0B39D8 800B2DD8 C4F00014 */ lwc1 $f16, 0x14($a3) -/* 0B39DC 800B2DDC 8C6F0008 */ lw $t7, 8($v1) -/* 0B39E0 800B2DE0 46128281 */ sub.s $f10, $f16, $f18 -/* 0B39E4 800B2DE4 240B0002 */ li $t3, 2 -/* 0B39E8 800B2DE8 4449F800 */ cfc1 $t1, $31 -/* 0B39EC 800B2DEC 00000000 */ nop -/* 0B39F0 800B2DF0 35210003 */ ori $at, $t1, 3 -/* 0B39F4 800B2DF4 38210002 */ xori $at, $at, 2 -/* 0B39F8 800B2DF8 44C1F800 */ ctc1 $at, $31 -/* 0B39FC 800B2DFC 00000000 */ nop -/* 0B3A00 800B2E00 460051A4 */ cvt.w.s $f6, $f10 -/* 0B3A04 800B2E04 440E3000 */ mfc1 $t6, $f6 -/* 0B3A08 800B2E08 44C9F800 */ ctc1 $t1, $31 -/* 0B3A0C 800B2E0C A5EE0036 */ sh $t6, 0x36($t7) -/* 0B3A10 800B2E10 8C620008 */ lw $v0, 8($v1) -/* 0B3A14 800B2E14 00000000 */ nop -/* 0B3A18 800B2E18 9059001A */ lbu $t9, 0x1a($v0) -/* 0B3A1C 800B2E1C 00000000 */ nop -/* 0B3A20 800B2E20 A0590038 */ sb $t9, 0x38($v0) -/* 0B3A24 800B2E24 8C620008 */ lw $v0, 8($v1) -/* 0B3A28 800B2E28 00000000 */ nop -/* 0B3A2C 800B2E2C 9058001B */ lbu $t8, 0x1b($v0) -/* 0B3A30 800B2E30 00000000 */ nop -/* 0B3A34 800B2E34 A0580039 */ sb $t8, 0x39($v0) -/* 0B3A38 800B2E38 8C620008 */ lw $v0, 8($v1) -/* 0B3A3C 800B2E3C 00000000 */ nop -/* 0B3A40 800B2E40 9048001C */ lbu $t0, 0x1c($v0) -/* 0B3A44 800B2E44 00000000 */ nop -/* 0B3A48 800B2E48 A048003A */ sb $t0, 0x3a($v0) -/* 0B3A4C 800B2E4C 8C6C0008 */ lw $t4, 8($v1) -/* 0B3A50 800B2E50 90EA0006 */ lbu $t2, 6($a3) -/* 0B3A54 800B2E54 00000000 */ nop -/* 0B3A58 800B2E58 A18A003B */ sb $t2, 0x3b($t4) -/* 0B3A5C 800B2E5C A0CB0068 */ sb $t3, 0x68($a2) -.L800B2E60: -/* 0B3A60 800B2E60 10000041 */ b .L800B2F68 -/* 0B3A64 800B2E64 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80 -.L800B2E68: -/* 0B3A68 800B2E68 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80 -/* 0B3A6C 800B2E6C 8CA90000 */ lw $t1, ($a1) -/* 0B3A70 800B2E70 84CD003A */ lh $t5, 0x3a($a2) -/* 0B3A74 800B2E74 00C02025 */ move $a0, $a2 -/* 0B3A78 800B2E78 01A97023 */ subu $t6, $t5, $t1 -/* 0B3A7C 800B2E7C A4CE003A */ sh $t6, 0x3a($a2) -/* 0B3A80 800B2E80 84CF003A */ lh $t7, 0x3a($a2) -/* 0B3A84 800B2E84 00000000 */ nop -/* 0B3A88 800B2E88 1DE00009 */ bgtz $t7, .L800B2EB0 -/* 0B3A8C 800B2E8C 00000000 */ nop -/* 0B3A90 800B2E90 AFA30038 */ sw $v1, 0x38($sp) -/* 0B3A94 800B2E94 0C003FEE */ jal free_object -/* 0B3A98 800B2E98 AFA60050 */ sw $a2, 0x50($sp) -/* 0B3A9C 800B2E9C 8FA30038 */ lw $v1, 0x38($sp) -/* 0B3AA0 800B2EA0 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012 -/* 0B3AA4 800B2EA4 8FA60050 */ lw $a2, 0x50($sp) -/* 0B3AA8 800B2EA8 1000002F */ b .L800B2F68 -/* 0B3AAC 800B2EAC 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80 -.L800B2EB0: -/* 0B3AB0 800B2EB0 84C20060 */ lh $v0, 0x60($a2) -/* 0B3AB4 800B2EB4 00000000 */ nop -/* 0B3AB8 800B2EB8 1440001C */ bnez $v0, .L800B2F2C -/* 0B3ABC 800B2EBC 00000000 */ nop -/* 0B3AC0 800B2EC0 8CB90000 */ lw $t9, ($a1) -/* 0B3AC4 800B2EC4 84D8005E */ lh $t8, 0x5e($a2) -/* 0B3AC8 800B2EC8 84CA005C */ lh $t2, 0x5c($a2) -/* 0B3ACC 800B2ECC 03380019 */ multu $t9, $t8 -/* 0B3AD0 800B2ED0 00004012 */ mflo $t0 -/* 0B3AD4 800B2ED4 01486021 */ addu $t4, $t2, $t0 -/* 0B3AD8 800B2ED8 A4CC005C */ sh $t4, 0x5c($a2) -/* 0B3ADC 800B2EDC 84CB005C */ lh $t3, 0x5c($a2) -/* 0B3AE0 800B2EE0 00000000 */ nop -/* 0B3AE4 800B2EE4 296100FF */ slti $at, $t3, 0xff -/* 0B3AE8 800B2EE8 1020001F */ beqz $at, .L800B2F68 -/* 0B3AEC 800B2EEC 00000000 */ nop -/* 0B3AF0 800B2EF0 8CCD0040 */ lw $t5, 0x40($a2) -/* 0B3AF4 800B2EF4 00000000 */ nop -/* 0B3AF8 800B2EF8 31A91000 */ andi $t1, $t5, 0x1000 -/* 0B3AFC 800B2EFC 11200006 */ beqz $t1, .L800B2F18 -/* 0B3B00 800B2F00 00000000 */ nop -/* 0B3B04 800B2F04 84CE0006 */ lh $t6, 6($a2) -/* 0B3B08 800B2F08 00000000 */ nop -/* 0B3B0C 800B2F0C 35CF0100 */ ori $t7, $t6, 0x100 -/* 0B3B10 800B2F10 10000015 */ b .L800B2F68 -/* 0B3B14 800B2F14 A4CF0006 */ sh $t7, 6($a2) -.L800B2F18: -/* 0B3B18 800B2F18 84D90006 */ lh $t9, 6($a2) -/* 0B3B1C 800B2F1C 00000000 */ nop -/* 0B3B20 800B2F20 37380080 */ ori $t8, $t9, 0x80 -/* 0B3B24 800B2F24 10000010 */ b .L800B2F68 -/* 0B3B28 800B2F28 A4D80006 */ sh $t8, 6($a2) -.L800B2F2C: -/* 0B3B2C 800B2F2C 8CAA0000 */ lw $t2, ($a1) -/* 0B3B30 800B2F30 00000000 */ nop -/* 0B3B34 800B2F34 004A4023 */ subu $t0, $v0, $t2 -/* 0B3B38 800B2F38 A4C80060 */ sh $t0, 0x60($a2) -/* 0B3B3C 800B2F3C 84C20060 */ lh $v0, 0x60($a2) -/* 0B3B40 800B2F40 00000000 */ nop -/* 0B3B44 800B2F44 04410008 */ bgez $v0, .L800B2F68 -/* 0B3B48 800B2F48 00000000 */ nop -/* 0B3B4C 800B2F4C 84CB005E */ lh $t3, 0x5e($a2) -/* 0B3B50 800B2F50 84CC005C */ lh $t4, 0x5c($a2) -/* 0B3B54 800B2F54 004B0019 */ multu $v0, $t3 -/* 0B3B58 800B2F58 A4C00060 */ sh $zero, 0x60($a2) -/* 0B3B5C 800B2F5C 00006812 */ mflo $t5 -/* 0B3B60 800B2F60 018D4823 */ subu $t1, $t4, $t5 -/* 0B3B64 800B2F64 A4C9005C */ sh $t1, 0x5c($a2) -.L800B2F68: -/* 0B3B68 800B2F68 10600011 */ beqz $v1, .L800B2FB0 -/* 0B3B6C 800B2F6C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0B3B70 800B2F70 8C6E0000 */ lw $t6, ($v1) -/* 0B3B74 800B2F74 00000000 */ nop -/* 0B3B78 800B2F78 11C0000D */ beqz $t6, .L800B2FB0 -/* 0B3B7C 800B2F7C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0B3B80 800B2F80 8CCF0040 */ lw $t7, 0x40($a2) -/* 0B3B84 800B2F84 00000000 */ nop -/* 0B3B88 800B2F88 31F90003 */ andi $t9, $t7, 3 -/* 0B3B8C 800B2F8C 13200008 */ beqz $t9, .L800B2FB0 -/* 0B3B90 800B2F90 8FBF0014 */ lw $ra, 0x14($sp) -/* 0B3B94 800B2F94 8CB80000 */ lw $t8, ($a1) -/* 0B3B98 800B2F98 00000000 */ nop -/* 0B3B9C 800B2F9C 1B000004 */ blez $t8, .L800B2FB0 -/* 0B3BA0 800B2FA0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0B3BA4 800B2FA4 0C02CBEF */ jal set_particle_texture_frame -/* 0B3BA8 800B2FA8 00C02025 */ move $a0, $a2 -/* 0B3BAC 800B2FAC 8FBF0014 */ lw $ra, 0x14($sp) -.L800B2FB0: -/* 0B3BB0 800B2FB0 27BD0050 */ addiu $sp, $sp, 0x50 -/* 0B3BB4 800B2FB4 03E00008 */ jr $ra -/* 0B3BB8 800B2FB8 00000000 */ nop - diff --git a/include/structs.h b/include/structs.h index 2410ac14..cc679440 100644 --- a/include/structs.h +++ b/include/structs.h @@ -547,6 +547,9 @@ typedef struct TexCoords { }; } TexCoords; +#define BACKFACE_CULL 0x00 +#define BACKFACE_DRAW 0x40 + /* Size: 0x10 bytes */ typedef struct Triangle { union { @@ -1716,7 +1719,8 @@ typedef struct Object_6C { /* 0x00 */ struct Particle *unk0; /* 0x04 */ s16 unk4; /* 0x06 */ u8 unk6; - /* 0x07 */ u8 pad7[0x3]; + /* 0x07 */ u8 unk7; + /* 0x08 */ s16 unk8; /* 0x0A */ s16 unkA; /* 0x0C */ u8 padC[0x14]; } Object_6C; diff --git a/src/particles.c b/src/particles.c index 2534a9b1..025e3e60 100644 --- a/src/particles.c +++ b/src/particles.c @@ -66,13 +66,12 @@ s32 *gParticleBehavioursAssets = NULL; ParticleBehavior **gParticleBehavioursAssetTable = NULL; ColourRGBA D_800E2D00[2] = { { { { 0 } } }, { { { 0 } } } }; -// Are these just Triangles? -unk800E2D08 D_800E2D08[5] = { - { 0x4000, 0x0102, 0x0100, 0x0000, 0x0000, 0x01E0, 0x0100, 0x01E0 }, - { 0x4000, 0x0203, 0x0100, 0x0000, 0x0100, 0x01E0, 0x01E0, 0x01E0 }, - { 0x4001, 0x0204, 0x0000, 0x0000, 0x0100, 0x0000, 0x0000, 0x01E0 }, - { 0x4002, 0x0305, 0x0100, 0x0000, 0x01E0, 0x0000, 0x01E0, 0x01E0 }, - { 0x4000, 0x0103, 0x0100, 0x0000, 0x0000, 0x01E0, 0x01E0, 0x01E0 }, +Triangle D_800E2D08[5] = { + { { { BACKFACE_DRAW, 0, 1, 2 } }, { { { 256, 0 } } }, { { { 0, 480 } } }, { { { 256, 480 } } } }, + { { { BACKFACE_DRAW, 0, 2, 3 } }, { { { 256, 0 } } }, { { { 256, 480 } } }, { { { 480, 480 } } } }, + { { { BACKFACE_DRAW, 1, 2, 4 } }, { { { 0, 0 } } }, { { { 256, 0 } } }, { { { 0, 480 } } } }, + { { { BACKFACE_DRAW, 2, 3, 5 } }, { { { 256, 0 } } }, { { { 480, 0 } } }, { { { 480, 480 } } } }, + { { { BACKFACE_DRAW, 0, 1, 3 } }, { { { 256, 0 } } }, { { { 0, 480 } } }, { { { 480, 480 } } } } }; Vec3s D_800E2D58[5] = { @@ -80,16 +79,15 @@ Vec3s D_800E2D58[5] = { { { { 0x0000, 0x0000, 0x01FF } } }, { { { 0x0000, 0x01FF, 0x01FF } } }, }; -// Are these just Triangles? -unk800E2D08 D_800E2D78[8] = { - { 0x0000, 0x0105, 0x0000, 0x0000, 0x0080, 0x0000, 0x0080, 0x01FF }, - { 0x0000, 0x0504, 0x0000, 0x0000, 0x0080, 0x01FF, 0x0000, 0x01FF }, - { 0x0001, 0x0206, 0x0080, 0x0000, 0x0100, 0x0000, 0x0100, 0x01FF }, - { 0x0001, 0x0605, 0x0080, 0x0000, 0x0100, 0x01FF, 0x0080, 0x01FF }, - { 0x0002, 0x0307, 0x0100, 0x0000, 0x0180, 0x0000, 0x0180, 0x01FF }, - { 0x0002, 0x0706, 0x0100, 0x0000, 0x0180, 0x01FF, 0x0100, 0x01FF }, - { 0x0003, 0x0004, 0x0180, 0x0000, 0x0200, 0x0000, 0x0200, 0x01FF }, - { 0x0003, 0x0407, 0x0180, 0x0000, 0x0200, 0x01FF, 0x0180, 0x01FF }, +Triangle D_800E2D78[8] = { + { { { BACKFACE_CULL, 0, 1, 5 } }, { { { 0, 0 } } }, { { { 128, 0 } } }, { { { 128, 511 } } } }, + { { { BACKFACE_CULL, 0, 5, 4 } }, { { { 0, 0 } } }, { { { 128, 511 } } }, { { { 0, 511 } } } }, + { { { BACKFACE_CULL, 1, 2, 6 } }, { { { 128, 0 } } }, { { { 256, 0 } } }, { { { 256, 511 } } } }, + { { { BACKFACE_CULL, 1, 6, 5 } }, { { { 128, 0 } } }, { { { 256, 511 } } }, { { { 128, 511 } } } }, + { { { BACKFACE_CULL, 2, 3, 7 } }, { { { 256, 0 } } }, { { { 384, 0 } } }, { { { 384, 511 } } } }, + { { { BACKFACE_CULL, 2, 7, 6 } }, { { { 256, 0 } } }, { { { 384, 511 } } }, { { { 256, 511 } } } }, + { { { BACKFACE_CULL, 3, 0, 4 } }, { { { 384, 0 } } }, { { { 512, 0 } } }, { { { 512, 511 } } } }, + { { { BACKFACE_CULL, 3, 4, 7 } }, { { { 384, 0 } } }, { { { 512, 511 } } }, { { { 384, 511 } } } }, }; Vec3s D_800E2DF8[8] = { @@ -123,14 +121,18 @@ XYStruct gParticleCoordListQuad[4] = { { -6, -6 }, }; -s32 D_800E2E84[16] = { - 0x00000000, 0xC00840FF, 0xFF6008FF, 0x404040FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1070FFFF, 0x00000000, 0x00000000, +ColourRGBA D_800E2E84[16] = { + { { { 0, 0, 0, 0 } } }, { { { 192, 8, 64, 255 } } }, { { { 255, 96, 8, 255 } } }, { { { 64, 64, 64, 255 } } }, + { { { 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0 } } }, + { { { 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0 } } }, + { { { 0, 0, 0, 0 } } }, { { { 16, 112, 255, 255 } } }, { { { 0, 0, 0, 0 } } }, { { { 0, 0, 0, 0 } } }, }; -s32 D_800E2EC4[10] = { - 0x404040FF, 0x404040FF, 0x002D00FF, 0x002D00FF, 0x403C0AFF, - 0x403C0AFF, 0x4040FFFF, 0x4040FFFF, 0x404040FF, 0x404040FF, +ColourRGBA D_800E2EC4[10] = { + { { { 64, 64, 64, 255 } } }, { { { 64, 64, 64, 255 } } }, { { { 0, 45, 0, 255 } } }, + { { { 0, 45, 0, 255 } } }, { { { 64, 60, 10, 255 } } }, { { { 64, 60, 10, 255 } } }, + { { { 64, 64, 255, 255 } } }, { { { 64, 64, 255, 255 } } }, { { { 64, 64, 64, 255 } } }, + { { { 64, 64, 64, 255 } } }, }; s32 gParticleOpacity = 256; @@ -141,7 +143,7 @@ s32 gParticleOpacity = 256; s32 gParticleUpdateRate; s32 D_80127C84; -s32 D_80127C88[6]; +s16 D_80127C88[12]; // printf.c // thread0_epc /******************************/ @@ -486,24 +488,30 @@ void func_800AF29C(Particle *arg0, s32 behaviourID, s32 propertyID, s16 velX, s1 } #ifdef NON_EQUIVALENT - -// Should be functionally equivalent. -void func_800AF404(s32 arg0) { +void func_800AF404(s32 updateRate) { + u32 new_var; s32 i; + s16 temp; + Vec3s *vecTemp; - D_800E2E28 = (D_800E2E28 + (arg0 * 64)) & 0x1FF; - for (i = 0; i < 5; i++) { - D_800E2D08[i].unk6 = D_800E2D58[i].y_rotation + D_800E2E28; - D_800E2D08[i].unkA = D_800E2D58[i].x_rotation + D_800E2E28; - D_800E2D08[i].unkE = D_800E2D58[i].z_rotation + D_800E2E28; + D_800E2E28 = (D_800E2E28 + (updateRate << 6)) & 0x1FF; + temp = D_800E2E28; + new_var = temp; + // clang-format off + for (i = 0; i < ARRAY_COUNT(D_800E2D08); i++) {\ + vecTemp = &D_800E2D58[i];\ + D_800E2D08[i].uv2.v = vecTemp->s[0] + new_var;\ + D_800E2D08[i].uv1.v = vecTemp->s[1] + new_var;\ + D_800E2D08[i].uv0.v = vecTemp->s[2] + new_var;\ } - for (i = 0; i < 8; i++) { - D_800E2D78[i].unk6 = D_800E2DF8[i].y_rotation + D_800E2E28; - D_800E2D78[i].unkA = D_800E2DF8[i].x_rotation + D_800E2E28; - D_800E2D78[i].unkE = D_800E2DF8[i].z_rotation + D_800E2E28; + // clang-format on + for (i = 0; i < ARRAY_COUNT(D_800E2D78); i++) { + vecTemp = &D_800E2DF8[i]; + D_800E2D78[i].uv0.v = vecTemp->s[0] + new_var; + D_800E2D78[i].uv1.v = vecTemp->s[1] + new_var; + D_800E2D78[i].uv2.v = vecTemp->s[2] + new_var; } } - #else GLOBAL_ASM("asm/non_matchings/particles/func_800AF404.s") #endif @@ -566,7 +574,151 @@ void func_800AF6E4(Object *obj, s32 arg1) { obj->segment.unk1A--; } -GLOBAL_ASM("asm/non_matchings/particles/func_800AF714.s") +void func_800AF714(Object *racerObj, s32 updateRate) { + Object_Racer *racer; + ParticleProperties *temp_a3; + s32 var_v0; + s32 temp_v1; + s32 i; + Object_6C *new_var; + Object_6C *new_var2; + s32 var_t1; + s32 someBool; + s8 vehicleId; + u32 var_s7; + u8 *alphaPtr; + + racer = &racerObj->unk64->racer; + var_s7 = racerObj->unk74; + vehicleId = racer->vehicleID; + i = 0; + object_do_player_tumble(racerObj); + for (; i < racerObj->segment.header->unk57; i++) { + if (var_s7 & 1) { + someBool = TRUE; + switch (vehicleId) { + case VEHICLE_CAR: + if (i >= 0 && i < 10) { + var_v0 = racer->unk16E; + if (var_v0 < 0) { + var_v0 = -var_v0; + } + var_v0 -= 24; + if (var_v0 > 0) { + temp_a3 = gParticlesAssetTable[racerObj->unk6C[i].unk8]; + alphaPtr = &D_800E2EC4[i].a; + var_t1 = 4; + if (var_v0 > 32) { + var_v0 = 32; + } + var_t1 = var_v0 << var_t1; + temp_v1 = var_t1 - ((var_v0 * var_v0) >> 2); + D_800E2D00[0].word = + ((((D_800E2EC4[i].r - temp_a3->colour.r) * temp_v1) >> 8) + temp_a3->colour.r) << 24; + D_800E2D00[0].word |= + (temp_a3->colour.g + ((((D_800E2EC4[i].g - temp_a3->colour.g) * temp_v1)) >> 8)) << 16; + D_800E2D00[0].word |= + (temp_a3->colour.b + ((((D_800E2EC4[i].b - temp_a3->colour.b) * temp_v1)) >> 8)) << 8; + if (var_v0 > 16) { + var_t1 = 256; + } + var_v0 = temp_a3->colour.a; + D_800E2D00[0].word |= var_v0 + (((*alphaPtr - var_v0) * var_t1) >> 8); + } + } else { + switch (i) { + case 10: + if (racer->wheel_surfaces[2] == 0xFF) { + someBool = FALSE; + } + D_800E2D00[0].word = D_800E2E84[racer->wheel_surfaces[2] & 0xF].word; + break; + + case 11: + if (racer->wheel_surfaces[3] == 0xFF) { + someBool = FALSE; + } + D_800E2D00[0].word = D_800E2E84[racer->wheel_surfaces[3] & 0xF].word; + break; + + case 12: + if (racer->wheel_surfaces[0] == 0xFF) { + someBool = FALSE; + } + D_800E2D00[0].word = D_800E2E84[racer->wheel_surfaces[0] & 0xF].word; + break; + + case 13: + if (racer->wheel_surfaces[1] == 0xFF) { + someBool = FALSE; + } + D_800E2D00[0].word = D_800E2E84[racer->wheel_surfaces[1] & 0xF].word; + break; + } + } + break; + case VEHICLE_PLANE: + if (i == 0) { + D_800E2D00[0].word = D_800E2E84[racer->wheel_surfaces[0] & 0xF].word; + } else if (i == 1) { + D_800E2D00[0].word = D_800E2E84[racer->wheel_surfaces[1] & 0xF].word; + } + break; + case VEHICLE_HOVERCRAFT: + if (i == 2 || i == 3) { + var_v0 = D_80127C88[racer->unk2 & 7]; + var_v0 += (updateRate * 4); + if (var_v0 > 256) { + var_v0 = 256; + } + D_80127C88[racer->unk2 & 7] = var_v0; + gParticleOpacity = var_v0; + } + break; + } + + if (someBool) { + if (!(racerObj->unk6C[i].unk4 & 0x8000)) { + func_800AF52C(racerObj, i); + } + if (racerObj->unk6C[i].unk4 & 0x4000) { + func_800AFE5C((Particle *) racerObj, (Particle *) &racerObj->unk6C[i]); + } else if (racerObj->unk6C[i].unk4 & 0x400) { + func_800AFE5C((Particle *) racerObj, (Particle *) &racerObj->unk6C[i]); + } else { + racerObj->unk6C[i].unkA += updateRate; + if (racerObj->unk6C[i].unkA >= racerObj->unk6C[i].unk0->segment.unk40_s16) { + func_800AFE5C((Particle *) racerObj, (Particle *) &racerObj->unk6C[i]); + } + } + } + } else if (racerObj->unk6C[i].unk4 & 0x8000) { + if (racerObj->unk6C[i].unk4 & 0x4000) { + new_var2 = &racerObj->unk6C[i]; + new_var2->unk6 = 0; + func_800AF6E4(racerObj, i); + } else { + if (racerObj->unk6C[i].unk4 & 0x400) { + new_var = &racerObj->unk6C[i]; + racerObj->unk6C[i].unk4 |= 0x200; + if (new_var->unk6 == 0) { + func_800AF6E4(racerObj, i); + } + } else { + func_800AF6E4(racerObj, i); + } + } + if (i == 2 || i == 3) { + D_80127C88[racer->unk2 & 7] = 0; + } + } + D_800E2D00[0].word = 0; + var_s7 >>= 1; + gParticleOpacity = 256; + } + + object_undo_player_tumble(racerObj); +} void func_800AFC3C(Object *obj, s32 updateRate) { Object_6C *temp_s1; @@ -637,7 +789,7 @@ void func_800AFE5C(Particle *arg0, Particle *arg1) { temp_s4 = arg1->data.behaviour; if (arg1->data.flags & 0x4000) { - tempObj = func_800B0BAC(); + tempObj = func_800B0BAC((Object *) arg0, arg1); if (tempObj != NULL) { func_8000E9D0((Object *) tempObj); } @@ -914,7 +1066,118 @@ Particle *func_800B0698(Particle *arg0, Particle *arg1) { return var_v0; } -GLOBAL_ASM("asm/non_matchings/particles/func_800B0BAC.s") +Particle *func_800B0BAC(Object *arg0, Particle *arg1) { + ParticleProperties *sp34; + Particle *sp30; + ParticleModel *sp2C; + ParticleBehavior *sp28; + unkParticleBehaviorUnk9C *sp24; + + sp34 = gParticlesAssetTable[arg1->data.propertyID]; + if (sp34->unk0 != 3) { + return NULL; + } + sp28 = arg1->data.behaviour; + sp24 = (unkParticleBehaviorUnk9C *) sp28->unk9C; + sp30 = func_800B1CB8(3); + if (sp30 == NULL) { + return NULL; + } + sp30->segment.object.segmentID = arg0->segment.object.segmentID; + sp30->segment.trans.flags = -0x8000; + sp30->segment.object.opacity = sp34->movementType; + sp30->segment.unk40 = sp34->unk2; + sp30->segment.unk3C = (ParticleSegment_3C *) arg0; + sp30->unk58_ptr = (Particle_58 **) arg1; + sp30->segment.trans.scale = sp34->scale * sp28->unk50; + sp30->segment.scaleVel = sp34->scale * sp28->unk54; + sp30->segment.particle.destroyTimer = sp34->lifeTime; + sp30->segment.particle.unk34 = 0.0f; + sp30->segment.object.unk38 = 0; + if (D_800E2D00->word != 0) { + sp30->colour.word = D_800E2D00->word; + } else { + sp30->colour.r = sp34->colour.r; + sp30->colour.g = sp34->colour.g; + sp30->colour.b = sp34->colour.b; + } + sp30->colour.a = sp34->colour.a; + if (sp30->segment.unk40 & 0x800 && arg0->shading != NULL) { + sp30->brightness = arg0->shading->unk0 * 255.0f; + } else { + sp30->brightness = 0xFF; + } + sp30->opacityTimer = sp34->opacityTimer; + sp30->opacity = sp34->opacity << 8; + if (sp34->opacity < 0xFF) { + if (sp30->segment.unk40 & 0x1000) { + sp30->segment.trans.flags |= OBJ_FLAGS_UNK_0100; + } else { + sp30->segment.trans.flags |= OBJ_FLAGS_UNK_0080; + } + } + if (sp30->opacityTimer < sp30->segment.particle.destroyTimer) { + sp30->opacityVel = + (((sp34->opacityVel - sp34->opacity) << 8) / (sp30->segment.particle.destroyTimer - sp30->opacityTimer)); + } else { + sp30->opacityVel = 0; + } + arg1->segment.trans.x_position = arg1->segment.textureFrame; + arg1->segment.trans.y_position = arg1->segment.unk1A; + arg1->segment.trans.z_position = arg1->data.baseVelZ; + f32_vec3_apply_object_rotation(&arg0->segment.trans, &arg1->segment.trans.x_position); + arg1->segment.trans.x_position += arg0->segment.trans.x_position; + arg1->segment.trans.y_position += arg0->segment.trans.y_position; + arg1->segment.trans.z_position += arg0->segment.trans.z_position; + sp30->unk68b = 0; + sp30->unk6Ab = 0; + sp30->unk6Bb = -1; + sp30->segment.unk1A = sp34->unk6; + sp30->segment.textureFrame = 0; + sp2C = sp30->modelData; + if (sp34->textureID == -1) { + sp2C->texture = NULL; + } else { + sp2C->texture = load_texture(sp34->textureID); + if (sp2C->texture != NULL) { + if (sp2C->texture->flags & 4) { + if (sp30->segment.unk40 & 0x1000) { + sp30->segment.trans.flags |= OBJ_FLAGS_UNK_0100; + } else { + sp30->segment.trans.flags |= OBJ_FLAGS_UNK_0080; + } + } + if ((sp30->segment.unk40 & 3) == 2) { + sp30->segment.textureFrame = sp2C->texture->numOfTextures - 1; + } + } + } + sp2C->vertices->x = arg1->segment.trans.x_position; + sp2C->vertices->y = arg1->segment.trans.y_position; + sp2C->vertices->z = arg1->segment.trans.z_position; + if ((s32) sp24 != -1U) { + arg1->data.unk1E += 1; + if (arg1->data.unk1E >= sp24[0].unk0) { + arg1->data.unk1E = 0; + } + sp2C->vertices->r = sp24[arg1->data.unk1E + 2].r; + sp2C->vertices->g = sp24[arg1->data.unk1E + 2].g; + sp2C->vertices->b = sp24[arg1->data.unk1E + 2].b; + sp2C->vertices->a = arg1->data.unk6; + } else { + sp2C->vertices->r = sp30->colour.r; + sp2C->vertices->g = sp30->colour.g; + sp2C->vertices->b = sp30->colour.b; + sp2C->vertices->a = arg1->data.unk6; + } + sp30->unk6Ab = ((u32) sp34->lifeTimeRangeUnsigned >> 10); + sp30->unk6Bb = ((u32) (sp34->lifeTimeWord << 22) >> 26); + sp30->segment.trans.x_position = arg0->segment.trans.x_position; + sp30->segment.trans.y_position = arg0->segment.trans.y_position; + sp30->segment.trans.z_position = arg0->segment.trans.z_position; + arg1->data.opacity = 0; + return sp30; +} Particle *func_800B1130(Particle *arg0, Particle *arg1) { s32 flags; @@ -1332,7 +1595,7 @@ void handle_particle_movement(Particle *particle, s32 updateRate) { gParticleUpdateRate = updateRate; tempParticle = NULL; if (particle->segment.particle.unk2C == 3) { - func_800B26E0(); + func_800B26E0(particle); } else { if (particle->segment.unk40 & 3) { if (gParticleUpdateRate > 0) { @@ -1420,7 +1683,146 @@ void func_800B263C(Particle *arg0) { } } -GLOBAL_ASM("asm/non_matchings/particles/func_800B26E0.s") +void func_800B26E0(Particle *particle) { + Vec3f sp44; + f32 tempf; + f32 scale; + ParticleModel *particleModel; + ParticleSegment_3C *sp34; + Particle_58 *sp30; + Particle_58_0_9C *sp2C; + Particle_58_0_9C **sp2C_ptr; + + sp34 = particle->segment.unk3C; + particleModel = 0; + sp2C_ptr = &sp2C; + if (sp34 != NULL) { + sp30 = (Particle_58 *) particle->unk58_ptr; + sp2C = sp30->unk0->unk9C; + particleModel = particle->modelData; + } + if (particle->unk68b < 2 && sp34 != NULL) { + if (sp30->unk0->unk0 & 0x1000) { + scale = sqrtf((sp34->unk1C * sp34->unk1C) + (sp34->unk20 * sp34->unk20) + (sp34->unk24 * sp34->unk24)); + scale = scale * particle->segment.trans.scale * 0.1f; + } else { + scale = particle->segment.trans.scale; + } + if (!(particle->segment.unk40 & 0x4000)) { + sp44.x = 0.0f; + sp44.y = 0.0f; + sp44.z = 0.0f; + switch (particle->unk6Ab) { + default: + sp44.x = scale; + break; + case 2: + sp44.z = scale; + break; + case 1: + sp44.y = scale; + break; + } + f32_vec3_apply_object_rotation((ObjectTransform *) sp34, &sp44.x); + } else { + sp44.x = sp34->unk1C; + sp44.y = sp34->unk20; + sp44.z = sp34->unk24; + tempf = ((sp44.x * sp44.x) + (sp44.y * sp44.y)) + (sp44.z * sp44.f[2]); + if (tempf < 0.01f) { + tempf = 1.0f; + } else { + tempf = scale / sqrtf(tempf); + } + sp44.x *= tempf; + sp44.y *= tempf; + sp44.z *= tempf; + switch (particle->unk6Ab) { + case 0: + tempf = sp44.x; + sp44.x = -sp44.z; + sp44.z = tempf; + break; + case 1: + tempf = sp44.y; + sp44.y = -sp44.z; + sp44.z = tempf; + break; + } + } + if (particleModel != NULL && particle->unk68b == 0) { + particleModel->vertices[1].x = sp44.f[0] + sp30->unkC; + particleModel->vertices[1].y = sp44.f[1] + sp30->unk10; + particleModel->vertices[1].z = sp44.f[2] + sp30->unk14; + particleModel->vertices[1].r = particleModel->vertices->r; + particleModel->vertices[1].g = particleModel->vertices->g; + particleModel->vertices[1].b = particleModel->vertices->b; + particleModel->vertices[1].a = sp30->unk6; + particleModel->vertices[2].x = sp30->unkC; + particleModel->vertices[2].y = sp30->unk10; + particleModel->vertices[2].z = sp30->unk14; + if ((s32) *sp2C_ptr != -1) { + particleModel->vertices[2].r = (*sp2C_ptr)[sp30->unk1E + 2].unk4; + particleModel->vertices[2].g = (*sp2C_ptr)[sp30->unk1E + 2].unk5; + particleModel->vertices[2].b = (*sp2C_ptr)[sp30->unk1E + 2].unk6; + particleModel->vertices[2].a = sp30->unk6; + } else { + particleModel->vertices[2].r = particle->colour.r; + particleModel->vertices[2].g = particle->colour.g; + particleModel->vertices[2].b = particle->colour.b; + particleModel->vertices[2].a = sp30->unk6; + } + particleModel->vertices[3].x = sp30->unkC - sp44.f[0]; + particleModel->vertices[3].y = sp30->unk10 - sp44.f[1]; + particleModel->vertices[3].z = sp30->unk14 - sp44.f[2]; + particleModel->vertices[3].r = particleModel->vertices->r; + particleModel->vertices[3].g = particleModel->vertices->g; + particleModel->vertices[3].b = particleModel->vertices->b; + particleModel->vertices[3].a = sp30->unk6; + particle->unk68b = 1; + } else if (particleModel != NULL) { + particleModel->vertices[4].x = sp44.f[0] + sp30->unkC; + particleModel->vertices[4].y = sp44.f[1] + sp30->unk10; + particleModel->vertices[4].z = sp44.f[2] + sp30->unk14; + particleModel->vertices[4].r = particleModel->vertices[2].r; + particleModel->vertices[4].g = particleModel->vertices[2].g; + particleModel->vertices[4].b = particleModel->vertices[2].b; + particleModel->vertices[4].a = sp30->unk6; + particleModel->vertices[5].x = sp30->unkC - sp44.f[0]; + particleModel->vertices[5].y = sp30->unk10 - sp44.f[1]; + particleModel->vertices[5].z = sp30->unk14 - sp44.f[2]; + particleModel->vertices[5].r = particleModel->vertices[2].r; + particleModel->vertices[5].g = particleModel->vertices[2].g; + particleModel->vertices[5].b = particleModel->vertices[2].b; + particleModel->vertices[5].a = sp30->unk6; + particle->unk68b = 2; + } + } else { + particle->segment.particle.destroyTimer -= gParticleUpdateRate; + if (particle->segment.particle.destroyTimer <= 0) { + free_object((Object *) particle); + } else if (particle->opacityTimer == 0) { + particle->opacity += gParticleUpdateRate * particle->opacityVel; + if (particle->opacity < 0xFF) { + if (particle->segment.unk40 & 0x1000) { + particle->segment.trans.flags |= OBJ_FLAGS_UNK_0100; + } else { + particle->segment.trans.flags |= OBJ_FLAGS_UNK_0080; + } + } + } else { + particle->opacityTimer -= gParticleUpdateRate; + if (particle->opacityTimer < 0) { + particle->opacity -= particle->opacityTimer * particle->opacityVel; + particle->opacityTimer = 0; + } + } + } + if (particleModel != NULL && particleModel->texture != NULL && particle->segment.unk40 & 3 && + gParticleUpdateRate > 0) { + set_particle_texture_frame(particle); + } +} void set_particle_texture_frame(Particle *particle) { s32 someFlag; diff --git a/src/particles.h b/src/particles.h index bc4220b6..c84ee99a 100644 --- a/src/particles.h +++ b/src/particles.h @@ -56,8 +56,16 @@ typedef struct ParticleProperties { /* 0x02 */ u16 unk2; /* 0x04 */ s16 textureID; /* 0x06 */ s16 unk6; - /* 0x08 */ s16 lifeTime; - /* 0x0A */ s16 lifeTimeRange; + union { + struct { + /* 0x08 */ s16 lifeTime; + union { + /* 0x0A */ s16 lifeTimeRange; + /* 0x0A */ u16 lifeTimeRangeUnsigned; + }; + }; + /* 0x08 */ s32 lifeTimeWord; + }; /* 0x0C */ u8 opacity; /* 0x0D */ u8 opacityVel; /* 0x0E */ s16 opacityTimer; @@ -87,6 +95,49 @@ typedef struct unk800B1130_SP28 { u8 a; } unk800B1130_SP28; + +// Size: 8 bytes +typedef struct Particle_58_0_9C { + u8 pad0[4]; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +} Particle_58_0_9C; + +typedef struct Particle_58_0 { + s32 unk0; + u8 pad4[0x2]; + u8 unk6; + u8 pad7[0x5]; + f32 unkC; + f32 unk10; + f32 unk14; + u8 pad18[0x6]; + s16 unk1E; + u8 pad20[0x7C]; + Particle_58_0_9C *unk9C; +} Particle_58_0; + +typedef struct Particle_58 { + Particle_58_0 *unk0; + u8 pad4[0x2]; + u8 unk6; + u8 pad7[0x5]; + f32 unkC; + f32 unk10; + f32 unk14; + u8 pad18[0x6]; + s16 unk1E; +} Particle_58; + +typedef struct ParticleSegment_3C { + u8 pad0[0x1C]; + f32 unk1C; + f32 unk20; + f32 unk24; +} ParticleSegment_3C; + typedef struct ParticleAngle { s16 y_rotation; s16 x_rotation; @@ -179,7 +230,10 @@ typedef struct Particle { /* 0x0054 */ f32 baseVelZ; /* 0x0054 */ f32 *unk54_ptr; }; + union { + /* 0x0058 */ Particle_58 **unk58_ptr; /* 0x0058 */ f32 forwardVel; + }; /* 0x005C */ s16 opacity; /* 0x005E */ s16 opacityVel; /* 0x0060 */ s16 opacityTimer; @@ -187,8 +241,13 @@ typedef struct Particle { /* 0x0064 */ s16 angleVelX; /* 0x0066 */ s16 angleVelZ; union { - /* 0x0068 */ u8 unk68b; /* 0x0068 */ f32 gravity; + struct { + /* 0x0068 */ u8 unk68b; + /* 0x0069 */ u8 unk69b; + /* 0x006A */ s8 unk6Ab; + /* 0x006B */ s8 unk6Bb; + }; }; /* 0x006C */ ColourRGBA colour; /* 0x0070 */ struct Particle *unk70; @@ -198,6 +257,15 @@ typedef struct Particle { /* 0x0077 */ s8 unk77; } Particle; +// Size: 8 bytes +typedef struct unkParticleBehaviorUnk9C { + s32 unk0; + u8 r; + u8 g; + u8 b; + u8 pad7; // Probably alpha +} unkParticleBehaviorUnk9C; + // Almost an identical copy of Particle, but a few bytes shorter. Exists to make sure func_800B1CB8 matches. typedef struct ParticleType { u8 pad[0x2C]; @@ -239,12 +307,12 @@ void func_800B4668(Object *obj, s32 idx, s32 arg2, s32 arg3); void func_800B46BC(Object *obj, s32 idx, s32 arg2, s32 arg3); void func_800AFC3C(Object *obj, s32 updateRate); void func_800B3E64(Object *obj); +void func_800B26E0(Particle *particle); +void func_800AF714(Object *racerObj, s32 updateRate); +Particle* func_800B0BAC(Object* arg0, Particle* arg1); -void func_800AF404(s32 arg0); // Non Matching +void func_800AF404(s32 updateRate); // 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 -Particle *func_800B0BAC(); -void func_800B26E0(); void move_particle_basic_parent(Particle *); void move_particle_velocity_parent(Particle *); void move_particle_with_velocities(Particle *); diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index fefcf197..cbdb768e 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -18,4 +18,4 @@ compiler_type = "ido" "NULL" = "unsigned int" [decompme.compilers] -"./tools/ido-static-recomp/build/5.3/out/cc" = "ido5.3_irix" +"tools/ido-static-recomp/build/5.3/out/cc" = "ido5.3_irix"