diff --git a/Content.Server/Chemistry/ReagentEffects/Polymorph.cs b/Content.Server/Chemistry/ReagentEffects/Polymorph.cs new file mode 100644 index 0000000000..bf7d8b7099 --- /dev/null +++ b/Content.Server/Chemistry/ReagentEffects/Polymorph.cs @@ -0,0 +1,35 @@ +using Content.Server.Mind.Components; +using Content.Server.Polymorph.Components; +using Content.Server.Polymorph.Systems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Item; +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Chemistry.ReagentEffects; + +public sealed partial class Polymorph : ReagentEffect +{ + /// + /// What polymorph prototype is used on effect + /// + [DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer))] + public string PolymorphPrototype { get; set; } + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-make-polymorph", + ("chance", Probability), ("entityname", + prototype.Index(prototype.Index(PolymorphPrototype).Entity).Name)); + + public override void Effect(ReagentEffectArgs args) + { + var entityManager = args.EntityManager; + var uid = args.SolutionEntity; + var polySystem = entityManager.System(); + + // Make it into a prototype + entityManager.EnsureComponent(uid); + polySystem.PolymorphEntity(uid, PolymorphPrototype); + } +} diff --git a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl index 6f3645c705..b6f45d2386 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl @@ -267,6 +267,12 @@ reagent-effect-guidebook-make-sentient = *[other] make } the metabolizer sentient +reagent-effect-guidebook-make-polymorph = + { $chance -> + [1] Polymorphs + *[other] polymorph + } the metabolizer into a { $entityname } + reagent-effect-guidebook-modify-bleed-amount = { $chance -> [1] { $deltasign -> diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index 39bc97cbac..2dc5555c03 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -49,6 +49,20 @@ - type: UseDelay delay: 0.5 +- type: entity + name: experimental hypospray + suffix: Admeme + parent: SyndiHypo + description: The ultimate application of bluespace technology and rapid chemical administration. + id: AdminHypo + components: + - type: SolutionContainerManager + solutions: + hypospray: + maxVol: 3000 + - type: UseDelay + delay: 0.0 + - type: entity name: chemical medipen parent: BaseItem diff --git a/Resources/Prototypes/Polymorphs/polymorph.yml b/Resources/Prototypes/Polymorphs/polymorph.yml index ccc35ae47a..fe4f80811f 100644 --- a/Resources/Prototypes/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Polymorphs/polymorph.yml @@ -94,3 +94,11 @@ revertOnCrit: false revertOnDeath: true revertOnEat: true + +- type: polymorph + id: TreeMorph + entity: FloraTree01 + forced: true + transferName: true + revertOnDeath: true + diff --git a/Resources/Prototypes/Reagents/botany.yml b/Resources/Prototypes/Reagents/botany.yml index 6ab90a1113..4929dc1cec 100644 --- a/Resources/Prototypes/Reagents/botany.yml +++ b/Resources/Prototypes/Reagents/botany.yml @@ -145,6 +145,17 @@ Asphyxiation: 1 Burn: 2 Poison: 1 + Medicine: + effects: + - !type:Polymorph + prototype: TreeMorph + conditions: + - !type:OrganType + type: Plant + - !type:ReagentThreshold + min: 80 + + - type: reagent id: WeedKiller name: reagent-name-weed-killer