diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 3fc9c6d84..f94294ca5 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -15,6 +15,7 @@ #include "game/game_0b0fd0.h" #include "game/game_0b28d0.h" #include "game/game_0b3350.h" +#include "game/game_0b4950.h" #include "game/game_0b69d0.h" #include "game/game_0c33f0.h" #include "game/game_127910.h" @@ -14162,314 +14163,109 @@ f32 func0f0278a4(struct chrdata *chr) return result; } -GLOBAL_ASM( -glabel func0f027994 -/* f027994: 27bdff18 */ addiu $sp,$sp,-232 -/* f027998: afbf0054 */ sw $ra,0x54($sp) -/* f02799c: afb40050 */ sw $s4,0x50($sp) -/* f0279a0: afb3004c */ sw $s3,0x4c($sp) -/* f0279a4: afb20048 */ sw $s2,0x48($sp) -/* f0279a8: afb10044 */ sw $s1,0x44($sp) -/* f0279ac: afb00040 */ sw $s0,0x40($sp) -/* f0279b0: afa600f0 */ sw $a2,0xf0($sp) -/* f0279b4: afa700f4 */ sw $a3,0xf4($sp) -/* f0279b8: 8c900004 */ lw $s0,0x4($a0) -/* f0279bc: 00808825 */ or $s1,$a0,$zero -/* f0279c0: 00a09825 */ or $s3,$a1,$zero -/* f0279c4: 8e0e0018 */ lw $t6,0x18($s0) -/* f0279c8: 31cf0400 */ andi $t7,$t6,0x400 -/* f0279cc: 55e0010c */ bnezl $t7,.L0f027e00 -/* f0279d0: 8fbf0054 */ lw $ra,0x54($sp) -/* f0279d4: 90980001 */ lbu $t8,0x1($a0) -/* f0279d8: 02002025 */ or $a0,$s0,$zero -/* f0279dc: 33190002 */ andi $t9,$t8,0x2 -/* f0279e0: 53200107 */ beqzl $t9,.L0f027e00 -/* f0279e4: 8fbf0054 */ lw $ra,0x54($sp) -/* f0279e8: afb000cc */ sw $s0,0xcc($sp) -/* f0279ec: 0fc09e29 */ jal func0f0278a4 -/* f0279f0: afb100e8 */ sw $s1,0xe8($sp) -/* f0279f4: 8fa800e8 */ lw $t0,0xe8($sp) -/* f0279f8: c6680034 */ lwc1 $f8,0x34($s3) -/* f0279fc: 46000086 */ mov.s $f2,$f0 -/* f027a00: c5040014 */ lwc1 $f4,0x14($t0) -/* f027a04: 8fa900cc */ lw $t1,0xcc($sp) -/* f027a08: 46002181 */ sub.s $f6,$f4,$f0 -/* f027a0c: 4608303c */ c.lt.s $f6,$f8 -/* f027a10: 00000000 */ nop -/* f027a14: 450200fa */ bc1fl .L0f027e00 -/* f027a18: 8fbf0054 */ lw $ra,0x54($sp) -/* f027a1c: 8d340020 */ lw $s4,0x20($t1) -/* f027a20: afa000c0 */ sw $zero,0xc0($sp) -/* f027a24: afa000bc */ sw $zero,0xbc($sp) -/* f027a28: afa000b8 */ sw $zero,0xb8($sp) -/* f027a2c: afa00084 */ sw $zero,0x84($sp) -/* f027a30: afa00080 */ sw $zero,0x80($sp) -/* f027a34: e7a200c8 */ swc1 $f2,0xc8($sp) -/* f027a38: 0c006983 */ jal func0001a60c -/* f027a3c: 02802025 */ or $a0,$s4,$zero -/* f027a40: c7a200c8 */ lwc1 $f2,0xc8($sp) -/* f027a44: 2672000c */ addiu $s2,$s3,0xc -/* f027a48: 02402825 */ or $a1,$s2,$zero -/* f027a4c: 44071000 */ mfc1 $a3,$f2 -/* f027a50: 02602025 */ or $a0,$s3,$zero -/* f027a54: 0fc1ace7 */ jal func0f06b39c -/* f027a58: 24460030 */ addiu $a2,$v0,0x30 -/* f027a5c: 10400004 */ beqz $v0,.L0f027a70 -/* f027a60: 240a0001 */ addiu $t2,$zero,0x1 -/* f027a64: 240b0001 */ addiu $t3,$zero,0x1 -/* f027a68: afaa00b8 */ sw $t2,0xb8($sp) -/* f027a6c: afab00c0 */ sw $t3,0xc0($sp) -.L0f027a70: -/* f027a70: 8fac00c0 */ lw $t4,0xc0($sp) -/* f027a74: 5180008e */ beqzl $t4,.L0f027cb0 -/* f027a78: 8fb800c0 */ lw $t8,0xc0($sp) -/* f027a7c: 0fc0cfe8 */ jal chrGetShield -/* f027a80: 8fa400cc */ lw $a0,0xcc($sp) -/* f027a84: 44805000 */ mtc1 $zero,$f10 -/* f027a88: 3c014120 */ lui $at,0x4120 -/* f027a8c: 4600503c */ c.lt.s $f10,$f0 -/* f027a90: 00000000 */ nop -/* f027a94: 45020007 */ bc1fl .L0f027ab4 -/* f027a98: 8fad00e8 */ lw $t5,0xe8($sp) -/* f027a9c: 44818000 */ mtc1 $at,$f16 -/* f027aa0: c6920014 */ lwc1 $f18,0x14($s4) -/* f027aa4: 3c018006 */ lui $at,%hi(var8005efc0) -/* f027aa8: 46128103 */ div.s $f4,$f16,$f18 -/* f027aac: e424efc0 */ swc1 $f4,%lo(var8005efc0)($at) -/* f027ab0: 8fad00e8 */ lw $t5,0xe8($sp) -.L0f027ab4: -/* f027ab4: 8db0001c */ lw $s0,0x1c($t5) -/* f027ab8: 52000008 */ beqzl $s0,.L0f027adc -/* f027abc: 8fae00f4 */ lw $t6,0xf4($sp) -.L0f027ac0: -/* f027ac0: 8e110020 */ lw $s1,0x20($s0) -/* f027ac4: 02002025 */ or $a0,$s0,$zero -/* f027ac8: 0fc21668 */ jal func0f0859a0 -/* f027acc: 02602825 */ or $a1,$s3,$zero -/* f027ad0: 1620fffb */ bnez $s1,.L0f027ac0 -/* f027ad4: 02208025 */ or $s0,$s1,$zero -/* f027ad8: 8fae00f4 */ lw $t6,0xf4($sp) -.L0f027adc: -/* f027adc: 3c018006 */ lui $at,%hi(var8005efc0) -/* f027ae0: 02802025 */ or $a0,$s4,$zero -/* f027ae4: 15c00009 */ bnez $t6,.L0f027b0c -/* f027ae8: 02602825 */ or $a1,$s3,$zero -/* f027aec: 44803000 */ mtc1 $zero,$f6 -/* f027af0: c428efc0 */ lwc1 $f8,%lo(var8005efc0)($at) -/* f027af4: 02403025 */ or $a2,$s2,$zero -/* f027af8: 27a700bc */ addiu $a3,$sp,0xbc -/* f027afc: 4608303c */ c.lt.s $f6,$f8 -/* f027b00: 00000000 */ nop -/* f027b04: 45020036 */ bc1fl .L0f027be0 -/* f027b08: 02802025 */ or $a0,$s4,$zero -.L0f027b0c: -/* f027b0c: 02403025 */ or $a2,$s2,$zero -/* f027b10: 0c008975 */ jal func000225d4 -/* f027b14: 27a700bc */ addiu $a3,$sp,0xbc -/* f027b18: 18400059 */ blez $v0,.L0f027c80 -/* f027b1c: afa200c0 */ sw $v0,0xc0($sp) -/* f027b20: 27b10080 */ addiu $s1,$sp,0x80 -/* f027b24: 27b00084 */ addiu $s0,$sp,0x84 -.L0f027b28: -/* f027b28: 27af0088 */ addiu $t7,$sp,0x88 -/* f027b2c: afaf0010 */ sw $t7,0x10($sp) -/* f027b30: 02802025 */ or $a0,$s4,$zero -/* f027b34: 8fa500bc */ lw $a1,0xbc($sp) -/* f027b38: 02603025 */ or $a2,$s3,$zero -/* f027b3c: 02403825 */ or $a3,$s2,$zero -/* f027b40: afb00014 */ sw $s0,0x14($sp) -/* f027b44: 0fc21165 */ jal func0f084594 -/* f027b48: afb10018 */ sw $s1,0x18($sp) -/* f027b4c: 1040001b */ beqz $v0,.L0f027bbc -/* f027b50: 02802025 */ or $a0,$s4,$zero -/* f027b54: 8fb90084 */ lw $t9,0x84($sp) -/* f027b58: 8e98000c */ lw $t8,0xc($s4) -/* f027b5c: 27a50088 */ addiu $a1,$sp,0x88 -/* f027b60: 00194180 */ sll $t0,$t9,0x6 -/* f027b64: 27a600dc */ addiu $a2,$sp,0xdc -/* f027b68: 0c0056da */ jal func00015b68 -/* f027b6c: 03082021 */ addu $a0,$t8,$t0 -/* f027b70: 0fc2d5de */ jal currentPlayerGetUnk174c -/* f027b74: 00000000 */ nop -/* f027b78: 00402025 */ or $a0,$v0,$zero -/* f027b7c: 0c0056d9 */ jal func00015b64 -/* f027b80: 27a500dc */ addiu $a1,$sp,0xdc -/* f027b84: 8faa0084 */ lw $t2,0x84($sp) -/* f027b88: 8e89000c */ lw $t1,0xc($s4) -/* f027b8c: 27a50094 */ addiu $a1,$sp,0x94 -/* f027b90: 000a5980 */ sll $t3,$t2,0x6 -/* f027b94: 27a600d0 */ addiu $a2,$sp,0xd0 -/* f027b98: 0c0056c5 */ jal func00015b14 -/* f027b9c: 012b2021 */ addu $a0,$t1,$t3 -/* f027ba0: 0fc2d5de */ jal currentPlayerGetUnk174c -/* f027ba4: 00000000 */ nop -/* f027ba8: 00402025 */ or $a0,$v0,$zero -/* f027bac: 0c0056c4 */ jal func00015b10 -/* f027bb0: 27a500d0 */ addiu $a1,$sp,0xd0 -/* f027bb4: 10000032 */ b .L0f027c80 -/* f027bb8: 00000000 */ nop -.L0f027bbc: -/* f027bbc: 02602825 */ or $a1,$s3,$zero -/* f027bc0: 02403025 */ or $a2,$s2,$zero -/* f027bc4: 0c008975 */ jal func000225d4 -/* f027bc8: 27a700bc */ addiu $a3,$sp,0xbc -/* f027bcc: 1c40ffd6 */ bgtz $v0,.L0f027b28 -/* f027bd0: afa200c0 */ sw $v0,0xc0($sp) -/* f027bd4: 1000002a */ b .L0f027c80 -/* f027bd8: 00000000 */ nop -/* f027bdc: 02802025 */ or $a0,$s4,$zero -.L0f027be0: -/* f027be0: 0c008975 */ jal func000225d4 -/* f027be4: 02602825 */ or $a1,$s3,$zero -/* f027be8: 18400025 */ blez $v0,.L0f027c80 -/* f027bec: afa200c0 */ sw $v0,0xc0($sp) -/* f027bf0: 8e8c0008 */ lw $t4,0x8($s4) -/* f027bf4: 27b00084 */ addiu $s0,$sp,0x84 -/* f027bf8: 27b10080 */ addiu $s1,$sp,0x80 -/* f027bfc: 8d850000 */ lw $a1,0x0($t4) -/* f027c00: 27ad0088 */ addiu $t5,$sp,0x88 -/* f027c04: 27ae0070 */ addiu $t6,$sp,0x70 -/* f027c08: 27af00bc */ addiu $t7,$sp,0xbc -/* f027c0c: 27b900c0 */ addiu $t9,$sp,0xc0 -/* f027c10: afb90020 */ sw $t9,0x20($sp) -/* f027c14: afaf001c */ sw $t7,0x1c($sp) -/* f027c18: afae0018 */ sw $t6,0x18($sp) -/* f027c1c: afad0014 */ sw $t5,0x14($sp) -/* f027c20: afb10028 */ sw $s1,0x28($sp) -/* f027c24: afb00024 */ sw $s0,0x24($sp) -/* f027c28: afb20010 */ sw $s2,0x10($sp) -/* f027c2c: 02802025 */ or $a0,$s4,$zero -/* f027c30: 02603825 */ or $a3,$s3,$zero -/* f027c34: 0fc1afa8 */ jal func0f06bea0 -/* f027c38: 00a03025 */ or $a2,$a1,$zero -/* f027c3c: 50400010 */ beqzl $v0,.L0f027c80 -/* f027c40: afa000c0 */ sw $zero,0xc0($sp) -/* f027c44: 0fc2d5de */ jal currentPlayerGetUnk174c -/* f027c48: 00000000 */ nop -/* f027c4c: 00402025 */ or $a0,$v0,$zero -/* f027c50: 27a50088 */ addiu $a1,$sp,0x88 -/* f027c54: 0c0056da */ jal func00015b68 -/* f027c58: 27a600dc */ addiu $a2,$sp,0xdc -/* f027c5c: 0fc2d5de */ jal currentPlayerGetUnk174c -/* f027c60: 00000000 */ nop -/* f027c64: 00402025 */ or $a0,$v0,$zero -/* f027c68: 27a50094 */ addiu $a1,$sp,0x94 -/* f027c6c: 0c0056c5 */ jal func00015b14 -/* f027c70: 27a600d0 */ addiu $a2,$sp,0xd0 -/* f027c74: 10000002 */ b .L0f027c80 -/* f027c78: 00000000 */ nop -/* f027c7c: afa000c0 */ sw $zero,0xc0($sp) -.L0f027c80: -/* f027c80: 3c018006 */ lui $at,%hi(var8005efc0) -/* f027c84: c430efc0 */ lwc1 $f16,%lo(var8005efc0)($at) -/* f027c88: 44805000 */ mtc1 $zero,$f10 -/* f027c8c: 00000000 */ nop -/* f027c90: 4610503c */ c.lt.s $f10,$f16 -/* f027c94: 00000000 */ nop -/* f027c98: 45020005 */ bc1fl .L0f027cb0 -/* f027c9c: 8fb800c0 */ lw $t8,0xc0($sp) -/* f027ca0: 44809000 */ mtc1 $zero,$f18 -/* f027ca4: 3c018006 */ lui $at,%hi(var8005efc0) -/* f027ca8: e432efc0 */ swc1 $f18,%lo(var8005efc0)($at) -/* f027cac: 8fb800c0 */ lw $t8,0xc0($sp) -.L0f027cb0: -/* f027cb0: 5b000035 */ blezl $t8,.L0f027d88 -/* f027cb4: 8fb900b8 */ lw $t9,0xb8($sp) -/* f027cb8: 0fc2d5be */ jal currentPlayerGetMatrix1740 -/* f027cbc: 00000000 */ nop -/* f027cc0: c7a400dc */ lwc1 $f4,0xdc($sp) -/* f027cc4: c4460008 */ lwc1 $f6,0x8($v0) -/* f027cc8: c7aa00e0 */ lwc1 $f10,0xe0($sp) -/* f027ccc: c4500018 */ lwc1 $f16,0x18($v0) -/* f027cd0: 46062202 */ mul.s $f8,$f4,$f6 -/* f027cd4: c7a600e4 */ lwc1 $f6,0xe4($sp) -/* f027cd8: 8fa400cc */ lw $a0,0xcc($sp) -/* f027cdc: 46105482 */ mul.s $f18,$f10,$f16 -/* f027ce0: c44a0028 */ lwc1 $f10,0x28($v0) -/* f027ce4: 460a3402 */ mul.s $f16,$f6,$f10 -/* f027ce8: c6660034 */ lwc1 $f6,0x34($s3) -/* f027cec: 46124100 */ add.s $f4,$f8,$f18 -/* f027cf0: c4520038 */ lwc1 $f18,0x38($v0) -/* f027cf4: 46102200 */ add.s $f8,$f4,$f16 -/* f027cf8: 46089080 */ add.s $f2,$f18,$f8 -/* f027cfc: 46001087 */ neg.s $f2,$f2 -/* f027d00: 4606103c */ c.lt.s $f2,$f6 -/* f027d04: 00000000 */ nop -/* f027d08: 4502001f */ bc1fl .L0f027d88 -/* f027d0c: 8fb900b8 */ lw $t9,0xb8($sp) -/* f027d10: 0fc0cfe8 */ jal chrGetShield -/* f027d14: e7a20068 */ swc1 $f2,0x68($sp) -/* f027d18: 44805000 */ mtc1 $zero,$f10 -/* f027d1c: c7a20068 */ lwc1 $f2,0x68($sp) -/* f027d20: 8fa800bc */ lw $t0,0xbc($sp) -/* f027d24: 4600503c */ c.lt.s $f10,$f0 -/* f027d28: 8fa90084 */ lw $t1,0x84($sp) -/* f027d2c: 8fab0080 */ lw $t3,0x80($sp) -/* f027d30: 27aa0088 */ addiu $t2,$sp,0x88 -/* f027d34: 240c0001 */ addiu $t4,$zero,0x1 -/* f027d38: 44061000 */ mfc1 $a2,$f2 -/* f027d3c: afac0024 */ sw $t4,0x24($sp) -/* f027d40: afaa0014 */ sw $t2,0x14($sp) -/* f027d44: 02602025 */ or $a0,$s3,$zero -/* f027d48: 8fa500e8 */ lw $a1,0xe8($sp) -/* f027d4c: 8fa700c0 */ lw $a3,0xc0($sp) -/* f027d50: afb40020 */ sw $s4,0x20($sp) -/* f027d54: 00006825 */ or $t5,$zero,$zero -/* f027d58: afa80010 */ sw $t0,0x10($sp) -/* f027d5c: afa90018 */ sw $t1,0x18($sp) -/* f027d60: 45000002 */ bc1f .L0f027d6c -/* f027d64: afab001c */ sw $t3,0x1c($sp) -/* f027d68: 240d0001 */ addiu $t5,$zero,0x1 -.L0f027d6c: -/* f027d6c: 27ae00dc */ addiu $t6,$sp,0xdc -/* f027d70: 27af00d0 */ addiu $t7,$sp,0xd0 -/* f027d74: afaf0030 */ sw $t7,0x30($sp) -/* f027d78: afae002c */ sw $t6,0x2c($sp) -/* f027d7c: 0fc187ea */ jal func0f061fa8 -/* f027d80: afad0028 */ sw $t5,0x28($sp) -/* f027d84: 8fb900b8 */ lw $t9,0xb8($sp) -.L0f027d88: -/* f027d88: 8fb800c0 */ lw $t8,0xc0($sp) -/* f027d8c: 5320001c */ beqzl $t9,.L0f027e00 -/* f027d90: 8fbf0054 */ lw $ra,0x54($sp) -/* f027d94: 1f000019 */ bgtz $t8,.L0f027dfc -/* f027d98: 8fa800e8 */ lw $t0,0xe8($sp) -/* f027d9c: c6640034 */ lwc1 $f4,0x34($s3) -/* f027da0: c5100014 */ lwc1 $f16,0x14($t0) -/* f027da4: 8faa00f0 */ lw $t2,0xf0($sp) -/* f027da8: 4604803e */ c.le.s $f16,$f4 -/* f027dac: 00000000 */ nop -/* f027db0: 45020013 */ bc1fl .L0f027e00 -/* f027db4: 8fbf0054 */ lw $ra,0x54($sp) -/* f027db8: 51400011 */ beqzl $t2,.L0f027e00 -/* f027dbc: 8fbf0054 */ lw $ra,0x54($sp) -/* f027dc0: 0fc0a221 */ jal chrGetTargetProp -/* f027dc4: 8fa400cc */ lw $a0,0xcc($sp) -/* f027dc8: 3c09800a */ lui $t1,%hi(g_Vars+0x284) -/* f027dcc: 8d29a244 */ lw $t1,%lo(g_Vars+0x284)($t1) -/* f027dd0: 8fac00cc */ lw $t4,0xcc($sp) -/* f027dd4: 8d2b00bc */ lw $t3,0xbc($t1) -/* f027dd8: 544b0005 */ bnel $v0,$t3,.L0f027df0 -/* f027ddc: 8faf00cc */ lw $t7,0xcc($sp) -/* f027de0: 8d8d0018 */ lw $t5,0x18($t4) -/* f027de4: 35ae0004 */ ori $t6,$t5,0x4 -/* f027de8: ad8e0018 */ sw $t6,0x18($t4) -/* f027dec: 8faf00cc */ lw $t7,0xcc($sp) -.L0f027df0: -/* f027df0: 81f9000a */ lb $t9,0xa($t7) -/* f027df4: 27380001 */ addiu $t8,$t9,0x1 -/* f027df8: a1f8000a */ sb $t8,0xa($t7) -.L0f027dfc: -/* f027dfc: 8fbf0054 */ lw $ra,0x54($sp) -.L0f027e00: -/* f027e00: 8fb00040 */ lw $s0,0x40($sp) -/* f027e04: 8fb10044 */ lw $s1,0x44($sp) -/* f027e08: 8fb20048 */ lw $s2,0x48($sp) -/* f027e0c: 8fb3004c */ lw $s3,0x4c($sp) -/* f027e10: 8fb40050 */ lw $s4,0x50($sp) -/* f027e14: 03e00008 */ jr $ra -/* f027e18: 27bd00e8 */ addiu $sp,$sp,0xe8 -); +void func0f027994(struct prop *prop, struct shotdata *shotdata, bool arg2, bool arg3) +{ + struct coord spdc; + struct coord spd0; + struct chrdata *chr = prop->chr; + + if ((chr->chrflags & CHRCFLAG_HIDDEN) == 0 && (prop->flags & PROPFLAG_ONSCREEN)) { + f32 fStack32 = func0f0278a4(chr); + + if (prop->z - fStack32 < shotdata->unk34) { + struct model *model = chr->model; + s32 spc0 = 0; + struct modelnode *node = NULL; + s32 spb8 = 0; + u32 stack1; + u32 stack2; + u32 stack3; + u32 stack4; + u32 stack5; + struct prop *child; + struct coord sp94; + struct coord sp88; + s32 sp84 = 0; + s32 sp80 = 0; + Mtxf *iVar5 = func0001a60c(model); + struct prop *next; + u32 stack6; + s32 sp70; + Mtxf *mtx; + f32 sp68; + + if (func0f06b39c(&shotdata->unk00, &shotdata->unk0c, (struct coord *)iVar5->m[3], fStack32)) { + spb8 = 1; + spc0 = 1; + } + + if (spc0) { + if (chrGetShield(chr) > 0.0f) { + var8005efc0 = 10.0f / model->scale; + } + + child = prop->child; + + while (child) { + next = child->next; + func0f0859a0(child, shotdata); + child = next; + } + + if (arg3 || var8005efc0 > 0.0f) { + spc0 = func000225d4(model, &shotdata->unk00, &shotdata->unk0c, &node); + + while (spc0 > 0) { + if (func0f084594(model, node, &shotdata->unk00, &shotdata->unk0c, &sp88, &sp84, &sp80)) { + func00015b68(&model->matrices[sp84], &sp88, &spdc); + func00015b64(currentPlayerGetUnk174c(), &spdc); + func00015b14(&model->matrices[sp84], &sp94, &spd0); + func00015b10(currentPlayerGetUnk174c(), &spd0); + break; + } + + spc0 = func000225d4(model, &shotdata->unk00, &shotdata->unk0c, &node); + } + } else { + spc0 = func000225d4(model, &shotdata->unk00, &shotdata->unk0c, &node); + + if (spc0 > 0) { + + if (func0f06bea0(model, model->filedata->rootnode, model->filedata->rootnode, &shotdata->unk00, + &shotdata->unk0c, &sp88, &sp70, &node, &spc0, &sp84, &sp80)) { + func00015b68(currentPlayerGetUnk174c(), &sp88, &spdc); + func00015b14(currentPlayerGetUnk174c(), &sp94, &spd0); + } else { + spc0 = 0; + } + } + } + + if (var8005efc0 > 0.0f) { + var8005efc0 = 0.0f; + } + } + + if (spc0 > 0) { + mtx = currentPlayerGetMatrix1740(); + sp68 = spdc.x * mtx->m[0][2] + spdc.y * mtx->m[1][2] + spdc.z * mtx->m[2][2] + mtx->m[3][2]; + sp68 = -sp68; + + if (sp68 < shotdata->unk34) { + func0f061fa8(shotdata, prop, sp68, spc0, node, &sp88, sp84, sp80, model, 1, chrGetShield(chr) > 0.0f, &spdc, &spd0); + } + } + + if (spb8 && spc0 <= 0 && prop->z <= shotdata->unk34 && arg2) { + if (chrGetTargetProp(chr) == g_Vars.currentplayer->prop) { + chr->chrflags |= CHRCFLAG_NEAR_MISS; + } + + chr->numclosearghs++; + } + } + } +} #if VERSION >= VERSION_NTSC_1_0 GLOBAL_ASM( diff --git a/src/include/data.h b/src/include/data.h index a559f4fe6..33bb84c09 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -58,7 +58,7 @@ extern u32 var8005ef90; extern bool g_ModelDistanceDisabled; extern f32 g_ModelDistanceScale; extern bool var8005efbc; -extern u32 var8005efc0; +extern f32 var8005efc0; extern bool (*var8005efc4)(struct model *model, struct modelnode *node); extern struct gfxvtx *(*g_ModelVtxAllocatorFunc)(s32 numvertices); extern void *var8005efcc; diff --git a/src/include/game/prop.h b/src/include/game/prop.h index 9b7fcc2ce..ec8e03710 100644 --- a/src/include/game/prop.h +++ b/src/include/game/prop.h @@ -23,7 +23,7 @@ void func0f060bac(s32 weaponnum, struct prop *prop); struct prop *shotCalculateHits(s32 handnum, bool arg1, struct coord *arg2, struct coord *arg3, struct coord *gunpos, struct coord *dir, u32 arg6, f32 arg7, bool arg8); struct prop *func0f061d54(s32 handnum, u32 arg1, u32 arg2); void handCreateBulletRaycast(s32 handnum, bool arg1, bool dorandom, s32 arg3, bool arg4); -u32 func0f061fa8(void); +void func0f061fa8(struct shotdata *shotdata, struct prop *prop, f32 arg2, s32 arg3, struct modelnode *node, void *arg5, s32 arg6, s32 arg7, struct model *model, s32 arg9, s32 arg10, void *arg11, void *arg12); void handInflictCloseRangeDamage(s32 handnum, struct gset *gset, bool arg2); void handTickAttack(s32 handnum); void handsTickAttack(void); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index ab8dfa513..0d5790cc5 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -113,7 +113,7 @@ bool func0f06b39c(struct coord *arg0, struct coord *arg1, struct coord *arg2, f3 u32 func0f06b488(void); u32 func0f06b610(void); u32 func0f06be44(void); -u32 func0f06bea0(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); u32 func0f06c28c(void); u32 func0f06c8ac(void); u32 func0f06cd00(void); @@ -224,7 +224,7 @@ void func0f08307c(struct prop *prop, bool arg1); u32 func0f083db0(void); u32 func0f0840ac(void); void func0f0841dc(struct defaultobj *obj, struct coord *pos, s32 playernum); -u32 func0f084594(void); +bool func0f084594(struct model *model, struct modelnode *node, struct coord *arg2, struct coord *arg3, void *arg4, void *arg5, void *arg6); u32 func0f0849dc(void); u32 add43214321(u32 value); void glassDestroy(struct defaultobj *obj); diff --git a/src/lib/model.c b/src/lib/model.c index 9e11defa6..03039a0b2 100644 --- a/src/lib/model.c +++ b/src/lib/model.c @@ -28,7 +28,7 @@ u32 var8005efb0 = 0; bool g_ModelDistanceDisabled = false; f32 g_ModelDistanceScale = 1; bool var8005efbc = false; -u32 var8005efc0 = 0x00000000; +f32 var8005efc0 = 0; bool (*var8005efc4)(struct model *model, struct modelnode *node) = NULL; #if VERSION >= VERSION_PAL_FINAL