diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index dbc3af3b809..8c034d00881 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -123,6 +123,7 @@ public override void Init() _prototypeManager.RegisterIgnore("alertLevels"); _prototypeManager.RegisterIgnore("nukeopsRole"); _prototypeManager.RegisterIgnore("ghostRoleRaffleDecider"); + _prototypeManager.RegisterIgnore("digestion"); // Frontier: server-only _prototypeManager.RegisterIgnore("pointOfInterest"); // Frontier: worldgen-related, server-only _componentFactory.GenerateNetIds(); diff --git a/Content.Server/Body/Components/StomachComponent.cs b/Content.Server/Body/Components/StomachComponent.cs index d541ca4d7c4..6adc930fb2d 100644 --- a/Content.Server/Body/Components/StomachComponent.cs +++ b/Content.Server/Body/Components/StomachComponent.cs @@ -4,6 +4,8 @@ using Content.Shared.Chemistry.Reagent; using Content.Shared.Whitelist; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Content.Server._NF.Nutrition.Prototypes; // Frontier +using Robust.Shared.Prototypes; // Frontier namespace Content.Server.Body.Components { @@ -69,5 +71,11 @@ public ReagentDelta(ReagentQuantity reagentQuantity) public void Increment(TimeSpan delta) => Lifetime += delta; } + + /// + /// Frontier: digestion prototype (used for species-specific reagent replacement/effects) + /// + [DataField] + public ProtoId? Digestion = "Default"; } } diff --git a/Content.Server/Nutrition/Components/FoodComponent.cs b/Content.Server/Nutrition/Components/FoodComponent.cs index 638e898060c..33f5c9cdc33 100644 --- a/Content.Server/Nutrition/Components/FoodComponent.cs +++ b/Content.Server/Nutrition/Components/FoodComponent.cs @@ -7,7 +7,7 @@ namespace Content.Server.Nutrition.Components; -[RegisterComponent, Access(typeof(FoodSystem), typeof(FoodSequenceSystem))] +[RegisterComponent, Access(typeof(FoodSystem), typeof(FoodSequenceSystem))] // Frontier public sealed partial class FoodComponent : Component { [DataField] @@ -75,6 +75,12 @@ public sealed partial class FoodComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public bool RequireDead = true; + /// + /// The quality of this food, for species-specific digestion. + /// + [DataField, ViewVariables] + public FoodQuality Quality = FoodQuality.Bland; + [DataField] public LocId VerbEat = "food-system-verb-eat"; // Frontier @@ -96,3 +102,24 @@ public sealed partial class FoodComponent : Component [DataField] public LocId CannotEatAnyMoreOtherMessage = "food-system-you-cannot-eat-any-more-other"; // Frontier } + +/// +/// An enumeration of the quality of given pieces of food. +/// +public enum FoodQuality : byte +{ + // Run of the mill foods, spammable things + Bland, + // Goblin-friendly recipes + Nasty, + Awful, + GoblinGourmet, + // Regular recipes + Normal, + High, + Gourmet, + // Completely inedible + Junk, + SuperJunk, +} +// End of modified code diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index 214346463a0..77f5ad46d14 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -40,7 +40,7 @@ namespace Content.Server.Nutrition.EntitySystems; /// /// Handles feeding attempts both on yourself and on the target. /// -public sealed class FoodSystem : EntitySystem +public sealed partial class FoodSystem : EntitySystem // Frontier: add partial { [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly FlavorProfileSystem _flavorProfile = default!; @@ -245,12 +245,21 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent arg var split = _solutionContainer.SplitSolution(soln.Value, transferAmount); + // Frontier: food digestion + if (!CheckDigestablePrereqs(entity, entity.Comp, stomachs)) + return; + // Get the stomach with the highest available solution volume var highestAvailable = FixedPoint2.Zero; Entity? stomachToUse = null; foreach (var ent in stomachs) { var owner = ent.Owner; + + // Frontier: check specific-stomach digestion + if (!IsFoodDigestibleByStomach(args.Used.Value, entity.Comp, ent.Comp1)) // Frontier: make sure food is processed by a stomach that can digest it + continue; + if (!_stomach.CanTransferSolution(owner, split, ent.Comp1)) continue; @@ -272,6 +281,8 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent arg return; } + var digestion = DigestFood(entity, stomachToUse.Value, split, args.Target.Value, args.User); // Frontier: species-specific digestion + _reaction.DoEntityReaction(args.Target.Value, solution, ReactionMethod.Ingestion); _stomach.TryTransferSolution(stomachToUse!.Value.Owner, split, stomachToUse); @@ -279,9 +290,12 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent arg if (forceFeed) { - var targetName = Identity.Entity(args.Target.Value, EntityManager); + var targetName = Identity.Entity(args.Target!.Value, EntityManager); var userName = Identity.Entity(args.User, EntityManager); - _popup.PopupEntity(Loc.GetString(entity.Comp.ForceFeedSuccessMessage, ("user", userName), ("flavors", flavors)), args.Target.Value, args.Target.Value); // Frontier: entity.Owner->args.Target.Value + + // TODO: revise this with napkin work + if (digestion.ShowFlavors) // Frontier + _popup.PopupEntity(Loc.GetString(entity.Comp.ForceFeedSuccessMessage, ("user", userName), ("flavors", flavors)), args.Target.Value, args.Target.Value); // Frontier: entity.Owner->args.Target.Value _popup.PopupEntity(Loc.GetString(entity.Comp.ForceFeedSuccessUserMessage, ("target", targetName)), args.User, args.User); @@ -290,7 +304,8 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent arg } else { - _popup.PopupEntity(Loc.GetString(entity.Comp.EatMessage, ("food", entity.Owner), ("flavors", flavors)), args.User, args.User); + if (digestion.ShowFlavors) // Frontier + _popup.PopupEntity(Loc.GetString(entity.Comp.EatMessage, ("food", entity.Owner), ("flavors", flavors)), args.User, args.User); // log successful voluntary eating _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} ate {ToPrettyString(entity.Owner):food}"); @@ -420,29 +435,49 @@ public bool IsDigestibleBy(EntityUid uid, EntityUid food, FoodComponent? foodCom /// private bool IsDigestibleBy(EntityUid food, FoodComponent component, List> stomachs) { - var digestible = true; + return GetDigestableStomach(food, component, stomachs) is not null; // Frontier: removed + } + + private bool CheckDigestablePrereqs(EntityUid food, FoodComponent component, List> stomachs) + { + return stomachs.Count >= component.RequiredStomachs; + } - // Does the mob have enough stomachs? - if (stomachs.Count < component.RequiredStomachs) + private bool IsFoodDigestibleByStomach(EntityUid food, FoodComponent component, StomachComponent stomach) + { + if (!component.RequiresSpecialDigestion) + return true; + + // Check if the food is in the whitelist + if (_whitelistSystem.IsWhitelistPass(stomach.SpecialDigestible, food)) + return true; + else return false; + } + private StomachComponent? GetDigestableStomach(EntityUid food, FoodComponent component, List> stomachs) + { + if (!CheckDigestablePrereqs(food, component, stomachs)) { + return null; + } // Run through the mobs' stomachs foreach (var ent in stomachs) { - // Find a stomach with a SpecialDigestible - if (ent.Comp1.SpecialDigestible == null) - continue; - // Check if the food is in the whitelist - if (_whitelistSystem.IsWhitelistPass(ent.Comp1.SpecialDigestible, food)) - return true; - // They can only eat whitelist food and the food isn't in the whitelist. It's not edible. - return false; - } + if (IsFoodDigestibleByStomach(food, component, ent.Comp1)) { + return ent.Comp1; + } - if (component.RequiresSpecialDigestion) - return false; + // // Find a stomach with a SpecialDigestible + // if (ent.Comp1.SpecialDigestible == null) + // continue; + // // Check if the food is in the whitelist + // if (_whitelistSystem.IsWhitelistPass(ent.Comp1.SpecialDigestible, food)) + // return true; + // // They can only eat whitelist food and the food isn't in the whitelist. It's not edible. + // return false; + } - return digestible; + return null; } private bool TryGetRequiredUtensils(EntityUid user, FoodComponent component, diff --git a/Content.Server/_NF/Nutrition/EntitySystems/FoodSystem.Digestion.cs b/Content.Server/_NF/Nutrition/EntitySystems/FoodSystem.Digestion.cs new file mode 100644 index 00000000000..d084ed3bdf3 --- /dev/null +++ b/Content.Server/_NF/Nutrition/EntitySystems/FoodSystem.Digestion.cs @@ -0,0 +1,81 @@ +// New Frontiers - This file is licensed under AGPLv3 +// Copyright (c) 2024 New Frontiers Contributors +// See AGPLv3.txt for details. +using Content.Server.Nutrition.Components; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Chemistry.Components; +using Content.Server.Body.Components; +using Robust.Shared.Prototypes; +using Content.Shared.EntityEffects; +using Robust.Shared.Random; +using Content.Shared.Chemistry; + +namespace Content.Server.Nutrition.EntitySystems; + +// Frontier: extending food system to handle species-specific digestion quirks. +public sealed partial class FoodSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public struct DigestionResult + { + public bool ShowFlavors; + } + + DigestionResult DigestFood(Entity food, Entity stomach, Solution eatenSolution, EntityUid target, EntityUid _) + { + var result = new DigestionResult + { + ShowFlavors = true + }; + + // Frontier - Food quality system + if (!_prototype.TryIndex(stomach.Comp.Digestion, out var digestion)) + { + return result; + } + + var eatenVolume = eatenSolution.Volume; + while (digestion != null) + { + // Iterate through effects + foreach (var effect in digestion.Effects) + { + // Precondition: match food quality and/or whitelist. + if (effect.Quality.Contains(food.Comp.Quality)) + continue; + + if (_whitelistSystem.IsWhitelistFail(effect.Whitelist, food.Owner) + || _whitelistSystem.IsBlacklistPass(effect.Whitelist, food.Owner)) + continue; + + // Run reagent conversions + foreach (var (beforeReagent, afterDict) in effect.Conversions) + { + var removedAmount = eatenSolution.RemoveReagent(new ReagentQuantity(beforeReagent, eatenVolume)); + foreach (var (afterReagent, afterRatio) in afterDict) + { + eatenSolution.AddReagent(new ReagentQuantity(afterReagent, removedAmount * afterRatio)); + } + } + + var args = new EntityEffectReagentArgs(target, EntityManager, stomach.Owner, eatenSolution, eatenSolution.Volume, null, ReactionMethod.Ingestion, 1.0f); + foreach (var entEffect in effect.Effects) + { + if (!EntityEffectExt.ShouldApply(entEffect, args, _random)) + continue; + entEffect.Effect(args); + } + } + + // Get next digestion to run + if (!_prototype.TryIndex(digestion.PostDigest, out digestion)) + { + digestion = null; + } + } + + return result; + } +} diff --git a/Content.Server/_NF/Nutrition/Prototypes/DigestionPrototype.cs b/Content.Server/_NF/Nutrition/Prototypes/DigestionPrototype.cs new file mode 100644 index 00000000000..f6c276e8c5b --- /dev/null +++ b/Content.Server/_NF/Nutrition/Prototypes/DigestionPrototype.cs @@ -0,0 +1,63 @@ +using Content.Server.Nutrition.Components; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.EntityEffects; +using Content.Shared.FixedPoint; +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; + +namespace Content.Server._NF.Nutrition.Prototypes; + +[Prototype("digestion")] +[DataDefinition] +public sealed partial class DigestionPrototype : IPrototype +{ + [ViewVariables] + [IdDataField] + public string ID { get; private set; } = default!; + + /// + /// The list of digestive effects that occur in this organ. + /// + [DataField] + public List Effects { get; private set; } = new(); + + /// + /// The list of digestive effects that occur in this organ. + /// + [DataField] + public ProtoId? PostDigest { get; private set; } = null; +} + +[DataDefinition] +public sealed partial class DigestionEffect +{ + /// + /// The quality of food this effect occurs on. + /// + [DataField] + public List Quality { get; private set; } = new(); + + /// + /// A whitelist on the food item this bite was taken from. + /// + [DataField] + public EntityWhitelist? Whitelist { get; private set; } = null; + + /// + /// A blacklist on the food item this bite was taken from. + /// + [DataField] + public EntityWhitelist? Blacklist { get; private set; } = null; + + /// + /// A list of reagent effects that happen on the stomach solution + /// + [DataField] + public List Effects { get; private set; } = new(); + + /// + /// A list of conversions. All values should be ratios of the input reagent, and the sum of their values should be <= 1. + /// + [DataField] + public Dictionary, Dictionary, FixedPoint2>> Conversions { get; private set; } = new(); +} diff --git a/Resources/Locale/en-US/_NF/nutrition/components/food-component.ftl b/Resources/Locale/en-US/_NF/nutrition/components/food-component.ftl index 585b1e81431..b2251fe26fc 100644 --- a/Resources/Locale/en-US/_NF/nutrition/components/food-component.ftl +++ b/Resources/Locale/en-US/_NF/nutrition/components/food-component.ftl @@ -12,3 +12,6 @@ food-system-verb-wipe = Wipe Face food-system-wipe = {CAPITALIZE(THE($user))} is trying to wipe your face. food-system-wipe-success = {CAPITALIZE(THE($user))} wiped your face. food-system-wipe-success-user = You wiped {THE($target)}'s face. + +food-system-nasty = That food was gross. +food-system-toxin = That food was bad. \ No newline at end of file diff --git a/Resources/Locale/en-US/_NF/reagents/foods.ftl b/Resources/Locale/en-US/_NF/reagents/foods.ftl new file mode 100644 index 00000000000..8f4275ac0f2 --- /dev/null +++ b/Resources/Locale/en-US/_NF/reagents/foods.ftl @@ -0,0 +1,2 @@ +reagent-name-trashjuice = trash juice +reagent-desc-trashjuice = Do you really want to know what it is? diff --git a/Resources/Locale/en-US/_NF/reagents/meta/consumable/food/food.ftl b/Resources/Locale/en-US/_NF/reagents/meta/consumable/food/food.ftl index 044c74eea27..2832bac1c17 100644 --- a/Resources/Locale/en-US/_NF/reagents/meta/consumable/food/food.ftl +++ b/Resources/Locale/en-US/_NF/reagents/meta/consumable/food/food.ftl @@ -1,5 +1,8 @@ reagent-name-flavorol = flavorol reagent-desc-flavorol = All the vitamins, minerals, and carbohydrates the body needs in pure form. +reagent-name-bloatamine = bloatamine +reagent-desc-bloatamine = A metabolized version of the preservatives put in junk food. Carcinogenic in large quantities. + reagent-name-raisins = raisins reagent-desc-raisins = Are they the best or worst part of the cookie? They're a bunch of desiccated grapes is what they are. diff --git a/Resources/Locale/en-US/_NF/reagents/physical-desc.ftl b/Resources/Locale/en-US/_NF/reagents/physical-desc.ftl new file mode 100644 index 00000000000..24bb74a5ea4 --- /dev/null +++ b/Resources/Locale/en-US/_NF/reagents/physical-desc.ftl @@ -0,0 +1 @@ +reagent-physical-desc-trashjuice = ... Wait.. Did it just move? diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index e3b3b5b0f51..5cd71013363 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -4,8 +4,8 @@ abstract: true components: - type: Organ - - type: Food -# quality: Nasty # Frontier + - type: Food # Frontier + quality: Nasty # Frontier - type: Sprite sprite: Mobs/Species/Human/organs.rsi - type: StaticPrice diff --git a/Resources/Prototypes/Body/Organs/Animal/ruminant.yml b/Resources/Prototypes/Body/Organs/Animal/ruminant.yml index 3b00e1a2237..cd0066dbf76 100644 --- a/Resources/Prototypes/Body/Organs/Animal/ruminant.yml +++ b/Resources/Prototypes/Body/Organs/Animal/ruminant.yml @@ -8,3 +8,5 @@ solutions: stomach: maxVol: 80 + - type: Stomach # Frontier + digestion: Ruminant # Frontier diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml index 5fd071e061e..aff9e520f93 100644 --- a/Resources/Prototypes/Body/Organs/human.yml +++ b/Resources/Prototypes/Body/Organs/human.yml @@ -6,8 +6,8 @@ - type: Sprite sprite: Mobs/Species/Human/organs.rsi - type: Organ - - type: Food -# quality: Nasty # Frontier + - type: Food # Frontier + quality: Nasty # Frontier - type: Extractable grindableSolutionName: organ - type: SolutionContainerManager diff --git a/Resources/Prototypes/Body/Organs/moth.yml b/Resources/Prototypes/Body/Organs/moth.yml index 263a964a1ec..65dd2361641 100644 --- a/Resources/Prototypes/Body/Organs/moth.yml +++ b/Resources/Prototypes/Body/Organs/moth.yml @@ -4,12 +4,12 @@ categories: [ HideSpawnMenu ] components: - type: Stomach - # specialDigestible: # Frontier - # tags: # Frontier - # - MothFood # Frontier - # - Fruit # Frontier - # - Pill # Frontier - # - Crayon # Frontier + specialDigestible: + tags: + - MothFood + component: + - Food # Frontier + digestion: Moth # Frontier - type: SolutionContainerManager solutions: stomach: diff --git a/Resources/Prototypes/Body/Organs/reptilian.yml b/Resources/Prototypes/Body/Organs/reptilian.yml index 6cea48d6e39..c0061301557 100644 --- a/Resources/Prototypes/Body/Organs/reptilian.yml +++ b/Resources/Prototypes/Body/Organs/reptilian.yml @@ -4,14 +4,7 @@ categories: [ HideSpawnMenu ] components: - type: Stomach - # specialDigestible: # Frontier - # tags: # Frontier - # - Fruit # Frontier - # - ReptilianFood # Frontier - # - Meat # Frontier - # - Pill # Frontier - # - Crayon # Frontier - # - Paper # Frontier + digestion: Carnivore # Frontier - type: SolutionContainerManager solutions: stomach: @@ -20,4 +13,4 @@ maxVol: 5 reagents: - ReagentId: UncookedAnimalProteins - Quantity: 5 \ No newline at end of file + Quantity: 5 diff --git a/Resources/Prototypes/Body/Parts/base.yml b/Resources/Prototypes/Body/Parts/base.yml index 836d0f140af..c2861364d90 100644 --- a/Resources/Prototypes/Body/Parts/base.yml +++ b/Resources/Prototypes/Body/Parts/base.yml @@ -6,6 +6,8 @@ name: "body part" abstract: true components: + - type: Food # Frontier + quality: Nasty # Frontier - type: Damageable damageContainer: Biological - type: BodyPart diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml index 16dc3e628f8..2b7a4c9de8f 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/donut.yml @@ -1,9 +1,9 @@ - type: vendingMachineInventory id: DonutInventory startingInventory: - FoodDonutChocolate: 5 - FoodDonutApple: 3 - FoodDonutPink: 3 - FoodDonutBungo: 3 - emaggedInventory: - FoodDonutPoison: 1 + FoodDonutChocolateVendor: 5 + FoodDonutAppleVendor: 3 + FoodDonutPinkVendor: 3 + FoodDonutBungoVendor: 3 + # emaggedInventory: # Frontier: no fun allowed + # FoodDonutPoison: 1 # Frontier: no fun allowed diff --git a/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml b/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml index 4d243971457..741191c7b12 100644 --- a/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Body/Organs/vulpkanin.yml @@ -4,6 +4,7 @@ categories: [ HideSpawnMenu ] components: - type: Stomach + digestion: Carnivore # Frontier - type: SolutionContainerManager solutions: stomach: @@ -12,4 +13,4 @@ maxVol: 5 reagents: - ReagentId: UncookedAnimalProteins - Quantity: 5 \ No newline at end of file + Quantity: 5 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bagel.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bagel.yml index 8f23b6c7df9..0da0f850579 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bagel.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bagel.yml @@ -20,6 +20,8 @@ reagents: - ReagentId: Nutriment Quantity: 5 + - type: Food # Frontier + quality: Bland # Frontier - type: entity id: FoodBagel diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 35b0113fdfc..cda7dbf45b3 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -10,6 +10,7 @@ flavors: - bread - type: Food + quality: Normal # Frontier, New Food Quality System - type: Sprite sprite: Objects/Consumable/Food/Baked/bread.rsi - type: Tag @@ -18,12 +19,10 @@ - type: SolutionContainerManager solutions: food: - maxVol: 31 + maxVol: 26 reagents: - ReagentId: Nutriment Quantity: 20 - - ReagentId: Flavorol - Quantity: 5 - type: entity parent: FoodBreadBase @@ -42,12 +41,11 @@ - type: SolutionContainerManager solutions: food: - maxVol: 9 + maxVol: 8 reagents: - ReagentId: Nutriment Quantity: 4 - - ReagentId: Flavorol - Quantity: 1 + # Custom Bread Example - type: entity @@ -145,6 +143,7 @@ tags: - ClothMade - Bread + - MothFood # Frontier - type: SolutionContainerManager solutions: food: @@ -175,6 +174,7 @@ - ClothMade - Bread - Slice + - MothFood # Frontier - type: SolutionContainerManager solutions: food: @@ -204,12 +204,10 @@ - type: SolutionContainerManager solutions: food: - maxVol: 25 + maxVol: 20 reagents: - ReagentId: Nutriment Quantity: 15 - - ReagentId: Flavorol - Quantity: 5 # Tastes like bread, banana, nut. - type: entity @@ -229,12 +227,10 @@ - type: SolutionContainerManager solutions: food: - maxVol: 6 + maxVol: 5 reagents: - ReagentId: Nutriment Quantity: 3 - - ReagentId: Flavorol - Quantity: 1 - type: entity name: cream cheese bread @@ -256,14 +252,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 40 + maxVol: 35 reagents: - ReagentId: Nutriment Quantity: 20 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 5 # Tastes like bread, cheese. - type: entity @@ -290,8 +284,6 @@ Quantity: 4 - ReagentId: Vitamin Quantity: 1.2 - - ReagentId: Flavorol - Quantity: 1.5 - type: entity name: meat bread @@ -312,14 +304,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 50 + maxVol: 45 reagents: - ReagentId: Nutriment Quantity: 30 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 10 - type: Tag tags: - Meat @@ -349,8 +339,6 @@ Quantity: 6 - ReagentId: Vitamin Quantity: 1.2 - - ReagentId: Flavorol - Quantity: 2 - type: Tag tags: - Meat @@ -376,7 +364,7 @@ - type: SolutionContainerManager solutions: food: - maxVol: 45 + maxVol: 40 reagents: - ReagentId: Nutriment Quantity: 15 @@ -386,8 +374,6 @@ Quantity: 5 - ReagentId: MuteToxin Quantity: 5 - - ReagentId: Flavorol - Quantity: 5 # Tastes like bread, cheese. - type: entity @@ -417,8 +403,6 @@ Quantity: 1 - ReagentId: MuteToxin Quantity: 1 - - ReagentId: Flavorol - Quantity: 1 - type: entity name: bread @@ -427,6 +411,7 @@ description: Some plain old earthen bread. components: - type: Food + quality: Bland # Frontier, New Food Quality System - type: Sprite layers: - state: plain @@ -440,6 +425,7 @@ description: A slice of home. components: - type: Food + quality: Bland # Frontier, New Food Quality System - type: Sprite layers: - state: plain-slice @@ -471,8 +457,6 @@ Quantity: 5 - ReagentId: Protein Quantity: 5 - - ReagentId: Flavorol - Quantity: 5 - type: Tag tags: - Meat @@ -503,8 +487,6 @@ Quantity: 1 - ReagentId: Protein Quantity: 1 - - ReagentId: Flavorol - Quantity: 2 - type: Tag tags: - Meat @@ -521,7 +503,8 @@ flavors: - cobwebs - bread - - type: Food + - type: Food # Frontier + quality: Toxin # Frontier, New Food Quality System - type: Sprite layers: - state: spidermeat @@ -530,21 +513,16 @@ - type: SolutionContainerManager solutions: food: - maxVol: 60 + maxVol: 45 reagents: - ReagentId: Nutriment Quantity: 30 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Toxin - Quantity: 5 - - ReagentId: Flavorol - Quantity: 10 - type: Tag tags: - Meat - Bread -# Tastes like bread, cobwebs. - type: entity name: spider meat bread slice @@ -556,23 +534,20 @@ flavors: - cobwebs - bread - - type: Food + - type: Food # Frontier + quality: Nasty # Frontier, New Food Quality System - type: Sprite layers: - state: spidermeat-slice - type: SolutionContainerManager solutions: food: - maxVol: 15 + maxVol: 12 reagents: - ReagentId: Nutriment Quantity: 6 - ReagentId: Vitamin Quantity: 1.2 - - ReagentId: Toxin - Quantity: .5 - - ReagentId: Flavorol - Quantity: 2 - type: Tag tags: - Meat @@ -598,14 +573,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 62 + maxVol: 48 reagents: - ReagentId: Nutriment Quantity: 30 - ReagentId: Protein Quantity: 12 - - ReagentId: Flavorol - Quantity: 15 # Tastes like bread, tofu. - type: entity @@ -631,8 +604,6 @@ Quantity: 6 - ReagentId: Vitamin Quantity: 2.4 - - ReagentId: Flavorol - Quantity: 3 - type: entity name: xeno meat bread @@ -644,7 +615,6 @@ flavors: - acid - bread - - type: Food - type: Sprite layers: - state: xenomeat @@ -659,8 +629,6 @@ Quantity: 30 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 10 - type: Tag tags: - Meat @@ -690,8 +658,6 @@ Quantity: 6 - ReagentId: Vitamin Quantity: 1.2 - - ReagentId: Flavorol - Quantity: 2.4 - type: Tag tags: - Meat @@ -714,7 +680,7 @@ - type: SolutionContainerManager solutions: food: - maxVol: 20 + maxVol: 15 reagents: - ReagentId: Nutriment Quantity: 6 @@ -724,8 +690,6 @@ Quantity: 1 - ReagentId: Blackpepper Quantity: 1 - - ReagentId: Flavorol # Frontier - Quantity: 5 # Frontier - type: Clothing slots: [ BELT ] equippedPrefix: baguette @@ -786,8 +750,6 @@ Quantity: 5 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Flavorol - Quantity: 1 # Tastes like bread, butter. - type: entity @@ -805,14 +767,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 12 + maxVol: 10 reagents: - ReagentId: Nutriment Quantity: 4 - ReagentId: Vitamin Quantity: 2 - - ReagentId: Flavorol - Quantity: 1 # Tastes like bread, butter. - type: entity @@ -821,6 +781,8 @@ id: FoodBreadGarlicSlice description: Alas, it is limited. components: + - type: Food # Frontier + quality: High # Frontier, New Food Quality System - type: FlavorProfile flavors: - bread @@ -831,14 +793,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 20 + maxVol: 15 reagents: - ReagentId: Nutriment Quantity: 6 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 5 # Tastes like garlic, Italy. - type: entity @@ -857,14 +817,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 12 + maxVol: 10 reagents: - ReagentId: Nutriment Quantity: 4 - ReagentId: Vitamin Quantity: 4 - - ReagentId: Flavorol - Quantity: 2 # Tastes like garlic, Italy. - type: entity @@ -888,6 +846,8 @@ Quantity: 4 - ReagentId: Mold Quantity: 7 + - type: Food # Frontier + quality: Toxin # Frontier, New Food Quality System # Tastes like decaying fungus. - type: entity @@ -976,3 +936,5 @@ damage: groups: Brute: 1 + - type: Food # Frontier + quality: High # Frontier diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml index ab05503a2e6..151a8a75d7c 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml @@ -10,19 +10,18 @@ flavors: - sweet - type: Food + quality: High # Frontier, New Food Quality System - type: Sprite sprite: Objects/Consumable/Food/Baked/cake.rsi - type: SolutionContainerManager solutions: food: - maxVol: 50 + maxVol: 30 reagents: - ReagentId: Nutriment Quantity: 20 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 20 - type: Item size: Normal - type: Tag @@ -48,8 +47,6 @@ Quantity: 4 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Flavorol - Quantity: 4 - type: Item size: Tiny - type: Tag @@ -131,7 +128,7 @@ - type: SolutionContainerManager solutions: food: - maxVol: 35 + maxVol: 30 reagents: - ReagentId: JuiceCarrot Quantity: 15 @@ -139,8 +136,6 @@ Quantity: 5 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 5 - type: Tag tags: - Cake @@ -165,8 +160,6 @@ Quantity: 1 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Flavorol - Quantity: 1 - type: Tag tags: - Cake @@ -189,6 +182,8 @@ tags: - Cake - Meat + - type: Food # Frontier + quality: Nasty # Frontier, New Food Quality System - type: entity name: slice of brain cake @@ -203,6 +198,8 @@ - Cake - Meat - Slice + - type: Food # Frontier + quality: Nasty # Frontier, New Food Quality System # Tastes like sweetness, cake, brains. - type: entity @@ -385,7 +382,7 @@ - type: SolutionContainerManager solutions: food: - maxVol: 55 + maxVol: 35 reagents: - ReagentId: Nutriment Quantity: 20 @@ -393,8 +390,6 @@ Quantity: 5 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 20 - type: entity name: slice of chocolate cake @@ -414,8 +409,6 @@ Quantity: 1 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Flavorol - Quantity: 4 # Tastes like sweetness, cake, chocolate. - type: entity @@ -491,14 +484,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 70 + maxVol: 50 reagents: - ReagentId: Nutriment Quantity: 32 - ReagentId: Vitamin Quantity: 11 - - ReagentId: Flavorol - Quantity: 20 - type: Tag tags: - Cake @@ -521,8 +512,6 @@ Quantity: 6.4 - ReagentId: Vitamin Quantity: 2.2 - - ReagentId: Flavorol - Quantity: 4 - type: Tag tags: - Cake @@ -593,7 +582,7 @@ - type: SolutionContainerManager #TODO Sprinkles solutions: food: - maxVol: 65 + maxVol: 45 reagents: - ReagentId: Nutriment Quantity: 20 @@ -601,8 +590,6 @@ Quantity: 5 - ReagentId: Sugar Quantity: 15 - - ReagentId: Flavorol - Quantity: 20 - type: entity name: slice of vanilla cake @@ -623,8 +610,6 @@ Quantity: 1 - ReagentId: Sugar Quantity: 3 - - ReagentId: Flavorol - Quantity: 4 # Tastes like sweetness, cake, vanilla. - type: entity @@ -640,7 +625,7 @@ - type: SolutionContainerManager #TODO Sprinkles solutions: food: - maxVol: 65 + maxVol: 45 reagents: - ReagentId: Nutriment Quantity: 20 @@ -648,8 +633,6 @@ Quantity: 5 - ReagentId: Sugar Quantity: 15 - - ReagentId: Flavorol - Quantity: 20 - type: entity name: slice of clown cake @@ -670,8 +653,6 @@ Quantity: 1 - ReagentId: Sugar Quantity: 3 - - ReagentId: Flavorol - Quantity: 4 # Tastes like sweetness, cake, clown. - type: entity @@ -808,7 +789,7 @@ food: maxVol: 48 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 48 - type: Food transferAmount: 12 @@ -832,7 +813,7 @@ food: maxVol: 12 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 12 - type: Food transferAmount: 3 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml index c7e46d9a94a..79948076077 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml @@ -6,6 +6,7 @@ abstract: true components: - type: Food + quality: Junk # Frontier - type: Sprite sprite: Objects/Consumable/Food/Baked/donkpocket.rsi - type: SolutionContainerManager diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml index 87157834f7c..e721ce80f82 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml @@ -45,6 +45,8 @@ - sweet - type: Sprite state: plain + - type: Food # Frontier + quality: Normal # Frontier - type: entity name: plain jelly-donut @@ -126,6 +128,8 @@ state: pink - type: Item heldPrefix: pink + - type: Food # Frontier + quality: Junk # Frontier - type: entity name: spaceman's donut @@ -475,3 +479,5 @@ reagents: - ReagentId: Amatoxin Quantity: 10 + - type: Food # Frontier + quality: Junk # Frontier, New Food Quality System diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml index f0e7021dc1d..a0759ff2afd 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml @@ -7,6 +7,7 @@ abstract: true components: - type: Food + quality: Normal # Frontier - type: Sprite sprite: Objects/Consumable/Food/Baked/misc.rsi - type: SolutionContainerManager @@ -261,7 +262,7 @@ - type: Tag tags: - Nugget - - Meat + - Meat # Frontier - type: Sprite sprite: Objects/Consumable/Food/Baked/nuggets.rsi layers: @@ -341,13 +342,6 @@ map: ["pancakes9"] visible: false - type: Appearance - - type: SolutionContainerManager - solutions: - food: - maxVol: 6 - reagents: - - ReagentId: Flavorol - Quantity: 5 - type: Tag tags: - Pancake @@ -404,13 +398,6 @@ tags: - Pancake - Fruit - - type: SolutionContainerManager # Frontier: flavorol - solutions: - food: - maxVol: 6 - reagents: - - ReagentId: Flavorol - Quantity: 5 # End Frontier: flavorol - type: entity name: chocolate chip pancake @@ -465,7 +452,7 @@ food: maxVol: 6 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 5 - ReagentId: Theobromine Quantity: 1 @@ -485,7 +472,7 @@ food: maxVol: 20 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 8 - ReagentId: Vitamin Quantity: 1 @@ -505,7 +492,7 @@ food: maxVol: 20 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 10 - ReagentId: Vitamin Quantity: 1 @@ -525,7 +512,7 @@ food: maxVol: 20 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 10 - ReagentId: Vitamin Quantity: 1 @@ -545,7 +532,7 @@ food: maxVol: 20 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 8 - ReagentId: Vitamin Quantity: 2 @@ -574,7 +561,7 @@ food: maxVol: 20 reagents: - - ReagentId: Flavorol + - ReagentId: Nutriment Quantity: 5 - ReagentId: Vitamin Quantity: 1 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml index 6862630f96b..49ffea830e4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml @@ -16,15 +16,14 @@ - type: SolutionContainerManager solutions: food: - maxVol: 31 + maxVol: 20 reagents: #Most of these are this with slight variations, not worth changing until we have the rest of the reagents - ReagentId: Nutriment Quantity: 11 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 11 - type: Food #All pies here made with a pie tin; unless you're some kind of savage, you're probably not destroying this when you eat or slice the pie! + quality: High # Frontier, New Food Quality System trash: - FoodPlateTin - type: SliceableFood @@ -49,18 +48,18 @@ - type: SolutionContainerManager solutions: food: - maxVol: 8 + maxVol: 6 reagents: - ReagentId: Nutriment - Quantity: 2.5 + Quantity: 1.2 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Flavorol - Quantity: 2 - type: Tag tags: - Pie - Slice + - type: Food # Frontier + quality: High # Frontier, New Food Quality System # Pie @@ -377,6 +376,8 @@ tags: - Meat - Pie + - type: Food # Frontier + quality: Toxin # Frontier, New Food Quality System - type: entity name: slice of xeno pie @@ -397,6 +398,8 @@ - Meat - Pie - Slice + - type: Food # Frontier + quality: Toxin # Frontier, New Food Quality System # Tastes like pie, meat, acid. - type: entity @@ -477,7 +480,7 @@ - type: SolutionContainerManager solutions: food: - maxVol: 23 + maxVol: 17 reagents: - ReagentId: Nutriment Quantity: 6 @@ -485,8 +488,8 @@ Quantity: 3 - ReagentId: Vitamin Quantity: 4 - - ReagentId: Flavorol - Quantity: 6 + - type: Food # Frontier, New Food Quality System + quality: Toxin # Frontier, New Food Quality System # Tastes like pie, mushrooms. - type: entity @@ -552,12 +555,10 @@ - type: SolutionContainerManager solutions: food: - maxVol: 41 + maxVol: 26 reagents: - ReagentId: Nutriment Quantity: 15 - ReagentId: Theobromine Quantity: 2 - - ReagentId: Flavorol - Quantity: 15 # Tastes like tart, dark chocolate. diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml index db9af1ad457..e9f5aa79289 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml @@ -11,6 +11,7 @@ - oily - bread - type: Food + quality: High # Frontier, New Food Quality System - type: Sprite sprite: Objects/Consumable/Food/Baked/pizza.rsi - type: SolutionContainerManager @@ -19,11 +20,9 @@ maxVol: 40 reagents: - ReagentId: Nutriment - Quantity: 15 + Quantity: 30 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 15 - type: SliceableFood count: 8 - type: Item @@ -54,11 +53,9 @@ maxVol: 6 reagents: - ReagentId: Nutriment - Quantity: 3 + Quantity: 5 - ReagentId: Vitamin Quantity: 0.8 - - ReagentId: Flavorol - Quantity: 3 - type: Item size: Tiny - type: Tag @@ -85,6 +82,8 @@ - state: margherita - type: SliceableFood slice: FoodPizzaMargheritaSlice + - type: Food # Frontier + quality: Normal # Frontier - type: entity name: slice of margherita pizza @@ -161,6 +160,8 @@ - state: mushroom - type: SliceableFood slice: FoodPizzaMushroomSlice + - type: Food # Frontier + quality: Normal # Frontier - type: entity name: slice of mushroom pizza @@ -176,6 +177,8 @@ - type: Sprite layers: - state: mushroom-slice + - type: Food # Frontier + quality: Normal # Frontier # Tastes like crust, tomato, cheese, mushroom. - type: entity @@ -208,8 +211,8 @@ Quantity: 5 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Flavorol - Quantity: 15 + - type: Food # Frontier + quality: Gourmet # Frontier - type: entity name: slice of vegetable pizza @@ -240,8 +243,8 @@ Quantity: 1 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Flavorol - Quantity: 3 + - type: Food # Frontier + quality: Gourmet # Frontier # Tastes like crust, tomato, cheese, carrot. @@ -262,7 +265,7 @@ - type: SolutionContainerManager solutions: food: - maxVol: 60 + maxVol: 50 reagents: - ReagentId: Nutriment Quantity: 27 @@ -270,8 +273,6 @@ Quantity: 6 - ReagentId: Omnizine Quantity: 9 - - ReagentId: Flavorol - Quantity: 15 - type: Tag tags: - Meat @@ -301,8 +302,6 @@ Quantity: 1 - ReagentId: Omnizine Quantity: 1.5 - - ReagentId: Flavorol - Quantity: 3 - type: Tag tags: - Meat @@ -330,14 +329,12 @@ - type: SolutionContainerManager solutions: food: - maxVol: 65 + maxVol: 50 reagents: - ReagentId: Nutriment - Quantity: 6 # Frontier: 20<6 (keeping flavorol and total volume the same) + Quantity: 20 - ReagentId: THC Quantity: 30 - - ReagentId: Flavorol # Frontier - Quantity: 15 # Frontier - type: entity name: slice of dank pizza @@ -360,11 +357,9 @@ maxVol: 10 reagents: - ReagentId: Nutriment - Quantity: 1 # Frontier: 3.5<1 + Quantity: 3.5 - ReagentId: THC Quantity: 5 - - ReagentId: Flavorol # Frontier - Quantity: 3 # Frontier # Tastes like crust, tomato, cheese, meat, satisfaction. - type: entity @@ -433,6 +428,8 @@ tags: - Meat - Pizza + - type: Food # Frontier + quality: Gourmet # Frontier - type: entity name: slice of Hawaiian pizza @@ -455,6 +452,8 @@ - Meat - Pizza - Slice + - type: Food # Frontier + quality: Gourmet # Frontier: gauntlet thrown # Tastes like crust, tomato, cheese, pineapple, ham. #TODO: This is a meme pizza from /tg/. It has specially coded mechanics. @@ -489,8 +488,6 @@ Quantity: 10 - ReagentId: Omnizine Quantity: 30 - - ReagentId: Flavorol - Quantity: 15 - type: Tag tags: - Meat @@ -525,13 +522,13 @@ Quantity: 1.6 - ReagentId: Omnizine Quantity: 5 - - ReagentId: Flavorol - Quantity: 4 - type: Tag tags: - Meat - Pizza - Slice + - type: Food # Frontier + quality: Awful # Frontier # Tastes like crust, tomato, cheese, pepperoni, 9 millimeter bullets. #TODO: Make this do poison damage and make cut pizza slices eventually rot into this. @@ -564,6 +561,8 @@ Quantity: 2 - ReagentId: Vitamin Quantity: 1 + - type: Food # Frontier + quality: Awful # Frontier # Tastes like stale crust, rancid cheese, mushroom. - type: entity @@ -601,6 +600,8 @@ Quantity: 4 - ReagentId: Uranium Quantity: 16 + - type: Food # Frontier + quality: Awful # Frontier - type: entity name: slice of spicy rock pizza @@ -636,6 +637,8 @@ Quantity: 0.5 - ReagentId: Uranium Quantity: 2 + - type: Food # Frontier + quality: Awful # Frontier # Tastes like crust, tomato, cheese, radiation. @@ -660,6 +663,7 @@ tags: - ClothMade - Pizza + - MothFood # Frontier - type: SolutionContainerManager solutions: food: @@ -690,6 +694,7 @@ - ClothMade - Pizza - Slice + - MothFood # Frontier - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml index cdfd894e5a4..1d4b3a0dbaa 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml @@ -50,9 +50,9 @@ heldPrefix: box - type: StorageFill contents: - - id: FoodDonutPink + - id: FoodDonutPinkVendor # Frontier: FoodDonutPink