From b90da465b4d355a299136f2d5ceb99aebd801473 Mon Sep 17 00:00:00 2001 From: fedoraman737 Date: Sat, 8 Nov 2025 22:10:11 -0600 Subject: [PATCH 1/4] Add system for passing damage from armor hits to pain zone --- .../SCR_CharacterDamageManagerComponent.c | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c b/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c index fafb01571..ed8caa88e 100644 --- a/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c +++ b/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c @@ -2,9 +2,15 @@ modded class SCR_CharacterDamageManagerComponent : SCR_DamageManagerComponent { protected ACE_Medical_PainHitZone m_ACE_Medical_PainHitZone; - + [RplProp(condition: RplCondition.OwnerOnly)] protected float m_fACE_Medical_PainSuppression = 0; + + [Attribute(defvalue: "0.25", uiwidget: UIWidgets.Slider, desc: "Percentage of armor damage that gets converted to pain", params: "0 1 0.01")] + protected float m_fACE_Medical_ArmorPainMultiplier; + + [Attribute(defvalue: "10", uiwidget: UIWidgets.Slider, desc: "Minimum armor damage required to cause pain", params: "0 50 1")] + protected float m_fACE_Medical_ArmorPainThreshold; //----------------------------------------------------------------------------------------------------------- //! Called by ACE_Medical_PainHitZone.OnInit to initialize the hit zone @@ -59,4 +65,35 @@ modded class SCR_CharacterDamageManagerComponent : SCR_DamageManagerComponent { return m_fACE_Medical_PainSuppression; } + + //------------------------------------------------------------------------------------------------ + //! Add pain when armor blocks damage + //! Behavior: + //! - Small impacts below threshold are ignored + //! - First significant impact sets character to moderate pain state + //! - Subsequent hits when already beyond moderate don't add more pain + override void ArmorHitEventDamage(EDamageType type, float damage, IEntity instigator) + { + super.ArmorHitEventDamage(type, damage, instigator); + + if (!m_ACE_Medical_PainHitZone) + return; + + if (damage < m_fACE_Medical_ArmorPainThreshold) + return; + + // If already in pain (beyond moderate), don't add more + if (ACE_Medical_IsInPain()) + return; + + // Not in pain yet - apply pain to reach moderate threshold + float painDamage = damage * m_fACE_Medical_ArmorPainMultiplier; + + float moderateThreshold = m_ACE_Medical_PainHitZone.GetDamageStateThreshold(ECharacterHealthState.MODERATE); + float currentHealth = m_ACE_Medical_PainHitZone.GetHealthScaled(); + float minDamageForPain = (currentHealth - moderateThreshold) * m_ACE_Medical_PainHitZone.GetMaxHealth(); + + painDamage = Math.Max(painDamage, minDamageForPain); + m_ACE_Medical_PainHitZone.HandleDamage(painDamage, EDamageType.TRUE, instigator); + } } From 94bf7b2541d1d864b4dea4e76da520e73456ec65 Mon Sep 17 00:00:00 2001 From: fedoraman737 Date: Sat, 8 Nov 2025 22:11:16 -0600 Subject: [PATCH 2/4] Add to author list --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index dea7b1bc8..be70b9c0b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -13,6 +13,7 @@ veteran29 # CONTRIBUTORS AkiKay Badger 2-3 +Fedora12 Glowbal gnif Jonpas From cd5df0ce19b1f56c2b9e116706e441e65f16b524 Mon Sep 17 00:00:00 2001 From: fedoraman737 Date: Sat, 8 Nov 2025 22:33:38 -0600 Subject: [PATCH 3/4] Adjust pain logic --- .../Damage/SCR_CharacterDamageManagerComponent.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c b/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c index ed8caa88e..87559d301 100644 --- a/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c +++ b/addons/medical_core/scripts/Game/ACE_Medical_Pain/Components/Damage/SCR_CharacterDamageManagerComponent.c @@ -70,7 +70,7 @@ modded class SCR_CharacterDamageManagerComponent : SCR_DamageManagerComponent //! Add pain when armor blocks damage //! Behavior: //! - Small impacts below threshold are ignored - //! - First significant impact sets character to moderate pain state + //! - First significant impact sets character to moderate pain state + any additional pain from impact //! - Subsequent hits when already beyond moderate don't add more pain override void ArmorHitEventDamage(EDamageType type, float damage, IEntity instigator) { @@ -82,18 +82,17 @@ modded class SCR_CharacterDamageManagerComponent : SCR_DamageManagerComponent if (damage < m_fACE_Medical_ArmorPainThreshold) return; - // If already in pain (beyond moderate), don't add more if (ACE_Medical_IsInPain()) return; - // Not in pain yet - apply pain to reach moderate threshold - float painDamage = damage * m_fACE_Medical_ArmorPainMultiplier; - float moderateThreshold = m_ACE_Medical_PainHitZone.GetDamageStateThreshold(ECharacterHealthState.MODERATE); float currentHealth = m_ACE_Medical_PainHitZone.GetHealthScaled(); - float minDamageForPain = (currentHealth - moderateThreshold) * m_ACE_Medical_PainHitZone.GetMaxHealth(); + float damageToReachModerate = (currentHealth - moderateThreshold) * m_ACE_Medical_PainHitZone.GetMaxHealth(); + + float additionalPainDamage = damage * m_fACE_Medical_ArmorPainMultiplier; + + float totalPainDamage = damageToReachModerate + additionalPainDamage; - painDamage = Math.Max(painDamage, minDamageForPain); - m_ACE_Medical_PainHitZone.HandleDamage(painDamage, EDamageType.TRUE, instigator); + m_ACE_Medical_PainHitZone.HandleDamage(totalPainDamage, EDamageType.TRUE, instigator); } } From e4dbdc577de1ca0ee78f32e16eb0d3e05d481fd1 Mon Sep 17 00:00:00 2001 From: Kex Date: Mon, 10 Nov 2025 16:06:25 +0100 Subject: [PATCH 4/4] Update CONTRIBUTORS list in AUTHORS file Removed duplicate entry --- AUTHORS | 1 - 1 file changed, 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index be70b9c0b..dea7b1bc8 100644 --- a/AUTHORS +++ b/AUTHORS @@ -13,7 +13,6 @@ veteran29 # CONTRIBUTORS AkiKay Badger 2-3 -Fedora12 Glowbal gnif Jonpas