diff --git a/Content.Shared/EntityEffects/Effects/Transform/PopupMessageEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Transform/PopupMessageEntityEffectSystem.cs index 5381d5e01e..41e1e87ce4 100644 --- a/Content.Shared/EntityEffects/Effects/Transform/PopupMessageEntityEffectSystem.cs +++ b/Content.Shared/EntityEffects/Effects/Transform/PopupMessageEntityEffectSystem.cs @@ -16,29 +16,55 @@ public sealed partial class PopupMessageEntityEffectSystem : EntityEffectSystem< [Dependency] private readonly SharedPopupSystem _popup = default!; protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + // DEN start: move this to a public method + PopupMessage(entity, + args.Effect.Messages, + args.Effect.VisualType, + args.Effect.Method, + args.Effect.Type); + // DEN end + } + + // DEN start: move this to a public method + + /// + /// Spawns a random popup message on the given entity with the given parameters. + /// + /// The entity to spawn a popup message on. + /// An array of possible random messages. + /// The visual type of the popup. + /// The popup API type to use. + /// Whether this popup only shows for the entity, or for everyone. + public void PopupMessage(Entity entity, + string[] messages, + PopupType popupType, + PopupMethod method, + PopupRecipients recipients) { // TODO: When we get proper random prediction remove this check. if (_net.IsClient) return; - var msg = Loc.GetString(_random.Pick(args.Effect.Messages), ("entity", entity)); + var msg = Loc.GetString(_random.Pick(messages), ("entity", entity)); - switch ((args.Effect.Method, args.Effect.Type)) + switch ((method, recipients)) { case (PopupMethod.PopupEntity, PopupRecipients.Local): - _popup.PopupEntity(msg, entity, entity, args.Effect.VisualType); + _popup.PopupEntity(msg, entity, entity, popupType); break; case (PopupMethod.PopupEntity, PopupRecipients.Pvs): - _popup.PopupEntity(msg, entity, args.Effect.VisualType); + _popup.PopupEntity(msg, entity, popupType); break; case (PopupMethod.PopupCoordinates, PopupRecipients.Local): - _popup.PopupCoordinates(msg, Transform(entity).Coordinates, entity, args.Effect.VisualType); + _popup.PopupCoordinates(msg, Transform(entity).Coordinates, entity, popupType); break; case (PopupMethod.PopupCoordinates, PopupRecipients.Pvs): - _popup.PopupCoordinates(msg, Transform(entity).Coordinates, args.Effect.VisualType); + _popup.PopupCoordinates(msg, Transform(entity).Coordinates, popupType); break; } } + // DEN end } /// diff --git a/Content.Shared/_DEN/StatusEffects/Components/ExpiryPopupMessageStatusEffectComponent.cs b/Content.Shared/_DEN/StatusEffects/Components/ExpiryPopupMessageStatusEffectComponent.cs new file mode 100644 index 0000000000..6566789d99 --- /dev/null +++ b/Content.Shared/_DEN/StatusEffects/Components/ExpiryPopupMessageStatusEffectComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Shared._DEN.StatusEffects.Components; + +/// +/// A status effect that will create a popup message on the entity upon the status effect expiring. +/// +/// +/// This is very similar to the "PopupMessage" entity effect in metabolisms, but rather than +/// being a chance per metabolism tick, this just shows a random message on expiry - +/// making it more consistent. +/// +[RegisterComponent] +public sealed partial class ExpiryPopupMessageStatusEffectComponent : PopupMessageStatusEffectComponent +{ } diff --git a/Content.Shared/_DEN/StatusEffects/Components/IntervalPopupMessageStatusEffectComponent.cs b/Content.Shared/_DEN/StatusEffects/Components/IntervalPopupMessageStatusEffectComponent.cs new file mode 100644 index 0000000000..c18bc64225 --- /dev/null +++ b/Content.Shared/_DEN/StatusEffects/Components/IntervalPopupMessageStatusEffectComponent.cs @@ -0,0 +1,25 @@ +namespace Content.Shared._DEN.StatusEffects.Components; + +/// +/// A status effect that will regularly create a popup message on the entity on a given interval. +/// +/// +/// This is very similar to the "PopupMessage" entity effect in metabolisms, but rather than +/// being a chance per metabolism tick, this just shows random messages on a given interval - +/// making it more consistent. +/// +[RegisterComponent] +public sealed partial class IntervalPopupMessageStatusEffectComponent : PopupMessageStatusEffectComponent +{ + /// + /// The minimum and maximum time interval that popup messages will be displayed. + /// + [DataField] + public (TimeSpan Min, TimeSpan Max) Interval = (TimeSpan.FromSeconds(30.0f), TimeSpan.FromSeconds(60.0f)); + + /// + /// The next time we should display a popup message. + /// + [ViewVariables(VVAccess.ReadWrite)] + public TimeSpan NextPopupTime = TimeSpan.Zero; +} diff --git a/Content.Shared/_DEN/StatusEffects/Components/PopupMessageStatusEffectComponent.cs b/Content.Shared/_DEN/StatusEffects/Components/PopupMessageStatusEffectComponent.cs new file mode 100644 index 0000000000..5f11a84f6d --- /dev/null +++ b/Content.Shared/_DEN/StatusEffects/Components/PopupMessageStatusEffectComponent.cs @@ -0,0 +1,39 @@ +using Content.Shared.EntityEffects.Effects.Transform; +using Content.Shared.Popups; + +namespace Content.Shared._DEN.StatusEffects.Components; + +/// +/// Abstract class for status effects that show popup messages. +/// +/// +/// This is very similar to the "PopupMessage" entity effect in metabolisms. +/// +public abstract partial class PopupMessageStatusEffectComponent : Component +{ + /// + /// Array of messages that can popup. + /// Only one is chosen when the effect is applied. + /// + [DataField(required: true)] + public string[] Messages = default!; + + /// + /// Whether to just the entity we're affecting, or everyone around them. + /// + [DataField] + public PopupRecipients Recipients = PopupRecipients.Local; + + /// + /// Which popup API method to use. + /// Use PopupCoordinates in case the entity will be deleted while the popup is shown. + /// + [DataField] + public PopupMethod Method = PopupMethod.PopupEntity; + + /// + /// Size of the popup. + /// + [DataField] + public PopupType VisualType = PopupType.Small; +} diff --git a/Content.Shared/_DEN/StatusEffects/EntitySystems/PopupMessageStatusEffectSystem.cs b/Content.Shared/_DEN/StatusEffects/EntitySystems/PopupMessageStatusEffectSystem.cs new file mode 100644 index 0000000000..bec0d39449 --- /dev/null +++ b/Content.Shared/_DEN/StatusEffects/EntitySystems/PopupMessageStatusEffectSystem.cs @@ -0,0 +1,86 @@ +using Content.Shared._DEN.StatusEffects.Components; +using Content.Shared.EntityEffects.Effects.Transform; +using Content.Shared.StatusEffectNew; +using Content.Shared.StatusEffectNew.Components; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Shared._DEN.StatusEffects.EntitySystems; + +/// +/// This system handles displaying popup messages for various popup message status effects. +/// +public sealed partial class PopupMessageStatusEffectSystem : EntitySystem +{ + [Dependency] private readonly PopupMessageEntityEffectSystem _popupEffect = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnIntervalPopupApplied); + SubscribeLocalEvent(OnExpiredPopupRemoved); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var interval, out var statusEffect)) + { + if (_timing.CurTime < interval.NextPopupTime) + continue; + + UpdatePopupIntervalTime((uid, interval)); + SpawnPopup((uid, statusEffect), interval); + } + } + + private void OnIntervalPopupApplied(Entity ent, ref StatusEffectAppliedEvent args) + { + UpdatePopupIntervalTime(ent); + } + + private void OnExpiredPopupRemoved(Entity ent, ref StatusEffectRemovedEvent args) + { + SpawnPopup((ent.Owner, null), ent.Comp); + } + + /// + /// Spawns a popup message related to a popup message status effect. + /// + /// The status effect entity. + /// The popup message component associated with this effect. + private void SpawnPopup(Entity ent, PopupMessageStatusEffectComponent popupComp) + { + if (!Resolve(ent.Owner, ref ent.Comp)) + return; + + var statusEffect = ent.Comp; + if (statusEffect.AppliedTo == null) + return; + + var xform = Transform(statusEffect.AppliedTo.Value); + _popupEffect.PopupMessage((statusEffect.AppliedTo.Value, xform), + popupComp.Messages, + popupComp.VisualType, + popupComp.Method, + popupComp.Recipients); + } + + /// + /// Sets the next popup message spawn time for an interval popup effect. + /// + /// The interval popup status effect. + private void UpdatePopupIntervalTime(Entity ent) + { + var comp = ent.Comp; + var (min, max) = comp.Interval; + var newInterval = _random.NextDouble(min.TotalSeconds, max.TotalSeconds); + + comp.NextPopupTime = _timing.CurTime + TimeSpan.FromSeconds(newInterval); + } +} diff --git a/Resources/Locale/en-US/_DEN/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/_DEN/flavors/flavor-profiles.ftl new file mode 100644 index 0000000000..1c1e90b3ae --- /dev/null +++ b/Resources/Locale/en-US/_DEN/flavors/flavor-profiles.ftl @@ -0,0 +1,7 @@ +# base flavors + +flavor-base-tart = tart + +# complex flavors + +flavor-complex-pomegranate = like pomegranates diff --git a/Resources/Locale/en-US/_DEN/guidebook/guides.ftl b/Resources/Locale/en-US/_DEN/guidebook/guides.ftl new file mode 100644 index 0000000000..260b0a64fa --- /dev/null +++ b/Resources/Locale/en-US/_DEN/guidebook/guides.ftl @@ -0,0 +1 @@ +guide-entry-lewd = ⑱ Lewd diff --git a/Resources/Locale/en-US/_DEN/nutrition/components/food-sequence.ftl b/Resources/Locale/en-US/_DEN/nutrition/components/food-sequence.ftl index 16593d7dfb..68984b2379 100644 --- a/Resources/Locale/en-US/_DEN/nutrition/components/food-sequence.ftl +++ b/Resources/Locale/en-US/_DEN/nutrition/components/food-sequence.ftl @@ -1,5 +1,11 @@ +# general + +food-sequence-content-pomegranate = pomegranate + # burgers +food-sequence-burger-content-pomegranate = pom + # cotton burgers food-sequence-cotton-burger-content-plushie-alien-germ = germ food-sequence-cotton-burger-content-plushie-azalea = aza diff --git a/Resources/Locale/en-US/_DEN/reagents/lewd.ftl b/Resources/Locale/en-US/_DEN/reagents/lewd.ftl new file mode 100644 index 0000000000..6fe19ee321 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/reagents/lewd.ftl @@ -0,0 +1,9 @@ +reagent-effect-aphrodisiac-mild1 = Your entire body feels warm. +reagent-effect-aphrodisiac-mild2 = Your breathing feels heavier. +reagent-effect-aphrodisiac-mild3 = Your thoughts feel more vivid. +reagent-effect-aphrodisiac-mild4 = The flush in your face is hard to ignore. +reagent-effect-aphrodisiac-mild5 = You feel more sensitive to the touch. +reagent-effect-aphrodisiac-mild6 = Every sensation feels more intense. +reagent-effect-aphrodisiac-mildoverdose1 = You feel nauseous. +reagent-effect-aphrodisiac-mildoverdose2 = You feel lightheaded. +reagent-effect-aphrodisiac-mildexpired1 = You feel your inhibitions normalize. diff --git a/Resources/Locale/en-US/_DEN/reagents/meta/consumable/drink/juice.ftl b/Resources/Locale/en-US/_DEN/reagents/meta/consumable/drink/juice.ftl new file mode 100644 index 0000000000..60959a4baf --- /dev/null +++ b/Resources/Locale/en-US/_DEN/reagents/meta/consumable/drink/juice.ftl @@ -0,0 +1,2 @@ +reagent-name-juice-pomegranate = pomegranate juice +reagent-desc-juice-pomegranate = The sweet and tart juice of pomegranates. Bold and intense. diff --git a/Resources/Locale/en-US/_DEN/reagents/meta/lewd.ftl b/Resources/Locale/en-US/_DEN/reagents/meta/lewd.ftl new file mode 100644 index 0000000000..449eb407c8 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/reagents/meta/lewd.ftl @@ -0,0 +1,2 @@ +reagent-name-pomelustine = pomelustine +reagent-desc-pomelustine = A mild aphrodisiac synthesized from pomegranates. Often ingested to provoke desire and arousal. diff --git a/Resources/Locale/en-US/_DEN/seeds/seeds.ftl b/Resources/Locale/en-US/_DEN/seeds/seeds.ftl new file mode 100644 index 0000000000..ebe331ff68 --- /dev/null +++ b/Resources/Locale/en-US/_DEN/seeds/seeds.ftl @@ -0,0 +1,2 @@ +seeds-pomegranate-name = pomegranate +seeds-pomegranate-display-name = pomegranate tree diff --git a/Resources/Prototypes/Catalog/Fills/Crates/botany.yml b/Resources/Prototypes/Catalog/Fills/Crates/botany.yml index 99702bc018..bd30efaa25 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/botany.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/botany.yml @@ -71,7 +71,7 @@ parent: CrateHydroponics id: CrateHydroponicsSeeds name: seeds crate - description: Big things have small beginnings. Contains twenty-four different seeds. + description: Big things have small beginnings. Contains twenty-five different seeds. # DEN: 24 -> 25 components: - type: EntityTableContainerFill containers: @@ -101,6 +101,7 @@ - id: PeaSeeds - id: CherrySeeds - id: CottonSeeds + - id: PomegranateSeeds # DEN - type: entity parent: CrateHydroponics diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml index 27fbf7ab5c..bcfc8fad07 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/seeds.yml @@ -27,6 +27,7 @@ OnionRedSeeds: 5 OrangeSeeds: 5 PeaSeeds: 5 + PomegranateSeeds: 5 # DEN PoppySeeds: 3 PotatoSeeds: 5 PumpkinSeeds: 5 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml index ac845e55d4..93e901df0a 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml @@ -123,6 +123,10 @@ - id: DrinkShakeWhite - id: DrinkTheMartinez - id: DrinkMoonshineGlass + # Start DEN: Additions + # Note: Do NOT add NSFW-oriented glasses here, like aphrodisiacs. + - id: DrinkPomegranateJuiceGlass + # End DEN - !type:GroupSelector #rare weight: 0.05 children: diff --git a/Resources/Prototypes/Guidebook/chemicals.yml b/Resources/Prototypes/Guidebook/chemicals.yml index 730d7b3045..4c96c26203 100644 --- a/Resources/Prototypes/Guidebook/chemicals.yml +++ b/Resources/Prototypes/Guidebook/chemicals.yml @@ -11,6 +11,7 @@ - Foods - Botanical - Biological + - Lewd # DEN - Special - Others filterEnabled: True diff --git a/Resources/Prototypes/Reagents/elements.yml b/Resources/Prototypes/Reagents/elements.yml index 24e220a4a1..6601b7e191 100644 --- a/Resources/Prototypes/Reagents/elements.yml +++ b/Resources/Prototypes/Reagents/elements.yml @@ -8,6 +8,14 @@ color: "#848789" boilingPoint: 2327.0 meltingPoint: 660.0 + metabolisms: # DEN: Aluminium removes aphrodisiacs + Metabolites: + effects: + # Five units will remove 50u of pomelustine. + - !type:AdjustReagent + reagent: Pomelustine + amount: -5 + conditions: - type: reagent id: Carbon diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_lewd.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_lewd.yml new file mode 100644 index 0000000000..ba2a0f66e1 --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_lewd.yml @@ -0,0 +1,16 @@ +# Aphrodisiacs + +- type: entity + parent: DrinkGlass + id: DrinkPomelustineGlass + suffix: pomelustine + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: Pomelustine + Quantity: 30 + +# Others. diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml new file mode 100644 index 0000000000..d606b215c4 --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml @@ -0,0 +1,16 @@ +# Juice + +- type: entity + parent: DrinkGlass + id: DrinkPomegranateJuiceGlass + suffix: pomegranate juice + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: JuicePomegranate + Quantity: 30 + +# Cocktails diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/produce.yml new file mode 100644 index 0000000000..603f2098cb --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Objects/Consumable/Food/produce.yml @@ -0,0 +1,36 @@ +- type: entity + parent: FoodProduceBase + id: FoodPomegranate + name: pomegranate + description: A sticky, sweet symbol of fertility and abundance. + components: + - type: FlavorProfile + flavors: + - pomegranate + - type: SolutionContainerManager + solutions: + food: + maxVol: 14 + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Vitamin + Quantity: 4 + - type: Sprite + sprite: _DEN/Objects/Specific/Hydroponics/pomegranate.rsi + - type: Item + heldPrefix: produce + - type: Produce + seedId: pomegranate + - type: Extractable + juiceSolution: + reagents: + - ReagentId: JuicePomegranate + Quantity: 10 + - type: Tag + tags: + - Fruit + - type: FoodSequenceElement + entries: + Burger: PomegranateBurger + Taco: Pomegranate diff --git a/Resources/Prototypes/_DEN/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/_DEN/Entities/Objects/Specific/Hydroponics/seeds.yml new file mode 100644 index 0000000000..037305eeee --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -0,0 +1,10 @@ +- type: entity + parent: SeedBase + id: PomegranateSeeds + name: packet of pomegranate seeds + description: A sticky, sweet symbol of fertility and abundance. + components: + - type: Seed + seedId: pomegranate + - type: Sprite + sprite: _DEN/Objects/Specific/Hydroponics/pomegranate.rsi diff --git a/Resources/Prototypes/_DEN/Entities/StatusEffects/lewd.yml b/Resources/Prototypes/_DEN/Entities/StatusEffects/lewd.yml new file mode 100644 index 0000000000..63f0892b65 --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/StatusEffects/lewd.yml @@ -0,0 +1,32 @@ +- type: entity + parent: MobStatusEffectBase + id: StatusEffectMildAphrodisiac + name: mild aphrodisiac effect + components: + - type: IntervalPopupMessageStatusEffect + interval: [10, 90] + visualType: Medium + recipients: Local + messages: + - reagent-effect-aphrodisiac-mild1 + - reagent-effect-aphrodisiac-mild2 + - reagent-effect-aphrodisiac-mild3 + - reagent-effect-aphrodisiac-mild4 + - reagent-effect-aphrodisiac-mild5 + - reagent-effect-aphrodisiac-mild6 + - type: ExpiryPopupMessageStatusEffect + messages: + - reagent-effect-aphrodisiac-mildexpired1 + +- type: entity + parent: MobStatusEffectBase + id: StatusEffectMildAphrodisiacOverdose + name: mild aphrodisiac overdose + components: + - type: IntervalPopupMessageStatusEffect + interval: [5, 30] + visualType: MediumCaution + recipients: Local + messages: + - reagent-effect-aphrodisiac-mildoverdose1 + - reagent-effect-aphrodisiac-mildoverdose2 diff --git a/Resources/Prototypes/_DEN/Flavors/flavors.yml b/Resources/Prototypes/_DEN/Flavors/flavors.yml new file mode 100644 index 0000000000..4678133e76 --- /dev/null +++ b/Resources/Prototypes/_DEN/Flavors/flavors.yml @@ -0,0 +1,9 @@ +- type: flavor + id: tart + flavorType: Base + description: flavor-base-tart + +- type: flavor + id: pomegranate + flavorType: Complex + description: flavor-complex-pomegranate diff --git a/Resources/Prototypes/_DEN/Guidebook/chemicals.yml b/Resources/Prototypes/_DEN/Guidebook/chemicals.yml new file mode 100644 index 0000000000..4326eac0be --- /dev/null +++ b/Resources/Prototypes/_DEN/Guidebook/chemicals.yml @@ -0,0 +1,5 @@ +- type: guideEntry + id: Lewd + name: guide-entry-lewd + text: "/ServerInfo/_DEN/Guidebook/ChemicalTabs/Lewd.xml" + filterEnabled: True diff --git a/Resources/Prototypes/_DEN/Hydroponics/seeds.yml b/Resources/Prototypes/_DEN/Hydroponics/seeds.yml new file mode 100644 index 0000000000..7e0d3451bf --- /dev/null +++ b/Resources/Prototypes/_DEN/Hydroponics/seeds.yml @@ -0,0 +1,25 @@ +- type: seed + id: pomegranate + name: seeds-pomegranate-name + noun: seeds-noun-seeds + displayName: seeds-pomegranate-display-name + plantRsi: _DEN/Objects/Specific/Hydroponics/pomegranate.rsi + packetPrototype: PomegranateSeeds + productPrototypes: + - FoodPomegranate + harvestRepeat: Repeat + lifespan: 55 + maturation: 6 + production: 6 + yield: 3 + potency: 10 + idealLight: 6 + chemicals: + Nutriment: + Min: 1 + Max: 10 + PotencyDivisor: 10 + Vitamin: + Min: 1 + Max: 4 + PotencyDivisor: 25 diff --git a/Resources/Prototypes/_DEN/Reactions/lewd.yml b/Resources/Prototypes/_DEN/Reactions/lewd.yml new file mode 100644 index 0000000000..e7b20675c7 --- /dev/null +++ b/Resources/Prototypes/_DEN/Reactions/lewd.yml @@ -0,0 +1,15 @@ +# This reaction is designed to be niche but still accessible to passengers, bartenders, et cetera. +# It should never overlap with the recipe of a feasibly makeable drink - i.e. you should not be +# able to make this by accident. +# If this recipe is ever changed, keep these things in mind. +- type: reaction + id: Pomelustine + requiredMixerCategories: + - Stir + reactants: + JuicePomegranate: + amount: 5 + Ash: + amount: 1 + products: + Pomelustine: 5 diff --git a/Resources/Prototypes/_DEN/Reagents/Consumable/Drink/juice.yml b/Resources/Prototypes/_DEN/Reagents/Consumable/Drink/juice.yml new file mode 100644 index 0000000000..8f07c3cd4a --- /dev/null +++ b/Resources/Prototypes/_DEN/Reagents/Consumable/Drink/juice.yml @@ -0,0 +1,8 @@ +- type: reagent + parent: BaseJuice + id: JuicePomegranate + name: reagent-name-juice-pomegranate + desc: reagent-desc-juice-pomegranate + physicalDesc: reagent-physical-desc-crisp + flavor: tart + color: "#850134" diff --git a/Resources/Prototypes/_DEN/Reagents/lewd.yml b/Resources/Prototypes/_DEN/Reagents/lewd.yml new file mode 100644 index 0000000000..a96f52f5a5 --- /dev/null +++ b/Resources/Prototypes/_DEN/Reagents/lewd.yml @@ -0,0 +1,80 @@ +- type: reagent + abstract: true + id: BaseLewdReagent + group: Lewd + recognizable: true # Lewd reagents should always be recognizable to prevent accidental consumption + +- type: reagent + abstract: true + parent: BaseLewdReagent + id: BaseAphrodisiac + group: Aphrodisiacs + +- type: reagent + parent: BaseAphrodisiac + id: Pomelustine + name: reagent-name-pomelustine + desc: reagent-desc-pomelustine + physicalDesc: reagent-physical-desc-sticky + flavor: fruity + color: "#4b012c" + metabolisms: + Metabolites: + metabolismRate: 0.01 + effects: + # Basic effect: "Aphrodisiac" flavor text. + # At 0.01u / second, each 10u will last about ~16.6 minutes. + # 50u will last ~83.3 minutes in the bloodstream. + - !type:ModifyStatusEffect + effectProto: StatusEffectMildAphrodisiac + type: Update + time: 10 # This is so it doesn't expire while you're metabolizing other things + # Overdose at 50u: Drunkenness / vomiting. + # Above this level, pomelustine is also flushed out of your system 5x as fast. + # Each unit above 50u lasts 20 seconds, instead of 100 seconds. + # 60u will last ~86.7 minutes total. + - !type:ModifyStatusEffect + effectProto: StatusEffectMildAphrodisiacOverdose + type: Update + time: 10 # This is so it doesn't expire while you're metabolizing other things + conditions: + - !type:ReagentCondition + reagent: Pomelustine + min: 50 + - !type:Drunk + boozePower: 2 + conditions: + - !type:ReagentCondition + reagent: Pomelustine + min: 50 + - !type:Vomit + probability: 0.02 + conditions: + - !type:ReagentCondition + reagent: Pomelustine + min: 50 + - !type:AdjustReagent + reagent: Pomelustine + amount: -0.04 + conditions: + - !type:ReagentCondition + reagent: Pomelustine + min: 50 + # 60u and above: Poison damage. + # Pomelustine is flushed out 20x as fast above this threshold - 5 seconds per unit above 60u. + # 70u will last 87.5 minutes total. Each 10u above 60u lasts 50 seconds. + - !type:HealthChange + conditions: + - !type:ReagentCondition + reagent: Pomelustine + min: 60 + damage: + types: + Poison: 0.5 + - !type:AdjustReagent + reagent: Pomelustine + amount: -0.15 + conditions: + - !type:ReagentCondition + reagent: Pomelustine + min: 60 diff --git a/Resources/Prototypes/_DEN/Recipes/Cooking/FoodSequence/food_sequence_element.yml b/Resources/Prototypes/_DEN/Recipes/Cooking/FoodSequence/food_sequence_element.yml new file mode 100644 index 0000000000..f7fad3ca77 --- /dev/null +++ b/Resources/Prototypes/_DEN/Recipes/Cooking/FoodSequence/food_sequence_element.yml @@ -0,0 +1,23 @@ +# General + +- type: foodSequenceElement + id: Pomegranate + name: food-sequence-content-pomegranate + sprites: + - sprite: _DEN/Objects/Specific/Hydroponics/pomegranate.rsi + state: produce + tags: + - Fruit + +# Burgers + +## Produce + +- type: foodSequenceElement + id: PomegranateBurger + name: food-sequence-burger-content-pomegranate + sprites: + - sprite: _DEN/Objects/Specific/Hydroponics/pomegranate.rsi + state: produce + tags: + - Fruit diff --git a/Resources/ServerInfo/_DEN/Guidebook/ChemicalTabs/Lewd.xml b/Resources/ServerInfo/_DEN/Guidebook/ChemicalTabs/Lewd.xml new file mode 100644 index 0000000000..e7bb54b5aa --- /dev/null +++ b/Resources/ServerInfo/_DEN/Guidebook/ChemicalTabs/Lewd.xml @@ -0,0 +1,16 @@ + + +# Lewd + +These reagents all have NSFW-oriented theming or mechanics. + +As per The Den's server rules on consent, [color=orange]do not expose other players to these reagents' effects without their OOC consent.[/color] Do not trick other players into consuming these reagents or coerce other players into NSFW situations. [color=red]This will be treated as a consent breach, and you will be permanently banned.[/color] + +## Aphrodisiacs + + + + + + + diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/dead.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/dead.png new file mode 100644 index 0000000000..5d495e50be Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/dead.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/harvest.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/harvest.png new file mode 100644 index 0000000000..e08e83c44c Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/harvest.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/meta.json b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/meta.json new file mode 100644 index 0000000000..2cd8362266 --- /dev/null +++ b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/meta.json @@ -0,0 +1,49 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/1dbcf389b0ec6b2c51b002df5fef8dd1519f8068, Growth stages and dead sprites created by Chaoticaa (GitHub). Inhand, seeds, and produce by portfiend (GitHub). Harvest stage edited by portfiend (GitHub).", + "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" + }, + { + "name": "produce-inhand-left", + "directions": 4 + }, + { + "name": "produce-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce-inhand-left.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce-inhand-left.png new file mode 100644 index 0000000000..5579aec933 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce-inhand-left.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce-inhand-right.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce-inhand-right.png new file mode 100644 index 0000000000..e6658f7228 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce-inhand-right.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce.png new file mode 100644 index 0000000000..0b205cf951 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/produce.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/seed.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/seed.png new file mode 100644 index 0000000000..c713e30877 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/seed.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-1.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-1.png new file mode 100644 index 0000000000..e816403679 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-1.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-2.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-2.png new file mode 100644 index 0000000000..902948e752 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-2.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-3.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-3.png new file mode 100644 index 0000000000..4ddb337fb3 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-3.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-4.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-4.png new file mode 100644 index 0000000000..abf9eedebd Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-4.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-5.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-5.png new file mode 100644 index 0000000000..43907ca4e2 Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-5.png differ diff --git a/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-6.png b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-6.png new file mode 100644 index 0000000000..ff49150cde Binary files /dev/null and b/Resources/Textures/_DEN/Objects/Specific/Hydroponics/pomegranate.rsi/stage-6.png differ