diff --git a/Content.Client/Drowsiness/DrowsinessOverlay.cs b/Content.Client/Drowsiness/DrowsinessOverlay.cs new file mode 100644 index 0000000000..e06185434d --- /dev/null +++ b/Content.Client/Drowsiness/DrowsinessOverlay.cs @@ -0,0 +1,79 @@ +using Content.Shared.Drowsiness; +using Content.Shared.StatusEffect; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Client.Drowsiness; + +public sealed class DrowsinessOverlay : Overlay +{ + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IEntitySystemManager _sysMan = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + public override bool RequestScreenTexture => true; + private readonly ShaderInstance _drowsinessShader; + + public float CurrentPower = 0.0f; + + private const float PowerDivisor = 250.0f; + private float _visualScale = 0; + + public DrowsinessOverlay() + { + IoCManager.InjectDependencies(this); + _drowsinessShader = _prototypeManager.Index("Drowsiness").InstanceUnique(); + } + + protected override void FrameUpdate(FrameEventArgs args) + { + var playerEntity = _playerManager.LocalEntity; + + if (playerEntity == null) + return; + + if (!_entityManager.HasComponent(playerEntity) + || !_entityManager.TryGetComponent(playerEntity, out var status)) + return; + + var statusSys = _sysMan.GetEntitySystem(); + if (!statusSys.TryGetTime(playerEntity.Value, SharedDrowsinessSystem.DrowsinessKey, out var time, status)) + return; + + var curTime = _timing.CurTime; + var timeLeft = (float) (time.Value.Item2 - curTime).TotalSeconds; + + CurrentPower += 8f * (0.5f * timeLeft - CurrentPower) * args.DeltaSeconds / (timeLeft + 1); + } + + protected override bool BeforeDraw(in OverlayDrawArgs args) + { + if (!_entityManager.TryGetComponent(_playerManager.LocalEntity, out EyeComponent? eyeComp)) + return false; + + if (args.Viewport.Eye != eyeComp.Eye) + return false; + + _visualScale = Math.Clamp(CurrentPower / PowerDivisor, 0.0f, 1.0f); + return _visualScale > 0; + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null) + return; + + var handle = args.WorldHandle; + _drowsinessShader.SetParameter("SCREEN_TEXTURE", ScreenTexture); + _drowsinessShader.SetParameter("VisualScale", _visualScale); + handle.UseShader(_drowsinessShader); + handle.DrawRect(args.WorldBounds, Color.White); + handle.UseShader(null); + } +} diff --git a/Content.Client/Drowsiness/DrowsinessSystem.cs b/Content.Client/Drowsiness/DrowsinessSystem.cs new file mode 100644 index 0000000000..bc8862b19d --- /dev/null +++ b/Content.Client/Drowsiness/DrowsinessSystem.cs @@ -0,0 +1,53 @@ +using Content.Shared.Drowsiness; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Player; + +namespace Content.Client.Drowsiness; + +public sealed class DrowsinessSystem : SharedDrowsinessSystem +{ + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IOverlayManager _overlayMan = default!; + + private DrowsinessOverlay _overlay = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDrowsinessInit); + SubscribeLocalEvent(OnDrowsinessShutdown); + + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + + _overlay = new(); + } + + private void OnPlayerAttached(EntityUid uid, DrowsinessComponent component, LocalPlayerAttachedEvent args) + { + _overlayMan.AddOverlay(_overlay); + } + + private void OnPlayerDetached(EntityUid uid, DrowsinessComponent component, LocalPlayerDetachedEvent args) + { + _overlay.CurrentPower = 0; + _overlayMan.RemoveOverlay(_overlay); + } + + private void OnDrowsinessInit(EntityUid uid, DrowsinessComponent component, ComponentInit args) + { + if (_player.LocalEntity == uid) + _overlayMan.AddOverlay(_overlay); + } + + private void OnDrowsinessShutdown(EntityUid uid, DrowsinessComponent component, ComponentShutdown args) + { + if (_player.LocalEntity == uid) + { + _overlay.CurrentPower = 0; + _overlayMan.RemoveOverlay(_overlay); + } + } +} diff --git a/Content.Server/Drowsiness/DrowsinessSystem.cs b/Content.Server/Drowsiness/DrowsinessSystem.cs new file mode 100644 index 0000000000..7cb0b7820a --- /dev/null +++ b/Content.Server/Drowsiness/DrowsinessSystem.cs @@ -0,0 +1,49 @@ +using Content.Shared.Drowsiness; +using Content.Shared.Bed.Sleep; +using Content.Shared.StatusEffect; +using Robust.Shared.Random; + +namespace Content.Server.Drowsiness; + +public sealed class DrowsinessSystem : SharedDrowsinessSystem +{ + [ValidatePrototypeId] + private const string SleepKey = "ForcedSleep"; // Same one used by N2O and other sleep chems. + + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(SetupDrowsiness); + } + + private void SetupDrowsiness(EntityUid uid, DrowsinessComponent component, ComponentStartup args) + { + component.NextIncidentTime = _random.NextFloat(component.TimeBetweenIncidents.X, component.TimeBetweenIncidents.Y); + } + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component)) + { + component.NextIncidentTime -= frameTime; + + if (component.NextIncidentTime >= 0) + continue; + + // Set the new time. + component.NextIncidentTime += _random.NextFloat(component.TimeBetweenIncidents.X, component.TimeBetweenIncidents.Y); + + var duration = _random.NextFloat(component.DurationOfIncident.X, component.DurationOfIncident.Y); + + // Make sure the sleep time doesn't cut into the time to next incident. + component.NextIncidentTime += duration; + + _statusEffects.TryAddStatusEffect(uid, SleepKey, TimeSpan.FromSeconds(duration), false); + } + } +} diff --git a/Content.Server/Radiation/Components/RadiationProtectionComponent.cs b/Content.Server/Radiation/Components/RadiationProtectionComponent.cs new file mode 100644 index 0000000000..44b11af834 --- /dev/null +++ b/Content.Server/Radiation/Components/RadiationProtectionComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Prototypes; +using Content.Shared.Damage.Prototypes; + +namespace Content.Server.Radiation.Components; + +/// +/// Exists for use as a status effect. +/// Adds the DamageProtectionBuffComponent to the entity and adds the specified DamageModifierSet to its list of modifiers. +/// +[RegisterComponent] +public sealed partial class RadiationProtectionComponent : Component +{ + /// + /// The radiation damage modifier for entities with this component. + /// + [DataField("modifier")] + public ProtoId RadiationProtectionModifierSetId = "PotassiumIodide"; +} diff --git a/Content.Server/Radiation/Systems/RadiationProtectionSystem.cs b/Content.Server/Radiation/Systems/RadiationProtectionSystem.cs new file mode 100644 index 0000000000..5222c31bfe --- /dev/null +++ b/Content.Server/Radiation/Systems/RadiationProtectionSystem.cs @@ -0,0 +1,38 @@ +using Content.Server.Radiation.Components; +using Content.Shared.Damage.Components; +using Robust.Shared.Prototypes; + +namespace Content.Server.Radiation.EntitySystems; + +public sealed class RadiationProtectionSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnShutdown); + } + + private void OnInit(EntityUid uid, RadiationProtectionComponent component, ComponentInit args) + { + if (!_prototypeManager.TryIndex(component.RadiationProtectionModifierSetId, out var modifier)) + return; + var buffComp = EnsureComp(uid); + // add the damage modifier if it isn't in the dict yet + if (!buffComp.Modifiers.ContainsKey(component.RadiationProtectionModifierSetId)) + buffComp.Modifiers.Add(component.RadiationProtectionModifierSetId, modifier); + } + + private void OnShutdown(EntityUid uid, RadiationProtectionComponent component, ComponentShutdown args) + { + if (!TryComp(uid, out var buffComp)) + return; + // remove the damage modifier from the dict + buffComp.Modifiers.Remove(component.RadiationProtectionModifierSetId); + // if the dict is empty now, remove the buff component + if (buffComp.Modifiers.Count == 0) + RemComp(uid); + } +} diff --git a/Content.Shared/Damage/Components/DamageProtectionBuffComponent.cs b/Content.Shared/Damage/Components/DamageProtectionBuffComponent.cs new file mode 100644 index 0000000000..99b055a645 --- /dev/null +++ b/Content.Shared/Damage/Components/DamageProtectionBuffComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Damage.Prototypes; +using Robust.Shared.GameStates; + +namespace Content.Shared.Damage.Components; + +/// +/// Applies the specified DamageModifierSets when the entity takes damage. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class DamageProtectionBuffComponent : Component +{ + /// + /// The damage modifiers for entities with this component. + /// + [DataField] + public Dictionary Modifiers = new(); +} diff --git a/Content.Shared/Damage/Systems/DamageProtectionBuffSystem.cs b/Content.Shared/Damage/Systems/DamageProtectionBuffSystem.cs new file mode 100644 index 0000000000..bbb7bfda32 --- /dev/null +++ b/Content.Shared/Damage/Systems/DamageProtectionBuffSystem.cs @@ -0,0 +1,19 @@ +using Content.Shared.Damage.Components; + +namespace Content.Shared.Damage.Systems; + +public sealed class DamageProtectionBuffSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDamageModify); + } + + private void OnDamageModify(EntityUid uid, DamageProtectionBuffComponent component, DamageModifyEvent args) + { + foreach (var modifier in component.Modifiers.Values) + args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, modifier); + } +} diff --git a/Content.Shared/Drowsiness/DrowsinessComponent.cs b/Content.Shared/Drowsiness/DrowsinessComponent.cs new file mode 100644 index 0000000000..ed4f23733e --- /dev/null +++ b/Content.Shared/Drowsiness/DrowsinessComponent.cs @@ -0,0 +1,25 @@ +using System.Numerics; +using Robust.Shared.GameStates; + +namespace Content.Shared.Drowsiness; + +/// +/// Exists for use as a status effect. Adds a shader to the client that scales with the effect duration. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class DrowsinessComponent : Component +{ + /// + /// The random time between sleeping incidents, (min, max). + /// + [DataField("timeBetweenIncidents", required: true)] + public Vector2 TimeBetweenIncidents = new Vector2(5f, 60f); + + /// + /// The duration of sleeping incidents, (min, max). + /// + [DataField("durationOfIncident", required: true)] + public Vector2 DurationOfIncident = new Vector2(2, 5); + + public float NextIncidentTime; +} diff --git a/Content.Shared/Drowsiness/DrowsinessSystem.cs b/Content.Shared/Drowsiness/DrowsinessSystem.cs new file mode 100644 index 0000000000..97d7c0952d --- /dev/null +++ b/Content.Shared/Drowsiness/DrowsinessSystem.cs @@ -0,0 +1,9 @@ +using Content.Shared.StatusEffect; + +namespace Content.Shared.Drowsiness; + +public abstract class SharedDrowsinessSystem : EntitySystem +{ + [ValidatePrototypeId] + public const string DrowsinessKey = "Drowsiness"; +} diff --git a/Resources/Locale/en-US/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/flavors/flavor-profiles.ftl index f0dd5e02a2..fd32f3c862 100644 --- a/Resources/Locale/en-US/flavors/flavor-profiles.ftl +++ b/Resources/Locale/en-US/flavors/flavor-profiles.ftl @@ -172,6 +172,9 @@ flavor-complex-violets = like violets flavor-complex-pyrotton = like a burning mouth flavor-complex-mothballs = like mothballs flavor-complex-paint-thinner = like paint thinner +flavor-complex-numbing-tranquility = like numbing tranquility +flavor-complex-true-nature = like the true nature of reality +flavor-complex-false-meat = not entirely unlike meat # Drink-specific flavors. diff --git a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl index 3db8a3c5b0..9a8f2f6c8a 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl @@ -11,3 +11,5 @@ reagent-effect-status-effect-PressureImmunity = pressure immunity reagent-effect-status-effect-Pacified = combat pacification reagent-effect-status-effect-RatvarianLanguage = ratvarian language patterns reagent-effect-status-effect-StaminaModifier = modified stamina +reagent-effect-status-effect-RadiationProtection = radiation protection +reagent-effect-status-effect-Drowsiness = drowsiness diff --git a/Resources/Locale/en-US/reagents/meta/medicine.ftl b/Resources/Locale/en-US/reagents/meta/medicine.ftl index 7d99f87de2..6863f549c8 100644 --- a/Resources/Locale/en-US/reagents/meta/medicine.ftl +++ b/Resources/Locale/en-US/reagents/meta/medicine.ftl @@ -148,3 +148,8 @@ 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. +reagent-name-potassium-iodide = potassium iodide +reagent-desc-potassium-iodide = Will reduce the damaging effects of radiation by 90%. Prophylactic use only. + +reagent-name-haloperidol = haloperidol +reagent-desc-haloperidol = Removes most stimulating and hallucinogenic drugs. Reduces druggy effects and jitteriness. Causes drowsiness. diff --git a/Resources/Locale/en-US/seeds/seeds.ftl b/Resources/Locale/en-US/seeds/seeds.ftl index bc8e34982f..590b3a42b9 100644 --- a/Resources/Locale/en-US/seeds/seeds.ftl +++ b/Resources/Locale/en-US/seeds/seeds.ftl @@ -5,6 +5,8 @@ seeds-noun-spores = spores # Seeds seeds-wheat-name = wheat seeds-wheat-display-name = wheat stalks +seeds-meatwheat-name = meatwheat +seeds-meatwheat-display-name = meatwheat stalks seeds-oat-name = oat seeds-oat-display-name = oat stalks seeds-banana-name = banana @@ -25,6 +27,8 @@ seeds-lime-name = lime seeds-lime-display-name = lime trees seeds-orange-name = orange seeds-orange-display-name = orange trees +seeds-extradimensionalorange-name = extradimensional orange +seeds-extradimensionalorange-display-name = extradimensional orange trees seeds-pineapple-name = pineapple seeds-pineapple-display-name = pineapple plant seeds-potato-name = potato @@ -100,7 +104,9 @@ seeds-spacemans-trumpet-display-name = spaceman's trumpet plant seeds-koibean-name = koibeans seeds-koibean-display-name = koibean plant seeds-watermelon-name = watermelon -seeds-watermelon-display-name = watermelon plant +seeds-watermelon-display-name = watermelon vines +seeds-holymelon-name = holymelon +seeds-holymelon-display-name = holymelon vines seeds-grape-name = grape seeds-grape-display-name = grape plant seeds-cocoa-name = cocoa @@ -109,8 +115,10 @@ seeds-berries-name = berries seeds-berries-display-name = berry bush seeds-bungo-name = bungo seeds-bungo-display-name = bungo plant -seeds-pea-name = pea +seeds-pea-name = peas seeds-pea-display-name = pea vines +seeds-worldpea-name = world peas +seeds-worldpea-display-name = world pea vines seeds-pumpkin-name = pumpkin seeds-pumpkin-display-name = pumpkins seeds-cotton-name = cotton diff --git a/Resources/Locale/ru-RU/_white/flavors/flavor-profiles.ftl b/Resources/Locale/ru-RU/_white/flavors/flavor-profiles.ftl new file mode 100644 index 0000000000..caf8b541c6 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/flavors/flavor-profiles.ftl @@ -0,0 +1,3 @@ +flavor-complex-numbing-tranquility = как ошемляющее спокойствие +flavor-complex-true-nature = как пролом четвертой стены +flavor-complex-false-meat = мало, чем отличается от настоящего мяса diff --git a/Resources/Locale/ru-RU/_white/guidebook/chemistry/statuseeffects.ftl b/Resources/Locale/ru-RU/_white/guidebook/chemistry/statuseeffects.ftl new file mode 100644 index 0000000000..f84b374924 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/guidebook/chemistry/statuseeffects.ftl @@ -0,0 +1,2 @@ +reagent-effect-status-effect-RadiationProtection = защита от радиации +reagent-effect-status-effect-Drowsiness = сонливость diff --git a/Resources/Locale/ru-RU/_white/reagents/meta/medicine.ftl b/Resources/Locale/ru-RU/_white/reagents/meta/medicine.ftl new file mode 100644 index 0000000000..04619f4cba --- /dev/null +++ b/Resources/Locale/ru-RU/_white/reagents/meta/medicine.ftl @@ -0,0 +1,4 @@ +reagent-name-potassium-iodide = Йодид калия +reagent-desc-potassium-iodide = Снижает поражающее действие радиации на 90%. Только для профилактического применения. +reagent-name-haloperidol = Галоперидол +reagent-desc-haloperidol = Выводит большинство стимулирующих/галлюциногенных препаратов. Уменьшает наркотические эффекты и нервозность. Вызывает сонливость. diff --git a/Resources/Locale/ru-RU/_white/seeds/seeds.ftl b/Resources/Locale/ru-RU/_white/seeds/seeds.ftl new file mode 100644 index 0000000000..62181b6521 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/seeds/seeds.ftl @@ -0,0 +1,8 @@ +seeds-meatwheat-name = мясное пшено +seeds-meatwheat-display-name = стебли мясного пшена +seeds-extradimensionalorange-name = многомерный апельсин +seeds-extradimensionalorange-display-name = дерево многомерного апельсина +seeds-holymelon-name = святодыня +seeds-holymelon-display-name = ростки святодыни +seeds-worldpea-name = мировой горох +seeds-worldpea-display-name = стебли мирового гороха diff --git a/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml b/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml index d922955d62..bb90b48472 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml @@ -73,7 +73,7 @@ contents: - id: SyringePhalanximine - id: RadAutoInjector - - id: EmergencyMedipen + - id: PillCanisterPotassiumIodide - id: PillCanisterHyronalin amount: 2 diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml index 7aea09d04c..aa7c1be650 100644 --- a/Resources/Prototypes/Damage/modifier_sets.yml +++ b/Resources/Prototypes/Damage/modifier_sets.yml @@ -345,3 +345,9 @@ Caustic: 0.5 Poison: 0.0 Cellular: 0.0 + +# protects against radiation +- type: damageModifierSet + id: PotassiumIodide + coefficients: + Radiation: 0.1 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml index a3e8097958..85b43a1763 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml @@ -115,13 +115,22 @@ - trigger: !type:DamageTypeTrigger damageType: Blunt - damage: 100 + damage: 40 behaviors: - - !type:GibBehavior { } + - !type:SpawnEntitiesBehavior + spawn: + FoodMeatTomato: + min: 1 + max: 2 + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: gib - type: MobThresholds thresholds: 0: Alive - 24: Dead + 35: Dead - type: Fixtures fixtures: fix1: @@ -137,7 +146,7 @@ hidden: true damage: groups: - Brute: 4 + Brute: 9 animation: WeaponArcBite - type: Climbing - type: NameIdentifier @@ -157,3 +166,13 @@ - type: Appearance - type: Produce seedId: killerTomato + - type: PassiveDamage # Slight passive damage. 35 hp \ 5 min \ 60 sec = 0.08 + allowedStates: + - Alive + - Dead + damageCap: 50 + damage: + types: + Blunt: 0.11 + - type: StaticPrice + price: 400 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml index f676d43c2f..fc74aae1eb 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml @@ -26,6 +26,8 @@ - ForcedSleep - TemporaryBlindness - Pacified + - RadiationProtection + - Drowsiness - type: Buckle - type: StandingState - type: Tag @@ -104,6 +106,8 @@ - TemporaryBlindness - Pacified - StaminaModifier + - RadiationProtection + - Drowsiness - type: Bloodstream bloodMaxVolume: 150 - type: MobPrice diff --git a/Resources/Prototypes/Entities/Mobs/Player/terminator.yml b/Resources/Prototypes/Entities/Mobs/Player/terminator.yml index 1b3918f2ff..a81a850a92 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/terminator.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/terminator.yml @@ -25,7 +25,7 @@ decay: 6 cooldown: 1 critThreshold: 400 - # immune to space drugs, pax, temporary blindness + # immune to space drugs, pax, temporary blindness, drowsiness - type: StatusEffects allowed: - Stun @@ -41,6 +41,7 @@ - Muted - ForcedSleep - StaminaModifier + - RadiationProtection - type: MobState allowedStates: - Alive diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index fca92085e1..8775b20b9e 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -144,6 +144,8 @@ - TemporaryBlindness - Pacified - StaminaModifier + - RadiationProtection + - Drowsiness - type: Reflect enabled: false reflectProb: 0 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 81c98750dc..cef0496d57 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -503,6 +503,9 @@ id: FoodMeatWheat description: This doesn't look like meat, but your standards aren't that high to begin with. components: + - type: FlavorProfile + flavors: + - falsemeat - type: Sprite state: clump - type: SolutionContainerManager @@ -510,7 +513,7 @@ food: reagents: - ReagentId: UncookedAnimalProteins - Quantity: 1 + Quantity: 5 - type: entity name: raw snake meat @@ -599,6 +602,8 @@ - type: SliceableFood count: 3 slice: FoodMeatTomatoCutlet + - type: StaticPrice + price: 100 - type: entity name: salami @@ -1270,6 +1275,8 @@ - type: Sprite state: salami-slice color: red + - type: StaticPrice + price: 30 - type: entity name: salami slice diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index bea3e5efc0..de1e35762a 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -56,6 +56,28 @@ tags: - Wheat +- type: entity + name: meatwheat bushel + description: Some blood-drenched wheat stalks. You can crush them into what passes for meat if you squint hard enough. + id: MeatwheatBushel + parent: ProduceBase + components: + - type: Sprite + sprite: Objects/Specific/Hydroponics/meatwheat.rsi + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: UncookedAnimalProteins + Quantity: 10 + - type: SpawnItemsOnUse + items: + - id: FoodMeatWheat + sound: + path: /Audio/Voice/Slime/slime_squish.ogg + - type: Produce + seedId: meatwheat + - type: entity name: oat bushel description: Eat oats, do squats. @@ -605,6 +627,42 @@ tags: - Fruit +- type: entity + name: extradimensional orange + parent: FoodProduceBase + id: FoodExtradimensionalOrange + description: You can hardly wrap your head around this thing. + components: + - type: FlavorProfile + flavors: + - truenature + - type: SolutionContainerManager + solutions: + food: + maxVol: 19 + reagents: + #- ReagentId: Haloperidol + # Quantity: 10 + - ReagentId: Nutriment + Quantity: 5 + - ReagentId: Vitamin + Quantity: 4 + - type: Sprite + sprite: Objects/Specific/Hydroponics/extradimensional_orange.rsi + - type: Produce + seedId: extradimensionalOrange + - type: PotencyVisuals + minimumScale: 0.5 # reduce this in size beacuse the texture is way too big + maximumScale: 1 + - type: Extractable + juiceSolution: + reagents: + - ReagentId: JuiceOrange + Quantity: 10 + - type: Tag + tags: + - Fruit + - type: entity name: pineapple parent: FoodProduceBase @@ -1652,6 +1710,97 @@ - ReagentId: JuiceWatermelon Quantity: 4 +- type: entity + name: holymelon + parent: [FoodProduceBase, ItemHeftyBase] + id: FoodHolymelon + description: The water within this melon has been blessed by some deity that's particularly fond of watermelon. + components: + - type: Item + size: Small + - type: FlavorProfile + flavors: + - holy + - watermelon + - type: SolutionContainerManager + solutions: + food: + maxVol: 25 + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Vitamin + Quantity: 5 + - ReagentId: Holywater + Quantity: 10 + - type: Sprite + sprite: Objects/Specific/Hydroponics/holymelon.rsi + - type: Produce + seedId: watermelon + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Wine + Quantity: 20 + - type: Damageable + damageContainer: Biological + - type: DamageOnHighSpeedImpact + minimumSpeed: 0.1 + damage: + types: + Blunt: 1 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: desecration + - !type:SpillBehavior + solution: food + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: SliceableFood + count: 5 + slice: FoodHolymelonSlice + - type: HolyWeapon + - type: Tag + tags: + - Fruit + +- type: entity + name: holymelon slice + parent: ProduceSliceBase + id: FoodHolymelonSlice + description: Juicy golden and red slice. + components: + - type: Item + size: Tiny + - type: FlavorProfile + flavors: + - holy + - watermelon + - type: Sprite + sprite: Objects/Specific/Hydroponics/holymelon.rsi + - type: SolutionContainerManager + solutions: + food: + maxVol: 5 + reagents: + - ReagentId: Nutriment + Quantity: 2 + - ReagentId: Vitamin + Quantity: 1 + - ReagentId: Holywater + Quantity: 2 + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Wine + Quantity: 4 + - type: entity name: grapes parent: FoodProduceBase @@ -1796,6 +1945,34 @@ tags: - Vegetable +- type: entity + parent: FoodProduceBase + id: FoodWorldPeas + name: cluster of world peas + description: It's rumored to bring peace to any who consume it. + components: + - type: FlavorProfile + flavors: + - numbingtranquility + - type: SolutionContainerManager + solutions: + food: + maxVol: 8 + reagents: + - ReagentId: Happiness + Quantity: 3 + - ReagentId: Nutriment + Quantity: 3 + - ReagentId: Pax + Quantity: 2 + - type: Sprite + sprite: Objects/Specific/Hydroponics/world_pea.rsi + - type: Produce + seedId: worldPea + - type: Tag + tags: + - Vegetable + - type: entity name: pumpkin parent: FoodProduceBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml index 68073e11bf..14ef22ba70 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -22,6 +22,17 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/wheat.rsi +- type: entity + parent: SeedBase + name: packet of meatwheat seeds + description: "If you ever wanted to drive a vegetarian to insanity, here's how." + id: MeatwheatSeeds + components: + - type: Seed + seedId: meatwheat + - type: Sprite + sprite: Objects/Specific/Hydroponics/meatwheat.rsi + - type: entity parent: SeedBase name: packet of oat seeds @@ -133,6 +144,17 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/orange.rsi +- type: entity + parent: SeedBase + name: packet of extradimensional orange seeds + description: "Polygonal seeds." + id: ExtradimensionalOrangeSeeds + components: + - type: Seed + seedId: extradimensionalOrange + - type: Sprite + sprite: Objects/Specific/Hydroponics/extradimensional_orange.rsi + - type: entity parent: SeedBase name: packet of pineapple seeds @@ -521,6 +543,16 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/watermelon.rsi +- type: entity + parent: SeedBase + name: packet of holymelon seeds + id: HolymelonSeeds + components: + - type: Seed + seedId: holymelon + - type: Sprite + sprite: Objects/Specific/Hydroponics/holymelon.rsi + - type: entity parent: SeedBase name: packet of grape seeds @@ -573,6 +605,17 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/pea.rsi +- type: entity + parent: SeedBase + id: WorldPeaSeeds + name: packet of world pea seeds + description: "These rather large seeds give off a soothing blue glow." + components: + - type: Seed + seedId: worldPea + - type: Sprite + sprite: Objects/Specific/Hydroponics/world_pea.rsi + - type: entity parent: SeedBase name: packet of pumpkin seeds diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml index b2f34ea082..ec43ae2089 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml @@ -445,6 +445,38 @@ - id: PillHyronalin amount: 5 +- type: entity + name: pill (potassium iodide 10u) + parent: Pill + id: PillPotassiumIodide + components: + - type: Pill + pillType: 8 + - type: Sprite + state: pill9 + - type: Label + currentLabel: potassium iodide 10u + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + reagents: + - ReagentId: PotassiumIodide + Quantity: 10 + +- type: entity + name: pill canister (potassium iodide 10u) + parent: PillCanister + id: PillCanisterPotassiumIodide + suffix: Potassium iodide, 5 + components: + - type: Label + currentLabel: potassium iodide 10u + - type: StorageFill + contents: + - id: PillPotassiumIodide + amount: 5 + - type: entity name: pill (iron 10u) parent: Pill @@ -744,6 +776,10 @@ prob: 0.10 maxAmount: 7 orGroup: RandomPill + - id: PillPotassiumIodide + prob: 0.10 + maxAmount: 7 + orGroup: RandomPill - id: PillIron prob: 0.10 maxAmount: 7 diff --git a/Resources/Prototypes/Flavors/flavors.yml b/Resources/Prototypes/Flavors/flavors.yml index 47a1bc71aa..19f519193f 100644 --- a/Resources/Prototypes/Flavors/flavors.yml +++ b/Resources/Prototypes/Flavors/flavors.yml @@ -1072,4 +1072,19 @@ - type: flavor id: paintthinner flavorType: Complex - description: flavor-complex-paint-thinner \ No newline at end of file + description: flavor-complex-paint-thinner + +- type: flavor + id: numbingtranquility + flavorType: Complex + description: flavor-complex-numbing-tranquility + +- type: flavor + id: truenature + flavorType: Complex + description: flavor-complex-true-nature + +- type: flavor + id: falsemeat + flavorType: Complex + description: flavor-complex-false-meat diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml index 3b126ad2bc..80ce3d8751 100644 --- a/Resources/Prototypes/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Hydroponics/seeds.yml @@ -7,6 +7,8 @@ packetPrototype: WheatSeeds productPrototypes: - WheatBushel + mutationPrototypes: + - meatwheat lifespan: 25 maturation: 6 production: 3 @@ -24,6 +26,32 @@ Max: 20 PotencyDivisor: 20 +- type: seed + id: meatwheat + name: seeds-meatwheat-name + noun: seeds-noun-seeds + displayName: seeds-meatwheat-display-name + plantRsi: Objects/Specific/Hydroponics/meatwheat.rsi + packetPrototype: MeatwheatSeeds + productPrototypes: + - MeatwheatBushel + lifespan: 25 + maturation: 6 + production: 3 + yield: 3 + potency: 5 + idealLight: 8 + nutrientConsumption: 0.40 + chemicals: + Nutriment: + Min: 1 + Max: 20 + PotencyDivisor: 20 + UncookedAnimalProteins: + Min: 5 + Max: 20 + PotencyDivisor: 20 + - type: seed id: oat name: seeds-oat-name @@ -145,6 +173,8 @@ packetPrototype: LaughinPeaSeeds productPrototypes: - FoodLaughinPeaPod + mutationPrototypes: + - worldPea lifespan: 25 growthStages: 3 maturation: 8 @@ -258,6 +288,8 @@ packetPrototype: OrangeSeeds productPrototypes: - FoodOrange + mutationPrototypes: + - extradimensionalOrange harvestRepeat: Repeat lifespan: 55 maturation: 6 @@ -275,6 +307,36 @@ Max: 4 PotencyDivisor: 25 +- type: seed + id: extradimensionalOrange + name: seeds-extradimensionalorange-name + noun: seeds-noun-seeds + displayName: seeds-extradimensionalorange-display-name + plantRsi: Objects/Specific/Hydroponics/extradimensional_orange.rsi + packetPrototype: ExtradimensionalOrangeSeeds + productPrototypes: + - FoodExtradimensionalOrange + harvestRepeat: Repeat + lifespan: 55 + maturation: 6 + production: 6 + yield: 3 + potency: 10 + idealLight: 8 + chemicals: + #Haloperidol: + # Min: 3 + # Max: 10 + # PotencyDivisor: 20 + Nutriment: + Min: 1 + Max: 5 + PotencyDivisor: 20 + Vitamin: + Min: 1 + Max: 4 + PotencyDivisor: 25 + - type: seed id: pineapple name: seeds-pineapple-name @@ -1399,6 +1461,8 @@ packetPrototype: WatermelonSeeds productPrototypes: - FoodWatermelon + mutationPrototypes: + - holymelon lifespan: 55 maturation: 12 production: 3 @@ -1419,6 +1483,35 @@ Max: 5 PotencyDivisor: 20 +- type: seed + id: holymelon + name: seeds-holymelon-name + noun: seeds-noun-seeds + displayName: seeds-holymelon-display-name + plantRsi: Objects/Specific/Hydroponics/holymelon.rsi + packetPrototype: HolymelonSeeds + productPrototypes: + - FoodHolymelon + lifespan: 55 + maturation: 12 + production: 3 + yield: 1 + potency: 1 + idealLight: 8 + chemicals: + Nutriment: + Min: 1 + Max: 10 + PotencyDivisor: 10 + Holywater: + Min: 1 + Max: 10 + PotencyDivisor: 10 + Vitamin: + Min: 1 + Max: 5 + PotencyDivisor: 20 + - type: seed id: cocoa name: seeds-cocoa-name @@ -1533,6 +1626,39 @@ Max: 2 PotencyDivisor: 50 +- type: seed + id: worldPea + name: seeds-worldpea-name + noun: seeds-noun-seeds + displayName: seeds-worldpea-display-name + plantRsi: Objects/Specific/Hydroponics/world_pea.rsi + packetPrototype: PeaSeeds + productPrototypes: + - FoodWorldPeas + lifespan: 25 + growthStages: 3 + maturation: 20 + production: 6 + yield: 3 + potency: 25 + idealLight: 8 + harvestRepeat: Repeat + nutrientConsumption: 0.5 + waterConsumption: 0.5 + chemicals: + Happiness: + Min: 1 + Max: 3 + PotencyDivisor: 25 + Nutriment: + Min: 1 + Max: 3 + PotencyDivisor: 20 + Pax: + Min: 1 + Max: 2 + PotencyDivisor: 50 + - type: seed id: pumpkin name: seeds-pumpkin-name diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml index 44eba0f848..e63bb15b8b 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml @@ -1741,3 +1741,189 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.15 + +- type: reagent + id: VodkaRedBool + name: reagent-name-vodka-red-bool + parent: BaseAlcohol + desc: reagent-desc-vodka-red-bool + physicalDesc: reagent-physical-desc-strong-smelling + flavor: vodkaredbool + color: "#c4c27655" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/ginvodkaglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: true + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.10 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + - !type:GenericStatusEffect + key: Drowsiness + time: 1.0 + type: Remove + fizziness: 0.25 + +- type: reagent + id: XenoBasher + name: reagent-name-xeno-basher + parent: BaseAlcohol + desc: reagent-desc-xeno-basher + physicalDesc: reagent-physical-desc-fizzy-and-creamy + flavor: xenobasher + color: "#4d6600" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/xenobasher.rsi + state: icon_empty + metamorphicMaxFillLevels: 2 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.15 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + - !type:GenericStatusEffect + key: Drowsiness + time: 1.0 + type: Remove + fizziness: 0.15 + +- type: reagent + id: IrishBool + name: reagent-name-irish-bool + parent: BaseAlcohol + desc: reagent-desc-irish-bool + physicalDesc: reagent-physical-desc-bubbly + flavor: irishbool + color: "#71672e99" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/beerglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 6 + metamorphicFillBaseName: fill- + metamorphicChangeColor: true + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.10 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + - !type:GenericStatusEffect + key: Drowsiness + time: 1.0 + type: Remove + fizziness: 0.15 + +- type: reagent + id: BudgetInsulsDrink + name: reagent-name-budget-insuls + parent: BaseAlcohol + desc: reagent-desc-budget-insuls + physicalDesc: reagent-physical-desc-strong-smelling + flavor: budgetinsulsdrink + color: "#dede73" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/budgetinsulsdrink.rsi + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.15 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + - !type:GenericStatusEffect + key: Drowsiness + time: 1.0 + type: Remove + fizziness: 0.25 + +- type: reagent + id: WatermelonWakeup + name: reagent-name-watermelon-wakeup + parent: BaseAlcohol + desc: reagent-desc-watermelon-wakeup + physicalDesc: reagent-physical-desc-sweet + flavor: watermelonwakeup + color: "#d49dca" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/champagneglass.rsi + state: icon_empty + metamorphicMaxFillLevels: 4 + metamorphicFillBaseName: fill- + metamorphicChangeColor: true + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.07 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + - !type:GenericStatusEffect + key: Drowsiness + time: 1.0 + type: Remove + fizziness: 0.15 + +- type: reagent + id: Rubberneck + name: reagent-name-rubberneck + parent: BaseAlcohol + desc: reagent-desc-rubberneck + physicalDesc: reagent-physical-desc-strong-smelling + flavor: rubberneck + color: "#f0d74a" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/rubberneck.rsi + state: icon_empty + metamorphicMaxFillLevels: 3 + metamorphicFillBaseName: fill- + metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 1 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.15 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + - !type:GenericStatusEffect + key: Drowsiness + time: 1.0 + type: Remove + fizziness: 0.25 diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml index f2ca64e826..14c53daef1 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml @@ -12,6 +12,10 @@ effects: - !type:SatiateThirst factor: 2 + - !type:GenericStatusEffect + key: Drowsiness + time: 2.0 + type: Remove - !type:AdjustReagent reagent: Theobromine amount: 0.05 @@ -90,6 +94,15 @@ metamorphicMaxFillLevels: 1 metamorphicFillBaseName: fill- metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:GenericStatusEffect + key: Drowsiness + time: 2.0 + type: Remove - type: reagent id: GreenTea @@ -139,6 +152,15 @@ metamorphicMaxFillLevels: 5 metamorphicFillBaseName: fill- metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:GenericStatusEffect + key: Drowsiness + time: 2.0 + type: Remove - type: reagent id: IcedGreenTea @@ -316,6 +338,10 @@ effects: - !type:SatiateThirst factor: 6 + - !type:GenericStatusEffect + key: Drowsiness + time: 3.0 + type: Remove Poison: effects: - !type:HealthChange @@ -346,6 +372,15 @@ metamorphicMaxFillLevels: 1 metamorphicFillBaseName: fill- metamorphicChangeColor: false + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:GenericStatusEffect + key: Drowsiness + time: 2.0 + type: Remove - type: reagent id: Tea diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml index ba5adc4f2a..02b0df78a1 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml @@ -7,6 +7,15 @@ flavor: soda color: "#6c2828" recognizable: true + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:GenericStatusEffect + key: Drowsiness + time: 1.0 + type: Remove - type: reagent id: RoyRogers @@ -56,6 +65,10 @@ effects: - !type:SatiateThirst factor: 2 + - !type:GenericStatusEffect + key: Drowsiness + time: 2.0 + type: Remove - !type:AdjustReagent reagent: Theobromine amount: 0.05 diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index 6dcd6748f3..9f4deb02f3 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -891,6 +891,10 @@ - !type:GenericStatusEffect key: Stutter component: StutteringAccent + - !type:GenericStatusEffect + key: Drowsiness + time: 10 + type: Remove - !type:ResetNarcolepsy conditions: - !type:ReagentThreshold @@ -912,6 +916,10 @@ metabolisms: Medicine: effects: + - !type:GenericStatusEffect + key: Drowsiness + time: 10 + type: Remove - !type:ResetNarcolepsy conditions: - !type:ReagentThreshold @@ -1353,3 +1361,82 @@ - "psicodine-effect-anxieties-wash-away" - "psicodine-effect-at-peace" probability: 0.2 + +- type: reagent + id: PotassiumIodide + name: reagent-name-potassium-iodide + group: Medicine + desc: reagent-desc-potassium-iodide + physicalDesc: reagent-physical-desc-grainy + flavor: medicine + color: "#baa15d" + metabolisms: + Medicine: + effects: + - !type:GenericStatusEffect + key: RadiationProtection + component: RadiationProtection + time: 2 + type: Add + refresh: false + - !type:HealthChange + conditions: + - !type:ReagentThreshold + min: 20 + damage: + types: + Poison: 1 + +- type: reagent + id: Haloperidol + name: reagent-name-haloperidol + group: Medicine + desc: reagent-desc-haloperidol + physicalDesc: reagent-physical-desc-crystalline + flavor: medicine + color: "#27870a" + metabolisms: + Medicine: + effects: + - !type:Emote + emote: Yawn + showInChat: true + probability: 0.1 + - !type:GenericStatusEffect + key: Drowsiness + component: Drowsiness + time: 4 + type: Add + refresh: false + - !type:GenericStatusEffect + key: Jitter + time: 4.0 + type: Remove + - !type:GenericStatusEffect + key: SeeingRainbows + time: 10.0 + type: Remove + - !type:AdjustReagent + reagent: Desoxyephedrine + amount: -3.0 + - !type:AdjustReagent + reagent: Ephedrine + amount: -3.0 + - !type:AdjustReagent + reagent: Stimulants + amount: -3.0 + - !type:AdjustReagent + reagent: THC + amount: -3.0 + - !type:AdjustReagent + reagent: SpaceDrugs + amount: -3.0 + - !type:AdjustReagent + reagent: Bananadine + amount: -3.0 + - !type:AdjustReagent + reagent: SpaceGlue + amount: -3.0 + - !type:AdjustReagent + reagent: MindbreakerToxin + amount: -3.0 diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index dbebf21f33..10f85a1538 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -49,6 +49,14 @@ key: KnockedDown time: 3 type: Remove + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + reagent: Haloperidol + max: 0.01 + key: Drowsiness + time: 10 + type: Remove Medicine: effects: - !type:ResetNarcolepsy @@ -98,6 +106,14 @@ key: KnockedDown time: 1 type: Remove + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + reagent: Haloperidol + max: 0.01 + key: Drowsiness + time: 10 + type: Remove - !type:PopupMessage visualType: Medium messages: ["ephedrine-effect-tight-pain", "ephedrine-effect-heart-pounds"] @@ -158,6 +174,14 @@ key: ForcedSleep time: 3 type: Remove + - !type:GenericStatusEffect + conditions: + - !type:ReagentThreshold + reagent: Haloperidol + max: 0.01 + key: Drowsiness + time: 10 + type: Remove Medicine: metabolismRate: 0.2 effects: diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 76088841da..5a5c48a91e 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -56,18 +56,19 @@ metabolisms: Poison: effects: + - !type:Emote + emote: Yawn + showInChat: true + probability: 0.1 - !type:MovespeedModifier walkSpeedModifier: 0.65 sprintSpeedModifier: 0.65 - !type:GenericStatusEffect - conditions: - - !type:ReagentThreshold - reagent: ChloralHydrate - min: 10 - key: ForcedSleep - component: ForcedSleeping - refresh: false + key: Drowsiness + component: Drowsiness + time: 4 type: Add + refresh: false - !type:HealthChange conditions: - !type:ReagentThreshold diff --git a/Resources/Prototypes/Recipes/Reactions/medicine.yml b/Resources/Prototypes/Recipes/Reactions/medicine.yml index 98d49e793b..f98f713e10 100644 --- a/Resources/Prototypes/Recipes/Reactions/medicine.yml +++ b/Resources/Prototypes/Recipes/Reactions/medicine.yml @@ -671,3 +671,29 @@ catalyst: true products: Happiness: 4 + +- type: reaction + id: PotassiumIodide + reactants: + Potassium: + amount: 1 + Iodine: + amount: 1 + products: + PotassiumIodide: 2 + +- type: reaction + id: Haloperidol + reactants: + Aluminium: + amount: 1 + Chlorine: + amount: 1 + Fluorine: + amount: 1 + Oil: + amount: 1 + PotassiumIodide: + amount: 1 + products: + Haloperidol: 5 diff --git a/Resources/Prototypes/Shaders/shaders.yml b/Resources/Prototypes/Shaders/shaders.yml index 367693618b..d9e1190096 100644 --- a/Resources/Prototypes/Shaders/shaders.yml +++ b/Resources/Prototypes/Shaders/shaders.yml @@ -57,6 +57,11 @@ kind: source path: "/Textures/Shaders/drunk.swsl" +- type: shader + id: Drowsiness + kind: source + path: "/Textures/Shaders/radial_blur.swsl" + - type: shader id: Texture kind: source diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index 563a4df5a8..9acbd84882 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -68,6 +68,12 @@ id: NarcoticEffect alwaysAllowed: true +- type: statusEffect + id: RadiationProtection + +- type: statusEffect + id: Drowsiness #blurs your vision and makes you randomly fall asleep + # WD EDIT - type: statusEffect id: Incorporeal diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/dead.png new file mode 100644 index 0000000000..b79722cbe5 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/harvest.png new file mode 100644 index 0000000000..8bbddd83d8 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/meta.json new file mode 100644 index 0000000000..c2fd092c02 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/meta.json @@ -0,0 +1,68 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/1dbcf389b0ec6b2c51b002df5fef8dd1519f8068 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "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, + 0.08 + ] + ] + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + }, + { + "name": "stage-4" + }, + { + "name": "stage-5" + }, + { + "name": "stage-6" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/produce.png new file mode 100644 index 0000000000..be5b16262e Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/seed.png new file mode 100644 index 0000000000..dad99e5b3a Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-1.png new file mode 100644 index 0000000000..484b472660 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-2.png new file mode 100644 index 0000000000..cfae403829 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-3.png new file mode 100644 index 0000000000..e4e2ac9a39 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-3.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-4.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-4.png new file mode 100644 index 0000000000..31054ca2c5 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-4.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-5.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-5.png new file mode 100644 index 0000000000..91014722a8 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-5.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-6.png b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-6.png new file mode 100644 index 0000000000..96853e9790 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/extradimensional_orange.rsi/stage-6.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/dead.png new file mode 100644 index 0000000000..a3896d57c1 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/harvest.png new file mode 100644 index 0000000000..1a2a7d3747 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/meta.json new file mode 100644 index 0000000000..65cf434c0a --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/meta.json @@ -0,0 +1,52 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/b459ea3fdee965bdc3e93e7983ad7fa610d05c12 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + }, + { + "name": "stage-4" + }, + { + "name": "stage-5" + }, + { + "name": "stage-6" + }, + { + "name": "slice" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/produce.png new file mode 100644 index 0000000000..73e458d832 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/seed.png new file mode 100644 index 0000000000..66d13dc00c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/slice.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/slice.png new file mode 100644 index 0000000000..9ef34d39ae Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/slice.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-1.png new file mode 100644 index 0000000000..f926a279dc Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-2.png new file mode 100644 index 0000000000..4213fc3225 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-3.png new file mode 100644 index 0000000000..69b583f4e4 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-3.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-4.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-4.png new file mode 100644 index 0000000000..c496143bf6 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-4.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-5.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-5.png new file mode 100644 index 0000000000..5f9dc48217 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-5.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-6.png b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-6.png new file mode 100644 index 0000000000..a7a3cb4553 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/holymelon.rsi/stage-6.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/dead.png new file mode 100644 index 0000000000..3a1e5735cd Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/harvest.png new file mode 100644 index 0000000000..b0417c69c0 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/meta.json new file mode 100644 index 0000000000..cb53758e1c --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/1dbcf389b0ec6b2c51b002df5fef8dd1519f8068 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "dead" + }, + { + "name": "harvest" + }, + { + "name": "produce" + }, + { + "name": "seed" + }, + { + "name": "stage-1" + }, + { + "name": "stage-2" + }, + { + "name": "stage-3" + }, + { + "name": "stage-4" + }, + { + "name": "stage-5" + }, + { + "name": "stage-6" + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/produce.png new file mode 100644 index 0000000000..e6ab15f164 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/seed.png new file mode 100644 index 0000000000..de775fe7ac Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-1.png new file mode 100644 index 0000000000..efdf35bb12 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-2.png new file mode 100644 index 0000000000..1c9d20af4c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-3.png new file mode 100644 index 0000000000..bcec67f1e4 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-3.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-4.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-4.png new file mode 100644 index 0000000000..8d471502ab Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-4.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-5.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-5.png new file mode 100644 index 0000000000..bee9bd6b93 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-5.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-6.png b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-6.png new file mode 100644 index 0000000000..502f27714c Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/meatwheat.rsi/stage-6.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json index 37bc00be88..16f3df4df6 100644 --- a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/b459ea3fdee965bdc3e93e7983ad7fa610d05c12", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/b459ea3fdee965bdc3e93e7983ad7fa610d05c12 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png index 61e3fb4eaf..655628bc88 100644 Binary files a/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png and b/Resources/Textures/Objects/Specific/Hydroponics/watermelon.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/dead.png new file mode 100644 index 0000000000..00d4f1dfc2 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/dead.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/harvest.png new file mode 100644 index 0000000000..cbedf85611 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/harvest.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/meta.json new file mode 100644 index 0000000000..01be1e7dc4 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by slarticodefast", + "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/world_pea.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/produce.png new file mode 100644 index 0000000000..aee68431aa Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/produce.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/seed.png new file mode 100644 index 0000000000..fe7c872820 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/seed.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-1.png new file mode 100644 index 0000000000..abdff1afc7 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-1.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-2.png new file mode 100644 index 0000000000..ab44f97970 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-2.png differ diff --git a/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-3.png new file mode 100644 index 0000000000..6ab196981f Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/world_pea.rsi/stage-3.png differ diff --git a/Resources/Textures/Shaders/radial_blur.swsl b/Resources/Textures/Shaders/radial_blur.swsl new file mode 100644 index 0000000000..ad19ce3b0f --- /dev/null +++ b/Resources/Textures/Shaders/radial_blur.swsl @@ -0,0 +1,17 @@ +uniform sampler2D SCREEN_TEXTURE; +uniform highp float VisualScale; // between 0 and 1 +const highp float Intensity = 0.2; +const highp int SampleCount = 16; // multiple of 2 + +// a simple radial blur +void fragment() { + highp vec2 uv = FRAGCOORD.xy * SCREEN_PIXEL_SIZE.xy; + highp vec2 direction = vec2(0.5, 0.5) - uv; + COLOR = vec4(0.0, 0.0, 0.0, 0.0); + highp float test = float(SampleCount); + for (int i=1; i <= SampleCount; i++) + { + COLOR += zTextureSpec(SCREEN_TEXTURE, uv + float(i) * Intensity * VisualScale / float(SampleCount) * direction); + } + COLOR = COLOR / float(SampleCount); +}