#include #include #pragma intrinsic (sqrtf) extern float fabsf(float); #pragma intrinsic (fabsf) void* Lib_bcopy(void* dst, void* src, size_t n) { _bcopy(src, dst, n); return dst; } #ifdef NONMATCHING void* Lib_memset(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 Lib_memset /* 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 Lib_cos(s16 a0) { return coss(a0) * D_801DDA80; } f32 Lib_sin(s16 a0) { return sins(a0) * D_801DDA84; } s32 Lib_StepTowardsGet_i(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 Lib_StepTowards_i(u32* a0, u32 a1, u32 a2) { *a0 = Lib_StepTowardsGet_i(*a0, a1, a2); } UNK_TYPE Lib_StepTowardsCheck_i(u32* a0, u32 a1, u32 a2) { Lib_StepTowards_i(a0, a1, a2); return a1 == *a0; } UNK_TYPE Lib_StepTowardsCheckFramerateScaled_s(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 Lib_StepTowardsCheck_s(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 Lib_StepTowardsCheck_c(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 Lib_StepTowardsCheck_f(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 Lib_StepTowardsCheck_f /* 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 atans_flip /* 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 Lib_rand_s(s16 a0, s16 a1) { return (s16)(randZeroOne() * a1) + a0; } s16 Lib_randStride_s(s16 a0, s16 a1, s16 a2) { return (s16)(randZeroOne() * a2) * a1 + a0; } UNK_RET Lib_CopyVec3f(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 Lib_CopyVec3s(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 Lib_ToVec3f(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 Lib_ToVec3s(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 Lib_AddVec3f(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 Lib_SubVec3f(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 Lib_SubVec3sToVec3f(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 Lib_ScaleInPlaceVec3f(z_Vector3D* a0, f32 a1) { a0->x *= a1; a0->y *= a1; a0->z *= a1; } UNK_RET Lib_ScaleVec3f(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 Lib_LerpVec3f(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 Lib_AddScaledVec3f(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 Lib_ModifyRandScaled(z_Vector3D* a0, f32 a1, z_Vector3D* a2) { a2->x = randPlusMinusPoint5Scaled(a1) + a0->x; a2->y = randPlusMinusPoint5Scaled(a1) + a0->y; a2->z = randPlusMinusPoint5Scaled(a1) + a0->z; } void Lib_ScaledNormalizedDifferenceVec3f(z_Vector3D* a0, z_Vector3D* a1, f32 a2, z_Vector3D* a3) { f32 f0 = Lib_DistanceAndDifferenceVec3f(a0, a1, a3); f32 f2; if (f0 == 0) { return; } f2 = a2 / f0; a3->x *= f2; a3->y *= f2; a3->z *= f2; } f32 Lib_DistanceVec3f(z_Vector3D* a0, z_Vector3D* a1) { z_Vector3D sp1C; Lib_SubVec3f(a1, a0, &sp1C); return sqrtf((sp1C.x * sp1C.x) + (sp1C.y * sp1C.y) + (sp1C.z * sp1C.z)); } f32 Lib_DistanceAndDifferenceVec3f(z_Vector3D* a0, z_Vector3D* a1, z_Vector3D* a2) { Lib_SubVec3f(a1, a0, a2); return sqrtf((a2->x * a2->x) + (a2->y * a2->y) + (a2->z * a2->z)); } f32 Lib_DistanceXZVec3f(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 Lib_DistanceAndDifferenceXZVec3f(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 Lib_PushAwayXZVec3f(z_Vector3D* a0, z_Vector3D* a1, f32 a2) { f32 sp24; f32 sp20; f32 f0 = Lib_DistanceAndDifferenceXZVec3f(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 Lib_PushAwayXZVec3f /* 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 Lib_DistanceAndDifferenceXZVec3f /* 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 Lib_DistanceYVec3f(z_Vector3D* a0, z_Vector3D* a1) { return a1->y - a0->y; } UNK_TYPE Lib_YawVec3f(z_Vector3D* a0, z_Vector3D* a1) { f32 f14 = a1->x - a0->x; f32 f12 = a1->z - a0->z; return atans_flip(f12, f14); } UNK_TYPE Lib_PitchVec3f(z_Vector3D* a0, z_Vector3D* a1) { return atans_flip(Lib_DistanceXZVec3f(a0, a1), a0->y - a1->y); } void Lib_ApplyActorInitVars(z_Actor* a0, z_ActorCompInitEntry* a1) { do { D_801BE960[a1->type]((u8*)a0, a1); } while ((a1++)->cont); } UNK_RET Lib_ApplyActorInitVarByte1(u8* a0, z_ActorCompInitEntry* a1) { *(u8*)(a0 + a1->offset) = (u8)(a1->value); } UNK_RET Lib_ApplyActorInitVarByte2(u8* a0, z_ActorCompInitEntry* a1) { *(u8*)(a0 + a1->offset) = (u8)(a1->value); } UNK_RET Lib_ApplyActorInitVarShort1(u8* a0, z_ActorCompInitEntry* a1) { *(u16*)(a0 + a1->offset) = (u16)(a1->value); } UNK_RET Lib_ApplyActorInitVarShort2(u8* a0, z_ActorCompInitEntry* a1) { *(u16*)(a0 + a1->offset) = (u16)(a1->value); } UNK_RET Lib_ApplyActorInitVarWord1(u8* a0, z_ActorCompInitEntry* a1) { *(u32*)(a0 + a1->offset) = (u32)(a1->value); } UNK_RET Lib_ApplyActorInitVarWord2(u8* a0, z_ActorCompInitEntry* a1) { *(u32*)(a0 + a1->offset) = (u32)(a1->value); } UNK_RET Lib_ApplyActorInitVarFloat(u8* a0, z_ActorCompInitEntry* a1) { *(f32*)(a0 + a1->offset) = (f32)(a1->value); } UNK_RET Lib_ApplyActorInitVarFloat1000th(u8* a0, z_ActorCompInitEntry* a1) { *(f32*)(a0 + a1->offset) = (f32)(a1->value) / 1000; } UNK_RET Lib_ApplyActorInitVarVector3f(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 Lib_ApplyActorInitVarVector3f1000th(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 Lib_ApplyActorInitVarVector3s(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 Lib_ScaleMax_f(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 Lib_Scale_f(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 Lib_ScaleMaxMin_s(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4) { } #else GLOBAL_ASM( glabel Lib_ScaleMaxMin_s /* 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 Lib_ScaleMax_s(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 Lib_CopyColor(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 Lib_TranslateAndRotateYVec3f(z_Vector3D* a0, s16 a1, z_Vector3D* a2, z_Vector3D* a3) { f32 sp1C; f32 f0; sp1C = Lib_cos(a1); f0 = Lib_sin(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 Lib_LerpRGB(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 Lib_LerpRGB /* 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 Lib_PushAwayVec3f(z_Vector3D* a0, z_Vector3D* a1, f32 a2) { z_Vector3D sp24; f32 f2; f32 f0; Lib_SubVec3f(a1, a0, &sp24); f0 = Math3D_Length(&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 { Lib_CopyVec3f(a0, a1); f0 = 0; } return f0; } void Lib_Nop801004FC(void) {} UNK_TYPE Lib_PtrSegToPhys(u32 a0) { return(D_801F8180[(a0 << 4) >> 28] + (a0 & 0xFFFFFF)) + 0x80000000; } UNK_TYPE Lib_PtrSegToPhysNull(u32 a0) { if ((a0 >> 28) == 0) { return a0; } return(D_801F8180[(a0 << 4) >> 28] + (a0 & 0xFFFFFF)) + 0x80000000; } UNK_TYPE Lib_PtrSegToK0(UNK_TYPE a0) { if (a0 == 0) { return 0; } else { return a0 + 0x80000000; } } UNK_TYPE Lib_PtrSegToK0Null(UNK_TYPE a0) { if (a0 == 0) { return 0; } else { return a0 + 0x80000000; } }