From 3790041d17a4cd06b8cfccd1823f0b90c60d1abd Mon Sep 17 00:00:00 2001 From: toasterpanic Date: Fri, 5 Jun 2026 12:28:15 -0400 Subject: [PATCH] Ragdoll panicking when midair or in lots of pain --- lua/zcnpci/modules/falling_legs.lua | 20 +++++++++++++++++++- lua/zcnpci/modules/falling_torso.lua | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lua/zcnpci/modules/falling_legs.lua b/lua/zcnpci/modules/falling_legs.lua index 51ddfbd..e54612e 100644 --- a/lua/zcnpci/modules/falling_legs.lua +++ b/lua/zcnpci/modules/falling_legs.lua @@ -108,6 +108,7 @@ local npc_targeting_enabled = CreateConVar("zcnpci_npc_targeting_enabled", "1", -- Flailing local flailing_playback_rate = CreateConVar("zcnpci_flailing_playback_rate", "1.0", {FCVAR_ARCHIVE, FCVAR_REPLICATED}) local flailing_panic_multiplier = CreateConVar("zcnpci_flailing_panic_multiplier", "2.5", {FCVAR_ARCHIVE, FCVAR_REPLICATED}) +local flailing_panic_airbone_check_distance = CreateConVar("zcnpci_flailing_panic_airbone_check_distance", "128", {FCVAR_ARCHIVE, FCVAR_REPLICATED}) -- Writhing local writhing_strength = CreateConVar("zcnpci_writhing_strength", "1.0", {FCVAR_ARCHIVE, FCVAR_REPLICATED}) @@ -428,6 +429,17 @@ function MODULE:PhysicsSimulate(phys, dt) target.StartDie = cur_time end + local distance_check = util.TraceLine({ + start = target:GetPos(), + endpos = target:GetPos() + Vector(0, 0, -128), + filter = {target}, + mask = MASK_SOLID + }).Hit + + if !distance_check then + target.StartDie = cur_time + end + if ((CurTime() - self.LastFakeUpCheck) >= 1.0) and (can_unfake:GetBool()) then self.LastFakeUpCheck = CurTime() @@ -556,7 +568,13 @@ function MODULE:PhysicsSimulate(phys, dt) local vel = phys:GetVelocity() local pbr = math_Clamp(vel.z / -600, 0.5, 1.5) * flailing_playback_rate:GetFloat() - if target:IsOnFire() then + target.panicking = ( + target:IsOnFire() or + (!distance_check) or + (target.organism.pain > 80) + ) + + if target.panicking then pbr = pbr * flailing_panic_multiplier:GetFloat() end diff --git a/lua/zcnpci/modules/falling_torso.lua b/lua/zcnpci/modules/falling_torso.lua index 5b60599..b413b74 100644 --- a/lua/zcnpci/modules/falling_torso.lua +++ b/lua/zcnpci/modules/falling_torso.lua @@ -241,7 +241,7 @@ function MODULE:PhysicsSimulate(phys, dt) local vel = phys:GetVelocity() local pbr = math_Clamp(vel.z / -600, 0.5, 1.5) * flailing_playback_rate:GetFloat() - if target:IsOnFire() then + if target.panicking then pbr = pbr * flailing_panic_multiplier:GetFloat() end