diff --git a/Content.Client/SS220/SupaKitchen/Components/OvenComponent.cs b/Content.Client/SS220/SupaKitchen/Components/OvenComponent.cs new file mode 100644 index 000000000000..c23d7c8c73b8 --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/Components/OvenComponent.cs @@ -0,0 +1,13 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Shared.SS220.SupaKitchen.Components; + +namespace Content.Client.SS220.SupaKitchen.Components; + +[RegisterComponent] +public sealed partial class OvenComponent : SharedOvenComponent +{ + [DataField] + public string ActiveState = "oven_on"; + [DataField] + public string NonActiveState = "oven_off"; +} diff --git a/Content.Client/SS220/SupaKitchen/SupaMicrowaveVIsual.cs b/Content.Client/SS220/SupaKitchen/SupaMicrowaveVIsual.cs new file mode 100644 index 000000000000..039fafaec671 --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/SupaMicrowaveVIsual.cs @@ -0,0 +1,8 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +namespace Content.Client.SS220.SupaKitchen; + +public enum SupaMicrowaveVisualizerLayers : byte +{ + Base, + BaseUnlit +} diff --git a/Content.Client/SS220/SupaKitchen/Systems/OvenSystem.cs b/Content.Client/SS220/SupaKitchen/Systems/OvenSystem.cs new file mode 100644 index 000000000000..147158fdac89 --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/Systems/OvenSystem.cs @@ -0,0 +1,50 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Client.SS220.SupaKitchen.Components; +using Content.Shared.SS220.SupaKitchen.Components; +using Content.Shared.SS220.SupaKitchen.Systems; +using Content.Shared.Storage.Components; +using Robust.Client.GameObjects; +using Robust.Shared.GameStates; + +namespace Content.Client.SS220.SupaKitchen.Systems; + +public sealed partial class OvenSystem : SharedOvenSystem +{ + [Dependency] private readonly AppearanceSystem _appearance = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHandleState); + + SubscribeLocalEvent(OnStorageOpenAttempt); + SubscribeLocalEvent(OnStorageCloseAttempt); + SubscribeLocalEvent(OnStorageOpen); + + SubscribeLocalEvent(OnAppearanceChange); + } + + private void OnHandleState(Entity entity, ref ComponentHandleState args) + { + if (args.Current is not OvenComponentState state) + return; + + entity.Comp.LastState = state.LastState; + entity.Comp.CurrentState = state.CurrentState; + entity.Comp.PlayingStream = state.PlayingStream; + } + + private void OnAppearanceChange(Entity entity, ref AppearanceChangeEvent args) + { + if (args.Sprite == null) + return; + + if (!_appearance.TryGetData(entity, OvenVisuals.Active, out var isActive)) + return; + + var state = isActive ? entity.Comp.ActiveState : entity.Comp.NonActiveState; + args.Sprite.LayerSetState(OvenVisuals.Active, state); + args.Sprite.LayerSetVisible(OvenVisuals.ActiveUnshaded, isActive); + } +} diff --git a/Content.Client/SS220/SupaKitchen/Systems/RecipeAssemblerSystem.cs b/Content.Client/SS220/SupaKitchen/Systems/RecipeAssemblerSystem.cs new file mode 100644 index 000000000000..10a17440674f --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/Systems/RecipeAssemblerSystem.cs @@ -0,0 +1,7 @@ +using Content.Shared.SS220.SupaKitchen.Systems; + +namespace Content.Client.SS220.SupaKitchen.Systems; + +public sealed partial class RecipeAssemblerSystem : SharedRecipeAssemblerSystem +{ +} diff --git a/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeEmbed.xaml b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeEmbed.xaml new file mode 100644 index 000000000000..717ab5ec8752 --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeEmbed.xaml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeEmbed.xaml.cs b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeEmbed.xaml.cs new file mode 100644 index 000000000000..c4d99de289a4 --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeEmbed.xaml.cs @@ -0,0 +1,187 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using System.Diagnostics.CodeAnalysis; +using JetBrains.Annotations; +using Content.Client.Guidebook.Controls; +using Content.Client.Guidebook.Richtext; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; +using Content.Shared.SS220.SupaKitchen; +using Content.Client.Message; +using Robust.Shared.Utility; +using Content.Shared.Chemistry.Reagent; +using Robust.Client.GameObjects; +using Content.Shared.FixedPoint; + +namespace Content.Client.SS220.SupaKitchen.UI.Controls; + +/// +/// Control for embedding a reagent into a guidebook. +/// +[UsedImplicitly, GenerateTypedNameReferences] +public sealed partial class GuideCookingRecipeEmbed : BoxContainer, IDocumentTag, ISearchableControl +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly IEntitySystemManager _entSysmMan = default!; + + private readonly SpriteSystem _spriteSystem; + + private HashSet _nameSearchCache; + + private readonly ISawmill _sawmill; + + public GuideCookingRecipeEmbed() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + _spriteSystem = _entSysmMan.GetEntitySystem(); + + MouseFilter = MouseFilterMode.Stop; + _sawmill = Logger.GetSawmill("KitchenCookbook"); + + _nameSearchCache = new(); + } + + public GuideCookingRecipeEmbed(CookingRecipePrototype recipe) : this() + { + GenerateControl(recipe); + } + + // uhhh shit i'm not sure about the performance + public bool CheckMatchesSearch(string query) + { + foreach (var match in _nameSearchCache) + { + if (match.Contains(query)) + return true; + } + + return false; + } + + public void SetHiddenState(bool state, string query) + { + this.Visible = CheckMatchesSearch(query) ? state : !state; + } + + public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out Control? control) + { + control = null; + if (!args.TryGetValue("Recipe", out var id)) + { + _sawmill.Error("Recipe embed tag is missing reagent prototype argument"); + return false; + } + + if (!_prototype.TryIndex(id, out var recipe)) + { + _sawmill.Error($"Specified CookingRecipe prototype \"{id}\" is not a valid CookingRecipe prototype"); + return false; + } + + GenerateControl(recipe); + + control = this; + return true; + } + + private void GenerateControl(CookingRecipePrototype recipe) + { + if (!_prototype.TryIndex(recipe.Result, out var product)) + return; + + _nameSearchCache.Add(product.Name); + RecipeLabelTitle.SetMarkup(product.Name); + //RecipeLabelTitle.SetMarkup(recipe.Name); + + // reagents + var reagentsMsg = new FormattedMessage(); + var reagentIngredientsCount = recipe.IngredientsReagents.Count; + var u = 0; + var reagentsLabel = new RichTextLabel() + { + HorizontalAlignment = HAlignment.Center, + VerticalAlignment = VAlignment.Center + }; + foreach (var (ingredientId, ingredientAmount) in recipe.IngredientsReagents) + { + if (!_prototype.TryIndex(ingredientId, out var ingredientProto)) + { + reagentIngredientsCount--; + continue; + } + + var ingredientName = ingredientProto.LocalizedName; + _nameSearchCache.Add(ingredientName); + + reagentsMsg.AddMarkupOrThrow(Loc.GetString("guidebook-cooking-recipes-ingredient-display", + ("reagent", ingredientName), ("ratio", ingredientAmount))); + + u++; + if (u < reagentIngredientsCount) + reagentsMsg.PushNewline(); + } + + if (!reagentsMsg.IsEmpty) + { + reagentsMsg.Pop(); + reagentsLabel.SetMessage(reagentsMsg); + IngredientsContainer.AddChild(reagentsLabel); + } + + // solid ingredients + foreach (var (ingredientId, ingredientAmount) in recipe.IngredientsSolids) + { + if (!_prototype.TryIndex(ingredientId, out var ingredientProto)) + continue; + + var ingredientName = ingredientProto.Name; + _nameSearchCache.Add(ingredientName); + + IngredientsContainer.AddChild(GetEntContainer(ingredientProto, ingredientAmount)); + } + + // output + ProductsContainer.AddChild(GetEntContainer(product, 1)); + + if (!_prototype.TryIndex(recipe.InstrumentType, out var instrumentProto)) + return; + + var instrumentMsg = new FormattedMessage(); + instrumentMsg.AddMarkupOrThrow(instrumentProto.Name); + instrumentMsg.PushNewline(); + instrumentMsg.AddMarkupOrThrow(Loc.GetString("guidebook-cooking-recipes-timer-display", ("time", recipe.CookTime))); + instrumentMsg.Pop(); + InstrumentName.SetMessage(instrumentMsg); + + if (instrumentProto.IconPath is not null) + InstrumentIcon.TexturePath = instrumentProto.IconPath; + } + + private BoxContainer GetEntContainer(EntityPrototype prototype, FixedPoint2 amount) + { + var entContainer = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + HorizontalAlignment = HAlignment.Center, + }; + + var entView = new EntityPrototypeView(); + entView.SetPrototype(prototype); + entContainer.AddChild(entView); + + var entMsg = new FormattedMessage(); + entMsg.AddMarkupOrThrow(Loc.GetString("guidebook-cooking-recipes-ingredient-display", + ("reagent", prototype.Name), ("ratio", amount))); + entMsg.Pop(); + + var entLabel = new RichTextLabel(); + entLabel.SetMessage(entMsg); + entContainer.AddChild(entLabel); + + return entContainer; + } +} diff --git a/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeGroupEmbed.xaml b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeGroupEmbed.xaml new file mode 100644 index 000000000000..a3fa4b2360fd --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeGroupEmbed.xaml @@ -0,0 +1,5 @@ + + + + diff --git a/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeGroupEmbed.xaml.cs b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeGroupEmbed.xaml.cs new file mode 100644 index 000000000000..10bcbd4fdd6e --- /dev/null +++ b/Content.Client/SS220/SupaKitchen/UI/Controls/GuideCookingRecipeGroupEmbed.xaml.cs @@ -0,0 +1,62 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Client.Guidebook.Richtext; +using Content.Shared.SS220.SupaKitchen; +using JetBrains.Annotations; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client.SS220.SupaKitchen.UI.Controls; + +/// +/// Control for embedding a group of recipes into a guidebook. +/// +[UsedImplicitly, GenerateTypedNameReferences] +public sealed partial class GuideCookingRecipeGroupEmbed : BoxContainer, IDocumentTag +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public GuideCookingRecipeGroupEmbed() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + MouseFilter = MouseFilterMode.Stop; + } + + public GuideCookingRecipeGroupEmbed(string? recipeGroup, ProtoId? instrumentType) : this() + { + AddCookingRecipes(recipeGroup, instrumentType); + } + + public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out Control? control) + { + args.TryGetValue("RecipeGroup", out var recipeGroup); + args.TryGetValue("InstrumentType", out var instrumentType); + + AddCookingRecipes(recipeGroup, instrumentType); + + control = this; + return true; + } + + private void AddCookingRecipes(string? recipeGroup, ProtoId? instrumentType) + { + var prototypes = _prototype.EnumeratePrototypes().Where(r => !r.SecretRecipe); + + if (recipeGroup != null) + prototypes = prototypes.Where(r => r.RecipeGroup == recipeGroup); + + if (instrumentType != null) + prototypes = prototypes.Where(r => r.InstrumentType == instrumentType); + + foreach (var recipe in prototypes) + { + var embed = new GuideCookingRecipeEmbed(recipe); + GroupContainer.AddChild(embed); + } + } +} diff --git a/Content.Server/Access/Systems/IdCardSystem.cs b/Content.Server/Access/Systems/IdCardSystem.cs index 571e11e69fd5..72c8d631f5d3 100644 --- a/Content.Server/Access/Systems/IdCardSystem.cs +++ b/Content.Server/Access/Systems/IdCardSystem.cs @@ -30,8 +30,13 @@ public override void Initialize() private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowavedEvent args) { - if (!component.CanMicrowave || !TryComp(args.Microwave, out var micro) || micro.Broken) - return; + // SS220 Change Id card explosion begin + //if (!component.CanMicrowave || !TryComp(args.Microwave, out var micro) || micro.Broken) + // return; + + if (!component.CanMicrowave) + return; + // SS220 Change Id card explosion end if (TryComp(uid, out var access)) { @@ -55,11 +60,18 @@ private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowa } //Explode if the microwave can't handle it - if (!micro.CanMicrowaveIdsSafely && _random.Prob(micro.IdCardExplosionChance)) //SS220 Microwave explosion tweak - { - _microwave.Explode((args.Microwave, micro)); + // SS220 Change Id card explosion begin + //if (!micro.CanMicrowaveIdsSafely && _random.Prob(micro.IdCardExplosionChance)) //SS220 Microwave explosion tweak + //{ + // _microwave.Explode((args.Microwave, micro)); + // return; + //} + + var ev = new IdCardMicrowavedEvent(); + RaiseLocalEvent(args.Microwave, ev); + if (ev.Cancelled) return; - } + // SS220 Change Id card explosion end // If they're unlucky, brick their ID if (randomPick <= 0.25f) @@ -89,3 +101,5 @@ private void OnMicrowaved(EntityUid uid, IdCardComponent component, BeingMicrowa } } } + +public sealed class IdCardMicrowavedEvent : CancellableEntityEventArgs { } // SS220 Change Id card explosion diff --git a/Content.Server/Entry/EntryPoint.cs b/Content.Server/Entry/EntryPoint.cs index b5153bc1f31d..37d651fbb302 100644 --- a/Content.Server/Entry/EntryPoint.cs +++ b/Content.Server/Entry/EntryPoint.cs @@ -40,6 +40,7 @@ using Robust.Shared.Utility; using Content.Server.SS220.BackEndApi; + namespace Content.Server.Entry { public sealed class EntryPoint : GameServer diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index c77489486944..e66b207b082d 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -41,6 +41,7 @@ using Content.Shared.Chat; using Content.Shared.Damage; using Robust.Shared.Utility; +using Content.Server.Access.Systems; namespace Content.Server.Kitchen.EntitySystems { @@ -90,6 +91,8 @@ public override void Initialize() SubscribeLocalEvent(OnSignalReceived); + SubscribeLocalEvent(OnIdCardMicrowaved); // SS220 Change Id card explosion + SubscribeLocalEvent((u, c, m) => Wzhzhzh(u, c, m.Actor)); SubscribeLocalEvent(OnEjectMessage); SubscribeLocalEvent(OnEjectIndex); @@ -441,6 +444,19 @@ private void OnSignalReceived(Entity ent, ref SignalReceived Wzhzhzh(ent.Owner, ent.Comp, null); } + // SS220 Change Id card explosion begin + private void OnIdCardMicrowaved(Entity ent, ref IdCardMicrowavedEvent args) + { + if (args.Cancelled || + ent.Comp.CanMicrowaveIdsSafely || + !_random.Prob(ent.Comp.IdCardExplosionChance)) + return; + + Explode(ent); + args.Cancel(); + } + // SS220 Change Id card explosion end + public void UpdateUserInterfaceState(EntityUid uid, MicrowaveComponent component) { _userInterface.SetUiState(uid, MicrowaveUiKey.Key, new MicrowaveUpdateUserInterfaceState( diff --git a/Content.Server/SS220/SupaKitchen/Components/OvenComponent.cs b/Content.Server/SS220/SupaKitchen/Components/OvenComponent.cs new file mode 100644 index 000000000000..9489b3817d87 --- /dev/null +++ b/Content.Server/SS220/SupaKitchen/Components/OvenComponent.cs @@ -0,0 +1,53 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Shared.DeviceLinking; +using Content.Shared.FixedPoint; +using Content.Shared.SS220.SupaKitchen; +using Content.Shared.SS220.SupaKitchen.Components; +using Robust.Shared.Audio; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; + +namespace Content.Server.SS220.SupaKitchen.Components; + +[RegisterComponent] +public sealed partial class OvenComponent : SharedOvenComponent +{ + [ViewVariables] + public EntityUid? LastUser; + + [ViewVariables] + public List EntityPack = []; + + [ViewVariables] + public Dictionary ReagentsPack = []; + + [ViewVariables] + public float PackCookingTime; + + [ViewVariables] + public CookingRecipePrototype? CurrentCookingRecipe; + + [DataField] + public string ContainerName = "cooking_constantly_entity_container"; + + [ViewVariables] + public Container Container = default; + + #region audio + [DataField] + public SoundSpecifier ActivateSound = new SoundPathSpecifier("/Audio/SS220/SupaKitchen/oven/oven_loop_start.ogg"); + [DataField] + public SoundSpecifier FoodDoneSound = new SoundPathSpecifier("/Audio/SS220/SupaKitchen/ring.ogg"); + + [DataField] + public SoundSpecifier LoopingSound = new SoundPathSpecifier("/Audio/SS220/SupaKitchen/oven/oven_loop_mid.ogg"); + #endregion + + #region Sink ports + [DataField] + public ProtoId OnPort = "On"; + + [DataField] + public ProtoId TogglePort = "Toggle"; + #endregion +} diff --git a/Content.Server/SS220/SupaKitchen/SupaMicrowaveComponent.cs b/Content.Server/SS220/SupaKitchen/SupaMicrowaveComponent.cs new file mode 100644 index 000000000000..0c51fb36b8a0 --- /dev/null +++ b/Content.Server/SS220/SupaKitchen/SupaMicrowaveComponent.cs @@ -0,0 +1,122 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Shared.Destructible.Thresholds; +using Content.Shared.DeviceLinking; +using Content.Shared.SS220.SupaKitchen; +using Content.Shared.SS220.SupaKitchen.Components; +using Robust.Shared.Audio; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; + +namespace Content.Server.SS220.SupaKitchen; + +[RegisterComponent] +public sealed partial class SupaMicrowaveComponent : BaseCookingInstrumentComponent +{ + #region stats + [DataField] + public uint MaxCookingTimer = 30; + + [DataField] + public float TemperatureUpperThreshold = 373.15f; + + [DataField] + public float HeatPerSecond = 100; + + [DataField] + public int Capacity = 15; + + [DataField] + public float CookTimeMultiplier = 1f; + #endregion + + #region state + [ViewVariables] + public uint CookingTimer = 0; + + [ViewVariables(VVAccess.ReadWrite)] + public float CookTimeRemaining; + + [ViewVariables] + public (CookingRecipePrototype?, int) CurrentlyCookingRecipe = (null, 0); + + [ViewVariables] + public int CurrentCookTimeButtonIndex; + + [ViewVariables, Access(typeof(SupaMicrowaveSystem), Other = AccessPermissions.Read)] + public SupaMicrowaveState CurrentState = SupaMicrowaveState.Idle; + #endregion + + #region audio + [DataField] + public SoundSpecifier BeginCookingSound = new SoundPathSpecifier("/Audio/Machines/microwave_start_beep.ogg"); + [DataField] + public SoundSpecifier FoodDoneSound = new SoundPathSpecifier("/Audio/Machines/microwave_done_beep.ogg"); + [DataField] + public SoundSpecifier ClickSound = new SoundPathSpecifier("/Audio/Machines/machine_switch.ogg"); + [DataField] + public SoundSpecifier ItemBreakSound = new SoundPathSpecifier("/Audio/Effects/clang.ogg"); + + public EntityUid? PlayingStream { get; set; } + [DataField] + public SoundSpecifier LoopingSound = new SoundPathSpecifier("/Audio/Machines/microwave_loop.ogg"); + #endregion + + [DataField] + public string StorageName = "supa_microwave_entity_container"; + + public Container Storage = default!; + + #region Sink ports + [DataField] + public ProtoId OnPort = "On"; + #endregion + + #region Danger + /// + /// How frequently the microwave can malfunction. + /// + [DataField] + public MinMax MalfunctionInterval = new MinMax(1, 5); + + [ViewVariables] + public TimeSpan MalfunctionTime = TimeSpan.Zero; + + /// + /// Chance of an explosion occurring when we microwave a metallic object + /// + [DataField] + public float ExplosionChance = .1f; + + /// + /// Chance of lightning occurring when we microwave a metallic object + [DataField] + public float LightningChance = .75f; + #endregion + + /// + /// If this microwave can give ids accesses without exploding + /// + [DataField] + public bool CanMicrowaveIdsSafely = true; + + /// + /// Chance of an explosion occurring when we microwave a id card + /// It's use if is false + /// + [DataField] + public float IdCardExplosionChance = 1f; +} + +public sealed class ProcessedInSupaMicrowaveEvent : HandledEntityEventArgs +{ + public EntityUid MachineEntity; + public EntityUid? User; + public EntityUid Item; + + public ProcessedInSupaMicrowaveEvent(EntityUid machineEntity, EntityUid item, EntityUid? user = null) + { + MachineEntity = machineEntity; + User = user; + Item = item; + } +} diff --git a/Content.Server/SS220/SupaKitchen/SupaMicrowaveSystem.cs b/Content.Server/SS220/SupaKitchen/SupaMicrowaveSystem.cs new file mode 100644 index 000000000000..5bc873a8a343 --- /dev/null +++ b/Content.Server/SS220/SupaKitchen/SupaMicrowaveSystem.cs @@ -0,0 +1,534 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Server.Access.Systems; +using Content.Server.Administration.Logs; +using Content.Server.Body.Systems; +using Content.Server.Construction.Components; +using Content.Server.DeviceLinking.Events; +using Content.Server.Explosion.EntitySystems; +using Content.Server.Hands.Systems; +using Content.Server.Kitchen.Components; +using Content.Server.Lightning; +using Content.Server.Power.Components; +using Content.Server.Temperature.Components; +using Content.Server.Temperature.Systems; +using Content.Shared.Body.Components; +using Content.Shared.Body.Part; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Construction.EntitySystems; +using Content.Shared.Database; +using Content.Shared.Destructible; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; +using Content.Shared.Item; +using Content.Shared.Kitchen.Components; +using Content.Shared.Popups; +using Content.Shared.Power; +using Content.Shared.SS220.SupaKitchen; +using Content.Shared.SS220.SupaKitchen.Systems; +using Content.Shared.Tag; +using Robust.Server.Audio; +using Robust.Server.Containers; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.Containers; +using Robust.Shared.GameObjects; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Timing; +using System.Linq; + +namespace Content.Server.SS220.SupaKitchen; +public sealed class SupaMicrowaveSystem : CookingInstrumentSystem +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly TagSystem _tag = default!; + [Dependency] private readonly BodySystem _bodySystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly HandsSystem _handsSystem = default!; + [Dependency] private readonly SharedContainerSystem _sharedContainer = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly UserInterfaceSystem _userInterface = default!; + [Dependency] private readonly TemperatureSystem _temperature = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly ExplosionSystem _explosion = default!; + [Dependency] private readonly LightningSystem _lightning = default!; + + [ValidatePrototypeId] + private const string MalfunctionSpark = "Spark"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInteractUsing, after: [typeof(AnchorableSystem)]); + SubscribeLocalEvent(OnSolutionChange); + SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnBreak); + SubscribeLocalEvent(OnSignalReceived); + SubscribeLocalEvent(OnIdCardMicrowaved); + + // UI event listeners + SubscribeLocalEvent((u, c, m) => StartCooking(u, c, m.Actor)); + SubscribeLocalEvent(OnEjectMessage); + SubscribeLocalEvent(OnEjectIndex); + SubscribeLocalEvent(OnSelectTime); + + SubscribeLocalEvent(OnSuicide); + } + + private void OnInit(Entity entity, ref ComponentInit ags) + { + entity.Comp.Storage = _container.EnsureContainer(entity, entity.Comp.StorageName); + CheckPowered(entity); + } + + private void OnPowerChanged(Entity entity, ref PowerChangedEvent args) + { + if (entity.Comp.CurrentState is SupaMicrowaveState.Broken) + return; + + if (!args.Powered) + { + StopCooking(entity); + SetMachineState(entity, SupaMicrowaveState.UnPowered); + } + else if (entity.Comp.CurrentState is SupaMicrowaveState.UnPowered) + { + SetMachineState(entity, SupaMicrowaveState.Idle); + } + } + + private void OnInteractUsing(Entity entity, ref InteractUsingEvent args) + { + if (args.Handled) + return; + + if (!(TryComp(entity, out var apc) && apc.Powered)) + { + _popupSystem.PopupEntity( + Loc.GetString("supa-microwave-component-interact-using-no-power", ("machine", MetaData(entity).EntityName)), + entity, + args.User); + return; + } + + if (entity.Comp.CurrentState is SupaMicrowaveState.Broken) + { + _popupSystem.PopupEntity( + Loc.GetString("supa-microwave-component-interact-using-broken", ("machine", MetaData(entity).EntityName)), + entity, + args.User); + return; + } + + if (!HasComp(args.Used)) + { + _popupSystem.PopupEntity(Loc.GetString("supa-microwave-component-interact-using-transfer-fail"), + entity, + args.User); + return; + } + + if (entity.Comp.Storage.Count >= entity.Comp.Capacity) + { + _popupSystem.PopupEntity(Loc.GetString("supa-microwave-component-interact-full"), entity, args.User); + return; + } + + args.Handled = true; + _handsSystem.TryDropIntoContainer(args.User, args.Used, entity.Comp.Storage); + UpdateUserInterfaceState(entity); + } + + private void OnSolutionChange(Entity entity, ref SolutionChangedEvent args) + { + UpdateUserInterfaceState(entity); + } + + private void OnBreak(Entity entity, ref BreakageEventArgs args) + { + StopCooking(entity); + + _sharedContainer.EmptyContainer(entity.Comp.Storage); + + SetMachineState(entity, SupaMicrowaveState.Broken); + } + + private void OnSignalReceived(Entity entity, ref SignalReceivedEvent args) + { + if (args.Port == entity.Comp.OnPort.Id) + StartCooking(entity, entity, args.Trigger); + } + + private void OnIdCardMicrowaved(Entity entity, ref IdCardMicrowavedEvent args) + { + if (args.Cancelled || + entity.Comp.CanMicrowaveIdsSafely || + !_random.Prob(entity.Comp.IdCardExplosionChance)) + return; + + Explode(entity); + args.Cancel(); + } + + #region ui_messages + private void OnEjectMessage(Entity entity, ref MicrowaveEjectMessage args) + { + if (!HasContents(entity.Comp) || entity.Comp.CurrentState != SupaMicrowaveState.Idle) + return; + + _sharedContainer.EmptyContainer(entity.Comp.Storage); + + _audio.PlayPvs(entity.Comp.ClickSound, entity, AudioParams.Default.WithVolume(-2)); + UpdateUserInterfaceState(entity); + } + + private void OnEjectIndex(Entity entity, ref MicrowaveEjectSolidIndexedMessage args) + { + if (!HasContents(entity.Comp) || entity.Comp.CurrentState != SupaMicrowaveState.Idle) + return; + + _container.Remove(GetEntity(args.EntityID), entity.Comp.Storage); + UpdateUserInterfaceState(entity); + } + + private void OnSelectTime(Entity entity, ref MicrowaveSelectCookTimeMessage args) + { + if (!HasContents(entity.Comp) || entity.Comp.CurrentState != SupaMicrowaveState.Idle) + return; + + // some validation to prevent trollage + if (args.NewCookTime % 5 != 0 || args.NewCookTime > entity.Comp.MaxCookingTimer) + return; + + entity.Comp.CurrentCookTimeButtonIndex = args.ButtonIndex; + entity.Comp.CookingTimer = args.NewCookTime; + _audio.PlayPvs(entity.Comp.ClickSound, entity, AudioParams.Default.WithVolume(-2)); + UpdateUserInterfaceState(entity); + } + #endregion + + private void OnSuicide(Entity entity, ref SuicideEvent args) + { + if (args.Handled) + return; + + //args.SetHandled(SuicideKind.Heat); + args.Handled = true; + var victim = args.Victim; + var headCount = 0; + + if (TryComp(victim, out var body)) + { + var headSlots = _bodySystem.GetBodyChildrenOfType(victim, BodyPartType.Head, body); + + foreach (var part in headSlots) + { + _sharedContainer.Insert(part.Id, entity.Comp.Storage); + headCount++; + } + } + + var othersMessage = headCount > 1 + ? Loc.GetString("supa-microwave-component-suicide-multi-head-others-message", ("victim", victim)) + : Loc.GetString("supa-microwave-component-suicide-others-message", ("victim", victim)); + + var selfMessage = headCount > 1 + ? Loc.GetString("supa-microwave-component-suicide-multi-head-message") + : Loc.GetString("supa-microwave-component-suicide-message"); + + _popupSystem.PopupEntity(othersMessage, victim, Filter.PvsExcept(victim), true); + _popupSystem.PopupEntity(selfMessage, victim, victim); + + _audio.PlayPvs(entity.Comp.ClickSound, entity, AudioParams.Default.WithVolume(-2)); + entity.Comp.CookingTimer = 10; + + StartCooking(entity, args.Victim); + } + + public static bool HasContents(SupaMicrowaveComponent component) + { + return component.Storage.ContainedEntities.Any(); + } + + public void SetMachineState(Entity entity, SupaMicrowaveState state) + { + entity.Comp.CurrentState = state; + UpdateAppearance(entity); + UpdateUserInterfaceState(entity); + } + + public void UpdateAppearance(Entity entity) + { + SupaMicrowaveVisualState display; + switch (entity.Comp.CurrentState) + { + case SupaMicrowaveState.UnPowered: + case SupaMicrowaveState.Idle: + display = SupaMicrowaveVisualState.Idle; + break; + case SupaMicrowaveState.Cooking: + display = SupaMicrowaveVisualState.Cooking; + break; + case SupaMicrowaveState.Broken: + display = SupaMicrowaveVisualState.Broken; + break; + default: + display = SupaMicrowaveVisualState.Idle; + break; + } + + _appearance.SetData(entity, PowerDeviceVisuals.VisualState, display); + } + + public void UpdateUserInterfaceState(Entity entity) + { + var isBusy = entity.Comp.CurrentState != SupaMicrowaveState.Idle; + var timeEnd = entity.Comp.CookTimeRemaining > 0 + ? _gameTiming.CurTime + TimeSpan.FromSeconds(entity.Comp.CookTimeRemaining) + : TimeSpan.Zero; + + _userInterface.SetUiState(entity.Owner, SupaMicrowaveUiKey.Key, new MicrowaveUpdateUserInterfaceState( + GetNetEntityArray(entity.Comp.Storage.ContainedEntities.ToArray()), + isBusy, + entity.Comp.CurrentCookTimeButtonIndex, + entity.Comp.CookingTimer, + timeEnd + )); + } + + public void CheckPowered(Entity entity) + { + if (TryComp(entity, out var apcReceiver) && !apcReceiver.Powered) + SetMachineState(entity, SupaMicrowaveState.UnPowered); + else + SetMachineState(entity, SupaMicrowaveState.Idle); + } + + public void Break(Entity entity) + { + SetMachineState(entity, SupaMicrowaveState.Broken); + _audio.PlayPvs(entity.Comp.ItemBreakSound, entity); + + UpdateUserInterfaceState(entity); + } + + public void StartCooking(Entity entity, EntityUid? whoStarted = null) + { + StartCooking(entity, entity, whoStarted); + } + + public void StartCooking(EntityUid uid, SupaMicrowaveComponent component, EntityUid? whoStarted = null) + { + if (!HasContents(component) || component.CurrentState != SupaMicrowaveState.Idle) + return; + + var solidsDict = new Dictionary(); + var reagentDict = new Dictionary(); + + foreach (var item in component.Storage.ContainedEntities.ToList()) + { + var ev = new BeingMicrowavedEvent(uid, whoStarted); + RaiseLocalEvent(item, ev); + + if (_tag.HasTag(item, "Metal")) + { + EnsureMalfusion((uid, component)); + } + + // destroy microwave + if (_tag.HasTag(item, "MicrowaveMachineUnsafe")) + { + Break((uid, component)); + return; + } + + if (_tag.HasTag(item, "MicrowaveSelfUnsafe") || _tag.HasTag(item, "Plastic")) + { + var junk = Spawn(component.FailureResult, Transform(uid).Coordinates); + _sharedContainer.Insert(junk, component.Storage); + QueueDel(item); + } + + if (ev.Handled) + { + UpdateUserInterfaceState((uid, component)); + return; + } + + var metaData = MetaData(item); //this still begs for cooking refactor + if (metaData.EntityPrototype == null) + continue; + + if (solidsDict.ContainsKey(metaData.EntityPrototype.ID)) + solidsDict[metaData.EntityPrototype.ID]++; + else + solidsDict.Add(metaData.EntityPrototype.ID, 1); + + if (!TryComp(item, out var solMan)) + continue; + + foreach (var (_, soln) in _solutionContainer.EnumerateSolutions((item, solMan))) + { + var solution = soln.Comp.Solution; + { + foreach (var (reagent, quantity) in solution.Contents) + { + if (reagentDict.ContainsKey(reagent.Prototype)) + reagentDict[reagent.Prototype] += quantity; + else + reagentDict.Add(reagent.Prototype, quantity); + } + } + } + } + + // Check recipes + var portionedRecipe = GetSatisfiedPortionedRecipe( + component, solidsDict, reagentDict, (uint)(component.CookingTimer * component.CookTimeMultiplier)); + + _audio.PlayPvs(component.BeginCookingSound, uid); + component.CookTimeRemaining = component.CookingTimer; + component.CurrentlyCookingRecipe = portionedRecipe; + + SetMachineState((uid, component), SupaMicrowaveState.Cooking); + UpdateAppearance((uid, component)); + UpdateUserInterfaceState((uid, component)); + + var audioStream = _audio.PlayPvs(component.LoopingSound, uid, AudioParams.Default.WithLoop(true).WithMaxDistance(5)); + component.PlayingStream = audioStream?.Entity; + } + + public void StopCooking(Entity entity) + { + entity.Comp.CookTimeRemaining = 0; + entity.Comp.CurrentlyCookingRecipe = (null, 0); + + if (entity.Comp.CurrentState is SupaMicrowaveState.Cooking) + { + SetMachineState(entity, SupaMicrowaveState.Idle); + UpdateAppearance(entity); + } + + entity.Comp.MalfunctionTime = TimeSpan.Zero; + UpdateUserInterfaceState(entity); + _audio.Stop(entity.Comp.PlayingStream); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component)) + { + if (component.CurrentState != SupaMicrowaveState.Cooking) + continue; + + //check if there's still cook time left + component.CookTimeRemaining -= frameTime; + if (component.CookTimeRemaining > 0) + continue; + + RollMalfunction((uid, component)); + AddTemperature(component, component.CookingTimer); + + if (component.CurrentlyCookingRecipe.Item1 != null) + { + var coords = Transform(uid).Coordinates; + for (var i = 0; i < component.CurrentlyCookingRecipe.Item2; i++) + { + SubtractContents(component.Storage, component.CurrentlyCookingRecipe.Item1); + Spawn(component.CurrentlyCookingRecipe.Item1.Result, coords); + } + } + + _sharedContainer.EmptyContainer(component.Storage); + + StopCooking((uid, component)); + _audio.PlayPvs(component.FoodDoneSound, uid, AudioParams.Default.WithVolume(-1)); + } + } + + /// + /// Adds temperature to every item in the microwave, + /// based on the time it took to microwave. + /// + /// The machine that contains objects to heat up. + /// The time on the microwave, in seconds. + private void AddTemperature(SupaMicrowaveComponent machine, float time) + { + if (machine.HeatPerSecond == 0) + return; + + var heatToAdd = time * machine.HeatPerSecond; + foreach (var entity in machine.Storage.ContainedEntities) + { + if (TryComp(entity, out var tempComp)) + _temperature.ChangeHeat(entity, heatToAdd, false, tempComp); + + if (!TryComp(entity, out var solutions)) + continue; + + foreach (var (_, soln) in _solutionContainer.EnumerateSolutions((entity, solutions))) + { + var solution = soln.Comp.Solution; + if (solution.Temperature > machine.TemperatureUpperThreshold) + continue; + + _solutionContainer.AddThermalEnergy(soln, heatToAdd); + } + } + } + + /// + /// Handles the attempted cooking of unsafe objects + /// + private void RollMalfunction(Entity entity) + { + if (entity.Comp.MalfunctionTime == TimeSpan.Zero || entity.Comp.MalfunctionTime > _gameTiming.CurTime) + return; + + var interval = _random.Next(entity.Comp.MalfunctionInterval.Min, entity.Comp.MalfunctionInterval.Max); + entity.Comp.MalfunctionTime = _gameTiming.CurTime + TimeSpan.FromSeconds(interval); + if (_random.Prob(entity.Comp.ExplosionChance)) + { + Explode(entity); + return; // microwave is fucked, stop the cooking. + } + + if (_random.Prob(entity.Comp.LightningChance)) + _lightning.ShootRandomLightnings(entity, 1.0f, 2, MalfunctionSpark, triggerLightningEvents: false); + } + + /// + /// Explodes the microwave internally, turning it into a broken state, destroying its board, and spitting out its machine parts + /// + public void Explode(Entity entity) + { + SetMachineState(entity, SupaMicrowaveState.Broken); + _explosion.TriggerExplosive(entity); + if (TryComp(entity, out var machine)) + { + _container.CleanContainer(machine.BoardContainer); + _container.EmptyContainer(machine.PartContainer); + } + + _adminLogger.Add(LogType.Action, LogImpact.Medium, + $"{ToPrettyString(entity)} exploded from unsafe cooking!"); + } + + public void EnsureMalfusion(Entity entity) + { + var interval = _random.Next(entity.Comp.MalfunctionInterval.Min, entity.Comp.MalfunctionInterval.Max); + entity.Comp.MalfunctionTime = _gameTiming.CurTime + TimeSpan.FromSeconds(interval); + } +} diff --git a/Content.Server/SS220/SupaKitchen/Systems/OvenSystem.cs b/Content.Server/SS220/SupaKitchen/Systems/OvenSystem.cs new file mode 100644 index 000000000000..05355af831fd --- /dev/null +++ b/Content.Server/SS220/SupaKitchen/Systems/OvenSystem.cs @@ -0,0 +1,291 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Server.DeviceLinking.Events; +using Content.Server.Power.EntitySystems; +using Content.Server.SS220.SupaKitchen.Components; +using Content.Server.Storage.EntitySystems; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Destructible; +using Content.Shared.FixedPoint; +using Content.Shared.Power; +using Content.Shared.SS220.SupaKitchen; +using Content.Shared.SS220.SupaKitchen.Components; +using Content.Shared.SS220.SupaKitchen.Systems; +using Content.Shared.Storage.Components; +using Content.Shared.Verbs; +using Robust.Server.Audio; +using Robust.Server.Containers; +using Robust.Shared.Audio; +using Robust.Shared.Containers; +using Robust.Shared.GameStates; +using System.Linq; + +namespace Content.Server.SS220.SupaKitchen.Systems; + +public sealed partial class OvenSystem : SharedOvenSystem +{ + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly EntityStorageSystem _entityStorage = default!; + [Dependency] private readonly ApcSystem _apcSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetState); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnMapInit); + + SubscribeLocalEvent(OnStorageOpenAttempt); + SubscribeLocalEvent(OnStorageCloseAttempt); + SubscribeLocalEvent(OnStorageOpen); + + SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnBreak); + SubscribeLocalEvent>(OnAlternativeVerb); + SubscribeLocalEvent(OnSignalReceived); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component)) + { + if (component.CurrentState != OvenState.Active || + component.CurrentCookingRecipe is null) + continue; + + if (!HasContents(component)) + continue; + + component.PackCookingTime += frameTime; + if (component.CurrentCookingRecipe.CookTime > component.PackCookingTime) + continue; + + FinalizeCooking(uid, component); + } + } + + private void OnGetState(Entity entity, ref ComponentGetState args) + { + args.State = new OvenComponentState(entity.Comp.LastState, + entity.Comp.CurrentState, + entity.Comp.PlayingStream); + } + + private void OnInit(Entity entity, ref ComponentInit args) + { + if (entity.Comp.UseEntityStorage) + entity.Comp.Container = _container.EnsureContainer(entity, EntityStorageSystem.ContainerName); + else + entity.Comp.Container = _container.EnsureContainer(entity, "cooking_machine_entity_container"); + } + + private void OnMapInit(Entity entity, ref MapInitEvent args) + { + if (!_apcSystem.IsPowered(entity, EntityManager)) + SetState(entity, entity, OvenState.UnPowered); + } + + private void OnPowerChanged(Entity entity, ref PowerChangedEvent args) + { + var (uid, comp) = entity; + if (comp.CurrentState is OvenState.Broken) + return; + + if (!args.Powered) + { + Deactivate(uid, comp, false); + SetState(uid, comp, OvenState.UnPowered); + } + else if (comp.CurrentState is OvenState.UnPowered) + { + if (comp.LastState is OvenState.Active) + Activate(uid, comp); + else + SetState(uid, comp, comp.LastState); + } + } + + private void OnBreak(Entity entity, ref BreakageEventArgs args) + { + Deactivate(entity, entity); + + if (entity.Comp.UseEntityStorage) + _entityStorage.CloseStorage(entity); + + _container.EmptyContainer(entity.Comp.Container); + + SetState(entity, entity, OvenState.Broken); + } + + private void OnAlternativeVerb(Entity entity, ref GetVerbsEvent args) + { + var user = args.User; + AlternativeVerb? newVerb = null; + switch (entity.Comp.CurrentState) + { + case OvenState.Idle: + newVerb = new AlternativeVerb() + { + Act = () => Activate(entity, entity, user), + Text = "Activate" + }; + break; + case OvenState.Active: + newVerb = new AlternativeVerb() + { + Act = () => Deactivate(entity, entity), + Text = "Deactivate" + }; + break; + } + + if (newVerb != null) + args.Verbs.Add(newVerb); + } + + private void OnSignalReceived(Entity entity, ref SignalReceivedEvent args) + { + if (args.Port == entity.Comp.OnPort.Id && + entity.Comp.CurrentState is OvenState.Idle) + Activate(entity, entity); + + if (args.Port == entity.Comp.TogglePort.Id) + { + switch (entity.Comp.CurrentState) + { + case OvenState.Active: + Deactivate(entity, entity); + break; + case OvenState.Idle: + Activate(entity, entity); + break; + } + } + } + + public void Activate(EntityUid uid, OvenComponent component, EntityUid? user = null) + { + CycleCooking(uid, component); + + component.LastUser = user; + SetState(uid, component, OvenState.Active); + + _audio.PlayPvs(component.ActivateSound, uid); + + var audioStream = _audio.PlayPvs(component.LoopingSound, uid, AudioParams.Default.WithLoop(true).WithMaxDistance(5)); + component.PlayingStream = GetNetEntity(audioStream?.Entity); + Dirty(uid, component); + } + + private void CycleCooking(EntityUid uid, OvenComponent component) + { + if (!HasContents(component)) + return; + + if (IsPackChanged(uid, component)) + { + component.PackCookingTime = 0; + component.CurrentCookingRecipe = null; + } + + if (component.CurrentCookingRecipe is null) + component.CurrentCookingRecipe = GetCookingRecipe(uid, component); + } + + private void FinalizeCooking(EntityUid uid, OvenComponent component) + { + if (component.CurrentCookingRecipe is null) + return; + + var container = component.Container; + SubtractContents(container, component.CurrentCookingRecipe); + SpawnInContainerOrDrop(component.CurrentCookingRecipe.Result, uid, container.ID); + CycleCooking(uid, component); + } + + public bool IsPackChanged(EntityUid uid, OvenComponent component, bool setNew = true) + { + var container = component.Container; + var containedEntities = container.ContainedEntities.OrderBy(x => x).ToList(); + + var isPackChanged = false; + if (!component.EntityPack.SequenceEqual(containedEntities)) + isPackChanged = true; + + var reagentDict = new Dictionary(); + foreach (var item in containedEntities) + { + if (!TryComp(item, out var solMan)) + continue; + + foreach (var (_, soln) in _solutionContainer.EnumerateSolutions((item, solMan))) + { + var solution = soln.Comp.Solution; + { + foreach (var (reagent, quantity) in solution.Contents) + { + if (!reagentDict.TryAdd(reagent.Prototype, quantity)) + reagentDict[reagent.Prototype] += quantity; + } + } + } + } + + reagentDict = reagentDict.OrderBy(x => x.Key).ToDictionary(); + if (!component.ReagentsPack.SequenceEqual(reagentDict)) + isPackChanged = true; + + if (setNew && isPackChanged) + { + component.EntityPack = containedEntities; + component.ReagentsPack = reagentDict; + } + + return isPackChanged; + } + + public bool HasContents(OvenComponent component) + { + return component.Container.ContainedEntities.Any(); + } + + private CookingRecipePrototype? GetCookingRecipe(EntityUid uid, OvenComponent component) + { + var solidsDict = new Dictionary(); + var reagentDict = new Dictionary(); + + foreach (var item in component.Container.ContainedEntities.ToList()) + { + var metaData = MetaData(item); //this still begs for cooking refactor + if (metaData.EntityPrototype == null) + continue; + + if (!solidsDict.TryAdd(metaData.EntityPrototype.ID, 1)) + solidsDict[metaData.EntityPrototype.ID]++; + + if (!TryComp(item, out var solMan)) + continue; + + foreach (var (_, soln) in _solutionContainer.EnumerateSolutions((item, solMan))) + { + var solution = soln.Comp.Solution; + { + foreach (var (reagent, quantity) in solution.Contents) + { + if (!reagentDict.TryAdd(reagent.Prototype, quantity)) + reagentDict[reagent.Prototype] += quantity; + } + } + } + } + + return GetSatisfiedPortionedRecipe(component, solidsDict, reagentDict, 0).Item1; + } +} diff --git a/Content.Server/SS220/SupaKitchen/Systems/RecipeAssemblerSystem.cs b/Content.Server/SS220/SupaKitchen/Systems/RecipeAssemblerSystem.cs new file mode 100644 index 000000000000..cf760c9a58a1 --- /dev/null +++ b/Content.Server/SS220/SupaKitchen/Systems/RecipeAssemblerSystem.cs @@ -0,0 +1,46 @@ +using Content.Shared.DoAfter; +using Content.Shared.SS220.SupaKitchen; +using Content.Shared.SS220.SupaKitchen.Components; +using Content.Shared.SS220.SupaKitchen.Systems; +using Robust.Shared.Prototypes; + +namespace Content.Server.SS220.SupaKitchen.Systems; + +public sealed partial class RecipeAssemblerSystem : SharedRecipeAssemblerSystem +{ + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnDoAfterAttempt); + SubscribeLocalEvent(OnDoAfter); + } + + private void OnDoAfterAttempt(Entity entity, ref DoAfterAttemptEvent args) + { + if (args.Cancelled) + return; + + var recipe = _prototype.Index(args.Event.Recipe); + + if (!CanCookRecipe(entity.Comp, recipe, entity.Comp.Entities, 0)) + args.Cancel(); + } + + private void OnDoAfter(Entity entity, ref RecipeAssemblerDoAfterEvent args) + { + if (args.Cancelled) + return; + + var recipe = _prototype.Index(args.Recipe); + if (!CanCookRecipe(entity.Comp, recipe, entity.Comp.Entities, 0)) + return; + + var spawnCords = Transform(entity).Coordinates; + Spawn(recipe.Result, spawnCords); + SubtractContents(entity.Comp.Entities, recipe); + } +} diff --git a/Content.Shared/Entry/EntryPoint.cs b/Content.Shared/Entry/EntryPoint.cs index df267b08cb11..0720d6cccc32 100644 --- a/Content.Shared/Entry/EntryPoint.cs +++ b/Content.Shared/Entry/EntryPoint.cs @@ -4,6 +4,7 @@ using Content.Shared.Humanoid.Markings; using Content.Shared.IoC; using Content.Shared.Maps; +using Content.Shared.SS220.SupaKitchen; using Robust.Shared; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; @@ -46,6 +47,7 @@ public override void PostInit() InitTileDefinitions(); IoCManager.Resolve().Initialize(); + IoCManager.Resolve().Initialize(); //SS220 Supa Kitchen #if DEBUG var configMan = IoCManager.Resolve(); diff --git a/Content.Shared/IoC/SharedContentIoC.cs b/Content.Shared/IoC/SharedContentIoC.cs index c20cdbc111e3..caa45ef6dd63 100644 --- a/Content.Shared/IoC/SharedContentIoC.cs +++ b/Content.Shared/IoC/SharedContentIoC.cs @@ -1,5 +1,6 @@ -using Content.Shared.Humanoid.Markings; +using Content.Shared.Humanoid.Markings; using Content.Shared.Localizations; +using Content.Shared.SS220.SupaKitchen; namespace Content.Shared.IoC { @@ -7,6 +8,7 @@ public static class SharedContentIoC { public static void Register() { + IoCManager.Register(); // SS220 Supa Kitchen IoCManager.Register(); IoCManager.Register(); } diff --git a/Content.Shared/SS220/SupaKitchen/Components/CookingInstrumentComponent.cs b/Content.Shared/SS220/SupaKitchen/Components/CookingInstrumentComponent.cs new file mode 100644 index 000000000000..ceb26dd40ae7 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/Components/CookingInstrumentComponent.cs @@ -0,0 +1,22 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Robust.Shared.Prototypes; + +namespace Content.Shared.SS220.SupaKitchen.Components; + +[RegisterComponent] +public abstract partial class BaseCookingInstrumentComponent : Component +{ + [DataField(required: true)] + [ViewVariables] + public ProtoId InstrumentType; + + [DataField] + public EntProtoId FailureResult = "FoodBadRecipe"; + + [ViewVariables] + [DataField] + public bool IgnoreTime = false; + + [DataField] + public List> AdditionalRecipes = []; +} diff --git a/Content.Shared/SS220/SupaKitchen/Components/RecipeAssemblerComponent.cs b/Content.Shared/SS220/SupaKitchen/Components/RecipeAssemblerComponent.cs new file mode 100644 index 000000000000..77464314c9f9 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/Components/RecipeAssemblerComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.SS220.SupaKitchen.Components; + +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState] +public sealed partial class RecipeAssemblerComponent : BaseCookingInstrumentComponent +{ + [AutoNetworkedField] + public HashSet Entities = []; +} diff --git a/Content.Shared/SS220/SupaKitchen/Components/SharedOvenComponent.cs b/Content.Shared/SS220/SupaKitchen/Components/SharedOvenComponent.cs new file mode 100644 index 000000000000..a7a1c59d3265 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/Components/SharedOvenComponent.cs @@ -0,0 +1,69 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.SS220.SupaKitchen.Components; + +[NetworkedComponent] +public abstract partial class SharedOvenComponent : BaseCookingInstrumentComponent +{ + #region State + [ViewVariables] + public OvenState LastState = OvenState.Idle; + + [ViewVariables] + public OvenState CurrentState + { + get => _currentState; + set + { + LastState = _currentState; + _currentState = value; + } + + } + + [ViewVariables] + private OvenState _currentState = OvenState.Idle; + #endregion + + [DataField] + public bool UseEntityStorage = true; + + #region Audio + public NetEntity? PlayingStream { get; set; } + #endregion +} + +[Serializable, NetSerializable] +public sealed class OvenComponentState : ComponentState +{ + public OvenState LastState; + public OvenState CurrentState; + public NetEntity? PlayingStream; + + public OvenComponentState(OvenState lastState, OvenState currentState, NetEntity? playingStream) + { + LastState = lastState; + CurrentState = currentState; + PlayingStream = playingStream; + } +} + +[Serializable, NetSerializable] +public enum OvenState +{ + UnPowered, + Idle, + Active, + Broken +} + +[Serializable, NetSerializable] +public enum OvenVisuals +{ + VisualState, + Active, + ActiveUnshaded +} diff --git a/Content.Shared/SS220/SupaKitchen/CookingRecipePrototype.cs b/Content.Shared/SS220/SupaKitchen/CookingRecipePrototype.cs new file mode 100644 index 000000000000..2b1315d1c005 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/CookingRecipePrototype.cs @@ -0,0 +1,63 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; + +namespace Content.Shared.SS220.SupaKitchen; + +[Prototype("cookingRecipe")] +public sealed class CookingRecipePrototype : IPrototype +{ + [ViewVariables] + [IdDataField] + public string ID { get; } = default!; + + [DataField("name")] + private string _name = string.Empty; + + [DataField("reagents", customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] + private readonly Dictionary _ingsReagents = new(); + + [DataField("solids", customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] + private readonly Dictionary _ingsSolids = new(); + + [DataField] + public ProtoId Result { get; } = string.Empty; + + [DataField(required: true)] + public ProtoId InstrumentType { get; } + + [DataField("time")] + public uint CookTime { get; } = 5; + + public string Name => Loc.GetString(_name); + + public IReadOnlyDictionary IngredientsReagents => _ingsReagents; + public IReadOnlyDictionary IngredientsSolids => _ingsSolids; + + [DataField] + public string RecipeGroup = "without a category"; + + /// + /// Is this recipe unavailable in normal circumstances? + /// + [DataField] + public bool SecretRecipe = false; + + /// + /// Count the number of ingredients in a recipe for sorting the recipe list. + /// This makes sure that where ingredient lists overlap, the more complex + /// recipe is picked first. + /// + public FixedPoint2 IngredientCount() + { + FixedPoint2 n = 0; + n += _ingsReagents.Count; // number of distinct reagents + foreach (FixedPoint2 i in _ingsSolids.Values) // sum the number of solid ingredients + { + n += i; + } + return n; + } +} diff --git a/Content.Shared/SS220/SupaKitchen/InstrumentTypePrototype.cs b/Content.Shared/SS220/SupaKitchen/InstrumentTypePrototype.cs new file mode 100644 index 000000000000..6a72230bd9f9 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/InstrumentTypePrototype.cs @@ -0,0 +1,20 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Robust.Shared.Prototypes; + +namespace Content.Shared.SS220.SupaKitchen; + +[Prototype("cookingInstrumentType")] +public sealed class CookingInstrumentTypePrototype : IPrototype +{ + [ViewVariables] + [IdDataField] + public string ID { get; } = default!; + + [DataField("name")] + private string _name = string.Empty; + + public string Name => Loc.GetString(_name); + + [DataField] + public string? IconPath; +} diff --git a/Content.Shared/SS220/SupaKitchen/SupaMicrowaveShared.cs b/Content.Shared/SS220/SupaKitchen/SupaMicrowaveShared.cs new file mode 100644 index 000000000000..86a27fd72298 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/SupaMicrowaveShared.cs @@ -0,0 +1,27 @@ +using Content.Shared.Chemistry.Reagent; +using Robust.Shared.Serialization; + +namespace Content.Shared.SS220.SupaKitchen; + +[Serializable, NetSerializable] +public enum SupaMicrowaveState +{ + Idle, + UnPowered, + Cooking, + Broken +} + +[Serializable, NetSerializable] +public enum SupaMicrowaveVisualState +{ + Idle, + Cooking, + Broken +} + +[Serializable, NetSerializable] +public enum SupaMicrowaveUiKey +{ + Key +} diff --git a/Content.Shared/SS220/SupaKitchen/SupaRecipeManager.cs b/Content.Shared/SS220/SupaKitchen/SupaRecipeManager.cs new file mode 100644 index 000000000000..3f7af15553a4 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/SupaRecipeManager.cs @@ -0,0 +1,53 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Robust.Shared.Prototypes; + +namespace Content.Shared.SS220.SupaKitchen; + +public sealed class SupaRecipeManager +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + public List Recipes { get; private set; } = new(); + + public void Initialize() + { + Recipes = new List(); + foreach (var item in _prototypeManager.EnumeratePrototypes()) + { + if (!item.SecretRecipe) + Recipes.Add(item); + } + + Recipes.Sort(new RecipeComparer()); + } + /// + /// Check if a prototype ids appears in any of the recipes that exist. + /// + public bool SolidAppears(string solidId) + { + return Recipes.Any(recipe => recipe.IngredientsSolids.ContainsKey(solidId)); + } + + public CookingRecipePrototype? TryGetRecipePrototype(string id) + { + _prototypeManager.TryIndex(id, out CookingRecipePrototype? prototype); + return prototype; + } + + private sealed class RecipeComparer : Comparer + { + public override int Compare(CookingRecipePrototype? x, CookingRecipePrototype? y) + { + if (x == null || y == null) + { + return 0; + } + + var nx = x.IngredientCount(); + var ny = y.IngredientCount(); + return -nx.CompareTo(ny); + } + } +} diff --git a/Content.Shared/SS220/SupaKitchen/Systems/CookingInstrumentSystem.cs b/Content.Shared/SS220/SupaKitchen/Systems/CookingInstrumentSystem.cs new file mode 100644 index 000000000000..aac33b2ca30d --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/Systems/CookingInstrumentSystem.cs @@ -0,0 +1,239 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.FixedPoint; +using Content.Shared.SS220.SupaKitchen.Components; +using Robust.Shared.Containers; +using System.Linq; + +namespace Content.Shared.SS220.SupaKitchen.Systems; + +public abstract partial class CookingInstrumentSystem : EntitySystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly SupaRecipeManager _recipeManager = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + + public override void Initialize() + { + base.Initialize(); + } + + public static (CookingRecipePrototype, int) SatisfyRecipe( + BaseCookingInstrumentComponent component, + CookingRecipePrototype recipe, + Dictionary solids, + Dictionary reagents, + uint cookingTimer + ) + { + var portions = 0; + + if (component.InstrumentType != recipe.InstrumentType) + return (recipe, 0); + + if ( + cookingTimer % recipe.CookTime != 0 + && !component.IgnoreTime + ) + { + //can't be a multiple of this recipe + return (recipe, 0); + } + + foreach (var solid in recipe.IngredientsSolids) + { + if (!solids.ContainsKey(solid.Key)) + return (recipe, 0); + + if (solids[solid.Key] < solid.Value) + return (recipe, 0); + + portions = (int)(portions == 0 + ? solids[solid.Key] / solid.Value + : Math.Min(portions, solids[solid.Key] / solid.Value)); + } + + foreach (var reagent in recipe.IngredientsReagents) + { + if (!reagents.ContainsKey(reagent.Key)) + return (recipe, 0); + + if (reagents[reagent.Key] < reagent.Value) + return (recipe, 0); + + portions = portions == 0 + ? reagents[reagent.Key].Int() / reagent.Value.Int() + : Math.Min(portions, reagents[reagent.Key].Int() / reagent.Value.Int()); + } + + //cook only as many of those portions as time allows + if (!component.IgnoreTime) + portions = (int)Math.Min(portions, cookingTimer / recipe.CookTime); + + + return (recipe, portions); + } + + public void SubtractContents(Container container, CookingRecipePrototype recipe) + { + SubtractContents(container.ContainedEntities, recipe, container); + } + + public void SubtractContents(IEnumerable entities, CookingRecipePrototype recipe, Container? contaiter = null) + { + SubtractContents(entities.ToList(), recipe, contaiter); + } + + public void SubtractContents(List entities, CookingRecipePrototype recipe, Container? contaiter = null) + { + var totalReagentsToRemove = new Dictionary(recipe.IngredientsReagents); + + // this is spaghetti ngl + foreach (var item in entities) + { + if (!TryComp(item, out var solMan)) + continue; + + // go over every solution + foreach (var (_, soln) in _solutionContainer.EnumerateSolutions((item, solMan))) + { + var solution = soln.Comp.Solution; + foreach (var (reagent, _) in recipe.IngredientsReagents) + { + // removed everything + if (!totalReagentsToRemove.ContainsKey(reagent)) + continue; + + var quant = solution.GetTotalPrototypeQuantity(reagent); + + if (quant >= totalReagentsToRemove[reagent]) + { + quant = totalReagentsToRemove[reagent]; + totalReagentsToRemove.Remove(reagent); + } + else + { + totalReagentsToRemove[reagent] -= quant; + } + + _solutionContainer.RemoveReagent(soln, reagent, quant); + } + } + } + + foreach (var recipeSolid in recipe.IngredientsSolids) + { + var amount = recipeSolid.Value; + for (var i = 0; i < entities.Count && amount > 0; i++) + { + var currentEnt = entities[i]; + var proto = Prototype(currentEnt); + + if (proto?.ID == recipeSolid.Key) + { + if (contaiter != null) + _container.Remove(currentEnt, contaiter); + + EntityManager.DeleteEntity(currentEnt); + entities.RemoveAt(i); + i--; + amount--; + } + } + } + } + + public (CookingRecipePrototype, int) GetSatisfiedPortionedRecipe( + BaseCookingInstrumentComponent component, + IEnumerable entities, + uint cookingTimer) + { + return GetSatisfiedPortionedRecipe(component, GetSolids(entities), GetReagents(entities), cookingTimer); + } + + public (CookingRecipePrototype, int) GetSatisfiedPortionedRecipe( + BaseCookingInstrumentComponent component, + Dictionary solidsDict, + Dictionary reagentDict, + uint cookingTimer + ) + { + if (component.AdditionalRecipes.Count > 0) + { + foreach (var recipeId in component.AdditionalRecipes) + { + var recipe = _recipeManager.TryGetRecipePrototype(recipeId); + if (recipe is null) + continue; + + var satisfiedRecipe = SatisfyRecipe(component, recipe, solidsDict, reagentDict, cookingTimer); + if (satisfiedRecipe.Item2 > 0) + return satisfiedRecipe; + } + } + + return _recipeManager.Recipes.Select(r => + SatisfyRecipe(component, r, solidsDict, reagentDict, cookingTimer)).FirstOrDefault(r => r.Item2 > 0); + } + + public Dictionary GetSatisfiedRecipes( + BaseCookingInstrumentComponent component, + IEnumerable entities, + uint cookingTimer) + { + return _recipeManager.Recipes.Select(r => + SatisfyRecipe(component, r, GetSolids(entities), GetReagents(entities), cookingTimer)) + .Where(r => r.Item2 > 0) + .ToDictionary(r => r.Item1, r => r.Item2); + } + + public Dictionary GetSolids(IEnumerable entities) + { + Dictionary solids = new(); + foreach (var entity in entities) + { + var metaData = MetaData(entity); + if (metaData.EntityPrototype is null) + continue; + + if (!solids.TryAdd(metaData.EntityPrototype.ID, 1)) + solids[metaData.EntityPrototype.ID]++; + } + + return solids; + } + + public Dictionary GetReagents(IEnumerable entities) + { + Dictionary reagents = new(); + foreach (var entity in entities) + { + if (!TryComp(entity, out var solMan)) + continue; + + foreach (var (_, soln) in _solutionContainer.EnumerateSolutions((entity, solMan))) + { + var solution = soln.Comp.Solution; + { + foreach (var (reagent, quantity) in solution.Contents) + { + if (!reagents.TryAdd(reagent.Prototype, quantity)) + reagents[reagent.Prototype] += quantity; + } + } + } + } + + return reagents; + } + + public bool CanCookRecipe(BaseCookingInstrumentComponent component, + CookingRecipePrototype recipe, + IEnumerable entities, + uint cookingTimer) + { + var satisfiedRecipe = SatisfyRecipe(component, recipe, GetSolids(entities), GetReagents(entities), cookingTimer); + return satisfiedRecipe.Item2 > 0; + } +} diff --git a/Content.Shared/SS220/SupaKitchen/Systems/SharedOvenSystem.cs b/Content.Shared/SS220/SupaKitchen/Systems/SharedOvenSystem.cs new file mode 100644 index 000000000000..6cc3a4887bbc --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/Systems/SharedOvenSystem.cs @@ -0,0 +1,65 @@ +// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt +using Content.Shared.SS220.SupaKitchen.Components; +using Content.Shared.Storage.Components; +using Robust.Shared.Audio.Systems; +using Robust.Shared.GameStates; + +namespace Content.Shared.SS220.SupaKitchen.Systems; + +public abstract partial class SharedOvenSystem : CookingInstrumentSystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + #region Storage + protected void OnStorageOpenAttempt(Entity entity, ref StorageOpenAttemptEvent args) where T : SharedOvenComponent + { + if (args.Cancelled || !entity.Comp.UseEntityStorage) + return; + + if (entity.Comp.CurrentState is OvenState.Broken) + args.Cancelled = true; + } + + protected void OnStorageCloseAttempt(Entity entity, ref StorageCloseAttemptEvent args) where T : SharedOvenComponent + { + if (args.Cancelled || !entity.Comp.UseEntityStorage) + return; + + if (entity.Comp.CurrentState is OvenState.Broken) + args.Cancelled = true; + } + + protected void OnStorageOpen(Entity entity, ref StorageAfterOpenEvent args) where T : SharedOvenComponent + { + Deactivate(entity, entity); + } + #endregion + + public void Deactivate(EntityUid uid, SharedOvenComponent component, bool changeState = true) + { + if (component.CurrentState != OvenState.Active) + return; + + if (changeState) + SetState(uid, component, OvenState.Idle); + + _audio.Stop(GetEntity(component.PlayingStream)); + } + + public void SetState(EntityUid uid, SharedOvenComponent component, OvenState state) + { + component.CurrentState = state; + Dirty(uid, component); + + UpdateAppearance(uid, component); + } + + private void UpdateAppearance(EntityUid uid, SharedOvenComponent component) + { + var isActive = component.CurrentState is OvenState.Active; + + _appearance.SetData(uid, OvenVisuals.VisualState, component.CurrentState); + _appearance.SetData(uid, OvenVisuals.Active, isActive); + } +} diff --git a/Content.Shared/SS220/SupaKitchen/Systems/SharedRecipeAssemblerSystem.cs b/Content.Shared/SS220/SupaKitchen/Systems/SharedRecipeAssemblerSystem.cs new file mode 100644 index 000000000000..160a7ed6a5d2 --- /dev/null +++ b/Content.Shared/SS220/SupaKitchen/Systems/SharedRecipeAssemblerSystem.cs @@ -0,0 +1,90 @@ +using Content.Shared.DoAfter; +using Content.Shared.Placeable; +using Content.Shared.SS220.SupaKitchen.Components; +using Content.Shared.Verbs; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.SS220.SupaKitchen.Systems; + +public abstract partial class SharedRecipeAssemblerSystem : CookingInstrumentSystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnAlternativeVerb); + + /// ItemPlacer + SubscribeLocalEvent(OnItemPlaced); + SubscribeLocalEvent(OnItemRemoved); + } + + private void OnAlternativeVerb(Entity entity, ref GetVerbsEvent args) + { + var user = args.User; + var recipes = GetSatisfiedRecipes(entity.Comp, entity.Comp.Entities, 0); + + foreach (var (recipe, count) in recipes) + { + for (var i = 0; i < count; i++) + { + var proto = _prototypeManager.Index(recipe.Result.Id); + var verb = new AlternativeVerb() + { + Text = Loc.GetString("recipe-assembler-verb", ("result", proto.Name), ("cookingTime", recipe.CookTime)), + Category = VerbCategory.AvalibleRecipes, + Act = () => StartAssembling(entity, recipe, user) + }; + + args.Verbs.Add(verb); + } + } + } + + protected void StartAssembling(Entity entity, + CookingRecipePrototype recipe, + EntityUid user) + { + var doAfter = new DoAfterArgs(EntityManager, user, TimeSpan.FromSeconds(recipe.CookTime), new RecipeAssemblerDoAfterEvent(recipe.ID), entity) + { + BreakOnMove = true, + BreakOnDamage = true, + DistanceThreshold = 2, + BlockDuplicate = true, + DuplicateCondition = DuplicateConditions.SameEvent, + AttemptFrequency = AttemptFrequency.EveryTick, + }; + + _doAfter.TryStartDoAfter(doAfter); + } + + #region ItemPlacer + private void OnItemPlaced(Entity entity, ref ItemPlacedEvent args) + { + entity.Comp.Entities.Add(args.OtherEntity); + Dirty(entity); + } + + private void OnItemRemoved(Entity entity, ref ItemRemovedEvent args) + { + entity.Comp.Entities.Remove(args.OtherEntity); + Dirty(entity); + } + #endregion +} + +[Serializable, NetSerializable] +public sealed partial class RecipeAssemblerDoAfterEvent : SimpleDoAfterEvent +{ + public readonly string Recipe; + + public RecipeAssemblerDoAfterEvent(string recipe) + { + Recipe = recipe; + } +} diff --git a/Content.Shared/UserInterface/ActivatableUIComponent.cs b/Content.Shared/UserInterface/ActivatableUIComponent.cs index 0e124070fc7b..3c80c20e2137 100644 --- a/Content.Shared/UserInterface/ActivatableUIComponent.cs +++ b/Content.Shared/UserInterface/ActivatableUIComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Whitelist; +using Content.Shared.Whitelist; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations; @@ -73,5 +73,10 @@ public sealed partial class ActivatableUIComponent : Component /// [DataField, AutoNetworkedField] public EntityUid? CurrentSingleUser; + + // SS220 Alternative-open-verb + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public bool AltentativeVerbOnly = false; } } diff --git a/Content.Shared/UserInterface/ActivatableUISystem.cs b/Content.Shared/UserInterface/ActivatableUISystem.cs index f3f73bd01a6f..ea25e1ff2e6b 100644 --- a/Content.Shared/UserInterface/ActivatableUISystem.cs +++ b/Content.Shared/UserInterface/ActivatableUISystem.cs @@ -35,6 +35,7 @@ public override void Initialize() SubscribeLocalEvent(OnHandUnequipped); SubscribeLocalEvent(OnUIClose); SubscribeLocalEvent>(GetActivationVerb); + SubscribeLocalEvent>(GetAlternativeVerb); // SS220 Alternative-open-verb SubscribeLocalEvent>(GetVerb); SubscribeLocalEvent(OnActionPerform); @@ -86,6 +87,10 @@ private void GetActivationVerb(EntityUid uid, ActivatableUIComponent component, if (component.VerbOnly || !ShouldAddVerb(uid, component, args)) return; + // SS220 Alternative-open-verb + if (component.AltentativeVerbOnly) + return; + args.Verbs.Add(new ActivationVerb { Act = () => InteractUI(args.User, uid, component), @@ -100,6 +105,10 @@ private void GetVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEv if (!component.VerbOnly || !ShouldAddVerb(uid, component, args)) return; + // SS220 Alternative-open-verb + if (component.AltentativeVerbOnly) + return; + args.Verbs.Add(new Verb { Act = () => InteractUI(args.User, uid, component), @@ -109,6 +118,25 @@ private void GetVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEv }); } + // SS220 Alternative-open-verb begin + private void GetAlternativeVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEvent args) + { + if (component.VerbOnly || !ShouldAddVerb(uid, component, args)) + return; + + if (!component.AltentativeVerbOnly) + return; + + args.Verbs.Add(new AlternativeVerb + { + Act = () => InteractUI(args.User, uid, component), + Text = Loc.GetString(component.VerbText), + + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/settings.svg.192dpi.png")), + }); + } + // SS220 Alternative-open-verb end + private bool ShouldAddVerb(EntityUid uid, ActivatableUIComponent component, GetVerbsEvent args) where T : Verb { if (!args.CanAccess) @@ -154,7 +182,8 @@ private void OnActivate(EntityUid uid, ActivatableUIComponent component, Activat if (args.Handled || !args.Complex) return; - if (component.VerbOnly) + if (component.VerbOnly || + component.AltentativeVerbOnly) // SS220 Alternative-open-verb return; if (component.RequiredItems != null) @@ -168,7 +197,8 @@ private void OnInteractUsing(EntityUid uid, ActivatableUIComponent component, In if (args.Handled) return; - if (component.VerbOnly) + if (component.VerbOnly || + component.AltentativeVerbOnly) // SS220 Alternative-open-verb return; if (component.RequiredItems == null) diff --git a/Content.Shared/Verbs/VerbCategory.cs b/Content.Shared/Verbs/VerbCategory.cs index 4647a921d545..c9a1bce6adbd 100644 --- a/Content.Shared/Verbs/VerbCategory.cs +++ b/Content.Shared/Verbs/VerbCategory.cs @@ -95,5 +95,9 @@ public VerbCategory(string text, string? icon, bool iconsOnly = false) //SS220-SpecialSound-system end public static readonly VerbCategory PowerLevel = new("verb-categories-power-level", null); + + // SS220 Supa kitchen begin + public static readonly VerbCategory AvalibleRecipes = new("verb-categories-avalible-recipes", null); + // SS220 Supa kitchen end } } diff --git a/Resources/Audio/SS220/SupaKitchen/attributions.yml b/Resources/Audio/SS220/SupaKitchen/attributions.yml new file mode 100644 index 000000000000..3fe1b552561a --- /dev/null +++ b/Resources/Audio/SS220/SupaKitchen/attributions.yml @@ -0,0 +1,8 @@ +- files: ["grillsizzle.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at commit 8a77f32d273b66d74000fcef78c5661521c8ffd3" + source: "https://github.com/tgstation/tgstation/blob/8a77f32d273b66d74000fcef78c5661521c8ffd3/sound/machines/grill/grillsizzle.ogg" +- files: ["ring.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at commit 8a77f32d273b66d74000fcef78c5661521c8ffd3" + source: "https://github.com/tgstation/tgstation/blob/8a77f32d273b66d74000fcef78c5661521c8ffd3/sound/machines/microwave/microwave-end.ogg" \ No newline at end of file diff --git a/Resources/Audio/SS220/SupaKitchen/grillsizzle.ogg b/Resources/Audio/SS220/SupaKitchen/grillsizzle.ogg new file mode 100644 index 000000000000..7c9833d0ee1f Binary files /dev/null and b/Resources/Audio/SS220/SupaKitchen/grillsizzle.ogg differ diff --git a/Resources/Audio/SS220/SupaKitchen/oven/attributions.yml b/Resources/Audio/SS220/SupaKitchen/oven/attributions.yml new file mode 100644 index 000000000000..bafef71a2ff8 --- /dev/null +++ b/Resources/Audio/SS220/SupaKitchen/oven/attributions.yml @@ -0,0 +1,20 @@ +- files: ["oven_close.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at commit 8a77f32d273b66d74000fcef78c5661521c8ffd3" + source: "https://github.com/tgstation/tgstation/blob/8a77f32d273b66d74000fcef78c5661521c8ffd3/sound/machines/oven/oven_close.ogg" +- files: ["oven_open.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at commit 8a77f32d273b66d74000fcef78c5661521c8ffd3" + source: "https://github.com/tgstation/tgstation/blob/8a77f32d273b66d74000fcef78c5661521c8ffd3/sound/machines/oven/oven_open.ogg" +- files: ["oven_loop_start.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at commit 8a77f32d273b66d74000fcef78c5661521c8ffd3" + source: "https://github.com/tgstation/tgstation/blob/8a77f32d273b66d74000fcef78c5661521c8ffd3/sound/machines/oven/oven_loop_start.ogg" +- files: ["oven_loop_mid.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at commit 8a77f32d273b66d74000fcef78c5661521c8ffd3" + source: "https://github.com/tgstation/tgstation/blob/8a77f32d273b66d74000fcef78c5661521c8ffd3/sound/machines/oven/oven_loop_mid.ogg" +- files: ["oven_loop_end.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from tgstation at commit 8a77f32d273b66d74000fcef78c5661521c8ffd3" + source: "https://github.com/tgstation/tgstation/blob/8a77f32d273b66d74000fcef78c5661521c8ffd3/sound/machines/oven/oven_loop_end.ogg" \ No newline at end of file diff --git a/Resources/Audio/SS220/SupaKitchen/oven/oven_close.ogg b/Resources/Audio/SS220/SupaKitchen/oven/oven_close.ogg new file mode 100644 index 000000000000..dfbbb30bcfa7 Binary files /dev/null and b/Resources/Audio/SS220/SupaKitchen/oven/oven_close.ogg differ diff --git a/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_end.ogg b/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_end.ogg new file mode 100644 index 000000000000..d06c24776c2a Binary files /dev/null and b/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_end.ogg differ diff --git a/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_mid.ogg b/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_mid.ogg new file mode 100644 index 000000000000..5bf05fbce0a2 Binary files /dev/null and b/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_mid.ogg differ diff --git a/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_start.ogg b/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_start.ogg new file mode 100644 index 000000000000..f340aa2becd9 Binary files /dev/null and b/Resources/Audio/SS220/SupaKitchen/oven/oven_loop_start.ogg differ diff --git a/Resources/Audio/SS220/SupaKitchen/oven/oven_open.ogg b/Resources/Audio/SS220/SupaKitchen/oven/oven_open.ogg new file mode 100644 index 000000000000..97dd8f6235d5 Binary files /dev/null and b/Resources/Audio/SS220/SupaKitchen/oven/oven_open.ogg differ diff --git a/Resources/Audio/SS220/SupaKitchen/ring.ogg b/Resources/Audio/SS220/SupaKitchen/ring.ogg new file mode 100644 index 000000000000..c3b143c1a11f Binary files /dev/null and b/Resources/Audio/SS220/SupaKitchen/ring.ogg differ diff --git a/Resources/Locale/ru-RU/ss220/supa-kitchen/cookbook.ftl b/Resources/Locale/ru-RU/ss220/supa-kitchen/cookbook.ftl new file mode 100644 index 000000000000..cc7d00cd90a9 --- /dev/null +++ b/Resources/Locale/ru-RU/ss220/supa-kitchen/cookbook.ftl @@ -0,0 +1,2 @@ +guidebook-cooking-recipes-ingredient-display = [bold]{$reagent}[/bold] \[{$ratio}\] +guidebook-cooking-recipes-timer-display = ({$time} сек) \ No newline at end of file diff --git a/Resources/Locale/ru-RU/ss220/supa-kitchen/cooking-machines.ftl b/Resources/Locale/ru-RU/ss220/supa-kitchen/cooking-machines.ftl new file mode 100644 index 000000000000..34281dee6f36 --- /dev/null +++ b/Resources/Locale/ru-RU/ss220/supa-kitchen/cooking-machines.ftl @@ -0,0 +1,11 @@ +ent-KitchenGrill = гриль + .desc = Видавший виды гриль, основательно измазанный жиром. Эта сравнительно дешевая и проверенная временем модель ставится на всех кухнях исследовательских станций NanoTrasen. +ent-KitchenStove = духовка + .desc = Духовой шкаф с электроплитой сверху. + +ent-KitchenOven = духовка + +ent-OvenMachineCircuitboard = духовка (машинная плата) + .desc = { ent-BaseMachineCircuitboard.desc } +ent-GrillMachineCircuitboard = гриль (машинная плата) + .desc = { ent-BaseMachineCircuitboard.desc } diff --git a/Resources/Locale/ru-RU/ss220/supa-kitchen/recipe-assembler.ftl b/Resources/Locale/ru-RU/ss220/supa-kitchen/recipe-assembler.ftl new file mode 100644 index 000000000000..6742ac5c194a --- /dev/null +++ b/Resources/Locale/ru-RU/ss220/supa-kitchen/recipe-assembler.ftl @@ -0,0 +1,7 @@ +verb-categories-avalible-recipes = Доступные рецепты + +recipe-assembler-verb = { $result } - { $cookingTime } { $cookingTime -> + [one] секунда + [few] секунды + *[other] секунд + }. diff --git a/Resources/Locale/ru-RU/ss220/supa-kitchen/supa_microwave.ftl b/Resources/Locale/ru-RU/ss220/supa-kitchen/supa_microwave.ftl new file mode 100644 index 000000000000..6cb19d3a186d --- /dev/null +++ b/Resources/Locale/ru-RU/ss220/supa-kitchen/supa_microwave.ftl @@ -0,0 +1,24 @@ +## Entity + +supa-microwave-component-interact-using-no-power = { CAPITALIZE($machine) } без электричества! +supa-microwave-component-interact-using-broken = { CAPITALIZE($machine) } не работает! +supa-microwave-component-interact-using-container-full = Контейнер заполнен +supa-microwave-component-interact-using-transfer-success = Перенесено { $amount } ю +supa-microwave-component-interact-using-transfer-fail = Это не сработает! +supa-microwave-component-suicide-multi-head-others-message = { $victim } пытается зажарить свои головы! +supa-microwave-component-suicide-others-message = { $victim } пытается зажарить свою голову! +supa-microwave-component-suicide-multi-head-message = Вы зажариваете свои головы! +supa-microwave-component-suicide-message = Вы зажариваете свою голову! +supa-microwave-component-upgrade-cook-time = время готовки + +## Bound UI + +supa-microwave-bound-user-interface-cook-time-label = ВРЕМЯ: { $time } + +## UI + +supa-microwave-menu-title = Микроволновка +supa-microwave-menu-start-button = Старт +supa-microwave-menu-eject-all-text = Извлечь всё +supa-microwave-menu-eject-all-tooltip = Это испарит все жидкости и порошки, но вернёт всё твёрдое. +supa-microwave-menu-instant-button = МГНОВЕННО diff --git a/Resources/Prototypes/Corvax/Recipes/Cooking/meat_recipes.yml b/Resources/Prototypes/Corvax/Recipes/Cooking/meat_recipes.yml index 2381263ef851..fc39dcfe687c 100644 --- a/Resources/Prototypes/Corvax/Recipes/Cooking/meat_recipes.yml +++ b/Resources/Prototypes/Corvax/Recipes/Cooking/meat_recipes.yml @@ -1,5 +1,5 @@ - type: microwaveMealRecipe - id: RecipePelmeni + id: RecipePelmeni # SS220 Added to supa kitchen (microwave) name: pelmeni recipe result: FoodPelmeniBowl time: 10 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/donkpocketbox.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/donkpocketbox.yml index fb52cd1c40d2..51fea497cf7d 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/donkpocketbox.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/donkpocketbox.yml @@ -15,6 +15,7 @@ - FoodBoxDonkpocketTeriyaki - FoodBoxDonkpocketPizza - FoodBoxDonkpocketStonk + - FoodBoxDonkpocketGondola # SS220 GONDOLA-IS-BACK :D:D - FoodBoxDonkpocketBerry - FoodBoxDonkpocketHonk - FoodBoxDonkpocketDink diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml index c7e46d9a94a0..b83908c21270 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml @@ -256,7 +256,7 @@ name: berry-pocket parent: FoodDonkpocketBase id: FoodDonkpocketBerry - description: A relentlessly sweet donk-pocket. Made with 100% artificial flavoring. + description: A relentlessly sweet donk-pocket first created for use in Operation Iraqi Freedom. components: - type: FlavorProfile flavors: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml index db8c186856e3..6d9647e9725c 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml @@ -608,6 +608,11 @@ Quantity: 2 - ReagentId: Vitamin Quantity: 0.5 + # SS220 Supa kitchen begin + - type: Construction + graph: BakedChevreChaud + node: bakedChevreChaud + # SS220 Supa kitchen end - type: entity name: cotton chèvre chaud @@ -640,6 +645,11 @@ Quantity: 1 - ReagentId: Vitamin Quantity: 0.5 + # SS220 Supa kitchen begin + - type: Construction + graph: BakedChevreChaudCotton + node: bakedChevreChaudCotton + # SS220 Supa kitchen end - type: entity name: brownies diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml index 0ba1bdf6ab72..d84b4a463f8e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meals.yml @@ -350,7 +350,7 @@ description: BBQ ribs, slathered in a healthy coating of BBQ sauce. The least vegan thing to ever exist. components: - type: Food - trash: + trash: - FoodKebabSkewer - type: FlavorProfile flavors: @@ -372,6 +372,11 @@ - type: Tag tags: - Meat + # SS220 Supa kitchen begin + - type: Construction + graph: MealRibs + node: mealRibs + # SS220 Supa kitchen end # Tastes like meat, smokey sauce. - type: entity @@ -572,6 +577,11 @@ - type: Tag tags: - Meat + # SS220 Supa kitchen begin + - type: Construction + graph: MealEnchiladas + node: mealEnchiladas + # SS220 Supa kitchen end # What do Europeans eat instead of enchiladas? 25.4 millimeter-iladas. - type: entity @@ -612,7 +622,7 @@ description: Buttery. components: - type: Food - trash: + trash: - FoodPlate - type: FlavorProfile flavors: diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index e9ddd3b517da..350155251a27 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -272,6 +272,8 @@ orGroup: GiftPool - id: FoodBoxDonkpocketCarp orGroup: GiftPool + - id: FoodBoxDonkpocketGondola # SS220 GONDOLA-IS-BACK :D:D + orGroup: GiftPool - id: FoodBoxDonkpocketBerry orGroup: GiftPool - id: FoodBoxDonkpocketHonk diff --git a/Resources/Prototypes/Entities/Structures/Machines/microwave.yml b/Resources/Prototypes/Entities/Structures/Machines/microwave.yml index 838d096bd98f..04f5668edddb 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/microwave.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/microwave.yml @@ -4,8 +4,18 @@ name: microwave description: It's magic. components: - - type: Microwave - capacity: 10 +# - type: Microwave #SS220 remove default microwave +# capacity: 10 + #SS220 supa kitchen begin + - type: SupaMicrowave + instrumentType: microwave + - type: ActivatableUI + key: enum.SupaMicrowaveUiKey.Key + - type: UserInterface + interfaces: + enum.SupaMicrowaveUiKey.Key: + type: MicrowaveBoundUserInterface + #SS220 supa kitchen end - type: Appearance - type: GenericVisualizer visuals: @@ -17,11 +27,11 @@ True: { visible: true } False: { visible: false } enum.PowerDeviceVisuals.VisualState: - enum.MicrowaveVisualizerLayers.Base: + enum.SupaMicrowaveVisualizerLayers.Base: Idle: { state: "mw" } Broken: { state: "mwb" } Cooking: { state: "mw" } - enum.MicrowaveVisualizerLayers.BaseUnlit: + enum.SupaMicrowaveVisualizerLayers.BaseUnlit: Idle: { state: "mw_unlit" } Broken: { state: "mw_unlit" } Cooking: { state: "mw_running_unlit" } @@ -29,11 +39,13 @@ Idle: { visible: false } Broken: { visible: false } enum.PowerDeviceVisuals.Powered: - enum.MicrowaveVisualizerLayers.BaseUnlit: + enum.SupaMicrowaveVisualizerLayers.BaseUnlit: True: { visible: true } False: { visible: false } - - type: ActivatableUI - key: enum.MicrowaveUiKey.Key +#SS220 remove default microwave begin +# - type: ActivatableUI +# key: enum.MicrowaveUiKey.Key +#SS220 remove default microwave end - type: DeviceLinkSink ports: - On @@ -42,10 +54,12 @@ receiveFrequencyId: BasicDevice - type: WirelessNetworkConnection range: 200 - - type: UserInterface - interfaces: - enum.MicrowaveUiKey.Key: - type: MicrowaveBoundUserInterface +#SS220 remove default microwave begin +# - type: UserInterface +# interfaces: +# enum.MicrowaveUiKey.Key: +# type: MicrowaveBoundUserInterface +#SS220 remove default microwave end - type: Physics - type: Fixtures fixtures: @@ -64,10 +78,10 @@ snapCardinals: true layers: - state: mw0 - map: ["enum.MicrowaveVisualizerLayers.Base"] + map: ["enum.SupaMicrowaveVisualizerLayers.Base"] - state: mw_unlit shader: unshaded - map: ["enum.MicrowaveVisualizerLayers.BaseUnlit"] + map: ["enum.SupaMicrowaveVisualizerLayers.BaseUnlit"] - state: mwbloody0 map: ["bloody"] visible: false @@ -96,7 +110,8 @@ board: MicrowaveMachineCircuitboard - type: ContainerContainer containers: - microwave_entity_container: !type:Container + # microwave_entity_container: !type:Container #SS220 supa kitchen + supa_microwave_entity_container: !type:Container #SS220 supa kitchen machine_board: !type:Container machine_parts: !type:Container - type: EmptyOnMachineDeconstruct @@ -113,19 +128,29 @@ name: donk co. microwave description: So advanced, it can cook donk-pockets in a mere 2.5 seconds! components: - - type: Microwave - cookTimeMultiplier: 0.5 - capacity: 10 - canMicrowaveIdsSafely: false - idCardExplosionChance: 0.1 #SS220 Microwave explosion tweak - explosionChance: 0.3 + #SS220 remove default microwave begin + # - type: Microwave + # cookTimeMultiplier: 0.5 + # capacity: 10 + # canMicrowaveIdsSafely: false + # idCardExplosionChance: 0.1 #SS220 Microwave explosion tweak + # explosionChance: 0.3 + #SS220 remove default microwave end + #SS220 supa kitchen begin + - type: SupaMicrowave + additionalRecipes: + - RecipeBaguetteSword + - RecipeThrowingCroissant + #SS220 supa kitchen end - type: Sprite sprite: Structures/Machines/microwave_syndie.rsi drawdepth: SmallObjects snapCardinals: true - type: Machine board: SyndicateMicrowaveMachineCircuitboard - - type: FoodRecipeProvider - providedRecipes: - - RecipeBaguetteSword - - RecipeThrowingCroissant + #SS220 remove default microwave begin + # - type: FoodRecipeProvider + # providedRecipes: + # - RecipeBaguetteSword + # - RecipeThrowingCroissant + #SS220 remove default microwave end diff --git a/Resources/Prototypes/Guidebook/references.yml b/Resources/Prototypes/Guidebook/references.yml index 502961fb2e65..e56c2f46aaed 100644 --- a/Resources/Prototypes/Guidebook/references.yml +++ b/Resources/Prototypes/Guidebook/references.yml @@ -18,6 +18,7 @@ id: FoodRecipes name: guide-entry-foodrecipes text: "/ServerInfo/Guidebook/Service/FoodRecipes.xml" + filterEnabled: True - type: guideEntry id: Writing diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index 7f3b810c7a38..0c22f40739a0 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -1,5 +1,5 @@ - type: microwaveMealRecipe - id: RecipeBun + id: RecipeBun # SS220 Added to supa kitchen (oven) name: bun recipe result: FoodBreadBun time: 5 @@ -8,7 +8,7 @@ #Bagels - type: microwaveMealRecipe - id: RecipeBagel + id: RecipeBagel # SS220 Added to supa kitchen (oven) name: bagel recipe result: FoodBagel time: 5 @@ -16,7 +16,7 @@ FoodDoughRope: 1 # created by rolling a dough slice. - type: microwaveMealRecipe - id: RecipeBagelPoppy + id: RecipeBagelPoppy # SS220 Added to supa kitchen (oven) name: poppyseed bagel recipe result: FoodBagelPoppy time: 5 @@ -25,7 +25,7 @@ PoppySeeds: 1 - type: microwaveMealRecipe - id: RecipeBagelCotton + id: RecipeBagelCotton # SS220 Added to supa kitchen (oven) name: cotton bagel recipe result: FoodBagelCotton time: 5 @@ -35,7 +35,7 @@ #Burgers - type: microwaveMealRecipe - id: RecipeAppendixBurger + id: RecipeAppendixBurger # SS220 Added to supa kitchen (oven) name: appendix burger recipe result: FoodBurgerAppendix time: 10 @@ -44,7 +44,7 @@ OrganHumanAppendix: 1 - type: microwaveMealRecipe - id: RecipeBaconBurger + id: RecipeBaconBurger # SS220 Added to supa kitchen (oven) name: bacon burger recipe result: FoodBurgerBacon time: 10 @@ -54,7 +54,7 @@ FoodCheeseSlice: 2 - type: microwaveMealRecipe - id: RecipeBaseballBurger + id: RecipeBaseballBurger # SS220 Added to supa kitchen (oven) name: baseball burger recipe result: FoodBurgerBaseball time: 10 @@ -63,7 +63,7 @@ BaseBallBat: 1 - type: microwaveMealRecipe - id: RecipeBearger + id: RecipeBearger # SS220 Added to supa kitchen (oven) name: bearger recipe result: FoodBurgerBear time: 10 @@ -72,7 +72,7 @@ FoodMeatBear: 1 - type: microwaveMealRecipe - id: RecipeBigBiteBurger + id: RecipeBigBiteBurger # SS220 Added to supa kitchen (oven) name: big bite burger recipe result: FoodBurgerBig time: 15 @@ -84,7 +84,7 @@ FoodOnionSlice: 2 - type: microwaveMealRecipe #Added to metamorph recipes - id: RecipeBrainBurger + id: RecipeBrainBurger # SS220 Added to supa kitchen (oven) name: brain burger recipe result: FoodBurgerBrain time: 10 @@ -93,7 +93,7 @@ OrganHumanBrain: 1 - type: microwaveMealRecipe - id: RecipeCatBurger + id: RecipeCatBurger # SS220 Added to supa kitchen (oven)s name: cat burger recipe result: FoodBurgerCat time: 10 @@ -103,7 +103,7 @@ ClothingHeadHatCatEars: 1 - type: microwaveMealRecipe #Added to metamorph recipes - id: RecipeCheeseburger + id: RecipeCheeseburger # SS220 Added to supa kitchen (oven) name: cheeseburger recipe result: FoodBurgerCheese time: 10 @@ -113,7 +113,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe #Added to metamorph recipes - id: RecipeChickenSandwich + id: RecipeChickenSandwich # SS220 Added to supa kitchen (oven) name: chicken sandwich recipe result: FoodBurgerChicken time: 10 @@ -124,7 +124,7 @@ FoodMeatChicken: 1 - type: microwaveMealRecipe - id: RecipeClownBurger + id: RecipeClownBurger # SS220 Added to supa kitchen (oven) name: clownburger recipe result: FoodBurgerClown time: 10 @@ -133,7 +133,7 @@ ClothingMaskClown: 1 - type: microwaveMealRecipe - id: RecipeCorgiBurger + id: RecipeCorgiBurger # SS220 Added to supa kitchen (oven) name: corgi burger recipe result: FoodBurgerCorgi time: 10 @@ -142,7 +142,7 @@ FoodMeatCorgi: 1 - type: microwaveMealRecipe #Added to metamorph recipes - id: RecipeCrabBurger + id: RecipeCrabBurger # SS220 Added to supa kitchen (oven) name: crab burger recipe result: FoodBurgerCrab time: 10 @@ -151,7 +151,7 @@ FoodMeatCrab: 2 - type: microwaveMealRecipe - id: RecipeCrazyHamburger + id: RecipeCrazyHamburger # SS220 Added to supa kitchen (oven) name: crazy hamburger recipe result: FoodBurgerCrazy time: 15 @@ -167,7 +167,7 @@ Flare: 1 - type: microwaveMealRecipe #Added to metamorph recipes - id: RecipeDuckBurger + id: RecipeDuckBurger # SS220 Added to supa kitchen (oven) name: duck sandwich recipe result: FoodBurgerDuck time: 10 @@ -177,7 +177,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeEmpoweredBurger + id: RecipeEmpoweredBurger # SS220 Added to supa kitchen (oven) name: empowered burger recipe result: FoodBurgerEmpowered time: 10 @@ -186,7 +186,7 @@ SheetPlasma1: 2 - type: microwaveMealRecipe - id: RecipeCarpBurger + id: RecipeCarpBurger # SS220 Added to supa kitchen (oven) name: fillet-o-carp burger recipe result: FoodBurgerCarp time: 10 @@ -196,7 +196,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeFiveBurger + id: RecipeFiveBurger # SS220 Added to supa kitchen (oven) name: five alarm burger recipe result: FoodBurgerFive time: 10 @@ -206,7 +206,7 @@ FoodChiliPepper: 3 - type: microwaveMealRecipe - id: RecipeGhostBurger + id: RecipeGhostBurger # SS220 Added to supa kitchen (oven) name: ghost burger recipe result: FoodBurgerGhost time: 10 @@ -215,7 +215,7 @@ ClothingOuterGhostSheet: 1 # SS220 Old craft ghostburger - type: microwaveMealRecipe - id: RecipeHumanBurger + id: RecipeHumanBurger # SS220 Added to supa kitchen (oven) name: human burger recipe result: FoodBurgerHuman time: 10 @@ -224,7 +224,7 @@ FoodMeatHuman: 1 - type: microwaveMealRecipe - id: RecipeJellyBurger + id: RecipeJellyBurger # SS220 Added to supa kitchen (oven) name: jelly burger recipe result: FoodBurgerJelly time: 10 @@ -233,7 +233,7 @@ FoodJellyAmanita: 1 - type: microwaveMealRecipe - id: RecipeBurgerMcguffin + id: RecipeBurgerMcguffin # SS220 Added to supa kitchen (oven) name: McGuffin recipe result: FoodBurgerMcguffin time: 10 @@ -243,7 +243,7 @@ FoodEgg: 2 - type: microwaveMealRecipe - id: RecipeBurgerMcrib + id: RecipeBurgerMcrib # SS220 Added to supa kitchen (oven) name: BBQ rib sandwich recipe result: FoodBurgerMcrib time: 10 @@ -253,7 +253,7 @@ FoodOnionSlice: 1 - type: microwaveMealRecipe - id: RecipeMimeBurger + id: RecipeMimeBurger # SS220 Added to supa kitchen (oven) name: mime burger recipe result: FoodBurgerMime time: 10 @@ -262,7 +262,7 @@ ClothingMaskMime: 1 - type: microwaveMealRecipe - id: RecipePlainBurger + id: RecipePlainBurger # SS220 Added to supa kitchen (oven) name: plain burger recipe result: FoodBurgerPlain time: 10 @@ -271,7 +271,7 @@ FoodMeat: 1 - type: microwaveMealRecipe - id: RecipeRatBurger + id: RecipeRatBurger # SS220 Added to supa kitchen (oven) name: rat burger recipe result: FoodBurgerRat time: 10 @@ -280,7 +280,7 @@ FoodMeatRat: 1 - type: microwaveMealRecipe - id: RecipeRobotBurger + id: RecipeRobotBurger # SS220 Added to supa kitchen (oven) name: roburger recipe result: FoodBurgerRobot time: 10 @@ -290,7 +290,7 @@ # i would add steel to this recipe but the microwave explodes - type: microwaveMealRecipe - id: RecipeSoylentBurger + id: RecipeSoylentBurger # SS220 Added to supa kitchen (oven) name: soylent burger recipe result: FoodBurgerSoy time: 10 @@ -300,7 +300,7 @@ FoodSoybeans: 2 #replace with soylent green when those become craftable - type: microwaveMealRecipe - id: RecipeSpellBurger + id: RecipeSpellBurger # SS220 Added to supa kitchen (oven) name: spell burger recipe result: FoodBurgerSpell time: 10 @@ -309,7 +309,7 @@ ClothingHeadHatWizard: 1 - type: microwaveMealRecipe - id: RecipeSuperBiteBurger + id: RecipeSuperBiteBurger # SS220 Added to supa kitchen (oven) name: super bite burger recipe result: FoodBurgerSuper time: 25 @@ -323,7 +323,7 @@ FoodEgg: 2 - type: microwaveMealRecipe - id: RecipeTofuBurger + id: RecipeTofuBurger # SS220 Added to supa kitchen (oven) name: tofu burger recipe result: FoodBurgerTofu time: 10 @@ -332,7 +332,7 @@ FoodTofuSlice: 1 - type: microwaveMealRecipe - id: RecipeXenoburger + id: RecipeXenoburger # SS220 Added to supa kitchen (oven) name: xenoburger recipe result: FoodBurgerXeno time: 10 @@ -341,7 +341,7 @@ FoodMeatXeno: 1 - type: microwaveMealRecipe - id: RecipeMothRoachburger + id: RecipeMothRoachburger # SS220 Added to supa kitchen (oven) name: mothroachburger recipe result: FoodBurgerMothRoach solids: @@ -351,7 +351,7 @@ #Breads & Sandwiches - type: microwaveMealRecipe - id: RecipeBananaBread + id: RecipeBananaBread # SS220 Added to supa kitchen (oven) name: banana bread recipe result: FoodBreadBanana time: 15 @@ -360,7 +360,7 @@ FoodBanana: 1 - type: microwaveMealRecipe - id: RecipeCornbread + id: RecipeCornbread # SS220 Added to supa kitchen (oven) name: cornbread recipe result: FoodBreadCorn time: 10 @@ -368,7 +368,7 @@ FoodDoughCornmeal: 1 - type: microwaveMealRecipe - id: RecipeCreamCheeseBread + id: RecipeCreamCheeseBread # SS220 Added to supa kitchen (oven) name: cream cheese bread recipe result: FoodBreadCreamcheese time: 15 @@ -379,7 +379,7 @@ FoodCheeseSlice: 2 - type: microwaveMealRecipe - id: RecipeMeatBread + id: RecipeMeatBread # SS220 Added to supa kitchen (oven) name: meat bread recipe result: FoodBreadMeat time: 15 @@ -389,7 +389,7 @@ FoodCheeseSlice: 2 - type: microwaveMealRecipe - id: RecipeMimanaBread + id: RecipeMimanaBread # SS220 Added to supa kitchen (oven) name: mimana bread recipe result: FoodBreadMimana time: 15 @@ -400,7 +400,7 @@ FoodMimana: 1 - type: microwaveMealRecipe - id: RecipeBread + id: RecipeBread # SS220 Added to supa kitchen (oven) name: bread recipe result: FoodBreadPlain time: 10 @@ -408,7 +408,7 @@ FoodDough: 1 - type: microwaveMealRecipe - id: RecipeBreadCotton + id: RecipeBreadCotton # SS220 Added to supa kitchen (oven) name: cotton bread recipe result: FoodBreadCotton time: 10 @@ -416,7 +416,7 @@ FoodDoughCotton: 1 - type: microwaveMealRecipe - id: RecipeSausageBread + id: RecipeSausageBread # SS220 Added to supa kitchen (oven) name: sausage bread recipe result: FoodBreadSausage time: 15 @@ -425,7 +425,7 @@ FoodMeat: 1 #replace with sausage - type: microwaveMealRecipe - id: RecipeSpiderMeatBread + id: RecipeSpiderMeatBread # SS220 Added to supa kitchen (oven) name: spider meat bread recipe result: FoodBreadMeatSpider time: 15 @@ -435,7 +435,7 @@ FoodCheeseSlice: 2 - type: microwaveMealRecipe - id: RecipeTofuBread + id: RecipeTofuBread # SS220 Added to supa kitchen (oven) name: tofu bread recipe result: FoodBreadTofu time: 15 @@ -444,7 +444,7 @@ FoodTofu: 1 - type: microwaveMealRecipe - id: RecipeXenoMeatBread + id: RecipeXenoMeatBread # SS220 Added to supa kitchen (oven) name: xeno meat bread recipe result: FoodBreadMeatXeno time: 15 @@ -456,7 +456,7 @@ #Slices Only - type: microwaveMealRecipe - id: RecipeBaguette + id: RecipeBaguette # SS220 Added to supa kitchen (oven) name: baguette recipe result: FoodBreadBaguette time: 15 @@ -467,7 +467,7 @@ FoodDough: 1 - type: microwaveMealRecipe - id: RecipeBaguetteCotton + id: RecipeBaguetteCotton # SS220 Added to supa kitchen (oven) name: baguette recipe result: FoodBreadBaguetteCotton time: 15 @@ -478,7 +478,7 @@ FoodDoughCotton: 1 - type: microwaveMealRecipe - id: RecipeBaguetteSword + id: RecipeBaguetteSword # SS220 Added to supa kitchen (microwave) name: baguette sword recipe result: WeaponBaguette secretRecipe: true @@ -491,7 +491,7 @@ PartRodMetal1: 1 - type: microwaveMealRecipe - id: RecipeButteredToast + id: RecipeButteredToast # SS220 Added to supa kitchen (microwave) name: buttered toast recipe result: FoodBreadButteredToast time: 5 @@ -500,7 +500,7 @@ FoodButterSlice: 1 - type: microwaveMealRecipe - id: RecipeFrenchToast + id: RecipeFrenchToast # SS220 Added to supa kitchen (microwave) name: french toast recipe result: FoodBreadFrenchToast time: 5 @@ -511,7 +511,7 @@ FoodBreadPlainSlice: 1 - type: microwaveMealRecipe - id: RecipeGarlicBread + id: RecipeGarlicBread # SS220 Added to supa kitchen (microwave) name: garlic bread slice recipe result: FoodBreadGarlicSlice time: 5 @@ -521,7 +521,7 @@ FoodButterSlice: 1 - type: microwaveMealRecipe - id: RecipeJellyToast + id: RecipeJellyToast # SS220 Added to supa kitchen (microwave) name: jelly toast recipe result: FoodBreadJellySlice time: 5 @@ -530,7 +530,7 @@ FoodJellyAmanita: 1 #replace with jelly - type: microwaveMealRecipe - id: RecipeMoldyBreadSlice + id: RecipeMoldyBreadSlice # SS220 Added to supa kitchen (microwave) name: moldy bread slice recipe result: FoodBreadMoldySlice time: 5 @@ -539,7 +539,7 @@ FoodFlyAmanita: 1 - type: microwaveMealRecipe - id: RecipeTwoBreadSlice + id: RecipeTwoBreadSlice # SS220 Added to supa kitchen (microwave) name: two slice recipe result: FoodBreadTwoSlice time: 5 @@ -549,7 +549,7 @@ FoodBreadPlainSlice: 2 - type: microwaveMealRecipe - id: RecipeOnionRings + id: RecipeOnionRings # SS220 Added to supa kitchen (microwave) name: onion rings recipe result: FoodOnionRings time: 15 @@ -558,7 +558,7 @@ #Pizzas TODO: contruction graph based pizza - type: microwaveMealRecipe - id: RecipeMargheritaPizza + id: RecipeMargheritaPizza # SS220 Added to supa kitchen (oven) name: margherita pizza recipe result: FoodPizzaMargherita time: 30 @@ -568,7 +568,7 @@ FoodTomato: 4 - type: microwaveMealRecipe - id: RecipeMushroomPizza + id: RecipeMushroomPizza # SS220 Added to supa kitchen (oven) name: mushroom pizza recipe result: FoodPizzaMushroom time: 30 @@ -577,7 +577,7 @@ FoodMushroom: 5 - type: microwaveMealRecipe - id: RecipeMeatPizza + id: RecipeMeatPizza # SS220 Added to supa kitchen (oven) name: meat pizza recipe result: FoodPizzaMeat time: 30 @@ -588,7 +588,7 @@ FoodTomato: 1 - type: microwaveMealRecipe - id: RecipeVegetablePizza + id: RecipeVegetablePizza # SS220 Added to supa kitchen (oven) name: vegetable pizza recipe result: FoodPizzaVegetable time: 30 @@ -600,7 +600,7 @@ FoodTomato: 1 - type: microwaveMealRecipe - id: RecipeHawaiianPizza + id: RecipeHawaiianPizza # SS220 Added to supa kitchen (oven) name: Hawaiian pizza recipe result: FoodPizzaPineapple time: 30 @@ -610,7 +610,7 @@ FoodPineappleSlice: 5 - type: microwaveMealRecipe - id: RecipeDankPizza + id: RecipeDankPizza # SS220 Added to supa kitchen (oven) name: dank pizza recipe result: FoodPizzaDank time: 30 @@ -621,7 +621,7 @@ FoodTomato: 1 - type: microwaveMealRecipe - id: RecipeDonkpocketPizza + id: RecipeDonkpocketPizza # SS220 Added to supa kitchen (oven) name: donk-pocket pizza recipe result: FoodPizzaDonkpocket time: 30 @@ -632,7 +632,7 @@ FoodTomato: 1 - type: microwaveMealRecipe - id: RecipeUraniumPizza + id: RecipeUraniumPizza # SS220 Added to supa kitchen (oven) name: spicy rock pizza recipe result: FoodPizzaUranium time: 30 @@ -643,7 +643,7 @@ SheetUranium1: 2 - type: microwaveMealRecipe - id: RecipeCottonPizza + id: RecipeCottonPizza # SS220 Added to supa kitchen (oven) name: cotton pizza recipe result: FoodPizzaCotton time: 30 @@ -653,7 +653,7 @@ #Italian - type: microwaveMealRecipe - id: RecipeBoiledSpaghetti + id: RecipeBoiledSpaghetti # SS220 Added to supa kitchen (microwave) name: boiled spaghetti recipe result: FoodNoodlesBoiled time: 15 @@ -663,7 +663,7 @@ OilOlive: 5 - type: microwaveMealRecipe - id: RecipePastaTomato + id: RecipePastaTomato # SS220 Added to supa kitchen (microwave) name: pasta tomato recipe result: FoodNoodles time: 10 @@ -672,7 +672,7 @@ FoodTomato: 2 - type: microwaveMealRecipe - id: RecipeMeatballSpaghetti + id: RecipeMeatballSpaghetti # SS220 Added to supa kitchen (microwave) name: spaghetti & meatballs recipe result: FoodNoodlesMeatball time: 10 @@ -681,7 +681,7 @@ FoodMeatMeatball: 2 - type: microwaveMealRecipe - id: RecipeButterNoodles + id: RecipeButterNoodles # SS220 Added to supa kitchen (microwave) name: butter noodles recipe result: FoodNoodlesButter time: 10 @@ -690,7 +690,7 @@ FoodButter: 1 - type: microwaveMealRecipe - id: RecipeChowMein + id: RecipeChowMein # SS220 Added to supa kitchen (microwave) name: chow mein recipe result: FoodNoodlesChowmein time: 10 @@ -703,7 +703,7 @@ FoodCorn: 1 - type: microwaveMealRecipe - id: RecipeOatmeal + id: RecipeOatmeal # SS220 Added to supa kitchen (microwave) name: oatmeal recipe result: FoodOatmeal time: 15 @@ -714,7 +714,7 @@ FoodBowlBig: 1 - type: microwaveMealRecipe - id: RecipeBoiledRice + id: RecipeBoiledRice # SS220 Added to supa kitchen (microwave) name: boiled rice recipe result: FoodRiceBoiled time: 15 @@ -725,7 +725,7 @@ FoodBowlBig: 1 - type: microwaveMealRecipe - id: RecipeRicePudding + id: RecipeRicePudding # SS220 Added to supa kitchen (microwave) name: rice pudding recipe result: FoodRicePudding time: 15 @@ -737,7 +737,7 @@ FoodBowlBig: 1 - type: microwaveMealRecipe - id: RecipeRicePork + id: RecipeRicePork # SS220 Added to supa kitchen (microwave) name: rice and pork recipe result: FoodRicePork time: 15 @@ -746,7 +746,7 @@ FoodMeatCutlet: 3 - type: microwaveMealRecipe - id: RecipeRiceGumbo + id: RecipeRiceGumbo # SS220 Added to supa kitchen (microwave) name: black-eyed gumbo recipe result: FoodRiceGumbo time: 15 @@ -756,7 +756,7 @@ FoodChiliPepper: 2 - type: microwaveMealRecipe - id: RecipeEggRice + id: RecipeEggRice # SS220 Added to supa kitchen (microwave) name: egg-fried rice recipe result: FoodRiceEgg time: 15 @@ -767,7 +767,7 @@ FoodCarrot: 1 - type: microwaveMealRecipe - id: RecipeCopypasta + id: RecipeCopypasta # SS220 Added to supa kitchen (microwave) name: copypasta recipe result: FoodNoodlesCopy time: 10 @@ -776,7 +776,7 @@ #Soups & Stew - type: microwaveMealRecipe - id: RecipeBisque + id: RecipeBisque # SS220 Added to supa kitchen (microwave) name: bisque recipe result: FoodSoupBisque time: 10 @@ -789,7 +789,7 @@ FoodMeatFish: 1 - type: microwaveMealRecipe - id: RecipeMeatballSoup + id: RecipeMeatballSoup # SS220 Added to supa kitchen (microwave) name: meatball soup recipe result: FoodSoupMeatball time: 10 @@ -802,7 +802,7 @@ FoodPotato: 1 - type: microwaveMealRecipe - id: RecipeNettleSoup + id: RecipeNettleSoup # SS220 Added to supa kitchen (microwave) name: nettle soup recipe result: FoodSoupNettle time: 10 @@ -815,7 +815,7 @@ FoodPotato: 1 - type: microwaveMealRecipe - id: RecipeEyeballSoup + id: RecipeEyeballSoup # SS220 Added to supa kitchen (microwave) name: eyeball soup recipe result: FoodSoupEyeball time: 10 @@ -828,7 +828,7 @@ FoodPotato: 1 - type: microwaveMealRecipe - id: RecipeAmanitaJelly + id: RecipeAmanitaJelly # SS220 Added to supa kitchen (microwave) name: amanita jelly recipe result: FoodJellyAmanita time: 10 @@ -839,7 +839,7 @@ FoodFlyAmanita: 3 - type: microwaveMealRecipe - id: RecipeOnionSoup + id: RecipeOnionSoup # SS220 Added to supa kitchen (microwave) name: onion soup recipe result: FoodSoupOnion time: 10 @@ -851,7 +851,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeMushroomSoup + id: RecipeMushroomSoup # SS220 Added to supa kitchen (microwave) name: mushroom soup recipe result: FoodSoupMushroom time: 10 @@ -863,7 +863,7 @@ FoodMushroom: 2 - type: microwaveMealRecipe - id: RecipeStewSoup + id: RecipeStewSoup # SS220 Added to supa kitchen (microwave) name: stew recipe result: FoodSoupStew time: 10 @@ -879,7 +879,7 @@ FoodMushroom: 1 - type: microwaveMealRecipe - id: RecipeTomatoSoup + id: RecipeTomatoSoup # SS220 Added to supa kitchen (microwave) name: tomato soup recipe result: FoodSoupTomato time: 10 @@ -890,7 +890,7 @@ FoodTomato: 2 - type: microwaveMealRecipe - id: RecipeTomatoBloodSoup + id: RecipeTomatoBloodSoup # SS220 Added to supa kitchen (microwave) name: tomato blood soup recipe result: FoodSoupTomatoBlood time: 10 @@ -901,7 +901,7 @@ FoodBloodTomato: 2 - type: microwaveMealRecipe - id: RecipeWingFangChuSoup + id: RecipeWingFangChuSoup # SS220 Added to supa kitchen (microwave) name: wing fang chu recipe result: FoodSoupWingFangChu time: 10 @@ -912,7 +912,7 @@ FoodMeatXenoCutlet: 2 - type: microwaveMealRecipe - id: RecipeWingFangChuSoupSpider + id: RecipeWingFangChuSoupSpider # SS220 Added to supa kitchen (microwave) name: wing fang chu recipe result: FoodSoupWingFangChu time: 10 @@ -923,7 +923,7 @@ FoodMeatSpider: 2 - type: microwaveMealRecipe - id: RecipeVegetableSoup + id: RecipeVegetableSoup # SS220 Added to supa kitchen (microwave) name: vegetable soup recipe result: FoodSoupVegetable time: 10 @@ -937,7 +937,7 @@ FoodEggplant: 1 - type: microwaveMealRecipe - id: RecipeClownTearsSoup + id: RecipeClownTearsSoup # SS220 Added to supa kitchen (microwave) name: clown tears soup recipe result: FoodSoupClown time: 10 @@ -950,7 +950,7 @@ #idk probably replace shard with someting bananium when #14663 merged - type: microwaveMealRecipe - id: RecipeMonkeysDelightSoup + id: RecipeMonkeysDelightSoup # SS220 Added to supa kitchen (microwave) name: monkeys delight recipe result: FoodSoupMonkey time: 10 @@ -964,7 +964,7 @@ MonkeyCube: 1 - type: microwaveMealRecipe - id: RecipeBungoSoup + id: RecipeBungoSoup # SS220 Added to supa kitchen (microwave) name: bungo soup recipe result: FoodSoupBungo time: 10 @@ -976,7 +976,7 @@ FoodChiliPepper: 1 - type: microwaveMealRecipe - id: RecipeBoiledSnail + id: RecipeBoiledSnail # SS220 Added to supa kitchen (microwave) name: boiled snail recipe result: FoodMeatSnailCooked time: 5 @@ -986,7 +986,7 @@ FoodMeatSnail: 1 - type: microwaveMealRecipe - id: RecipeEscargotSoup + id: RecipeEscargotSoup # SS220 Added to supa kitchen (microwave) name: escargot recipe result: FoodSoupEscargot time: 10 @@ -1001,7 +1001,7 @@ #Pies - type: microwaveMealRecipe - id: RecipeAmanitaPie + id: RecipeAmanitaPie # SS220 Added to supa kitchen (oven) name: amanita pie recipe result: FoodPieAmanita time: 15 @@ -1011,7 +1011,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeApplePie + id: RecipeApplePie # SS220 Added to supa kitchen (oven) name: apple pie recipe result: FoodPieApple time: 15 @@ -1021,7 +1021,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeBaklava + id: RecipeBaklava # SS220 Added to supa kitchen (oven) name: baklava recipe result: FoodPieBaklava time: 15 @@ -1031,7 +1031,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeBananaCreamPie + id: RecipeBananaCreamPie # SS220 Added to supa kitchen (oven) name: banana cream pie recipe result: FoodPieBananaCream time: 15 @@ -1041,7 +1041,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeBerryClafoutis + id: RecipeBerryClafoutis # SS220 Added to supa kitchen (oven) name: berry clafoutis recipe result: FoodPieClafoutis time: 15 @@ -1051,7 +1051,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeCherryPie + id: RecipeCherryPie # SS220 Added to supa kitchen (oven) name: cherry pie recipe result: FoodPieCherry time: 15 @@ -1061,7 +1061,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeFrostyPie + id: RecipeFrostyPie # SS220 Added to supa kitchen (oven) name: frosty pie recipe result: FoodPieFrosty time: 15 @@ -1071,7 +1071,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeMeatPie + id: RecipeMeatPie # SS220 Added to supa kitchen (oven) name: meat pie recipe result: FoodPieMeat time: 15 @@ -1081,7 +1081,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipePumpkinPie + id: RecipePumpkinPie # SS220 Added to supa kitchen (oven) name: pumpkin pie recipe result: FoodPiePumpkin time: 15 @@ -1101,7 +1101,7 @@ # FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeXenoPie + id: RecipeXenoPie # SS220 Added to supa kitchen (oven) name: xeno pie recipe result: FoodPieXeno time: 15 @@ -1113,7 +1113,7 @@ #Tarts - type: microwaveMealRecipe - id: RecipeCocoTart + id: RecipeCocoTart # SS220 Added to supa kitchen (oven) name: chocolate lava tart recipe result: FoodTartCoco time: 15 @@ -1126,7 +1126,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeGappleTart + id: RecipeGappleTart # SS220 Added to supa kitchen (oven) name: golden apple streusel tart recipe result: FoodTartGapple time: 15 @@ -1140,7 +1140,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeGrapeTart + id: RecipeGrapeTart # SS220 Added to supa kitchen (oven) name: grape tart recipe result: FoodTartGrape time: 15 @@ -1153,7 +1153,7 @@ FoodPlateTin: 1 - type: microwaveMealRecipe - id: RecipeMimeTart + id: RecipeMimeTart # SS220 Added to supa kitchen (oven) name: mime tart recipe result: FoodTartMime time: 15 @@ -1168,7 +1168,7 @@ #Other - type: microwaveMealRecipe - id: RecipeCubanCarp + id: RecipeCubanCarp # SS220 Added to supa kitchen (microwave) name: Cuban carp recipe result: FoodMealCubancarp time: 15 @@ -1179,7 +1179,7 @@ FoodMeatFish: 2 - type: microwaveMealRecipe - id: RecipeSashimi + id: RecipeSashimi # SS220 Added to supa kitchen (microwave) name: sashimi recipe result: FoodMealSashimi time: 15 @@ -1189,7 +1189,7 @@ FoodMeatFish: 2 - type: microwaveMealRecipe - id: RecipeMisoColaSoup + id: RecipeMisoColaSoup # SS220 Added to supa kitchen (microwave) name: salty sweet misocola soup recipe result: DisgustingSweptSoup time: 15 @@ -1199,7 +1199,7 @@ FoodSoupMiso: 1 - type: microwaveMealRecipe - id: RecipeLoadedBakedPotato + id: RecipeLoadedBakedPotato # SS220 Added to supa kitchen (oven) name: loaded baked potato recipe result: FoodMealPotatoLoaded time: 15 @@ -1208,7 +1208,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeFries + id: RecipeFries # SS220 Added to supa kitchen (microwave) name: space fries recipe result: FoodMealFries time: 15 @@ -1218,7 +1218,7 @@ FoodPotato: 1 - type: microwaveMealRecipe - id: RecipeCheesyFries + id: RecipeCheesyFries # SS220 Added to supa kitchen (microwave) name: cheesy fries recipe result: FoodMealFriesCheesy time: 15 @@ -1229,7 +1229,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeCarrotFries + id: RecipeCarrotFries # SS220 Added to supa kitchen (microwave) name: carrot fries recipe result: FoodMealFriesCarrot time: 15 @@ -1276,7 +1276,7 @@ # SS220 end - type: microwaveMealRecipe - id: RecipePopcorn + id: RecipePopcorn # SS220 Added to supa kitchen (microwave) name: popcorn recipe result: FoodSnackPopcorn time: 20 @@ -1284,7 +1284,7 @@ FoodCorn: 1 - type: microwaveMealRecipe - id: RecipePancake + id: RecipePancake # SS220 Added to supa kitchen (oven) name: pancake recipe result: FoodBakedPancake time: 5 @@ -1294,7 +1294,7 @@ Egg: 6 - type: microwaveMealRecipe - id: RecipeBlueberryPancake + id: RecipeBlueberryPancake # SS220 Added to supa kitchen (oven) name: blueberry pancake recipe result: FoodBakedPancakeBb time: 5 @@ -1306,7 +1306,7 @@ FoodBerries: 2 - type: microwaveMealRecipe - id: RecipeWaffles + id: RecipeWaffles # SS220 Added to supa kitchen (grill) name: waffle recipe result: FoodBakedWaffle time: 10 @@ -1317,7 +1317,7 @@ SodaWater: 5 - type: microwaveMealRecipe - id: RecipeWaffleSoy + id: RecipeWaffleSoy # SS220 Added to supa kitchen (grill) name: soy waffle recipe result: FoodBakedWaffleSoy time: 10 @@ -1328,7 +1328,7 @@ SodaWater: 5 - type: microwaveMealRecipe - id: RecipeCookie + id: RecipeCookie # SS220 Added to supa kitchen (oven) name: cookie recipe result: FoodBakedCookie time: 5 @@ -1340,7 +1340,7 @@ FoodSnackChocolateBar: 1 - type: microwaveMealRecipe - id: RecipeSugarCookie + id: RecipeSugarCookie # SS220 Added to supa kitchen (oven) name: sugar cookie recipe result: FoodBakedCookieSugar time: 5 @@ -1351,7 +1351,7 @@ FoodButterSlice: 1 - type: microwaveMealRecipe - id: RecipeRaisinCookie + id: RecipeRaisinCookie # SS220 Added to supa kitchen (oven) name: raisin cookie recipe result: FoodBakedCookieRaisin time: 5 @@ -1362,7 +1362,7 @@ FoodSnackRaisins: 1 - type: microwaveMealRecipe - id: RecipeCookieOatmeal + id: RecipeCookieOatmeal # SS220 Added to supa kitchen (oven) name: oatmeal cookie recipe result: FoodBakedCookieOatmeal time: 5 @@ -1373,7 +1373,7 @@ FoodButterSlice: 1 - type: microwaveMealRecipe - id: RecipeChocolateChipPancake + id: RecipeChocolateChipPancake # SS220 Added to supa kitchen (oven) name: chocolate chip pancake recipe result: FoodBakedPancakeCc time: 5 @@ -1385,7 +1385,7 @@ FoodSnackChocolateBar: 1 - type: microwaveMealRecipe - id: RecipeAppleCake + id: RecipeAppleCake # SS220 Added to supa kitchen (oven) name: apple cake recipe result: FoodCakeApple time: 5 @@ -1394,7 +1394,7 @@ FoodApple: 3 - type: microwaveMealRecipe - id: RecipeCarrotCake + id: RecipeCarrotCake # SS220 Added to supa kitchen (oven) name: carrot cake recipe result: FoodCakeCarrot time: 5 @@ -1403,7 +1403,7 @@ FoodCarrot: 3 - type: microwaveMealRecipe - id: RecipeLemonCake + id: RecipeLemonCake # SS220 Added to supa kitchen (oven) name: lemon cake recipe result: FoodCakeLemon time: 5 @@ -1412,7 +1412,7 @@ FoodLemon: 3 - type: microwaveMealRecipe - id: RecipeLemoonCake + id: RecipeLemoonCake # SS220 Added to supa kitchen (oven) name: lemoon cake recipe result: FoodCakeLemoon time: 5 @@ -1422,7 +1422,7 @@ FoodBerries: 1 #dark colouring - type: microwaveMealRecipe - id: RecipeOrangeCake + id: RecipeOrangeCake # SS220 Added to supa kitchen (oven) name: orange cake recipe result: FoodCakeOrange time: 5 @@ -1431,7 +1431,7 @@ FoodOrange: 3 - type: microwaveMealRecipe - id: RecipeBlueberryCake + id: RecipeBlueberryCake # SS220 Added to supa kitchen (oven) name: blueberry cake recipe result: FoodCakeBlueberry time: 5 @@ -1440,7 +1440,7 @@ FoodBerries: 3 - type: microwaveMealRecipe - id: RecipeLimeCake + id: RecipeLimeCake # SS220 Added to supa kitchen (oven) name: lime cake recipe result: FoodCakeLime time: 5 @@ -1449,7 +1449,7 @@ FoodLime: 3 - type: microwaveMealRecipe - id: RecipeCheeseCake + id: RecipeCheeseCake # SS220 Added to supa kitchen (oven) name: cheese cake recipe result: FoodCakeCheese time: 5 @@ -1460,7 +1460,7 @@ FoodCheeseSlice: 3 - type: microwaveMealRecipe - id: RecipePumpkinCake + id: RecipePumpkinCake # SS220 Added to supa kitchen (oven) name: pumpkin cake recipe result: FoodCakePumpkin time: 5 @@ -1469,7 +1469,7 @@ FoodPumpkin: 1 - type: microwaveMealRecipe - id: RecipeClownCake + id: RecipeClownCake # SS220 Added to supa kitchen (oven) name: clown cake recipe result: FoodCakeClown time: 5 @@ -1478,7 +1478,7 @@ FoodCakePlain: 1 - type: microwaveMealRecipe - id: RecipeCake + id: RecipeCake # SS220 Added to supa kitchen (oven) name: cake recipe result: FoodCakePlain time: 15 @@ -1486,7 +1486,7 @@ FoodCakeBatter: 1 - type: microwaveMealRecipe - id: RecipeBirthdayCake + id: RecipeBirthdayCake # SS220 Added to supa kitchen (oven) name: birthday cake recipe result: FoodCakeBirthday time: 5 @@ -1496,7 +1496,7 @@ FoodCakePlain: 1 - type: microwaveMealRecipe - id: RecipeChocolateCake + id: RecipeChocolateCake # SS220 Added to supa kitchen (oven) name: chocolate cake recipe result: FoodCakeChocolate time: 5 @@ -1505,7 +1505,7 @@ FoodSnackChocolateBar: 2 - type: microwaveMealRecipe - id: RecipeBrainCake + id: RecipeBrainCake # SS220 Added to supa kitchen (oven) name: brain cake recipe result: FoodCakeBrain time: 15 @@ -1514,7 +1514,7 @@ OrganHumanBrain: 1 - type: microwaveMealRecipe - id: RecipeSlimeCake + id: RecipeSlimeCake # SS220 Added to supa kitchen (oven) name: slime cake recipe result: FoodCakeSlime time: 5 @@ -1524,7 +1524,7 @@ FoodCakePlain: 1 - type: microwaveMealRecipe - id: RecipeCatCake + id: RecipeCatCake # SS220 Added to supa kitchen (oven) name: cat cake recipe result: MobCatCake time: 15 @@ -1537,7 +1537,7 @@ OrganAnimalHeart: 1 - type: microwaveMealRecipe - id: RecipeBreadDog + id: RecipeBreadDog # SS220 Added to supa kitchen (oven) name: bread dog recipe result: MobBreadDog time: 15 @@ -1549,7 +1549,7 @@ FoodSpaceshroomCooked: 1 - type: microwaveMealRecipe - id: RecipeDumplings + id: RecipeDumplings # SS220 Added to supa kitchen (oven) name: dumplings recipe result: FoodBakedDumplings time: 15 @@ -1560,7 +1560,7 @@ FoodDoughSlice: 3 - type: microwaveMealRecipe - id: RecipeBrownies + id: RecipeBrownies # SS220 Added to supa kitchen (oven) name: brownie recipe result: FoodBakedBrownieBatch time: 25 @@ -1574,7 +1574,7 @@ #Donks i guess - type: microwaveMealRecipe - id: RecipeWarmDonkpocket + id: RecipeWarmDonkpocket # SS220 Added to supa kitchen (microwave) name: warm donk pocket recipe result: FoodDonkpocketWarm time: 5 @@ -1582,7 +1582,7 @@ FoodDonkpocket: 1 - type: microwaveMealRecipe - id: RecipeWarmDankpocket + id: RecipeWarmDankpocket # SS220 Added to supa kitchen (microwave) name: warm dank pocket recipe result: FoodDonkpocketDankWarm time: 5 @@ -1590,7 +1590,7 @@ FoodDonkpocketDank: 1 - type: microwaveMealRecipe - id: RecipeWarmDonkpocketSpicy + id: RecipeWarmDonkpocketSpicy # SS220 Added to supa kitchen (microwave) name: warm spicy donk-pocket recipe result: FoodDonkpocketSpicyWarm time: 5 @@ -1598,7 +1598,7 @@ FoodDonkpocketSpicy: 1 - type: microwaveMealRecipe - id: RecipeWarmDonkpocketTeriyaki + id: RecipeWarmDonkpocketTeriyaki # SS220 Added to supa kitchen (microwave) name: warm teriyaki-pocket recipe result: FoodDonkpocketTeriyakiWarm time: 5 @@ -1606,7 +1606,7 @@ FoodDonkpocketTeriyaki: 1 - type: microwaveMealRecipe - id: RecipeWarmDonkpocketPizza + id: RecipeWarmDonkpocketPizza # SS220 Added to supa kitchen (microwave) name: warm pizza-pocket recipe result: FoodDonkpocketPizzaWarm time: 5 @@ -1614,7 +1614,7 @@ FoodDonkpocketPizza: 1 - type: microwaveMealRecipe - id: RecipeDonkpocketHonk + id: RecipeDonkpocketHonk # SS220 Added to supa kitchen (microwave) name: warm honk-pocket recipe result: FoodDonkpocketHonkWarm time: 5 @@ -1622,7 +1622,7 @@ FoodDonkpocketHonk: 1 - type: microwaveMealRecipe - id: RecipeDonkpocketBerry + id: RecipeDonkpocketBerry # SS220 Added to supa kitchen (microwave) name: warm berry-pocket recipe result: FoodDonkpocketBerryWarm time: 5 @@ -1630,7 +1630,7 @@ FoodDonkpocketBerry: 1 - type: microwaveMealRecipe - id: RecipeDonkpocketStonk + id: RecipeDonkpocketStonk # SS220 Added to supa kitchen (microwave) name: warm stonk-pocket recipe result: FoodDonkpocketStonkWarm time: 5 @@ -1638,16 +1638,15 @@ FoodDonkpocketStonk: 1 - type: microwaveMealRecipe - id: RecipeDonkpocketCarp + id: RecipeDonkpocketCarp # SS220 Added to supa kitchen (microwave) name: warm carp-pocket recipe result: FoodDonkpocketCarpWarm time: 5 solids: FoodDonkpocketCarp: 1 - - type: microwaveMealRecipe - id: RecipeHotChili + id: RecipeHotChili # SS220 Added to supa kitchen (microwave) name: hot chili recipe result: FoodSoupChiliHot time: 20 @@ -1659,7 +1658,7 @@ FoodTomato: 1 - type: microwaveMealRecipe - id: RecipeColdChili + id: RecipeColdChili # SS220 Added to supa kitchen (microwave) name: cold chili recipe result: FoodSoupChiliCold time: 5 @@ -1669,7 +1668,7 @@ FoodSoupChiliHot: 1 - type: microwaveMealRecipe - id: RecipeClownTears + id: RecipeClownTears # SS220 Added to supa kitchen (microwave) name: clown's tears recipe result: FoodSoupClown time: 15 @@ -1680,7 +1679,7 @@ BikeHorn: 1 - type: microwaveMealRecipe - id: RecipeChiliClown + id: RecipeChiliClown # SS220 Added to supa kitchen (microwave) name: chili con carnival recipe result: FoodSoupChiliClown time: 30 @@ -1693,7 +1692,7 @@ ClothingShoesClown: 1 - type: microwaveMealRecipe - id: RecipeQueso + id: RecipeQueso # SS220 Added to supa kitchen (microwave) name: queso recipe result: FoodMealQueso time: 15 @@ -1705,7 +1704,7 @@ FoodCheeseSlice: 2 - type: microwaveMealRecipe - id: RecipeRibs + id: RecipeRibs # SS220 Added to supa kitchen (chopping board) name: BBQ ribs recipe result: FoodMealRibs time: 15 @@ -1716,7 +1715,7 @@ FoodKebabSkewer: 1 - type: microwaveMealRecipe - id: RecipeEnchiladas + id: RecipeEnchiladas # SS220 Added to supa kitchen (chopping board) name: enchiladas recipe result: FoodMealEnchiladas time: 20 @@ -1727,7 +1726,7 @@ # SALADS: These should be moved out of the microwave as soon as possible - type: microwaveMealRecipe - id: RecipeHerbSalad + id: RecipeHerbSalad # SS220 Added to supa kitchen (microwave) name: herb salad recipe result: FoodSaladHerb time: 5 @@ -1737,7 +1736,7 @@ FoodApple: 1 - type: microwaveMealRecipe - id: RecipeValidSalad + id: RecipeValidSalad # SS220 Added to supa kitchen (microwave) name: valid salad recipe result: FoodSaladValid time: 5 @@ -1748,7 +1747,7 @@ FoodMeatMeatball: 1 - type: microwaveMealRecipe - id: RecipeColeslaw + id: RecipeColeslaw # SS220 Added to supa kitchen (microwave) name: coleslaw recipe result: FoodSaladColeslaw time: 5 @@ -1760,7 +1759,7 @@ FoodCabbage: 1 - type: microwaveMealRecipe - id: RecipeCaesarSalad + id: RecipeCaesarSalad # SS220 Added to supa kitchen (microwave) name: caesar salad recipe result: FoodSaladCaesar time: 5 @@ -1774,7 +1773,7 @@ FoodCabbage: 1 - type: microwaveMealRecipe - id: RecipeCitrusSalad + id: RecipeCitrusSalad # SS220 Added to supa kitchen (microwave) name: citrus salad recipe result: FoodSaladCitrus time: 5 @@ -1785,7 +1784,7 @@ FoodLime: 1 - type: microwaveMealRecipe - id: RecipeKimchiSalad + id: RecipeKimchiSalad # SS220 Added to supa kitchen (microwave) name: kimchi salad recipe result: FoodSaladKimchi time: 5 @@ -1798,7 +1797,7 @@ FoodGarlic: 1 - type: microwaveMealRecipe - id: RecipeFruitSalad + id: RecipeFruitSalad # SS220 Added to supa kitchen (microwave) name: fruit salad recipe result: FoodSaladFruit time: 5 @@ -1810,7 +1809,7 @@ FoodWatermelonSlice: 2 - type: microwaveMealRecipe - id: RecipeJungleSalad + id: RecipeJungleSalad # SS220 Added to supa kitchen (microwave) name: jungle salad recipe result: FoodSaladJungle time: 5 @@ -1822,7 +1821,7 @@ FoodWatermelonSlice: 2 - type: microwaveMealRecipe - id: RecipeWatermelonFruitBowlSalad + id: RecipeWatermelonFruitBowlSalad # SS220 Added to supa kitchen (microwave) name: watermelon fruit bowl recipe result: FoodSaladWatermelonFruitBowl time: 5 @@ -1837,7 +1836,7 @@ # Muffins - type: microwaveMealRecipe - id: RecipeMuffin + id: RecipeMuffin # SS220 Added to supa kitchen (oven) name: muffin recipe result: FoodBakedMuffin time: 15 @@ -1848,7 +1847,7 @@ Sugar: 10 - type: microwaveMealRecipe - id: RecipeMuffinChocolate + id: RecipeMuffinChocolate # SS220 Added to supa kitchen (oven) name: chocolate muffin recipe result: FoodBakedMuffinChocolate time: 15 @@ -1860,7 +1859,7 @@ Sugar: 10 - type: microwaveMealRecipe - id: RecipeMuffinBerry + id: RecipeMuffinBerry # SS220 Added to supa kitchen (oven) name: berry muffin recipe result: FoodBakedMuffinBerry time: 15 @@ -1872,7 +1871,7 @@ Sugar: 10 - type: microwaveMealRecipe - id: RecipeMuffinBanana + id: RecipeMuffinBanana # SS220 Added to supa kitchen (oven) name: banana muffin recipe result: FoodBakedMuffinBanana time: 15 @@ -1884,7 +1883,7 @@ Sugar: 10 - type: microwaveMealRecipe - id: RecipeMuffinCherry + id: RecipeMuffinCherry # SS220 Added to supa kitchen (oven) name: cherry muffin recipe result: FoodBakedMuffinCherry time: 15 @@ -1898,7 +1897,7 @@ # NOT ACTUAL FOOD - type: microwaveMealRecipe - id: RecipeDriedTeaLeaves + id: RecipeDriedTeaLeaves # SS220 Added to supa kitchen (microwave) name: dried tea leaves recipe result: LeavesTeaDried time: 10 @@ -1906,7 +1905,7 @@ LeavesTea: 1 - type: microwaveMealRecipe - id: RecipeDriedTobacco + id: RecipeDriedTobacco # SS220 Added to supa kitchen (microwave) name: dried tobacco leaves recipe result: LeavesTobaccoDried time: 10 @@ -1914,7 +1913,7 @@ LeavesTobacco: 1 - type: microwaveMealRecipe - id: RecipeDriedCannabis + id: RecipeDriedCannabis # SS220 Added to supa kitchen (microwave) name: dried cannabis leaves recipe result: LeavesCannabisDried time: 10 @@ -1922,7 +1921,7 @@ LeavesCannabis: 1 - type: microwaveMealRecipe - id: RecipeDriedCannabisRainbow + id: RecipeDriedCannabisRainbow # SS220 Added to supa kitchen (microwave) name: dried rainbow cannabis leaves recipe result: LeavesCannabisRainbowDried time: 10 @@ -1930,7 +1929,7 @@ LeavesCannabisRainbow: 1 - type: microwaveMealRecipe - id: RecipeTrashBakedBananaPeel + id: RecipeTrashBakedBananaPeel # SS220 Added to supa kitchen (microwave) name: baked banana peel recipe result: TrashBakedBananaPeel time: 5 @@ -1939,7 +1938,7 @@ # Suppermatter - type: microwaveMealRecipe - id: RecipeSuppermatter + id: RecipeSuppermatter # SS220 Added to supa kitchen (oven) name: suppermatter recipe result: FoodCakeSuppermatter time: 30 @@ -1951,7 +1950,7 @@ Plasma: 10 - type: microwaveMealRecipe - id: RecipeFoodBakedChevreChaud + id: RecipeFoodBakedChevreChaud # SS220 Added to supa kitchen (chopping board) name: chevre chaud recipe result: FoodBakedChevreChaud time: 5 @@ -1960,7 +1959,7 @@ FoodBreadBaguetteSlice: 1 - type: microwaveMealRecipe - id: RecipeFoodBakedChevreChaudCotton + id: RecipeFoodBakedChevreChaudCotton # SS220 Added to supa kitchen (chopping board) name: cotton chevre chaud recipe result: FoodBakedChevreChaudCotton time: 5 @@ -1969,7 +1968,7 @@ FoodBreadBaguetteCottonSlice: 1 - type: microwaveMealRecipe - id: RecipeCannabisButter + id: RecipeCannabisButter # SS220 Added to supa kitchen (microwave) name: cannabis butter recipe result: FoodCannabisButter time: 15 @@ -1978,7 +1977,7 @@ LeavesCannabis: 6 - type: microwaveMealRecipe - id: RecipeCannabisBrownies + id: RecipeCannabisBrownies # SS220 Added to supa kitchen (microwave) name: cannabis brownie recipe result: FoodBakedCannabisBrownieBatch time: 25 @@ -1991,7 +1990,7 @@ FoodSnackChocolateBar: 2 - type: microwaveMealRecipe - id: RecipeCornInButter + id: RecipeCornInButter # SS220 Added to supa kitchen (microwave) name: corn in butter recipe result: FoodMealCornInButter time: 10 @@ -2001,7 +2000,7 @@ FoodButter: 1 - type: microwaveMealRecipe - id: RecipePeaSoup + id: RecipePeaSoup # SS220 Added to supa kitchen (microwave) name: pea soup recipe result: FoodSoupPea time: 10 @@ -2012,7 +2011,7 @@ Water: 10 - type: microwaveMealRecipe - id: RecipeTacoShell + id: RecipeTacoShell # SS220 Added to supa kitchen (microwave) name: taco shell recipe result: FoodTacoShell time: 5 @@ -2020,7 +2019,7 @@ FoodDoughTortillaFlat: 1 # one third of a standard bread dough recipe - type: microwaveMealRecipe - id: RecipeTacoBeef + id: RecipeTacoBeef # SS220 Added to supa kitchen (microwave) name: beef taco recipe result: FoodTacoBeef time: 10 @@ -2030,7 +2029,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeTacoChicken + id: RecipeTacoChicken # SS220 Added to supa kitchen (microwave) name: chicken taco recipe result: FoodTacoChicken time: 10 @@ -2040,7 +2039,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeTacoFish + id: RecipeTacoFish # SS220 Added to supa kitchen (microwave) name: fish taco recipe result: FoodTacoFish time: 10 @@ -2052,7 +2051,7 @@ FoodCabbage: 1 - type: microwaveMealRecipe - id: RecipeTacoRat + id: RecipeTacoRat # SS220 Added to supa kitchen (microwave) name: rat taco recipe result: FoodTacoRat time: 10 @@ -2062,7 +2061,7 @@ FoodMeatRat: 1 - type: microwaveMealRecipe - id: RecipeTacoBeefSupreme + id: RecipeTacoBeefSupreme # SS220 Added to supa kitchen (microwave) name: beef taco supreme recipe result: FoodTacoBeefSupreme time: 10 @@ -2075,7 +2074,7 @@ FoodOnionSlice: 2 - type: microwaveMealRecipe - id: RecipeTacoChickenSupreme + id: RecipeTacoChickenSupreme # SS220 Added to supa kitchen (microwave) name: beef taco supreme recipe result: FoodTacoChickenSupreme time: 10 @@ -2088,7 +2087,7 @@ FoodOnionSlice: 2 - type: microwaveMealRecipe - id: RecipeCroissant + id: RecipeCroissant # SS220 Added to supa kitchen (oven) name: croissant recipe result: FoodBakedCroissant time: 5 @@ -2097,7 +2096,7 @@ FoodButterSlice: 1 - type: microwaveMealRecipe - id: RecipeCroissantCotton + id: RecipeCroissantCotton # SS220 Added to supa kitchen (oven) name: cotton croissant recipe result: FoodBakedCroissantCotton time: 5 @@ -2106,7 +2105,7 @@ FoodButterSlice: 1 - type: microwaveMealRecipe - id: RecipeThrowingCroissant + id: RecipeThrowingCroissant # SS220 Added to supa kitchen (microwave) name: throwing croissant recipe result: WeaponCroissant secretRecipe: true @@ -2117,7 +2116,7 @@ ShardGlass: 1 - type: microwaveMealRecipe - id: RecipeInertAnomalyMeat + id: RecipeInertAnomalyMeat # SS220 Added to supa kitchen (microwave) name: inert meat anomaly recipe result: FoodMeatAnomaly time: 5 @@ -2125,7 +2124,7 @@ AnomalyCoreFleshInert: 1 - type: microwaveMealRecipe - id: RecipeAnomalyMeat + id: RecipeAnomalyMeat # SS220 Added to supa kitchen (microwave) name: meat anomaly recipe result: FoodMeatAnomaly time: 5 @@ -2133,7 +2132,7 @@ AnomalyCoreFlesh: 1 - type: microwaveMealRecipe - id: RecipeAnomalyMeatCooked + id: RecipeAnomalyMeatCooked # SS220 Added to supa kitchen (microwave) name: cooked meat anomaly recipe result: FoodMeatAnomalyCooked time: 5 diff --git a/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml b/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml index 9d1947f03ebc..309a05fe8fb0 100644 --- a/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml @@ -1,5 +1,5 @@ - type: microwaveMealRecipe - id: RecipeAloeCream + id: RecipeAloeCream # SS220 Added to supa kitchen (microwave) name: aloe cream recipe result: AloeCream time: 10 @@ -7,7 +7,7 @@ FoodAloe: 1 - type: microwaveMealRecipe - id: RecipeMedicatedSuture + id: RecipeMedicatedSuture # SS220 Added to supa kitchen (microwave) name: medicated suture recipe result: MedicatedSuture time: 10 @@ -20,7 +20,7 @@ Cryptobiolin: 20 - type: microwaveMealRecipe - id: RecipeRegenerativeMesh + id: RecipeRegenerativeMesh # SS220 Added to supa kitchen (microwave) name: regenerative mesh recipe result: RegenerativeMesh time: 10 diff --git a/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/Baked/donkpocket.yml b/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/Baked/donkpocket.yml new file mode 100644 index 000000000000..21cb6be5d5e0 --- /dev/null +++ b/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/Baked/donkpocket.yml @@ -0,0 +1,48 @@ +- type: entity + name: gondola-pocket + parent: FoodDonkpocketBase + id: FoodDonkpocketGondola + description: The choice to use real gondola meat in the recipe is controversial, to say the least. + components: + - type: FlavorProfile + flavors: + - shocking + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Nutriment + Quantity: 5 + - type: Sprite + state: gondola + +- type: entity + name: warm gondola-pocket + parent: FoodDonkpocketGondola + id: FoodDonkpocketGondolaWarm + components: + - type: FlavorProfile + flavors: + - shocking + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Omnizine + Quantity: 2 + +- type: entity + parent: FoodBoxDonkpocket + id: FoodBoxDonkpocketGondola + name: box of gondola-flavoured donk-pockets + components: + - type: Sprite + state: gondola-box + - type: Item + sprite: Objects/Consumable/Food/Baked/donkpocket.rsi + - type: StorageFill + contents: + - id: FoodDonkpocketGondola + amount: 6 diff --git a/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/raw_food.yml b/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/raw_food.yml new file mode 100644 index 000000000000..f1beb664ce3d --- /dev/null +++ b/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/raw_food.yml @@ -0,0 +1,119 @@ +- type: entity + id: FoodRawBase + abstract: true + components: + - type: Construction + - type: AtmosExposed + - type: Temperature + currentTemperature: 290 + - type: InternalTemperature + thickness: 0.02 + area: 0.02 + conductivity: 0.43 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.25,0.25,0.25" + density: 4 + mask: + - ItemMask + restitution: 0.3 + friction: 0.2 + +- type: entity + parent: [FoodRawBase, FoodShawarma] + id: FoodRawShawarma + name: сырая шаурма + components: + - type: Construction + graph: Shawarma + node: start + defaultTarget: shawarma + - type: SolutionContainerManager + solutions: + food: + maxVol: 8 + reagents: + - ReagentId: Nutriment + Quantity: 3 + +- type: entity + parent: [FoodRawBase, FoodBakedChevreChaud] + id: FoodRawChevreChaud + name: raw chèvre chaud + components: + - type: Construction + graph: BakedChevreChaud + node: start + defaultTarget: bakedChevreChaud + - type: SolutionContainerManager + solutions: + food: + maxVol: 3 + reagents: + - ReagentId: Nutriment + Quantity: 1 + +- type: entity + parent: [FoodRawBase, FoodBakedChevreChaudCotton] + id: FoodRawChevreChaudCotton + name: raw cotton chèvre chaud + description: A disk of slightly melted chèvre flopped on top of a... cotton crostini, and toasted all-round. + components: + - type: Construction + graph: BakedChevreChaudCotton + node: start + defaultTarget: bakedChevreChaudCotton + - type: SolutionContainerManager + solutions: + food: + maxVol: 3 + reagents: + - ReagentId: Nutriment + Quantity: 0.5 + - ReagentId: Fiber + Quantity: 0.5 + +- type: entity + parent: [FoodRawBase, FoodMealRibs] + id: FoodRawMealRibs + name: raw bbq ribs + description: BBQ ribs, slathered in a healthy coating of BBQ sauce. The least vegan thing to ever exist. + components: + - type: Construction + graph: MealRibs + node: start + defaultTarget: mealRibs + - type: SolutionContainerManager + solutions: + food: + maxVol: 15 + reagents: + - ReagentId: Nutriment + Quantity: 1.5 + - ReagentId: Protein + Quantity: 5 + - ReagentId: BbqSauce + Quantity: 5 + +- type: entity + parent: [FoodRawBase, FoodMealEnchiladas] + id: FoodRawMealEnchiladas + name: raw enchiladas + description: Viva La Mexico! + components: + - type: Construction + graph: MealEnchiladas + node: start + defaultTarget: mealEnchiladas + - type: SolutionContainerManager + solutions: + food: + maxVol: 15 + reagents: + - ReagentId: Nutriment + Quantity: 3 + - ReagentId: CapsaicinOil + Quantity: 4 diff --git a/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/shawarma.yml b/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/shawarma.yml index 2990e3c9b122..61a91a93bd33 100644 --- a/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/shawarma.yml +++ b/Resources/Prototypes/SS220/Entities/Objects/Consumable/Food/shawarma.yml @@ -44,4 +44,6 @@ - type: Food - type: Sprite state: shawarmaGrill - \ No newline at end of file + - type: Construction + graph: Shawarma + node: shawarma diff --git a/Resources/Prototypes/SS220/Recipes/Construction/Graphs/food/Raw_food.yml b/Resources/Prototypes/SS220/Recipes/Construction/Graphs/food/Raw_food.yml new file mode 100644 index 000000000000..05fe57f7c1eb --- /dev/null +++ b/Resources/Prototypes/SS220/Recipes/Construction/Graphs/food/Raw_food.yml @@ -0,0 +1,88 @@ +- type: constructionGraph + id: Shawarma + start: start + graph: + + - node: start + edges: + - to: shawarma + completed: + - !type:PlaySound + sound: /Audio/Effects/sizzle.ogg + steps: + - minTemperature: 375 + + - node: shawarma + entity: FoodShawarmaOnGrill + + +- type: constructionGraph + id: BakedChevreChaud + start: start + graph: + + - node: start + edges: + - to: bakedChevreChaud + completed: + - !type:PlaySound + sound: /Audio/Effects/sizzle.ogg + steps: + - minTemperature: 375 + + - node: bakedChevreChaud + entity: FoodBakedChevreChaud + + +- type: constructionGraph + id: BakedChevreChaudCotton + start: start + graph: + + - node: start + edges: + - to: bakedChevreChaudCotton + completed: + - !type:PlaySound + sound: /Audio/Effects/sizzle.ogg + steps: + - minTemperature: 375 + + - node: bakedChevreChaudCotton + entity: FoodBakedChevreChaudCotton + + +- type: constructionGraph + id: MealRibs + start: start + graph: + + - node: start + edges: + - to: mealRibs + completed: + - !type:PlaySound + sound: /Audio/Effects/sizzle.ogg + steps: + - minTemperature: 375 + + - node: mealRibs + entity: FoodMealRibs + + +- type: constructionGraph + id: MealEnchiladas + start: start + graph: + + - node: start + edges: + - to: mealEnchiladas + completed: + - !type:PlaySound + sound: /Audio/Effects/sizzle.ogg + steps: + - minTemperature: 375 + + - node: mealEnchiladas + entity: FoodMealEnchiladas diff --git a/Resources/Prototypes/SS220/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/SS220/Recipes/Cooking/meal_recipes.yml index 4bb5a9cdb0d0..ffdb849307df 100644 --- a/Resources/Prototypes/SS220/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/SS220/Recipes/Cooking/meal_recipes.yml @@ -1,22 +1,22 @@ - type: microwaveMealRecipe - id: RecipeCheburek + id: RecipeCheburek # SS220 Added to supa kitchen (oven) name: Cheburek recipe result: FoodCheburek time: 15 reagents: - TableSalt: 5 + TableSalt: 5 solids: FoodDough: 1 FoodMeatCutlet: 1 FoodOnionSlice: 1 - type: microwaveMealRecipe - id: RecipeShawarma + id: RecipeShawarma # SS220 Added to supa kitchen (grille) name: Shawarma recipe result: FoodShawarma time: 15 reagents: - Mayo: 5 + Mayo: 5 solids: FoodDough: 1 FoodMeatChicken: 1 @@ -25,7 +25,7 @@ FoodCheeseSlice: 1 - type: microwaveMealRecipe - id: RecipeBorsch + id: RecipeBorsch # SS220 Added to supa kitchen (microwave) name: Borsch recipe result: FoodSoupBeet time: 10 @@ -39,7 +39,7 @@ Foodbeet: 1 - type: microwaveMealRecipe - id: RecipeShchi + id: RecipeShchi # SS220 Added to supa kitchen (microwave) name: Shchi recipe result: FoodSoupShchi time: 10 @@ -53,7 +53,7 @@ FoodCabbage: 1 - type: microwaveMealRecipe - id: RecipeOkroshka + id: RecipeOkroshka # SS220 Added to supa kitchen (microwave) name: Okroshka recipe result: FoodSoupOkroshka time: 10 @@ -65,12 +65,12 @@ FoodEggBoiled: 1 - type: microwaveMealRecipe - id: RecipeOkroshkaKvass + id: RecipeOkroshkaKvass # SS220 Added to supa kitchen (microwave) name: Okroshka witch kvass recipe result: FoodSoupOkroshkaKvass time: 10 reagents: - Kvass: 10 + Kvass: 10 solids: FoodBowlBig: 1 FoodMeatChicken: 1 @@ -79,7 +79,7 @@ FoodEggBoiled: 1 - type: microwaveMealRecipe - id: RecipeVinaigrette + id: RecipeVinaigrette # SS220 Added to supa kitchen (microwave) name: Vinaigrette recipe result: FoodSaladVinaigrette time: 10 @@ -93,7 +93,7 @@ # SS220-Salami-update begin - type: microwaveMealRecipe - id: RecipeMeatSalami + id: RecipeMeatSalami # SS220 Added to supa kitchen (microwave) name: Salami recipe result: FoodMeatSalami time: 30 @@ -106,7 +106,7 @@ # SS220 Slimesoup-recipe begin - type: microwaveMealRecipe - id: RecipeSlimeSoup + id: RecipeSlimeSoup # SS220 Added to supa kitchen (microwave) name: slime soup recipe result: FoodSoupSlime time: 10 @@ -120,7 +120,7 @@ #SS220 Nachos-recipe begin - type: microwaveMealRecipe - id: RecipeNachos + id: RecipeNachos # SS220 Added to supa kitchen (microwave) name: nachos recipe result: FoodMealNachos time: 10 @@ -131,7 +131,7 @@ FoodChiliPepper: 1 - type: microwaveMealRecipe - id: RecipeNachosCheesy + id: RecipeNachosCheesy # SS220 Added to supa kitchen (microwave) name: nachos cheesy recipe result: FoodMealNachosCheesy time: 15 @@ -143,7 +143,7 @@ FoodCheeseSlice: 2 - type: microwaveMealRecipe - id: RecipeNachosCuban + id: RecipeNachosCuban # SS220 Added to supa kitchen (microwave) name: nachos cuban recipe result: FoodMealNachosCuban time: 15 @@ -157,7 +157,7 @@ #SS220 Spicy UPD start - type: microwaveMealRecipe - id: RecipeSpicyPizza + id: RecipeSpicyPizza # SS220 Added to supa kitchen (oven) name: spicy pizza recipe result: SpicyPizzaFood time: 30 @@ -172,7 +172,7 @@ #SS220 caramel cane start - type: microwaveMealRecipe - id: Caramel + id: Caramel # SS220 Added to supa kitchen (microwave) name: caramelka result: CaramelFood time: 15 @@ -181,7 +181,7 @@ Water: 10 - type: microwaveMealRecipe - id: CaramelRed + id: CaramelRed # SS220 Added to supa kitchen (microwave) name: red caramelka result: RedCaramelCaneFood time: 15 @@ -191,7 +191,7 @@ CaramelBasedFood: 1 - type: microwaveMealRecipe - id: CaramelGreen + id: CaramelGreen # SS220 Added to supa kitchen (microwave) name: green caramelka result: GreenCaramelCaneFood time: 15 @@ -201,7 +201,7 @@ CaramelBasedFood: 1 - type: microwaveMealRecipe - id: CaramelGreenRed + id: CaramelGreenRed # SS220 Added to supa kitchen (microwave) name: greenred caramelka result: CaramelCaneGreenRedFood time: 15 @@ -212,7 +212,7 @@ CaramelBasedFood: 1 - type: microwaveMealRecipe - id: double Caramel + id: double Caramel # SS220 Added to supa kitchen (microwave) name: double caramelka result: DoubleCaramelCaneFood time: 20 @@ -221,4 +221,4 @@ JuiceLime: 10 solids: CaramelBasedFood: 2 -#SS220 caramel cane end \ No newline at end of file +#SS220 caramel cane end diff --git a/Resources/Prototypes/SS220/SupaKitchen/Instruments/chopping_board.yml b/Resources/Prototypes/SS220/SupaKitchen/Instruments/chopping_board.yml new file mode 100644 index 000000000000..6dbe9340d171 --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/Instruments/chopping_board.yml @@ -0,0 +1,56 @@ +- type: entity + id: ChoppingBoard + name: chopping board + description: A chessboard. Pieces included! + components: + - type: Sprite + sprite: SS220/Objects/Fun/Tabletop/chessboard.rsi #SS220-Tabletop-Resprite + state: chessboard + drawdepth: SmallObjects + - type: RecipeAssembler + instrumentType: choppingBoard + ignoreTime: true + - type: ItemPlacer + maxEntities: 12 + whitelist: + components: + - Food + - Drink + - type: PlaceableSurface + - type: Physics + bodyType: Dynamic + fixedRotation: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.08,-0.35,0.15,0.25" + mask: + - TabletopMachineMask + layer: + - Impassable + - MidImpassable + - LowImpassable + hard: false + - type: Item + size: Small + - type: Clickable + - type: InteractionOutline + - type: MovedByPressure + - type: EmitSoundOnCollide + sound: + collection: WeakHit + - type: EmitSoundOnLand + sound: + path: /Audio/Effects/drop.ogg + params: + volume: 2 + - type: DamageOnHighSpeedImpact + damage: + types: + Blunt: 5 + soundHit: + collection: MetalThud + - type: Pullable + - type: DamageExaminable diff --git a/Resources/Prototypes/SS220/SupaKitchen/Machines/grill.yml b/Resources/Prototypes/SS220/SupaKitchen/Machines/grill.yml new file mode 100644 index 000000000000..0e9f424cf33f --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/Machines/grill.yml @@ -0,0 +1,106 @@ +# - type: entity +# id: KitchenGrill +# parent: [ BaseMachinePowered, ConstructibleMachine ] +# name: grill +# description: It's magic. +# components: +# - type: CookingInstrument +# instrumentType: grill +# - type: CookingMachine +# heatPerSecond: 1500 #Should be strong enough to cook meat in 10s +# beginCookingSound: /Audio/Effects/lightburn.ogg +# loopingSound: /Audio/SS220/SupaKitchen/grillsizzle.ogg +# foodDoneSound: /Audio/SS220/SupaKitchen/ring.ogg +# - type: DeviceLinkSink +# ports: +# - On +# - type: ActivatableUI +# key: enum.CookingMachineUiKey.Key +# - type: UserInterface +# interfaces: +# enum.CookingMachineUiKey.Key: +# type: CookingMachineBoundUserInterface +# - type: Appearance +# - type: GenericVisualizer +# visuals: +# enum.PowerDeviceVisuals.VisualState: +# enum.CookingMachineVisualizerLayers.Base: +# Idle: { state: "grill_idle" } +# Broken: { state: "grill_idle" } +# Cooking: { state: "grill_cooking" } +# - type: Physics +# - type: Fixtures +# fixtures: +# fix1: +# shape: +# !type:PhysShapeAabb +# bounds: "-0.4,-0.4,0.4,0.4" +# density: 190 +# mask: +# - MachineMask +# layer: +# - MachineLayer +# - type: Sprite +# sprite: SS220/Structures/Machines/grill.rsi +# snapCardinals: true +# layers: +# - state: grill_idle +# map: ["enum.CookingMachineVisualizerLayers.Base"] +# - type: Destructible +# thresholds: +# - trigger: +# !type:DamageTrigger +# damage: 100 +# behaviors: +# - !type:PlaySoundBehavior +# sound: +# collection: MetalBreak +# - !type:DoActsBehavior +# acts: ["Breakage"] +# - trigger: +# !type:DamageTrigger +# damage: 150 +# behaviors: +# - !type:PlaySoundBehavior +# sound: +# collection: MetalBreak +# - !type:ChangeConstructionNodeBehavior +# node: machineFrame +# - !type:DoActsBehavior +# acts: ["Destruction"] +# - type: ApcPowerReceiver +# powerLoad: 400 +# - type: Machine +# board: GrillMachineCircuitboard +# - type: EmptyOnMachineDeconstruct +# containers: +# - cooking_machine_entity_container +# - type: ContainerContainer +# containers: +# cooking_machine_entity_container: !type:Container +# machine_board: !type:Container +# machine_parts: !type:Container +# - type: Construction +# graph: Machine +# node: machine +# containers: +# - machine_parts +# - machine_board +# - entity_storage +# - type: GuideHelp +# guides: +# - Chef + +# - type: entity +# id: GrillMachineCircuitboard +# parent: BaseMachineCircuitboard +# name: grill machine board +# components: +# - type: Sprite +# state: service +# - type: MachineBoard +# prototype: KitchenGrill +# stackRequirements: +# Capacitor: 1 +# Glass: 2 +# Cable: 2 diff --git a/Resources/Prototypes/SS220/SupaKitchen/Machines/oven.yml b/Resources/Prototypes/SS220/SupaKitchen/Machines/oven.yml new file mode 100644 index 000000000000..e2403338ed58 --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/Machines/oven.yml @@ -0,0 +1,128 @@ +- type: entity + id: KitchenOven + parent: [ BaseMachinePowered, ConstructibleMachine ] + name: oven + description: It's magic. + components: + - type: Transform + noRot: true + # Make it behave like a closet + - type: EntityStorage +# - type: EntityStorageVisuals +# #stateBaseClosed: generic +# stateDoorOpen: oven_door_open +# stateDoorClosed: oven_door_closed + - type: PlaceableSurface + placeCentered: true + isPlaceable: false + - type: Oven + instrumentType: oven + ignoreTime: true +# - type: CookingMachine +# beginCookingSound: "/Audio/SS220/SupaKitchen/oven/oven_loop_start.ogg" +# loopingSound: "/Audio/SS220/SupaKitchen/oven/oven_loop_mid.ogg" +# foodDoneSound: "/Audio/SS220/SupaKitchen/ring.ogg" +# useEntityStorage: true + - type: DeviceLinkSink + ports: + - On + - type: Sprite + sprite: SS220/Structures/Machines/oven.rsi + offset: 0,-0.5 + snapCardinals: true + layers: + - state: oven_base + map: ["base"] + - state: oven_door_closed + map: ["oven_door"] + - map: ["enum.OvenVisuals.Active"] + state: oven_off + - map: ["enum.OvenVisuals.ActiveUnshaded"] + state: oven_on_unshaded + visible: false + - type: Appearance + - type: GenericVisualizer + visuals: + enum.StorageVisuals.Open: + oven_door: + True: { state: oven_door_open } + False: { state: oven_door_closed } + enum.OvenVisuals.VisualState: + base: + UnPowered: { state: "oven_base" } + Idle: { state: "oven_base" } + Active: { state: "oven_base" } + Broken: { state: "oven_damaged" } + oven_door: + UnPowered: { visible: true } + Idle: { visible: true } + Active: { visible: true } + Broken: { visible: false } + - type: Physics + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + density: 190 + mask: + - MachineMask + layer: + - MachineLayer + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Breakage"] + - trigger: + !type:DamageTrigger + damage: 150 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:ChangeConstructionNodeBehavior + node: machineFrame + - !type:DoActsBehavior + acts: ["Destruction"] + - type: ApcPowerReceiver + powerLoad: 400 + - type: Machine + board: OvenMachineCircuitboard + - type: EmptyOnMachineDeconstruct + containers: + - entity_storage + - type: ContainerContainer + containers: + machine_board: !type:Container + machine_parts: !type:Container + entity_storage: !type:Container + - type: Construction + containers: + - machine_parts + - machine_board + - entity_storage + - type: GuideHelp + guides: + - Chef + +- type: entity + id: OvenMachineCircuitboard + parent: BaseMachineCircuitboard + name: oven machine board + components: + - type: Sprite + state: service + - type: MachineBoard + prototype: KitchenOven + stackRequirements: + Capacitor: 1 + Glass: 2 + Cable: 2 diff --git a/Resources/Prototypes/SS220/SupaKitchen/Recipes/choppingBoard.yml b/Resources/Prototypes/SS220/SupaKitchen/Recipes/choppingBoard.yml new file mode 100644 index 000000000000..7c828e63f2dd --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/Recipes/choppingBoard.yml @@ -0,0 +1,57 @@ +- type: cookingRecipe + id: RecipeShawarmaRaw + name: Shawarma recipe + result: FoodRawShawarma + instrumentType: choppingBoard + time: 5 + reagents: + Mayo: 5 + solids: + FoodDough: 1 + FoodMeatChicken: 1 + FoodCabbage: 1 + FoodTomato: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeFoodBakedChevreChaud + name: chevre chaud recipe + result: FoodRawChevreChaud + instrumentType: choppingBoard + time: 5 + solids: + FoodChevreSlice: 1 + FoodBreadBaguetteSlice: 1 + +- type: cookingRecipe + id: RecipeFoodBakedChevreChaudCotton + name: cotton chevre chaud recipe + result: FoodRawChevreChaudCotton + instrumentType: choppingBoard + time: 5 + solids: + FoodChevreSlice: 1 + FoodBreadBaguetteCottonSlice: 1 + +- type: cookingRecipe + id: RecipeRibs + name: BBQ ribs recipe + result: FoodRawMealRibs + instrumentType: choppingBoard + time: 5 + reagents: + BbqSauce: 5 + solids: + FoodMeat: 2 + FoodKebabSkewer: 1 + +- type: cookingRecipe + id: RecipeEnchiladas + name: enchiladas recipe + result: FoodMealEnchiladas + instrumentType: choppingBoard + time: 5 + solids: + FoodChiliPepper: 2 + FoodMeatCutlet: 1 + FoodCorn: 1 diff --git a/Resources/Prototypes/SS220/SupaKitchen/Recipes/microwave.yml b/Resources/Prototypes/SS220/SupaKitchen/Recipes/microwave.yml new file mode 100644 index 000000000000..9c73149010da --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/Recipes/microwave.yml @@ -0,0 +1,1387 @@ +# Toasts & Slices + +- type: cookingRecipe + id: RecipeButteredToast + name: buttered toast recipe + result: FoodBreadButteredToast + recipeGroup: toast + instrumentType: microwave + time: 5 + solids: + FoodBreadPlainSlice: 1 + FoodButter: 1 + +- type: cookingRecipe + id: RecipeFrenchToast + name: french toast recipe + result: FoodBreadFrenchToast + recipeGroup: toast + instrumentType: microwave + time: 5 + reagents: + Milk: 5 + Egg: 12 + solids: + FoodBreadPlainSlice: 1 + +- type: cookingRecipe + id: RecipeGarlicBread + name: garlic bread slice recipe + result: FoodBreadGarlicSlice + recipeGroup: slice + instrumentType: microwave + time: 5 + solids: + FoodBreadPlainSlice: 1 + FoodGarlic: 1 + FoodButter: 1 + +- type: cookingRecipe + id: RecipeJellyToast + name: jelly toast recipe + result: FoodBreadJellySlice + recipeGroup: slice + instrumentType: microwave + time: 5 + solids: + FoodBreadPlainSlice: 1 + FoodJellyAmanita: 1 #replace with jelly + +- type: cookingRecipe + id: RecipeMoldyBreadSlice + name: moldy bread slice recipe + result: FoodBreadMoldySlice + recipeGroup: slice + instrumentType: microwave + time: 5 + solids: + FoodBreadPlainSlice: 1 + FoodFlyAmanita: 1 + +- type: cookingRecipe + id: RecipeTwoBreadSlice + name: two slice recipe + result: FoodBreadTwoSlice + recipeGroup: slice + instrumentType: microwave + time: 5 + reagents: + Wine: 5 + solids: + FoodBreadPlainSlice: 2 + +- type: cookingRecipe + id: RecipeOnionRings + name: onion rings recipe + result: FoodOnionRings + recipeGroup: slice + instrumentType: microwave + time: 15 + solids: + FoodOnionSlice: 1 + +# Italian + +- type: cookingRecipe + id: RecipeBoiledSpaghetti + name: boiled spaghetti recipe + result: FoodNoodlesBoiled + recipeGroup: italian + instrumentType: microwave + time: 15 + reagents: + Flour: 15 + Egg: 6 + solids: + FoodPlate: 1 + FoodButter: 1 + +- type: cookingRecipe + id: RecipePastaTomato + name: pasta tomato recipe + result: FoodNoodles + recipeGroup: italian + instrumentType: microwave + time: 10 + solids: + FoodNoodlesBoiled: 1 + FoodTomato: 2 + +- type: cookingRecipe + id: RecipeMeatballSpaghetti + name: spaghetti & meatballs recipe + result: FoodNoodlesMeatball + recipeGroup: italian + instrumentType: microwave + time: 10 + solids: + FoodNoodlesBoiled: 1 + FoodMeatMeatball: 2 + +- type: cookingRecipe + id: RecipeButterNoodles + name: butter noodles recipe + result: FoodNoodlesButter + recipeGroup: italian + instrumentType: microwave + time: 10 + solids: + FoodNoodlesBoiled: 1 + FoodButter: 1 + +- type: cookingRecipe + id: RecipeChowMein + name: chow mein recipe + result: FoodNoodlesChowmein + recipeGroup: italian + instrumentType: microwave + time: 10 + solids: + FoodNoodlesBoiled: 1 + FoodEggplant: 1 + FoodCarrot: 1 + FoodCorn: 1 + FoodEgg: 1 + +- type: cookingRecipe + id: RecipeOatmeal + name: oatmeal recipe + result: FoodOatmeal + recipeGroup: italian + instrumentType: microwave + time: 15 + reagents: + Oats: 15 + Water: 10 + solids: + FoodBowlBig: 1 + +- type: cookingRecipe + id: RecipeBoiledRice + name: boiled rice recipe + result: FoodRiceBoiled + recipeGroup: italian + instrumentType: microwave + time: 15 + reagents: + Rice: 15 + Water: 10 + solids: + FoodBowlBig: 1 + +- type: cookingRecipe + id: RecipeRicePudding + name: rice pudding recipe + result: FoodRicePudding + recipeGroup: italian + instrumentType: microwave + time: 15 + reagents: + Rice: 15 + Milk: 10 + Sugar: 5 + solids: + FoodBowlBig: 1 + +- type: cookingRecipe + id: RecipeRicePork + name: rice and pork recipe + result: FoodRicePork + recipeGroup: italian + instrumentType: microwave + time: 15 + solids: + FoodRiceBoiled: 1 + FoodMeatCutlet: 3 + +- type: cookingRecipe + id: RecipeRiceGumbo + name: black-eyed gumbo recipe + result: FoodRiceGumbo + recipeGroup: italian + instrumentType: microwave + time: 15 + solids: + FoodRiceBoiled: 1 + FoodMeatCutlet: 3 + FoodChiliPepper: 2 + +- type: cookingRecipe + id: RecipeEggRice + name: egg-fried rice recipe + result: FoodRiceEgg + recipeGroup: italian + instrumentType: microwave + time: 15 + solids: + FoodRiceBoiled: 1 + FoodEgg: 1 + FoodCarrot: 1 + +- type: cookingRecipe + id: RecipeCopypasta + name: copypasta recipe + result: FoodNoodlesCopy + recipeGroup: italian + instrumentType: microwave + time: 10 + solids: + FoodNoodles: 2 + +# Soups & Stew + +- type: cookingRecipe + id: RecipeBisque + name: bisque recipe + result: FoodSoupBisque + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodTomato: 1 + FoodMushroom: 1 + FoodMeatFish: 1 + +- type: cookingRecipe + id: RecipeMeatballSoup + name: meatball soup recipe + result: FoodSoupMeatball + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodMeatMeatball: 1 + FoodCarrot: 1 + FoodPotato: 1 + +- type: cookingRecipe + id: RecipeNettleSoup + name: nettle soup recipe + result: FoodSoupNettle + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + Egg: 6 + solids: + FoodBowlBig: 1 + Nettle: 1 + FoodPotato: 1 + +- type: cookingRecipe + id: RecipeEyeballSoup + name: eyeball soup recipe + result: FoodSoupEyeball + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + OrganHumanEyes: 1 + FoodCarrot: 1 + FoodPotato: 1 + +- type: cookingRecipe + id: RecipeAmanitaJelly + name: amanita jelly recipe + result: FoodJellyAmanita + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 5 + Vodka: 5 + solids: + FoodFlyAmanita: 3 + +- type: cookingRecipe + id: RecipeOnionSoup + name: onion soup recipe + result: FoodSoupOnion + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodOnionSlice: 5 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeMushroomSoup + name: mushroom soup recipe + result: FoodSoupMushroom + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 5 + Milk: 5 + solids: + FoodBowlBig: 1 + FoodMushroom: 2 + +- type: cookingRecipe + id: RecipeStewSoup + name: stew recipe + result: FoodSoupStew + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodMeatCutlet: 3 + FoodTomato: 1 + FoodPotato: 1 + FoodCarrot: 1 + FoodEggplant: 1 + FoodMushroom: 1 + +- type: cookingRecipe + id: RecipeTomatoSoup + name: tomato soup recipe + result: FoodSoupTomato + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodTomato: 2 + +- type: cookingRecipe + id: RecipeTomatoBloodSoup + name: tomato blood soup recipe + result: FoodSoupTomatoBlood + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Blood: 10 + solids: + FoodBowlBig: 1 + FoodBloodTomato: 2 + +- type: cookingRecipe + id: RecipeWingFangChuSoup + name: wing fang chu recipe + result: FoodSoupWingFangChu + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Soysauce: 5 + solids: + FoodBowlBig: 1 + FoodMeatXenoCutlet: 2 + +- type: cookingRecipe + id: RecipeWingFangChuSoupSpider + name: wing fang chu recipe + result: FoodSoupWingFangChu + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Soysauce: 5 + solids: + FoodBowlBig: 1 + FoodMeatSpider: 2 + +- type: cookingRecipe + id: RecipeVegetableSoup + name: vegetable soup recipe + result: FoodSoupVegetable + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 5 + solids: + FoodBowlBig: 1 + FoodCorn: 1 + FoodCarrot: 1 + FoodPotato: 1 + FoodEggplant: 1 + +- type: cookingRecipe + id: RecipeClownTearsSoup + name: clown tears soup recipe + result: FoodSoupClown + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodBanana: 1 + MaterialBananium1: 1 + +- type: cookingRecipe + id: RecipeClownTearsSoupAlt + name: clown's tears recipe + result: FoodSoupClown + recipeGroup: soup + instrumentType: microwave + time: 15 + solids: + FoodBowlBig: 1 + FoodOnionSlice: 1 + FoodTomato: 1 + BikeHorn: 1 + +- type: cookingRecipe + id: RecipeChiliClown + name: chili con carnival recipe + result: FoodSoupChiliClown + recipeGroup: soup + instrumentType: microwave + time: 30 + solids: + FoodBowlBig: 1 + FoodChiliPepper: 1 + FoodMeatCutlet: 1 + FoodOnionSlice: 1 + FoodTomato: 1 + ClothingShoesClown: 1 + +- type: cookingRecipe + id: RecipeMonkeysDelightSoup + name: monkeys delight recipe + result: FoodSoupMonkey + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Flour: 5 + TableSalt: 1 + Blackpepper: 1 + solids: + FoodBowlBig: 1 + FoodBanana: 1 + MonkeyCube: 1 + +- type: cookingRecipe + id: RecipeBungoSoup + name: bungo soup recipe + result: FoodSoupBungo + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 5 + solids: + FoodBowlBig: 1 + FoodBungo: 2 + FoodChiliPepper: 1 + +- type: cookingRecipe + id: RecipeBoiledSnail + name: boiled snail recipe + result: FoodMeatSnailCooked + recipeGroup: soup + instrumentType: microwave + time: 5 + reagents: + Water: 10 + solids: + FoodMeatSnail: 1 + +- type: cookingRecipe + id: RecipeEscargotSoup + name: escargot recipe + result: FoodSoupEscargot + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 5 + solids: + FoodBowlBig: 1 + FoodOnionSlice: 1 + FoodButter: 1 + FoodMeatSnailCooked: 1 + +- type: cookingRecipe + id: RecipeHotChili + name: hot chili recipe + result: FoodSoupChiliHot + recipeGroup: soup + instrumentType: microwave + time: 20 + solids: + FoodBowlBig: 1 + FoodChiliPepper: 1 + FoodMeatCutlet: 1 + FoodOnionSlice: 1 + FoodTomato: 1 + +- type: cookingRecipe + id: RecipeColdChili + name: cold chili recipe + result: FoodSoupChiliCold + recipeGroup: soups + instrumentType: microwave + time: 5 + reagents: + Nitrogen: 5 + solids: + FoodSoupChiliHot: 1 + +- type: cookingRecipe + id: RecipeBorsch + name: Borsch recipe + result: FoodSoupBeet + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodMeatCutlet: 1 + FoodPotato: 1 + FoodOnionSlice: 1 + Foodbeet: 1 + +- type: cookingRecipe + id: RecipeShchi + name: Shchi recipe + result: FoodSoupShchi + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 10 + solids: + FoodBowlBig: 1 + FoodMeatCutlet: 1 + FoodPotato: 1 + FoodOnionSlice: 1 + FoodCabbage: 1 + +- type: cookingRecipe + id: RecipeSlimeSoup + name: slime soup recipe + result: FoodSoupSlime + recipeGroup: soup + instrumentType: microwave + time: 10 + reagents: + Water: 5 + Slime: 10 + solids: + FoodBowlBig: 1 + FoodMeatSlime: 1 + +# Other + +- type: cookingRecipe + id: RecipeCubanCarp + name: cuban carp recipe + result: FoodMealCubancarp + recipeGroup: other + instrumentType: microwave + time: 15 + solids: + FoodDough: 1 + FoodCheeseSlice: 2 + FoodChiliPepper: 1 + FoodMeatFish: 2 + +- type: cookingRecipe + id: RecipeSashimi + name: sashimi recipe + result: FoodMealSashimi + recipeGroup: other + instrumentType: microwave + time: 15 + reagents: + TableSalt: 1 + solids: + FoodMeatFish: 2 + +- type: cookingRecipe + id: RecipeMisoColaSoup + name: salty sweet misocola soup recipe + result: DisgustingSweptSoup + recipeGroup: other + instrumentType: microwave + time: 15 + reagents: + Cola: 5 + solids: + FoodSoupMiso: 1 + +- type: cookingRecipe + id: RecipeFries + name: space fries recipe + result: FoodMealFries + recipeGroup: other + instrumentType: microwave #TODO: Implement deep fryer + time: 15 + reagents: + TableSalt: 5 + solids: + FoodPotato: 1 + +- type: cookingRecipe + id: RecipeCheesyFries + name: cheesy fries recipe + result: FoodMealFriesCheesy + recipeGroup: other + instrumentType: microwave + time: 15 + reagents: + TableSalt: 5 + solids: + FoodPotato: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeCarrotFries + name: carrot fries recipe + result: FoodMealFriesCarrot + recipeGroup: other + instrumentType: microwave + time: 15 + reagents: + TableSalt: 5 + solids: + FoodCarrot: 1 + +- type: cookingRecipe + id: RecipePopcorn + name: popcorn recipe + result: FoodSnackPopcorn + recipeGroup: other + instrumentType: microwave + time: 5 + solids: + FoodCorn: 1 + +- type: cookingRecipe + id: RecipeMeatSalami + name: Salami recipe + result: FoodMeatSalami + recipeGroup: other + instrumentType: microwave + time: 30 + reagents: + SodiumHydroxide: 10 + solids: + FoodMeat: 3 + FoodEgg: 2 + +- type: cookingRecipe + id: RecipeNachos + name: nachos recipe + result: FoodMealNachos + recipeGroup: other + instrumentType: microwave + time: 10 + reagents: + Blackpepper: 5 + solids: + FoodDoughTortillaSlice: 2 + FoodChiliPepper: 1 + +- type: cookingRecipe + id: RecipeNachosCheesy + name: nachos cheesy recipe + result: FoodMealNachosCheesy + recipeGroup: other + instrumentType: microwave + time: 15 + reagents: + Blackpepper: 5 + solids: + FoodDoughTortillaSlice: 2 + FoodChiliPepper: 1 + FoodCheeseSlice: 2 + +- type: cookingRecipe + id: RecipeNachosCuban + name: nachos cuban recipe + result: FoodMealNachosCuban + recipeGroup: other + instrumentType: microwave + time: 15 + reagents: + Hotsauce: 5 + solids: + FoodDoughTortillaSlice: 2 + FoodChiliPepper: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipePelmeni + name: pelmeni recipe + result: FoodPelmeniBowl + recipeGroup: other + instrumentType: microwave + time: 10 + reagents: + Water: 20 + solids: + FoodBowlBig: 1 + FoodMeatMeatball: 1 + FoodDoughSlice: 3 + +- type: cookingRecipe + id: RecipeQueso + name: queso recipe + result: FoodMealQueso + recipeGroup: other + instrumentType: microwave + time: 15 + reagents: + blackpepper: 5 + solids: + FoodChiliPepper: 1 + FoodCheeseSlice: 2 + +- type: cookingRecipe + id: RecipeCornInButter + name: corn in butter recipe + result: FoodMealCornInButter + recipeGroup: other + instrumentType: microwave + time: 10 + solids: + FoodCorn: 1 + FoodPlate: 1 + FoodButter: 1 + +- type: cookingRecipe + id: RecipePeaSoup + name: pea soup recipe + result: FoodSoupPea + recipeGroup: other + instrumentType: microwave + time: 10 + solids: + FoodPeaPod: 2 + FoodBowlBig: 1 + reagents: + Water: 10 + +#Donks i guess +- type: cookingRecipe + id: RecipeWarmDonkpocket + name: warm donk pocket recipe + result: FoodDonkpocketWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocket: 1 + +- type: cookingRecipe + id: RecipeWarmDankpocket + name: warm dank pocket recipe + result: FoodDonkpocketDankWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketDank: 1 + +- type: cookingRecipe + id: RecipeWarmDonkpocketSpicy + name: warm spicy donk-pocket recipe + result: FoodDonkpocketSpicyWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketSpicy: 1 + +- type: cookingRecipe + id: RecipeWarmDonkpocketTeriyaki + name: warm teriyaki-pocket recipe + result: FoodDonkpocketTeriyakiWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketTeriyaki: 1 + +- type: cookingRecipe + id: RecipeWarmDonkpocketPizza + name: warm pizza-pocket recipe + result: FoodDonkpocketPizzaWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketPizza: 1 + +- type: cookingRecipe + id: RecipeDonkpocketHonk + name: warm honk-pocket recipe + result: FoodDonkpocketHonkWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketHonk: 1 + +- type: cookingRecipe + id: RecipeDonkpocketBerry + name: warm berry-pocket recipe + result: FoodDonkpocketBerryWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketBerry: 1 + +- type: cookingRecipe + id: RecipeDonkpocketStonk + name: warm stonk-pocket recipe + result: FoodDonkpocketStonkWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketStonk: 1 + +- type: cookingRecipe + id: RecipeDonkpocketCarp + name: warm carp-pocket recipe + result: FoodDonkpocketCarpWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketCarp: 1 + +- type: cookingRecipe + id: RecipeDonkpocketGondola + name: warm gondola-pocket recipe + result: FoodDonkpocketGondolaWarm + recipeGroup: donkpocket + instrumentType: microwave + time: 5 + solids: + FoodDonkpocketGondola: 1 + +# SALADS +# TODO: Move these out once construction kitchen is implemented +- type: cookingRecipe + id: RecipeHerbSalad + name: herb salad recipe + result: FoodSaladHerb + recipeGroup: salad + instrumentType: microwave + time: 5 + solids: + FoodBowlBig: 1 + FoodAmbrosiaVulgaris: 3 + FoodApple: 1 + +- type: cookingRecipe + id: RecipeValidSalad + name: valid salad recipe + result: FoodSaladValid + recipeGroup: salad + instrumentType: microwave + time: 5 + solids: + FoodBowlBig: 1 + FoodAmbrosiaVulgaris: 3 + FoodPotato: 1 + FoodMeatMeatball: 1 + +- type: cookingRecipe + id: RecipeColeslaw + name: coleslaw recipe + result: FoodSaladColeslaw + recipeGroup: salad + instrumentType: microwave + time: 5 + reagents: + Vinaigrette: 5 + solids: + FoodBowlBig: 1 + FoodOnionRed: 1 + FoodCabbage: 1 + +- type: cookingRecipe + id: RecipeCaesarSalad + name: caesar salad recipe + result: FoodSaladCaesar + recipeGroup: salad + instrumentType: microwave + time: 5 + reagents: + OilOlive: 5 + solids: + FoodBowlBig: 1 + FoodOnionRedSlice: 1 + FoodBreadPlainSlice: 1 + FoodCheeseSlice: 1 + FoodCabbage: 1 + +- type: cookingRecipe + id: RecipeCitrusSalad + name: citrus salad recipe + result: FoodSaladCitrus + recipeGroup: salad + instrumentType: microwave + time: 5 + solids: + FoodBowlBig: 1 + FoodOrange: 1 + FoodLemon: 1 + FoodLime: 1 + +- type: cookingRecipe + id: RecipeKimchiSalad + name: kimchi salad recipe + result: FoodSaladKimchi + recipeGroup: salad + instrumentType: microwave + time: 5 + reagents: + Vinegar: 5 + solids: + FoodBowlBig: 1 + FoodCarrot: 1 + FoodCabbage: 1 + FoodGarlic: 1 + +- type: cookingRecipe + id: RecipeFruitSalad + name: fruit salad recipe + result: FoodSaladFruit + recipeGroup: salad + instrumentType: microwave + time: 5 + solids: + FoodBowlBig: 1 + FoodOrange: 1 + FoodApple: 1 + FoodGrape: 1 + FoodWatermelonSlice: 2 + +- type: cookingRecipe + id: RecipeJungleSalad + name: jungle salad recipe + result: FoodSaladJungle + recipeGroup: salad + instrumentType: microwave + time: 5 + solids: + FoodBowlBig: 1 + FoodBanana: 1 + FoodApple: 1 + FoodGrape: 1 + FoodWatermelonSlice: 2 + +- type: cookingRecipe + id: RecipeWatermelonFruitBowlSalad + name: watermelon fruit bowl recipe + result: FoodSaladWatermelonFruitBowl + recipeGroup: salad + instrumentType: microwave + time: 5 + solids: + FoodWatermelon: 1 + FoodApple: 1 + FoodBanana: 1 + FoodLemon: 1 + FoodOrange: 1 + FoodAmbrosiaVulgaris: 1 + +- type: cookingRecipe + id: RecipeOkroshka + name: Okroshka recipe + result: FoodSoupOkroshka + recipeGroup: salad + instrumentType: microwave + time: 10 + solids: + FoodBowlBig: 1 + FoodMeatChicken: 1 + FoodPotato: 1 + FoodOnionSlice: 1 + FoodEggBoiled: 1 + +- type: cookingRecipe + id: RecipeOkroshkaKvass + name: Okroshka witch kvass recipe + result: FoodSoupOkroshkaKvass + recipeGroup: salad + instrumentType: microwave + time: 10 + reagents: + Kvass: 10 + solids: + FoodBowlBig: 1 + FoodMeatChicken: 1 + FoodPotato: 1 + FoodOnionSlice: 1 + FoodEggBoiled: 1 + +- type: cookingRecipe + id: RecipeVinaigrette + name: Vinaigrette recipe + result: FoodSaladVinaigrette + recipeGroup: salad + instrumentType: microwave + time: 10 + solids: + FoodBowlBig: 1 + FoodPotato: 1 + FoodOnionSlice: 1 + Foodbeet: 1 + FoodPeaPod: 1 + FoodCarrot: 1 + +# NOT ACTUAL FOOD + +- type: cookingRecipe + id: RecipeDriedTeaLeaves + name: dried tea leaves recipe + result: LeavesTeaDried + recipeGroup: notfood + instrumentType: microwave + time: 10 + solids: + LeavesTea: 1 + +#TODO: universal recipes for tobacco and cannabis +- type: cookingRecipe + id: RecipeDriedTobaccoMicrowave + name: dried tobacco leaves recipe + result: LeavesTobaccoDried + recipeGroup: notfood + instrumentType: microwave + time: 10 + solids: + LeavesTobacco: 1 + +- type: cookingRecipe + id: RecipeDriedCannabis + name: dried cannabis leaves recipe + result: LeavesCannabisDried + recipeGroup: notfood + instrumentType: microwave + time: 10 + solids: + LeavesCannabis: 1 + +- type: cookingRecipe + id: RecipeDriedCannabisRainbow + name: dried rainbow cannabis leaves recipe + result: LeavesCannabisRainbowDried + recipeGroup: notfood + instrumentType: microwave + time: 10 + solids: + LeavesCannabisRainbow: 1 + +- type: cookingRecipe + id: RecipeTrashBakedBananaPeel + name: baked banana peel recipe + result: TrashBakedBananaPeel + recipeGroup: notfood + instrumentType: microwave + time: 5 + solids: + TrashBananaPeel: 1 + +- type: cookingRecipe + id: RecipeCannabisButter + name: cannabis butter recipe + result: FoodCannabisButter + recipeGroup: notfood + instrumentType: microwave + time: 15 + solids: + FoodButter: 1 + LeavesCannabis: 6 + +- type: cookingRecipe + id: RecipeCannabisBrownies + name: cannabis brownie recipe + result: FoodBakedCannabisBrownieBatch + recipeGroup: notfood + instrumentType: microwave + time: 25 + reagents: + Flour: 15 + Sugar: 30 + Egg: 18 + solids: + FoodCannabisButter: 2 + FoodSnackChocolateBar: 2 + +# Medical recipes +- type: cookingRecipe + id: RecipeAloeCream + name: aloe cream recipe + result: AloeCream + recipeGroup: medical + instrumentType: microwave + time: 10 + solids: + FoodAloe: 1 + +- type: cookingRecipe + id: RecipeMedicatedSuture + name: medicated suture recipe + result: MedicatedSuture + recipeGroup: medical + instrumentType: microwave + time: 10 + solids: + FoodPoppy: 1 + Brutepack: 1 + MaterialCloth1: 1 + reagents: + TranexamicAcid: 50 + Cryptobiolin: 50 + +- type: cookingRecipe + id: RecipeRegenerativeMesh + name: regenerative mesh recipe + result: RegenerativeMesh + recipeGroup: medical + instrumentType: microwave + time: 10 + solids: + FoodAloe: 1 + Ointment: 1 + MaterialCloth1: 1 + reagents: + Sigynate: 50 + Dermaline: 50 + +# Anomaly +- type: cookingRecipe + id: RecipeInertAnomalyMeat + name: inert meat anomaly recipe + result: FoodMeatAnomaly + recipeGroup: anomaly + instrumentType: microwave + time: 5 + solids: + AnomalyCoreFleshInert: 1 + +- type: cookingRecipe + id: RecipeAnomalyMeat + name: meat anomaly recipe + result: FoodMeatAnomaly + recipeGroup: anomaly + instrumentType: microwave + time: 5 + solids: + AnomalyCoreFlesh: 1 + +- type: cookingRecipe + id: RecipeAnomalyMeatCooked + name: cooked meat anomaly recipe + result: FoodMeatAnomalyCooked + recipeGroup: anomaly + instrumentType: microwave + time: 5 + solids: + FoodMeatAnomaly: 1 + +# Caramel cane +- type: cookingRecipe + id: Caramel + name: caramelka + result: CaramelFood + recipeGroup: caramel + instrumentType: microwave + time: 15 + reagents: + Sugar: 10 + Water: 10 + +- type: cookingRecipe + id: CaramelRed + name: red caramelka + result: RedCaramelCaneFood + recipeGroup: caramel + instrumentType: microwave + time: 15 + reagents: + Grenadine: 5 + solids: + CaramelBasedFood: 1 + +- type: cookingRecipe + id: CaramelGreen + name: green caramelka + result: GreenCaramelCaneFood + recipeGroup: caramel + instrumentType: microwave + time: 15 + reagents: + JuiceLime: 5 + solids: + CaramelBasedFood: 1 + +- type: cookingRecipe + id: CaramelGreenRed + name: greenred caramelka + result: CaramelCaneGreenRedFood + recipeGroup: caramel + instrumentType: microwave + time: 15 + reagents: + Grenadine: 5 + JuiceLime: 5 + solids: + CaramelBasedFood: 1 + +- type: cookingRecipe + id: double Caramel + name: double caramelka + result: DoubleCaramelCaneFood + recipeGroup: caramel + instrumentType: microwave + time: 20 + reagents: + Grenadine: 10 + JuiceLime: 10 + solids: + CaramelBasedFood: 2 + +# Tacos + +- type: cookingRecipe + id: RecipeTacoShell + name: taco shell recipe + result: FoodTacoShell + recipeGroup: taco + instrumentType: microwave + time: 5 + solids: + FoodDoughTortillaFlat: 1 # one third of a standard bread dough recipe + +- type: cookingRecipe + id: RecipeTacoBeef + name: beef taco recipe + result: FoodTacoBeef + recipeGroup: taco + instrumentType: microwave + time: 10 + solids: + FoodTacoShell: 1 + FoodMeatCutlet: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeTacoChicken + name: chicken taco recipe + result: FoodTacoChicken + recipeGroup: taco + instrumentType: microwave + time: 10 + solids: + FoodTacoShell: 1 + FoodMeatChickenCutlet: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeTacoFish + name: fish taco recipe + result: FoodTacoFish + recipeGroup: taco + instrumentType: microwave + time: 10 + solids: + FoodTacoShell: 1 + FoodMeatFish: 1 + FoodOnionSlice: 2 + FoodTomato: 1 + FoodCabbage: 1 + +- type: cookingRecipe + id: RecipeTacoRat + name: rat taco recipe + result: FoodTacoRat + recipeGroup: taco + instrumentType: microwave + time: 10 + solids: + FoodTacoShell: 1 + FoodCheeseSlice: 1 + FoodMeatRat: 1 + +- type: cookingRecipe + id: RecipeTacoBeefSupreme + name: beef taco supreme recipe + result: FoodTacoBeefSupreme + recipeGroup: taco + instrumentType: microwave + time: 10 + solids: + FoodTacoShell: 1 + FoodCheeseSlice: 1 + FoodMeatCutlet: 1 + FoodTomato: 1 + FoodCabbage: 1 + FoodOnionSlice: 2 + +- type: cookingRecipe + id: RecipeTacoChickenSupreme + name: beef taco supreme recipe + result: FoodTacoChickenSupreme + recipeGroup: taco + instrumentType: microwave + time: 10 + solids: + FoodTacoShell: 1 + FoodCheeseSlice: 1 + FoodMeatChickenCutlet: 1 + FoodTomato: 1 + FoodCabbage: 1 + FoodOnionSlice: 2 + +# Secrets +- type: cookingRecipe + id: RecipeBaguetteSword + name: baguette sword recipe + result: WeaponBaguette + instrumentType: microwave + secretRecipe: true + time: 15 + reagents: + TableSalt: 5 + Blackpepper: 5 + solids: + FoodDough: 1 + PartRodMetal1: 1 + +- type: cookingRecipe + id: RecipeThrowingCroissant + name: throwing croissant recipe + result: WeaponCroissant + instrumentType: microwave + secretRecipe: true + time: 5 + solids: + FoodCroissantRaw: 1 + FoodButterSlice: 1 + ShardGlass: 1 diff --git a/Resources/Prototypes/SS220/SupaKitchen/Recipes/oven.yml b/Resources/Prototypes/SS220/SupaKitchen/Recipes/oven.yml new file mode 100644 index 000000000000..2477bf8384f5 --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/Recipes/oven.yml @@ -0,0 +1,1371 @@ +# Bagels + +- type: cookingRecipe + id: RecipeBagel + name: bagel recipe + result: FoodBagel + recipeGroup: bagel + instrumentType: oven + time: 5 + solids: + FoodDoughRope: 1 # created by rolling a dough slice. + +- type: cookingRecipe + id: RecipeBagelPoppy + name: poppyseed bagel recipe + result: FoodBagelPoppy + recipeGroup: bagel + instrumentType: oven + time: 5 + solids: + FoodDoughRope: 1 + PoppySeeds: 1 + +- type: cookingRecipe + id: RecipeBagelCotton + name: cotton bagel recipe + result: FoodBagelCotton + recipeGroup: bagel + instrumentType: oven + time: 5 + solids: + FoodDoughCottonRope: 1 + +# Burgers + +- type: cookingRecipe + id: RecipeAppendixBurger + name: appendix burger recipe + result: FoodBurgerAppendix + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + OrganHumanAppendix: 1 + +- type: cookingRecipe + id: RecipeBaconBurger + name: bacon burger recipe + result: FoodBurgerBacon + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatBacon: 1 + FoodCheeseSlice: 2 + +- type: cookingRecipe + id: RecipeBaseballBurger + name: baseball burger recipe + result: FoodBurgerBaseball + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + BaseBallBat: 1 + +- type: cookingRecipe + id: RecipeBearger + name: bearger recipe + result: FoodBurgerBear + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatBear: 1 + +- type: cookingRecipe + id: RecipeBigBiteBurger + name: big bite burger recipe + result: FoodBurgerBig + recipeGroup: burger + instrumentType: oven + time: 15 + solids: + FoodBreadBun: 1 + FoodMeat: 2 + FoodCheeseSlice: 1 + FoodTomato: 1 + FoodOnionSlice: 2 + +- type: cookingRecipe #Added to metamorph recipes + id: RecipeBrainBurger + name: brain burger recipe + result: FoodBurgerBrain + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + OrganHumanBrain: 1 + +- type: cookingRecipe + id: RecipeCatBurger + name: cat burger recipe + result: FoodBurgerCat + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeat: 1 + ClothingHeadHatCatEars: 1 + +- type: cookingRecipe #Added to metamorph recipes + id: RecipeCheeseburger + name: cheeseburger recipe + result: FoodBurgerCheese + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeat: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe #Added to metamorph recipes + id: RecipeChickenSandwich + name: chicken sandwich recipe + result: FoodBurgerChicken + recipeGroup: burger + instrumentType: oven + time: 10 + reagents: + Mayo: 5 + solids: + FoodBreadBun: 1 + FoodMeatChicken: 1 + +- type: cookingRecipe + id: RecipeClownBurger + name: clownburger recipe + result: FoodBurgerClown + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + ClothingMaskClown: 1 + +- type: cookingRecipe + id: RecipeCorgiBurger + name: corgi burger recipe + result: FoodBurgerCorgi + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatCorgi: 1 + +- type: cookingRecipe #Added to metamorph recipes + id: RecipeCrabBurger + name: crab burger recipe + result: FoodBurgerCrab + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatCrab: 2 + +- type: cookingRecipe + id: RecipeCrazyHamburger + name: crazy hamburger recipe + result: FoodBurgerCrazy + recipeGroup: burger + instrumentType: oven + time: 15 + reagents: + OilOlive: 15 + solids: + FoodBreadBun: 1 + FoodMeat: 2 + FoodCheeseSlice: 2 + FoodChiliPepper: 1 + FoodCabbage: 1 + CrayonGreen: 1 + Flare: 1 + +- type: cookingRecipe #Added to metamorph recipes + id: RecipeDuckBurger + name: duck sandwich recipe + result: FoodBurgerDuck + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatDuck: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeEmpoweredBurger + name: empowered burger recipe + result: FoodBurgerEmpowered + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + SheetPlasma1: 2 + +- type: cookingRecipe + id: RecipeCarpBurger + name: fillet-o-carp burger recipe + result: FoodBurgerCarp + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatFish: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeFiveBurger + name: five alarm burger recipe + result: FoodBurgerFive + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeat: 1 + FoodChiliPepper: 3 + +- type: cookingRecipe + id: RecipeGhostBurger + name: ghost burger recipe + result: FoodBurgerGhost + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + ClothingOuterGhostSheet: 1 # SS220 Old craft ghostburger + +- type: cookingRecipe + id: RecipeHumanBurger + name: human burger recipe + result: FoodBurgerHuman + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatHuman: 1 + +- type: cookingRecipe + id: RecipeJellyBurger + name: jelly burger recipe + result: FoodBurgerJelly + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodJellyAmanita: 1 + +- type: cookingRecipe + id: RecipeBurgerMcguffin + name: McGuffin recipe + result: FoodBurgerMcguffin + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodCheeseSlice: 1 + FoodEgg: 2 + +- type: cookingRecipe + id: RecipeBurgerMcrib + name: BBQ rib sandwich recipe + result: FoodBurgerMcrib + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMealRibs: 1 + FoodOnionSlice: 1 + +- type: cookingRecipe + id: RecipeMimeBurger + name: mime burger recipe + result: FoodBurgerMime + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + ClothingMaskMime: 1 + +- type: cookingRecipe + id: RecipePlainBurger + name: plain burger recipe + result: FoodBurgerPlain + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeat: 1 + +- type: cookingRecipe + id: RecipeRatBurger + name: rat burger recipe + result: FoodBurgerRat + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatRat: 1 + +- type: cookingRecipe + id: RecipeRobotBurger + name: roburger recipe + result: FoodBurgerRobot + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + CapacitorStockPart: 2 + # i would add steel to this recipe but the microwave explodes + +- type: cookingRecipe + id: RecipeSoylentBurger + name: soylent burger recipe + result: FoodBurgerSoy + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodCheeseSlice: 2 + FoodSoybeans: 2 #replace with soylent green when those become craftable + +- type: cookingRecipe + id: RecipeSpellBurger + name: spell burger recipe + result: FoodBurgerSpell + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + ClothingHeadHatWizard: 1 + +- type: cookingRecipe + id: RecipeSuperBiteBurger + name: super bite burger recipe + result: FoodBurgerSuper + recipeGroup: burger + instrumentType: oven + time: 25 + reagents: + TableSalt: 5 + solids: + FoodBreadBun: 1 + FoodMeat: 2 + FoodCheeseSlice: 2 + FoodTomato: 2 + FoodEgg: 2 + +- type: cookingRecipe + id: RecipeTofuBurger + name: tofu burger recipe + result: FoodBurgerTofu + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodTofuSlice: 1 + +- type: cookingRecipe + id: RecipeXenoburger + name: xenoburger recipe + result: FoodBurgerXeno + recipeGroup: burger + instrumentType: oven + time: 10 + solids: + FoodBreadBun: 1 + FoodMeatXeno: 1 + +- type: cookingRecipe + id: RecipeMothRoachburger + name: mothroachburger recipe + result: FoodBurgerMothRoach + recipeGroup: burger + instrumentType: oven + time: 5 + solids: + FoodBreadBun: 1 + MobMothroach: 1 + +# Breads & Sandwiches + +- type: cookingRecipe + id: RecipeBun + name: bun recipe + result: FoodBreadBun + recipeGroup: bread + instrumentType: oven + time: 5 + solids: + FoodDoughSlice: 1 + +- type: cookingRecipe + id: RecipeBananaBread + name: banana bread recipe + result: FoodBreadBanana + recipeGroup: bread + instrumentType: oven + time: 15 + solids: + FoodDough: 1 + FoodBanana: 1 + +- type: cookingRecipe + id: RecipeCornbread + name: cornbread recipe + result: FoodBreadCorn + recipeGroup: bread + instrumentType: oven + time: 10 + solids: + FoodDoughCornmeal: 1 + +- type: cookingRecipe + id: RecipeCreamCheeseBread + name: cream cheese bread recipe + result: FoodBreadCreamcheese + recipeGroup: bread + instrumentType: oven + time: 15 + reagents: + Milk: 5 + solids: + FoodDough: 1 + FoodCheeseSlice: 2 + +- type: cookingRecipe + id: RecipeMeatBread + name: meat bread recipe + result: FoodBreadMeat + recipeGroup: bread + instrumentType: oven + time: 15 + solids: + FoodDough: 1 + FoodMeatCutlet: 2 + FoodCheeseSlice: 2 + +- type: cookingRecipe + id: RecipeMimanaBread + name: mimana bread recipe + result: FoodBreadMimana + recipeGroup: bread + instrumentType: oven + time: 15 + reagents: + Nothing: 5 + solids: + FoodDough: 1 + FoodTofu: 1 + +- type: cookingRecipe + id: RecipeBreadPlain + name: plain bread recipe + result: FoodBreadPlain + recipeGroup: bread + instrumentType: oven + time: 10 + solids: + FoodDough: 1 + +- type: cookingRecipe + id: RecipeBreadCotton + name: cotton bread recipe + result: FoodBreadCotton + recipeGroup: bread + instrumentType: oven + time: 10 + solids: + FoodDoughCotton: 1 + +- type: cookingRecipe + id: RecipeSausageBread + name: sausage bread recipe + result: FoodBreadSausage + recipeGroup: bread + instrumentType: oven + time: 15 + solids: + FoodDough: 1 + FoodMeat: 1 #replace with sausage + +- type: cookingRecipe + id: RecipeSpiderMeatBread + name: spider meat bread recipe + result: FoodBreadMeatSpider + recipeGroup: bread + instrumentType: oven + time: 15 + solids: + FoodDough: 1 + FoodMeatSpiderCutlet: 2 + FoodCheeseSlice: 2 + +- type: cookingRecipe + id: RecipeTofuBread + name: tofu bread recipe + result: FoodBreadTofu + recipeGroup: bread + instrumentType: oven + time: 15 + solids: + FoodDough: 1 + FoodTofu: 1 + +- type: cookingRecipe + id: RecipeXenoMeatBread + name: xeno meat bread recipe + result: FoodBreadMeatXeno + recipeGroup: bread + instrumentType: oven + time: 15 + solids: + FoodDough: 1 + FoodMeatXenoCutlet: 2 + FoodCheeseSlice: 2 + +- type: cookingRecipe + id: RecipeBreadDog + name: bread dog recipe + result: MobBreadDog + recipeGroup: bread + instrumentType: oven + time: 15 + reagents: + Cognizine: 5 + solids: + FoodBreadSausage: 1 + OrganAnimalHeart: 1 + FoodSpaceshroomCooked: 1 + +- type: cookingRecipe + id: RecipeBaguette + name: baguette recipe + result: FoodBreadBaguette + recipeGroup: bread + instrumentType: oven + time: 15 + reagents: + TableSalt: 5 + Blackpepper: 5 + solids: + FoodDough: 1 + +- type: cookingRecipe + id: RecipeBaguetteCotton + name: baguette recipe + result: FoodBreadBaguetteCotton + recipeGroup: bread + instrumentType: oven + time: 15 + reagents: + TableSalt: 5 + Blackpepper: 5 + solids: + FoodDoughCotton: 1 + +# Pizzas + +- type: cookingRecipe + id: RecipeMargheritaPizza + name: margherita pizza recipe + result: FoodPizzaMargherita + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDough: 1 + FoodCheeseSlice: 1 + FoodTomato: 4 + +- type: cookingRecipe + id: RecipeMushroomPizza + name: mushroom pizza recipe + result: FoodPizzaMushroom + recipeGroup: pizza + instrumentType: oven + time: 25 + solids: + FoodDough: 1 + FoodMushroom: 5 + +- type: cookingRecipe + id: RecipeMeatPizza + name: meat pizza recipe + result: FoodPizzaMeat + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDough: 1 + FoodMeat: 3 + FoodCheeseSlice: 1 + FoodTomato: 1 + +- type: cookingRecipe + id: RecipeVegetablePizza + name: vegetable pizza recipe + result: FoodPizzaVegetable + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDough: 1 + FoodEggplant: 1 + FoodCarrot: 1 + FoodCorn: 1 + FoodTomato: 1 + +- type: cookingRecipe + id: RecipeHawaiianPizza + name: Hawaiian pizza recipe + result: FoodPizzaPineapple + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDough: 1 + FoodMeatChickenCutlet: 3 + FoodPineappleSlice: 5 + +- type: cookingRecipe + id: RecipeDankPizza + name: dank pizza recipe + result: FoodPizzaDank + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDough: 1 + FoodAmbrosiaVulgaris: 3 + FoodCheeseSlice: 1 + FoodTomato: 1 + +- type: cookingRecipe + id: RecipeDonkpocketPizza + name: donk-pocket pizza recipe + result: FoodPizzaDonkpocket + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDough: 1 + FoodDonkpocketWarm: 3 + FoodCheeseSlice: 1 + FoodTomato: 1 + +- type: cookingRecipe + id: RecipeUraniumPizza + name: spicy rock pizza recipe + result: FoodPizzaUranium + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDoughFlat: 1 + FoodChiliPepper: 2 + FoodTomato: 2 + SheetUranium1: 2 + +- type: cookingRecipe + id: RecipeCottonPizza + name: cotton pizza recipe + result: FoodPizzaCotton + recipeGroup: pizza + instrumentType: oven + time: 30 + solids: + FoodDoughCottonFlat: 1 + CottonBol: 4 + +- type: cookingRecipe + id: RecipeSpicyPizza + name: spicy pizza recipe + result: SpicyPizzaFood + recipeGroup: pizza + instrumentType: oven + time: 30 + reagents: + ReaperSauce: 40 + solids: + FoodDoughFlat: 1 + FoodMeat: 3 + FoodCheeseSlice: 1 + FoodTomato: 1 + +# Cookies + +- type: cookingRecipe + id: RecipeCookie + name: cookie recipe + result: FoodBakedCookie + recipeGroup: cookie + instrumentType: oven + time: 5 + reagents: + Flour: 5 + Sugar: 5 + solids: + FoodButter: 1 + FoodSnackChocolateBar: 1 + +- type: cookingRecipe + id: RecipeSugarCookie + name: sugar cookie recipe + result: FoodBakedCookieSugar + recipeGroup: cookie + instrumentType: oven + time: 5 + reagents: + Flour: 5 + Sugar: 10 + solids: + FoodButter: 1 + +- type: cookingRecipe + id: RecipeRaisinCookie + name: raisin cookie recipe + result: FoodBakedCookieRaisin + recipeGroup: cookie + instrumentType: oven + time: 5 + reagents: + Flour: 5 + Sugar: 5 + solids: + FoodSnackRaisins: 1 + +- type: cookingRecipe + id: RecipeCookieOatmeal + name: oatmeal cookie recipe + result: FoodBakedCookieOatmeal + recipeGroup: cookie + instrumentType: oven + time: 5 + reagents: + Oats: 5 + Sugar: 5 + solids: + FoodButter: 1 + +- type: cookingRecipe + id: RecipeWaffles + name: waffle recipe + result: FoodBakedWaffle + instrumentType: oven + time: 10 + reagents: + Flour: 5 + Milk: 5 + Egg: 6 + SodaWater: 5 + +- type: cookingRecipe + id: RecipeWaffleSoy + name: soy waffle recipe + result: FoodBakedWaffleSoy + instrumentType: oven + time: 10 + reagents: + Flour: 5 + MilkSoy: 5 + Egg: 6 + SodaWater: 5 + +# Pancakes + +- type: cookingRecipe + id: RecipeChocolateChipPancake + name: chocolate chip pancake recipe + result: FoodBakedPancakeCc + recipeGroup: cookie + instrumentType: oven + time: 5 + reagents: + Flour: 5 + Milk: 5 + Egg: 6 + solids: + FoodSnackChocolateBar: 1 + +- type: cookingRecipe + id: RecipePancake + name: pancake recipe + result: FoodBakedPancake + instrumentType: oven + time: 5 + reagents: + Flour: 5 + Milk: 5 + Egg: 6 + +- type: cookingRecipe + id: RecipeBlueberryPancake + name: blueberry pancake recipe + result: FoodBakedPancakeBb + instrumentType: oven + time: 5 + reagents: + Flour: 5 + Milk: 5 + Egg: 6 + solids: + FoodBerries: 2 + +# Pies + +- type: cookingRecipe + id: RecipeAmanitaPie + name: amanita pie recipe + result: FoodPieAmanita + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodFlyAmanita: 1 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeApplePie + name: apple pie + result: FoodPieApple + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodApple: 3 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeBaklava + name: baklava recipe + result: FoodPieBaklava + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodSnackPistachios: 1 #i'd rather use a botany crop but we don't have nuts yet + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeBananaCreamPie + name: banana cream pie + result: FoodPieBananaCream + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodBanana: 3 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeBerryClafoutis + name: berry clafoutis recipe + result: FoodPieClafoutis + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodBerries: 3 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeCherryPie + name: cherry pie recipe + result: FoodPieCherry + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodCherry: 5 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeFrostyPie + name: frosty pie recipe + result: FoodPieFrosty + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodChillyPepper: 3 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeMeatPie + name: meat pie recipe + result: FoodPieMeat + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodMeat: 3 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipePumpkinPie + name: pumpkin pie recipe + result: FoodPiePumpkin + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodPumpkin: 1 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeXenoPie + name: xeno pie recipe + result: FoodPieXeno + recipeGroup: pie + instrumentType: oven + time: 15 + solids: + FoodDoughPie: 1 + FoodMeatXeno: 3 + FoodPlateTin: 1 + +# Tarts + +- type: cookingRecipe + id: RecipeCocoTart + name: chocolate lava tart recipe + result: FoodTartCoco + recipeGroup: tart + instrumentType: oven + time: 15 + reagents: + Sugar: 5 + Milk: 5 + solids: + FoodDoughPie: 1 + FoodSnackChocolateBar: 3 + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeGappleTart + name: golden apple streusel tart recipe + result: FoodTartGapple + recipeGroup: tart + instrumentType: oven + time: 15 + reagents: + Gold: 10 + Sugar: 5 + Milk: 5 + solids: + FoodDoughPie: 1 + FoodApple: 2 #in absence of the real gapple i'm substituting one apple with 10u gold (one ingot) + FoodPlateTin: 1 + +- type: cookingRecipe + id: RecipeGrapeTart + name: grape tart recipe + result: FoodTartGrape + recipeGroup: tart + instrumentType: oven + time: 15 + reagents: + Sugar: 5 + Milk: 5 + solids: + FoodDoughPie: 1 + FoodGrape: 3 + +- type: cookingRecipe + id: RecipeMimeTart + name: mime tart recipe + result: FoodTartMime + recipeGroup: tart + instrumentType: oven + time: 15 + reagents: + Sugar: 5 + Milk: 5 + solids: + FoodDoughPie: 1 + FoodMimana: 3 + FoodPlateTin: 1 + +# Cakes + +- type: cookingRecipe + id: RecipeAppleCake + name: apple cake recipe + result: FoodCakeApple + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodApple: 3 + +- type: cookingRecipe + id: RecipeCarrotCake + name: carrot cake recipe + result: FoodCakeCarrot + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodCarrot: 3 + +- type: cookingRecipe + id: RecipeLemonCake + name: lemon cake recipe + result: FoodCakeLemon + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodLemon: 3 + +- type: cookingRecipe + id: RecipeLemoonCake + name: lemoon cake recipe + result: FoodCakeLemoon + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodLemoon: 2 + FoodBerries: 1 #dark colouring + +- type: cookingRecipe + id: RecipeOrangeCake + name: orange cake recipe + result: FoodCakeOrange + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodOrange: 3 + +- type: cookingRecipe + id: RecipeBlueberryCake + name: blueberry cake recipe + result: FoodCakeBlueberry + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodBerries: 3 + +- type: cookingRecipe + id: RecipeLimeCake + name: lime cake recipe + result: FoodCakeLime + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodLime: 3 + +- type: cookingRecipe + id: RecipeCheeseCake + name: cheese cake recipe + result: FoodCakeCheese + recipeGroup: cake + instrumentType: oven + time: 5 + reagents: + Cream: 10 + solids: + FoodCakePlain: 1 + FoodCheeseSlice: 3 + +- type: cookingRecipe + id: RecipePumpkinCake + name: pumpkin cake recipe + result: FoodCakePumpkin + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodPumpkin: 1 + +- type: cookingRecipe + id: RecipeClownCake + name: clown cake recipe + result: FoodCakeClown + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + ClothingMaskClown: 1 + FoodCakePlain: 1 + +- type: cookingRecipe + id: RecipeCake + name: cake recipe + result: FoodCakePlain + recipeGroup: cake + instrumentType: oven + time: 15 + solids: + FoodCakeBatter: 1 + +- type: cookingRecipe + id: RecipeBirthdayCake + name: birthday cake recipe + result: FoodCakeBirthday + recipeGroup: cake + instrumentType: oven + time: 5 + reagents: + Cream: 5 + solids: + FoodCakePlain: 1 + +- type: cookingRecipe + id: RecipeChocolateCake + name: chocolate cake recipe + result: FoodCakeChocolate + recipeGroup: cake + instrumentType: oven + time: 5 + solids: + FoodCakePlain: 1 + FoodSnackChocolateBar: 2 + +- type: cookingRecipe + id: RecipeBrainCake + name: brain cake recipe + result: FoodCakeBrain + recipeGroup: cake + instrumentType: oven + time: 15 + solids: + FoodCakePlain: 1 + OrganHumanBrain: 1 + +- type: cookingRecipe + id: RecipeSlimeCake + name: slime cake recipe + result: FoodCakeSlime + recipeGroup: cake + instrumentType: oven + time: 5 + reagents: + Slime: 15 + solids: + FoodCakePlain: 1 + +- type: cookingRecipe + id: RecipeCatCake + name: cat cake recipe + result: MobCatCake + recipeGroup: cake + instrumentType: oven + time: 15 + reagents: + Milk: 15 + Cognizine: 5 + solids: + FoodCakePlain: 1 + FoodSnackRaisins: 1 + OrganAnimalHeart: 1 + +# Muffins + +- type: cookingRecipe + id: RecipeMuffin + name: muffin recipe + result: FoodBakedMuffin + recipeGroup: muffin + instrumentType: oven + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + reagents: + Sugar: 10 + +- type: cookingRecipe + id: RecipeMuffinChocolate + name: chocolate muffin recipe + result: FoodBakedMuffinChocolate + recipeGroup: muffin + instrumentType: oven + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodSnackChocolateBar: 1 + reagents: + Sugar: 10 + +- type: cookingRecipe + id: RecipeMuffinBerry + name: berry muffin recipe + result: FoodBakedMuffinBerry + recipeGroup: muffin + instrumentType: oven + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodBerries: 1 + reagents: + Sugar: 10 + +- type: cookingRecipe + id: RecipeMuffinBanana + name: banana muffin recipe + result: FoodBakedMuffinBanana + recipeGroup: muffin + instrumentType: oven + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodBanana: 1 + reagents: + Sugar: 10 + +- type: cookingRecipe + id: RecipeMuffinCherry + name: cherry muffin recipe + result: FoodBakedMuffinCherry + recipeGroup: muffin + instrumentType: oven + time: 15 + solids: + FoodPlateMuffinTin: 1 + FoodDoughSlice: 1 + FoodCherry: 3 + reagents: + Sugar: 10 + +# Other + +- type: cookingRecipe + id: RecipeLoadedBakedPotato + name: loaded baked potato recipe + result: FoodMealPotatoLoaded + recipeGroup: other + instrumentType: oven + time: 15 + solids: + FoodPotato: 1 + FoodCheeseSlice: 1 + +- type: cookingRecipe + id: RecipeDumplings + name: dumplings recipe + result: FoodBakedDumplings + recipeGroup: other + instrumentType: oven + time: 15 + reagents: + Water: 10 + UncookedAnimalProteins: 6 + solids: + FoodDoughSlice: 3 + +- type: cookingRecipe + id: RecipeBrownies + name: brownie recipe + result: FoodBakedBrownieBatch + recipeGroup: other + instrumentType: oven + time: 25 + reagents: + Flour: 15 + Sugar: 30 + Egg: 18 + solids: + FoodButter: 2 + FoodSnackChocolateBar: 2 + +- type: cookingRecipe + id: RecipeCroissant + name: croissant recipe + result: FoodBakedCroissant + recipeGroup: other + instrumentType: oven + time: 5 + solids: + FoodCroissantRaw: 1 + FoodButterSlice: 1 + +- type: cookingRecipe + id: RecipeCroissantCotton + name: cotton croissant recipe + result: FoodBakedCroissantCotton + recipeGroup: other + instrumentType: oven + time: 5 + solids: + FoodCroissantRawCotton: 1 + FoodButterSlice: 1 + +- type: cookingRecipe + id: RecipeCheburek + name: Cheburek recipe + result: FoodCheburek + recipeGroup: other + instrumentType: oven + time: 15 + reagents: + TableSalt: 5 + solids: + FoodDough: 1 + FoodMeatCutlet: 1 + FoodOnionSlice: 1 + +# Suppermatter +- type: cookingRecipe + id: RecipeSuppermatter + name: suppermatter recipe + result: FoodCakeSuppermatter + recipeGroup: suppermatter + instrumentType: oven + time: 30 + solids: + FoodCakeBatter: 2 + reagents: + Sugar: 30 + Nitrogen: 10 + Plasma: 10 diff --git a/Resources/Prototypes/SS220/SupaKitchen/Recipes/testrecipe.yml b/Resources/Prototypes/SS220/SupaKitchen/Recipes/testrecipe.yml new file mode 100644 index 000000000000..0e0f63f06a4d --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/Recipes/testrecipe.yml @@ -0,0 +1,9 @@ +- type: cookingRecipe + id: RecipeBunTest + name: bun recipe + result: FoodBreadBun + instrumentType: microwave + time: 5 + solids: + FoodDough: 1 + FoodApple: 1 diff --git a/Resources/Prototypes/SS220/SupaKitchen/instrumentTypes.yml b/Resources/Prototypes/SS220/SupaKitchen/instrumentTypes.yml new file mode 100644 index 000000000000..579888da3ff8 --- /dev/null +++ b/Resources/Prototypes/SS220/SupaKitchen/instrumentTypes.yml @@ -0,0 +1,14 @@ +- type: cookingInstrumentType + id: microwave + name: микроволновка + iconPath: /Textures/SS220/SupaKitchen/Interface/InstrumentIcons/mw.png + +- type: cookingInstrumentType + id: oven + name: духовка + iconPath: /Textures/SS220/SupaKitchen/Interface/InstrumentIcons/oven.png + +- type: cookingInstrumentType + id: choppingBoard + name: разделочная доска + iconPath: /Textures/SS220/SupaKitchen/Interface/InstrumentIcons/grill.png diff --git a/Resources/Prototypes/SS220/tags.yml b/Resources/Prototypes/SS220/tags.yml index 5449cbe81439..4faeeb20272b 100644 --- a/Resources/Prototypes/SS220/tags.yml +++ b/Resources/Prototypes/SS220/tags.yml @@ -212,3 +212,11 @@ - type: Tag id: BananiumHorn + + +# SS220 supa kithen +- type: Tag + id: MicrowaveMachineUnsafe + +- type: Tag + id: MicrowaveSelfUnsafe diff --git a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml index 321e207a8108..a4d2003ff53e 100644 --- a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml +++ b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml @@ -1,13 +1,5 @@ -## Начало -Это не все существующие рецепты, этот список предназначен для демонстрации основ. - -Продукты смешиваются в мензурке, еда готовится в микроволновке. Время готовки обычно указывается в рецепте. - -ВНИМАНИЕ: Это не автоматически сгенерированный список, все, что здесь перечислено, может устареть. На Wiki есть гораздо больше, чем перечислено здесь. - -## Основы: Смешивание - +## Смешивание: - Тесто = 15 муки, 10 воды - Кукурузное тесто = 1 яйцо (6 ед.), 10 молока, 15 кукурузной муки - Tortila Dough = 15 Cornmeal, 10 Water @@ -47,48 +39,70 @@ Buzz! Don't forget about Moth diet! -## Второстепенные продукты - -- Кусочек теста: нарезать тесто -- Булочка: положить в микроволновку кусочек теста на 5 секунд -- Сырая котлета: нарезать сырое мясо -- Сырный ломтик: нарезать головку сыра -- Плоское тесто: раскатайте тесто скалкой либо другим крыглым объектом (огнетушитель, жестяная банка, бутылка). -- Tortilla Dough Slice: cut Tortilla Dough -- Flat Tortilla Dough: Use a rolling pin or a round object (fire extinguisher, soda can, bottle) on Tortilla Dough Slice -- Taco Shell: Microwave Flat Tortilla Dough for 5 Seconds - -## Примеры блюд - -- Хлеб: положить в микроволновку тесто на 10 секунд -- Бургер: положить в микроволновку 1 булочку и 1 сырое мясо на 10 секунд -- Томатный суп: 10 ед. воды, 1 пустая миска и 2 помидора на 10 секунд -- Цитрусовый салат: 1 пустая миска, 1 лемон, 1 лайм, 1 апельсин на 5 секунд -- Маргарита: положить в микроволновку 1 плоское тесто, 1 сырный ломтик и 4 помидора на 30 секунд -- Торт: 1 тесто для торта в микроволновку на 15 секунд -- Яблочный пирог: 1 тесто для пирога, 3 яблока и 1 формочку для пирога на 15 секунд -- Beef Taco: Microwave 1 Taco Shell, 1 Raw Meat Cutlet, 1 Cheese Wedge for 10 Seconds -- Cuban Carp : Microwave 1 Dough, 1 Cheese Wedge, 1 Chili, 1 Carp Meat for 15 Seconds -- Banana Cream Pie : Microwave 1 Pie Dough, 3 Bananas, and 1 Pie Tin for 15 Seconds -- Carrot Fries : Microwave 1 Carrot, 15u Salt for 15 Seconds -- Pancake : Microwave 5u Flour, 5u Milk, 1 Egg (6u) for 5 Seconds +## Прочее - - - - - - - - - - - - - - - - - +- Кусок теста: Разрежьте Тесто +- Сырая котлета: Разрежьте сырое мясо +- Кусок сыра: Разрежьте головку сыра + +## Рецепты + +## Выпечка + + + + + +## Бургеры + + +## Пицца + + +## Тако + + +## Пироги + + +## Тарты + + +## Торты + + +## Сладости + + + + +## Итальянская кухня + + +## Супы + + +## Донк-покеты + + +## Салаты + + +## Гриль + + +## Разделочная доска + + +## Медицинское + + +## Прочее + + + + +## Без категории + diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/gondola-box.png b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/gondola-box.png new file mode 100644 index 000000000000..5bda53839e05 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/gondola-box.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/gondola.png b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/gondola.png new file mode 100644 index 000000000000..700805e5185d Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/gondola.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json index 3cbfe7d8e826..ef3654c21e77 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json @@ -22,6 +22,12 @@ { "name": "dank" }, + { + "name": "gondola" + }, + { + "name": "gondola-box" + }, { "name": "pizza" }, diff --git a/Resources/Textures/SS220/Structures/Machines/grill.rsi/grill_cooking.png b/Resources/Textures/SS220/Structures/Machines/grill.rsi/grill_cooking.png new file mode 100644 index 000000000000..a81671807c22 Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/grill.rsi/grill_cooking.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/grill.rsi/grill_idle.png b/Resources/Textures/SS220/Structures/Machines/grill.rsi/grill_idle.png new file mode 100644 index 000000000000..d771a7821ad0 Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/grill.rsi/grill_idle.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/grill.rsi/meta.json b/Resources/Textures/SS220/Structures/Machines/grill.rsi/meta.json new file mode 100644 index 000000000000..b5fce30974b1 --- /dev/null +++ b/Resources/Textures/SS220/Structures/Machines/grill.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt", + "copyright": "Made by MIXnikita for SS220", + "states": [ + { + "name": "grill_cooking" + }, + { + "name": "grill_idle" + } + ] +} diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/meta.json b/Resources/Textures/SS220/Structures/Machines/oven.rsi/meta.json new file mode 100644 index 000000000000..8d58c438ed00 --- /dev/null +++ b/Resources/Textures/SS220/Structures/Machines/oven.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 64 + }, + "license": "EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt", + "copyright": "Made by MIXnikita for SS220", + "states": [ + { + "name": "oven_base" + }, + { + "name": "oven_damaged" + }, + { + "name": "oven_door_closed" + }, + { + "name": "oven_door_open" + }, + { + "name": "oven_off" + }, + { + "name": "oven_on" + }, + { + "name": "oven_on_unshaded" + } + ] +} diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_base.png b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_base.png new file mode 100644 index 000000000000..b547d4f998fb Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_base.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_damaged.png b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_damaged.png new file mode 100644 index 000000000000..b5c4255ef455 Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_damaged.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_door_closed.png b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_door_closed.png new file mode 100644 index 000000000000..4b120ee1941e Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_door_closed.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_door_open.png b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_door_open.png new file mode 100644 index 000000000000..9755d5aa2d4e Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_door_open.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_off.png b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_off.png new file mode 100644 index 000000000000..4f73aa664b63 Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_off.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_on.png b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_on.png new file mode 100644 index 000000000000..7470aad658e2 Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_on.png differ diff --git a/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_on_unshaded.png b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_on_unshaded.png new file mode 100644 index 000000000000..6777b88aa0e7 Binary files /dev/null and b/Resources/Textures/SS220/Structures/Machines/oven.rsi/oven_on_unshaded.png differ diff --git a/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/grill.png b/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/grill.png new file mode 100644 index 000000000000..a81671807c22 Binary files /dev/null and b/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/grill.png differ diff --git a/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/mw.png b/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/mw.png new file mode 100644 index 000000000000..3a431a620640 Binary files /dev/null and b/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/mw.png differ diff --git a/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/oven.png b/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/oven.png new file mode 100644 index 000000000000..72e9758104f5 Binary files /dev/null and b/Resources/Textures/SS220/SupaKitchen/Interface/InstrumentIcons/oven.png differ diff --git a/Resources/migration.yml b/Resources/migration.yml index b3b2ce15e462..945ce9223923 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -208,7 +208,7 @@ DefaultStationBeaconTeslaEngine: null AsteroidRockCrab1: AsteroidRock # SS220 asteroid-migration # 2024-01-28 -FoodBoxDonkpocketGondola: FoodBoxDonkpocketPizza +# FoodBoxDonkpocketGondola: FoodBoxDonkpocketPizza # SS220 Return gondola pocket # 2024-01-31 SpyCrewMonitor: null