diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 4a3e531b6..528ac420d 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -13414,106 +13414,34 @@ glabel chrTryRunSideways /* f039fc8: 27bd0048 */ addiu $sp,$sp,0x48 ); -GLOBAL_ASM( -glabel chrTryAttackWalk -.late_rodata -glabel var7f1a8eb8 -.word 0x49742400 -.text -/* f039fcc: 27bdffd8 */ addiu $sp,$sp,-40 -/* f039fd0: afb00018 */ sw $s0,0x18($sp) -/* f039fd4: 00808025 */ or $s0,$a0,$zero -/* f039fd8: 10800004 */ beqz $a0,.L0f039fec -/* f039fdc: afbf001c */ sw $ra,0x1c($sp) -/* f039fe0: 908e02fe */ lbu $t6,0x2fe($a0) -/* f039fe4: 10000002 */ beqz $zero,.L0f039ff0 -/* f039fe8: afae0024 */ sw $t6,0x24($sp) -.L0f039fec: -/* f039fec: afa00024 */ sw $zero,0x24($sp) -.L0f039ff0: -/* f039ff0: 8faf0024 */ lw $t7,0x24($sp) -/* f039ff4: 24010002 */ addiu $at,$zero,0x2 -/* f039ff8: 11e10003 */ beq $t7,$at,.L0f03a008 -/* f039ffc: 24010003 */ addiu $at,$zero,0x3 -/* f03a000: 15e10003 */ bne $t7,$at,.L0f03a010 -/* f03a004: 00000000 */ sll $zero,$zero,0x0 -.L0f03a008: -/* f03a008: 10000041 */ beqz $zero,.L0f03a110 -/* f03a00c: 00001025 */ or $v0,$zero,$zero -.L0f03a010: -/* f03a010: 0fc0e686 */ jal chrIsReadyForOrders -/* f03a014: 02002025 */ or $a0,$s0,$zero -/* f03a018: 5040003d */ beqzl $v0,.L0f03a110 -/* f03a01c: 00001025 */ or $v0,$zero,$zero -/* f03a020: 8e03001c */ lw $v1,0x1c($s0) -/* f03a024: 02002025 */ or $a0,$s0,$zero -/* f03a028: 00003825 */ or $a3,$zero,$zero -/* f03a02c: 24650008 */ addiu $a1,$v1,0x8 -/* f03a030: 24660028 */ addiu $a2,$v1,0x28 -/* f03a034: 0fc0e47b */ jal func0f0391ec -/* f03a038: afa30020 */ sw $v1,0x20($sp) -/* f03a03c: 10400033 */ beqz $v0,.L0f03a10c -/* f03a040: 8fa30020 */ lw $v1,0x20($sp) -/* f03a044: 02002025 */ or $a0,$s0,$zero -/* f03a048: 00002825 */ or $a1,$zero,$zero -/* f03a04c: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck -/* f03a050: afa30020 */ sw $v1,0x20($sp) -/* f03a054: 14400007 */ bnez $v0,.L0f03a074 -/* f03a058: 8fa30020 */ lw $v1,0x20($sp) -/* f03a05c: 02002025 */ or $a0,$s0,$zero -/* f03a060: 24050001 */ addiu $a1,$zero,0x1 -/* f03a064: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck -/* f03a068: afa30020 */ sw $v1,0x20($sp) -/* f03a06c: 10400027 */ beqz $v0,.L0f03a10c -/* f03a070: 8fa30020 */ lw $v1,0x20($sp) -.L0f03a074: -/* f03a074: 3c18800a */ lui $t8,%hi(g_Vars+0x8) -/* f03a078: 8f189fc8 */ lw $t8,%lo(g_Vars+0x8)($t8) -/* f03a07c: 8e1900d4 */ lw $t9,0xd4($s0) -/* f03a080: 02002025 */ or $a0,$s0,$zero -/* f03a084: 03194023 */ subu $t0,$t8,$t9 -/* f03a088: 29010079 */ slti $at,$t0,0x79 -/* f03a08c: 54200020 */ bnezl $at,.L0f03a110 -/* f03a090: 00001025 */ or $v0,$zero,$zero -/* f03a094: 0fc0a221 */ jal chrGetTargetProp -/* f03a098: afa30020 */ sw $v1,0x20($sp) -/* f03a09c: 8fa30020 */ lw $v1,0x20($sp) -/* f03a0a0: 8fa90024 */ lw $t1,0x24($sp) -/* f03a0a4: c4440008 */ lwc1 $f4,0x8($v0) -/* f03a0a8: c448000c */ lwc1 $f8,0xc($v0) -/* f03a0ac: c4500010 */ lwc1 $f16,0x10($v0) -/* f03a0b0: c4660008 */ lwc1 $f6,0x8($v1) -/* f03a0b4: c46a000c */ lwc1 $f10,0xc($v1) -/* f03a0b8: c4720010 */ lwc1 $f18,0x10($v1) -/* f03a0bc: 46062001 */ sub.s $f0,$f4,$f6 -/* f03a0c0: 460a4081 */ sub.s $f2,$f8,$f10 -/* f03a0c4: 15200011 */ bnez $t1,.L0f03a10c -/* f03a0c8: 46128301 */ sub.s $f12,$f16,$f18 -/* f03a0cc: 46000102 */ mul.s $f4,$f0,$f0 -/* f03a0d0: 3c017f1b */ lui $at,%hi(var7f1a8eb8) -/* f03a0d4: c4328eb8 */ lwc1 $f18,%lo(var7f1a8eb8)($at) -/* f03a0d8: 46021182 */ mul.s $f6,$f2,$f2 -/* f03a0dc: 02002025 */ or $a0,$s0,$zero -/* f03a0e0: 460c6282 */ mul.s $f10,$f12,$f12 -/* f03a0e4: 46062200 */ add.s $f8,$f4,$f6 -/* f03a0e8: 460a4400 */ add.s $f16,$f8,$f10 -/* f03a0ec: 4610903e */ c.le.s $f18,$f16 -/* f03a0f0: 00000000 */ sll $zero,$zero,0x0 -/* f03a0f4: 45020006 */ bc1fl .L0f03a110 -/* f03a0f8: 00001025 */ or $v0,$zero,$zero -/* f03a0fc: 0fc0c178 */ jal chrAttackWalk -/* f03a100: 00002825 */ or $a1,$zero,$zero -/* f03a104: 10000002 */ beqz $zero,.L0f03a110 -/* f03a108: 24020001 */ addiu $v0,$zero,0x1 -.L0f03a10c: -/* f03a10c: 00001025 */ or $v0,$zero,$zero -.L0f03a110: -/* f03a110: 8fbf001c */ lw $ra,0x1c($sp) -/* f03a114: 8fb00018 */ lw $s0,0x18($sp) -/* f03a118: 27bd0028 */ addiu $sp,$sp,0x28 -/* f03a11c: 03e00008 */ jr $ra -/* f03a120: 00000000 */ sll $zero,$zero,0x0 -); +bool chrTryAttackWalk(struct chrdata *chr) +{ + u32 race = CHRRACE(chr); + + if (race == RACE_DRCAROLL || race == RACE_EYESPY) { + return false; + } + + if (chrIsReadyForOrders(chr)) { + struct prop *prop = chr->prop; + + if (func0f0391ec(chr, &prop->pos, prop->rooms, 0) + && (chrGetEquippedWeaponPropWithCheck(chr, 0) || chrGetEquippedWeaponPropWithCheck(chr, 1)) + && g_Vars.lvframe60 - chr->lastwalk60 > 120) { + struct prop *target = chrGetTargetProp(chr); + f32 x = target->pos.x - prop->pos.x; + f32 y = target->pos.y - prop->pos.y; + f32 z = target->pos.z - prop->pos.z; + + if (race == RACE_HUMAN && x * x + y * y + z * z >= 1000000.0f) { + chrAttackWalk(chr, SPEED_WALK); + return true; + } + } + } + + return false; +} GLOBAL_ASM( glabel chrTryAttackRun diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index a5747eda3..0771f0b14 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -31,7 +31,7 @@ void func0f030120(struct chrdata *chr, s32 entitytype, s32 entityid); void chrAttackLie(struct chrdata *chr, s32 entitytype, s32 entityid); void chrAttackKneel(struct chrdata *chr, s32 entitytype, s32 entityid); u32 func0f030584(void); -u32 chrAttackWalk(void); +void chrAttackWalk(struct chrdata *chr, u32 speed); u32 func0f030a40(void); u32 chrAttackRoll(void); void func0f030ff8(struct chrdata *chr, u32 anim_id, f32 fstartframe, f32 fendframe, u8 flags, u32 transition, f32 result); diff --git a/src/include/types.h b/src/include/types.h index a6ba4e848..3553420fe 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -612,7 +612,7 @@ struct chrdata { /*0x0b8*/ f32 ground; /*0x0bc*/ struct coord fallspeed; /*0x0c8*/ struct coord prevpos; - /*0x0d4*/ u32 lastwalk60; + /*0x0d4*/ s32 lastwalk60; /*0x0d8*/ s32 lastmoveok60; /*0x0dc*/ f32 visionrange; /*0x0e0*/ s32 lastseetarget60;