From 62646dfc96ed441dd4d77a3d28bd664e39082567 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 4 Jun 2019 15:37:33 +0300 Subject: [PATCH] (299a6cc5b) Added an upper limit to impact damage done to ragdolls (10% of the character's max health). Because ragdolled characters can now receive impact damage, getting the sub thrown around by monsters was way too lethal. --- .../Source/Characters/Animation/Ragdoll.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs index 46ff1d502..52d84e829 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/Ragdoll.cs @@ -17,6 +17,12 @@ namespace Barotrauma { public abstract RagdollParams RagdollParams { get; protected set; } + const float ImpactDamageMultiplayer = 10.0f; + /// + /// Maximum damage per impact (0.1 = 10% of the character's maximum health) + /// + const float MaxImpactDamage = 0.1f; + private static List list = new List(); protected Hull currentHull; @@ -688,8 +694,10 @@ namespace Barotrauma Vector2 impactPos = ConvertUnits.ToDisplayUnits(points[0]); if (character.Submarine != null) impactPos += character.Submarine.Position; + float impactDamage = Math.Min((impact - ImpactTolerance) * ImpactDamageMultiplayer, character.MaxVitality * MaxImpactDamage); + character.LastDamageSource = null; - character.AddDamage(impactPos, new List() { AfflictionPrefab.InternalDamage.Instantiate((impact - ImpactTolerance) * 10.0f) }, 0.0f, true); + character.AddDamage(impactPos, new List() { AfflictionPrefab.InternalDamage.Instantiate(impactDamage) }, 0.0f, true); strongestImpact = Math.Max(strongestImpact, impact - ImpactTolerance); character.ApplyStatusEffects(ActionType.OnImpact, 1.0f); //briefly disable impact damage