diff --git a/src/include/lib/collision.h b/src/include/lib/collision.h index 2cfb350cd..73b47d4db 100644 --- a/src/include/lib/collision.h +++ b/src/include/lib/collision.h @@ -4,7 +4,7 @@ #include "data.h" #include "types.h" -u32 func0f1577f0(void); +f32 func0f1577f0(f32 arg0[2], f32 arg1[2], f32 arg2[2], f32 arg3[2]); f32 func0f1578c8(struct coord *arg0, struct coord *arg1, struct coord *arg2); f32 func0f1579cc(f32 *arg0, f32 *arg1, f32 *arg2, f32 *arg3); @@ -27,7 +27,7 @@ void cd00025314(struct coord *pos, struct coord *arg1); bool cd00025364(struct coord *arg0, struct coord *arg1); void cd000253c4(struct geoblock *block); s32 cd00025410(f32 arg0, f32 arg1, f32 arg2, f32 arg3); -s32 cd000254d8(struct coord *arg0, struct coord *arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, s32 *arg6); +bool cd000254d8(struct coord *arg0, struct coord *arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, bool *arg6); f32 cd00025654(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3); f32 cd00025724(f32 x1, f32 z1, f32 x2, f32 z2); bool cd00025774(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3); @@ -85,8 +85,8 @@ bool cd0002aac0(struct coord *arg0, struct coord *arg1, struct coord *arg2, stru bool cd0002ab98(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geotilef *tile, struct coord *arg4, struct coord *arg5); bool cd0002ac70(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geotilei *tile, struct coord *arg4, struct coord *arg5, struct coord *arg6, s32 arg7, f32 arg8, f32 arg9); bool cd0002b128(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geotilef *tile, struct coord *arg4, struct coord *arg5, struct coord *arg6, s32 arg7, f32 arg8, f32 arg9); -bool cd0002b560(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geoblock *block, struct coord *arg4, struct coord *arg5, struct coord *arg6, s32 arg7, f32 arg8, f32 arg9); -bool cd0002b954(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geocyl *cyl, struct coord *arg4, struct coord *arg5, struct coord *arg6, s32 arg7, f32 arg8, f32 arg9); +bool cd0002b560(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geoblock *block, struct coord *arg4, struct coord *arg5, struct coord *arg6, bool arg7, f32 arg8, f32 arg9); +bool cd0002b954(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geocyl *cyl, struct coord *arg4, struct coord *arg5, struct coord *arg6, bool arg7, f32 arg8, f32 arg9); bool cd0002bd04(u8 *start, u8 *end, struct coord *arg2, struct coord *arg3, struct coord *arg4, s32 arg5, s32 arg6, s32 arg7, f32 arg8, f32 arg9); void cd0002c328(struct geotilei *tile, struct coord *arg1, struct coord *arg2, struct coord *arg3, struct coord *arg4); void cd0002c528(struct geotilef *tile, struct coord *arg1, struct coord *arg2, struct coord *arg3, struct coord *arg4); diff --git a/src/lib/collision.c b/src/lib/collision.c index 6114d6d97..407fb31ba 100644 --- a/src/lib/collision.c +++ b/src/lib/collision.c @@ -4873,530 +4873,172 @@ glabel cd0002b128 /* 2b55c: 27bd00e0 */ addiu $sp,$sp,0xe0 ); -GLOBAL_ASM( -glabel cd0002b560 -/* 2b560: 27bdff30 */ addiu $sp,$sp,-208 -/* 2b564: afb7006c */ sw $s7,0x6c($sp) -/* 2b568: 8fb700ec */ lw $s7,0xec($sp) -/* 2b56c: f7b60030 */ sdc1 $f22,0x30($sp) -/* 2b570: afbf0074 */ sw $ra,0x74($sp) -/* 2b574: afbe0070 */ sw $s8,0x70($sp) -/* 2b578: afb60068 */ sw $s6,0x68($sp) -/* 2b57c: afb50064 */ sw $s5,0x64($sp) -/* 2b580: afb40060 */ sw $s4,0x60($sp) -/* 2b584: afb3005c */ sw $s3,0x5c($sp) -/* 2b588: afb20058 */ sw $s2,0x58($sp) -/* 2b58c: afb10054 */ sw $s1,0x54($sp) -/* 2b590: afb00050 */ sw $s0,0x50($sp) -/* 2b594: f7bc0048 */ sdc1 $f28,0x48($sp) -/* 2b598: f7ba0040 */ sdc1 $f26,0x40($sp) -/* 2b59c: f7b80038 */ sdc1 $f24,0x38($sp) -/* 2b5a0: f7b40028 */ sdc1 $f20,0x28($sp) -/* 2b5a4: afa600d8 */ sw $a2,0xd8($sp) -/* 2b5a8: afa000cc */ sw $zero,0xcc($sp) -/* 2b5ac: 3c013f80 */ lui $at,0x3f80 -/* 2b5b0: 90fe0001 */ lbu $s8,0x1($a3) -/* 2b5b4: 240e0001 */ addiu $t6,$zero,0x1 -/* 2b5b8: 4481b000 */ mtc1 $at,$f22 -/* 2b5bc: 00a0a025 */ or $s4,$a1,$zero -/* 2b5c0: 0080a825 */ or $s5,$a0,$zero -/* 2b5c4: 00e0b025 */ or $s6,$a3,$zero -/* 2b5c8: 12e0001e */ beqz $s7,.L0002b644 -/* 2b5cc: afae00b8 */ sw $t6,0xb8($sp) -/* 2b5d0: c7ba00f0 */ lwc1 $f26,0xf0($sp) -/* 2b5d4: c4820004 */ lwc1 $f2,0x4($a0) -/* 2b5d8: c6c00008 */ lwc1 $f0,0x8($s6) -/* 2b5dc: c7bc00f4 */ lwc1 $f28,0xf4($sp) -/* 2b5e0: 461a1100 */ add.s $f4,$f2,$f26 -/* 2b5e4: 4604003e */ c.le.s $f0,$f4 -/* 2b5e8: 00000000 */ nop -/* 2b5ec: 45020009 */ bc1fl .L0002b614 -/* 2b5f0: c7bc00f4 */ lwc1 $f28,0xf4($sp) -/* 2b5f4: c6880004 */ lwc1 $f8,0x4($s4) -/* 2b5f8: c6c60004 */ lwc1 $f6,0x4($s6) -/* 2b5fc: 461c4280 */ add.s $f10,$f8,$f28 -/* 2b600: 4606503e */ c.le.s $f10,$f6 -/* 2b604: 00000000 */ nop -/* 2b608: 4503000f */ bc1tl .L0002b648 -/* 2b60c: c7ba00f0 */ lwc1 $f26,0xf0($sp) -/* 2b610: c7bc00f4 */ lwc1 $f28,0xf4($sp) -.L0002b614: -/* 2b614: c6d00004 */ lwc1 $f16,0x4($s6) -/* 2b618: 461c1480 */ add.s $f18,$f2,$f28 -/* 2b61c: 4610903e */ c.le.s $f18,$f16 -/* 2b620: 00000000 */ nop -/* 2b624: 450200ba */ bc1fl .L0002b910 -/* 2b628: 8fbf0074 */ lw $ra,0x74($sp) -/* 2b62c: c6840004 */ lwc1 $f4,0x4($s4) -/* 2b630: 461a2200 */ add.s $f8,$f4,$f26 -/* 2b634: 4608003e */ c.le.s $f0,$f8 -/* 2b638: 00000000 */ nop -/* 2b63c: 450200b4 */ bc1fl .L0002b910 -/* 2b640: 8fbf0074 */ lw $ra,0x74($sp) -.L0002b644: -/* 2b644: c7ba00f0 */ lwc1 $f26,0xf0($sp) -.L0002b648: -/* 2b648: c7bc00f4 */ lwc1 $f28,0xf4($sp) -/* 2b64c: 1bc00057 */ blez $s8,.L0002b7ac -/* 2b650: 00009025 */ or $s2,$zero,$zero -/* 2b654: 02c08825 */ or $s1,$s6,$zero -/* 2b658: c7b800ac */ lwc1 $f24,0xac($sp) -/* 2b65c: c7b400a8 */ lwc1 $f20,0xa8($sp) -.L0002b660: -/* 2b660: 26530001 */ addiu $s3,$s2,0x1 -/* 2b664: 027e001a */ div $zero,$s3,$s8 -/* 2b668: 00007810 */ mfhi $t7 -/* 2b66c: 000fc0c0 */ sll $t8,$t7,0x3 -/* 2b670: 02d88021 */ addu $s0,$s6,$t8 -/* 2b674: c606000c */ lwc1 $f6,0xc($s0) -/* 2b678: 8e26000c */ lw $a2,0xc($s1) -/* 2b67c: 8e270010 */ lw $a3,0x10($s1) -/* 2b680: e7a60010 */ swc1 $f6,0x10($sp) -/* 2b684: c60a0010 */ lwc1 $f10,0x10($s0) -/* 2b688: 27b900b8 */ addiu $t9,$sp,0xb8 -/* 2b68c: afb90018 */ sw $t9,0x18($sp) -/* 2b690: 02a02025 */ or $a0,$s5,$zero -/* 2b694: 02802825 */ or $a1,$s4,$zero -/* 2b698: 17c00002 */ bnez $s8,.L0002b6a4 -/* 2b69c: 00000000 */ nop -/* 2b6a0: 0007000d */ break 0x7 -.L0002b6a4: -/* 2b6a4: 2401ffff */ addiu $at,$zero,-1 -/* 2b6a8: 17c10004 */ bne $s8,$at,.L0002b6bc -/* 2b6ac: 3c018000 */ lui $at,0x8000 -/* 2b6b0: 16610002 */ bne $s3,$at,.L0002b6bc -/* 2b6b4: 00000000 */ nop -/* 2b6b8: 0006000d */ break 0x6 -.L0002b6bc: -/* 2b6bc: e7aa0014 */ swc1 $f10,0x14($sp) -/* 2b6c0: 0c009536 */ jal cd000254d8 -/* 2b6c4: 00000000 */ nop -/* 2b6c8: 50400034 */ beqzl $v0,.L0002b79c -/* 2b6cc: 02609025 */ or $s2,$s3,$zero -/* 2b6d0: c6b00000 */ lwc1 $f16,0x0($s5) -/* 2b6d4: 27a400a0 */ addiu $a0,$sp,0xa0 -/* 2b6d8: 27a50098 */ addiu $a1,$sp,0x98 -/* 2b6dc: e7b000a0 */ swc1 $f16,0xa0($sp) -/* 2b6e0: c6b20008 */ lwc1 $f18,0x8($s5) -/* 2b6e4: 27a60090 */ addiu $a2,$sp,0x90 -/* 2b6e8: 27a70088 */ addiu $a3,$sp,0x88 -/* 2b6ec: e7b200a4 */ swc1 $f18,0xa4($sp) -/* 2b6f0: c6840000 */ lwc1 $f4,0x0($s4) -/* 2b6f4: e7a40098 */ swc1 $f4,0x98($sp) -/* 2b6f8: c6880008 */ lwc1 $f8,0x8($s4) -/* 2b6fc: e7a8009c */ swc1 $f8,0x9c($sp) -/* 2b700: c626000c */ lwc1 $f6,0xc($s1) -/* 2b704: e7a60090 */ swc1 $f6,0x90($sp) -/* 2b708: c62a0010 */ lwc1 $f10,0x10($s1) -/* 2b70c: e7aa0094 */ swc1 $f10,0x94($sp) -/* 2b710: c610000c */ lwc1 $f16,0xc($s0) -/* 2b714: e7b00088 */ swc1 $f16,0x88($sp) -/* 2b718: c6120010 */ lwc1 $f18,0x10($s0) -/* 2b71c: 0fc55dfc */ jal func0f1577f0 -/* 2b720: e7b2008c */ swc1 $f18,0x8c($sp) -/* 2b724: 4616003c */ c.lt.s $f0,$f22 -/* 2b728: 00000000 */ nop -/* 2b72c: 4502001b */ bc1fl .L0002b79c -/* 2b730: 02609025 */ or $s2,$s3,$zero -/* 2b734: 12e00008 */ beqz $s7,.L0002b758 -/* 2b738: 00000000 */ nop -/* 2b73c: c6a20004 */ lwc1 $f2,0x4($s5) -/* 2b740: c6840004 */ lwc1 $f4,0x4($s4) -/* 2b744: 46022201 */ sub.s $f8,$f4,$f2 -/* 2b748: 46004182 */ mul.s $f6,$f8,$f0 -/* 2b74c: 46023500 */ add.s $f20,$f6,$f2 -/* 2b750: 461aa600 */ add.s $f24,$f20,$f26 -/* 2b754: 461ca500 */ add.s $f20,$f20,$f28 -.L0002b758: -/* 2b758: 52e0000c */ beqzl $s7,.L0002b78c -/* 2b75c: 24080001 */ addiu $t0,$zero,0x1 -/* 2b760: c6ca0004 */ lwc1 $f10,0x4($s6) -/* 2b764: 4614503e */ c.le.s $f10,$f20 -/* 2b768: 00000000 */ nop -/* 2b76c: 4503000b */ bc1tl .L0002b79c -/* 2b770: 02609025 */ or $s2,$s3,$zero -/* 2b774: c6d00008 */ lwc1 $f16,0x8($s6) -/* 2b778: 4610c03e */ c.le.s $f24,$f16 -/* 2b77c: 00000000 */ nop -/* 2b780: 45030006 */ bc1tl .L0002b79c -/* 2b784: 02609025 */ or $s2,$s3,$zero -/* 2b788: 24080001 */ addiu $t0,$zero,0x1 -.L0002b78c: -/* 2b78c: afa800cc */ sw $t0,0xcc($sp) -/* 2b790: 46000586 */ mov.s $f22,$f0 -/* 2b794: afb200b0 */ sw $s2,0xb0($sp) -/* 2b798: 02609025 */ or $s2,$s3,$zero -.L0002b79c: -/* 2b79c: 167effb0 */ bne $s3,$s8,.L0002b660 -/* 2b7a0: 26310008 */ addiu $s1,$s1,0x8 -/* 2b7a4: e7b800ac */ swc1 $f24,0xac($sp) -/* 2b7a8: e7b400a8 */ swc1 $f20,0xa8($sp) -.L0002b7ac: -/* 2b7ac: 8fa900cc */ lw $t1,0xcc($sp) -/* 2b7b0: 8faa00d8 */ lw $t2,0xd8($sp) -/* 2b7b4: 51200037 */ beqzl $t1,.L0002b894 -/* 2b7b8: 8fa900cc */ lw $t1,0xcc($sp) -/* 2b7bc: c5520000 */ lwc1 $f18,0x0($t2) -/* 2b7c0: c6a80000 */ lwc1 $f8,0x0($s5) -/* 2b7c4: 8fa200e0 */ lw $v0,0xe0($sp) -/* 2b7c8: 46169102 */ mul.s $f4,$f18,$f22 -/* 2b7cc: 8fa600e4 */ lw $a2,0xe4($sp) -/* 2b7d0: 46082180 */ add.s $f6,$f4,$f8 -/* 2b7d4: e4460000 */ swc1 $f6,0x0($v0) -/* 2b7d8: 8fab00d8 */ lw $t3,0xd8($sp) -/* 2b7dc: c6b20004 */ lwc1 $f18,0x4($s5) -/* 2b7e0: c56a0004 */ lwc1 $f10,0x4($t3) -/* 2b7e4: 46165402 */ mul.s $f16,$f10,$f22 -/* 2b7e8: 46128100 */ add.s $f4,$f16,$f18 -/* 2b7ec: e4440004 */ swc1 $f4,0x4($v0) -/* 2b7f0: 8fac00d8 */ lw $t4,0xd8($sp) -/* 2b7f4: c6aa0008 */ lwc1 $f10,0x8($s5) -/* 2b7f8: c5880008 */ lwc1 $f8,0x8($t4) -/* 2b7fc: 46164182 */ mul.s $f6,$f8,$f22 -/* 2b800: 460a3400 */ add.s $f16,$f6,$f10 -/* 2b804: 10c00041 */ beqz $a2,.L0002b90c -/* 2b808: e4500008 */ swc1 $f16,0x8($v0) -/* 2b80c: 8fa300e8 */ lw $v1,0xe8($sp) -/* 2b810: 8fad00b0 */ lw $t5,0xb0($sp) -/* 2b814: 1060003d */ beqz $v1,.L0002b90c -/* 2b818: 000d70c0 */ sll $t6,$t5,0x3 -/* 2b81c: 02ce2021 */ addu $a0,$s6,$t6 -/* 2b820: c492000c */ lwc1 $f18,0xc($a0) -/* 2b824: e4d20000 */ swc1 $f18,0x0($a2) -/* 2b828: c4440004 */ lwc1 $f4,0x4($v0) -/* 2b82c: e4c40004 */ swc1 $f4,0x4($a2) -/* 2b830: c4880010 */ lwc1 $f8,0x10($a0) -/* 2b834: e4c80008 */ swc1 $f8,0x8($a2) -/* 2b838: 8faf00b0 */ lw $t7,0xb0($sp) -/* 2b83c: 25f80001 */ addiu $t8,$t7,0x1 -/* 2b840: 031e001a */ div $zero,$t8,$s8 -/* 2b844: 0000c810 */ mfhi $t9 -/* 2b848: 001940c0 */ sll $t0,$t9,0x3 -/* 2b84c: 02c82821 */ addu $a1,$s6,$t0 -/* 2b850: c4a6000c */ lwc1 $f6,0xc($a1) -/* 2b854: 17c00002 */ bnez $s8,.L0002b860 -/* 2b858: 00000000 */ nop -/* 2b85c: 0007000d */ break 0x7 -.L0002b860: -/* 2b860: 2401ffff */ addiu $at,$zero,-1 -/* 2b864: 17c10004 */ bne $s8,$at,.L0002b878 -/* 2b868: 3c018000 */ lui $at,0x8000 -/* 2b86c: 17010002 */ bne $t8,$at,.L0002b878 -/* 2b870: 00000000 */ nop -/* 2b874: 0006000d */ break 0x6 -.L0002b878: -/* 2b878: e4660000 */ swc1 $f6,0x0($v1) -/* 2b87c: c44a0004 */ lwc1 $f10,0x4($v0) -/* 2b880: e46a0004 */ swc1 $f10,0x4($v1) -/* 2b884: c4b00010 */ lwc1 $f16,0x10($a1) -/* 2b888: 10000020 */ b .L0002b90c -/* 2b88c: e4700008 */ swc1 $f16,0x8($v1) -/* 2b890: 8fa900cc */ lw $t1,0xcc($sp) -.L0002b894: -/* 2b894: 8faa00b8 */ lw $t2,0xb8($sp) -/* 2b898: 5520001d */ bnezl $t1,.L0002b910 -/* 2b89c: 8fbf0074 */ lw $ra,0x74($sp) -/* 2b8a0: 1140001a */ beqz $t2,.L0002b90c -/* 2b8a4: 8fa200e0 */ lw $v0,0xe0($sp) -/* 2b8a8: 240b0001 */ addiu $t3,$zero,0x1 -/* 2b8ac: afab00cc */ sw $t3,0xcc($sp) -/* 2b8b0: c6b20000 */ lwc1 $f18,0x0($s5) -/* 2b8b4: 8fa600e4 */ lw $a2,0xe4($sp) -/* 2b8b8: e4520000 */ swc1 $f18,0x0($v0) -/* 2b8bc: c6a40004 */ lwc1 $f4,0x4($s5) -/* 2b8c0: e4440004 */ swc1 $f4,0x4($v0) -/* 2b8c4: c6a80008 */ lwc1 $f8,0x8($s5) -/* 2b8c8: 10c00010 */ beqz $a2,.L0002b90c -/* 2b8cc: e4480008 */ swc1 $f8,0x8($v0) -/* 2b8d0: 8fa300e8 */ lw $v1,0xe8($sp) -/* 2b8d4: 5060000e */ beqzl $v1,.L0002b910 -/* 2b8d8: 8fbf0074 */ lw $ra,0x74($sp) -/* 2b8dc: c6a60000 */ lwc1 $f6,0x0($s5) -/* 2b8e0: e4c60000 */ swc1 $f6,0x0($a2) -/* 2b8e4: c6aa0004 */ lwc1 $f10,0x4($s5) -/* 2b8e8: e4ca0004 */ swc1 $f10,0x4($a2) -/* 2b8ec: c6b00008 */ lwc1 $f16,0x8($s5) -/* 2b8f0: e4d00008 */ swc1 $f16,0x8($a2) -/* 2b8f4: c6b20000 */ lwc1 $f18,0x0($s5) -/* 2b8f8: e4720000 */ swc1 $f18,0x0($v1) -/* 2b8fc: c6a40004 */ lwc1 $f4,0x4($s5) -/* 2b900: e4640004 */ swc1 $f4,0x4($v1) -/* 2b904: c6a80008 */ lwc1 $f8,0x8($s5) -/* 2b908: e4680008 */ swc1 $f8,0x8($v1) -.L0002b90c: -/* 2b90c: 8fbf0074 */ lw $ra,0x74($sp) -.L0002b910: -/* 2b910: 8fa200cc */ lw $v0,0xcc($sp) -/* 2b914: d7b40028 */ ldc1 $f20,0x28($sp) -/* 2b918: d7b60030 */ ldc1 $f22,0x30($sp) -/* 2b91c: d7b80038 */ ldc1 $f24,0x38($sp) -/* 2b920: d7ba0040 */ ldc1 $f26,0x40($sp) -/* 2b924: d7bc0048 */ ldc1 $f28,0x48($sp) -/* 2b928: 8fb00050 */ lw $s0,0x50($sp) -/* 2b92c: 8fb10054 */ lw $s1,0x54($sp) -/* 2b930: 8fb20058 */ lw $s2,0x58($sp) -/* 2b934: 8fb3005c */ lw $s3,0x5c($sp) -/* 2b938: 8fb40060 */ lw $s4,0x60($sp) -/* 2b93c: 8fb50064 */ lw $s5,0x64($sp) -/* 2b940: 8fb60068 */ lw $s6,0x68($sp) -/* 2b944: 8fb7006c */ lw $s7,0x6c($sp) -/* 2b948: 8fbe0070 */ lw $s8,0x70($sp) -/* 2b94c: 03e00008 */ jr $ra -/* 2b950: 27bd00d0 */ addiu $sp,$sp,0xd0 -); +bool cd0002b560(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geoblock *block, + struct coord *arg4, struct coord *arg5, struct coord *arg6, bool arg7, f32 arg8, f32 arg9) +{ + bool result = false; + s32 i; + f32 f0; + s32 numvertices = block->header.numvertices; + s32 next; + s32 spb8 = 1; + f32 f22 = 1.0f; + s32 spb0; + f32 spac; + f32 spa8; + f32 spa0[2]; + f32 sp98[2]; + f32 sp90[2]; + f32 sp88[2]; -GLOBAL_ASM( -glabel cd0002b954 -/* 2b954: 27bdff80 */ addiu $sp,$sp,-128 -/* 2b958: afbf0034 */ sw $ra,0x34($sp) -/* 2b95c: afb10030 */ sw $s1,0x30($sp) -/* 2b960: afb0002c */ sw $s0,0x2c($sp) -/* 2b964: afa60088 */ sw $a2,0x88($sp) -/* 2b968: afa7008c */ sw $a3,0x8c($sp) -/* 2b96c: afa0007c */ sw $zero,0x7c($sp) -/* 2b970: 8faf009c */ lw $t7,0x9c($sp) -/* 2b974: c4e40014 */ lwc1 $f4,0x14($a3) -/* 2b978: c4f0000c */ lwc1 $f16,0xc($a3) -/* 2b97c: c4f20010 */ lwc1 $f18,0x10($a3) -/* 2b980: 00808025 */ or $s0,$a0,$zero -/* 2b984: 00a08825 */ or $s1,$a1,$zero -/* 2b988: 11e00020 */ beqz $t7,.L0002ba0c -/* 2b98c: e7a40068 */ swc1 $f4,0x68($sp) -/* 2b990: c4800004 */ lwc1 $f0,0x4($a0) -/* 2b994: c7a600a0 */ lwc1 $f6,0xa0($sp) -/* 2b998: c4e20008 */ lwc1 $f2,0x8($a3) -/* 2b99c: 46060200 */ add.s $f8,$f0,$f6 -/* 2b9a0: c7a600a4 */ lwc1 $f6,0xa4($sp) -/* 2b9a4: 4608103e */ c.le.s $f2,$f8 -/* 2b9a8: 00000000 */ nop -/* 2b9ac: 45020009 */ bc1fl .L0002b9d4 -/* 2b9b0: c7a600a4 */ lwc1 $f6,0xa4($sp) -/* 2b9b4: c4a40004 */ lwc1 $f4,0x4($a1) -/* 2b9b8: c4ea0004 */ lwc1 $f10,0x4($a3) -/* 2b9bc: 46062200 */ add.s $f8,$f4,$f6 -/* 2b9c0: 460a403e */ c.le.s $f8,$f10 -/* 2b9c4: 00000000 */ nop -/* 2b9c8: 45030011 */ bc1tl .L0002ba10 -/* 2b9cc: c60c0000 */ lwc1 $f12,0x0($s0) -/* 2b9d0: c7a600a4 */ lwc1 $f6,0xa4($sp) -.L0002b9d4: -/* 2b9d4: 8fb8008c */ lw $t8,0x8c($sp) -/* 2b9d8: 46060280 */ add.s $f10,$f0,$f6 -/* 2b9dc: c7040004 */ lwc1 $f4,0x4($t8) -/* 2b9e0: c7a600a0 */ lwc1 $f6,0xa0($sp) -/* 2b9e4: 4604503e */ c.le.s $f10,$f4 -/* 2b9e8: 00000000 */ nop -/* 2b9ec: 450200c0 */ bc1fl .L0002bcf0 -/* 2b9f0: 8fbf0034 */ lw $ra,0x34($sp) -/* 2b9f4: c6280004 */ lwc1 $f8,0x4($s1) -/* 2b9f8: 46064100 */ add.s $f4,$f8,$f6 -/* 2b9fc: 4604103e */ c.le.s $f2,$f4 -/* 2ba00: 00000000 */ nop -/* 2ba04: 450200ba */ bc1fl .L0002bcf0 -/* 2ba08: 8fbf0034 */ lw $ra,0x34($sp) -.L0002ba0c: -/* 2ba0c: c60c0000 */ lwc1 $f12,0x0($s0) -.L0002ba10: -/* 2ba10: c60e0008 */ lwc1 $f14,0x8($s0) -/* 2ba14: 8e260000 */ lw $a2,0x0($s1) -/* 2ba18: 8e270008 */ lw $a3,0x8($s1) -/* 2ba1c: e7b2006c */ swc1 $f18,0x6c($sp) -/* 2ba20: e7b00070 */ swc1 $f16,0x70($sp) -/* 2ba24: e7b20014 */ swc1 $f18,0x14($sp) -/* 2ba28: 0c009595 */ jal cd00025654 -/* 2ba2c: e7b00010 */ swc1 $f16,0x10($sp) -/* 2ba30: 44805000 */ mtc1 $zero,$f10 -/* 2ba34: 46000486 */ mov.s $f18,$f0 -/* 2ba38: c7a80068 */ lwc1 $f8,0x68($sp) -/* 2ba3c: 460a003c */ c.lt.s $f0,$f10 -/* 2ba40: 8fa60070 */ lw $a2,0x70($sp) -/* 2ba44: 8fa7006c */ lw $a3,0x6c($sp) -/* 2ba48: 45020003 */ bc1fl .L0002ba58 -/* 2ba4c: 4608903c */ c.lt.s $f18,$f8 -/* 2ba50: 46000487 */ neg.s $f18,$f0 -/* 2ba54: 4608903c */ c.lt.s $f18,$f8 -.L0002ba58: -/* 2ba58: 00000000 */ nop -/* 2ba5c: 450200a4 */ bc1fl .L0002bcf0 -/* 2ba60: 8fbf0034 */ lw $ra,0x34($sp) -/* 2ba64: c60c0000 */ lwc1 $f12,0x0($s0) -/* 2ba68: c60e0008 */ lwc1 $f14,0x8($s0) -/* 2ba6c: 0c0095c9 */ jal cd00025724 -/* 2ba70: e7b20074 */ swc1 $f18,0x74($sp) -/* 2ba74: c7a60068 */ lwc1 $f6,0x68($sp) -/* 2ba78: c7b20074 */ lwc1 $f18,0x74($sp) -/* 2ba7c: 8fa60070 */ lw $a2,0x70($sp) -/* 2ba80: 4606003c */ c.lt.s $f0,$f6 -/* 2ba84: 8fa7006c */ lw $a3,0x6c($sp) -/* 2ba88: 45030018 */ bc1tl .L0002baec -/* 2ba8c: c6260000 */ lwc1 $f6,0x0($s1) -/* 2ba90: c62c0000 */ lwc1 $f12,0x0($s1) -/* 2ba94: c62e0008 */ lwc1 $f14,0x8($s1) -/* 2ba98: 0c0095c9 */ jal cd00025724 -/* 2ba9c: e7b20074 */ swc1 $f18,0x74($sp) -/* 2baa0: c7a40068 */ lwc1 $f4,0x68($sp) -/* 2baa4: c7b20074 */ lwc1 $f18,0x74($sp) -/* 2baa8: c7aa0070 */ lwc1 $f10,0x70($sp) -/* 2baac: 4604003c */ c.lt.s $f0,$f4 -/* 2bab0: 00000000 */ nop -/* 2bab4: 4503000d */ bc1tl .L0002baec -/* 2bab8: c6260000 */ lwc1 $f6,0x0($s1) -/* 2babc: c7a8006c */ lwc1 $f8,0x6c($sp) -/* 2bac0: c60c0000 */ lwc1 $f12,0x0($s0) -/* 2bac4: c60e0008 */ lwc1 $f14,0x8($s0) -/* 2bac8: 8e260000 */ lw $a2,0x0($s1) -/* 2bacc: 8e270008 */ lw $a3,0x8($s1) -/* 2bad0: e7b20074 */ swc1 $f18,0x74($sp) -/* 2bad4: e7aa0010 */ swc1 $f10,0x10($sp) -/* 2bad8: 0c0095dd */ jal cd00025774 -/* 2badc: e7a80014 */ swc1 $f8,0x14($sp) -/* 2bae0: 10400082 */ beqz $v0,.L0002bcec -/* 2bae4: c7b20074 */ lwc1 $f18,0x74($sp) -/* 2bae8: c6260000 */ lwc1 $f6,0x0($s1) -.L0002baec: -/* 2baec: c6040000 */ lwc1 $f4,0x0($s0) -/* 2baf0: c62a0008 */ lwc1 $f10,0x8($s1) -/* 2baf4: c6080008 */ lwc1 $f8,0x8($s0) -/* 2baf8: 46043001 */ sub.s $f0,$f6,$f4 -/* 2bafc: e7b20074 */ swc1 $f18,0x74($sp) -/* 2bb00: 46085081 */ sub.s $f2,$f10,$f8 -/* 2bb04: 46000182 */ mul.s $f6,$f0,$f0 -/* 2bb08: 00000000 */ nop -/* 2bb0c: 46021102 */ mul.s $f4,$f2,$f2 -/* 2bb10: 0c012974 */ jal sqrtf -/* 2bb14: 46043300 */ add.s $f12,$f6,$f4 -/* 2bb18: 44805000 */ mtc1 $zero,$f10 -/* 2bb1c: c7b20074 */ lwc1 $f18,0x74($sp) -/* 2bb20: e7a00050 */ swc1 $f0,0x50($sp) -/* 2bb24: 4600503c */ c.lt.s $f10,$f0 -/* 2bb28: c7a80070 */ lwc1 $f8,0x70($sp) -/* 2bb2c: 45020021 */ bc1fl .L0002bbb4 -/* 2bb30: 44801000 */ mtc1 $zero,$f2 -/* 2bb34: c6060000 */ lwc1 $f6,0x0($s0) -/* 2bb38: c7a4006c */ lwc1 $f4,0x6c($sp) -/* 2bb3c: c60a0008 */ lwc1 $f10,0x8($s0) -/* 2bb40: 46064001 */ sub.s $f0,$f8,$f6 -/* 2bb44: 460a2081 */ sub.s $f2,$f4,$f10 -/* 2bb48: 46000202 */ mul.s $f8,$f0,$f0 -/* 2bb4c: 00000000 */ nop -/* 2bb50: 46021182 */ mul.s $f6,$f2,$f2 -/* 2bb54: 46064400 */ add.s $f16,$f8,$f6 -/* 2bb58: 46129382 */ mul.s $f14,$f18,$f18 -/* 2bb5c: 4610703e */ c.le.s $f14,$f16 -/* 2bb60: 00000000 */ nop -/* 2bb64: 4500000d */ bc1f .L0002bb9c -/* 2bb68: 00000000 */ nop -/* 2bb6c: 460e8301 */ sub.s $f12,$f16,$f14 -/* 2bb70: 0c012974 */ jal sqrtf -/* 2bb74: e7ae003c */ swc1 $f14,0x3c($sp) -/* 2bb78: c7a40068 */ lwc1 $f4,0x68($sp) -/* 2bb7c: c7ae003c */ lwc1 $f14,0x3c($sp) -/* 2bb80: e7a00044 */ swc1 $f0,0x44($sp) -/* 2bb84: 46042282 */ mul.s $f10,$f4,$f4 -/* 2bb88: 0c012974 */ jal sqrtf -/* 2bb8c: 460e5301 */ sub.s $f12,$f10,$f14 -/* 2bb90: c7a80044 */ lwc1 $f8,0x44($sp) -/* 2bb94: 10000003 */ b .L0002bba4 -/* 2bb98: 46004301 */ sub.s $f12,$f8,$f0 -.L0002bb9c: -/* 2bb9c: 44806000 */ mtc1 $zero,$f12 -/* 2bba0: 00000000 */ nop -.L0002bba4: -/* 2bba4: c7a60050 */ lwc1 $f6,0x50($sp) -/* 2bba8: 10000003 */ b .L0002bbb8 -/* 2bbac: 46066083 */ div.s $f2,$f12,$f6 -/* 2bbb0: 44801000 */ mtc1 $zero,$f2 -.L0002bbb4: -/* 2bbb4: 00000000 */ nop -.L0002bbb8: -/* 2bbb8: 3c013f80 */ lui $at,0x3f80 -/* 2bbbc: 44812000 */ mtc1 $at,$f4 -/* 2bbc0: 8fa2009c */ lw $v0,0x9c($sp) -/* 2bbc4: 4604103c */ c.lt.s $f2,$f4 -/* 2bbc8: 00000000 */ nop -/* 2bbcc: 45020048 */ bc1fl .L0002bcf0 -/* 2bbd0: 8fbf0034 */ lw $ra,0x34($sp) -/* 2bbd4: 1040000c */ beqz $v0,.L0002bc08 -/* 2bbd8: 00000000 */ nop -/* 2bbdc: c6000004 */ lwc1 $f0,0x4($s0) -/* 2bbe0: c62a0004 */ lwc1 $f10,0x4($s1) -/* 2bbe4: c7a400a0 */ lwc1 $f4,0xa0($sp) -/* 2bbe8: 46005201 */ sub.s $f8,$f10,$f0 -/* 2bbec: 46024182 */ mul.s $f6,$f8,$f2 -/* 2bbf0: c7a800a4 */ lwc1 $f8,0xa4($sp) -/* 2bbf4: 46003300 */ add.s $f12,$f6,$f0 -/* 2bbf8: 46046280 */ add.s $f10,$f12,$f4 -/* 2bbfc: 46086300 */ add.s $f12,$f12,$f8 -/* 2bc00: e7aa004c */ swc1 $f10,0x4c($sp) -/* 2bc04: e7ac0048 */ swc1 $f12,0x48($sp) -.L0002bc08: -/* 2bc08: 1040000d */ beqz $v0,.L0002bc40 -/* 2bc0c: c7ac0048 */ lwc1 $f12,0x48($sp) -/* 2bc10: 8fa2008c */ lw $v0,0x8c($sp) -/* 2bc14: c7aa004c */ lwc1 $f10,0x4c($sp) -/* 2bc18: c4460004 */ lwc1 $f6,0x4($v0) -/* 2bc1c: 460c303e */ c.le.s $f6,$f12 -/* 2bc20: 00000000 */ nop -/* 2bc24: 45030032 */ bc1tl .L0002bcf0 -/* 2bc28: 8fbf0034 */ lw $ra,0x34($sp) -/* 2bc2c: c4440008 */ lwc1 $f4,0x8($v0) -/* 2bc30: 4604503e */ c.le.s $f10,$f4 -/* 2bc34: 00000000 */ nop -/* 2bc38: 4503002d */ bc1tl .L0002bcf0 -/* 2bc3c: 8fbf0034 */ lw $ra,0x34($sp) -.L0002bc40: -/* 2bc40: 8fa40088 */ lw $a0,0x88($sp) -/* 2bc44: 24190001 */ addiu $t9,$zero,0x1 -/* 2bc48: afb9007c */ sw $t9,0x7c($sp) -/* 2bc4c: c4880000 */ lwc1 $f8,0x0($a0) -/* 2bc50: c6040000 */ lwc1 $f4,0x0($s0) -/* 2bc54: 8fa20090 */ lw $v0,0x90($sp) -/* 2bc58: 46024182 */ mul.s $f6,$f8,$f2 -/* 2bc5c: 8fa30094 */ lw $v1,0x94($sp) -/* 2bc60: 46043280 */ add.s $f10,$f6,$f4 -/* 2bc64: e44a0000 */ swc1 $f10,0x0($v0) -/* 2bc68: c4880004 */ lwc1 $f8,0x4($a0) -/* 2bc6c: c6040004 */ lwc1 $f4,0x4($s0) -/* 2bc70: 46024182 */ mul.s $f6,$f8,$f2 -/* 2bc74: 46043280 */ add.s $f10,$f6,$f4 -/* 2bc78: e44a0004 */ swc1 $f10,0x4($v0) -/* 2bc7c: c4880008 */ lwc1 $f8,0x8($a0) -/* 2bc80: c6040008 */ lwc1 $f4,0x8($s0) -/* 2bc84: 46024182 */ mul.s $f6,$f8,$f2 -/* 2bc88: 46043280 */ add.s $f10,$f6,$f4 -/* 2bc8c: 10600017 */ beqz $v1,.L0002bcec -/* 2bc90: e44a0008 */ swc1 $f10,0x8($v0) -/* 2bc94: 8fa40098 */ lw $a0,0x98($sp) -/* 2bc98: c7ac0070 */ lwc1 $f12,0x70($sp) -/* 2bc9c: c7ae006c */ lwc1 $f14,0x6c($sp) -/* 2bca0: 10800012 */ beqz $a0,.L0002bcec -/* 2bca4: 8fa60068 */ lw $a2,0x68($sp) -/* 2bca8: c6080008 */ lwc1 $f8,0x8($s0) -/* 2bcac: 8e070000 */ lw $a3,0x0($s0) -/* 2bcb0: 24680008 */ addiu $t0,$v1,0x8 -/* 2bcb4: 24890008 */ addiu $t1,$a0,0x8 -/* 2bcb8: afa90020 */ sw $t1,0x20($sp) -/* 2bcbc: afa80018 */ sw $t0,0x18($sp) -/* 2bcc0: afa4001c */ sw $a0,0x1c($sp) -/* 2bcc4: afa30014 */ sw $v1,0x14($sp) -/* 2bcc8: 0c009612 */ jal cd00025848 -/* 2bccc: e7a80010 */ swc1 $f8,0x10($sp) -/* 2bcd0: 8fa20090 */ lw $v0,0x90($sp) -/* 2bcd4: 8fa30094 */ lw $v1,0x94($sp) -/* 2bcd8: 8fa40098 */ lw $a0,0x98($sp) -/* 2bcdc: c4460004 */ lwc1 $f6,0x4($v0) -/* 2bce0: e4660004 */ swc1 $f6,0x4($v1) -/* 2bce4: c4440004 */ lwc1 $f4,0x4($v0) -/* 2bce8: e4840004 */ swc1 $f4,0x4($a0) -.L0002bcec: -/* 2bcec: 8fbf0034 */ lw $ra,0x34($sp) -.L0002bcf0: -/* 2bcf0: 8fa2007c */ lw $v0,0x7c($sp) -/* 2bcf4: 8fb0002c */ lw $s0,0x2c($sp) -/* 2bcf8: 8fb10030 */ lw $s1,0x30($sp) -/* 2bcfc: 03e00008 */ jr $ra -/* 2bd00: 27bd0080 */ addiu $sp,$sp,0x80 -); + if (!arg7 + || (arg0->y + arg8 >= block->ymin && arg1->y + arg9 <= block->ymax) + || (arg0->y + arg9 <= block->ymax && arg1->y + arg8 >= block->ymin)) { + for (i = 0; i < numvertices; i++) { + next = (i + 1) % numvertices; + + if (cd000254d8(arg0, arg1, block->vertices[i][0], block->vertices[i][1], block->vertices[next][0], block->vertices[next][1], &spb8)) { + spa0[0] = arg0->x; + spa0[1] = arg0->z; + sp98[0] = arg1->x; + sp98[1] = arg1->z; + sp90[0] = block->vertices[i][0]; + sp90[1] = block->vertices[i][1]; + sp88[0] = block->vertices[next][0]; + sp88[1] = block->vertices[next][1]; + + f0 = func0f1577f0(spa0, sp98, sp90, sp88); + + if (f0 < f22) { + if (arg7) { + spa8 = (arg1->y - arg0->y) * f0 + arg0->y; + spac = spa8 + arg8; + spa8 = spa8 + arg9; + } + + if (!arg7 || (!(spa8 >= block->ymax) && !(spac <= block->ymin))) { + result = true; + f22 = f0; + spb0 = i; + } + } + } + } + + if (result) { + arg4->x = arg0->x + arg2->f[0] * f22; + arg4->y = arg0->y + arg2->f[1] * f22; + arg4->z = arg0->z + arg2->f[2] * f22; + + if (arg5 != NULL && arg6 != NULL) { + arg5->x = block->vertices[spb0][0]; + arg5->y = arg4->y; + arg5->z = block->vertices[spb0][1]; + + arg6->x = block->vertices[(spb0 + 1) % numvertices][0]; + arg6->y = arg4->y; + arg6->z = block->vertices[(spb0 + 1) % numvertices][1]; + } + } else if (!result && spb8) { + result = true; + + arg4->x = arg0->x; + arg4->y = arg0->y; + arg4->z = arg0->z; + + if (arg5 != NULL && arg6 != NULL) { + arg5->x = arg0->x; + arg5->y = arg0->y; + arg5->z = arg0->z; + + arg6->x = arg0->x; + arg6->y = arg0->y; + arg6->z = arg0->z; + } + } + } + + return result; +} + +bool cd0002b954(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct geocyl *cyl, + struct coord *arg4, struct coord *arg5, struct coord *arg6, bool arg7, f32 arg8, f32 arg9) +{ + bool result = false; + f32 mult; + f32 sp74; + f32 x = cyl->x; + f32 z = cyl->z; + f32 radius = cyl->radius; + + if (!arg7 + || (arg0->y + arg8 >= cyl->ymin && arg1->y + arg9 <= cyl->ymax) + || (arg0->y + arg9 <= cyl->ymax && arg1->y + arg8 >= cyl->ymin)) { + sp74 = cd00025654(arg0->x, arg0->z, arg1->x, arg1->z, x, z); + + if (sp74 < 0.0f) { + sp74 = -sp74; + } + + if (sp74 < radius + && (cd00025724(arg0->x, arg0->z, x, z) < radius + || cd00025724(arg1->x, arg1->z, x, z) < radius + || cd00025774(arg0->x, arg0->z, arg1->x, arg1->z, x, z))) { + f32 xdiff = arg1->x - arg0->x; + f32 zdiff = arg1->z - arg0->z; + f32 sqdist; + f32 dist; + u32 stack; + f32 sp50; + f32 sp4c; + f32 sp48; + + sp50 = sqrtf(xdiff * xdiff + zdiff * zdiff); + + if (sp50 > 0.0f) { + xdiff = x - arg0->x; + zdiff = z - arg0->z; + + sqdist = xdiff * xdiff + zdiff * zdiff; + + if (sp74 * sp74 <= sqdist) { + dist = sqrtf(sqdist - sp74 * sp74) - sqrtf(radius * radius - sp74 * sp74); + } else { + dist = 0.0f; + } + + mult = dist / sp50; + } else { + mult = 0.0f; + } + + if (mult < 1.0f) { + if (arg7) { + sp48 = (arg1->y - arg0->y) * mult + arg0->y; + sp4c = sp48 + arg8; + sp48 = sp48 + arg9; + } + + if (!arg7 || (!(sp48 >= cyl->ymax) && !(sp4c <= cyl->ymin))) { + result = true; + + arg4->x = arg0->x + arg2->f[0] * mult; + arg4->y = arg0->y + arg2->f[1] * mult; + arg4->z = arg0->z + arg2->f[2] * mult; + + if (arg5 != NULL && arg6 != NULL) { + cd00025848(x, z, radius, arg0->x, arg0->z, &arg5->x, &arg5->z, &arg6->x, &arg6->z); + + arg5->y = arg4->y; + arg6->y = arg4->y; + } + } + } + } + } + + return result; +} GLOBAL_ASM( glabel cd0002bd04