diff --git a/src/game/propobj.c b/src/game/propobj.c index 901404ec0..972d3b552 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -6302,324 +6302,145 @@ glabel func0f06be44 /* f06be9c: 27bd0020 */ addiu $sp,$sp,0x20 ); -GLOBAL_ASM( -glabel func0f06bea0 -.late_rodata -glabel var7f1aa20c -.word 0x46fffe00 -glabel var7f1aa210 -.word 0x7f7fffff -glabel var7f1aa214 -.word func0f06bea0+0x24c # f06c0ec -glabel var7f1aa218 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa21c -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa220 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa224 -.word func0f06bea0+0x288 # f06c128 -glabel var7f1aa228 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa22c -.word func0f06bea0+0x104 # f06bfa4 -glabel var7f1aa230 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa234 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa238 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa23c -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa240 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa244 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa248 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa24c -.word func0f06bea0+0x29c # f06c13c -glabel var7f1aa250 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa254 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa258 -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa25c -.word func0f06bea0+0x2bc # f06c15c -glabel var7f1aa260 -.word func0f06bea0+0x2b0 # f06c150 -glabel var7f1aa264 -.word func0f06bea0+0x1e8 # f06c088 -.text -/* f06bea0: 27bdff58 */ addiu $sp,$sp,-168 -/* f06bea4: 3c017f1b */ lui $at,%hi(var7f1aa20c) -/* f06bea8: c420a20c */ lwc1 $f0,%lo(var7f1aa20c)($at) -/* f06beac: 3c017f1b */ lui $at,%hi(var7f1aa210) -/* f06beb0: c424a210 */ lwc1 $f4,%lo(var7f1aa210)($at) -/* f06beb4: afbf0054 */ sw $ra,0x54($sp) -/* f06beb8: afbe0050 */ sw $s8,0x50($sp) -/* f06bebc: afb7004c */ sw $s7,0x4c($sp) -/* f06bec0: afb60048 */ sw $s6,0x48($sp) -/* f06bec4: afb50044 */ sw $s5,0x44($sp) -/* f06bec8: afb40040 */ sw $s4,0x40($sp) -/* f06becc: afb3003c */ sw $s3,0x3c($sp) -/* f06bed0: afb20038 */ sw $s2,0x38($sp) -/* f06bed4: afb10034 */ sw $s1,0x34($sp) -/* f06bed8: afb00030 */ sw $s0,0x30($sp) -/* f06bedc: afa700b4 */ sw $a3,0xb4($sp) -/* f06bee0: afa0009c */ sw $zero,0x9c($sp) -/* f06bee4: afa00084 */ sw $zero,0x84($sp) -/* f06bee8: afa0008c */ sw $zero,0x8c($sp) -/* f06beec: 3c014020 */ lui $at,0x4020 -/* f06bef0: e7a40098 */ swc1 $f4,0x98($sp) -/* f06bef4: c4880014 */ lwc1 $f8,0x14($a0) -/* f06bef8: 44813000 */ mtc1 $at,$f6 -/* f06befc: 8fae00b8 */ lw $t6,0xb8($sp) -/* f06bf00: 3c018006 */ lui $at,%hi(var8005efc0) -/* f06bf04: 46083283 */ div.s $f10,$f6,$f8 -/* f06bf08: 3c15800a */ lui $s5,%hi(g_Vars) -/* f06bf0c: 26b59fc0 */ addiu $s5,$s5,%lo(g_Vars) -/* f06bf10: 00c08025 */ or $s0,$a2,$zero -/* f06bf14: 00a09025 */ or $s2,$a1,$zero -/* f06bf18: 00809825 */ or $s3,$a0,$zero -/* f06bf1c: 0000b825 */ or $s7,$zero,$zero -/* f06bf20: e42aefc0 */ swc1 $f10,%lo(var8005efc0)($at) -/* f06bf24: c5d00000 */ lwc1 $f16,0x0($t6) -/* f06bf28: c4e40000 */ lwc1 $f4,0x0($a3) -/* f06bf2c: 46008482 */ mul.s $f18,$f16,$f0 -/* f06bf30: 46049180 */ add.s $f6,$f18,$f4 -/* f06bf34: e7a60074 */ swc1 $f6,0x74($sp) -/* f06bf38: c5c80004 */ lwc1 $f8,0x4($t6) -/* f06bf3c: c4f00004 */ lwc1 $f16,0x4($a3) -/* f06bf40: 46004282 */ mul.s $f10,$f8,$f0 -/* f06bf44: 46105480 */ add.s $f18,$f10,$f16 -/* f06bf48: e7b20078 */ swc1 $f18,0x78($sp) -/* f06bf4c: c5c40008 */ lwc1 $f4,0x8($t6) -/* f06bf50: c4e80008 */ lwc1 $f8,0x8($a3) -/* f06bf54: aea002c0 */ sw $zero,0x2c0($s5) -/* f06bf58: 46002182 */ mul.s $f6,$f4,$f0 -/* f06bf5c: 46083280 */ add.s $f10,$f6,$f8 -/* f06bf60: 10c000ac */ beqz $a2,.L0f06c214 -/* f06bf64: e7aa007c */ swc1 $f10,0x7c($sp) -/* f06bf68: 3c1e00ff */ lui $s8,0xff -/* f06bf6c: 37deffff */ ori $s8,$s8,0xffff -/* f06bf70: 96020000 */ lhu $v0,0x0($s0) -.L0f06bf74: -/* f06bf74: 0000a025 */ or $s4,$zero,$zero -/* f06bf78: 0000b025 */ or $s6,$zero,$zero -/* f06bf7c: 305800ff */ andi $t8,$v0,0xff -/* f06bf80: 2719fffc */ addiu $t9,$t8,-4 -/* f06bf84: 2f210015 */ sltiu $at,$t9,0x15 -/* f06bf88: 10200074 */ beqz $at,.L0f06c15c -/* f06bf8c: 0019c880 */ sll $t9,$t9,0x2 -/* f06bf90: 3c017f1b */ lui $at,%hi(var7f1aa214) -/* f06bf94: 00390821 */ addu $at,$at,$t9 -/* f06bf98: 8c39a214 */ lw $t9,%lo(var7f1aa214)($at) -/* f06bf9c: 03200008 */ jr $t9 -/* f06bfa0: 00000000 */ nop -/* f06bfa4: 8e110004 */ lw $s1,0x4($s0) -/* f06bfa8: 02602025 */ or $a0,$s3,$zero -/* f06bfac: 02002825 */ or $a1,$s0,$zero -/* f06bfb0: 0c006973 */ jal model0001a5cc -/* f06bfb4: 00003025 */ or $a2,$zero,$zero -/* f06bfb8: 02202025 */ or $a0,$s1,$zero -/* f06bfbc: 00402825 */ or $a1,$v0,$zero -/* f06bfc0: 8fa600b4 */ lw $a2,0xb4($sp) -/* f06bfc4: 0c00883f */ jal model000220fc -/* f06bfc8: 8fa700b8 */ lw $a3,0xb8($sp) -/* f06bfcc: 1040000d */ beqz $v0,.L0f06c004 -/* f06bfd0: 3c014120 */ lui $at,0x4120 -/* f06bfd4: 8ea202c0 */ lw $v0,0x2c0($s5) -/* f06bfd8: 24170001 */ addiu $s7,$zero,0x1 -/* f06bfdc: afb00084 */ sw $s0,0x84($sp) -/* f06bfe0: 28410014 */ slti $at,$v0,0x14 -/* f06bfe4: 1020005d */ beqz $at,.L0f06c15c -/* f06bfe8: 00024080 */ sll $t0,$v0,0x2 -/* f06bfec: 02a84821 */ addu $t1,$s5,$t0 -/* f06bff0: ad3002c4 */ sw $s0,0x2c4($t1) -/* f06bff4: 8eaa02c0 */ lw $t2,0x2c0($s5) -/* f06bff8: 254b0001 */ addiu $t3,$t2,0x1 -/* f06bffc: 10000057 */ b .L0f06c15c -/* f06c000: aeab02c0 */ sw $t3,0x2c0($s5) -.L0f06c004: -/* f06c004: 44818000 */ mtc1 $at,$f16 -/* f06c008: c6720014 */ lwc1 $f18,0x14($s3) -/* f06c00c: 3c018006 */ lui $at,%hi(var8005efc0) -/* f06c010: 0000b825 */ or $s7,$zero,$zero -/* f06c014: 46128103 */ div.s $f4,$f16,$f18 -/* f06c018: 02602025 */ or $a0,$s3,$zero -/* f06c01c: 02002825 */ or $a1,$s0,$zero -/* f06c020: 00003025 */ or $a2,$zero,$zero -/* f06c024: 0c006973 */ jal model0001a5cc -/* f06c028: e424efc0 */ swc1 $f4,%lo(var8005efc0)($at) -/* f06c02c: 02202025 */ or $a0,$s1,$zero -/* f06c030: 00402825 */ or $a1,$v0,$zero -/* f06c034: 8fa600b4 */ lw $a2,0xb4($sp) -/* f06c038: 0c00883f */ jal model000220fc -/* f06c03c: 8fa700b8 */ lw $a3,0xb8($sp) -/* f06c040: 5040000b */ beqzl $v0,.L0f06c070 -/* f06c044: 3c014020 */ lui $at,0x4020 -/* f06c048: 8ea202c0 */ lw $v0,0x2c0($s5) -/* f06c04c: 28410014 */ slti $at,$v0,0x14 -/* f06c050: 10200006 */ beqz $at,.L0f06c06c -/* f06c054: 00026080 */ sll $t4,$v0,0x2 -/* f06c058: 02ac6821 */ addu $t5,$s5,$t4 -/* f06c05c: adb002c4 */ sw $s0,0x2c4($t5) -/* f06c060: 8eae02c0 */ lw $t6,0x2c0($s5) -/* f06c064: 25cf0001 */ addiu $t7,$t6,0x1 -/* f06c068: aeaf02c0 */ sw $t7,0x2c0($s5) -.L0f06c06c: -/* f06c06c: 3c014020 */ lui $at,0x4020 -.L0f06c070: -/* f06c070: 44813000 */ mtc1 $at,$f6 -/* f06c074: c6680014 */ lwc1 $f8,0x14($s3) -/* f06c078: 3c018006 */ lui $at,%hi(var8005efc0) -/* f06c07c: 46083283 */ div.s $f10,$f6,$f8 -/* f06c080: 10000036 */ b .L0f06c15c -/* f06c084: e42aefc0 */ swc1 $f10,%lo(var8005efc0)($at) -/* f06c088: 12e00034 */ beqz $s7,.L0f06c15c -/* f06c08c: 02602025 */ or $a0,$s3,$zero -/* f06c090: 8e110004 */ lw $s1,0x4($s0) -/* f06c094: 0c006a87 */ jal modelGetNodeRwData -/* f06c098: 02002825 */ or $a1,$s0,$zero -/* f06c09c: 8c430004 */ lw $v1,0x4($v0) -/* f06c0a0: 1060002e */ beqz $v1,.L0f06c15c -/* f06c0a4: 00000000 */ nop -/* f06c0a8: 8e240000 */ lw $a0,0x0($s1) -/* f06c0ac: 0060a025 */ or $s4,$v1,$zero -/* f06c0b0: 14830005 */ bne $a0,$v1,.L0f06c0c8 -/* f06c0b4: 00000000 */ nop -/* f06c0b8: 8e380008 */ lw $t8,0x8($s1) -/* f06c0bc: 009ec824 */ and $t9,$a0,$s8 -/* f06c0c0: 10000001 */ b .L0f06c0c8 -/* f06c0c4: 0319a021 */ addu $s4,$t8,$t9 -.L0f06c0c8: -/* f06c0c8: 8e230004 */ lw $v1,0x4($s1) -/* f06c0cc: 50600005 */ beqzl $v1,.L0f06c0e4 -/* f06c0d0: 8c4a0000 */ lw $t2,0x0($v0) -/* f06c0d4: 8e280008 */ lw $t0,0x8($s1) -/* f06c0d8: 007e4824 */ and $t1,$v1,$s8 -/* f06c0dc: 0109b021 */ addu $s6,$t0,$t1 -/* f06c0e0: 8c4a0000 */ lw $t2,0x0($v0) -.L0f06c0e4: -/* f06c0e4: 1000001d */ b .L0f06c15c -/* f06c0e8: afaa008c */ sw $t2,0x8c($sp) -/* f06c0ec: 12e0001b */ beqz $s7,.L0f06c15c -/* f06c0f0: 00000000 */ nop -/* f06c0f4: 8e020004 */ lw $v0,0x4($s0) -/* f06c0f8: 8c440000 */ lw $a0,0x0($v0) -/* f06c0fc: 10800017 */ beqz $a0,.L0f06c15c -/* f06c100: 00000000 */ nop -/* f06c104: 8c450004 */ lw $a1,0x4($v0) -/* f06c108: 8c430008 */ lw $v1,0x8($v0) -/* f06c10c: 009e5824 */ and $t3,$a0,$s8 -/* f06c110: 10a00003 */ beqz $a1,.L0f06c120 -/* f06c114: 006ba021 */ addu $s4,$v1,$t3 -/* f06c118: 00be6024 */ and $t4,$a1,$s8 -/* f06c11c: 006cb021 */ addu $s6,$v1,$t4 -.L0f06c120: -/* f06c120: 1000000e */ b .L0f06c15c -/* f06c124: afa3008c */ sw $v1,0x8c($sp) -/* f06c128: 02602025 */ or $a0,$s3,$zero -/* f06c12c: 0c0071e1 */ jal model0001c784 -/* f06c130: 02002825 */ or $a1,$s0,$zero -/* f06c134: 10000009 */ b .L0f06c15c -/* f06c138: 00000000 */ nop -/* f06c13c: 02602025 */ or $a0,$s3,$zero -/* f06c140: 0c0071f4 */ jal model0001c7d0 -/* f06c144: 02002825 */ or $a1,$s0,$zero -/* f06c148: 10000004 */ b .L0f06c15c -/* f06c14c: 00000000 */ nop -/* f06c150: 02602025 */ or $a0,$s3,$zero -/* f06c154: 0c007207 */ jal modelAttachHead -/* f06c158: 02002825 */ or $a1,$s0,$zero -.L0f06c15c: -/* f06c15c: 12800018 */ beqz $s4,.L0f06c1c0 -/* f06c160: 02602025 */ or $a0,$s3,$zero -/* f06c164: 8fad008c */ lw $t5,0x8c($sp) -/* f06c168: 8faf00bc */ lw $t7,0xbc($sp) -/* f06c16c: 27ae0098 */ addiu $t6,$sp,0x98 -/* f06c170: afae001c */ sw $t6,0x1c($sp) -/* f06c174: 8fa500b4 */ lw $a1,0xb4($sp) -/* f06c178: 27a60074 */ addiu $a2,$sp,0x74 -/* f06c17c: 8fa700b8 */ lw $a3,0xb8($sp) -/* f06c180: afb40010 */ sw $s4,0x10($sp) -/* f06c184: afb60014 */ sw $s6,0x14($sp) -/* f06c188: afad0018 */ sw $t5,0x18($sp) -/* f06c18c: 0fc57ff7 */ jal func0f15ffdc -/* f06c190: afaf0020 */ sw $t7,0x20($sp) -/* f06c194: 1040000a */ beqz $v0,.L0f06c1c0 -/* f06c198: 24180001 */ addiu $t8,$zero,0x1 -/* f06c19c: 8fb90084 */ lw $t9,0x84($sp) -/* f06c1a0: 8fa800c4 */ lw $t0,0xc4($sp) -/* f06c1a4: afb8009c */ sw $t8,0x9c($sp) -/* f06c1a8: afb00088 */ sw $s0,0x88($sp) -/* f06c1ac: ad190000 */ sw $t9,0x0($t0) -/* f06c1b0: 8f290004 */ lw $t1,0x4($t9) -/* f06c1b4: 8fab00c8 */ lw $t3,0xc8($sp) -/* f06c1b8: 8d2a0000 */ lw $t2,0x0($t1) -/* f06c1bc: ad6a0000 */ sw $t2,0x0($t3) -.L0f06c1c0: -/* f06c1c0: 8e020014 */ lw $v0,0x14($s0) -/* f06c1c4: 10400003 */ beqz $v0,.L0f06c1d4 -/* f06c1c8: 00000000 */ nop -/* f06c1cc: 1000000f */ b .L0f06c20c -/* f06c1d0: 00408025 */ or $s0,$v0,$zero -.L0f06c1d4: -/* f06c1d4: 1200000d */ beqz $s0,.L0f06c20c -/* f06c1d8: 00000000 */ nop -.L0f06c1dc: -/* f06c1dc: 56120004 */ bnel $s0,$s2,.L0f06c1f0 -/* f06c1e0: 8e02000c */ lw $v0,0xc($s0) -/* f06c1e4: 10000009 */ b .L0f06c20c -/* f06c1e8: 00008025 */ or $s0,$zero,$zero -/* f06c1ec: 8e02000c */ lw $v0,0xc($s0) -.L0f06c1f0: -/* f06c1f0: 50400004 */ beqzl $v0,.L0f06c204 -/* f06c1f4: 8e100008 */ lw $s0,0x8($s0) -/* f06c1f8: 10000004 */ b .L0f06c20c -/* f06c1fc: 00408025 */ or $s0,$v0,$zero -/* f06c200: 8e100008 */ lw $s0,0x8($s0) -.L0f06c204: -/* f06c204: 1600fff5 */ bnez $s0,.L0f06c1dc -/* f06c208: 00000000 */ nop -.L0f06c20c: -/* f06c20c: 5600ff59 */ bnezl $s0,.L0f06bf74 -/* f06c210: 96020000 */ lhu $v0,0x0($s0) -.L0f06c214: -/* f06c214: 8fac009c */ lw $t4,0x9c($sp) -/* f06c218: 5180000d */ beqzl $t4,.L0f06c250 -/* f06c21c: 8fbf0054 */ lw $ra,0x54($sp) -/* f06c220: 0c012974 */ jal sqrtf -/* f06c224: c7ac0098 */ lwc1 $f12,0x98($sp) -/* f06c228: 8fad00c0 */ lw $t5,0xc0($sp) -/* f06c22c: 00002825 */ or $a1,$zero,$zero -/* f06c230: e5a00000 */ swc1 $f0,0x0($t5) -/* f06c234: 8faf00d0 */ lw $t7,0xd0($sp) -/* f06c238: 8fa40088 */ lw $a0,0x88($sp) -/* f06c23c: 0c006949 */ jal model0001a524 -/* f06c240: ade40000 */ sw $a0,0x0($t7) -/* f06c244: 8fb800cc */ lw $t8,0xcc($sp) -/* f06c248: af020000 */ sw $v0,0x0($t8) -/* f06c24c: 8fbf0054 */ lw $ra,0x54($sp) -.L0f06c250: -/* f06c250: 44808000 */ mtc1 $zero,$f16 -/* f06c254: 3c018006 */ lui $at,%hi(var8005efc0) -/* f06c258: 8fa2009c */ lw $v0,0x9c($sp) -/* f06c25c: 8fb00030 */ lw $s0,0x30($sp) -/* f06c260: 8fb10034 */ lw $s1,0x34($sp) -/* f06c264: 8fb20038 */ lw $s2,0x38($sp) -/* f06c268: 8fb3003c */ lw $s3,0x3c($sp) -/* f06c26c: 8fb40040 */ lw $s4,0x40($sp) -/* f06c270: 8fb50044 */ lw $s5,0x44($sp) -/* f06c274: 8fb60048 */ lw $s6,0x48($sp) -/* f06c278: 8fb7004c */ lw $s7,0x4c($sp) -/* f06c27c: 8fbe0050 */ lw $s8,0x50($sp) -/* f06c280: 27bd00a8 */ addiu $sp,$sp,0xa8 -/* f06c284: 03e00008 */ jr $ra -/* f06c288: e430efc0 */ swc1 $f16,%lo(var8005efc0)($at) -); +bool func0f06bea0(struct model *model, struct modelnode *endnode, struct modelnode *node, struct coord *arg3, struct coord *arg4, void *arg5, f32 *arg6, struct modelnode **arg7, s32 *hitpart, s32 *arg9, struct modelnode **arg10) +{ + u32 stack; + union modelrodata *rodata; + bool ok = false; + f32 sp98 = MAXFLOAT; + Gfx *s4; + Gfx *s6; + struct gfxvtx *vertices; + struct modelnode *sp88; + struct modelnode *sp84 = NULL; + bool s7; + struct coord sp74; + struct modelrwdata_dl *rwdata; + + vertices = NULL; + s7 = false; + + var8005efc0 = 2.5f / model->scale; + + sp74.x = arg3->x + arg4->f[0] * 32767.0f; + sp74.y = arg3->y + arg4->f[1] * 32767.0f; + sp74.z = arg3->z + arg4->f[2] * 32767.0f; + + g_Vars.hitboundscount = 0; + + while (node) { + u32 type = node->type & 0xff; + s4 = NULL; + s6 = NULL; + + switch (type) { + case MODELNODETYPE_BBOX: + rodata = node->rodata; + + if (model000220fc(&rodata->bbox, model0001a5cc(model, node, 0), arg3, arg4)) { + s7 = true; + sp84 = node; + + if (g_Vars.hitboundscount < ARRAYCOUNT(g_Vars.hitnodes)) { + g_Vars.hitnodes[g_Vars.hitboundscount] = node; + g_Vars.hitboundscount++; + } + } else { + s7 = false; + var8005efc0 = 10.0f / model->scale; + + if (model000220fc(&rodata->bbox, model0001a5cc(model, node, 0), arg3, arg4)) { + if (g_Vars.hitboundscount < ARRAYCOUNT(g_Vars.hitnodes)) { + g_Vars.hitnodes[g_Vars.hitboundscount] = node; + g_Vars.hitboundscount++; + } + } + + var8005efc0 = 2.5f / model->scale; + } + break; + case MODELNODETYPE_DL: + if (s7) { + rodata = node->rodata; + rwdata = modelGetNodeRwData(model, node); + + if (rwdata->gdl != NULL) { + if (rwdata->gdl == rodata->dl.primary) { + s4 = (Gfx *)((u32)rodata->dl.colourtable + ((u32)rodata->dl.primary & 0xffffff)); + } else { + s4 = rwdata->gdl; + } + + if (rodata->dl.secondary != NULL) { + s6 = (Gfx *)((u32)rodata->dl.colourtable + ((u32)rodata->dl.secondary & 0xffffff)); + } + + vertices = rwdata->vertices; + } + } + break; + case MODELNODETYPE_GUNDL: + if (s7) { + if (node->rodata->gundl.primary != NULL) { + s32 base = (s32)node->rodata->gundl.baseaddr; + + s4 = (Gfx *)(base + ((u32)node->rodata->gundl.primary & 0xffffff)); + + if (node->rodata->gundl.secondary != NULL) { + s6 = (Gfx *)(base + ((u32)node->rodata->gundl.secondary & 0xffffff)); + } + + vertices = (struct gfxvtx *)base; + } + } + break; + case MODELNODETYPE_DISTANCE: + model0001c784(model, node); + break; + case MODELNODETYPE_TOGGLE: + model0001c7d0(model, node); + break; + case MODELNODETYPE_HEADSPOT: + modelAttachHead(model, node); + break; + } + + if (s4 && func0f15ffdc(model, arg3, &sp74, arg4, s4, s6, vertices, &sp98, arg5)) { + ok = true; + sp88 = node; + *arg7 = sp84; + *hitpart = sp84->rodata->bbox.hitpart; + } + + if (node->child) { + node = node->child; + } else { + while (node) { + if (node == endnode) { + node = NULL; + break; + } + + if (node->next) { + node = node->next; + break; + } + + node = node->parent; + } + } + } + + if (ok) { + *arg6 = sqrtf(sp98); + *arg10 = sp88; + *arg9 = model0001a524(sp88, 0); + } + + var8005efc0 = 0.0f; + + return ok; +} GLOBAL_ASM( glabel func0f06c28c diff --git a/src/include/game/bg.h b/src/include/game/bg.h index 90e865723..34d503cba 100644 --- a/src/include/game/bg.h +++ b/src/include/game/bg.h @@ -67,7 +67,7 @@ void func0f15ef9c(s32 roomnum); bool func0f15f20c(struct coord *arg0, struct coord *arg1, s32 *arg2, s32 *arg3); u32 func0f15f2b0(void); bool func0f15f560(struct coord *arg0, struct coord *arg1, struct coord *arg2, Gfx *arg3, void *arg4, struct gfxvtx *vertices, struct hitthing *hitthing); -u32 func0f15ffdc(void); +bool func0f15ffdc(struct model *model, struct coord *arg1, struct coord *arg2, struct coord *arg3, Gfx *arg4, Gfx *arg5, struct gfxvtx *vertices, f32 *arg7, void *arg8); u32 func0f160a38(void); u32 func0f1612e4(void); bool func0f161520(struct coord *arg0, struct coord *arg1, s16 room, void *arg3); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 90a75a04c..a7495d547 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -112,7 +112,7 @@ bool func0f06b39c(struct coord *arg0, struct coord *arg1, struct coord *arg2, f3 u32 func0f06b488(void); u32 func0f06b610(void); u32 func0f06be44(void); -bool func0f06bea0(struct model *model, struct modelnode *arg1, struct modelnode *arg2, struct coord *arg3, struct coord *arg4, void *arg5, void *arg6, void *arg7, void *arg8, void *arg9, void *arg10); +bool func0f06bea0(struct model *model, struct modelnode *arg1, struct modelnode *arg2, struct coord *arg3, struct coord *arg4, void *arg5, f32 *arg6, struct modelnode **arg7, s32 *hitpart, s32 *arg9, struct modelnode **arg10); u32 func0f06c28c(void); u32 func0f06c8ac(void); s32 func0f06cd00(struct defaultobj *obj, struct coord *pos, struct coord *arg2, struct coord *arg3); diff --git a/src/include/lib/model.h b/src/include/lib/model.h index bb072c670..cadc02363 100644 --- a/src/include/lib/model.h +++ b/src/include/lib/model.h @@ -90,7 +90,7 @@ void modelRenderNodeType16(struct modelrenderdata *renderdata, struct modelnode void model000216cc(struct modelrenderdata *renderdata, struct textureconfig *tconfig, s32 arg2); void modelRenderNodeGunfire(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node); void modelRender(struct modelrenderdata *renderdata, struct model *model); -bool model000220fc(union modelrodata *rodata, Mtxf *mtx, struct coord *arg2, struct coord *arg3); +bool model000220fc(struct modelrodata_bbox *bbox, Mtxf *mtx, struct coord *arg2, struct coord *arg3); s32 model000225d4(struct model *model, struct coord *arg1, struct coord *arg2, struct modelnode **startnode); void modelPromoteNodeOffsetsToPointers(struct modelnode *node, u32 vma, u32 fileramaddr); void modelPromoteOffsetsToPointers(struct modelfiledata *filedata, u32 arg1, u32 arg2); diff --git a/src/include/types.h b/src/include/types.h index 5a936e022..3babc1dfa 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -141,27 +141,8 @@ struct g_vars { /*0002b4*/ u32 knockoutcount; /*0002b8*/ struct textoverride *textoverrides; /*0002bc*/ s32 roomcount; - /*0002c0*/ u32 hitboundscount; - /*0002c4*/ u32 unk0002c4; - /*0002c8*/ u32 unk0002c8; - /*0002cc*/ u32 unk0002cc; - /*0002d0*/ u32 unk0002d0; - /*0002d4*/ u32 unk0002d4; - /*0002d8*/ u32 unk0002d8; - /*0002dc*/ u32 unk0002dc; - /*0002e0*/ u32 unk0002e0; - /*0002e4*/ u32 unk0002e4; - /*0002e8*/ u32 unk0002e8; - /*0002ec*/ u32 unk0002ec; - /*0002f0*/ u32 unk0002f0; - /*0002f4*/ u32 unk0002f4; - /*0002f8*/ u32 unk0002f8; - /*0002fc*/ u32 unk0002fc; - /*000300*/ u32 unk000300; - /*000304*/ u32 unk000304; - /*000308*/ u32 unk000308; - /*00030c*/ u32 unk00030c; - /*000310*/ u32 unk000310; + /*0002c0*/ s32 hitboundscount; + /*0002c4*/ struct modelnode *hitnodes[20]; /*000314*/ u32 mplayerisrunning; // combat sim with any number of players, coop with human buddy, and counter-op /*000318*/ u32 normmplayerisrunning; // combat sim with any number of players /*00031c*/ s32 lvmpbotlevel; diff --git a/src/lib/model.c b/src/lib/model.c index 59b53c75c..ad62cbb20 100644 --- a/src/lib/model.c +++ b/src/lib/model.c @@ -6957,7 +6957,7 @@ s32 model000225d4(struct model *model, struct coord *arg1, struct coord *arg2, s rodata = node->rodata; mtx = model0001a5cc(model, node, 0); - if (model000220fc(rodata, mtx, arg1, arg2)) { + if (model000220fc(&rodata->bbox, mtx, arg1, arg2)) { *startnode = node; return rodata->bbox.hitpart; }