diff --git a/Content.Shared/CombatMode/Pacification/PacificationSystem.cs b/Content.Shared/CombatMode/Pacification/PacificationSystem.cs new file mode 100644 index 0000000000..d0cab6d096 --- /dev/null +++ b/Content.Shared/CombatMode/Pacification/PacificationSystem.cs @@ -0,0 +1,44 @@ +using Content.Shared.CombatMode; +using Content.Shared.Actions; + +namespace Content.Shared.CombatMode.Pacification +{ + public sealed class PacificationSystem : EntitySystem + { + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnShutdown); + } + + private void OnInit(EntityUid uid, PacifiedComponent component, ComponentInit args) + { + if (!TryComp(uid, out var combatMode)) + return; + + if (combatMode.DisarmAction != null) + { + _actionsSystem.SetToggled(combatMode.DisarmAction, false); + _actionsSystem.SetEnabled(combatMode.DisarmAction, false); + } + if (combatMode.CombatToggleAction != null) + { + combatMode.IsInCombatMode = false; + _actionsSystem.SetEnabled(combatMode.CombatToggleAction, false); + } + } + + private void OnShutdown(EntityUid uid, PacifiedComponent component, ComponentShutdown args) + { + if (!TryComp(uid, out var combatMode)) + return; + + if (combatMode.DisarmAction != null) + _actionsSystem.SetEnabled(combatMode.DisarmAction, true); + if (combatMode.CombatToggleAction != null) + _actionsSystem.SetEnabled(combatMode.CombatToggleAction, true); + } + } +} diff --git a/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs b/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs new file mode 100644 index 0000000000..c20e97bfd2 --- /dev/null +++ b/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Shared.CombatMode.Pacification +{ + /// + /// Status effect that disables combat mode. + /// + [RegisterComponent] + public sealed class PacifiedComponent : Component + {} +} diff --git a/Resources/Locale/en-US/reagents/meta/toxins.ftl b/Resources/Locale/en-US/reagents/meta/toxins.ftl index bbfc383874..1fea06f6b6 100644 --- a/Resources/Locale/en-US/reagents/meta/toxins.ftl +++ b/Resources/Locale/en-US/reagents/meta/toxins.ftl @@ -51,3 +51,6 @@ reagent-desc-uncooked-animal-proteins = This is very risky for the stomachs of s reagent-name-allicin = allicin reagent-desc-allicin = An organosulfur compound found in alliums like garlic, onions, and related plants. + +reagent-name-pax = pax +reagent-desc-pax = A psychiatric drug which prevents the patient from directly harming anyone. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml index 9fe6ec4570..ab45ea29ef 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml @@ -110,6 +110,7 @@ - Electrocution - ForcedSleep - TemporaryBlindness + - Pacified - type: Body template: AnimalTemplate preset: AnimalPreset @@ -173,6 +174,7 @@ - Electrocution - ForcedSleep - TemporaryBlindness + - Pacified - type: ThermalRegulator metabolismHeat: 800 radiatedHeat: 100 diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 551ebd6151..862d8dfa98 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -81,6 +81,7 @@ - Muted - ForcedSleep - TemporaryBlindness + - Pacified - type: DiseaseCarrier - type: Blindable # Other diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index f960c804fd..88be15117b 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -441,3 +441,18 @@ damage: types: Poison: 6 + +- type: reagent + id: Pax + name: reagent-name-pax + desc: reagent-desc-pax + physicalDesc: reagent-physical-desc-soothing + color: "#AAAAAA" + metabolisms: + Poison: + effects: + - !type:GenericStatusEffect + key: Pacified + component: Pacified + refresh: false + type: Add diff --git a/Resources/Prototypes/Recipes/Reactions/chemicals.yml b/Resources/Prototypes/Recipes/Reactions/chemicals.yml index 38e625d02c..f1c9369ad5 100644 --- a/Resources/Prototypes/Recipes/Reactions/chemicals.yml +++ b/Resources/Prototypes/Recipes/Reactions/chemicals.yml @@ -326,3 +326,16 @@ amount: 1 products: ChloralHydrate: 1 + +- type: reaction + id: Pax + impact: Medium + reactants: + MindbreakerToxin: + amount: 1 + Synaptizine: + amount: 1 + Water: + amount: 1 + products: + Pax: 3 diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index 960f51ea23..b149243ed3 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -50,3 +50,6 @@ - type: statusEffect id: TemporaryBlindness + +- type: statusEffect + id: Pacified #cannot attack