diff --git a/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs b/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs index 69069fc82fe..5b2ae02d914 100644 --- a/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs +++ b/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs @@ -1,10 +1,12 @@ using System.Linq; +using Content.Shared._Sunrise.SunriseCCVars; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; +using Robust.Shared.Configuration; using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.Damageable @@ -89,6 +91,7 @@ public async Task TestDamageableComponents() var sMapManager = server.ResolveDependency(); var sPrototypeManager = server.ResolveDependency(); var sEntitySystemManager = server.ResolveDependency(); + var sConfigManager = server.ResolveDependency(); EntityUid sDamageableEntity = default; DamageableComponent sDamageableComponent = null; @@ -127,6 +130,8 @@ await server.WaitPost(() => type3a = sPrototypeManager.Index("TestDamage3a"); type3b = sPrototypeManager.Index("TestDamage3b"); type3c = sPrototypeManager.Index("TestDamage3c"); + + sConfigManager.SetCVar(SunriseCCVars.DamageVariance, 0f); // Sunrise-Edit }); await server.WaitRunTicks(5); diff --git a/Content.IntegrationTests/Tests/Destructible/DestructibleDamageGroupTest.cs b/Content.IntegrationTests/Tests/Destructible/DestructibleDamageGroupTest.cs index d37de7a5044..853ace3199a 100644 --- a/Content.IntegrationTests/Tests/Destructible/DestructibleDamageGroupTest.cs +++ b/Content.IntegrationTests/Tests/Destructible/DestructibleDamageGroupTest.cs @@ -1,4 +1,5 @@ using Content.Server.Destructible.Thresholds.Triggers; +using Content.Shared._Sunrise.SunriseCCVars; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; @@ -6,6 +7,7 @@ using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Prototypes; +using Robust.Shared.Configuration; using static Content.IntegrationTests.Tests.Destructible.DestructibleTestPrototypes; namespace Content.IntegrationTests.Tests.Destructible @@ -26,6 +28,7 @@ public async Task AndTest() var sEntityManager = server.ResolveDependency(); var sPrototypeManager = server.ResolveDependency(); var sEntitySystemManager = server.ResolveDependency(); + var sConfigManager = server.ResolveDependency(); // Sunrise-Edit EntityUid sDestructibleEntity = default; DamageableComponent sDamageableComponent = null; @@ -43,6 +46,7 @@ await server.WaitPost(() => sTestThresholdListenerSystem.ThresholdsReached.Clear(); sDamageableSystem = sEntitySystemManager.GetEntitySystem(); + sConfigManager.SetCVar(SunriseCCVars.DamageVariance, 0f); // Sunrise-Edit }); await server.WaitRunTicks(5); diff --git a/Content.IntegrationTests/Tests/Destructible/DestructibleDamageTypeTest.cs b/Content.IntegrationTests/Tests/Destructible/DestructibleDamageTypeTest.cs index 69891cbd895..b91c0c7849c 100644 --- a/Content.IntegrationTests/Tests/Destructible/DestructibleDamageTypeTest.cs +++ b/Content.IntegrationTests/Tests/Destructible/DestructibleDamageTypeTest.cs @@ -1,8 +1,10 @@ using Content.Server.Destructible.Thresholds.Triggers; +using Content.Shared._Sunrise.SunriseCCVars; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; +using Robust.Shared.Configuration; using static Content.IntegrationTests.Tests.Destructible.DestructibleTestPrototypes; namespace Content.IntegrationTests.Tests.Destructible @@ -23,6 +25,7 @@ public async Task Test() var sEntityManager = server.ResolveDependency(); var sEntitySystemManager = server.ResolveDependency(); var protoManager = server.ResolveDependency(); + var sConfigManager = server.ResolveDependency(); // Sunrise-Edit EntityUid sDestructibleEntity = default; DamageableComponent sDamageableComponent = null; @@ -38,6 +41,7 @@ await server.WaitPost(() => sTestThresholdListenerSystem = sEntitySystemManager.GetEntitySystem(); sTestThresholdListenerSystem.ThresholdsReached.Clear(); sDamageableSystem = sEntitySystemManager.GetEntitySystem(); + sConfigManager.SetCVar(SunriseCCVars.DamageVariance, 0f); // Sunrise-Edit }); await server.WaitRunTicks(5); diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 3c3e1b736df..6371ce50a46 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Shared._Sunrise.SunriseCCVars; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; using Content.Shared.Inventory; @@ -7,10 +8,13 @@ using Content.Shared.Mobs.Systems; using Content.Shared.Radiation.Events; using Content.Shared.Rejuvenate; +using Content.Shared.CCVar; using Robust.Shared.GameStates; using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using Robust.Shared.Configuration; +using Robust.Shared.Random; namespace Content.Shared.Damage { @@ -20,11 +24,15 @@ public sealed class DamageableSystem : EntitySystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly INetManager _netMan = default!; [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; private EntityQuery _appearanceQuery; private EntityQuery _damageableQuery; private EntityQuery _mindContainerQuery; + public float Variance = 0.15f; // Sunrise-Edit + public override void Initialize() { SubscribeLocalEvent(DamageableInit); @@ -36,6 +44,8 @@ public override void Initialize() _appearanceQuery = GetEntityQuery(); _damageableQuery = GetEntityQuery(); _mindContainerQuery = GetEntityQuery(); + + _configurationManager.OnValueChanged(SunriseCCVars.DamageVariance, UpdateVariance); // Sunrise-Edit } /// @@ -143,6 +153,11 @@ public void DamageChanged(EntityUid uid, DamageableComponent component, DamageSp if (before.Cancelled) return null; + // Sunrise-Start + var multiplier = 1f + Variance - _random.NextFloat(0, Variance * 2f); + damage *= multiplier; + // Sunrise-End + // Apply resistances if (!ignoreResistances) { @@ -280,6 +295,13 @@ private void DamageableHandleState(EntityUid uid, DamageableComponent component, DamageChanged(uid, component, delta); } } + + // Sunrise-Start + private void UpdateVariance(float variance) + { + Variance = variance; + } + // Sunrise-End } /// diff --git a/Content.Shared/_Sunrise/SunriseCCVars/SunriseCCVars.cs b/Content.Shared/_Sunrise/SunriseCCVars/SunriseCCVars.cs index 087a2592a64..81cd4a5bc21 100644 --- a/Content.Shared/_Sunrise/SunriseCCVars/SunriseCCVars.cs +++ b/Content.Shared/_Sunrise/SunriseCCVars/SunriseCCVars.cs @@ -202,4 +202,12 @@ public static readonly CVarDef public static readonly CVarDef CryoTeleportEnable = CVarDef.Create("cryo_teleport.enable", false, CVar.SERVERONLY); + + /* + * Damage variance + */ + + public static readonly CVarDef DamageVariance = + CVarDef.Create("damage.variance", 0.15f, CVar.SERVER | CVar.REPLICATED); + }