From 6d1d172eb520460d772b8bcd1117423fc608ed53 Mon Sep 17 00:00:00 2001 From: rozlette Date: Sun, 31 Mar 2019 01:04:12 -0500 Subject: Add more filenames --- src/code/code_0x800FEC90.c | 1323 -------------------------------------------- src/code/z_lib.c | 1323 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1323 insertions(+), 1323 deletions(-) delete mode 100644 src/code/code_0x800FEC90.c create mode 100644 src/code/z_lib.c (limited to 'src/code') diff --git a/src/code/code_0x800FEC90.c b/src/code/code_0x800FEC90.c deleted file mode 100644 index a8527c588..000000000 --- a/src/code/code_0x800FEC90.c +++ /dev/null @@ -1,1323 +0,0 @@ -#include -#include - -#pragma intrinsic (sqrtf) -extern float fabsf(float); -#pragma intrinsic (fabsf) - -void* func_800FEC90(void* dst, void* src, size_t n) { - _bcopy(src, dst, n); - - return dst; -} - -#ifdef NONMATCHING - -void* func_800FECC0(u8* a0, u32 a1, u32 a2) { - u8* v0; - - // XXX: realloc is messed up - if (a1 == 0) { - _blkclr((void*)a0, (u32)a2); - - return a0; - } - - for (v0 = a0; a2 != 0; a2--) { - *v0++ = a1; - } - - return a0; -} - -#else - -GLOBAL_ASM( -glabel func_800FECC0 -/* 091264 0x800FECC0 27BDFFE8 */ addiu $sp, $sp, -24 -/* 091265 0x800FECC4 AFBF0014 */ sw $ra, 0X14($sp) -/* 091266 0x800FECC8 AFA40018 */ sw $a0, 0X18($sp) -/* 091267 0x800FECCC 14A00006 */ bnez $a1, .L_800FECE8 -/* 091268 0x800FECD0 8FA20018 */ lw $v0, 0X18($sp) -/* 091269 0x800FECD4 8FA40018 */ lw $a0, 0X18($sp) -/* 091270 0x800FECD8 0C02258C */ jal _blkclr -/* 091271 0x800FECDC 00C02825 */ move $a1, $a2 -/* 091272 0x800FECE0 10000014 */ b .L_800FED34 -/* 091273 0x800FECE4 8FA20018 */ lw $v0, 0X18($sp) -.L_800FECE8: -/* 091274 0x800FECE8 18C00011 */ blez $a2, .L_800FED30 -/* 091275 0x800FECEC 00C01825 */ move $v1, $a2 -/* 091276 0x800FECF0 30C70003 */ andi $a3, $a2, 0X3 -/* 091277 0x800FECF4 00073823 */ negu $a3, $a3 -/* 091278 0x800FECF8 10E00006 */ beqz $a3, .L_800FED14 -/* 091279 0x800FECFC 00E62021 */ addu $a0, $a3, $a2 -.L_800FED00: -/* 091280 0x800FED00 2463FFFF */ addiu $v1, $v1, -1 -/* 091281 0x800FED04 A0450000 */ sb $a1, 0X0($v0) -/* 091282 0x800FED08 1483FFFD */ bne $a0, $v1, .L_800FED00 -/* 091283 0x800FED0C 24420001 */ addiu $v0, $v0, 1 -/* 091284 0x800FED10 10600007 */ beqz $v1, .L_800FED30 -.L_800FED14: -/* 091285 0x800FED14 2463FFFC */ addiu $v1, $v1, -4 -/* 091286 0x800FED18 A0450001 */ sb $a1, 0X1($v0) -/* 091287 0x800FED1C A0450002 */ sb $a1, 0X2($v0) -/* 091288 0x800FED20 A0450003 */ sb $a1, 0X3($v0) -/* 091289 0x800FED24 24420004 */ addiu $v0, $v0, 4 -/* 091290 0x800FED28 1460FFFA */ bnez $v1, .L_800FED14 -/* 091291 0x800FED2C A045FFFC */ sb $a1, -0X4($v0) -.L_800FED30: -/* 091292 0x800FED30 8FA20018 */ lw $v0, 0X18($sp) -.L_800FED34: -/* 091293 0x800FED34 8FBF0014 */ lw $ra, 0X14($sp) -/* 091294 0x800FED38 27BD0018 */ addiu $sp, $sp, 24 -/* 091295 0x800FED3C 03E00008 */ jr $ra -/* 091296 0x800FED40 00000000 */ nop -) - -#endif - -f32 func_800FED44(s16 a0) { - return coss(a0) * D_801DDA80; -} - -f32 func_800FED84(s16 a0) { - return sins(a0) * D_801DDA84; -} - -s32 func_800FEDC4(s32 a0, s32 a1, s32 a2) { - s32 v1; - - if (a1 >= a0) { - v1 = a0 + a2; - if (a1 >= v1) { - return v1; - } - } else { - v1 = a0 - a2; - if (v1 >= a1) { - return v1; - } - } - return a1; -} - -UNK_RET func_800FEE08(u32* a0, u32 a1, u32 a2) { - *a0 = func_800FEDC4(*a0, a1, a2); -} - -UNK_TYPE func_800FEE34(u32* a0, u32 a1, u32 a2) { - func_800FEE08(a0, a1, a2); - - return a1 == *a0; -} - -UNK_TYPE func_800FEE70(s16* a0, s16 a1, s16 a2) { - f32 f0; - - if (a2 != 0) { - f0 = D_801D1508; - - if ((s16)(*a0 - a1) > 0) { - a2 = -a2; - } - - *a0 += (s16)(a2 * f0); - - if (((s16)(*a0 - a1) * a2) >= 0) { - *a0 = a1; - - return 1; - } - } else if (a1 == *a0) { - return 1; - } - - return 0; -} - -UNK_TYPE func_800FEF2C(s16* a0, s16 a1, s16 a2) { - if (a2 != 0) { - if (a1 < *a0) { - a2 = -a2; - } - - *a0 += a2; - - if (((*a0 - a1) * a2) >= 0) { - *a0 = a1; - - return 1; - } - } else if (a1 == *a0) { - return 1; - } - - return 0; -} - -UNK_TYPE func_800FEFB4(s8* a0, s8 a1, s8 a2) { - if (a2 != 0) { - if (a1 < *a0) { - a2 = -a2; - } - - *a0 += a2; - - if (((*a0 - a1) * a2) >= 0) { - *a0 = a1; - - return 1; - } - } else if (a1 == *a0) { - return 1; - } - - return 0; -} - -#ifdef NONMATCHING - -UNK_TYPE func_800FF03C(f32* a0, f32 a1, f32 a2) { - if (a2 != 0) { - // XXX: regalloc is messed up - if (a1 < *a0) { - a2 = -a2; - } - - *a0 += a2; - - if (((*a0 - a1) * a2) >= 0) { - *a0 = a1; - - return 1; - } - } else if (a1 != *a0) { - return 1; - } - - return 0; -} - -#else - -GLOBAL_ASM( -glabel func_800FF03C -/* 091487 0x800FF03C 44857000 */ mtc1 $a1, $f14 -/* 091488 0x800FF040 44866000 */ mtc1 $a2, $f12 -/* 091489 0x800FF044 44802000 */ mtc1 $zero, $f4 -/* 091490 0x800FF048 00000000 */ nop -/* 091491 0x800FF04C 46046032 */ c.eq.s $f12, $f4 -/* 091492 0x800FF050 00000000 */ nop -/* 091493 0x800FF054 45030015 */ bc1tl .L_800FF0AC -/* 091494 0x800FF058 C4840000 */ lwc1 $f4, 0X0($a0) -/* 091495 0x800FF05C C4800000 */ lwc1 $f0, 0X0($a0) -/* 091496 0x800FF060 24020001 */ li $v0, 1 -/* 091497 0x800FF064 4600703C */ c.lt.s $f14, $f0 -/* 091498 0x800FF068 00000000 */ nop -/* 091499 0x800FF06C 45020003 */ bc1fl .L_800FF07C -/* 091500 0x800FF070 460C0180 */ add.s $f6, $f0, $f12 -/* 091501 0x800FF074 46006307 */ neg.s $f12, $f12 -/* 091502 0x800FF078 460C0180 */ add.s $f6, $f0, $f12 -.L_800FF07C: -/* 091503 0x800FF07C 44809000 */ mtc1 $zero, $f18 -/* 091504 0x800FF080 E4860000 */ swc1 $f6, 0X0($a0) -/* 091505 0x800FF084 C4880000 */ lwc1 $f8, 0X0($a0) -/* 091506 0x800FF088 460E4281 */ sub.s $f10, $f8, $f14 -/* 091507 0x800FF08C 460C5402 */ mul.s $f16, $f10, $f12 -/* 091508 0x800FF090 4610903E */ c.le.s $f18, $f16 -/* 091509 0x800FF094 00000000 */ nop -/* 091510 0x800FF098 4502000B */ bc1fl .L_800FF0C8 -/* 091511 0x800FF09C 00001025 */ move $v0, $zero -/* 091512 0x800FF0A0 03E00008 */ jr $ra -/* 091513 0x800FF0A4 E48E0000 */ swc1 $f14, 0X0($a0) -/* 091514 0x800FF0A8 C4840000 */ lwc1 $f4, 0X0($a0) -.L_800FF0AC: -/* 091515 0x800FF0AC 46047032 */ c.eq.s $f14, $f4 -/* 091516 0x800FF0B0 00000000 */ nop -/* 091517 0x800FF0B4 45020004 */ bc1fl .L_800FF0C8 -/* 091518 0x800FF0B8 00001025 */ move $v0, $zero -/* 091519 0x800FF0BC 03E00008 */ jr $ra -/* 091520 0x800FF0C0 24020001 */ li $v0, 1 -/* 091521 0x800FF0C4 00001025 */ move $v0, $zero -.L_800FF0C8: -/* 091522 0x800FF0C8 03E00008 */ jr $ra -/* 091523 0x800FF0CC 00000000 */ nop -) - -#endif - -#ifdef NONMATCHING - -UNK_TYPE func_800FF0D0(s16* a0, s16 a1, s16 a2) { - s32 v0 = *a0; - - // XXX: regalloc is messed up - *a0 += a2; - - if (((*a0 - a1) * (v0 - a1)) <= 0) { - *a0 = a1; - - return 1; - } - - return 0; -} - -#else - -GLOBAL_ASM( -glabel func_800FF0D0 -/* 091524 0x800FF0D0 AFA50004 */ sw $a1, 0X4($sp) -/* 091525 0x800FF0D4 AFA60008 */ sw $a2, 0X8($sp) -/* 091526 0x800FF0D8 00063400 */ sll $a2, $a2, 16 -/* 091527 0x800FF0DC 00052C00 */ sll $a1, $a1, 16 -/* 091528 0x800FF0E0 00052C03 */ sra $a1, $a1, 16 -/* 091529 0x800FF0E4 00063403 */ sra $a2, $a2, 16 -/* 091530 0x800FF0E8 84820000 */ lh $v0, 0X0($a0) -/* 091531 0x800FF0EC 00467021 */ addu $t6, $v0, $a2 -/* 091532 0x800FF0F0 A48E0000 */ sh $t6, 0X0($a0) -/* 091533 0x800FF0F4 848F0000 */ lh $t7, 0X0($a0) -/* 091534 0x800FF0F8 00454823 */ subu $t1, $v0, $a1 -/* 091535 0x800FF0FC 00095400 */ sll $t2, $t1, 16 -/* 091536 0x800FF100 01E5C023 */ subu $t8, $t7, $a1 -/* 091537 0x800FF104 0018CC00 */ sll $t9, $t8, 16 -/* 091538 0x800FF108 00194403 */ sra $t0, $t9, 16 -/* 091539 0x800FF10C 000A5C03 */ sra $t3, $t2, 16 -/* 091540 0x800FF110 010B0019 */ multu $t0, $t3 -/* 091541 0x800FF114 00001025 */ move $v0, $zero -/* 091542 0x800FF118 00006012 */ mflo $t4 -/* 091543 0x800FF11C 1D800004 */ bgtz $t4, .L_800FF130 -/* 091544 0x800FF120 00000000 */ nop -/* 091545 0x800FF124 A4850000 */ sh $a1, 0X0($a0) -/* 091546 0x800FF128 03E00008 */ jr $ra -/* 091547 0x800FF12C 24020001 */ li $v0, 1 -.L_800FF130: -/* 091548 0x800FF130 03E00008 */ jr $ra -/* 091549 0x800FF134 00000000 */ nop -) - -#endif - -#ifdef NONMATCHING - -UNK_RET func_800FF138() { - -} - -#else - -GLOBAL_ASM( -glabel func_800FF138 -/* 091550 0x800FF138 AFA50004 */ sw $a1, 0X4($sp) -/* 091551 0x800FF13C AFA60008 */ sw $a2, 0X8($sp) -/* 091552 0x800FF140 00063400 */ sll $a2, $a2, 16 -/* 091553 0x800FF144 00052C00 */ sll $a1, $a1, 16 -/* 091554 0x800FF148 00052C03 */ sra $a1, $a1, 16 -/* 091555 0x800FF14C 00063403 */ sra $a2, $a2, 16 -/* 091556 0x800FF150 84830000 */ lh $v1, 0X0($a0) -/* 091557 0x800FF154 34018000 */ ori $at, $zero, 0X8000 -/* 091558 0x800FF158 3C0FFFFF */ lui $t7, 0xFFFF -/* 091559 0x800FF15C 00A31023 */ subu $v0, $a1, $v1 -/* 091560 0x800FF160 04410004 */ bgez $v0, .L_800FF174 -/* 091561 0x800FF164 0041082A */ slt $at, $v0, $at -/* 091562 0x800FF168 00063023 */ negu $a2, $a2 -/* 091563 0x800FF16C 00063400 */ sll $a2, $a2, 16 -/* 091564 0x800FF170 00063403 */ sra $a2, $a2, 16 -.L_800FF174: -/* 091565 0x800FF174 14200007 */ bnez $at, .L_800FF194 -/* 091566 0x800FF178 00027023 */ negu $t6, $v0 -/* 091567 0x800FF17C 00063023 */ negu $a2, $a2 -/* 091568 0x800FF180 00063400 */ sll $a2, $a2, 16 -/* 091569 0x800FF184 35EF0001 */ ori $t7, $t7, 0X1 -/* 091570 0x800FF188 00063403 */ sra $a2, $a2, 16 -/* 091571 0x800FF18C 10000009 */ b .L_800FF1B4 -/* 091572 0x800FF190 01EE1023 */ subu $v0, $t7, $t6 -.L_800FF194: -/* 091573 0x800FF194 28418001 */ slti $at, $v0, -32767 -/* 091574 0x800FF198 10200006 */ beqz $at, .L_800FF1B4 -/* 091575 0x800FF19C 00000000 */ nop -/* 091576 0x800FF1A0 00063023 */ negu $a2, $a2 -/* 091577 0x800FF1A4 3401FFFF */ ori $at, $zero, 0XFFFF -/* 091578 0x800FF1A8 00063400 */ sll $a2, $a2, 16 -/* 091579 0x800FF1AC 00411021 */ addu $v0, $v0, $at -/* 091580 0x800FF1B0 00063403 */ sra $a2, $a2, 16 -.L_800FF1B4: -/* 091581 0x800FF1B4 10C0000A */ beqz $a2, .L_800FF1E0 -/* 091582 0x800FF1B8 00000000 */ nop -/* 091583 0x800FF1BC 00C20019 */ multu $a2, $v0 -/* 091584 0x800FF1C0 0066C021 */ addu $t8, $v1, $a2 -/* 091585 0x800FF1C4 A4980000 */ sh $t8, 0X0($a0) -/* 091586 0x800FF1C8 24020001 */ li $v0, 1 -/* 091587 0x800FF1CC 0000C812 */ mflo $t9 -/* 091588 0x800FF1D0 5F200008 */ bgtzl $t9, .L_800FF1F4 -/* 091589 0x800FF1D4 00001025 */ move $v0, $zero -/* 091590 0x800FF1D8 03E00008 */ jr $ra -/* 091591 0x800FF1DC A4850000 */ sh $a1, 0X0($a0) -.L_800FF1E0: -/* 091592 0x800FF1E0 54A30004 */ bnel $a1, $v1, .L_800FF1F4 -/* 091593 0x800FF1E4 00001025 */ move $v0, $zero -/* 091594 0x800FF1E8 03E00008 */ jr $ra -/* 091595 0x800FF1EC 24020001 */ li $v0, 1 -/* 091596 0x800FF1F0 00001025 */ move $v0, $zero -.L_800FF1F4: -/* 091597 0x800FF1F4 03E00008 */ jr $ra -/* 091598 0x800FF1F8 00000000 */ nop -) - -#endif - -#ifdef NONMATCHING - -UNK_RET func_800FF1FC() { - -} - -#else - -GLOBAL_ASM( -glabel func_800FF1FC -/* 091599 0x800FF1FC AFA50004 */ sw $a1, 0X4($sp) -/* 091600 0x800FF200 AFA60008 */ sw $a2, 0X8($sp) -/* 091601 0x800FF204 AFA7000C */ sw $a3, 0XC($sp) -/* 091602 0x800FF208 00073C00 */ sll $a3, $a3, 16 -/* 091603 0x800FF20C 00063400 */ sll $a2, $a2, 16 -/* 091604 0x800FF210 00052C00 */ sll $a1, $a1, 16 -/* 091605 0x800FF214 00052C03 */ sra $a1, $a1, 16 -/* 091606 0x800FF218 00063403 */ sra $a2, $a2, 16 -/* 091607 0x800FF21C 00073C03 */ sra $a3, $a3, 16 -/* 091608 0x800FF220 84820000 */ lh $v0, 0X0($a0) -/* 091609 0x800FF224 00071C00 */ sll $v1, $a3, 16 -/* 091610 0x800FF228 00031C03 */ sra $v1, $v1, 16 -/* 091611 0x800FF22C 00A27023 */ subu $t6, $a1, $v0 -/* 091612 0x800FF230 05C00004 */ bltz $t6, .L_800FF244 -/* 091613 0x800FF234 00A2082A */ slt $at, $a1, $v0 -/* 091614 0x800FF238 00061C00 */ sll $v1, $a2, 16 -/* 091615 0x800FF23C 10000001 */ b .L_800FF244 -/* 091616 0x800FF240 00031C03 */ sra $v1, $v1, 16 -.L_800FF244: -/* 091617 0x800FF244 10600011 */ beqz $v1, .L_800FF28C -/* 091618 0x800FF248 00000000 */ nop -/* 091619 0x800FF24C 50200005 */ beqzl $at, .L_800FF264 -/* 091620 0x800FF250 00437821 */ addu $t7, $v0, $v1 -/* 091621 0x800FF254 00031823 */ negu $v1, $v1 -/* 091622 0x800FF258 00031C00 */ sll $v1, $v1, 16 -/* 091623 0x800FF25C 00031C03 */ sra $v1, $v1, 16 -/* 091624 0x800FF260 00437821 */ addu $t7, $v0, $v1 -.L_800FF264: -/* 091625 0x800FF264 A48F0000 */ sh $t7, 0X0($a0) -/* 091626 0x800FF268 84980000 */ lh $t8, 0X0($a0) -/* 091627 0x800FF26C 24020001 */ li $v0, 1 -/* 091628 0x800FF270 0305C823 */ subu $t9, $t8, $a1 -/* 091629 0x800FF274 03230019 */ multu $t9, $v1 -/* 091630 0x800FF278 00004012 */ mflo $t0 -/* 091631 0x800FF27C 05020008 */ bltzl $t0, .L_800FF2A0 -/* 091632 0x800FF280 00001025 */ move $v0, $zero -/* 091633 0x800FF284 03E00008 */ jr $ra -/* 091634 0x800FF288 A4850000 */ sh $a1, 0X0($a0) -.L_800FF28C: -/* 091635 0x800FF28C 54A20004 */ bnel $a1, $v0, .L_800FF2A0 -/* 091636 0x800FF290 00001025 */ move $v0, $zero -/* 091637 0x800FF294 03E00008 */ jr $ra -/* 091638 0x800FF298 24020001 */ li $v0, 1 -/* 091639 0x800FF29C 00001025 */ move $v0, $zero -.L_800FF2A0: -/* 091640 0x800FF2A0 03E00008 */ jr $ra -/* 091641 0x800FF2A4 00000000 */ nop -) - -#endif - -#ifdef NONMATCHING - -UNK_RET func_800FF2A8() { - -} - -#else - -GLOBAL_ASM( -glabel func_800FF2A8 -/* 091642 0x800FF2A8 44857000 */ mtc1 $a1, $f14 -/* 091643 0x800FF2AC 44866000 */ mtc1 $a2, $f12 -/* 091644 0x800FF2B0 00001025 */ move $v0, $zero -/* 091645 0x800FF2B4 C4820000 */ lwc1 $f2, 0X0($a0) -/* 091646 0x800FF2B8 44803000 */ mtc1 $zero, $f6 -/* 091647 0x800FF2BC 460C1100 */ add.s $f4, $f2, $f12 -/* 091648 0x800FF2C0 460E1401 */ sub.s $f16, $f2, $f14 -/* 091649 0x800FF2C4 E4840000 */ swc1 $f4, 0X0($a0) -/* 091650 0x800FF2C8 C4880000 */ lwc1 $f8, 0X0($a0) -/* 091651 0x800FF2CC 460E4281 */ sub.s $f10, $f8, $f14 -/* 091652 0x800FF2D0 46105482 */ mul.s $f18, $f10, $f16 -/* 091653 0x800FF2D4 4606903E */ c.le.s $f18, $f6 -/* 091654 0x800FF2D8 00000000 */ nop -/* 091655 0x800FF2DC 45000004 */ bc1f .L_800FF2F0 -/* 091656 0x800FF2E0 00000000 */ nop -/* 091657 0x800FF2E4 E48E0000 */ swc1 $f14, 0X0($a0) -/* 091658 0x800FF2E8 03E00008 */ jr $ra -/* 091659 0x800FF2EC 24020001 */ li $v0, 1 -.L_800FF2F0: -/* 091660 0x800FF2F0 03E00008 */ jr $ra -/* 091661 0x800FF2F4 00000000 */ nop -) - -#endif - -#ifdef NONMATCHING - -UNK_RET func_800FF2F8() { - -} - -#else - -GLOBAL_ASM( -glabel func_800FF2F8 -/* 091662 0x800FF2F8 44856000 */ mtc1 $a1, $f12 -/* 091663 0x800FF2FC 44867000 */ mtc1 $a2, $f14 -/* 091664 0x800FF300 AFA7000C */ sw $a3, 0XC($sp) -/* 091665 0x800FF304 C4800000 */ lwc1 $f0, 0X0($a0) -/* 091666 0x800FF308 C7A2000C */ lwc1 $f2, 0XC($sp) -/* 091667 0x800FF30C 460C003E */ c.le.s $f0, $f12 -/* 091668 0x800FF310 00000000 */ nop -/* 091669 0x800FF314 45000003 */ bc1f .L_800FF324 -/* 091670 0x800FF318 00000000 */ nop -/* 091671 0x800FF31C 10000001 */ b .L_800FF324 -/* 091672 0x800FF320 46007086 */ mov.s $f2, $f14 -.L_800FF324: -/* 091673 0x800FF324 44807000 */ mtc1 $zero, $f14 -/* 091674 0x800FF328 00000000 */ nop -/* 091675 0x800FF32C 460E1032 */ c.eq.s $f2, $f14 -/* 091676 0x800FF330 00000000 */ nop -/* 091677 0x800FF334 45030012 */ bc1tl .L_800FF380 -/* 091678 0x800FF338 46006032 */ c.eq.s $f12, $f0 -/* 091679 0x800FF33C 4600603C */ c.lt.s $f12, $f0 -/* 091680 0x800FF340 24020001 */ li $v0, 1 -/* 091681 0x800FF344 45020003 */ bc1fl .L_800FF354 -/* 091682 0x800FF348 46020100 */ add.s $f4, $f0, $f2 -/* 091683 0x800FF34C 46001087 */ neg.s $f2, $f2 -/* 091684 0x800FF350 46020100 */ add.s $f4, $f0, $f2 -.L_800FF354: -/* 091685 0x800FF354 E4840000 */ swc1 $f4, 0X0($a0) -/* 091686 0x800FF358 C4860000 */ lwc1 $f6, 0X0($a0) -/* 091687 0x800FF35C 460C3201 */ sub.s $f8, $f6, $f12 -/* 091688 0x800FF360 46024282 */ mul.s $f10, $f8, $f2 -/* 091689 0x800FF364 460A703E */ c.le.s $f14, $f10 -/* 091690 0x800FF368 00000000 */ nop -/* 091691 0x800FF36C 4502000A */ bc1fl .L_800FF398 -/* 091692 0x800FF370 00001025 */ move $v0, $zero -/* 091693 0x800FF374 03E00008 */ jr $ra -/* 091694 0x800FF378 E48C0000 */ swc1 $f12, 0X0($a0) -/* 091695 0x800FF37C 46006032 */ c.eq.s $f12, $f0 -.L_800FF380: -/* 091696 0x800FF380 00000000 */ nop -/* 091697 0x800FF384 45020004 */ bc1fl .L_800FF398 -/* 091698 0x800FF388 00001025 */ move $v0, $zero -/* 091699 0x800FF38C 03E00008 */ jr $ra -/* 091700 0x800FF390 24020001 */ li $v0, 1 -/* 091701 0x800FF394 00001025 */ move $v0, $zero -.L_800FF398: -/* 091702 0x800FF398 03E00008 */ jr $ra -/* 091703 0x800FF39C 00000000 */ nop -) - -#endif - -#ifdef NONMATCHING - -UNK_RET func_800FF3A0() { - -} - -#else - -GLOBAL_ASM( -glabel func_800FF3A0 -/* 091704 0x800FF3A0 3C014270 */ lui $at, 0x4270 -/* 091705 0x800FF3A4 27BDFFE8 */ addiu $sp, $sp, -24 -/* 091706 0x800FF3A8 44817000 */ mtc1 $at, $f14 -/* 091707 0x800FF3AC AFBF0014 */ sw $ra, 0X14($sp) -/* 091708 0x800FF3B0 80CE0014 */ lb $t6, 0X14($a2) -/* 091709 0x800FF3B4 80CF0015 */ lb $t7, 0X15($a2) -/* 091710 0x800FF3B8 44808000 */ mtc1 $zero, $f16 -/* 091711 0x800FF3BC 448E2000 */ mtc1 $t6, $f4 -/* 091712 0x800FF3C0 448F3000 */ mtc1 $t7, $f6 -/* 091713 0x800FF3C4 468020A0 */ cvt.s.w $f2, $f4 -/* 091714 0x800FF3C8 46803320 */ cvt.s.w $f12, $f6 -/* 091715 0x800FF3CC 46021202 */ mul.s $f8, $f2, $f2 -/* 091716 0x800FF3D0 00000000 */ nop -/* 091717 0x800FF3D4 460C6282 */ mul.s $f10, $f12, $f12 -/* 091718 0x800FF3D8 460A4000 */ add.s $f0, $f8, $f10 -/* 091719 0x800FF3DC 46000004 */ sqrt.s $f0, $f0 -/* 091720 0x800FF3E0 4600703C */ c.lt.s $f14, $f0 -/* 091721 0x800FF3E4 00000000 */ nop -/* 091722 0x800FF3E8 45000003 */ bc1f .L_800FF3F8 -/* 091723 0x800FF3EC 00000000 */ nop -/* 091724 0x800FF3F0 10000002 */ b .L_800FF3FC -/* 091725 0x800FF3F4 E48E0000 */ swc1 $f14, 0X0($a0) -.L_800FF3F8: -/* 091726 0x800FF3F8 E4800000 */ swc1 $f0, 0X0($a0) -.L_800FF3FC: -/* 091727 0x800FF3FC 4600803C */ c.lt.s $f16, $f0 -/* 091728 0x800FF400 00000000 */ nop -/* 091729 0x800FF404 4502000E */ bc1fl .L_800FF440 -/* 091730 0x800FF408 A4A00000 */ sh $zero, 0X0($a1) -/* 091731 0x800FF40C 80D80002 */ lb $t8, 0X2($a2) -/* 091732 0x800FF410 80D90003 */ lb $t9, 0X3($a2) -/* 091733 0x800FF414 AFA5001C */ sw $a1, 0X1C($sp) -/* 091734 0x800FF418 44989000 */ mtc1 $t8, $f18 -/* 091735 0x800FF41C 44992000 */ mtc1 $t9, $f4 -/* 091736 0x800FF420 468090A0 */ cvt.s.w $f2, $f18 -/* 091737 0x800FF424 46802320 */ cvt.s.w $f12, $f4 -/* 091738 0x800FF428 0C060040 */ jal func_80180100 -/* 091739 0x800FF42C 46001387 */ neg.s $f14, $f2 -/* 091740 0x800FF430 8FA5001C */ lw $a1, 0X1C($sp) -/* 091741 0x800FF434 10000002 */ b .L_800FF440 -/* 091742 0x800FF438 A4A20000 */ sh $v0, 0X0($a1) -/* 091743 0x800FF43C A4A00000 */ sh $zero, 0X0($a1) -.L_800FF440: -/* 091744 0x800FF440 8FBF0014 */ lw $ra, 0X14($sp) -/* 091745 0x800FF444 27BD0018 */ addiu $sp, $sp, 24 -/* 091746 0x800FF448 03E00008 */ jr $ra -/* 091747 0x800FF44C 00000000 */ nop -) - -#endif - -s16 func_800FF450(s16 a0, s16 a1) { - return (s16)(func_80086FDC() * a1) + a0; -} - -s16 func_800FF4A4(s16 a0, s16 a1, s16 a2) { - return (s16)(func_80086FDC() * a2) * a1 + a0; -} - -UNK_RET func_800FF50C(z_Vector3D* dst, z_Vector3D* src) { - f32 x = src->x; - f32 y = src->y; - f32 z = src->z; - - dst->x = x; - dst->y = y; - dst->z = z; -} - -UNK_RET func_800FF52C(z_Vector3Ds16* dst, z_Vector3Ds16* src) { - s16 x = src->x; - s16 y = src->y; - s16 z = src->z; - - dst->x = x; - dst->y = y; - dst->z = z; -} - -UNK_RET func_800FF54C(z_Vector3D* dst, z_Vector3Ds16* src) { - f32 x = src->x; - f32 y = src->y; - f32 z = src->z; - - dst->x = x; - dst->y = y; - dst->z = z; -} - -UNK_RET func_800FF584(z_Vector3Ds16* dst, z_Vector3D* src) { - f32 x = src->x; - f32 y = src->y; - f32 z = src->z; - - dst->x = x; - dst->y = y; - dst->z = z; -} - -UNK_RET func_800FF5BC(z_Vector3D* a0, z_Vector3D* a1, z_Vector3D* a2) { - a2->x = a0->x + a1->x; - a2->y = a0->y + a1->y; - a2->z = a0->z + a1->z; -} - -UNK_RET func_800FF5F4(z_Vector3D* a0, z_Vector3D* a1, z_Vector3D* a2) { - a2->x = a0->x - a1->x; - a2->y = a0->y - a1->y; - a2->z = a0->z - a1->z; -} - -UNK_RET func_800FF62C(z_Vector3D* a0, z_Vector3Ds16* a1, z_Vector3Ds16* a2) { - a0->x = a1->x - a2->x; - a0->y = a1->y - a2->y; - a0->z = a1->z - a2->z; -} - -UNK_RET func_800FF688(z_Vector3D* a0, f32 a1) { - a0->x *= a1; - a0->y *= a1; - a0->z *= a1; -} - -UNK_RET func_800FF6C4(z_Vector3D* a0, f32 a1, z_Vector3D* a2) { - a2->x = a0->x * a1; - a2->y = a0->y * a1; - a2->z = a0->z * a1; -} - -UNK_RET func_800FF6F8(z_Vector3D* a0, z_Vector3D* a1, f32 a2, z_Vector3D* a3) { - a3->x = (a1->x - a0->x) * a2 + a0->x; - a3->y = (a1->y - a0->y) * a2 + a0->y; - a3->z = (a1->z - a0->z) * a2 + a0->z; -} - -UNK_RET func_800FF750(z_Vector3D* a0, z_Vector3D* a1, f32 a2, z_Vector3D* a3) { - a3->x = a1->x * a2 + a0->x; - a3->y = a1->y * a2 + a0->y; - a3->z = a1->z * a2 + a0->z; -} - -UNK_RET func_800FF79C(z_Vector3D* a0, f32 a1, z_Vector3D* a2) { - a2->x = func_801795C0(a1) + a0->x; - a2->y = func_801795C0(a1) + a0->y; - a2->z = func_801795C0(a1) + a0->z; -} - -void func_800FF810(z_Vector3D* a0, z_Vector3D* a1, f32 a2, z_Vector3D* a3) { - f32 f0 = func_800FF8D4(a0, a1, a3); - f32 f2; - - if (f0 == 0) { - return; - } - - f2 = a2 / f0; - - a3->x *= f2; - a3->y *= f2; - a3->z *= f2; -} - -f32 func_800FF884(z_Vector3D* a0, z_Vector3D* a1) { - z_Vector3D sp1C; - func_800FF5F4(a1, a0, &sp1C); - return sqrtf((sp1C.x * sp1C.x) + (sp1C.y * sp1C.y) + (sp1C.z * sp1C.z)); -} - -f32 func_800FF8D4(z_Vector3D* a0, z_Vector3D* a1, z_Vector3D* a2) { - func_800FF5F4(a1, a0, a2); - return sqrtf((a2->x * a2->x) + (a2->y * a2->y) + (a2->z * a2->z)); -} - -f32 func_800FF92C(z_Vector3D* a0, z_Vector3D* a1) { - f32 dx = a1->x - a0->x; - f32 dz = a1->z - a0->z; - return sqrtf((dx * dx) + (dz * dz)); -} - -f32 func_800FF960(z_Vector3D* a0, z_Vector3D* a1, f32* a2, f32* a3) { - *a2 = a1->x - a0->x; - *a3 = a1->z - a0->z; - return sqrtf((*a2 * *a2) + (*a3 * *a3)); -} - -#ifdef NONMATCHING - -UNK_RET func_800FF9A4(z_Vector3D* a0, z_Vector3D* a1, f32 a2) { - f32 sp24; - f32 sp20; - f32 f0 = func_800FF960(a1, a0, &sp24, &sp20); - f32 f2 = f0 - a2; - - if ((f0 >= a2) && (f2 != 0)) { - f2 /= f0; - } else { - f2 = 0; - } - - a0->x = a1->x + sp24 * f2; - a0->z = a1->z + sp20 * f2; -} - -#else - -GLOBAL_ASM( -glabel func_800FF9A4 -/* 092089 0x800FF9A4 27BDFFD8 */ addiu $sp, $sp, -40 -/* 092090 0x800FF9A8 AFA5002C */ sw $a1, 0X2C($sp) -/* 092091 0x800FF9AC 00802825 */ move $a1, $a0 -/* 092092 0x800FF9B0 AFBF0014 */ sw $ra, 0X14($sp) -/* 092093 0x800FF9B4 AFA40028 */ sw $a0, 0X28($sp) -/* 092094 0x800FF9B8 AFA60030 */ sw $a2, 0X30($sp) -/* 092095 0x800FF9BC 8FA4002C */ lw $a0, 0X2C($sp) -/* 092096 0x800FF9C0 27A60024 */ addiu $a2, $sp, 36 -/* 092097 0x800FF9C4 27A70020 */ addiu $a3, $sp, 32 -/* 092098 0x800FF9C8 0C03FE58 */ jal func_800FF960 -/* 092099 0x800FF9CC AFA50028 */ sw $a1, 0X28($sp) -/* 092100 0x800FF9D0 C7A20030 */ lwc1 $f2, 0X30($sp) -/* 092101 0x800FF9D4 44807000 */ mtc1 $zero, $f14 -/* 092102 0x800FF9D8 8FA2002C */ lw $v0, 0X2C($sp) -/* 092103 0x800FF9DC 4602003C */ c.lt.s $f0, $f2 -/* 092104 0x800FF9E0 8FA50028 */ lw $a1, 0X28($sp) -/* 092105 0x800FF9E4 C7A60024 */ lwc1 $f6, 0X24($sp) -/* 092106 0x800FF9E8 46020301 */ sub.s $f12, $f0, $f2 -/* 092107 0x800FF9EC 45020004 */ bc1fl .L_800FFA00 -/* 092108 0x800FF9F0 460E6032 */ c.eq.s $f12, $f14 -/* 092109 0x800FF9F4 44806000 */ mtc1 $zero, $f12 -/* 092110 0x800FF9F8 00000000 */ nop -/* 092111 0x800FF9FC 460E6032 */ c.eq.s $f12, $f14 -.L_800FFA00: -/* 092112 0x800FFA00 00000000 */ nop -/* 092113 0x800FFA04 45020004 */ bc1fl .L_800FFA18 -/* 092114 0x800FFA08 46006083 */ div.s $f2, $f12, $f0 -/* 092115 0x800FFA0C 10000002 */ b .L_800FFA18 -/* 092116 0x800FFA10 46007086 */ mov.s $f2, $f14 -/* 092117 0x800FFA14 46006083 */ div.s $f2, $f12, $f0 -.L_800FFA18: -/* 092118 0x800FFA18 46023202 */ mul.s $f8, $f6, $f2 -/* 092119 0x800FFA1C C4440000 */ lwc1 $f4, 0X0($v0) -/* 092120 0x800FFA20 46006006 */ mov.s $f0, $f12 -/* 092121 0x800FFA24 46082280 */ add.s $f10, $f4, $f8 -/* 092122 0x800FFA28 E4AA0000 */ swc1 $f10, 0X0($a1) -/* 092123 0x800FFA2C C7B20020 */ lwc1 $f18, 0X20($sp) -/* 092124 0x800FFA30 C4500008 */ lwc1 $f16, 0X8($v0) -/* 092125 0x800FFA34 46029182 */ mul.s $f6, $f18, $f2 -/* 092126 0x800FFA38 46068100 */ add.s $f4, $f16, $f6 -/* 092127 0x800FFA3C E4A40008 */ swc1 $f4, 0X8($a1) -/* 092128 0x800FFA40 8FBF0014 */ lw $ra, 0X14($sp) -/* 092129 0x800FFA44 03E00008 */ jr $ra -/* 092130 0x800FFA48 27BD0028 */ addiu $sp, $sp, 40 -) - -#endif - -f32 func_800FFA4C(z_Vector3D* a0, z_Vector3D* a1) { - return a1->y - a0->y; -} - -UNK_TYPE func_800FFA60(z_Vector3D* a0, z_Vector3D* a1) { - f32 f14 = a1->x - a0->x; - f32 f12 = a1->z - a0->z; - return func_80180100(f12, f14); -} - -UNK_TYPE func_800FFA94(z_Vector3D* a0, z_Vector3D* a1) { - return func_80180100(func_800FF92C(a0, a1), a0->y - a1->y); -} - -void func_800FFADC(z_Actor* a0, z_ActorCompInitEntry* a1) { - do { - D_801BE960[a1->type]((u8*)a0, a1); - } while ((a1++)->cont); -} - -UNK_RET func_800FFB54(u8* a0, z_ActorCompInitEntry* a1) { - *(u8*)(a0 + a1->offset) = (u8)(a1->value); -} - -UNK_RET func_800FFB70(u8* a0, z_ActorCompInitEntry* a1) { - *(u8*)(a0 + a1->offset) = (u8)(a1->value); -} - -UNK_RET func_800FFB8C(u8* a0, z_ActorCompInitEntry* a1) { - *(u16*)(a0 + a1->offset) = (u16)(a1->value); -} - -UNK_RET func_800FFBA8(u8* a0, z_ActorCompInitEntry* a1) { - *(u16*)(a0 + a1->offset) = (u16)(a1->value); -} - -UNK_RET func_800FFBC4(u8* a0, z_ActorCompInitEntry* a1) { - *(u32*)(a0 + a1->offset) = (u32)(a1->value); -} - -UNK_RET func_800FFBE0(u8* a0, z_ActorCompInitEntry* a1) { - *(u32*)(a0 + a1->offset) = (u32)(a1->value); -} - -UNK_RET func_800FFBFC(u8* a0, z_ActorCompInitEntry* a1) { - *(f32*)(a0 + a1->offset) = (f32)(a1->value); -} - -UNK_RET func_800FFC20(u8* a0, z_ActorCompInitEntry* a1) { - *(f32*)(a0 + a1->offset) = (f32)(a1->value) / 1000; -} - -UNK_RET func_800FFC50(u8* a0, z_ActorCompInitEntry* a1) { - z_Vector3D* v0 = (z_Vector3D*)(a0 + a1->offset); - f32 f0 = (f32)(a1->value); - - v0->z = f0; - v0->y = f0; - v0->x = f0; -} - -UNK_RET func_800FFC7C(u8* a0, z_ActorCompInitEntry* a1) { - z_Vector3D* v0 = (z_Vector3D*)(a0 + a1->offset); - f32 f0 = (f32)(a1->value) / 1000; - - v0->z = f0; - v0->y = f0; - v0->x = f0; -} - -UNK_RET func_800FFCB4(u8* a0, z_ActorCompInitEntry* a1) { - z_Vector3Ds16* v0 = (z_Vector3Ds16*)(a0 + a1->offset); - s16 v1 = (s16)(a1->value); - - v0->z = v1; - v0->y = v1; - v0->x = v1; -} - -f32 func_800FFCD8(f32* a0, f32 a1, f32 a2, f32 a3, f32 a4) { - f32 f0; - - if (*a0 != a1) { - f0 = (a1 - *a0) * a2; - - if ((f0 >= a4) || (f0 <= -a4)) { - if (f0 > a3) { - f0 = a3; - } - - if (f0 < -a3) { - f0 = -a3; - } - - *a0 += f0; - } else { - if (f0 > 0) { - if (f0 < a4) { - *a0 += a4; - - if (a1 < *a0) { - *a0 = a1; - } - } - } else { - if (-a4 < f0) { - *a0 += -a4; - - if (*a0 < a1) { - *a0 = a1; - } - } - } - } - } - - return fabsf(a1 - *a0); -} - -UNK_RET func_800FFDF8(f32* a0, f32 a1, f32 a2, f32 a3) { - f32 f2; - - if (*a0 != a1) { - f2 = (a1 - *a0) * a2; - - if (f2 > a3) { - f2 = a3; - } else if (f2 < -a3) { - f2 = -a3; - } - - *a0 += f2; - } -} - -void func_800FFE68(f32* a0, f32 a1, f32 a2) { - f32 f0 = *a0 * a1; - - if (a2 < f0) { - f0 = a2; - } else if (f0 < -a2) { - f0 = -a2; - } - - *a0 = *a0 - f0; -} - -#ifdef NONMATCHING - -s16 func_800FFEBC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4) { - -} - -#else - -GLOBAL_ASM( -glabel func_800FFEBC -/* 092415 0x800FFEBC AFA50004 */ sw $a1, 0X4($sp) -/* 092416 0x800FFEC0 AFA60008 */ sw $a2, 0X8($sp) -/* 092417 0x800FFEC4 00063400 */ sll $a2, $a2, 16 -/* 092418 0x800FFEC8 00052C00 */ sll $a1, $a1, 16 -/* 092419 0x800FFECC 00052C03 */ sra $a1, $a1, 16 -/* 092420 0x800FFED0 00063403 */ sra $a2, $a2, 16 -/* 092421 0x800FFED4 AFA7000C */ sw $a3, 0XC($sp) -/* 092422 0x800FFED8 84880000 */ lh $t0, 0X0($a0) -/* 092423 0x800FFEDC 87A90012 */ lh $t1, 0X12($sp) -/* 092424 0x800FFEE0 00A81823 */ subu $v1, $a1, $t0 -/* 092425 0x800FFEE4 00031C00 */ sll $v1, $v1, 16 -/* 092426 0x800FFEE8 10A80038 */ beq $a1, $t0, .L_800FFFCC -/* 092427 0x800FFEEC 00031C03 */ sra $v1, $v1, 16 -/* 092428 0x800FFEF0 0066001A */ div $zero, $v1, $a2 -/* 092429 0x800FFEF4 14C00002 */ bnez $a2, .L_800FFF00 -/* 092430 0x800FFEF8 00000000 */ nop -/* 092431 0x800FFEFC 0007000D */ break 0x00007 -.L_800FFF00: -/* 092432 0x800FFF00 2401FFFF */ li $at, -1 -/* 092433 0x800FFF04 14C10004 */ bne $a2, $at, .L_800FFF18 -/* 092434 0x800FFF08 3C018000 */ lui $at, 0x8000 -/* 092435 0x800FFF0C 14610002 */ bne $v1, $at, .L_800FFF18 -/* 092436 0x800FFF10 00000000 */ nop -/* 092437 0x800FFF14 0006000D */ break 0x00006 -.L_800FFF18: -/* 092438 0x800FFF18 00003812 */ mflo $a3 -/* 092439 0x800FFF1C 00075400 */ sll $t2, $a3, 16 -/* 092440 0x800FFF20 000A5403 */ sra $t2, $t2, 16 -/* 092441 0x800FFF24 00071400 */ sll $v0, $a3, 16 -/* 092442 0x800FFF28 012A082A */ slt $at, $t1, $t2 -/* 092443 0x800FFF2C 14200005 */ bnez $at, .L_800FFF44 -/* 092444 0x800FFF30 00021403 */ sra $v0, $v0, 16 -/* 092445 0x800FFF34 00097023 */ negu $t6, $t1 -/* 092446 0x800FFF38 014E082A */ slt $at, $t2, $t6 -/* 092447 0x800FFF3C 1020000F */ beqz $at, .L_800FFF7C -/* 092448 0x800FFF40 00000000 */ nop -.L_800FFF44: -/* 092449 0x800FFF44 87AF000E */ lh $t7, 0XE($sp) -/* 092450 0x800FFF48 87A5000E */ lh $a1, 0XE($sp) -/* 092451 0x800FFF4C 01EA082A */ slt $at, $t7, $t2 -/* 092452 0x800FFF50 10200002 */ beqz $at, .L_800FFF5C -/* 092453 0x800FFF54 00052823 */ negu $a1, $a1 -/* 092454 0x800FFF58 01E01025 */ move $v0, $t7 -.L_800FFF5C: -/* 092455 0x800FFF5C 0045082A */ slt $at, $v0, $a1 -/* 092456 0x800FFF60 50200004 */ beqzl $at, .L_800FFF74 -/* 092457 0x800FFF64 0102C021 */ addu $t8, $t0, $v0 -/* 092458 0x800FFF68 00051400 */ sll $v0, $a1, 16 -/* 092459 0x800FFF6C 00021403 */ sra $v0, $v0, 16 -/* 092460 0x800FFF70 0102C021 */ addu $t8, $t0, $v0 -.L_800FFF74: -/* 092461 0x800FFF74 10000015 */ b .L_800FFFCC -/* 092462 0x800FFF78 A4980000 */ sh $t8, 0X0($a0) -.L_800FFF7C: -/* 092463 0x800FFF7C 0460000B */ bltz $v1, .L_800FFFAC -/* 092464 0x800FFF80 01097823 */ subu $t7, $t0, $t1 -/* 092465 0x800FFF84 0109C821 */ addu $t9, $t0, $t1 -/* 092466 0x800FFF88 A4990000 */ sh $t9, 0X0($a0) -/* 092467 0x800FFF8C 848B0000 */ lh $t3, 0X0($a0) -/* 092468 0x800FFF90 00AB6023 */ subu $t4, $a1, $t3 -/* 092469 0x800FFF94 000C6C00 */ sll $t5, $t4, 16 -/* 092470 0x800FFF98 000D7403 */ sra $t6, $t5, 16 -/* 092471 0x800FFF9C 5DC0000C */ bgtzl $t6, .L_800FFFD0 -/* 092472 0x800FFFA0 00601025 */ move $v0, $v1 -/* 092473 0x800FFFA4 10000009 */ b .L_800FFFCC -/* 092474 0x800FFFA8 A4850000 */ sh $a1, 0X0($a0) -.L_800FFFAC: -/* 092475 0x800FFFAC A48F0000 */ sh $t7, 0X0($a0) -/* 092476 0x800FFFB0 84980000 */ lh $t8, 0X0($a0) -/* 092477 0x800FFFB4 00B8C823 */ subu $t9, $a1, $t8 -/* 092478 0x800FFFB8 00195C00 */ sll $t3, $t9, 16 -/* 092479 0x800FFFBC 000B6403 */ sra $t4, $t3, 16 -/* 092480 0x800FFFC0 05820003 */ bltzl $t4, .L_800FFFD0 -/* 092481 0x800FFFC4 00601025 */ move $v0, $v1 -/* 092482 0x800FFFC8 A4850000 */ sh $a1, 0X0($a0) -.L_800FFFCC: -/* 092483 0x800FFFCC 00601025 */ move $v0, $v1 -.L_800FFFD0: -/* 092484 0x800FFFD0 03E00008 */ jr $ra -/* 092485 0x800FFFD4 00000000 */ nop -) - -#endif - -void func_800FFFD8(s16* a0, s16 a1, s16 a2, s16 a3) { - s16 v0 = a1 - *a0; - v0 /= a2; - - if (v0 > a3) { - *a0 += a3; - return; - } - - if (v0 < -a3) { - *a0 -= a3; - return; - } - - *a0 += v0; -} - -UNK_RET func_8010007C(u8* a0, u8* a1) { - a0[0] = a1[0]; - a0[1] = a1[1]; - a0[2] = a1[2]; - a0[3] = a1[3]; -} - -UNK_RET func_801000A4(u16 a0) { - func_8019F0C8(a0); -} - -UNK_RET func_801000CC(u16 a0) { - func_8019F128(a0); -} - -UNK_RET func_801000F4(UNK_TYPE a0, u16 a1) { - func_8019F1C0(a0, a1); -} - -void func_8010011C(z_Vector3D* a0, s16 a1, z_Vector3D* a2, z_Vector3D* a3) { - f32 sp1C; - f32 f0; - - sp1C = func_800FED44(a1); - f0 = func_800FED84(a1); - a3->x = a0->x + (a2->x * sp1C + a2->z * f0); - a3->y = a0->y + a2->y; - a3->z = a0->z + (a2->z * sp1C - a2->x * f0); -} - -#ifdef NONMATCHING - -void func_801001B8(u8* a0, u8* a1, f32 a2, u8* a3) { - // XXX regalloc is slightly off - a3[0] = (f32)a0[0] + ((f32)a1[0] - (f32)a0[0]) * a2; - a3[1] = (f32)a0[1] + ((f32)a1[1] - (f32)a0[1]) * a2; - a3[2] = (f32)a0[2] + ((f32)a1[2] - (f32)a0[2]) * a2; -} - -#else - -GLOBAL_ASM( -glabel func_801001B8 -/* 092606 0x801001B8 44866000 */ mtc1 $a2, $f12 -/* 092607 0x801001BC 00000000 */ nop -/* 092608 0x801001C0 908E0000 */ lbu $t6, 0X0($a0) -/* 092609 0x801001C4 3C014F80 */ lui $at, 0x4F80 -/* 092610 0x801001C8 448E2000 */ mtc1 $t6, $f4 -/* 092611 0x801001CC 05C10004 */ bgez $t6, .L_801001E0 -/* 092612 0x801001D0 46802020 */ cvt.s.w $f0, $f4 -/* 092613 0x801001D4 44813000 */ mtc1 $at, $f6 -/* 092614 0x801001D8 00000000 */ nop -/* 092615 0x801001DC 46060000 */ add.s $f0, $f0, $f6 -.L_801001E0: -/* 092616 0x801001E0 90AF0000 */ lbu $t7, 0X0($a1) -/* 092617 0x801001E4 3C014F80 */ lui $at, 0x4F80 -/* 092618 0x801001E8 448F4000 */ mtc1 $t7, $f8 -/* 092619 0x801001EC 05E10004 */ bgez $t7, .L_80100200 -/* 092620 0x801001F0 468042A0 */ cvt.s.w $f10, $f8 -/* 092621 0x801001F4 44818000 */ mtc1 $at, $f16 -/* 092622 0x801001F8 00000000 */ nop -/* 092623 0x801001FC 46105280 */ add.s $f10, $f10, $f16 -.L_80100200: -/* 092624 0x80100200 46005481 */ sub.s $f18, $f10, $f0 -/* 092625 0x80100204 24190001 */ li $t9, 1 -/* 092626 0x80100208 3C014F00 */ lui $at, 0x4F00 -/* 092627 0x8010020C 460C9102 */ mul.s $f4, $f18, $f12 -/* 092628 0x80100210 46002180 */ add.s $f6, $f4, $f0 -/* 092629 0x80100214 4458F800 */ cfc1 $t8, $31 -/* 092630 0x80100218 44D9F800 */ ctc1 $t9, $31 -/* 092631 0x8010021C 00000000 */ nop -/* 092632 0x80100220 46003224 */ cvt.w.s $f8, $f6 -/* 092633 0x80100224 4459F800 */ cfc1 $t9, $31 -/* 092634 0x80100228 00000000 */ nop -/* 092635 0x8010022C 33390078 */ andi $t9, $t9, 0X78 -/* 092636 0x80100230 53200013 */ beqzl $t9, .L_80100280 -/* 092637 0x80100234 44194000 */ mfc1 $t9, $f8 -/* 092638 0x80100238 44814000 */ mtc1 $at, $f8 -/* 092639 0x8010023C 24190001 */ li $t9, 1 -/* 092640 0x80100240 46083201 */ sub.s $f8, $f6, $f8 -/* 092641 0x80100244 44D9F800 */ ctc1 $t9, $31 -/* 092642 0x80100248 00000000 */ nop -/* 092643 0x8010024C 46004224 */ cvt.w.s $f8, $f8 -/* 092644 0x80100250 4459F800 */ cfc1 $t9, $31 -/* 092645 0x80100254 00000000 */ nop -/* 092646 0x80100258 33390078 */ andi $t9, $t9, 0X78 -/* 092647 0x8010025C 17200005 */ bnez $t9, .L_80100274 -/* 092648 0x80100260 00000000 */ nop -/* 092649 0x80100264 44194000 */ mfc1 $t9, $f8 -/* 092650 0x80100268 3C018000 */ lui $at, 0x8000 -/* 092651 0x8010026C 10000007 */ b .L_8010028C -/* 092652 0x80100270 0321C825 */ or $t9, $t9, $at -.L_80100274: -/* 092653 0x80100274 10000005 */ b .L_8010028C -/* 092654 0x80100278 2419FFFF */ li $t9, -1 -/* 092655 0x8010027C 44194000 */ mfc1 $t9, $f8 -.L_80100280: -/* 092656 0x80100280 00000000 */ nop -/* 092657 0x80100284 0720FFFB */ bltz $t9, .L_80100274 -/* 092658 0x80100288 00000000 */ nop -.L_8010028C: -/* 092659 0x8010028C A0F90000 */ sb $t9, 0X0($a3) -/* 092660 0x80100290 90880001 */ lbu $t0, 0X1($a0) -/* 092661 0x80100294 44D8F800 */ ctc1 $t8, $31 -/* 092662 0x80100298 3C014F80 */ lui $at, 0x4F80 -/* 092663 0x8010029C 44888000 */ mtc1 $t0, $f16 -/* 092664 0x801002A0 05010004 */ bgez $t0, .L_801002B4 -/* 092665 0x801002A4 46808020 */ cvt.s.w $f0, $f16 -/* 092666 0x801002A8 44815000 */ mtc1 $at, $f10 -/* 092667 0x801002AC 00000000 */ nop -/* 092668 0x801002B0 460A0000 */ add.s $f0, $f0, $f10 -.L_801002B4: -/* 092669 0x801002B4 90A90001 */ lbu $t1, 0X1($a1) -/* 092670 0x801002B8 3C014F80 */ lui $at, 0x4F80 -/* 092671 0x801002BC 44899000 */ mtc1 $t1, $f18 -/* 092672 0x801002C0 05210004 */ bgez $t1, .L_801002D4 -/* 092673 0x801002C4 46809120 */ cvt.s.w $f4, $f18 -/* 092674 0x801002C8 44813000 */ mtc1 $at, $f6 -/* 092675 0x801002CC 00000000 */ nop -/* 092676 0x801002D0 46062100 */ add.s $f4, $f4, $f6 -.L_801002D4: -/* 092677 0x801002D4 46002201 */ sub.s $f8, $f4, $f0 -/* 092678 0x801002D8 240B0001 */ li $t3, 1 -/* 092679 0x801002DC 3C014F00 */ lui $at, 0x4F00 -/* 092680 0x801002E0 460C4402 */ mul.s $f16, $f8, $f12 -/* 092681 0x801002E4 46008280 */ add.s $f10, $f16, $f0 -/* 092682 0x801002E8 444AF800 */ cfc1 $t2, $31 -/* 092683 0x801002EC 44CBF800 */ ctc1 $t3, $31 -/* 092684 0x801002F0 00000000 */ nop -/* 092685 0x801002F4 460054A4 */ cvt.w.s $f18, $f10 -/* 092686 0x801002F8 444BF800 */ cfc1 $t3, $31 -/* 092687 0x801002FC 00000000 */ nop -/* 092688 0x80100300 316B0078 */ andi $t3, $t3, 0X78 -/* 092689 0x80100304 51600013 */ beqzl $t3, .L_80100354 -/* 092690 0x80100308 440B9000 */ mfc1 $t3, $f18 -/* 092691 0x8010030C 44819000 */ mtc1 $at, $f18 -/* 092692 0x80100310 240B0001 */ li $t3, 1 -/* 092693 0x80100314 46125481 */ sub.s $f18, $f10, $f18 -/* 092694 0x80100318 44CBF800 */ ctc1 $t3, $31 -/* 092695 0x8010031C 00000000 */ nop -/* 092696 0x80100320 460094A4 */ cvt.w.s $f18, $f18 -/* 092697 0x80100324 444BF800 */ cfc1 $t3, $31 -/* 092698 0x80100328 00000000 */ nop -/* 092699 0x8010032C 316B0078 */ andi $t3, $t3, 0X78 -/* 092700 0x80100330 15600005 */ bnez $t3, .L_80100348 -/* 092701 0x80100334 00000000 */ nop -/* 092702 0x80100338 440B9000 */ mfc1 $t3, $f18 -/* 092703 0x8010033C 3C018000 */ lui $at, 0x8000 -/* 092704 0x80100340 10000007 */ b .L_80100360 -/* 092705 0x80100344 01615825 */ or $t3, $t3, $at -.L_80100348: -/* 092706 0x80100348 10000005 */ b .L_80100360 -/* 092707 0x8010034C 240BFFFF */ li $t3, -1 -/* 092708 0x80100350 440B9000 */ mfc1 $t3, $f18 -.L_80100354: -/* 092709 0x80100354 00000000 */ nop -/* 092710 0x80100358 0560FFFB */ bltz $t3, .L_80100348 -/* 092711 0x8010035C 00000000 */ nop -.L_80100360: -/* 092712 0x80100360 A0EB0001 */ sb $t3, 0X1($a3) -/* 092713 0x80100364 908C0002 */ lbu $t4, 0X2($a0) -/* 092714 0x80100368 44CAF800 */ ctc1 $t2, $31 -/* 092715 0x8010036C 3C014F80 */ lui $at, 0x4F80 -/* 092716 0x80100370 448C3000 */ mtc1 $t4, $f6 -/* 092717 0x80100374 05810004 */ bgez $t4, .L_80100388 -/* 092718 0x80100378 46803020 */ cvt.s.w $f0, $f6 -/* 092719 0x8010037C 44812000 */ mtc1 $at, $f4 -/* 092720 0x80100380 00000000 */ nop -/* 092721 0x80100384 46040000 */ add.s $f0, $f0, $f4 -.L_80100388: -/* 092722 0x80100388 90AD0002 */ lbu $t5, 0X2($a1) -/* 092723 0x8010038C 3C014F80 */ lui $at, 0x4F80 -/* 092724 0x80100390 448D4000 */ mtc1 $t5, $f8 -/* 092725 0x80100394 05A10004 */ bgez $t5, .L_801003A8 -/* 092726 0x80100398 46804420 */ cvt.s.w $f16, $f8 -/* 092727 0x8010039C 44815000 */ mtc1 $at, $f10 -/* 092728 0x801003A0 00000000 */ nop -/* 092729 0x801003A4 460A8400 */ add.s $f16, $f16, $f10 -.L_801003A8: -/* 092730 0x801003A8 46008481 */ sub.s $f18, $f16, $f0 -/* 092731 0x801003AC 240F0001 */ li $t7, 1 -/* 092732 0x801003B0 3C014F00 */ lui $at, 0x4F00 -/* 092733 0x801003B4 460C9182 */ mul.s $f6, $f18, $f12 -/* 092734 0x801003B8 46003100 */ add.s $f4, $f6, $f0 -/* 092735 0x801003BC 444EF800 */ cfc1 $t6, $31 -/* 092736 0x801003C0 44CFF800 */ ctc1 $t7, $31 -/* 092737 0x801003C4 00000000 */ nop -/* 092738 0x801003C8 46002224 */ cvt.w.s $f8, $f4 -/* 092739 0x801003CC 444FF800 */ cfc1 $t7, $31 -/* 092740 0x801003D0 00000000 */ nop -/* 092741 0x801003D4 31EF0078 */ andi $t7, $t7, 0X78 -/* 092742 0x801003D8 51E00013 */ beqzl $t7, .L_80100428 -/* 092743 0x801003DC 440F4000 */ mfc1 $t7, $f8 -/* 092744 0x801003E0 44814000 */ mtc1 $at, $f8 -/* 092745 0x801003E4 240F0001 */ li $t7, 1 -/* 092746 0x801003E8 46082201 */ sub.s $f8, $f4, $f8 -/* 092747 0x801003EC 44CFF800 */ ctc1 $t7, $31 -/* 092748 0x801003F0 00000000 */ nop -/* 092749 0x801003F4 46004224 */ cvt.w.s $f8, $f8 -/* 092750 0x801003F8 444FF800 */ cfc1 $t7, $31 -/* 092751 0x801003FC 00000000 */ nop -/* 092752 0x80100400 31EF0078 */ andi $t7, $t7, 0X78 -/* 092753 0x80100404 15E00005 */ bnez $t7, .L_8010041C -/* 092754 0x80100408 00000000 */ nop -/* 092755 0x8010040C 440F4000 */ mfc1 $t7, $f8 -/* 092756 0x80100410 3C018000 */ lui $at, 0x8000 -/* 092757 0x80100414 10000007 */ b .L_80100434 -/* 092758 0x80100418 01E17825 */ or $t7, $t7, $at -.L_8010041C: -/* 092759 0x8010041C 10000005 */ b .L_80100434 -/* 092760 0x80100420 240FFFFF */ li $t7, -1 -/* 092761 0x80100424 440F4000 */ mfc1 $t7, $f8 -.L_80100428: -/* 092762 0x80100428 00000000 */ nop -/* 092763 0x8010042C 05E0FFFB */ bltz $t7, .L_8010041C -/* 092764 0x80100430 00000000 */ nop -.L_80100434: -/* 092765 0x80100434 44CEF800 */ ctc1 $t6, $31 -/* 092766 0x80100438 A0EF0002 */ sb $t7, 0X2($a3) -/* 092767 0x8010043C 00000000 */ nop -/* 092768 0x80100440 03E00008 */ jr $ra -/* 092769 0x80100444 00000000 */ nop -) - -#endif - -f32 func_80100448(z_Vector3D* a0, z_Vector3D* a1, f32 a2) { - z_Vector3D sp24; - f32 f2; - f32 f0; - - func_800FF5F4(a1, a0, &sp24); - f0 = func_8017A6D4(&sp24); - if (a2 < f0) { - f2 = a2 / f0; - f0 = f0 - a2; - a0->x = a0->x + f2 * sp24.x; - a0->y = a0->y + f2 * sp24.y; - a0->z = a0->z + f2 * sp24.z; - } else { - func_800FF50C(a0, a1); - f0 = 0; - } - - return f0; -} - -void func_801004FC(void) {} - -UNK_TYPE func_80100504(u32 a0) { - return(D_801F8180[(a0 << 4) >> 28] + (a0 & 0xFFFFFF)) + 0x80000000; -} - -UNK_TYPE func_8010053C(u32 a0) { - if ((a0 >> 28) == 0) { - return a0; - } - - return(D_801F8180[(a0 << 4) >> 28] + (a0 & 0xFFFFFF)) + 0x80000000; -} - -UNK_TYPE func_80100584(UNK_TYPE a0) { - if (a0 == 0) { - return 0; - } else { - return a0 + 0x80000000; - } -} - -UNK_TYPE func_801005A0(UNK_TYPE a0) { - if (a0 == 0) { - return 0; - } else { - return a0 + 0x80000000; - } -} \ No newline at end of file diff --git a/src/code/z_lib.c b/src/code/z_lib.c new file mode 100644 index 000000000..a8527c588 --- /dev/null +++ b/src/code/z_lib.c @@ -0,0 +1,1323 @@ +#include +#include + +#pragma intrinsic (sqrtf) +extern float fabsf(float); +#pragma intrinsic (fabsf) + +void* func_800FEC90(void* dst, void* src, size_t n) { + _bcopy(src, dst, n); + + return dst; +} + +#ifdef NONMATCHING + +void* func_800FECC0(u8* a0, u32 a1, u32 a2) { + u8* v0; + + // XXX: realloc is messed up + if (a1 == 0) { + _blkclr((void*)a0, (u32)a2); + + return a0; + } + + for (v0 = a0; a2 != 0; a2--) { + *v0++ = a1; + } + + return a0; +} + +#else + +GLOBAL_ASM( +glabel func_800FECC0 +/* 091264 0x800FECC0 27BDFFE8 */ addiu $sp, $sp, -24 +/* 091265 0x800FECC4 AFBF0014 */ sw $ra, 0X14($sp) +/* 091266 0x800FECC8 AFA40018 */ sw $a0, 0X18($sp) +/* 091267 0x800FECCC 14A00006 */ bnez $a1, .L_800FECE8 +/* 091268 0x800FECD0 8FA20018 */ lw $v0, 0X18($sp) +/* 091269 0x800FECD4 8FA40018 */ lw $a0, 0X18($sp) +/* 091270 0x800FECD8 0C02258C */ jal _blkclr +/* 091271 0x800FECDC 00C02825 */ move $a1, $a2 +/* 091272 0x800FECE0 10000014 */ b .L_800FED34 +/* 091273 0x800FECE4 8FA20018 */ lw $v0, 0X18($sp) +.L_800FECE8: +/* 091274 0x800FECE8 18C00011 */ blez $a2, .L_800FED30 +/* 091275 0x800FECEC 00C01825 */ move $v1, $a2 +/* 091276 0x800FECF0 30C70003 */ andi $a3, $a2, 0X3 +/* 091277 0x800FECF4 00073823 */ negu $a3, $a3 +/* 091278 0x800FECF8 10E00006 */ beqz $a3, .L_800FED14 +/* 091279 0x800FECFC 00E62021 */ addu $a0, $a3, $a2 +.L_800FED00: +/* 091280 0x800FED00 2463FFFF */ addiu $v1, $v1, -1 +/* 091281 0x800FED04 A0450000 */ sb $a1, 0X0($v0) +/* 091282 0x800FED08 1483FFFD */ bne $a0, $v1, .L_800FED00 +/* 091283 0x800FED0C 24420001 */ addiu $v0, $v0, 1 +/* 091284 0x800FED10 10600007 */ beqz $v1, .L_800FED30 +.L_800FED14: +/* 091285 0x800FED14 2463FFFC */ addiu $v1, $v1, -4 +/* 091286 0x800FED18 A0450001 */ sb $a1, 0X1($v0) +/* 091287 0x800FED1C A0450002 */ sb $a1, 0X2($v0) +/* 091288 0x800FED20 A0450003 */ sb $a1, 0X3($v0) +/* 091289 0x800FED24 24420004 */ addiu $v0, $v0, 4 +/* 091290 0x800FED28 1460FFFA */ bnez $v1, .L_800FED14 +/* 091291 0x800FED2C A045FFFC */ sb $a1, -0X4($v0) +.L_800FED30: +/* 091292 0x800FED30 8FA20018 */ lw $v0, 0X18($sp) +.L_800FED34: +/* 091293 0x800FED34 8FBF0014 */ lw $ra, 0X14($sp) +/* 091294 0x800FED38 27BD0018 */ addiu $sp, $sp, 24 +/* 091295 0x800FED3C 03E00008 */ jr $ra +/* 091296 0x800FED40 00000000 */ nop +) + +#endif + +f32 func_800FED44(s16 a0) { + return coss(a0) * D_801DDA80; +} + +f32 func_800FED84(s16 a0) { + return sins(a0) * D_801DDA84; +} + +s32 func_800FEDC4(s32 a0, s32 a1, s32 a2) { + s32 v1; + + if (a1 >= a0) { + v1 = a0 + a2; + if (a1 >= v1) { + return v1; + } + } else { + v1 = a0 - a2; + if (v1 >= a1) { + return v1; + } + } + return a1; +} + +UNK_RET func_800FEE08(u32* a0, u32 a1, u32 a2) { + *a0 = func_800FEDC4(*a0, a1, a2); +} + +UNK_TYPE func_800FEE34(u32* a0, u32 a1, u32 a2) { + func_800FEE08(a0, a1, a2); + + return a1 == *a0; +} + +UNK_TYPE func_800FEE70(s16* a0, s16 a1, s16 a2) { + f32 f0; + + if (a2 != 0) { + f0 = D_801D1508; + + if ((s16)(*a0 - a1) > 0) { + a2 = -a2; + } + + *a0 += (s16)(a2 * f0); + + if (((s16)(*a0 - a1) * a2) >= 0) { + *a0 = a1; + + return 1; + } + } else if (a1 == *a0) { + return 1; + } + + return 0; +} + +UNK_TYPE func_800FEF2C(s16* a0, s16 a1, s16 a2) { + if (a2 != 0) { + if (a1 < *a0) { + a2 = -a2; + } + + *a0 += a2; + + if (((*a0 - a1) * a2) >= 0) { + *a0 = a1; + + return 1; + } + } else if (a1 == *a0) { + return 1; + } + + return 0; +} + +UNK_TYPE func_800FEFB4(s8* a0, s8 a1, s8 a2) { + if (a2 != 0) { + if (a1 < *a0) { + a2 = -a2; + } + + *a0 += a2; + + if (((*a0 - a1) * a2) >= 0) { + *a0 = a1; + + return 1; + } + } else if (a1 == *a0) { + return 1; + } + + return 0; +} + +#ifdef NONMATCHING + +UNK_TYPE func_800FF03C(f32* a0, f32 a1, f32 a2) { + if (a2 != 0) { + // XXX: regalloc is messed up + if (a1 < *a0) { + a2 = -a2; + } + + *a0 += a2; + + if (((*a0 - a1) * a2) >= 0) { + *a0 = a1; + + return 1; + } + } else if (a1 != *a0) { + return 1; + } + + return 0; +} + +#else + +GLOBAL_ASM( +glabel func_800FF03C +/* 091487 0x800FF03C 44857000 */ mtc1 $a1, $f14 +/* 091488 0x800FF040 44866000 */ mtc1 $a2, $f12 +/* 091489 0x800FF044 44802000 */ mtc1 $zero, $f4 +/* 091490 0x800FF048 00000000 */ nop +/* 091491 0x800FF04C 46046032 */ c.eq.s $f12, $f4 +/* 091492 0x800FF050 00000000 */ nop +/* 091493 0x800FF054 45030015 */ bc1tl .L_800FF0AC +/* 091494 0x800FF058 C4840000 */ lwc1 $f4, 0X0($a0) +/* 091495 0x800FF05C C4800000 */ lwc1 $f0, 0X0($a0) +/* 091496 0x800FF060 24020001 */ li $v0, 1 +/* 091497 0x800FF064 4600703C */ c.lt.s $f14, $f0 +/* 091498 0x800FF068 00000000 */ nop +/* 091499 0x800FF06C 45020003 */ bc1fl .L_800FF07C +/* 091500 0x800FF070 460C0180 */ add.s $f6, $f0, $f12 +/* 091501 0x800FF074 46006307 */ neg.s $f12, $f12 +/* 091502 0x800FF078 460C0180 */ add.s $f6, $f0, $f12 +.L_800FF07C: +/* 091503 0x800FF07C 44809000 */ mtc1 $zero, $f18 +/* 091504 0x800FF080 E4860000 */ swc1 $f6, 0X0($a0) +/* 091505 0x800FF084 C4880000 */ lwc1 $f8, 0X0($a0) +/* 091506 0x800FF088 460E4281 */ sub.s $f10, $f8, $f14 +/* 091507 0x800FF08C 460C5402 */ mul.s $f16, $f10, $f12 +/* 091508 0x800FF090 4610903E */ c.le.s $f18, $f16 +/* 091509 0x800FF094 00000000 */ nop +/* 091510 0x800FF098 4502000B */ bc1fl .L_800FF0C8 +/* 091511 0x800FF09C 00001025 */ move $v0, $zero +/* 091512 0x800FF0A0 03E00008 */ jr $ra +/* 091513 0x800FF0A4 E48E0000 */ swc1 $f14, 0X0($a0) +/* 091514 0x800FF0A8 C4840000 */ lwc1 $f4, 0X0($a0) +.L_800FF0AC: +/* 091515 0x800FF0AC 46047032 */ c.eq.s $f14, $f4 +/* 091516 0x800FF0B0 00000000 */ nop +/* 091517 0x800FF0B4 45020004 */ bc1fl .L_800FF0C8 +/* 091518 0x800FF0B8 00001025 */ move $v0, $zero +/* 091519 0x800FF0BC 03E00008 */ jr $ra +/* 091520 0x800FF0C0 24020001 */ li $v0, 1 +/* 091521 0x800FF0C4 00001025 */ move $v0, $zero +.L_800FF0C8: +/* 091522 0x800FF0C8 03E00008 */ jr $ra +/* 091523 0x800FF0CC 00000000 */ nop +) + +#endif + +#ifdef NONMATCHING + +UNK_TYPE func_800FF0D0(s16* a0, s16 a1, s16 a2) { + s32 v0 = *a0; + + // XXX: regalloc is messed up + *a0 += a2; + + if (((*a0 - a1) * (v0 - a1)) <= 0) { + *a0 = a1; + + return 1; + } + + return 0; +} + +#else + +GLOBAL_ASM( +glabel func_800FF0D0 +/* 091524 0x800FF0D0 AFA50004 */ sw $a1, 0X4($sp) +/* 091525 0x800FF0D4 AFA60008 */ sw $a2, 0X8($sp) +/* 091526 0x800FF0D8 00063400 */ sll $a2, $a2, 16 +/* 091527 0x800FF0DC 00052C00 */ sll $a1, $a1, 16 +/* 091528 0x800FF0E0 00052C03 */ sra $a1, $a1, 16 +/* 091529 0x800FF0E4 00063403 */ sra $a2, $a2, 16 +/* 091530 0x800FF0E8 84820000 */ lh $v0, 0X0($a0) +/* 091531 0x800FF0EC 00467021 */ addu $t6, $v0, $a2 +/* 091532 0x800FF0F0 A48E0000 */ sh $t6, 0X0($a0) +/* 091533 0x800FF0F4 848F0000 */ lh $t7, 0X0($a0) +/* 091534 0x800FF0F8 00454823 */ subu $t1, $v0, $a1 +/* 091535 0x800FF0FC 00095400 */ sll $t2, $t1, 16 +/* 091536 0x800FF100 01E5C023 */ subu $t8, $t7, $a1 +/* 091537 0x800FF104 0018CC00 */ sll $t9, $t8, 16 +/* 091538 0x800FF108 00194403 */ sra $t0, $t9, 16 +/* 091539 0x800FF10C 000A5C03 */ sra $t3, $t2, 16 +/* 091540 0x800FF110 010B0019 */ multu $t0, $t3 +/* 091541 0x800FF114 00001025 */ move $v0, $zero +/* 091542 0x800FF118 00006012 */ mflo $t4 +/* 091543 0x800FF11C 1D800004 */ bgtz $t4, .L_800FF130 +/* 091544 0x800FF120 00000000 */ nop +/* 091545 0x800FF124 A4850000 */ sh $a1, 0X0($a0) +/* 091546 0x800FF128 03E00008 */ jr $ra +/* 091547 0x800FF12C 24020001 */ li $v0, 1 +.L_800FF130: +/* 091548 0x800FF130 03E00008 */ jr $ra +/* 091549 0x800FF134 00000000 */ nop +) + +#endif + +#ifdef NONMATCHING + +UNK_RET func_800FF138() { + +} + +#else + +GLOBAL_ASM( +glabel func_800FF138 +/* 091550 0x800FF138 AFA50004 */ sw $a1, 0X4($sp) +/* 091551 0x800FF13C AFA60008 */ sw $a2, 0X8($sp) +/* 091552 0x800FF140 00063400 */ sll $a2, $a2, 16 +/* 091553 0x800FF144 00052C00 */ sll $a1, $a1, 16 +/* 091554 0x800FF148 00052C03 */ sra $a1, $a1, 16 +/* 091555 0x800FF14C 00063403 */ sra $a2, $a2, 16 +/* 091556 0x800FF150 84830000 */ lh $v1, 0X0($a0) +/* 091557 0x800FF154 34018000 */ ori $at, $zero, 0X8000 +/* 091558 0x800FF158 3C0FFFFF */ lui $t7, 0xFFFF +/* 091559 0x800FF15C 00A31023 */ subu $v0, $a1, $v1 +/* 091560 0x800FF160 04410004 */ bgez $v0, .L_800FF174 +/* 091561 0x800FF164 0041082A */ slt $at, $v0, $at +/* 091562 0x800FF168 00063023 */ negu $a2, $a2 +/* 091563 0x800FF16C 00063400 */ sll $a2, $a2, 16 +/* 091564 0x800FF170 00063403 */ sra $a2, $a2, 16 +.L_800FF174: +/* 091565 0x800FF174 14200007 */ bnez $at, .L_800FF194 +/* 091566 0x800FF178 00027023 */ negu $t6, $v0 +/* 091567 0x800FF17C 00063023 */ negu $a2, $a2 +/* 091568 0x800FF180 00063400 */ sll $a2, $a2, 16 +/* 091569 0x800FF184 35EF0001 */ ori $t7, $t7, 0X1 +/* 091570 0x800FF188 00063403 */ sra $a2, $a2, 16 +/* 091571 0x800FF18C 10000009 */ b .L_800FF1B4 +/* 091572 0x800FF190 01EE1023 */ subu $v0, $t7, $t6 +.L_800FF194: +/* 091573 0x800FF194 28418001 */ slti $at, $v0, -32767 +/* 091574 0x800FF198 10200006 */ beqz $at, .L_800FF1B4 +/* 091575 0x800FF19C 00000000 */ nop +/* 091576 0x800FF1A0 00063023 */ negu $a2, $a2 +/* 091577 0x800FF1A4 3401FFFF */ ori $at, $zero, 0XFFFF +/* 091578 0x800FF1A8 00063400 */ sll $a2, $a2, 16 +/* 091579 0x800FF1AC 00411021 */ addu $v0, $v0, $at +/* 091580 0x800FF1B0 00063403 */ sra $a2, $a2, 16 +.L_800FF1B4: +/* 091581 0x800FF1B4 10C0000A */ beqz $a2, .L_800FF1E0 +/* 091582 0x800FF1B8 00000000 */ nop +/* 091583 0x800FF1BC 00C20019 */ multu $a2, $v0 +/* 091584 0x800FF1C0 0066C021 */ addu $t8, $v1, $a2 +/* 091585 0x800FF1C4 A4980000 */ sh $t8, 0X0($a0) +/* 091586 0x800FF1C8 24020001 */ li $v0, 1 +/* 091587 0x800FF1CC 0000C812 */ mflo $t9 +/* 091588 0x800FF1D0 5F200008 */ bgtzl $t9, .L_800FF1F4 +/* 091589 0x800FF1D4 00001025 */ move $v0, $zero +/* 091590 0x800FF1D8 03E00008 */ jr $ra +/* 091591 0x800FF1DC A4850000 */ sh $a1, 0X0($a0) +.L_800FF1E0: +/* 091592 0x800FF1E0 54A30004 */ bnel $a1, $v1, .L_800FF1F4 +/* 091593 0x800FF1E4 00001025 */ move $v0, $zero +/* 091594 0x800FF1E8 03E00008 */ jr $ra +/* 091595 0x800FF1EC 24020001 */ li $v0, 1 +/* 091596 0x800FF1F0 00001025 */ move $v0, $zero +.L_800FF1F4: +/* 091597 0x800FF1F4 03E00008 */ jr $ra +/* 091598 0x800FF1F8 00000000 */ nop +) + +#endif + +#ifdef NONMATCHING + +UNK_RET func_800FF1FC() { + +} + +#else + +GLOBAL_ASM( +glabel func_800FF1FC +/* 091599 0x800FF1FC AFA50004 */ sw $a1, 0X4($sp) +/* 091600 0x800FF200 AFA60008 */ sw $a2, 0X8($sp) +/* 091601 0x800FF204 AFA7000C */ sw $a3, 0XC($sp) +/* 091602 0x800FF208 00073C00 */ sll $a3, $a3, 16 +/* 091603 0x800FF20C 00063400 */ sll $a2, $a2, 16 +/* 091604 0x800FF210 00052C00 */ sll $a1, $a1, 16 +/* 091605 0x800FF214 00052C03 */ sra $a1, $a1, 16 +/* 091606 0x800FF218 00063403 */ sra $a2, $a2, 16 +/* 091607 0x800FF21C 00073C03 */ sra $a3, $a3, 16 +/* 091608 0x800FF220 84820000 */ lh $v0, 0X0($a0) +/* 091609 0x800FF224 00071C00 */ sll $v1, $a3, 16 +/* 091610 0x800FF228 00031C03 */ sra $v1, $v1, 16 +/* 091611 0x800FF22C 00A27023 */ subu $t6, $a1, $v0 +/* 091612 0x800FF230 05C00004 */ bltz $t6, .L_800FF244 +/* 091613 0x800FF234 00A2082A */ slt $at, $a1, $v0 +/* 091614 0x800FF238 00061C00 */ sll $v1, $a2, 16 +/* 091615 0x800FF23C 10000001 */ b .L_800FF244 +/* 091616 0x800FF240 00031C03 */ sra $v1, $v1, 16 +.L_800FF244: +/* 091617 0x800FF244 10600011 */ beqz $v1, .L_800FF28C +/* 091618 0x800FF248 00000000 */ nop +/* 091619 0x800FF24C 50200005 */ beqzl $at, .L_800FF264 +/* 091620 0x800FF250 00437821 */ addu $t7, $v0, $v1 +/* 091621 0x800FF254 00031823 */ negu $v1, $v1 +/* 091622 0x800FF258 00031C00 */ sll $v1, $v1, 16 +/* 091623 0x800FF25C 00031C03 */ sra $v1, $v1, 16 +/* 091624 0x800FF260 00437821 */ addu $t7, $v0, $v1 +.L_800FF264: +/* 091625 0x800FF264 A48F0000 */ sh $t7, 0X0($a0) +/* 091626 0x800FF268 84980000 */ lh $t8, 0X0($a0) +/* 091627 0x800FF26C 24020001 */ li $v0, 1 +/* 091628 0x800FF270 0305C823 */ subu $t9, $t8, $a1 +/* 091629 0x800FF274 03230019 */ multu $t9, $v1 +/* 091630 0x800FF278 00004012 */ mflo $t0 +/* 091631 0x800FF27C 05020008 */ bltzl $t0, .L_800FF2A0 +/* 091632 0x800FF280 00001025 */ move $v0, $zero +/* 091633 0x800FF284 03E00008 */ jr $ra +/* 091634 0x800FF288 A4850000 */ sh $a1, 0X0($a0) +.L_800FF28C: +/* 091635 0x800FF28C 54A20004 */ bnel $a1, $v0, .L_800FF2A0 +/* 091636 0x800FF290 00001025 */ move $v0, $zero +/* 091637 0x800FF294 03E00008 */ jr $ra +/* 091638 0x800FF298 24020001 */ li $v0, 1 +/* 091639 0x800FF29C 00001025 */ move $v0, $zero +.L_800FF2A0: +/* 091640 0x800FF2A0 03E00008 */ jr $ra +/* 091641 0x800FF2A4 00000000 */ nop +) + +#endif + +#ifdef NONMATCHING + +UNK_RET func_800FF2A8() { + +} + +#else + +GLOBAL_ASM( +glabel func_800FF2A8 +/* 091642 0x800FF2A8 44857000 */ mtc1 $a1, $f14 +/* 091643 0x800FF2AC 44866000 */ mtc1 $a2, $f12 +/* 091644 0x800FF2B0 00001025 */ move $v0, $zero +/* 091645 0x800FF2B4 C4820000 */ lwc1 $f2, 0X0($a0) +/* 091646 0x800FF2B8 44803000 */ mtc1 $zero, $f6 +/* 091647 0x800FF2BC 460C1100 */ add.s $f4, $f2, $f12 +/* 091648 0x800FF2C0 460E1401 */ sub.s $f16, $f2, $f14 +/* 091649 0x800FF2C4 E4840000 */ swc1 $f4, 0X0($a0) +/* 091650 0x800FF2C8 C4880000 */ lwc1 $f8, 0X0($a0) +/* 091651 0x800FF2CC 460E4281 */ sub.s $f10, $f8, $f14 +/* 091652 0x800FF2D0 46105482 */ mul.s $f18, $f10, $f16 +/* 091653 0x800FF2D4 4606903E */ c.le.s $f18, $f6 +/* 091654 0x800FF2D8 00000000 */ nop +/* 091655 0x800FF2DC 45000004 */ bc1f .L_800FF2F0 +/* 091656 0x800FF2E0 00000000 */ nop +/* 091657 0x800FF2E4 E48E0000 */ swc1 $f14, 0X0($a0) +/* 091658 0x800FF2E8 03E00008 */ jr $ra +/* 091659 0x800FF2EC 24020001 */ li $v0, 1 +.L_800FF2F0: +/* 091660 0x800FF2F0 03E00008 */ jr $ra +/* 091661 0x800FF2F4 00000000 */ nop +) + +#endif + +#ifdef NONMATCHING + +UNK_RET func_800FF2F8() { + +} + +#else + +GLOBAL_ASM( +glabel func_800FF2F8 +/* 091662 0x800FF2F8 44856000 */ mtc1 $a1, $f12 +/* 091663 0x800FF2FC 44867000 */ mtc1 $a2, $f14 +/* 091664 0x800FF300 AFA7000C */ sw $a3, 0XC($sp) +/* 091665 0x800FF304 C4800000 */ lwc1 $f0, 0X0($a0) +/* 091666 0x800FF308 C7A2000C */ lwc1 $f2, 0XC($sp) +/* 091667 0x800FF30C 460C003E */ c.le.s $f0, $f12 +/* 091668 0x800FF310 00000000 */ nop +/* 091669 0x800FF314 45000003 */ bc1f .L_800FF324 +/* 091670 0x800FF318 00000000 */ nop +/* 091671 0x800FF31C 10000001 */ b .L_800FF324 +/* 091672 0x800FF320 46007086 */ mov.s $f2, $f14 +.L_800FF324: +/* 091673 0x800FF324 44807000 */ mtc1 $zero, $f14 +/* 091674 0x800FF328 00000000 */ nop +/* 091675 0x800FF32C 460E1032 */ c.eq.s $f2, $f14 +/* 091676 0x800FF330 00000000 */ nop +/* 091677 0x800FF334 45030012 */ bc1tl .L_800FF380 +/* 091678 0x800FF338 46006032 */ c.eq.s $f12, $f0 +/* 091679 0x800FF33C 4600603C */ c.lt.s $f12, $f0 +/* 091680 0x800FF340 24020001 */ li $v0, 1 +/* 091681 0x800FF344 45020003 */ bc1fl .L_800FF354 +/* 091682 0x800FF348 46020100 */ add.s $f4, $f0, $f2 +/* 091683 0x800FF34C 46001087 */ neg.s $f2, $f2 +/* 091684 0x800FF350 46020100 */ add.s $f4, $f0, $f2 +.L_800FF354: +/* 091685 0x800FF354 E4840000 */ swc1 $f4, 0X0($a0) +/* 091686 0x800FF358 C4860000 */ lwc1 $f6, 0X0($a0) +/* 091687 0x800FF35C 460C3201 */ sub.s $f8, $f6, $f12 +/* 091688 0x800FF360 46024282 */ mul.s $f10, $f8, $f2 +/* 091689 0x800FF364 460A703E */ c.le.s $f14, $f10 +/* 091690 0x800FF368 00000000 */ nop +/* 091691 0x800FF36C 4502000A */ bc1fl .L_800FF398 +/* 091692 0x800FF370 00001025 */ move $v0, $zero +/* 091693 0x800FF374 03E00008 */ jr $ra +/* 091694 0x800FF378 E48C0000 */ swc1 $f12, 0X0($a0) +/* 091695 0x800FF37C 46006032 */ c.eq.s $f12, $f0 +.L_800FF380: +/* 091696 0x800FF380 00000000 */ nop +/* 091697 0x800FF384 45020004 */ bc1fl .L_800FF398 +/* 091698 0x800FF388 00001025 */ move $v0, $zero +/* 091699 0x800FF38C 03E00008 */ jr $ra +/* 091700 0x800FF390 24020001 */ li $v0, 1 +/* 091701 0x800FF394 00001025 */ move $v0, $zero +.L_800FF398: +/* 091702 0x800FF398 03E00008 */ jr $ra +/* 091703 0x800FF39C 00000000 */ nop +) + +#endif + +#ifdef NONMATCHING + +UNK_RET func_800FF3A0() { + +} + +#else + +GLOBAL_ASM( +glabel func_800FF3A0 +/* 091704 0x800FF3A0 3C014270 */ lui $at, 0x4270 +/* 091705 0x800FF3A4 27BDFFE8 */ addiu $sp, $sp, -24 +/* 091706 0x800FF3A8 44817000 */ mtc1 $at, $f14 +/* 091707 0x800FF3AC AFBF0014 */ sw $ra, 0X14($sp) +/* 091708 0x800FF3B0 80CE0014 */ lb $t6, 0X14($a2) +/* 091709 0x800FF3B4 80CF0015 */ lb $t7, 0X15($a2) +/* 091710 0x800FF3B8 44808000 */ mtc1 $zero, $f16 +/* 091711 0x800FF3BC 448E2000 */ mtc1 $t6, $f4 +/* 091712 0x800FF3C0 448F3000 */ mtc1 $t7, $f6 +/* 091713 0x800FF3C4 468020A0 */ cvt.s.w $f2, $f4 +/* 091714 0x800FF3C8 46803320 */ cvt.s.w $f12, $f6 +/* 091715 0x800FF3CC 46021202 */ mul.s $f8, $f2, $f2 +/* 091716 0x800FF3D0 00000000 */ nop +/* 091717 0x800FF3D4 460C6282 */ mul.s $f10, $f12, $f12 +/* 091718 0x800FF3D8 460A4000 */ add.s $f0, $f8, $f10 +/* 091719 0x800FF3DC 46000004 */ sqrt.s $f0, $f0 +/* 091720 0x800FF3E0 4600703C */ c.lt.s $f14, $f0 +/* 091721 0x800FF3E4 00000000 */ nop +/* 091722 0x800FF3E8 45000003 */ bc1f .L_800FF3F8 +/* 091723 0x800FF3EC 00000000 */ nop +/* 091724 0x800FF3F0 10000002 */ b .L_800FF3FC +/* 091725 0x800FF3F4 E48E0000 */ swc1 $f14, 0X0($a0) +.L_800FF3F8: +/* 091726 0x800FF3F8 E4800000 */ swc1 $f0, 0X0($a0) +.L_800FF3FC: +/* 091727 0x800FF3FC 4600803C */ c.lt.s $f16, $f0 +/* 091728 0x800FF400 00000000 */ nop +/* 091729 0x800FF404 4502000E */ bc1fl .L_800FF440 +/* 091730 0x800FF408 A4A00000 */ sh $zero, 0X0($a1) +/* 091731 0x800FF40C 80D80002 */ lb $t8, 0X2($a2) +/* 091732 0x800FF410 80D90003 */ lb $t9, 0X3($a2) +/* 091733 0x800FF414 AFA5001C */ sw $a1, 0X1C($sp) +/* 091734 0x800FF418 44989000 */ mtc1 $t8, $f18 +/* 091735 0x800FF41C 44992000 */ mtc1 $t9, $f4 +/* 091736 0x800FF420 468090A0 */ cvt.s.w $f2, $f18 +/* 091737 0x800FF424 46802320 */ cvt.s.w $f12, $f4 +/* 091738 0x800FF428 0C060040 */ jal func_80180100 +/* 091739 0x800FF42C 46001387 */ neg.s $f14, $f2 +/* 091740 0x800FF430 8FA5001C */ lw $a1, 0X1C($sp) +/* 091741 0x800FF434 10000002 */ b .L_800FF440 +/* 091742 0x800FF438 A4A20000 */ sh $v0, 0X0($a1) +/* 091743 0x800FF43C A4A00000 */ sh $zero, 0X0($a1) +.L_800FF440: +/* 091744 0x800FF440 8FBF0014 */ lw $ra, 0X14($sp) +/* 091745 0x800FF444 27BD0018 */ addiu $sp, $sp, 24 +/* 091746 0x800FF448 03E00008 */ jr $ra +/* 091747 0x800FF44C 00000000 */ nop +) + +#endif + +s16 func_800FF450(s16 a0, s16 a1) { + return (s16)(func_80086FDC() * a1) + a0; +} + +s16 func_800FF4A4(s16 a0, s16 a1, s16 a2) { + return (s16)(func_80086FDC() * a2) * a1 + a0; +} + +UNK_RET func_800FF50C(z_Vector3D* dst, z_Vector3D* src) { + f32 x = src->x; + f32 y = src->y; + f32 z = src->z; + + dst->x = x; + dst->y = y; + dst->z = z; +} + +UNK_RET func_800FF52C(z_Vector3Ds16* dst, z_Vector3Ds16* src) { + s16 x = src->x; + s16 y = src->y; + s16 z = src->z; + + dst->x = x; + dst->y = y; + dst->z = z; +} + +UNK_RET func_800FF54C(z_Vector3D* dst, z_Vector3Ds16* src) { + f32 x = src->x; + f32 y = src->y; + f32 z = src->z; + + dst->x = x; + dst->y = y; + dst->z = z; +} + +UNK_RET func_800FF584(z_Vector3Ds16* dst, z_Vector3D* src) { + f32 x = src->x; + f32 y = src->y; + f32 z = src->z; + + dst->x = x; + dst->y = y; + dst->z = z; +} + +UNK_RET func_800FF5BC(z_Vector3D* a0, z_Vector3D* a1, z_Vector3D* a2) { + a2->x = a0->x + a1->x; + a2->y = a0->y + a1->y; + a2->z = a0->z + a1->z; +} + +UNK_RET func_800FF5F4(z_Vector3D* a0, z_Vector3D* a1, z_Vector3D* a2) { + a2->x = a0->x - a1->x; + a2->y = a0->y - a1->y; + a2->z = a0->z - a1->z; +} + +UNK_RET func_800FF62C(z_Vector3D* a0, z_Vector3Ds16* a1, z_Vector3Ds16* a2) { + a0->x = a1->x - a2->x; + a0->y = a1->y - a2->y; + a0->z = a1->z - a2->z; +} + +UNK_RET func_800FF688(z_Vector3D* a0, f32 a1) { + a0->x *= a1; + a0->y *= a1; + a0->z *= a1; +} + +UNK_RET func_800FF6C4(z_Vector3D* a0, f32 a1, z_Vector3D* a2) { + a2->x = a0->x * a1; + a2->y = a0->y * a1; + a2->z = a0->z * a1; +} + +UNK_RET func_800FF6F8(z_Vector3D* a0, z_Vector3D* a1, f32 a2, z_Vector3D* a3) { + a3->x = (a1->x - a0->x) * a2 + a0->x; + a3->y = (a1->y - a0->y) * a2 + a0->y; + a3->z = (a1->z - a0->z) * a2 + a0->z; +} + +UNK_RET func_800FF750(z_Vector3D* a0, z_Vector3D* a1, f32 a2, z_Vector3D* a3) { + a3->x = a1->x * a2 + a0->x; + a3->y = a1->y * a2 + a0->y; + a3->z = a1->z * a2 + a0->z; +} + +UNK_RET func_800FF79C(z_Vector3D* a0, f32 a1, z_Vector3D* a2) { + a2->x = func_801795C0(a1) + a0->x; + a2->y = func_801795C0(a1) + a0->y; + a2->z = func_801795C0(a1) + a0->z; +} + +void func_800FF810(z_Vector3D* a0, z_Vector3D* a1, f32 a2, z_Vector3D* a3) { + f32 f0 = func_800FF8D4(a0, a1, a3); + f32 f2; + + if (f0 == 0) { + return; + } + + f2 = a2 / f0; + + a3->x *= f2; + a3->y *= f2; + a3->z *= f2; +} + +f32 func_800FF884(z_Vector3D* a0, z_Vector3D* a1) { + z_Vector3D sp1C; + func_800FF5F4(a1, a0, &sp1C); + return sqrtf((sp1C.x * sp1C.x) + (sp1C.y * sp1C.y) + (sp1C.z * sp1C.z)); +} + +f32 func_800FF8D4(z_Vector3D* a0, z_Vector3D* a1, z_Vector3D* a2) { + func_800FF5F4(a1, a0, a2); + return sqrtf((a2->x * a2->x) + (a2->y * a2->y) + (a2->z * a2->z)); +} + +f32 func_800FF92C(z_Vector3D* a0, z_Vector3D* a1) { + f32 dx = a1->x - a0->x; + f32 dz = a1->z - a0->z; + return sqrtf((dx * dx) + (dz * dz)); +} + +f32 func_800FF960(z_Vector3D* a0, z_Vector3D* a1, f32* a2, f32* a3) { + *a2 = a1->x - a0->x; + *a3 = a1->z - a0->z; + return sqrtf((*a2 * *a2) + (*a3 * *a3)); +} + +#ifdef NONMATCHING + +UNK_RET func_800FF9A4(z_Vector3D* a0, z_Vector3D* a1, f32 a2) { + f32 sp24; + f32 sp20; + f32 f0 = func_800FF960(a1, a0, &sp24, &sp20); + f32 f2 = f0 - a2; + + if ((f0 >= a2) && (f2 != 0)) { + f2 /= f0; + } else { + f2 = 0; + } + + a0->x = a1->x + sp24 * f2; + a0->z = a1->z + sp20 * f2; +} + +#else + +GLOBAL_ASM( +glabel func_800FF9A4 +/* 092089 0x800FF9A4 27BDFFD8 */ addiu $sp, $sp, -40 +/* 092090 0x800FF9A8 AFA5002C */ sw $a1, 0X2C($sp) +/* 092091 0x800FF9AC 00802825 */ move $a1, $a0 +/* 092092 0x800FF9B0 AFBF0014 */ sw $ra, 0X14($sp) +/* 092093 0x800FF9B4 AFA40028 */ sw $a0, 0X28($sp) +/* 092094 0x800FF9B8 AFA60030 */ sw $a2, 0X30($sp) +/* 092095 0x800FF9BC 8FA4002C */ lw $a0, 0X2C($sp) +/* 092096 0x800FF9C0 27A60024 */ addiu $a2, $sp, 36 +/* 092097 0x800FF9C4 27A70020 */ addiu $a3, $sp, 32 +/* 092098 0x800FF9C8 0C03FE58 */ jal func_800FF960 +/* 092099 0x800FF9CC AFA50028 */ sw $a1, 0X28($sp) +/* 092100 0x800FF9D0 C7A20030 */ lwc1 $f2, 0X30($sp) +/* 092101 0x800FF9D4 44807000 */ mtc1 $zero, $f14 +/* 092102 0x800FF9D8 8FA2002C */ lw $v0, 0X2C($sp) +/* 092103 0x800FF9DC 4602003C */ c.lt.s $f0, $f2 +/* 092104 0x800FF9E0 8FA50028 */ lw $a1, 0X28($sp) +/* 092105 0x800FF9E4 C7A60024 */ lwc1 $f6, 0X24($sp) +/* 092106 0x800FF9E8 46020301 */ sub.s $f12, $f0, $f2 +/* 092107 0x800FF9EC 45020004 */ bc1fl .L_800FFA00 +/* 092108 0x800FF9F0 460E6032 */ c.eq.s $f12, $f14 +/* 092109 0x800FF9F4 44806000 */ mtc1 $zero, $f12 +/* 092110 0x800FF9F8 00000000 */ nop +/* 092111 0x800FF9FC 460E6032 */ c.eq.s $f12, $f14 +.L_800FFA00: +/* 092112 0x800FFA00 00000000 */ nop +/* 092113 0x800FFA04 45020004 */ bc1fl .L_800FFA18 +/* 092114 0x800FFA08 46006083 */ div.s $f2, $f12, $f0 +/* 092115 0x800FFA0C 10000002 */ b .L_800FFA18 +/* 092116 0x800FFA10 46007086 */ mov.s $f2, $f14 +/* 092117 0x800FFA14 46006083 */ div.s $f2, $f12, $f0 +.L_800FFA18: +/* 092118 0x800FFA18 46023202 */ mul.s $f8, $f6, $f2 +/* 092119 0x800FFA1C C4440000 */ lwc1 $f4, 0X0($v0) +/* 092120 0x800FFA20 46006006 */ mov.s $f0, $f12 +/* 092121 0x800FFA24 46082280 */ add.s $f10, $f4, $f8 +/* 092122 0x800FFA28 E4AA0000 */ swc1 $f10, 0X0($a1) +/* 092123 0x800FFA2C C7B20020 */ lwc1 $f18, 0X20($sp) +/* 092124 0x800FFA30 C4500008 */ lwc1 $f16, 0X8($v0) +/* 092125 0x800FFA34 46029182 */ mul.s $f6, $f18, $f2 +/* 092126 0x800FFA38 46068100 */ add.s $f4, $f16, $f6 +/* 092127 0x800FFA3C E4A40008 */ swc1 $f4, 0X8($a1) +/* 092128 0x800FFA40 8FBF0014 */ lw $ra, 0X14($sp) +/* 092129 0x800FFA44 03E00008 */ jr $ra +/* 092130 0x800FFA48 27BD0028 */ addiu $sp, $sp, 40 +) + +#endif + +f32 func_800FFA4C(z_Vector3D* a0, z_Vector3D* a1) { + return a1->y - a0->y; +} + +UNK_TYPE func_800FFA60(z_Vector3D* a0, z_Vector3D* a1) { + f32 f14 = a1->x - a0->x; + f32 f12 = a1->z - a0->z; + return func_80180100(f12, f14); +} + +UNK_TYPE func_800FFA94(z_Vector3D* a0, z_Vector3D* a1) { + return func_80180100(func_800FF92C(a0, a1), a0->y - a1->y); +} + +void func_800FFADC(z_Actor* a0, z_ActorCompInitEntry* a1) { + do { + D_801BE960[a1->type]((u8*)a0, a1); + } while ((a1++)->cont); +} + +UNK_RET func_800FFB54(u8* a0, z_ActorCompInitEntry* a1) { + *(u8*)(a0 + a1->offset) = (u8)(a1->value); +} + +UNK_RET func_800FFB70(u8* a0, z_ActorCompInitEntry* a1) { + *(u8*)(a0 + a1->offset) = (u8)(a1->value); +} + +UNK_RET func_800FFB8C(u8* a0, z_ActorCompInitEntry* a1) { + *(u16*)(a0 + a1->offset) = (u16)(a1->value); +} + +UNK_RET func_800FFBA8(u8* a0, z_ActorCompInitEntry* a1) { + *(u16*)(a0 + a1->offset) = (u16)(a1->value); +} + +UNK_RET func_800FFBC4(u8* a0, z_ActorCompInitEntry* a1) { + *(u32*)(a0 + a1->offset) = (u32)(a1->value); +} + +UNK_RET func_800FFBE0(u8* a0, z_ActorCompInitEntry* a1) { + *(u32*)(a0 + a1->offset) = (u32)(a1->value); +} + +UNK_RET func_800FFBFC(u8* a0, z_ActorCompInitEntry* a1) { + *(f32*)(a0 + a1->offset) = (f32)(a1->value); +} + +UNK_RET func_800FFC20(u8* a0, z_ActorCompInitEntry* a1) { + *(f32*)(a0 + a1->offset) = (f32)(a1->value) / 1000; +} + +UNK_RET func_800FFC50(u8* a0, z_ActorCompInitEntry* a1) { + z_Vector3D* v0 = (z_Vector3D*)(a0 + a1->offset); + f32 f0 = (f32)(a1->value); + + v0->z = f0; + v0->y = f0; + v0->x = f0; +} + +UNK_RET func_800FFC7C(u8* a0, z_ActorCompInitEntry* a1) { + z_Vector3D* v0 = (z_Vector3D*)(a0 + a1->offset); + f32 f0 = (f32)(a1->value) / 1000; + + v0->z = f0; + v0->y = f0; + v0->x = f0; +} + +UNK_RET func_800FFCB4(u8* a0, z_ActorCompInitEntry* a1) { + z_Vector3Ds16* v0 = (z_Vector3Ds16*)(a0 + a1->offset); + s16 v1 = (s16)(a1->value); + + v0->z = v1; + v0->y = v1; + v0->x = v1; +} + +f32 func_800FFCD8(f32* a0, f32 a1, f32 a2, f32 a3, f32 a4) { + f32 f0; + + if (*a0 != a1) { + f0 = (a1 - *a0) * a2; + + if ((f0 >= a4) || (f0 <= -a4)) { + if (f0 > a3) { + f0 = a3; + } + + if (f0 < -a3) { + f0 = -a3; + } + + *a0 += f0; + } else { + if (f0 > 0) { + if (f0 < a4) { + *a0 += a4; + + if (a1 < *a0) { + *a0 = a1; + } + } + } else { + if (-a4 < f0) { + *a0 += -a4; + + if (*a0 < a1) { + *a0 = a1; + } + } + } + } + } + + return fabsf(a1 - *a0); +} + +UNK_RET func_800FFDF8(f32* a0, f32 a1, f32 a2, f32 a3) { + f32 f2; + + if (*a0 != a1) { + f2 = (a1 - *a0) * a2; + + if (f2 > a3) { + f2 = a3; + } else if (f2 < -a3) { + f2 = -a3; + } + + *a0 += f2; + } +} + +void func_800FFE68(f32* a0, f32 a1, f32 a2) { + f32 f0 = *a0 * a1; + + if (a2 < f0) { + f0 = a2; + } else if (f0 < -a2) { + f0 = -a2; + } + + *a0 = *a0 - f0; +} + +#ifdef NONMATCHING + +s16 func_800FFEBC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4) { + +} + +#else + +GLOBAL_ASM( +glabel func_800FFEBC +/* 092415 0x800FFEBC AFA50004 */ sw $a1, 0X4($sp) +/* 092416 0x800FFEC0 AFA60008 */ sw $a2, 0X8($sp) +/* 092417 0x800FFEC4 00063400 */ sll $a2, $a2, 16 +/* 092418 0x800FFEC8 00052C00 */ sll $a1, $a1, 16 +/* 092419 0x800FFECC 00052C03 */ sra $a1, $a1, 16 +/* 092420 0x800FFED0 00063403 */ sra $a2, $a2, 16 +/* 092421 0x800FFED4 AFA7000C */ sw $a3, 0XC($sp) +/* 092422 0x800FFED8 84880000 */ lh $t0, 0X0($a0) +/* 092423 0x800FFEDC 87A90012 */ lh $t1, 0X12($sp) +/* 092424 0x800FFEE0 00A81823 */ subu $v1, $a1, $t0 +/* 092425 0x800FFEE4 00031C00 */ sll $v1, $v1, 16 +/* 092426 0x800FFEE8 10A80038 */ beq $a1, $t0, .L_800FFFCC +/* 092427 0x800FFEEC 00031C03 */ sra $v1, $v1, 16 +/* 092428 0x800FFEF0 0066001A */ div $zero, $v1, $a2 +/* 092429 0x800FFEF4 14C00002 */ bnez $a2, .L_800FFF00 +/* 092430 0x800FFEF8 00000000 */ nop +/* 092431 0x800FFEFC 0007000D */ break 0x00007 +.L_800FFF00: +/* 092432 0x800FFF00 2401FFFF */ li $at, -1 +/* 092433 0x800FFF04 14C10004 */ bne $a2, $at, .L_800FFF18 +/* 092434 0x800FFF08 3C018000 */ lui $at, 0x8000 +/* 092435 0x800FFF0C 14610002 */ bne $v1, $at, .L_800FFF18 +/* 092436 0x800FFF10 00000000 */ nop +/* 092437 0x800FFF14 0006000D */ break 0x00006 +.L_800FFF18: +/* 092438 0x800FFF18 00003812 */ mflo $a3 +/* 092439 0x800FFF1C 00075400 */ sll $t2, $a3, 16 +/* 092440 0x800FFF20 000A5403 */ sra $t2, $t2, 16 +/* 092441 0x800FFF24 00071400 */ sll $v0, $a3, 16 +/* 092442 0x800FFF28 012A082A */ slt $at, $t1, $t2 +/* 092443 0x800FFF2C 14200005 */ bnez $at, .L_800FFF44 +/* 092444 0x800FFF30 00021403 */ sra $v0, $v0, 16 +/* 092445 0x800FFF34 00097023 */ negu $t6, $t1 +/* 092446 0x800FFF38 014E082A */ slt $at, $t2, $t6 +/* 092447 0x800FFF3C 1020000F */ beqz $at, .L_800FFF7C +/* 092448 0x800FFF40 00000000 */ nop +.L_800FFF44: +/* 092449 0x800FFF44 87AF000E */ lh $t7, 0XE($sp) +/* 092450 0x800FFF48 87A5000E */ lh $a1, 0XE($sp) +/* 092451 0x800FFF4C 01EA082A */ slt $at, $t7, $t2 +/* 092452 0x800FFF50 10200002 */ beqz $at, .L_800FFF5C +/* 092453 0x800FFF54 00052823 */ negu $a1, $a1 +/* 092454 0x800FFF58 01E01025 */ move $v0, $t7 +.L_800FFF5C: +/* 092455 0x800FFF5C 0045082A */ slt $at, $v0, $a1 +/* 092456 0x800FFF60 50200004 */ beqzl $at, .L_800FFF74 +/* 092457 0x800FFF64 0102C021 */ addu $t8, $t0, $v0 +/* 092458 0x800FFF68 00051400 */ sll $v0, $a1, 16 +/* 092459 0x800FFF6C 00021403 */ sra $v0, $v0, 16 +/* 092460 0x800FFF70 0102C021 */ addu $t8, $t0, $v0 +.L_800FFF74: +/* 092461 0x800FFF74 10000015 */ b .L_800FFFCC +/* 092462 0x800FFF78 A4980000 */ sh $t8, 0X0($a0) +.L_800FFF7C: +/* 092463 0x800FFF7C 0460000B */ bltz $v1, .L_800FFFAC +/* 092464 0x800FFF80 01097823 */ subu $t7, $t0, $t1 +/* 092465 0x800FFF84 0109C821 */ addu $t9, $t0, $t1 +/* 092466 0x800FFF88 A4990000 */ sh $t9, 0X0($a0) +/* 092467 0x800FFF8C 848B0000 */ lh $t3, 0X0($a0) +/* 092468 0x800FFF90 00AB6023 */ subu $t4, $a1, $t3 +/* 092469 0x800FFF94 000C6C00 */ sll $t5, $t4, 16 +/* 092470 0x800FFF98 000D7403 */ sra $t6, $t5, 16 +/* 092471 0x800FFF9C 5DC0000C */ bgtzl $t6, .L_800FFFD0 +/* 092472 0x800FFFA0 00601025 */ move $v0, $v1 +/* 092473 0x800FFFA4 10000009 */ b .L_800FFFCC +/* 092474 0x800FFFA8 A4850000 */ sh $a1, 0X0($a0) +.L_800FFFAC: +/* 092475 0x800FFFAC A48F0000 */ sh $t7, 0X0($a0) +/* 092476 0x800FFFB0 84980000 */ lh $t8, 0X0($a0) +/* 092477 0x800FFFB4 00B8C823 */ subu $t9, $a1, $t8 +/* 092478 0x800FFFB8 00195C00 */ sll $t3, $t9, 16 +/* 092479 0x800FFFBC 000B6403 */ sra $t4, $t3, 16 +/* 092480 0x800FFFC0 05820003 */ bltzl $t4, .L_800FFFD0 +/* 092481 0x800FFFC4 00601025 */ move $v0, $v1 +/* 092482 0x800FFFC8 A4850000 */ sh $a1, 0X0($a0) +.L_800FFFCC: +/* 092483 0x800FFFCC 00601025 */ move $v0, $v1 +.L_800FFFD0: +/* 092484 0x800FFFD0 03E00008 */ jr $ra +/* 092485 0x800FFFD4 00000000 */ nop +) + +#endif + +void func_800FFFD8(s16* a0, s16 a1, s16 a2, s16 a3) { + s16 v0 = a1 - *a0; + v0 /= a2; + + if (v0 > a3) { + *a0 += a3; + return; + } + + if (v0 < -a3) { + *a0 -= a3; + return; + } + + *a0 += v0; +} + +UNK_RET func_8010007C(u8* a0, u8* a1) { + a0[0] = a1[0]; + a0[1] = a1[1]; + a0[2] = a1[2]; + a0[3] = a1[3]; +} + +UNK_RET func_801000A4(u16 a0) { + func_8019F0C8(a0); +} + +UNK_RET func_801000CC(u16 a0) { + func_8019F128(a0); +} + +UNK_RET func_801000F4(UNK_TYPE a0, u16 a1) { + func_8019F1C0(a0, a1); +} + +void func_8010011C(z_Vector3D* a0, s16 a1, z_Vector3D* a2, z_Vector3D* a3) { + f32 sp1C; + f32 f0; + + sp1C = func_800FED44(a1); + f0 = func_800FED84(a1); + a3->x = a0->x + (a2->x * sp1C + a2->z * f0); + a3->y = a0->y + a2->y; + a3->z = a0->z + (a2->z * sp1C - a2->x * f0); +} + +#ifdef NONMATCHING + +void func_801001B8(u8* a0, u8* a1, f32 a2, u8* a3) { + // XXX regalloc is slightly off + a3[0] = (f32)a0[0] + ((f32)a1[0] - (f32)a0[0]) * a2; + a3[1] = (f32)a0[1] + ((f32)a1[1] - (f32)a0[1]) * a2; + a3[2] = (f32)a0[2] + ((f32)a1[2] - (f32)a0[2]) * a2; +} + +#else + +GLOBAL_ASM( +glabel func_801001B8 +/* 092606 0x801001B8 44866000 */ mtc1 $a2, $f12 +/* 092607 0x801001BC 00000000 */ nop +/* 092608 0x801001C0 908E0000 */ lbu $t6, 0X0($a0) +/* 092609 0x801001C4 3C014F80 */ lui $at, 0x4F80 +/* 092610 0x801001C8 448E2000 */ mtc1 $t6, $f4 +/* 092611 0x801001CC 05C10004 */ bgez $t6, .L_801001E0 +/* 092612 0x801001D0 46802020 */ cvt.s.w $f0, $f4 +/* 092613 0x801001D4 44813000 */ mtc1 $at, $f6 +/* 092614 0x801001D8 00000000 */ nop +/* 092615 0x801001DC 46060000 */ add.s $f0, $f0, $f6 +.L_801001E0: +/* 092616 0x801001E0 90AF0000 */ lbu $t7, 0X0($a1) +/* 092617 0x801001E4 3C014F80 */ lui $at, 0x4F80 +/* 092618 0x801001E8 448F4000 */ mtc1 $t7, $f8 +/* 092619 0x801001EC 05E10004 */ bgez $t7, .L_80100200 +/* 092620 0x801001F0 468042A0 */ cvt.s.w $f10, $f8 +/* 092621 0x801001F4 44818000 */ mtc1 $at, $f16 +/* 092622 0x801001F8 00000000 */ nop +/* 092623 0x801001FC 46105280 */ add.s $f10, $f10, $f16 +.L_80100200: +/* 092624 0x80100200 46005481 */ sub.s $f18, $f10, $f0 +/* 092625 0x80100204 24190001 */ li $t9, 1 +/* 092626 0x80100208 3C014F00 */ lui $at, 0x4F00 +/* 092627 0x8010020C 460C9102 */ mul.s $f4, $f18, $f12 +/* 092628 0x80100210 46002180 */ add.s $f6, $f4, $f0 +/* 092629 0x80100214 4458F800 */ cfc1 $t8, $31 +/* 092630 0x80100218 44D9F800 */ ctc1 $t9, $31 +/* 092631 0x8010021C 00000000 */ nop +/* 092632 0x80100220 46003224 */ cvt.w.s $f8, $f6 +/* 092633 0x80100224 4459F800 */ cfc1 $t9, $31 +/* 092634 0x80100228 00000000 */ nop +/* 092635 0x8010022C 33390078 */ andi $t9, $t9, 0X78 +/* 092636 0x80100230 53200013 */ beqzl $t9, .L_80100280 +/* 092637 0x80100234 44194000 */ mfc1 $t9, $f8 +/* 092638 0x80100238 44814000 */ mtc1 $at, $f8 +/* 092639 0x8010023C 24190001 */ li $t9, 1 +/* 092640 0x80100240 46083201 */ sub.s $f8, $f6, $f8 +/* 092641 0x80100244 44D9F800 */ ctc1 $t9, $31 +/* 092642 0x80100248 00000000 */ nop +/* 092643 0x8010024C 46004224 */ cvt.w.s $f8, $f8 +/* 092644 0x80100250 4459F800 */ cfc1 $t9, $31 +/* 092645 0x80100254 00000000 */ nop +/* 092646 0x80100258 33390078 */ andi $t9, $t9, 0X78 +/* 092647 0x8010025C 17200005 */ bnez $t9, .L_80100274 +/* 092648 0x80100260 00000000 */ nop +/* 092649 0x80100264 44194000 */ mfc1 $t9, $f8 +/* 092650 0x80100268 3C018000 */ lui $at, 0x8000 +/* 092651 0x8010026C 10000007 */ b .L_8010028C +/* 092652 0x80100270 0321C825 */ or $t9, $t9, $at +.L_80100274: +/* 092653 0x80100274 10000005 */ b .L_8010028C +/* 092654 0x80100278 2419FFFF */ li $t9, -1 +/* 092655 0x8010027C 44194000 */ mfc1 $t9, $f8 +.L_80100280: +/* 092656 0x80100280 00000000 */ nop +/* 092657 0x80100284 0720FFFB */ bltz $t9, .L_80100274 +/* 092658 0x80100288 00000000 */ nop +.L_8010028C: +/* 092659 0x8010028C A0F90000 */ sb $t9, 0X0($a3) +/* 092660 0x80100290 90880001 */ lbu $t0, 0X1($a0) +/* 092661 0x80100294 44D8F800 */ ctc1 $t8, $31 +/* 092662 0x80100298 3C014F80 */ lui $at, 0x4F80 +/* 092663 0x8010029C 44888000 */ mtc1 $t0, $f16 +/* 092664 0x801002A0 05010004 */ bgez $t0, .L_801002B4 +/* 092665 0x801002A4 46808020 */ cvt.s.w $f0, $f16 +/* 092666 0x801002A8 44815000 */ mtc1 $at, $f10 +/* 092667 0x801002AC 00000000 */ nop +/* 092668 0x801002B0 460A0000 */ add.s $f0, $f0, $f10 +.L_801002B4: +/* 092669 0x801002B4 90A90001 */ lbu $t1, 0X1($a1) +/* 092670 0x801002B8 3C014F80 */ lui $at, 0x4F80 +/* 092671 0x801002BC 44899000 */ mtc1 $t1, $f18 +/* 092672 0x801002C0 05210004 */ bgez $t1, .L_801002D4 +/* 092673 0x801002C4 46809120 */ cvt.s.w $f4, $f18 +/* 092674 0x801002C8 44813000 */ mtc1 $at, $f6 +/* 092675 0x801002CC 00000000 */ nop +/* 092676 0x801002D0 46062100 */ add.s $f4, $f4, $f6 +.L_801002D4: +/* 092677 0x801002D4 46002201 */ sub.s $f8, $f4, $f0 +/* 092678 0x801002D8 240B0001 */ li $t3, 1 +/* 092679 0x801002DC 3C014F00 */ lui $at, 0x4F00 +/* 092680 0x801002E0 460C4402 */ mul.s $f16, $f8, $f12 +/* 092681 0x801002E4 46008280 */ add.s $f10, $f16, $f0 +/* 092682 0x801002E8 444AF800 */ cfc1 $t2, $31 +/* 092683 0x801002EC 44CBF800 */ ctc1 $t3, $31 +/* 092684 0x801002F0 00000000 */ nop +/* 092685 0x801002F4 460054A4 */ cvt.w.s $f18, $f10 +/* 092686 0x801002F8 444BF800 */ cfc1 $t3, $31 +/* 092687 0x801002FC 00000000 */ nop +/* 092688 0x80100300 316B0078 */ andi $t3, $t3, 0X78 +/* 092689 0x80100304 51600013 */ beqzl $t3, .L_80100354 +/* 092690 0x80100308 440B9000 */ mfc1 $t3, $f18 +/* 092691 0x8010030C 44819000 */ mtc1 $at, $f18 +/* 092692 0x80100310 240B0001 */ li $t3, 1 +/* 092693 0x80100314 46125481 */ sub.s $f18, $f10, $f18 +/* 092694 0x80100318 44CBF800 */ ctc1 $t3, $31 +/* 092695 0x8010031C 00000000 */ nop +/* 092696 0x80100320 460094A4 */ cvt.w.s $f18, $f18 +/* 092697 0x80100324 444BF800 */ cfc1 $t3, $31 +/* 092698 0x80100328 00000000 */ nop +/* 092699 0x8010032C 316B0078 */ andi $t3, $t3, 0X78 +/* 092700 0x80100330 15600005 */ bnez $t3, .L_80100348 +/* 092701 0x80100334 00000000 */ nop +/* 092702 0x80100338 440B9000 */ mfc1 $t3, $f18 +/* 092703 0x8010033C 3C018000 */ lui $at, 0x8000 +/* 092704 0x80100340 10000007 */ b .L_80100360 +/* 092705 0x80100344 01615825 */ or $t3, $t3, $at +.L_80100348: +/* 092706 0x80100348 10000005 */ b .L_80100360 +/* 092707 0x8010034C 240BFFFF */ li $t3, -1 +/* 092708 0x80100350 440B9000 */ mfc1 $t3, $f18 +.L_80100354: +/* 092709 0x80100354 00000000 */ nop +/* 092710 0x80100358 0560FFFB */ bltz $t3, .L_80100348 +/* 092711 0x8010035C 00000000 */ nop +.L_80100360: +/* 092712 0x80100360 A0EB0001 */ sb $t3, 0X1($a3) +/* 092713 0x80100364 908C0002 */ lbu $t4, 0X2($a0) +/* 092714 0x80100368 44CAF800 */ ctc1 $t2, $31 +/* 092715 0x8010036C 3C014F80 */ lui $at, 0x4F80 +/* 092716 0x80100370 448C3000 */ mtc1 $t4, $f6 +/* 092717 0x80100374 05810004 */ bgez $t4, .L_80100388 +/* 092718 0x80100378 46803020 */ cvt.s.w $f0, $f6 +/* 092719 0x8010037C 44812000 */ mtc1 $at, $f4 +/* 092720 0x80100380 00000000 */ nop +/* 092721 0x80100384 46040000 */ add.s $f0, $f0, $f4 +.L_80100388: +/* 092722 0x80100388 90AD0002 */ lbu $t5, 0X2($a1) +/* 092723 0x8010038C 3C014F80 */ lui $at, 0x4F80 +/* 092724 0x80100390 448D4000 */ mtc1 $t5, $f8 +/* 092725 0x80100394 05A10004 */ bgez $t5, .L_801003A8 +/* 092726 0x80100398 46804420 */ cvt.s.w $f16, $f8 +/* 092727 0x8010039C 44815000 */ mtc1 $at, $f10 +/* 092728 0x801003A0 00000000 */ nop +/* 092729 0x801003A4 460A8400 */ add.s $f16, $f16, $f10 +.L_801003A8: +/* 092730 0x801003A8 46008481 */ sub.s $f18, $f16, $f0 +/* 092731 0x801003AC 240F0001 */ li $t7, 1 +/* 092732 0x801003B0 3C014F00 */ lui $at, 0x4F00 +/* 092733 0x801003B4 460C9182 */ mul.s $f6, $f18, $f12 +/* 092734 0x801003B8 46003100 */ add.s $f4, $f6, $f0 +/* 092735 0x801003BC 444EF800 */ cfc1 $t6, $31 +/* 092736 0x801003C0 44CFF800 */ ctc1 $t7, $31 +/* 092737 0x801003C4 00000000 */ nop +/* 092738 0x801003C8 46002224 */ cvt.w.s $f8, $f4 +/* 092739 0x801003CC 444FF800 */ cfc1 $t7, $31 +/* 092740 0x801003D0 00000000 */ nop +/* 092741 0x801003D4 31EF0078 */ andi $t7, $t7, 0X78 +/* 092742 0x801003D8 51E00013 */ beqzl $t7, .L_80100428 +/* 092743 0x801003DC 440F4000 */ mfc1 $t7, $f8 +/* 092744 0x801003E0 44814000 */ mtc1 $at, $f8 +/* 092745 0x801003E4 240F0001 */ li $t7, 1 +/* 092746 0x801003E8 46082201 */ sub.s $f8, $f4, $f8 +/* 092747 0x801003EC 44CFF800 */ ctc1 $t7, $31 +/* 092748 0x801003F0 00000000 */ nop +/* 092749 0x801003F4 46004224 */ cvt.w.s $f8, $f8 +/* 092750 0x801003F8 444FF800 */ cfc1 $t7, $31 +/* 092751 0x801003FC 00000000 */ nop +/* 092752 0x80100400 31EF0078 */ andi $t7, $t7, 0X78 +/* 092753 0x80100404 15E00005 */ bnez $t7, .L_8010041C +/* 092754 0x80100408 00000000 */ nop +/* 092755 0x8010040C 440F4000 */ mfc1 $t7, $f8 +/* 092756 0x80100410 3C018000 */ lui $at, 0x8000 +/* 092757 0x80100414 10000007 */ b .L_80100434 +/* 092758 0x80100418 01E17825 */ or $t7, $t7, $at +.L_8010041C: +/* 092759 0x8010041C 10000005 */ b .L_80100434 +/* 092760 0x80100420 240FFFFF */ li $t7, -1 +/* 092761 0x80100424 440F4000 */ mfc1 $t7, $f8 +.L_80100428: +/* 092762 0x80100428 00000000 */ nop +/* 092763 0x8010042C 05E0FFFB */ bltz $t7, .L_8010041C +/* 092764 0x80100430 00000000 */ nop +.L_80100434: +/* 092765 0x80100434 44CEF800 */ ctc1 $t6, $31 +/* 092766 0x80100438 A0EF0002 */ sb $t7, 0X2($a3) +/* 092767 0x8010043C 00000000 */ nop +/* 092768 0x80100440 03E00008 */ jr $ra +/* 092769 0x80100444 00000000 */ nop +) + +#endif + +f32 func_80100448(z_Vector3D* a0, z_Vector3D* a1, f32 a2) { + z_Vector3D sp24; + f32 f2; + f32 f0; + + func_800FF5F4(a1, a0, &sp24); + f0 = func_8017A6D4(&sp24); + if (a2 < f0) { + f2 = a2 / f0; + f0 = f0 - a2; + a0->x = a0->x + f2 * sp24.x; + a0->y = a0->y + f2 * sp24.y; + a0->z = a0->z + f2 * sp24.z; + } else { + func_800FF50C(a0, a1); + f0 = 0; + } + + return f0; +} + +void func_801004FC(void) {} + +UNK_TYPE func_80100504(u32 a0) { + return(D_801F8180[(a0 << 4) >> 28] + (a0 & 0xFFFFFF)) + 0x80000000; +} + +UNK_TYPE func_8010053C(u32 a0) { + if ((a0 >> 28) == 0) { + return a0; + } + + return(D_801F8180[(a0 << 4) >> 28] + (a0 & 0xFFFFFF)) + 0x80000000; +} + +UNK_TYPE func_80100584(UNK_TYPE a0) { + if (a0 == 0) { + return 0; + } else { + return a0 + 0x80000000; + } +} + +UNK_TYPE func_801005A0(UNK_TYPE a0) { + if (a0 == 0) { + return 0; + } else { + return a0 + 0x80000000; + } +} \ No newline at end of file -- cgit v1.2.3