diff --git a/Content.Server/Botany/Components/SeedComponent.cs b/Content.Server/Botany/Components/SeedComponent.cs
index 3e729dc906..f475ec3cfc 100644
--- a/Content.Server/Botany/Components/SeedComponent.cs
+++ b/Content.Server/Botany/Components/SeedComponent.cs
@@ -15,6 +15,12 @@ namespace Content.Server.Botany.Components
[DataField("seed")]
public SeedData? Seed;
+ ///
+ /// If not null, overrides the plant's initial health. Otherwise, the plant's initial health is set to the Endurance value.
+ ///
+ [DataField]
+ public float? HealthOverride = null;
+
///
/// Name of a base seed prototype that is used if is null.
///
diff --git a/Content.Server/Botany/Systems/BotanySystem.Seed.cs b/Content.Server/Botany/Systems/BotanySystem.Seed.cs
index c9389f832e..f64fcb3c43 100644
--- a/Content.Server/Botany/Systems/BotanySystem.Seed.cs
+++ b/Content.Server/Botany/Systems/BotanySystem.Seed.cs
@@ -104,11 +104,12 @@ public sealed partial class BotanySystem : EntitySystem
///
/// Spawns a new seed packet on the floor at a position, then tries to put it in the user's hands if possible.
///
- public EntityUid SpawnSeedPacket(SeedData proto, EntityCoordinates coords, EntityUid user)
+ public EntityUid SpawnSeedPacket(SeedData proto, EntityCoordinates coords, EntityUid user, float? healthOverride = null)
{
var seed = Spawn(proto.PacketPrototype, coords);
var seedComp = EnsureComp(seed);
seedComp.Seed = proto;
+ seedComp.HealthOverride = healthOverride;
var name = Loc.GetString(proto.Name);
var noun = Loc.GetString(proto.Noun);
diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs
index e47e703364..e6018bcd70 100644
--- a/Content.Server/Botany/Systems/PlantHolderSystem.cs
+++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs
@@ -71,6 +71,17 @@ public sealed class PlantHolderSystem : EntitySystem
}
}
+ private int GetCurrentGrowthStage(Entity entity)
+ {
+ var (uid, component) = entity;
+
+ if (component.Seed == null)
+ return 0;
+
+ var result = Math.Max(1, (int) (component.Age * component.Seed.GrowthStages / component.Seed.Maturation));
+ return result;
+ }
+
private void OnExamine(Entity entity, ref ExaminedEvent args)
{
if (!args.IsInDetailsRange)
@@ -148,6 +159,7 @@ public sealed class PlantHolderSystem : EntitySystem
if (!_botany.TryGetSeed(seeds, out var seed))
return;
+ float? seedHealth = seeds.HealthOverride;
var name = Loc.GetString(seed.Name);
var noun = Loc.GetString(seed.Noun);
_popup.PopupCursor(Loc.GetString("plant-holder-component-plant-success-message",
@@ -157,7 +169,14 @@ public sealed class PlantHolderSystem : EntitySystem
component.Seed = seed;
component.Dead = false;
component.Age = 1;
- component.Health = component.Seed.Endurance;
+ if (seedHealth is float realSeedHealth)
+ {
+ component.Health = realSeedHealth;
+ }
+ else
+ {
+ component.Health = component.Seed.Endurance;
+ }
component.LastCycle = _gameTiming.CurTime;
QueueDel(args.Used);
@@ -265,9 +284,15 @@ public sealed class PlantHolderSystem : EntitySystem
return;
}
+ if (GetCurrentGrowthStage(entity) <= 1)
+ {
+ _popup.PopupCursor(Loc.GetString("plant-holder-component-early-sample-message"), args.User);
+ return;
+ }
+
component.Health -= (_random.Next(3, 5) * 10);
component.Seed.Unique = false;
- var seed = _botany.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates, args.User);
+ var seed = _botany.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates, args.User, component.Health);
_randomHelper.RandomOffset(seed, 0.25f);
var displayName = Loc.GetString(component.Seed.DisplayName);
_popup.PopupCursor(Loc.GetString("plant-holder-component-take-sample-message",
@@ -901,7 +926,7 @@ public sealed class PlantHolderSystem : EntitySystem
}
else if (component.Age < component.Seed.Maturation)
{
- var growthStage = Math.Max(1, (int) (component.Age * component.Seed.GrowthStages / component.Seed.Maturation));
+ var growthStage = GetCurrentGrowthStage((uid, component));
_appearance.SetData(uid, PlantHolderVisuals.PlantRsi, component.Seed.PlantRsi.ToString(), app);
_appearance.SetData(uid, PlantHolderVisuals.PlantState, $"stage-{growthStage}", app);
diff --git a/Content.Server/Chemistry/ReagentEffectConditions/TotalHunger.cs b/Content.Server/Chemistry/ReagentEffectConditions/TotalHunger.cs
new file mode 100644
index 0000000000..1dd12e632a
--- /dev/null
+++ b/Content.Server/Chemistry/ReagentEffectConditions/TotalHunger.cs
@@ -0,0 +1,35 @@
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.Nutrition.Components;
+using Content.Shared.FixedPoint;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Chemistry.ReagentEffectConditions
+{
+ public sealed partial class Hunger : ReagentEffectCondition
+ {
+ [DataField]
+ public float Max = float.PositiveInfinity;
+
+ [DataField]
+ public float Min = 0;
+
+ public override bool Condition(ReagentEffectArgs args)
+ {
+ if (args.EntityManager.TryGetComponent(args.SolutionEntity, out HungerComponent? hunger))
+ {
+ var total = hunger.CurrentHunger;
+ if (total > Min && total < Max)
+ return true;
+ }
+
+ return false;
+ }
+
+ public override string GuidebookExplanation(IPrototypeManager prototype)
+ {
+ return Loc.GetString("reagent-effect-condition-guidebook-total-hunger",
+ ("max", float.IsPositiveInfinity(Max) ? (float) int.MaxValue : Max),
+ ("min", Min));
+ }
+ }
+}
diff --git a/Content.Server/NPC/Components/NPCImprintingOnSpawnBehaviourComponent.cs b/Content.Server/NPC/Components/NPCImprintingOnSpawnBehaviourComponent.cs
new file mode 100644
index 0000000000..26439d2b30
--- /dev/null
+++ b/Content.Server/NPC/Components/NPCImprintingOnSpawnBehaviourComponent.cs
@@ -0,0 +1,34 @@
+using Content.Shared.Whitelist;
+using Robust.Shared.Collections;
+
+namespace Content.Server.NPC.Components;
+///
+/// A component that makes the entity friendly to nearby creatures it sees on init.
+///
+[RegisterComponent]
+public sealed partial class NPCImprintingOnSpawnBehaviourComponent : Component
+{
+ ///
+ /// filter who can be a friend to this creature
+ ///
+ [DataField]
+ public EntityWhitelist? Whitelist;
+
+ ///
+ /// when a creature appears, it will memorize all creatures in the radius to remember them as friends
+ ///
+ [DataField]
+ public float SpawnFriendsSearchRadius = 3f;
+
+ ///
+ /// if there is a FollowCompound in HTN, the target of the following will be selected from random nearby targets when it appears
+ ///
+ [DataField]
+ public bool Follow = true;
+
+ ///
+ /// is used to determine who became a friend from this component
+ ///
+ [DataField]
+ public List Friends = new();
+}
diff --git a/Content.Server/NPC/Systems/NPCImprintingOnSpawnBehaviourSystem.cs b/Content.Server/NPC/Systems/NPCImprintingOnSpawnBehaviourSystem.cs
new file mode 100644
index 0000000000..cfd3b08c61
--- /dev/null
+++ b/Content.Server/NPC/Systems/NPCImprintingOnSpawnBehaviourSystem.cs
@@ -0,0 +1,49 @@
+using System.Numerics;
+using Content.Shared.NPC.Components;
+using Content.Shared.NPC.Systems;
+using Robust.Shared.Collections;
+using Robust.Shared.Map;
+using Robust.Shared.Random;
+using NPCImprintingOnSpawnBehaviourComponent = Content.Server.NPC.Components.NPCImprintingOnSpawnBehaviourComponent;
+
+namespace Content.Server.NPC.Systems;
+
+public sealed partial class NPCImprintingOnSpawnBehaviourSystem : SharedNPCImprintingOnSpawnBehaviourSystem
+{
+ [Dependency] private readonly EntityLookupSystem _lookup = default!;
+ [Dependency] private readonly NPCSystem _npc = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnMapInit);
+ }
+
+ private void OnMapInit(Entity imprinting, ref MapInitEvent args)
+ {
+ HashSet friends = new();
+ _lookup.GetEntitiesInRange(imprinting, imprinting.Comp.SpawnFriendsSearchRadius, friends);
+
+ foreach (var friend in friends)
+ {
+ if (imprinting.Comp.Whitelist?.IsValid(friend) != false)
+ {
+ AddImprintingTarget(imprinting, friend, imprinting.Comp);
+ }
+ }
+
+ if (imprinting.Comp.Follow && imprinting.Comp.Friends.Count > 0)
+ {
+ var mommy = _random.Pick(imprinting.Comp.Friends);
+ _npc.SetBlackboard(imprinting, NPCBlackboard.FollowTarget, new EntityCoordinates(mommy, Vector2.Zero));
+ }
+ }
+
+ public void AddImprintingTarget(EntityUid entity, EntityUid friend, NPCImprintingOnSpawnBehaviourComponent component)
+ {
+ component.Friends.Add(friend);
+ var exception = EnsureComp(entity);
+ exception.Ignored.Add(friend);
+ }
+}
diff --git a/Content.Server/NPC/Systems/NPCSystem.cs b/Content.Server/NPC/Systems/NPCSystem.cs
index 8abe0f7f54..9108629435 100644
--- a/Content.Server/NPC/Systems/NPCSystem.cs
+++ b/Content.Server/NPC/Systems/NPCSystem.cs
@@ -5,6 +5,7 @@ using Content.Shared.CCVar;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Systems;
using Content.Shared.NPC;
+using Content.Shared.NPC.Systems;
using Robust.Server.GameObjects;
using Robust.Shared.Configuration;
using Robust.Shared.Player;
diff --git a/Content.Shared/NPC/Components/FactionExceptionComponent.cs b/Content.Shared/NPC/Components/FactionExceptionComponent.cs
index 54de0404c2..ba7940d502 100644
--- a/Content.Shared/NPC/Components/FactionExceptionComponent.cs
+++ b/Content.Shared/NPC/Components/FactionExceptionComponent.cs
@@ -7,7 +7,7 @@ namespace Content.Shared.NPC.Components;
/// Prevents an NPC from attacking ignored entities from enemy factions.
/// Can be added to if pettable, see PettableFriendComponent.
///
-[RegisterComponent, NetworkedComponent, Access(typeof(NpcFactionSystem))]
+[RegisterComponent, NetworkedComponent, Access(typeof(NpcFactionSystem), typeof(SharedNPCImprintingOnSpawnBehaviourSystem))] // TO DO (Metalgearsloth): If we start adding a billion access overrides they should be going through a system as then there's no reason to have access, but I'll fix this when I rework npcs.
public sealed partial class FactionExceptionComponent : Component
{
///
diff --git a/Content.Shared/NPC/Systems/SharedNPCImprintingOnSpawnBehaviourSystem.cs b/Content.Shared/NPC/Systems/SharedNPCImprintingOnSpawnBehaviourSystem.cs
new file mode 100644
index 0000000000..f06d496e9e
--- /dev/null
+++ b/Content.Shared/NPC/Systems/SharedNPCImprintingOnSpawnBehaviourSystem.cs
@@ -0,0 +1,5 @@
+namespace Content.Shared.NPC.Systems;
+
+public abstract partial class SharedNPCImprintingOnSpawnBehaviourSystem : EntitySystem
+{
+}
diff --git a/Content.Shared/NPC/Systems/SharedNPCSystem.cs b/Content.Shared/NPC/Systems/SharedNPCSystem.cs
new file mode 100644
index 0000000000..247ab478a1
--- /dev/null
+++ b/Content.Shared/NPC/Systems/SharedNPCSystem.cs
@@ -0,0 +1,5 @@
+namespace Content.Shared.NPC.Systems;
+
+public abstract partial class SharedNPCSystem : EntitySystem
+{
+}
diff --git a/Resources/Locale/en-US/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/flavors/flavor-profiles.ftl
index adba66e78d..f0dd5e02a2 100644
--- a/Resources/Locale/en-US/flavors/flavor-profiles.ftl
+++ b/Resources/Locale/en-US/flavors/flavor-profiles.ftl
@@ -169,6 +169,9 @@ flavor-complex-light = like a light gone out
flavor-complex-profits = like profits
flavor-complex-fishops = like the dreaded fishops
flavor-complex-violets = like violets
+flavor-complex-pyrotton = like a burning mouth
+flavor-complex-mothballs = like mothballs
+flavor-complex-paint-thinner = like paint thinner
# Drink-specific flavors.
diff --git a/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl b/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl
index 807b5591a8..7748ab9893 100644
--- a/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl
+++ b/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl
@@ -7,6 +7,15 @@
}
}
+reagent-effect-condition-guidebook-total-hunger =
+ { $max ->
+ [2147483648] the target has at least {NATURALFIXED($min, 2)} total hunger
+ *[other] { $min ->
+ [0] the target has at most {NATURALFIXED($max, 2)} total hunger
+ *[other] the target has between {NATURALFIXED($min, 2)} and {NATURALFIXED($max, 2)} total hunger
+ }
+ }
+
reagent-effect-condition-guidebook-reagent-threshold =
{ $max ->
[2147483648] there's at least {NATURALFIXED($min, 2)}u of {$reagent}
diff --git a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl
index b6f45d2386..b499875c14 100644
--- a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl
+++ b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl
@@ -344,3 +344,33 @@ reagent-effect-guidebook-missing =
[1] Causes
*[other] cause
} an unknown effect as nobody has written this effect yet
+
+reagent-effect-guidebook-plant-attribute =
+ { $chance ->
+ [1] Adjusts
+ *[other] adjust
+ } {$attribute} by [color={$colorName}]{$amount}[/color]
+
+reagent-effect-guidebook-plant-cryoxadone =
+ { $chance ->
+ [1] Ages back
+ *[other] age back
+ } the plant, depending on the plant's age and time to grow
+
+reagent-effect-guidebook-plant-phalanximine =
+ { $chance ->
+ [1] Restores
+ *[other] restore
+ } viability to a plant rendered nonviable by a mutation
+
+reagent-effect-guidebook-plant-diethylamine =
+ { $chance ->
+ [1] Increases
+ *[other] increase
+ } the plant's lifespan and/or base health with 10% chance for each.
+
+reagent-effect-guidebook-plant-robust-harvest =
+ { $chance ->
+ [1] Increases
+ *[other] increase
+ } the plant's potency by {$increase} up to a maximum of {$limit}. Causes the plant to lose its seeds once the potency reaches {$seedlesstreshold}. Trying to add potency over {$limit} may cause decrease in yield at a 10% chance.
diff --git a/Resources/Locale/en-US/reagents/mannitol.ftl b/Resources/Locale/en-US/reagents/mannitol.ftl
new file mode 100644
index 0000000000..1d35aff587
--- /dev/null
+++ b/Resources/Locale/en-US/reagents/mannitol.ftl
@@ -0,0 +1 @@
+mannitol-effect-enlightened = You feel ENLIGHTENED!
diff --git a/Resources/Locale/en-US/reagents/meta/botany.ftl b/Resources/Locale/en-US/reagents/meta/botany.ftl
index 912ded5cf2..c7101c2327 100644
--- a/Resources/Locale/en-US/reagents/meta/botany.ftl
+++ b/Resources/Locale/en-US/reagents/meta/botany.ftl
@@ -11,7 +11,7 @@ reagent-name-plant-b-gone = plant-B-gone
reagent-desc-plant-b-gone = A harmful toxic mixture to kill plantlife. Very effective against kudzu.
reagent-name-robust-harvest = robust harvest
-reagent-desc-robust-harvest = A highly effective fertilizer, with a limited potency-boosting effect on plants. Be careful with it's usage since using too much has a chance to reduce the plant yield. It has a positive effect on dionas.
+reagent-desc-robust-harvest = A highly effective fertilizer with a limited potency-boosting effect on plants. Use it cautiously, as excessive application can reduce plant yield. It has a particularly beneficial effect on dionas.
reagent-name-weed-killer = weed killer
reagent-desc-weed-killer = A mixture that targets weeds. Very effective against kudzu. While useful it slowly poisons plants with toxins, be careful when using it.
diff --git a/Resources/Locale/en-US/reagents/meta/fun.ftl b/Resources/Locale/en-US/reagents/meta/fun.ftl
index 8764a3d28a..a4a8c0f150 100644
--- a/Resources/Locale/en-US/reagents/meta/fun.ftl
+++ b/Resources/Locale/en-US/reagents/meta/fun.ftl
@@ -22,7 +22,7 @@ reagent-desc-razorium = A strange, non-newtonian chemical. It is produced when t
reagent-name-fresium = Fresium
reagent-desc-fresium = A mysterious compound that slows the vibration of atoms and molecules... somehow. In layman's terms, it makes things cold... REALLY cold. Can cause long-lasting movement issues if ingested.
-reagent-name-laughter = Laughter
+reagent-name-laughter = laughter
reagent-desc-laughter = Some say that this is the best medicine, but recent studies have proven that to be untrue.
reagent-name-weh = juice that makes you Weh
diff --git a/Resources/Locale/en-US/reagents/meta/medicine.ftl b/Resources/Locale/en-US/reagents/meta/medicine.ftl
index 701552db93..7d99f87de2 100644
--- a/Resources/Locale/en-US/reagents/meta/medicine.ftl
+++ b/Resources/Locale/en-US/reagents/meta/medicine.ftl
@@ -142,3 +142,9 @@ reagent-desc-silversulfadiazine = This compound with antibacterial properties is
reagent-name-stypticpowder = styptic powder
reagent-desc-stypticpowder = Aluminum sulfate styptic powder aids in managing bleeding and promoting the healing of bodily injuries.
+reagent-name-mannitol = mannitol
+reagent-desc-mannitol = Efficiently restores brain damage.
+
+reagent-name-psicodine = psicodine
+reagent-desc-psicodine = Suppresses anxiety and other various forms of mental distress. Overdose causes hallucinations and minor toxin damage.
+
diff --git a/Resources/Locale/en-US/reagents/meta/narcotics.ftl b/Resources/Locale/en-US/reagents/meta/narcotics.ftl
index ea115bf962..a7cffb7f6b 100644
--- a/Resources/Locale/en-US/reagents/meta/narcotics.ftl
+++ b/Resources/Locale/en-US/reagents/meta/narcotics.ftl
@@ -39,3 +39,6 @@ reagent-desc-norepinephric-acid = A smooth chemical that blocks the optical rece
reagent-name-tear-gas = tear gas
reagent-desc-tear-gas = A chemical that causes severe irritation and crying, commonly used in riot control.
+
+reagent-name-happiness = happiness
+reagent-desc-happiness = Fills you with ecstatic numbness and causes minor brain damage. Highly addictive. If overdosed causes sudden mood swings.
diff --git a/Resources/Locale/en-US/reagents/meta/toxins.ftl b/Resources/Locale/en-US/reagents/meta/toxins.ftl
index 660da9c271..09b135e7f5 100644
--- a/Resources/Locale/en-US/reagents/meta/toxins.ftl
+++ b/Resources/Locale/en-US/reagents/meta/toxins.ftl
@@ -75,3 +75,6 @@ reagent-desc-vestine = Has an adverse reaction within the body causing major jit
reagent-name-tazinide = tazinide
reagent-desc-tazinide = A highly dangerous metallic mixture which can interfere with most movement through an electrifying current.
+
+reagent-name-lipolicide = lipolicide
+reagent-desc-lipolicide = A powerful toxin that will destroy fat cells, massively reducing body weight in a short time. Deadly to those without nutriment in their body.
diff --git a/Resources/Locale/en-US/reagents/psicodine.ftl b/Resources/Locale/en-US/reagents/psicodine.ftl
new file mode 100644
index 0000000000..c9795b11a9
--- /dev/null
+++ b/Resources/Locale/en-US/reagents/psicodine.ftl
@@ -0,0 +1,3 @@
+psicodine-effect-fearless = You feel totally fearless!
+psicodine-effect-anxieties-wash-away = All of your anxieties wash away!
+psicodine-effect-at-peace = You feel completely at peace.
diff --git a/Resources/Locale/en-US/seeds/seeds.ftl b/Resources/Locale/en-US/seeds/seeds.ftl
index 965c9c6100..bc8e34982f 100644
--- a/Resources/Locale/en-US/seeds/seeds.ftl
+++ b/Resources/Locale/en-US/seeds/seeds.ftl
@@ -41,6 +41,8 @@ seeds-bluetomato-name = blue tomato
seeds-bluetomato-display-name = blue tomato plant
seeds-bloodtomato-name = blood tomato
seeds-bloodtomato-display-name = blood tomato plant
+seeds-killertomato-name = tomato killer
+seeds-killertomato-display-name = tomato killer plant
seeds-eggplant-name = eggplant
seeds-eggplant-display-name = eggplants
seeds-apple-name = apple
@@ -57,6 +59,8 @@ seeds-eggy-name = egg-plant
seeds-eggy-display-name = egg-plants
seeds-cannabis-name = cannabis
seeds-cannabis-display-name = cannabis
+seeds-rainbow-cannabis-name = rainbow cannabis
+seeds-rainbow-cannabis-display-name = rainbow cannabis
seeds-tobacco-name = tobacco
seeds-tobacco-display-name = tobacco plant
seeds-nettle-name = nettle
@@ -64,7 +68,7 @@ seeds-nettle-display-name = nettles
seeds-deathnettle-name = death nettle
seeds-deathnettle-display-name = death nettles
seeds-chili-name = chili
-seeds-chili-display-name = chilis
+seeds-chili-display-name = chili peppers
seeds-chilly-name = chilly
seeds-chilly-display-name = chilly peppers
seeds-poppy-name = poppy
@@ -113,3 +117,5 @@ seeds-cotton-name = cotton
seeds-cotton-display-name = cotton plant
seeds-gome-name = gnome
seeds-gnome-display-name = gnome plant
+seeds-pyrotton-name = pyrotton
+seeds-pyrotton-display-name = pyrotton plant
diff --git a/Resources/Prototypes/Entities/Effects/mobspawn.yml b/Resources/Prototypes/Entities/Effects/mobspawn.yml
index 4529497021..fb59aa3fc4 100644
--- a/Resources/Prototypes/Entities/Effects/mobspawn.yml
+++ b/Resources/Prototypes/Entities/Effects/mobspawn.yml
@@ -107,6 +107,7 @@
- FoodOnionRed
- FoodWatermelon
- FoodGatfruit
+ - MobTomatoKiller
rarePrototypes:
- MobLuminousEntity
- - MobLuminousObject
\ No newline at end of file
+ - MobLuminousObject
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
index e1dfa88016..a3e8097958 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
@@ -67,3 +67,93 @@
interactFailureString: petting-failure-generic
interactSuccessSound:
path: /Audio/Animals/lizard_happy.ogg
+
+- type: entity
+ id: MobTomatoKiller
+ parent:
+ - BaseSimpleMob
+ - MobDamageable
+ - MobBloodstream
+ - MobFlammable
+ - MobCombat
+ name: tomato killer
+ description: it seems today it's not you eating tomatoes, it's the tomatoes eating you.
+ components:
+ - type: Item
+ - type: NpcFactionMember
+ factions:
+ - SimpleHostile
+ - type: HTN
+ rootTask:
+ task: KillerTomatoCompound
+ - type: NPCImprintingOnSpawnBehaviour
+ whitelist:
+ components:
+ - HumanoidAppearance
+ - type: Sprite
+ sprite: Mobs/Demons/tomatokiller.rsi
+ noRot: true
+ layers:
+ - map: [ "enum.DamageStateVisualLayers.Base" ]
+ state: alive
+ - type: Bloodstream
+ bloodReagent: JuiceTomato
+ bloodMaxVolume: 50
+ chemicalMaxVolume: 30
+ - type: DamageStateVisuals
+ states:
+ Alive:
+ Base: alive
+ Dead:
+ Base: dead
+ - type: Butcherable
+ spawned:
+ - id: FoodMeatTomato
+ amount: 2
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTypeTrigger
+ damageType: Blunt
+ damage: 100
+ behaviors:
+ - !type:GibBehavior { }
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 24: Dead
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeCircle
+ radius: 0.30
+ density: 80
+ mask:
+ - MobMask
+ layer:
+ - MobLayer
+ - type: MeleeWeapon
+ hidden: true
+ damage:
+ groups:
+ Brute: 4
+ animation: WeaponArcBite
+ - type: Climbing
+ - type: NameIdentifier
+ group: GenericNumber
+ - type: FootstepModifier
+ footstepSoundCollection:
+ path: /Audio/Effects/Footsteps/slime1.ogg
+ params:
+ volume: 3
+ - type: Tag
+ tags:
+ - FootstepSound
+ - Fruit
+ - type: Extractable
+ grindableSolutionName: bloodstream
+ - type: PotencyVisuals
+ - type: Appearance
+ - type: Produce
+ seedId: killerTomato
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
index a43667dc37..bea3e5efc0 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
@@ -1873,3 +1873,36 @@
tags:
- ClothMade
- CottonBoll
+
+- type: entity
+ name: pyrotton boll
+ description: This will probably set you on fire.
+ id: PyrottonBol
+ parent: FoodProduceBase
+ components:
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/pyrotton.rsi
+ - type: FlavorProfile
+ flavors:
+ - pyrotton
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 5
+ - ReagentId: Phlogiston
+ Quantity: 5
+ - type: Log
+ spawnedPrototype: MaterialPyrotton1
+ spawnCount: 2
+ - type: Produce
+ seedId: pyrotton
+ - type: Tag
+ tags:
+ - ClothMade
+ - CottonBoll
+ - type: Extractable
+ grindableSolutionName: food
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml
index e3ae06ec9f..9a0d96e89e 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml
@@ -28,6 +28,34 @@
reagents:
- ReagentId: THC
Quantity: 20
+
+- type: entity
+ id: JointRainbow
+ parent: Joint
+ name: joint
+ suffix: Rainbow
+ description: A roll of dried plant matter wrapped in thin paper. Seems to be colorful inside.
+ components:
+ - type: Construction
+ graph: smokeableJointRainbow
+ node: jointRainbow
+ - type: SolutionContainerManager
+ solutions:
+ smokable:
+ maxVol: 20
+ reagents:
+ - ReagentId: SpaceDrugs
+ Quantity: 4
+ - ReagentId: Lipolicide
+ Quantity: 4
+ - ReagentId: MindbreakerToxin
+ Quantity: 2.66
+ - ReagentId: Happiness
+ Quantity: 2.66
+# - ReagentId: ColorfulReagent
+# Quantity: 1.33
+ - ReagentId: Psicodine
+ Quantity: 0.8
- type: entity
id: Blunt
@@ -59,3 +87,31 @@
reagents:
- ReagentId: THC
Quantity: 20
+
+- type: entity
+ id: BluntRainbow
+ parent: Blunt
+ name: blunt
+ suffix: Rainbow
+ description: A roll of dried plant matter wrapped in a dried tobacco leaf. Seems to be colorful inside.
+ components:
+ - type: Construction
+ graph: smokeableBluntRainbow
+ node: bluntRainbow
+ - type: SolutionContainerManager
+ solutions:
+ smokable:
+ maxVol: 20
+ reagents:
+ - ReagentId: SpaceDrugs
+ Quantity: 4
+ - ReagentId: Lipolicide
+ Quantity: 4
+ - ReagentId: MindbreakerToxin
+ Quantity: 2.66
+ - ReagentId: Happiness
+ Quantity: 2.66
+# - ReagentId: ColorfulReagent
+# Quantity: 1.33
+ - ReagentId: Psicodine
+ Quantity: 0.8
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml
index c3f13d80b7..79c568802c 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml
@@ -63,3 +63,26 @@
path: /Audio/Weapons/Guns/Empty/empty.ogg
ejectSound:
path: /Audio/Weapons/Guns/Empty/empty.ogg
+
+- type: entity
+ id: SmokingPipeFilledCannabisRainbow
+ parent: SmokingPipe
+ name: pipe
+ suffix: Rainbow Cannabis
+ description: Just like grandpappy used to smoke.
+ components:
+ - type: ContainerContainer
+ containers:
+ bowl_slot: !type:ContainerSlot
+ - type: ItemSlots
+ - type: SmokingPipe
+ bowl_slot:
+ name: smoking-pipe-slot-component-slot-name-bowl
+ startingItem: GroundCannabisRainbow
+ whitelist:
+ tags:
+ - Smokable
+ insertSound:
+ path: /Audio/Weapons/Guns/Empty/empty.ogg
+ ejectSound:
+ path: /Audio/Weapons/Guns/Empty/empty.ogg
diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml
index e32cb6a92a..d1371f604b 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml
@@ -427,6 +427,58 @@
- type: Stack
count: 1
+- type: entity
+ parent: MaterialBase
+ id: MaterialPyrotton
+ name: pyrotton
+ suffix: Full
+ components:
+ - type: Stack
+ stackType: Pyrotton
+ baseLayer: base
+ layerStates:
+ - pyrotton
+ - pyrotton_2
+ - pyrotton_3
+ - type: Sprite
+ state: pyrotton_3
+ layers:
+ - state: pyrotton_3
+ map: ["base"]
+ - type: Appearance
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 10
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 5
+ - ReagentId: Phlogiston
+ Quantity: 5
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 3
+ - ReagentId: Phlogiston
+ Quantity: 3
+ - type: Tag
+ tags:
+ - ClothMade
+ - RawMaterial
+
+- type: entity
+ parent: MaterialPyrotton
+ id: MaterialPyrotton1
+ suffix: Single
+ components:
+ - type: Sprite
+ state: pyrotton
+ - type: Stack
+ count: 1
+
- type: entity
parent: MaterialBase
id: MaterialBananium
@@ -598,4 +650,4 @@
materialComposition:
Gunpowder: 100
- type: Item
- size: Tiny
\ No newline at end of file
+ size: Tiny
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml
index b847416211..833e213baa 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml
@@ -66,6 +66,100 @@
- type: Item
size: Tiny
+- type: entity
+ name: rainbow cannabis leaves
+ parent: LeavesCannabis
+ id: LeavesCannabisRainbow
+ description: "Is it supposed to be glowing like that...?"
+ components:
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi
+ - type: Produce
+ seedId: rainbowCannabis
+ - type: PointLight
+ radius: 1.4
+ energy: 0.3
+ - type: RgbLightController
+ cycleRate: 0.6
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: SpaceDrugs
+ Quantity: 3
+ - ReagentId: Lipolicide
+ Quantity: 3
+ - ReagentId: MindbreakerToxin
+ Quantity: 2
+ - ReagentId: Happiness
+ Quantity: 2
+# - ReagentId: ColorfulReagent
+# Quantity: 1
+ - ReagentId: Psicodine
+ Quantity: 0.6
+
+- type: entity
+ name: dried rainbow cannabis leaves
+ parent: LeavesCannabisDried
+ id: LeavesCannabisRainbowDried
+ description: "Dried rainbow cannabis leaves, ready to be ground."
+ components:
+ - type: Stack
+ stackType: LeavesCannabisRainbowDried
+ count: 1
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 8.5 #fuck you saveload test fail
+ reagents:
+ - ReagentId: SpaceDrugs
+ Quantity: 2.4
+ - ReagentId: Lipolicide
+ Quantity: 2.4
+ - ReagentId: MindbreakerToxin
+ Quantity: 1.6
+ - ReagentId: Happiness
+ Quantity: 1.6
+# - ReagentId: ColorfulReagent
+# Quantity: 0.8
+ - ReagentId: Psicodine
+ Quantity: 0.48
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi
+ state: dried
+
+- type: entity
+ name: ground rainbow cannabis
+ parent: GroundCannabis
+ id: GroundCannabisRainbow
+ description: "Ground rainbow cannabis, ready to take you on a trip."
+ components:
+ - type: Stack
+ stackType: GroundCannabisRainbow
+ count: 1
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: SpaceDrugs
+ Quantity: 4
+ - ReagentId: Lipolicide
+ Quantity: 4
+ - ReagentId: MindbreakerToxin
+ Quantity: 2.66
+ - ReagentId: Happiness
+ Quantity: 2.66
+# - ReagentId: ColorfulReagent
+# Quantity: 1.33
+ - ReagentId: Psicodine
+ Quantity: 0.8
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi
+ state: powderpile_rainbow
+ color: white
+ - type: Construction
+ graph: smokeableGroundCannabisRainbow
+ node: groundRainbow
- type: entity
name: tobacco leaves
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
index 172aa932fb..68073e11bf 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
@@ -213,6 +213,16 @@
- type: Sprite
sprite: Objects/Specific/Hydroponics/blood_tomato.rsi
+- type: entity
+ parent: SeedBase
+ name: packet of killer tomato seeds
+ id: KillerTomatoSeeds
+ components:
+ - type: Seed
+ seedId: killerTomato
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/tomatokiller.rsi
+
- type: entity
parent: SeedBase
name: packet of eggplant seeds
@@ -285,6 +295,17 @@
- type: Sprite
sprite: Objects/Specific/Hydroponics/cannabis.rsi
+- type: entity
+ parent: SeedBase
+ name: packet of rainbow cannabis seeds
+ description: "These seeds grow into rainbow weed. Groovy... and also highly addictive."
+ id: RainbowCannabisSeeds
+ components:
+ - type: Seed
+ seedId: rainbowCannabis
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi
+
- type: entity
parent: SeedBase
name: packet of nettle seeds
@@ -581,3 +602,13 @@
seedId: gnome
- type: Sprite
sprite: Objects/Specific/Hydroponics/cotton.rsi
+
+- type: entity
+ parent: SeedBase
+ name: packet of pyrotton seeds
+ id: PyrottonSeeds
+ components:
+ - type: Seed
+ seedId: pyrotton
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/pyrotton.rsi
diff --git a/Resources/Prototypes/Flavors/flavors.yml b/Resources/Prototypes/Flavors/flavors.yml
index 2b55efc21b..47a1bc71aa 100644
--- a/Resources/Prototypes/Flavors/flavors.yml
+++ b/Resources/Prototypes/Flavors/flavors.yml
@@ -1058,3 +1058,18 @@
id: violets
flavorType: Complex
description: flavor-complex-violets
+
+- type: flavor
+ id: pyrotton
+ flavorType: Complex
+ description: flavor-complex-pyrotton
+
+- type: flavor
+ id: mothballs
+ flavorType: Complex
+ description: flavor-complex-mothballs
+
+- type: flavor
+ id: paintthinner
+ flavorType: Complex
+ description: flavor-complex-paint-thinner
\ No newline at end of file
diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml
index be95649d93..3b126ad2bc 100644
--- a/Resources/Prototypes/Hydroponics/seeds.yml
+++ b/Resources/Prototypes/Hydroponics/seeds.yml
@@ -479,8 +479,10 @@
packetPrototype: BloodTomatoSeeds
productPrototypes:
- FoodBloodTomato
+ mutationPrototypes:
+ - killerTomato
harvestRepeat: Repeat
- lifespan: 25
+ lifespan: 60
maturation: 8
production: 6
yield: 2
@@ -500,6 +502,38 @@
Max: 4
PotencyDivisor: 25
+- type: seed
+ id: killerTomato
+ name: seeds-killertomato-name
+ noun: seeds-noun-seeds
+ displayName: seeds-killertomato-display-name
+ plantRsi: Objects/Specific/Hydroponics/tomatokiller.rsi
+ packetPrototype: KillerTomatoSeeds
+ productPrototypes:
+ - MobTomatoKiller
+ harvestRepeat: Repeat
+ lifespan: 25
+ maturation: 15
+ production: 6
+ yield: 2
+ potency: 10
+ waterConsumption: 0.60
+ nutrientConsumption: 0.70
+ idealLight: 8
+ idealHeat: 298
+ juicy: true
+ growthStages: 2
+ splatPrototype: PuddleSplatter
+ chemicals:
+ Blood:
+ Min: 1
+ Max: 10
+ PotencyDivisor: 10
+ JuiceTomato:
+ Min: 1
+ Max: 4
+ PotencyDivisor: 25
+
- type: seed
id: eggplant
name: seeds-eggplant-name
@@ -761,6 +795,8 @@
packetPrototype: CannabisSeeds
productPrototypes:
- LeavesCannabis
+ mutationPrototypes:
+ - rainbowCannabis
harvestRepeat: Repeat
lifespan: 75
maturation: 8
@@ -777,6 +813,51 @@
Max: 10
PotencyDivisor: 10
+- type: seed
+ id: rainbowCannabis
+ name: seeds-rainbow-cannabis-name
+ noun: seeds-noun-seeds
+ displayName: seeds-rainbow-cannabis-display-name
+ plantRsi: Objects/Specific/Hydroponics/rainbow_cannabis.rsi
+ packetPrototype: RainbowCannabisSeeds
+ productPrototypes:
+ - LeavesCannabisRainbow
+ harvestRepeat: Repeat
+ lifespan: 75
+ maturation: 8
+ production: 12
+ yield: 2
+ potency: 20
+ growthStages: 3
+ waterConsumption: 0.40
+ idealLight: 9
+ idealHeat: 298
+ chemicals:
+ SpaceDrugs:
+ Min: 1
+ Max: 15
+ PotencyDivisor: 10
+ Lipolicide:
+ Min: 1
+ Max: 15
+ PotencyDivisor: 10
+ MindbreakerToxin:
+ Min: 1
+ Max: 5
+ PotencyDivisor: 20
+ Happiness:
+ Min: 1
+ Max: 5
+# PotencyDivisor: 20
+# ColorfulReagent:
+# Min: 0
+# Max: 5
+# PotencyDivisor: 20
+ Psicodine:
+ Min: 0
+ Max: 5
+ PotencyDivisor: 33
+
- type: seed
id: tobacco
name: seeds-tobacco-name
@@ -1487,6 +1568,8 @@
packetPrototype: CottonSeeds
productPrototypes:
- CottonBol
+ mutationPrototypes:
+ - pyrotton
lifespan: 25
maturation: 8
production: 3
@@ -1504,10 +1587,10 @@
- type: seed #once again, replacing learning with comments because ive been in this file for 10 hours
id: gnome
name: seeds-gome-name #the name of the seeds
- noun: seeds-noun-seeds
+ noun: seeds-noun-seeds
displayName: seeds-gnome-display-name #name of the plant when looking at the tray
plantRsi: Objects/Specific/Hydroponics/gnome.rsi
- packetPrototype: GnomeSeeds #seeds you get when clipping? BUT YOU CANT CLIP THIS PLANT TAKE THAT BOTANISTS!
+ packetPrototype: GnomeSeeds #seeds you get when clipping? BUT YOU CANT CLIP THIS PLANT TAKE THAT BOTANISTS!
productPrototypes:
- MobGnome #THE THING THAT SPAWNS!
lifespan: 25
@@ -1518,5 +1601,32 @@
idealLight: 8
growthStages: 2
waterConsumption: 0
- seedless: true #fuckin does nothing but im keeping it just in case someone wants botany to riot
+ seedless: true #fuckin does nothing but im keeping it just in case someone wants botany to riot
unclippable: true
+
+- type: seed
+ id: pyrotton
+ name: seeds-pyrotton-name
+ noun: seeds-noun-seeds
+ displayName: seeds-pyrotton-display-name
+ plantRsi: Objects/Specific/Hydroponics/pyrotton.rsi
+ packetPrototype: PyrottonSeeds
+ productPrototypes:
+ - PyrottonBol
+ lifespan: 25
+ maturation: 8
+ production: 3
+ yield: 2
+ potency: 5
+ idealLight: 8
+ growthStages: 3
+ waterConsumption: 0.80
+ chemicals:
+ Fiber:
+ Min: 5
+ Max: 10
+ PotencyDivisor: 20
+ Phlogiston:
+ Min: 4
+ Max: 8
+ PotencyDivisor: 30
diff --git a/Resources/Prototypes/NPCs/mob.yml b/Resources/Prototypes/NPCs/mob.yml
index 740f7ca576..b0e1c8ae9b 100644
--- a/Resources/Prototypes/NPCs/mob.yml
+++ b/Resources/Prototypes/NPCs/mob.yml
@@ -77,3 +77,16 @@
- tasks:
- !type:HTNCompoundTask
task: IdleCompound
+
+- type: htnCompound
+ id: KillerTomatoCompound
+ branches:
+ - tasks:
+ - !type:HTNCompoundTask
+ task: MeleeCombatCompound
+ - tasks:
+ - !type:HTNCompoundTask
+ task: FollowCompound
+ - tasks:
+ - !type:HTNCompoundTask
+ task: IdleCompound
diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml
index 20959238a2..6dcd6748f3 100644
--- a/Resources/Prototypes/Reagents/medicine.yml
+++ b/Resources/Prototypes/Reagents/medicine.yml
@@ -1064,6 +1064,16 @@
conditions:
- !type:ReagentThreshold
min: 15
+ reactiveEffects:
+ Extinguish:
+ methods: [ Touch ]
+ effects:
+ - !type:ExtinguishReaction
+ plantMetabolism:
+ - !type:PlantAdjustWater
+ amount: 1
+ tileReactions:
+ - !type:ExtinguishTileReaction { }
- type: reagent
id: Pyrazine
@@ -1278,3 +1288,68 @@
Brute: -2
types:
Poison: 0.5
+
+
+- type: reagent
+ id : Mannitol # currently this is just a way to create psicodine
+ name: reagent-name-mannitol
+ group: Medicine
+ desc: reagent-desc-mannitol
+ physicalDesc: reagent-physical-desc-opaque
+ flavor: sweet
+ color: "#A0A0A0"
+ metabolisms:
+ Medicine:
+ effects:
+ - !type:PopupMessage
+ conditions:
+ - !type:ReagentThreshold
+ min: 15
+ type: Local
+ visualType: Medium
+ messages: [ "mannitol-effect-enlightened" ]
+ probability: 0.2
+
+- type: reagent
+ id: Psicodine
+ name: reagent-name-psicodine
+ group: Medicine
+ desc: reagent-desc-psicodine
+ physicalDesc: reagent-physical-desc-shiny
+ flavor: bitter
+ color: "#07E79E"
+ metabolisms:
+ Medicine:
+ effects:
+ - !type:HealthChange
+ conditions:
+ - !type:ReagentThreshold
+ min: 30
+ damage:
+ types:
+ Poison: 2
+ - !type:GenericStatusEffect
+ conditions:
+ - !type:ReagentThreshold
+ min: 30
+ key: SeeingRainbows
+ component: SeeingRainbows
+ type: Add
+ time: 8
+ refresh: false
+ - !type:GenericStatusEffect
+ key: Jitter
+ time: 2.0
+ type: Remove
+ - !type:GenericStatusEffect
+ key: Drunk
+ time: 6.0
+ type: Remove
+ - !type:PopupMessage # we dont have sanity/mood so this will have to do
+ type: Local
+ visualType: Medium
+ messages:
+ - "psicodine-effect-fearless"
+ - "psicodine-effect-anxieties-wash-away"
+ - "psicodine-effect-at-peace"
+ probability: 0.2
diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml
index 500b240561..dbebf21f33 100644
--- a/Resources/Prototypes/Reagents/narcotics.yml
+++ b/Resources/Prototypes/Reagents/narcotics.yml
@@ -536,3 +536,53 @@
conditions:
- !type:ReagentThreshold
min: 20
+
+- type: reagent
+ id: Happiness
+ name: reagent-name-happiness
+ group: Narcotics
+ desc: reagent-desc-happiness
+ physicalDesc: reagent-physical-desc-soothing
+ flavor: paintthinner
+ color: "#EE35FF"
+ metabolisms:
+ Narcotic:
+ effects:
+ - !type:Emote
+ emote: Laugh
+ showInChat: true
+ probability: 0.1
+ conditions:
+ - !type:ReagentThreshold
+ max: 20
+ - !type:Emote
+ emote: Whistle
+ showInChat: true
+ probability: 0.1
+ conditions:
+ - !type:ReagentThreshold
+ max: 20
+ - !type:Emote
+ emote: Crying
+ showInChat: true
+ probability: 0.1
+ conditions:
+ - !type:ReagentThreshold
+ min: 20
+ - !type:PopupMessage # we dont have sanity/mood so this will have to do
+ type: Local
+ visualType: Medium
+ messages:
+ - "psicodine-effect-fearless"
+ - "psicodine-effect-anxieties-wash-away"
+ - "psicodine-effect-at-peace"
+ probability: 0.2
+ conditions:
+ - !type:ReagentThreshold
+ max: 20
+ - !type:GenericStatusEffect
+ key: SeeingRainbows
+ component: SeeingRainbows
+ type: Add
+ time: 5
+ refresh: false
diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml
index 954d4a6bef..76088841da 100644
--- a/Resources/Prototypes/Reagents/toxins.yml
+++ b/Resources/Prototypes/Reagents/toxins.yml
@@ -638,3 +638,23 @@
- !type:Electrocute
probability: 0.8
+- type: reagent
+ id: Lipolicide
+ name: reagent-name-lipolicide
+ group: Toxins
+ desc: reagent-desc-lipolicide
+ physicalDesc: reagent-physical-desc-strong-smelling
+ flavor: mothballs #why does weightloss juice taste like mothballs
+ color: "#F0FFF0"
+ metabolisms:
+ Poison:
+ effects:
+ - !type:HealthChange
+ conditions:
+ - !type:Hunger
+ max: 50
+ damage:
+ types:
+ Poison: 2
+ - !type:SatiateHunger
+ factor: -6
diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml
index a8016f55b3..bfd1262963 100644
--- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml
+++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml
@@ -1710,6 +1710,14 @@
solids:
LeavesCannabis: 1
+- type: microwaveMealRecipe
+ id: RecipeDriedCannabisRainbow
+ name: dried rainbow cannabis leaves recipe
+ result: LeavesCannabisRainbowDried
+ time: 10
+ solids:
+ LeavesCannabisRainbow: 1
+
- type: microwaveMealRecipe
id: RecipeTrashBakedBananaPeel
name: baked banana peel recipe
diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml
index 00900a95ef..419d7bff33 100644
--- a/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml
+++ b/Resources/Prototypes/Recipes/Crafting/Graphs/smokeables.yml
@@ -12,6 +12,21 @@
doAfter: 2
- node: joint
entity: Joint
+
+- type: constructionGraph
+ id: smokeableJointRainbow
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: jointRainbow
+ steps:
+ - material: PaperRolling
+ - material: CigaretteFilter
+ - material: GroundCannabisRainbow
+ doAfter: 2
+ - node: jointRainbow
+ entity: JointRainbow
- type: constructionGraph
id: smokeableBlunt
@@ -27,6 +42,20 @@
- node: blunt
entity: Blunt
+- type: constructionGraph
+ id: smokeableBluntRainbow
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: bluntRainbow
+ steps:
+ - material: LeavesTobaccoDried
+ - material: GroundCannabisRainbow
+ doAfter: 2
+ - node: bluntRainbow
+ entity: BluntRainbow
+
- type: constructionGraph
id: smokeableCigarette
start: start
@@ -56,6 +85,20 @@
- node: ground
entity: GroundCannabis
+- type: constructionGraph
+ id: smokeableGroundCannabisRainbow
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: groundRainbow
+ steps:
+ - material: LeavesCannabisRainbowDried
+ amount: 2
+ doAfter: 5
+ - node: groundRainbow
+ entity: GroundCannabisRainbow
+
- type: constructionGraph
id: smokeableGroundTobacco
start: start
diff --git a/Resources/Prototypes/Recipes/Crafting/smokeables.yml b/Resources/Prototypes/Recipes/Crafting/smokeables.yml
index aae3e80d54..6fa95b0fbc 100644
--- a/Resources/Prototypes/Recipes/Crafting/smokeables.yml
+++ b/Resources/Prototypes/Recipes/Crafting/smokeables.yml
@@ -8,6 +8,17 @@
description: "A roll of dried plant matter wrapped in thin paper."
icon: { sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi, state: unlit-icon }
objectType: Item
+
+- type: construction
+ name: rainbow joint
+ id: smokeableJointRainbow
+ graph: smokeableJointRainbow
+ startNode: start
+ targetNode: jointRainbow
+ category: construction-category-misc
+ description: "A roll of dried plant matter wrapped in thin paper."
+ icon: { sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi, state: unlit-icon }
+ objectType: Item
- type: construction
name: blunt
@@ -20,6 +31,17 @@
icon: { sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi, state: unlit-icon }
objectType: Item
+- type: construction
+ name: rainbow blunt
+ id: smokeableBluntRainbow
+ graph: smokeableBluntRainbow
+ startNode: start
+ targetNode: bluntRainbow
+ category: construction-category-misc
+ description: "A roll of dried plant matter wrapped in a dried tobacco leaf."
+ icon: { sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi, state: unlit-icon }
+ objectType: Item
+
- type: construction
name: cigarette
id: Cigarette
@@ -45,6 +67,17 @@
# color: darkgreen
objectType: Item
+- type: construction
+ name: ground rainbow cannabis
+ id: smokeableGroundCannabisRainbow
+ graph: smokeableGroundCannabisRainbow
+ startNode: start
+ targetNode: groundRainbow
+ category: construction-category-misc
+ description: "Ground rainbow cannabis, ready to take you on a trip."
+ icon: { sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: powderpile_rainbow }
+ objectType: Item
+
- type: construction
name: ground tobacco
id: GroundTobacco
diff --git a/Resources/Prototypes/Recipes/Reactions/medicine.yml b/Resources/Prototypes/Recipes/Reactions/medicine.yml
index a9a49ea85d..98d49e793b 100644
--- a/Resources/Prototypes/Recipes/Reactions/medicine.yml
+++ b/Resources/Prototypes/Recipes/Reactions/medicine.yml
@@ -298,6 +298,18 @@
products:
Lipozine: 3
+- type: reaction
+ id: Mannitol
+ reactants:
+ Hydrogen:
+ amount: 1
+ Water:
+ amount: 1
+ Sugar:
+ amount: 1
+ products:
+ Mannitol: 3
+
- type: reaction
id: MindbreakerToxin
minTemp: 370
@@ -573,7 +585,7 @@
Sigynate:
amount: 2
products:
- Aloxadone: 4
+ Aloxadone: 4
- type: reaction
id: Synthflesh
@@ -619,3 +631,43 @@
amount: 1
products:
StypticPowder: 4
+
+- type: reaction
+ id: Psicodine
+ impact: Medium
+ reactants:
+ Mannitol:
+ amount: 2
+ Impedrezene:
+ amount: 1
+ Water:
+ amount: 2
+ products:
+ Psicodine: 4
+
+- type: reaction
+ id: Lipolicide
+ reactants:
+ Ephedrine:
+ amount: 1
+ Diethylamine:
+ amount: 1
+ Mercury:
+ amount: 1
+ products:
+ Lipolicide: 3
+
+- type: reaction
+ id: Happiness
+ reactants:
+ Laughter:
+ amount: 2
+ Epinephrine:
+ amount: 1
+ Ethanol:
+ amount: 1
+ Plasma:
+ amount: 5
+ catalyst: true
+ products:
+ Happiness: 4
diff --git a/Resources/Prototypes/Stacks/Materials/materials.yml b/Resources/Prototypes/Stacks/Materials/materials.yml
index c51d9cfcf8..9e18c03092 100644
--- a/Resources/Prototypes/Stacks/Materials/materials.yml
+++ b/Resources/Prototypes/Stacks/Materials/materials.yml
@@ -4,6 +4,7 @@
icon: { sprite: /Textures/Objects/Misc/monkeycube.rsi, state: cube }
spawn: MaterialBiomass1
maxCount: 100
+ itemSize: 1
- type: stack
id: WoodPlank
@@ -11,6 +12,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: wood }
spawn: MaterialWoodPlank1
maxCount: 30
+ itemSize: 1
- type: stack
id: Cardboard
@@ -18,6 +20,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cardboard }
spawn: MaterialCardboard1
maxCount: 30
+ itemSize: 1
- type: stack
id: Cloth
@@ -25,6 +28,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cloth }
spawn: MaterialCloth1
maxCount: 30
+ itemSize: 1
- type: stack
id: Durathread
@@ -32,6 +36,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: durathread }
spawn: MaterialDurathread1
maxCount: 30
+ itemSize: 1
- type: stack
id: Diamond
@@ -39,6 +44,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: diamond }
spawn: MaterialDiamond1
maxCount: 30
+ itemSize: 2
- type: stack
id: Cotton
@@ -46,6 +52,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cotton }
spawn: MaterialCotton1
maxCount: 30
+ itemSize: 1
- type: stack
id: Pyrotton
@@ -60,6 +67,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: bananium }
spawn: MaterialBananium1
maxCount: 10
+ itemSize: 2
- type: stack
id: MeatSheets
@@ -67,6 +75,7 @@
icon: { sprite: /Textures/Objects/Materials/Sheets/meaterial.rsi, state: meat }
spawn: MaterialSheetMeat1
maxCount: 30
+ itemSize: 1
- type: stack
id: WebSilk
@@ -74,6 +83,7 @@
icon: { sprite: /Textures/Objects/Materials/silk.rsi, state: icon }
spawn: MaterialWebSilk1
maxCount: 50
+ itemSize: 1
- type: stack
id: Bones
@@ -81,6 +91,7 @@
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: bones}
spawn: MaterialBones1
maxCount: 30
+ itemSize: 1
- type: stack
id: RunicMetalSheets
@@ -95,3 +106,4 @@
icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile }
spawn: MaterialGunpowder
maxCount: 60
+ itemSize: 1
diff --git a/Resources/Prototypes/Stacks/consumable_stacks.yml b/Resources/Prototypes/Stacks/consumable_stacks.yml
index e7feab7b52..5a9fac2f52 100644
--- a/Resources/Prototypes/Stacks/consumable_stacks.yml
+++ b/Resources/Prototypes/Stacks/consumable_stacks.yml
@@ -51,6 +51,7 @@
icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: powderpile_rainbow }
spawn: GroundCannabisRainbow
maxCount:
+ itemSize: 1
- type: stack
id: LeavesTobaccoDried
@@ -71,3 +72,5 @@
name: dried rainbow cannabis leaves
icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: dried }
spawn: LeavesCannabisRainbowDried
+ maxCount: 5
+ itemSize: 5
diff --git a/Resources/Textures/Mobs/Demons/tomatokiller.rsi/alive.png b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/alive.png
new file mode 100644
index 0000000000..5f459d518b
Binary files /dev/null and b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/alive.png differ
diff --git a/Resources/Textures/Mobs/Demons/tomatokiller.rsi/dead.png b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/dead.png
new file mode 100644
index 0000000000..4b3ee970a0
Binary files /dev/null and b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/dead.png differ
diff --git a/Resources/Textures/Mobs/Demons/tomatokiller.rsi/meta.json b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/meta.json
new file mode 100644
index 0000000000..57e4c7351f
--- /dev/null
+++ b/Resources/Textures/Mobs/Demons/tomatokiller.rsi/meta.json
@@ -0,0 +1,40 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": " taken from TG on commit https://github.com/tgstation/tgstation/commit/7e5f13f558253e76865e81c9641b7ec68e57754b",
+ "states": [
+ {
+ "name": "alive",
+ "directions": 4,
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2
+ ],
+ [
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "dead"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/meta.json b/Resources/Textures/Objects/Materials/materials.rsi/meta.json
index f0307208e9..78f497c0cd 100644
--- a/Resources/Textures/Objects/Materials/materials.rsi/meta.json
+++ b/Resources/Textures/Objects/Materials/materials.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 , bear pelt remade by Alekshhh, wood sprite modified by MisterMecky, wood_2 and wood_3 made by MisterMecky based on wood sprite, cardboard sprites made by MisterMecky, bananium, bananium_1 and peel made by brainfood1183 (github) for ss14",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 , bear pelt remade by Alekshhh, wood sprite modified by MisterMecky, wood_2 and wood_3 made by MisterMecky based on wood sprite, cardboard sprites made by MisterMecky, bananium, bananium_1 and peel made by brainfood1183 (github) for ss14. Pyrotton sprites are drawn by Ubaser, using the cotton material sprites as a base.",
"size": {
"x": 32,
"y": 32
@@ -66,6 +66,15 @@
{
"name": "cotton_3"
},
+ {
+ "name": "pyrotton"
+ },
+ {
+ "name": "pyrotton_2"
+ },
+ {
+ "name": "pyrotton_3"
+ },
{
"name": "diamond"
},
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png
new file mode 100644
index 0000000000..daa6701c39
Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png differ
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png
new file mode 100644
index 0000000000..fcd2689557
Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png differ
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png
new file mode 100644
index 0000000000..072ba2c6d1
Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png
new file mode 100644
index 0000000000..39d4b40f4c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png
new file mode 100644
index 0000000000..1012ccfe03
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json
new file mode 100644
index 0000000000..4a6e3c94fc
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Drawn by Ubaser, using the cotton sprites as a base.",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "dead"
+ },
+ {
+ "name": "harvest"
+ },
+ {
+ "name": "produce"
+ },
+ {
+ "name": "seed"
+ },
+ {
+ "name": "stage-1"
+ },
+ {
+ "name": "stage-2"
+ },
+ {
+ "name": "stage-3"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png
new file mode 100644
index 0000000000..72a98653c8
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png
new file mode 100644
index 0000000000..6528f4f326
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png
new file mode 100644
index 0000000000..c86f85f0d2
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png
new file mode 100644
index 0000000000..7bc634ce83
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png
new file mode 100644
index 0000000000..31aa7399f5
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dead.png
new file mode 100644
index 0000000000..2eb3c64ca9
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dead.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dried.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dried.png
new file mode 100644
index 0000000000..77f23e938c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/dried.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/harvest.png
new file mode 100644
index 0000000000..9702e5b488
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/harvest.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/meta.json
new file mode 100644
index 0000000000..e5bfeb99ef
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/meta.json
@@ -0,0 +1,173 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068 and modified by potato1234_x",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "dead"
+ },
+ {
+ "name": "harvest",
+ "delays":
+ [
+ [
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08
+ ]
+ ]
+ },
+ {
+ "name": "powderpile_rainbow"
+ },
+ {
+ "name": "produce",
+ "delays":
+ [
+ [
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08
+ ]
+ ]
+ },
+ {
+ "name": "dried"
+ },
+ {
+ "name": "seed"
+ },
+ {
+ "name": "stage-1",
+ "delays":
+ [
+ [
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08
+ ]
+ ]
+ },
+ {
+ "name": "stage-2",
+ "delays":
+ [
+ [
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08
+ ]
+ ]
+ },
+ {
+ "name": "stage-3",
+ "delays":
+ [
+ [
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08,
+ 0.08
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/powderpile_rainbow.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/powderpile_rainbow.png
new file mode 100644
index 0000000000..15057f8785
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/powderpile_rainbow.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/produce.png
new file mode 100644
index 0000000000..400fed1b21
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/produce.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/seed.png
new file mode 100644
index 0000000000..fa194148f3
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/seed.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-1.png
new file mode 100644
index 0000000000..8a3e17b098
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-1.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-2.png
new file mode 100644
index 0000000000..d30ed1ed26
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-2.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-3.png
new file mode 100644
index 0000000000..f4880b69e0
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi/stage-3.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/dead.png
new file mode 100644
index 0000000000..0051c4dc73
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/dead.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/harvest.png
new file mode 100644
index 0000000000..46a3b38982
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/harvest.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/meta.json
new file mode 100644
index 0000000000..84a4237a60
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 1dbcf389b0ec6b2c51b002df5fef8dd1519f8068",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "dead"
+ },
+ {
+ "name": "harvest"
+ },
+ {
+ "name": "seed"
+ },
+ {
+ "name": "stage-1"
+ },
+ {
+ "name": "stage-2"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/seed.png
new file mode 100644
index 0000000000..110dc64a4f
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/seed.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-1.png
new file mode 100644
index 0000000000..0b1d58de9d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-1.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-2.png
new file mode 100644
index 0000000000..6225f0c62d
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/tomatokiller.rsi/stage-2.png differ