diff --git a/Content.Server/Chemistry/ReactionEffects/EmpReactionEffect.cs b/Content.Server/Chemistry/ReactionEffects/EmpReactionEffect.cs new file mode 100644 index 0000000000..17d868a0e9 --- /dev/null +++ b/Content.Server/Chemistry/ReactionEffects/EmpReactionEffect.cs @@ -0,0 +1,49 @@ +using Content.Server.Emp; +using Content.Shared.Chemistry.Reagent; +using Robust.Shared.Prototypes; + +namespace Content.Server.Chemistry.ReactionEffects; + + +[DataDefinition] +public sealed class EmpReactionEffect : ReagentEffect +{ + /// + /// Impulse range per unit of reagent + /// + [DataField("rangePerUnit")] + public float EmpRangePerUnit = 0.5f; + + /// + /// Maximum impulse range + /// + [DataField("maxRange")] + public float EmpMaxRange = 10; + + /// + /// How much energy will be drain from sources + /// + [DataField("energyConsumption")] + public float EnergyConsumption = 12500; + + /// + /// Amount of time entities will be disabled + /// + [DataField("duration")] + public float DisableDuration = 15; + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-emp-reaction-effect", ("chance", Probability)); + + public override void Effect(ReagentEffectArgs args) + { + var transform = args.EntityManager.GetComponent(args.SolutionEntity); + var range = MathF.Min((float) (args.Quantity*EmpRangePerUnit), EmpMaxRange); + + args.EntityManager.System().EmpPulse( + transform.MapPosition, + range, + EnergyConsumption, + DisableDuration); + } +} diff --git a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl index bde49ab783..6f3645c705 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl @@ -31,6 +31,12 @@ reagent-effect-guidebook-explosion-reaction-effect = *[other] cause } an explosion +reagent-effect-guidebook-emp-reaction-effect = + { $chance -> + [1] Causes + *[other] cause + } an electromagnetic pulse + reagent-effect-guidebook-foam-area-reaction-effect = { $chance -> [1] Creates diff --git a/Resources/Prototypes/Recipes/Reactions/chemicals.yml b/Resources/Prototypes/Recipes/Reactions/chemicals.yml index 73cba1db3c..d69c5cc147 100644 --- a/Resources/Prototypes/Recipes/Reactions/chemicals.yml +++ b/Resources/Prototypes/Recipes/Reactions/chemicals.yml @@ -177,6 +177,24 @@ sound: path: /Audio/Effects/extinguish.ogg +- type: reaction + id: UraniumEmpExplosion + impact: High + priority: 20 + reactants: + Iron: + amount: 1 + Uranium: + amount: 1 + Aluminium: + amount: 1 + effects: + - !type:EmpReactionEffect + rangePerUnit: 0.2 + maxRange: 6 + energyConsumption: 12500 + duration: 15 + - type: reaction id: TableSalt reactants: