diff --git a/Content.Server/Chemistry/Components/RehydratableComponent.cs b/Content.Server/Chemistry/Components/RehydratableComponent.cs index 68ffa2aa17..4e0c1c4846 100644 --- a/Content.Server/Chemistry/Components/RehydratableComponent.cs +++ b/Content.Server/Chemistry/Components/RehydratableComponent.cs @@ -28,8 +28,8 @@ public sealed class RehydratableComponent : Component /// /// The entity to create when hydrated. /// - [DataField("target", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] - public string? TargetPrototype = default!; + [DataField("possibleSpawns"), ViewVariables(VVAccess.ReadWrite)] + public List PossibleSpawns = new(); } /// diff --git a/Content.Server/Chemistry/EntitySystems/RehydratableSystem.cs b/Content.Server/Chemistry/EntitySystems/RehydratableSystem.cs index c4531bfa5f..3dd1c6ae58 100644 --- a/Content.Server/Chemistry/EntitySystems/RehydratableSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/RehydratableSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Chemistry.Components; using Content.Shared.FixedPoint; using Content.Shared.Popups; +using Robust.Shared.Random; namespace Content.Server.Chemistry.EntitySystems; @@ -8,6 +9,7 @@ public sealed class RehydratableSystem : EntitySystem { [Dependency] private readonly SharedPopupSystem _popups = default!; [Dependency] private readonly SolutionContainerSystem _solutions = default!; + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { @@ -30,7 +32,10 @@ public sealed class RehydratableSystem : EntitySystem { _popups.PopupEntity(Loc.GetString("rehydratable-component-expands-message", ("owner", uid)), uid); - var target = Spawn(comp.TargetPrototype, Transform(uid).Coordinates); + var randomMob = _random.Pick(comp.PossibleSpawns); + + var target = Spawn(randomMob, Transform(uid).Coordinates); + Transform(target).AttachToGridOrMap(); var ev = new GotRehydratedEvent(target); RaiseLocalEvent(uid, ref ev); diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 4ac235a148..92ae279bce 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -15,7 +15,7 @@ uplink-esword-name = Energy Sword uplink-esword-desc = A very dangerous energy sword that can reflect shots. Can be stored in pockets when turned off. Makes a lot of noise when used or turned on. uplink-esword-double-name = Double Bladed Energy Sword -uplink-esword-double-desc = A much more expensive counter part to the normal energy sword: with a much higher reflection chance, larger attack angle, higher structural damage, and faster swing, all at the cost of lower heat and slash damage. Makes a lot of noise when used or turned on. +uplink-esword-double-desc = A much more expensive counter part to the normal energy sword: with a much higher reflection chance, larger attack angle, higher structural damage, and faster swing, all at the cost of lower heat and slash damage. Makes a lot of noise when used or turned on. uplink-edagger-name = Energy Dagger uplink-edagger-desc = A small energy blade conveniently disguised in the form of a pen. @@ -234,6 +234,9 @@ uplink-stimkit-desc = A medkit containing 6 stimulant microinjectors, which each uplink-syndicate-segway-crate-name = Syndicate Segway uplink-syndicate-segway-crate-desc = Be an enemy of the corporation, in style! +uplink-syndicate-sponge-box-name = Syndicate Sponge Box +uplink-syndicate-sponge-box-desc = A box containing 6 syndicate sponges disguised as monkey cubes, these cubes turn into a variety of angry wildlife after coming into contact with water. + # Pointless uplink-revolver-cap-gun-name = Cap Gun uplink-revolver-cap-gun-desc = Looks almost like the real thing! Ages 8 and up. diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 0ee970785d..101caf4a8b 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -926,6 +926,17 @@ components: - SurplusBundle +- type: listing + id: UplinkSyndicateSpongeBox + name: uplink-syndicate-sponge-box-name + description: uplink-syndicate-sponge-box-desc + icon: { sprite: Objects/Misc/monkeycube.rsi, state: box} + productEntity: SyndicateSpongeBox + cost: + Telecrystal: 6 + categories: + - UplinkMisc + # Pointless - type: listing diff --git a/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml b/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml index a50ac2f941..32ad0552c0 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml @@ -35,3 +35,42 @@ - type: Tag tags: - MonkeyCube + +- type: entity + parent: BoxCardboard + name: monkey cube box + suffix: Syndicate + id: SyndicateSpongeBox + description: Drymate brand monkey cubes. Just add water! + components: + - type: Storage + whitelist: + tags: + - MonkeyCube + capacity: 30 + - type: StorageFill + contents: + - id: SyndicateSpongeWrapped + amount: 6 + - type: Sprite + sprite: Objects/Misc/monkeycube.rsi + state: box + +- type: entity + parent: BaseItem + name: monkey cube + suffix: Wrapped, Syndicate + id: SyndicateSpongeWrapped + description: Unwrap this to get a monkey cube. + components: + - type: SpawnItemsOnUse + items: + - id: SyndicateSponge + sound: + path: /Audio/Effects/unwrap.ogg + - type: Sprite + sprite: Objects/Misc/monkeycube.rsi + state: wrapper + - type: Tag + tags: + - MonkeyCube diff --git a/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml b/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml index ab4665c060..6521fdf61c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml @@ -26,7 +26,8 @@ - !type:AddToSolutionReaction solution: cube - type: Rehydratable - target: MobMonkey + possibleSpawns: + - MobMonkey - type: CollisionWake enabled: false - type: Fixtures @@ -69,7 +70,8 @@ - !type:AddToSolutionReaction solution: plushie - type: Rehydratable - target: MobCarp + possibleSpawns: + - MobCarp - type: CollisionWake enabled: false - type: Physics @@ -99,3 +101,62 @@ handle: false sound: path: /Audio/Effects/bite.ogg + +- type: entity + parent: BaseItem + id: SyndicateSponge + name: monkey cube + suffix: Syndicate + description: Just add water! + components: + - type: SolutionContainerManager + solutions: + cube: + maxVol: 11 # needs room for water + reagents: + - ReagentId: Nutriment + Quantity: 10 + - type: Food + solution: cube + - type: RefillableSolution + solution: cube + - type: Sprite + sprite: Objects/Misc/monkeycube.rsi + state: cube + - type: Reactive + reactions: + - reagents: [Water] + methods: [Touch, Ingestion, Injection] + effects: + - !type:AddToSolutionReaction + solution: cube + - type: Rehydratable + possibleSpawns: + - MobRatServant + - MobCarpHolo + - MobXenoRavager + - MobAngryBee + - MobAdultSlimesYellowAngry + - MobSpiderSpace + - MobBearSpace + - MobPurpleSnake + - MobKangarooSpace + - MobTick + - type: CollisionWake + enabled: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.3,-0.3,0.3,0.3" + density: 5 + mask: + - ItemMask + rehydrate: + shape: + !type:PhysShapeAabb + bounds: "-0.3,-0.3,0.3,0.3" + hard: false + layer: + - LowImpassable