diff --git a/README.md b/README.md index c952fd9..9e00b22 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,21 @@ # Z-City NPC Integration -I made this in an angry fugue after desperately trying to improve my frames by creating a more optimized euphoria ragdoll mod. Now that I'm done with that I figured out how tio actually fix my frames, and it was not this addon. However, I have another issue: NPCs with Z-City suck. Like they tank hits like crazy. You could unload a mag on someone's leg and there would be a non-zero chance they would still be perfectly fine. I'd like to turn my optimized Fedhoria mod into a base for a Z-City NPC improvement mod. +Adds better NPC integration for the Garry's Mod addon Z-City. While Z-City has a convar that enables the custom health system on NPCs, it really isn't the best or most advanced thing in the world. This has irritated me since I first started using Z-City. Therefore, I've decided to take care of the problem myself with my own plugin. -Here are the current features: +- NPCs can now be alive while ragdolled, and can move around in that state. +- NPCs can collapse due to unconsciousness or pain. +- NPCs can get back up after being ragdolled. -- NPCs are now integrated with Z-City's health system. They wriggle when conscious, and don't when they aren't. - -Some ideas: - -- Generally, enemies need to be closer to players in terms of fleshiness. Extreme pain, broken limbs, etc. currently knock over players, but not NPCs. This is something I'd like to fix. -- Enemies should target downed enemies of hostile factions. -- Enemies should be able to get back up from being ragdolled if they're in good enough shape. - -Since theoretically the NPCs use the same health system that players use, these shouldn't be too hard to implement. - -More optimistic ideas: - -- NPCs will back out of combat when injured. -- Friendly NPCs can heal each other. -- NPCs can heal themselves to a limited degree. +This plugin is based off of Kazarei's Euphoria, which in turn is a fork of Fedhoria by Rama. ## Incompatibilities -- Any mod that modifies the behavior of death ragdolls (Reagdoll, Artagdoll, Fedhoria) \ No newline at end of file +- Any mod that modifies the behavior of death ragdolls (Reagdoll, Artagdoll, Fedhoria) + +## Future plans + +No guarantees any of this will become real. + +- NPCs will back out of combat when injured. +- Friendly NPCs can heal each other. +- NPCs can heal themselves to a limited degree. \ No newline at end of file diff --git a/lua/fedhoria.lua b/lua/fedhoria.lua index 37a7a61..30849e7 100644 --- a/lua/fedhoria.lua +++ b/lua/fedhoria.lua @@ -86,9 +86,15 @@ hook.Add("Think", "zcnpci", function() ent.organism.llegamputated or ent.organism.rlegamputated or (ent.organism.consciousness <= 0.3) or - (ent.organism.pain > 0.9) + (ent.organism.pain > 90) ) then - ent:TakeDamage(ent:Health()) + local damage_info = DamageInfo() + damage_info:SetDamage(ent:Health()) + damage_info:SetAttacker(ent) + damage_info:SetDamageType( DMG_DIRECT ) + damage_info:SetDamageForce(Vector(0, 0, 0)) + + ent:TakeDamageInfo(damage_info) end end end) diff --git a/lua/zcnpci/modules/falling_legs.lua b/lua/zcnpci/modules/falling_legs.lua index 130e533..4ed8661 100644 --- a/lua/zcnpci/modules/falling_legs.lua +++ b/lua/zcnpci/modules/falling_legs.lua @@ -264,7 +264,8 @@ function MODULE:PhysicsSimulate(phys, dt) if ( (minimum_down_timer >= 1.0) and (target.class_in_previous_life != nil) and - !(target.organism.llegamputated or target.organism.rlegamputated or target.organism.larmamputated or target.organism.rarmamputated) + !(target.organism.llegamputated or target.organism.rlegamputated or target.organism.larmamputated or target.organism.rarmamputated) and + (target.organism.pain <= 80) ) then local ent = ents.Create(target.class_in_previous_life) ent:SetPos(target:GetPos()) @@ -281,6 +282,9 @@ function MODULE:PhysicsSimulate(phys, dt) ent:Spawn() + ent.organism = table.Copy(target.organism) + ent.organism.owner = ent + self.StopProcessing = true self:Remove()