From dc52f8bf2b79b3db5add0fe2f9aeb3abfa5ed806 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sat, 17 May 2025 17:10:11 -0400 Subject: [PATCH] Mood Rework Part 1 (#2425) This PR significantly reworks some parts of the mood system, namely by completely restoring and reworking the saturation scale shader so that its not completely terrible. Additionally, I've added numerous new instances and locations where Moodlets can be found in the game, particularly when it comes to food and drugs, as well as a new Mood interaction with the Deep Fryer. Chef gameplay is significantly expanded via the introduction of flavor related moodlets, as well as the almighty deep fryer giving a unique, moderately strong, and long lasting moodlet to anyone who eats whatever you deep fry. Go ahead, give someone a deep fried stick of salted butter coated in chocolate. You'll make their day. The big differences with the Saturation Scale are that its now variable, with smooth transitions, with the scale scaling with your character's mood. The more depressed you are, the more desaturated the world becomes. Whereas if you have entirely too many positive mood bonuses, the world becomes incredibly vibrant.

Media

Shoukou's Bar as seen by someone with the Sanguine trait(and no other moodlets) ![image](https://github.com/user-attachments/assets/bf8e7b25-5243-41ee-a6ad-3170444faae6) Max mood ![image](https://github.com/user-attachments/assets/fc03ee20-37a5-4163-ac35-8f2735f8b531) Saturnine trait: ![image](https://github.com/user-attachments/assets/fc21fc20-81e5-4364-807f-fcef40837ade) Minimum mood(dead) ![image](https://github.com/user-attachments/assets/b38e8ce8-0ea2-436d-b298-b1a715b0a6c2) Smooth transitions for shader tone. https://github.com/user-attachments/assets/3ab55da1-eca6-4cc5-9489-f4ad13ed0f27

:cl: - add: Re-enabled the "Mood shader" after significantly reworking it. Mood visual effects now scale with your character's mood, instead of only ever being near-greyscale. Being high life now makes the world more colorful and saturated. - add: A huge variety of medicines, drugs, and even food items(based on flavor!) now have mood effects. Reaching for the packet of salt now actually makes food provide a better mood buff. - add: Being Tear-gassed causes a massive mood penalty. - add: Deep frying food provides a strong mood bonus. - add: Added new Manic, Mercurial, and Dead Emotions traits. Signed-off-by: VMSolidus --- .../Overlays/SaturationScaleOverlay.cs | 26 ++- .../Effects/ChemPurgeMoodlets.cs | 45 ++++++ .../Effects/ChemRemoveMoodlet.cs | 36 +++++ Content.Server/Mood/MoodSystem.cs | 22 ++- .../Nutrition/Components/FoodComponent.cs | 6 +- .../Nutrition/EntitySystems/FoodSystem.cs | 5 +- .../Kitchen/Components/DeepFryerComponent.cs | 3 + .../Kitchen/EntitySystems/DeepFryerSystem.cs | 3 + Content.Shared/CCVar/CCVars.Mood.cs | 2 +- Content.Shared/Mood/MoodEvents.cs | 2 +- .../Overlays/SaturationScaleComponent.cs | 14 +- .../Assorted/Components/ManicComponent.cs | 22 +++ .../Assorted/Components/MercurialComponent.cs | 22 +++ .../Systems/TraitStatModifierSystem.cs | 11 ++ .../en-US/guidebook/chemistry/effects.ftl | 6 + Resources/Locale/en-US/mood/mood.ftl | 66 ++++++++ Resources/Locale/en-US/traits/traits.ftl | 10 ++ Resources/Prototypes/Mood/drugs.yml | 151 +++++++++++++++++- .../Reagents/Consumable/Drink/alcohol.yml | 2 +- .../Reagents/Consumable/Food/condiments.yml | 66 ++++++++ .../Reagents/Consumable/Food/food.yml | 2 + .../Reagents/Consumable/Food/ingredients.yml | 19 ++- Resources/Prototypes/Reagents/biological.yml | 36 +++++ Resources/Prototypes/Reagents/fun.yml | 4 + Resources/Prototypes/Reagents/medicine.yml | 43 ++++- Resources/Prototypes/Reagents/narcotics.yml | 59 ++++--- Resources/Prototypes/Reagents/toxins.yml | 7 + Resources/Prototypes/Traits/neutral.yml | 52 ++++++ .../_Goobstation/Reagents/medicine.yml | 4 + 29 files changed, 677 insertions(+), 69 deletions(-) create mode 100644 Content.Server/EntityEffects/Effects/ChemPurgeMoodlets.cs create mode 100644 Content.Server/EntityEffects/Effects/ChemRemoveMoodlet.cs create mode 100644 Content.Shared/Traits/Assorted/Components/ManicComponent.cs create mode 100644 Content.Shared/Traits/Assorted/Components/MercurialComponent.cs diff --git a/Content.Client/Overlays/SaturationScaleOverlay.cs b/Content.Client/Overlays/SaturationScaleOverlay.cs index d3a27a9724..267b32aed9 100644 --- a/Content.Client/Overlays/SaturationScaleOverlay.cs +++ b/Content.Client/Overlays/SaturationScaleOverlay.cs @@ -3,7 +3,7 @@ using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Enums; using Robust.Shared.Prototypes; -using Content.Shared.Mood; +using Robust.Shared.Timing; using Content.Shared.Overlays; namespace Content.Client.Overlays; @@ -17,8 +17,7 @@ public sealed class SaturationScaleOverlay : Overlay public override bool RequestScreenTexture => true; public override OverlaySpace Space => OverlaySpace.WorldSpace; private readonly ShaderInstance _shader; - private const float Saturation = 0.5f; - + private float _currentSaturation = 1f; public SaturationScaleOverlay() { @@ -36,14 +35,14 @@ public sealed class SaturationScaleOverlay : Overlay return base.BeforeDraw(in args); } - protected override void Draw(in OverlayDrawArgs args) { - if (ScreenTexture is null) + if (ScreenTexture is null || _playerManager.LocalEntity is not { Valid: true } player + || !_entityManager.HasComponent(player)) return; _shader.SetParameter("SCREEN_TEXTURE", ScreenTexture); - _shader.SetParameter("saturation", Saturation); + _shader.SetParameter("saturation", _currentSaturation); var handle = args.WorldHandle; handle.SetTransform(Matrix3x2.Identity); @@ -51,4 +50,19 @@ public sealed class SaturationScaleOverlay : Overlay handle.DrawRect(args.WorldBounds, Color.White); handle.UseShader(null); } + + protected override void FrameUpdate(FrameEventArgs args) + { + if (ScreenTexture is null || _playerManager.LocalEntity is not { Valid: true } player + || !_entityManager.TryGetComponent(player, out SaturationScaleOverlayComponent? saturationComp) + || _currentSaturation == saturationComp.SaturationScale) + return; + + var deltaTSlower = args.DeltaSeconds * saturationComp.FadeInMultiplier; + var saturationFadeIn = saturationComp.SaturationScale > _currentSaturation + ? deltaTSlower : -deltaTSlower; + + _currentSaturation += saturationFadeIn; + _shader.SetParameter("saturation", _currentSaturation); + } } diff --git a/Content.Server/EntityEffects/Effects/ChemPurgeMoodlets.cs b/Content.Server/EntityEffects/Effects/ChemPurgeMoodlets.cs new file mode 100644 index 0000000000..6a67fc3a9b --- /dev/null +++ b/Content.Server/EntityEffects/Effects/ChemPurgeMoodlets.cs @@ -0,0 +1,45 @@ +using Content.Server.Mood; +using Content.Shared.EntityEffects; +using Content.Shared.Mood; +using JetBrains.Annotations; +using Robust.Shared.Prototypes; + +namespace Content.Server.EntityEffects.Effects; + +/// +/// Removes all non-categorized moodlets from an entity(anything not "Static" like hunger & thirst). +/// +[UsedImplicitly] +public sealed partial class ChemPurgeMoodlets : EntityEffect +{ + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("reagent-effect-guidebook-purge-moodlets"); + + [DataField] + public bool RemovePermanentMoodlets; + + public override void Effect(EntityEffectBaseArgs args) + { + if (args is not EntityEffectReagentArgs _) + return; + + var entityManager = IoCManager.Resolve(); + var protoMan = IoCManager.Resolve(); + + if (!entityManager.TryGetComponent(args.TargetEntity, out MoodComponent? moodComponent)) + return; + + var moodletList = new List(); + foreach (var moodlet in moodComponent.UncategorisedEffects) + { + if (!protoMan.TryIndex(moodlet.Key, out MoodEffectPrototype? moodProto) + || moodProto.Timeout == 0 && !RemovePermanentMoodlets) + continue; + + moodletList.Add(moodlet.Key); + } + + foreach (var moodId in moodletList) + entityManager.EventBus.RaiseLocalEvent(args.TargetEntity, new MoodRemoveEffectEvent(moodId)); + } +} diff --git a/Content.Server/EntityEffects/Effects/ChemRemoveMoodlet.cs b/Content.Server/EntityEffects/Effects/ChemRemoveMoodlet.cs new file mode 100644 index 0000000000..88e5c03d88 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/ChemRemoveMoodlet.cs @@ -0,0 +1,36 @@ +using Content.Shared.EntityEffects; +using Content.Shared.Mood; +using JetBrains.Annotations; +using Robust.Shared.Prototypes; + +namespace Content.Server.EntityEffects.Effects; + +/// +/// Removes a moodlet from an entity if present. +/// +[UsedImplicitly] +public sealed partial class ChemRemoveMoodlet : EntityEffect +{ + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + var protoMan = IoCManager.Resolve(); + return Loc.GetString("reagent-effect-guidebook-remove-moodlet", + ("name", protoMan.Index(MoodPrototype.Id))); + } + + /// + /// The mood prototype to be removed from the entity. + /// + [DataField(required: true)] + public ProtoId MoodPrototype = default!; + + public override void Effect(EntityEffectBaseArgs args) + { + if (args is not EntityEffectReagentArgs _) + return; + + var entityManager = IoCManager.Resolve(); + var ev = new MoodRemoveEffectEvent(MoodPrototype); + entityManager.EventBus.RaiseLocalEvent(args.TargetEntity, ev); + } +} diff --git a/Content.Server/Mood/MoodSystem.cs b/Content.Server/Mood/MoodSystem.cs index f3508f1a43..ba41bb2be1 100644 --- a/Content.Server/Mood/MoodSystem.cs +++ b/Content.Server/Mood/MoodSystem.cs @@ -12,7 +12,6 @@ using Content.Shared.Movement.Systems; using Content.Shared.Mood; using Content.Shared.Overlays; using Content.Shared.Popups; -using Content.Shared.Traits.Assorted.Components; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Timer = Robust.Shared.Timing.Timer; @@ -33,7 +32,6 @@ public sealed class MoodSystem : EntitySystem [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly IConfigurationManager _config = default!; - public override void Initialize() { base.Initialize(); @@ -47,8 +45,11 @@ public sealed class MoodSystem : EntitySystem SubscribeLocalEvent(OnRemoveEffect); } - private void OnShutdown(EntityUid uid, MoodComponent component, ComponentShutdown args) => + private void OnShutdown(EntityUid uid, MoodComponent component, ComponentShutdown args) + { _alerts.ClearAlertCategory(uid, component.MoodCategory); + RemComp(uid); + } private void OnRemoveEffect(EntityUid uid, MoodComponent component, MoodRemoveEffectEvent args) { @@ -92,7 +93,6 @@ public sealed class MoodSystem : EntitySystem private void OnMoodEffect(EntityUid uid, MoodComponent component, MoodEffectEvent args) { if (!_config.GetCVar(CCVars.MoodEnabled) - || !_config.GetCVar(CCVars.MoodEnabled) || !_prototypeManager.TryIndex(args.EffectId, out var prototype) ) return; @@ -268,7 +268,7 @@ public sealed class MoodSystem : EntitySystem uid = ev.Receiver; amount = ev.MoodChangedAmount; - var newMoodLevel = amount + neutral; + var newMoodLevel = amount + neutral + ev.MoodOffset; if (!force) newMoodLevel = Math.Clamp( amount + neutral, @@ -283,6 +283,7 @@ public sealed class MoodSystem : EntitySystem mood.NeutralMoodThreshold = component.MoodThresholds.GetValueOrDefault(MoodThreshold.Neutral); } + RefreshShaders(uid, component.CurrentMoodLevel); UpdateCurrentThreshold(uid, component); } @@ -313,7 +314,6 @@ public sealed class MoodSystem : EntitySystem { _movementSpeedModifier.RefreshMovementSpeedModifiers(uid); SetCritThreshold(uid, component, modifier); - RefreshShaders(uid, modifier); } // Modify interface @@ -325,12 +325,11 @@ public sealed class MoodSystem : EntitySystem component.LastThreshold = component.CurrentMoodThreshold; } - private void RefreshShaders(EntityUid uid, int modifier) + private void RefreshShaders(EntityUid uid, float mood) { - if (modifier == -1) - EnsureComp(uid); - else - RemComp(uid); + EnsureComp(uid, out var comp); + comp.SaturationScale = mood / 50; + Dirty(uid, comp); } private void SetCritThreshold(EntityUid uid, MoodComponent component, int modifier) @@ -417,7 +416,6 @@ public sealed partial class ShowMoodEffects : IAlertClick var playerManager = IoCManager.Resolve(); if (!entityManager.TryGetComponent(uid, out var comp) - || comp.CurrentMoodThreshold == MoodThreshold.Dead || !playerManager.TryGetSessionByEntity(uid, out var session)) return; diff --git a/Content.Server/Nutrition/Components/FoodComponent.cs b/Content.Server/Nutrition/Components/FoodComponent.cs index db31e30073..3303372f66 100644 --- a/Content.Server/Nutrition/Components/FoodComponent.cs +++ b/Content.Server/Nutrition/Components/FoodComponent.cs @@ -1,13 +1,12 @@ using Content.Server.Body.Components; using Content.Shared.Nutrition.Components; -using Content.Server.Nutrition.EntitySystems; using Content.Shared.FixedPoint; using Robust.Shared.Audio; using Robust.Shared.Prototypes; namespace Content.Server.Nutrition.Components; -[RegisterComponent, Access(typeof(FoodSystem), typeof(FoodSequenceSystem))] +[RegisterComponent] public sealed partial class FoodComponent : Component { [DataField] @@ -80,4 +79,7 @@ public sealed partial class FoodComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool RequireDead = true; + + [DataField] + public HashSet MoodletsOnEat = new(); } diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index 7eb3a715c0..e8fca86e54 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -10,7 +10,6 @@ using Content.Shared.Administration.Logs; using Content.Shared.Body.Components; using Content.Shared.Body.Organ; using Content.Shared.Chemistry; -using Content.Shared.Chemistry.Reagent; using Content.Shared.Database; using Content.Shared.DoAfter; using Content.Shared.FixedPoint; @@ -37,6 +36,7 @@ using Content.Shared.CCVar; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Whitelist; using Robust.Shared.Configuration; +using Content.Shared.Mood; namespace Content.Server.Nutrition.EntitySystems; @@ -323,6 +323,9 @@ public sealed class FoodSystem : EntitySystem _popup.PopupPredicted(Loc.GetString("food-system-eat-broadcasted-success", ("user", Identity.Entity(args.User, EntityManager)), ("food", Identity.Entity(entity.Owner, EntityManager))), args.User, args.User, PopupType.MediumCaution); + foreach (var mood in entity.Comp.MoodletsOnEat) + RaiseLocalEvent(args.User, new MoodEffectEvent(mood)); + // log successful voluntary eating _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} ate {ToPrettyString(entity.Owner):food}"); } diff --git a/Content.Server/Nyanotrasen/Kitchen/Components/DeepFryerComponent.cs b/Content.Server/Nyanotrasen/Kitchen/Components/DeepFryerComponent.cs index c06bc7cfd8..3eb8f8bbce 100644 --- a/Content.Server/Nyanotrasen/Kitchen/Components/DeepFryerComponent.cs +++ b/Content.Server/Nyanotrasen/Kitchen/Components/DeepFryerComponent.cs @@ -236,5 +236,8 @@ namespace Content.Server.Nyanotrasen.Kitchen.Components [ViewVariables(VVAccess.ReadWrite)] [DataField("soundRemoveItem")] public SoundSpecifier SoundRemoveItem = new SoundPathSpecifier("/Audio/Nyanotrasen/Machines/deepfryer_basket_remove_item.ogg"); + + [DataField] + public string DeepFriedMoodletPrototype = "DeepFriedEffect"; } } diff --git a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs index b56e8e9abe..54ce701e51 100644 --- a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs +++ b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs @@ -347,6 +347,9 @@ public sealed partial class DeepFryerSystem : SharedDeepfryerSystem MakeCrispy(item); + if (TryComp(item, out FoodComponent? foodComp)) + foodComp.MoodletsOnEat.Add(component.DeepFriedMoodletPrototype); + var oilToUse = 0; if (HasComp(item)) { diff --git a/Content.Shared/CCVar/CCVars.Mood.cs b/Content.Shared/CCVar/CCVars.Mood.cs index d803f0e521..ad23f7e85f 100644 --- a/Content.Shared/CCVar/CCVars.Mood.cs +++ b/Content.Shared/CCVar/CCVars.Mood.cs @@ -25,5 +25,5 @@ public sealed partial class CCVars CVarDef.Create("mood.modify_thresholds", false, CVar.SERVER); public static readonly CVarDef MoodVisualEffects = - CVarDef.Create("mood.visual_effects", false, CVar.CLIENTONLY | CVar.ARCHIVE); + CVarDef.Create("mood.visual_effects", true, CVar.CLIENTONLY | CVar.ARCHIVE); } diff --git a/Content.Shared/Mood/MoodEvents.cs b/Content.Shared/Mood/MoodEvents.cs index 58a993d2b7..23c6fafba3 100644 --- a/Content.Shared/Mood/MoodEvents.cs +++ b/Content.Shared/Mood/MoodEvents.cs @@ -48,7 +48,7 @@ public sealed class MoodRemoveEffectEvent : EntityEventArgs /// EG: The end result after tallying up all Moodlets comes out to 70, but a trait multiplies it by 0.8 to make it 56. /// [ByRefEvent] -public record struct OnSetMoodEvent(EntityUid Receiver, float MoodChangedAmount, bool Cancelled); +public record struct OnSetMoodEvent(EntityUid Receiver, float MoodChangedAmount, bool Cancelled, float MoodOffset = 0f); /// /// This event is raised on an entity when it receives a mood effect, but before the effects are calculated. diff --git a/Content.Shared/Overlays/SaturationScaleComponent.cs b/Content.Shared/Overlays/SaturationScaleComponent.cs index 3318ddff6d..d5ef64e9f5 100644 --- a/Content.Shared/Overlays/SaturationScaleComponent.cs +++ b/Content.Shared/Overlays/SaturationScaleComponent.cs @@ -2,5 +2,15 @@ namespace Content.Shared.Overlays; -[RegisterComponent, NetworkedComponent] -public sealed partial class SaturationScaleOverlayComponent : Component { } +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SaturationScaleOverlayComponent : Component +{ + [DataField, AutoNetworkedField] + public float SaturationScale = 1f; + + /// + /// Modifies how quickly the saturation "fades in", normally at a rate of 1% per second times this multiplier. + /// + [DataField, AutoNetworkedField] + public float FadeInMultiplier = 0.1f; +} diff --git a/Content.Shared/Traits/Assorted/Components/ManicComponent.cs b/Content.Shared/Traits/Assorted/Components/ManicComponent.cs new file mode 100644 index 0000000000..72f1307e37 --- /dev/null +++ b/Content.Shared/Traits/Assorted/Components/ManicComponent.cs @@ -0,0 +1,22 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Traits.Assorted.Components; + +/// +/// A component that intensifies moodlets by a random amount. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ManicComponent : Component +{ + /// + /// The lower bound for multiplying moodlet effects. This also deadens negative moods. + /// + [DataField] + public float LowerMultiplier = 0.7f; + + /// + /// The amount to multiply moodlets by. This will also intensify negative moods too. + /// + [DataField] + public float UpperMultiplier = 1.3f; +} diff --git a/Content.Shared/Traits/Assorted/Components/MercurialComponent.cs b/Content.Shared/Traits/Assorted/Components/MercurialComponent.cs new file mode 100644 index 0000000000..7075aaca0a --- /dev/null +++ b/Content.Shared/Traits/Assorted/Components/MercurialComponent.cs @@ -0,0 +1,22 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Traits.Assorted.Components; + +/// +/// A component that randomly varies user's mood. Triggers each time mood is changed. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class MercurialComponent : Component +{ + /// + /// The lower bounds for random mood offsets. + /// + [DataField] + public float LowerMood = -10f; + + /// + /// The upper bounds for random mood offsets. + /// + [DataField] + public float UpperMood = 10f; +} diff --git a/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs b/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs index 97b88f559e..59b957365b 100644 --- a/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs +++ b/Content.Shared/Traits/Assorted/Systems/TraitStatModifierSystem.cs @@ -5,6 +5,8 @@ using Content.Shared.Traits.Assorted.Components; using Content.Shared.Damage.Events; using Content.Shared.Weapons.Melee.Events; using Content.Shared.Damage.Components; +using Content.Shared.Mood; +using Robust.Shared.Random; namespace Content.Shared.Traits.Assorted.Systems; @@ -12,6 +14,7 @@ public sealed partial class TraitStatModifierSystem : EntitySystem { [Dependency] private readonly ContestsSystem _contests = default!; [Dependency] private readonly MobThresholdSystem _threshold = default!; + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { base.Initialize(); @@ -22,6 +25,8 @@ public sealed partial class TraitStatModifierSystem : EntitySystem SubscribeLocalEvent(OnAdrenalineGetThrowingDamage); SubscribeLocalEvent(OnPainToleranceGetMeleeDamage); SubscribeLocalEvent(OnPainToleranceGetThrowingDamage); + SubscribeLocalEvent(OnManicMood); + SubscribeLocalEvent(OnMercurialMood); } private void OnCritStartup(EntityUid uid, CritModifierComponent component, ComponentStartup args) @@ -83,4 +88,10 @@ public sealed partial class TraitStatModifierSystem : EntitySystem var modifier = _contests.StaminaContest(uid, component.BypassClamp, component.RangeModifier); return component.Inverse ? 1 / modifier : modifier; } + + private void OnManicMood(EntityUid uid, ManicComponent component, ref OnSetMoodEvent args) => + args.MoodChangedAmount *= _random.NextFloat(component.LowerMultiplier, component.UpperMultiplier); + + private void OnMercurialMood(EntityUid uid, MercurialComponent component, ref OnSetMoodEvent args) => + args.MoodOffset += _random.NextFloat(component.LowerMood, component.UpperMood); } diff --git a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl index aa898d7ef3..59fc7c4f32 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl @@ -379,6 +379,12 @@ reagent-effect-guidebook-add-moodlet = *[other] for {$timeout} seconds } +reagent-effect-guidebook-remove-moodlet = + Removes the {$name} moodlet. + +reagent-effect-guidebook-purge-moodlets = + Removes all active non-permanent moodlets. + reagent-effect-guidebook-purify-evil = Purifies evil powers reagent-effect-guidebook-plant-diethylamine = { $chance -> diff --git a/Resources/Locale/en-US/mood/mood.ftl b/Resources/Locale/en-US/mood/mood.ftl index 9f16e4dc7f..b1b84b0cfc 100644 --- a/Resources/Locale/en-US/mood/mood.ftl +++ b/Resources/Locale/en-US/mood/mood.ftl @@ -90,3 +90,69 @@ mood-effect-PlasmamanIngestPlasma = mood-effect-PlasmamanIngestMilk = I can feel the milk's calcium repairing my bones. This is dairy-lightful! + +# Floor Juice +mood-effect-DrankBlood = + I've just drank salty, lukewarm blood. That's disgusting! +mood-effect-DrankBloodVampiric = + Oh what sweet nectar is this, like a fine vintage. +mood-effect-DrankInsectBlood = + I've just drank slimy insect goop. That's disgusting! +mood-effect-DrankVomit = + Why did I just drink that vomit? It tastes like vomit! +mood-effect-DrankZombieBlood = + THAT TASTED VILE, LIKE DEATH IN LIQUID FORM! + +# Medicines +mood-effect-EpinephrineEffect = + My blood feels like it has been set on fire! +mood-effect-PsicodineEffect = + I feel completely at peace. +mood-effect-StrongStimulant = + LET'S FUCKING GO!!! +mood-effect-MildPaincauser = + My body feels sore. +mood-effect-StrongPaincauser = + Agony gnaws at my soul. +mood-effect-MildPainkiller = + My aches and pains are just a little better. +mood-effect-StrongPainkiller = + I can barely feel anything, all of my pains are washed out and faded. + +# Poisons +mood-effect-LacerinolEffect = + BILLIONS OF TINY KNIVES ARE INSIDE ME, GET THEM OUT! +mood-effect-PuncturaseEffect = + MY BODY IS FULL OF NEEDLES, GET THEM OUT! +mood-effect-BruizineEffect = + I FEEL LIKE I'M BEING CRUSHED BY A THOUSAND TON SPACE SHIP! +mood-effect-TearGasEffect = + MY EYES ARE BURNING, IT HURTS SO MUCH! +mood-effect-BuzzochloricBeesEffect = + OH NO NOT THE BEES! NOT THE BEES! NOT THE BEES AGHHHHHHHHHHHH! THEY'RE IN MY EYES! +mood-effect-RomerolEffect = + I THINK I AM GOING TO DIE. I AM BUT A CORPSE AWAITING ITS GRAVE. +mood-effect-PaxEffect = + Woah... + +# Food +mood-effect-SweetenerEffect = + That tasted really sweet. +mood-effect-SpicyEffect = + That tasted spicy, hot in a good way. +mood-effect-OilyEffect = + I ate something cooked with sweet oil. +mood-effect-SaltyEffect = + I ate something salty, it tasted great! +mood-effect-MintyEffect = + I ate something minty, it was cool and refreshing. +mood-effect-PepperEffect = + I ate something peppery, it tasted great! +mood-effect-ChocolateEffect = + I ate something with chocolate, it was so good! +mood-effect-ButterEffect = + I ate a buttery treat, I could eat this all day. +mood-effect-DeepFriedEffect = + I ate something deep fried! It was the tastiest thing I've ever had in my life! +mood-effect-TastyEffect = + That was really tasty! diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 16d15315b7..ed17e4bfce 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -654,6 +654,15 @@ trait-description-IPCBrittleBoneDisease = This trait reduces your threshold for death by 60 points. (Just as the normal version, it halves the threshold. IPCs cannot be crit, so it instead makes you die 60 points sooner.) +trait-name-Manic = Manic +trait-description-Manic = Your perception of the world is subject to varying intensities. Anything that affects your mood will have its effects multiplied by between 0.7 and 1.3. + +trait-name-Mercurial = Mercurial +trait-description-Mercurial = Your mood fluctuates regularly, causing you to have a random modifier to your mood that is always somewhere between -10 and +10. + +trait-name-DeadEmotions = Dead Emotions +trait-description-DeadEmotions = You feel nothing, and are completely unaffected by all positive or negative mood modifiers. + trait-name-IPCFaultyWaterproofing = Faulty Waterproofing trait-description-IPCFaultyWaterproofing = Either due to damage or cheap construction, your chassis is not waterproof. @@ -665,3 +674,4 @@ trait-description-IPCFragileCircuits = Your chassis is particularly bad at handling electric discharges. You immediately shut down any time you take [color=orange]Shock[/color] damage and must be rebooted. fragileCircuits-kill-popup = {$name}'s circuits shut down from short-circuiting! + diff --git a/Resources/Prototypes/Mood/drugs.yml b/Resources/Prototypes/Mood/drugs.yml index e7f718d674..c10c9dc1d9 100644 --- a/Resources/Prototypes/Mood/drugs.yml +++ b/Resources/Prototypes/Mood/drugs.yml @@ -30,10 +30,159 @@ # Non-Addictive Drugs - type: moodEffect id: EthanolBenefit - moodChange: 7 + moodChange: 3 timeout: 300 #5 minutes - type: moodEffect id: SpaceDrugsBenefit moodChange: 7 timeout: 300 #5 minutes + +- type: moodEffect + id: StrongStimulant + moodChange: 10 + timeout: 300 #5 minutes + +# Floor Juice +- type: moodEffect + id: DrankBlood + moodChange: -10 + timeout: 60 #1 minute + +- type: moodEffect + id: DrankBloodVampiric + moodChange: 10 + timeout: 300 #5 minutes + +- type: moodEffect + id: DrankInsectBlood + moodChange: -10 + timeout: 60 #1 minute + +- type: moodEffect + id: DrankVomit + moodChange: -10 + timeout: 60 #1 minute + +- type: moodEffect + id: DrankZombieBlood + moodChange: -30 + timeout: 600 #10 minute + +# Medicines +- type: moodEffect + id: EpinephrineEffect + moodChange: -3 + timeout: 300 #5 minutes + +- type: moodEffect + id: PsicodineEffect + moodChange: 8 + timeout: 300 #5 minutes + +- type: moodEffect + id: MildPaincauser + moodChange: -1 + timeout: 300 #5 minutes + +- type: moodEffect + id: StrongPaincauser + moodChange: -5 + timeout: 300 #5 minutes + +- type: moodEffect + id: MildPainkiller + moodChange: 1 + timeout: 300 #5 minutes + +- type: moodEffect + id: StrongPainkiller + moodChange: 5 + timeout: 300 #5 minutes + +# Poisons +- type: moodEffect + id: LacerinolEffect + moodChange: -20 + timeout: 60 #1 minute + +- type: moodEffect + id: PuncturaseEffect + moodChange: -20 + timeout: 60 #1 minute + +- type: moodEffect + id: BruizineEffect + moodChange: -20 + timeout: 60 #1 minute + +- type: moodEffect + id: TearGasEffect + moodChange: -20 + timeout: 60 #1 minute + +- type: moodEffect + id: BuzzochloricBeesEffect + moodChange: -20 + timeout: 60 #1 minute + +- type: moodEffect + id: RomerolEffect + moodChange: -200 + timeout: 1800 #30 minutes + +- type: moodEffect + id: PaxEffect + moodChange: 100 + timeout: 60 #1 minute + +# Food +- type: moodEffect + id: SweetenerEffect + moodChange: 0.5 + timeout: 1800 #30 minutes + +- type: moodEffect + id: SpicyEffect + moodChange: 0.5 + timeout: 1800 #30 minutes + +- type: moodEffect + id: OilyEffect + moodChange: 0.5 + timeout: 1800 #30 minutes + +- type: moodEffect + id: SaltyEffect + moodChange: 0.5 + timeout: 1800 #30 minutes + +- type: moodEffect + id: MintyEffect + moodChange: 0.5 + timeout: 1800 #30 minutes + +- type: moodEffect + id: PepperEffect + moodChange: 0.5 + timeout: 1800 #30 minutes + +- type: moodEffect + id: ChocolateEffect + moodChange: 3 + timeout: 1800 #30 minutes + +- type: moodEffect + id: ButterEffect + moodChange: 4 + timeout: 1800 #30 minutes + +- type: moodEffect + id: DeepFriedEffect + moodChange: 5 + timeout: 1800 #30 minutes + +- type: moodEffect + id: TastyEffect + moodChange: 3 + timeout: 1800 #30 minutes diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml index 46f9561601..f535fbf5a0 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml @@ -262,7 +262,7 @@ conditions: - !type:ReagentThreshold reagent: Ethanol - min: 5 + min: 1 - type: reagent id: Gin diff --git a/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml b/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml index 4cc2810792..504bfe4d4f 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml @@ -7,6 +7,11 @@ flavor: sweet color: aquamarine recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: BbqSauce @@ -17,6 +22,11 @@ flavor: sweet color: darkred recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: Cornoil @@ -27,6 +37,11 @@ flavor: oily color: yellow recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: OilyEffect - type: reagent id: Frostoil @@ -36,6 +51,11 @@ physicalDesc: reagent-physical-desc-cold flavor: cold color: skyblue + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: MintyEffect - type: reagent id: HorseradishSauce @@ -46,6 +66,11 @@ flavor: spicy color: gray recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SpicyEffect - type: reagent id: Hotsauce @@ -56,6 +81,11 @@ flavor: spicy color: red recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SpicyEffect - type: reagent id: Ketchup @@ -66,6 +96,11 @@ flavor: tomato color: red recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: Ketchunaise @@ -76,6 +111,11 @@ flavor: ketchunaise color: "#fba399" recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: LaughinSyrup @@ -86,6 +126,11 @@ flavor: sweet color: "#803280" recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: Mayo @@ -96,6 +141,11 @@ flavor: mayonnaise color: "#f9f5e5" recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: Mustard @@ -106,6 +156,11 @@ flavor: mustard color: "#ffdb58" recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: Vinaigrette @@ -116,6 +171,11 @@ flavor: sour color: "#efdaae" recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect - type: reagent id: Soysauce @@ -133,6 +193,8 @@ factor: 0.5 - !type:SatiateThirst factor: -0.5 # high salt content + - !type:ChemAddMoodlet + moodPrototype: SaltyEffect - type: reagent id: TableSalt @@ -164,6 +226,8 @@ # eating salt on its own kinda sucks, kids - !type:SatiateThirst factor: -0.5 + - !type:ChemAddMoodlet + moodPrototype: SaltyEffect - type: reagent id: Syrup @@ -184,6 +248,8 @@ effects: - !type:SatiateHunger factor: 6.0 #Stronger than cookedramen + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect footstepSound: collection: FootstepBlood params: diff --git a/Resources/Prototypes/Reagents/Consumable/Food/food.yml b/Resources/Prototypes/Reagents/Consumable/Food/food.yml index c9625c663c..eb9bb96bfa 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/food.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/food.yml @@ -86,6 +86,8 @@ reagent: Nutriment min: 0.1 factor: 1 + - !type:ChemAddMoodlet + moodPrototype: SweetenerEffect plantMetabolism: - !type:PlantAdjustNutrition amount: 0.1 diff --git a/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml b/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml index b74fd7eb23..e9c8c4a596 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml @@ -104,6 +104,11 @@ flavor: peppery color: black recognizable: true + metabolisms: + Food: + effects: + - !type:ChemAddMoodlet + moodPrototype: PepperEffect - type: reagent id: Vinegar @@ -157,8 +162,8 @@ flavor: oily flavorMinimum: 0.05 color: olive - meltingPoint: -6.0 #Nyano - Summary: Add melting point for fryer. - boilingPoint: 299.0 #Nyano - Summary: Add boiling point for fryer. + meltingPoint: -6.0 #Nyano - Summary: Add melting point for fryer. + boilingPoint: 299.0 #Nyano - Summary: Add boiling point for fryer. recognizable: true metabolisms: Food: @@ -166,6 +171,8 @@ - !type:AdjustReagent reagent: Nutriment amount: 0.75 + - !type:ChemAddMoodlet + moodPrototype: OilyEffect - type: reagent id: Oil @@ -200,6 +207,8 @@ - !type:AdjustReagent reagent: Nutriment #Oils enhance nutrition amount: 0.75 + - !type:ChemAddMoodlet + moodPrototype: SpicyEffect Poison: effects: - !type:AdjustTemperature @@ -234,6 +243,8 @@ reagent: Nutriment min: 0.1 factor: 1 + - !type:ChemAddMoodlet + moodPrototype: ChocolateEffect plantMetabolism: - !type:PlantAdjustNutrition amount: 0.1 @@ -258,4 +269,6 @@ effects: - !type:AdjustReagent reagent: Nutriment - amount: 0.75 \ No newline at end of file + amount: 0.75 + - !type:ChemAddMoodlet + moodPrototype: ButterEffect diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index 2f7d148eb9..9b50dfb8bd 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -46,6 +46,16 @@ type: Vampiric reagent: Omnizine amount: 0.3 + - !type:ChemAddMoodlet + moodPrototype: DrankBlood + conditions: + - !type:OrganType + type: Human + - !type:ChemAddMoodlet + moodPrototype: DrankBloodVampiric + conditions: + - !type:OrganType + type: Vampiric Food: effects: - !type:AdjustReagent @@ -84,6 +94,11 @@ recognizable: true physicalDesc: reagent-physical-desc-slimy slippery: false + metabolisms: + Drink: + effects: + - !type:ChemAddMoodlet + moodPrototype: DrankInsectBlood - type: reagent id: Slime @@ -146,6 +161,14 @@ recognizable: true physicalDesc: reagent-physical-desc-metallic slippery: false + metabolisms: + Drink: + effects: + - !type:ChemAddMoodlet + moodPrototype: DrankBlood + conditions: + - !type:OrganType + type: Human - type: reagent parent: Blood @@ -158,6 +181,14 @@ recognizable: true physicalDesc: reagent-physical-desc-pungent slippery: false + metabolisms: + Drink: + effects: + - !type:ChemAddMoodlet + moodPrototype: DrankBlood + conditions: + - !type:OrganType + type: Human - type: reagent id: ZombieBlood @@ -182,6 +213,9 @@ Poison: 4 - !type:ChemVomit probability: 0.25 + - !type:CauseZombieInfection + - !type:ChemAddMoodlet + moodPrototype: DrankZombieBlood - type: reagent id: Ichor @@ -250,6 +284,8 @@ - !type:AdjustReagent reagent: Nutriment amount: 0.1 + - !type:ChemAddMoodlet + moodPrototype: DrankVomit footstepSound: collection: FootstepBlood params: diff --git a/Resources/Prototypes/Reagents/fun.yml b/Resources/Prototypes/Reagents/fun.yml index 1df2636c8c..19a7dc1abc 100644 --- a/Resources/Prototypes/Reagents/fun.yml +++ b/Resources/Prototypes/Reagents/fun.yml @@ -135,6 +135,8 @@ - !type:HasTag invert: true tag: Bee + - !type:ChemAddMoodlet + moodPrototype: BuzzochloricBeesEffect - type: reagent id: GroundBee @@ -204,6 +206,8 @@ - !type:Emote emote: Scream probability: 0.3 + - !type:ChemAddMoodlet + moodPrototype: LacerinolEffect - type: reagent id: Fresium diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index 139373ca4d..f13fa0bea1 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -138,6 +138,8 @@ Radiation: -3 groups: Brute: 0.5 + - !type:ChemAddMoodlet + moodPrototype: StrongPaincauser - type: reagent id: Bicaridine @@ -172,6 +174,8 @@ - !type:ReagentThreshold min: 15 - !type:Drunk + - !type:ChemAddMoodlet + moodPrototype: MildPaincauser - type: reagent id: Cryoxadone @@ -383,6 +387,8 @@ - !type:MovespeedModifier # Goob edit walkSpeedModifier: 1.1 sprintSpeedModifier: 1.1 + - !type:ChemAddMoodlet + moodPrototype: EpinephrineEffect - type: reagent id: Hyronalin @@ -451,6 +457,8 @@ Asphyxiation: -5 - !type:ModifyBleedAmount amount: -0.25 + - !type:ChemAddMoodlet + moodPrototype: MildPainkiller - type: reagent id: Kelotane @@ -484,6 +492,8 @@ conditions: - !type:ReagentThreshold min: 25 + - !type:ChemAddMoodlet + moodPrototype: MildPainkiller - type: reagent id: Leporazine @@ -631,6 +641,11 @@ conditions: - !type:ReagentThreshold min: 10 + - !type:ChemRemoveMoodlet + moodPrototype: RomerolEffect + conditions: + - !type:ReagentThreshold + min: 10 - type: reagent id: AmbuzolPlus @@ -648,6 +663,11 @@ conditions: - !type:ReagentThreshold min: 5 + - !type:ChemRemoveMoodlet + moodPrototype: RomerolEffect + conditions: + - !type:ReagentThreshold + min: 5 - type: reagent id: PulpedBananaPeel @@ -745,6 +765,11 @@ key: SeeingRainbows time: 15.0 type: Remove + - !type:ChemPurgeMoodlets + conditions: + - !type:ReagentThreshold + reagent: Synaptizine + min: 10 - type: reagent id: TranexamicAcid @@ -793,6 +818,8 @@ Heat: -0.5 Shock: -0.5 Cold: -0.5 # Was .33, Buffed due to limb damage changes + - !type:ChemAddMoodlet + moodPrototype: MildPainkiller - type: reagent id: Lipozine @@ -1017,6 +1044,8 @@ damage: types: Cold: 3 + - !type:ChemAddMoodlet + moodPrototype: LacerinolEffect - type: reagent id: Puncturase @@ -1041,6 +1070,8 @@ damage: types: Blunt: 5 + - !type:ChemAddMoodlet + moodPrototype: PuncturaseEffect - type: reagent id: Bruizine @@ -1064,6 +1095,8 @@ damage: types: Poison: 4 + - !type:ChemAddMoodlet + moodPrototype: BruizineEffect - type: reagent id: Pyrazine @@ -1273,14 +1306,8 @@ 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 + - !type:ChemAddMoodlet + moodPrototype: PsicodineEffect - type: reagent id: PotassiumIodide diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index ffe0bd8594..58a09661a2 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -52,6 +52,8 @@ key: Adrenaline component: IgnoreSlowOnDamage time: 5 + - !type:ChemAddMoodlet + moodPrototype: StrongStimulant Medicine: effects: - !type:ResetNarcolepsy @@ -109,6 +111,9 @@ key: Adrenaline component: IgnoreSlowOnDamage time: 5 + - !type:ChemAddMoodlet + moodPrototype: StrongStimulant + # WD EDIT START - !type:GenericStatusEffect # WWDP key: NoScream component: NoScream @@ -123,6 +128,7 @@ reagent: Ephedrine max: 1.1 min: 1 + # WD EDIT END Medicine: effects: - !type:ResetNarcolepsy @@ -149,8 +155,8 @@ sprintSpeedModifier: 1.3 - !type:HealthChange conditions: - - !type:ReagentThreshold - min: 80 #please wait 3 minutes before using another stimpack + - !type:ReagentThreshold + min: 80 #please wait 3 minutes before using another stimpack damage: types: Poison: 1 @@ -190,23 +196,25 @@ key: Adrenaline component: IgnoreSlowOnDamage time: 5 + - !type:ChemAddMoodlet + moodPrototype: StrongStimulant Medicine: metabolismRate: 1.0 effects: - - !type:ResetNarcolepsy - - !type:SatiateHunger - factor: 1 - - !type:SatiateThirst - factor: 1 - - !type:HealthChange - conditions: - - !type:TotalDamage - min: 70 - max: 120 # you've got a chance to get out of crit - damage: # heals at the same rate as tricordrazine, doesn't heal poison because if you OD'd I'm not giving you a safety net - groups: - Burn: -1 - Brute: -1 + - !type:ResetNarcolepsy + - !type:SatiateHunger + factor: 1 + - !type:SatiateThirst + factor: 1 + - !type:HealthChange + conditions: + - !type:TotalDamage + min: 70 + max: 120 # you've got a chance to get out of crit + damage: # heals at the same rate as tricordrazine, doesn't heal poison because if you OD'd I'm not giving you a safety net + groups: + Burn: -1 + Brute: -1 - type: reagent id: THC @@ -303,10 +311,6 @@ min: 15 - !type:ChemAddMoodlet moodPrototype: SpaceDrugsBenefit - conditions: - - !type:ReagentThreshold - reagent: SpaceDrugs - min: 5 - type: reagent id: Bananadine @@ -454,6 +458,8 @@ conditions: - !type:ReagentThreshold min: 5 + - !type:ChemAddMoodlet + moodPrototype: TearGasEffect - type: reagent id: Happiness @@ -487,17 +493,8 @@ 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:ChemAddMoodlet + moodPrototype: PsicodineEffect - !type:GenericStatusEffect key: SeeingRainbows component: SeeingRainbows diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 199c8ae109..d80a6f079d 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -470,6 +470,11 @@ conditions: - !type:ReagentThreshold min: 5 + - !type:ChemAddMoodlet + moodPrototype: RomerolEffect + conditions: + - !type:ReagentThreshold + min: 5 - type: reagent id: UncookedAnimalProteins @@ -556,6 +561,8 @@ component: Pacified refresh: false type: Add + - !type:ChemAddMoodlet + moodPrototype: PaxEffect - type: reagent id: Honk diff --git a/Resources/Prototypes/Traits/neutral.yml b/Resources/Prototypes/Traits/neutral.yml index 189053d639..118fa1a35d 100644 --- a/Resources/Prototypes/Traits/neutral.yml +++ b/Resources/Prototypes/Traits/neutral.yml @@ -208,3 +208,55 @@ - type: ReplacementAccent replacementChance: 0.15 accent: liar + +- type: trait + id: Manic + category: Mental + points: 0 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - StationAi + functions: + - !type:TraitAddComponent + components: + - type: Manic + +- type: trait + id: Mercurial + category: Mental + points: 0 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - StationAi + functions: + - !type:TraitAddComponent + components: + - type: Mercurial + +- type: trait + id: DeadEmotions + category: Mental + points: -5 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Borg + - StationAi + - !type:CharacterTraitRequirement + inverted: true + traits: + - Sanguine + - Saturnine + - Manic + - Mercurial + functions: + - !type:TraitRemoveComponent + components: + - type: Mood diff --git a/Resources/Prototypes/_Goobstation/Reagents/medicine.yml b/Resources/Prototypes/_Goobstation/Reagents/medicine.yml index 8958394558..5eca665df8 100644 --- a/Resources/Prototypes/_Goobstation/Reagents/medicine.yml +++ b/Resources/Prototypes/_Goobstation/Reagents/medicine.yml @@ -132,6 +132,8 @@ - !type:AdjustReagent reagent: Mitogen amount: 0.125 # 1.25 per 5u + - !type:ChemAddMoodlet + moodPrototype: StrongPainkiller - type: reagent id: Mitogen @@ -722,6 +724,8 @@ conditions: - !type:ReagentThreshold min: 20 + - !type:ChemAddMoodlet + moodPrototype: MildPainkiller # Externally applied meds