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