diff --git a/Content.Client/_CP14/Cooking/CP14ClientCookingSystem.cs b/Content.Client/_CP14/Cooking/CP14ClientCookingSystem.cs new file mode 100644 index 0000000000..aa6ed2f828 --- /dev/null +++ b/Content.Client/_CP14/Cooking/CP14ClientCookingSystem.cs @@ -0,0 +1,59 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using System.Numerics; +using Content.Shared._CP14.Cooking; +using Content.Shared._CP14.Cooking.Components; +using Robust.Client.GameObjects; +using Robust.Shared.Random; + +namespace Content.Client._CP14.Cooking; + +public sealed class CP14ClientCookingSystem : CP14SharedCookingSystem +{ + [Dependency] private readonly SpriteSystem _sprite = default!; + [Dependency] private readonly IRobustRandom _random = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterHandleState); + } + + private void OnAfterHandleState(Entity ent, ref AfterAutoHandleStateEvent args) + { + if (!TryComp(ent, out var sprite)) + return; + + if (ent.Comp.Visuals is null) + return; + + //Remove old layers + foreach (var key in ent.Comp.RevealedLayers) + { + _sprite.RemoveLayer((ent.Owner, sprite), key); + } + ent.Comp.RevealedLayers.Clear(); + + + //Add new layers + var counter = 0; + foreach (var layer in ent.Comp.Visuals) + { + var keyCode = $"cp14-food-layer-{counter}"; + ent.Comp.RevealedLayers.Add(keyCode); + + _sprite.LayerMapTryGet((ent.Owner, sprite), ent.Comp.TargetLayerMap, out var index, false); + + _sprite.AddBlankLayer((ent.Owner, sprite), index); + _sprite.LayerMapSet((ent.Owner, sprite), keyCode, index); + _sprite.LayerSetData((ent.Owner, sprite), index, layer); + if (_random.Prob(0.5f)) //50% invert chance + _sprite.LayerSetScale((ent.Owner, sprite), index, new Vector2(-1, 1)); + + counter++; + } + } +} diff --git a/Content.Server/_CP14/Cooking/CP14CookingSystem.cs b/Content.Server/_CP14/Cooking/CP14CookingSystem.cs new file mode 100644 index 0000000000..81c6c3a50f --- /dev/null +++ b/Content.Server/_CP14/Cooking/CP14CookingSystem.cs @@ -0,0 +1,89 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using System.Linq; +using Content.Server.Temperature.Systems; +using Content.Shared._CP14.Cooking; +using Content.Shared._CP14.Cooking.Components; +using Content.Shared._CP14.Temperature; +using Content.Shared.Random.Helpers; +using Robust.Shared.Random; + +namespace Content.Server._CP14.Cooking; + +public sealed class CP14CookingSystem : CP14SharedCookingSystem +{ + [Dependency] private readonly TemperatureSystem _temperature = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRandomFoodMapInit); + } + + private void OnRandomFoodMapInit(Entity ent, ref MapInitEvent args) + { + if (!TryComp(ent, out var holder)) + return; + + if (!_random.Prob(ent.Comp.Prob)) + return; + + var randomFood = _random.Pick(OrderedRecipes.Where(r => r.FoodType == holder.FoodType).ToList()); + + //Name and Description + if (randomFood.FoodData.Name is not null) + _metaData.SetEntityName(ent, Loc.GetString(randomFood.FoodData.Name)); + if (randomFood.FoodData.Desc is not null) + _metaData.SetEntityDescription(ent, Loc.GetString(randomFood.FoodData.Desc)); + + //Visuals + holder.Visuals = randomFood.FoodData.Visuals; + Dirty(ent.Owner, holder); + } + + protected override void OnCookBurned(Entity ent, ref CP14BurningDoAfter args) + { + base.OnCookBurned(ent, ref args); + + if (_random.Prob(ent.Comp.BurntAdditionalSpawnProb)) + Spawn(ent.Comp.BurntAdditionalSpawn, Transform(ent).Coordinates); + } + + protected override void OnCookFinished(Entity ent, ref CP14CookingDoAfter args) + { + base.OnCookFinished(ent, ref args); + + if (args.Cancelled || args.Handled) + return; + + TryTransformAll(ent); + } + + private void TryTransformAll(Entity ent) + { + if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container)) + return; + + var containedEntities = container.ContainedEntities.ToList(); + + foreach (var contained in containedEntities) + { + if (!TryComp(contained, out var transformable)) + continue; + + if (!transformable.AutoTransformOnCooked) + continue; + + if (transformable.Entries.Count == 0) + continue; + + var entry = transformable.Entries[0]; + + _temperature.ForceChangeTemperature(contained, entry.TemperatureRange.X); + } + } +} diff --git a/Content.Server/_CP14/Cooking/CP14RandomFoodDataComponent.cs b/Content.Server/_CP14/Cooking/CP14RandomFoodDataComponent.cs new file mode 100644 index 0000000000..0ef9be84f1 --- /dev/null +++ b/Content.Server/_CP14/Cooking/CP14RandomFoodDataComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Server._CP14.Cooking; + +/// +/// Attempting to add a random dish to CP14FoodHolderComponent +/// +[RegisterComponent, Access(typeof(CP14CookingSystem))] +public sealed partial class CP14RandomFoodDataComponent : Component +{ + /// + /// Chance of food appearing + /// + [DataField] + public float Prob = 0.75f; +} diff --git a/Content.Server/_CP14/Temperature/CP14TemperatureSystem.cs b/Content.Server/_CP14/Temperature/CP14TemperatureSystem.cs index 9078106028..34476a3db6 100644 --- a/Content.Server/_CP14/Temperature/CP14TemperatureSystem.cs +++ b/Content.Server/_CP14/Temperature/CP14TemperatureSystem.cs @@ -1,11 +1,14 @@ +using System.Linq; using Content.Server.Atmos.Components; using Content.Server.Temperature.Systems; +using Content.Shared._CP14.Temperature; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.FixedPoint; using Content.Shared.Placeable; using Content.Shared.Temperature; using Robust.Server.GameObjects; +using Robust.Shared.Containers; using Robust.Shared.Timing; namespace Content.Server._CP14.Temperature; @@ -16,6 +19,7 @@ public sealed partial class CP14TemperatureSystem : EntitySystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly TemperatureSystem _temperature = default!; [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; private readonly TimeSpan _updateTick = TimeSpan.FromSeconds(1f); private TimeSpan _timeToNextUpdate = TimeSpan.Zero; @@ -25,6 +29,29 @@ public sealed partial class CP14TemperatureSystem : EntitySystem base.Initialize(); SubscribeLocalEvent(OnTemperatureChanged); + SubscribeLocalEvent(OnTemperatureTransmite); + } + + /// + /// The main idea is that we do not simulate the interaction between the temperature of the container and its contents. + /// We directly change the temperature of the entire contents of the container. + /// + private void OnTemperatureTransmite(Entity ent, + ref OnTemperatureChangeEvent args) + { + if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container)) + return; + + var heatAmount = args.TemperatureDelta * _temperature.GetHeatCapacity(ent); + + // copy the list to avoid modifying it while iterating + var containedEntities = container.ContainedEntities.ToList(); + + var entityCount = containedEntities.Count; + foreach (var contained in containedEntities) + { + _temperature.ChangeHeat(contained, heatAmount / entityCount); + } } private void OnTemperatureChanged(Entity start, @@ -36,29 +63,12 @@ public sealed partial class CP14TemperatureSystem : EntitySystem if (args.CurrentTemperature > entry.TemperatureRange.X && args.CurrentTemperature < entry.TemperatureRange.Y) { - if (entry.TransformTo is not null) - { - var result = SpawnAtPosition(entry.TransformTo, xform.Coordinates); - - //Try putting in container - _transform.DropNextTo(result, (start, xform)); - - if (_solutionContainer.TryGetSolution(result, - start.Comp.Solution, - out var resultSoln, - out _) - && _solutionContainer.TryGetSolution(start.Owner, - start.Comp.Solution, - out var startSoln, - out var startSolution)) - { - _solutionContainer.RemoveAllSolution(resultSoln.Value); //Remove all YML reagents - resultSoln.Value.Comp.Solution.MaxVolume = startSoln.Value.Comp.Solution.MaxVolume; - _solutionContainer.TryAddSolution(resultSoln.Value, startSolution); - } - } + if (entry.TransformTo == null) + continue; + SpawnNextToOrDrop(entry.TransformTo, start); Del(start); + break; } } @@ -123,11 +133,11 @@ public sealed partial class CP14TemperatureSystem : EntitySystem EntityQueryEnumerator(); while (query.MoveNext(out _, out var heater, out var itemPlacer, out var flammable)) { + if (!flammable.OnFire) + continue; + foreach (var heatingEntity in itemPlacer.PlacedEntities) { - if (!flammable.OnFire) - continue; - if (!TryComp(heatingEntity, out var container)) continue; diff --git a/Content.Server/_CP14/Temperature/CP14TemperatureTransmissionComponent.cs b/Content.Server/_CP14/Temperature/CP14TemperatureTransmissionComponent.cs new file mode 100644 index 0000000000..3faf8a2199 --- /dev/null +++ b/Content.Server/_CP14/Temperature/CP14TemperatureTransmissionComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server._CP14.Temperature; + +/// +/// when it receives the temperature, it distributes it among all objects inside the specified container +/// +[RegisterComponent, Access(typeof(CP14TemperatureSystem))] +public sealed partial class CP14TemperatureTransmissionComponent : Component +{ + [DataField("containerId", required: true)] + public string ContainerId = string.Empty; +} diff --git a/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs b/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs index 9e63a88238..a6b50d3d86 100644 --- a/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs +++ b/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs @@ -69,7 +69,7 @@ namespace Content.Shared.Chemistry.Reaction [DataField("impact", serverOnly: true)] public LogImpact Impact = LogImpact.Low; // TODO SERV3: Empty on the client, (de)serialize on the server with module manager is server module - [DataField("sound", serverOnly: true)] public SoundSpecifier Sound { get; private set; } = new SoundCollectionSpecifier("CP14Bubbles", AudioParams.Default.WithVariation(0.2f)); + [DataField("sound", serverOnly: true)] public SoundSpecifier? Sound { get; private set; } = new SoundCollectionSpecifier("CP14Bubbles", AudioParams.Default.WithVariation(0.2f)); //CP14 nullable /// /// If true, this reaction will only consume only integer multiples of the reactant amounts. If there are not diff --git a/Content.Shared/Nutrition/Components/FoodComponent.cs b/Content.Shared/Nutrition/Components/FoodComponent.cs index ce04569fcb..41399be50d 100644 --- a/Content.Shared/Nutrition/Components/FoodComponent.cs +++ b/Content.Shared/Nutrition/Components/FoodComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared._CP14.Cooking; using Content.Shared.Body.Components; using Content.Shared.FixedPoint; using Content.Shared.Nutrition.EntitySystems; @@ -6,7 +7,7 @@ using Robust.Shared.Prototypes; namespace Content.Shared.Nutrition.Components; -[RegisterComponent, Access(typeof(FoodSystem), typeof(FoodSequenceSystem))] +[RegisterComponent, Access(typeof(FoodSystem), typeof(FoodSequenceSystem), typeof(CP14SharedCookingSystem))] public sealed partial class FoodComponent : Component { [DataField] diff --git a/Content.Shared/_CP14/Cooking/CP14CookingRecipePrototype.cs b/Content.Shared/_CP14/Cooking/CP14CookingRecipePrototype.cs new file mode 100644 index 0000000000..95e3ef48a6 --- /dev/null +++ b/Content.Shared/_CP14/Cooking/CP14CookingRecipePrototype.cs @@ -0,0 +1,39 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared._CP14.Cooking.Components; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Cooking; + +[Prototype("CP14CookingRecipe")] +public sealed class CP14CookingRecipePrototype : IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; + + /// + /// List of conditions that must be met in the set of ingredients for a dish + /// + [DataField] + public List Requirements = new(); + + /// + /// Reagents cannot store all the necessary information about food, so along with the reagents for all the ingredients, + /// in this block we add the appearance of the dish, descriptions, and so on. + /// + [DataField] + public CP14FoodData FoodData = new(); + + [DataField] + public CP14FoodType FoodType = CP14FoodType.Meal; + + [DataField] + public TimeSpan CookingTime = TimeSpan.FromSeconds(20f); + + [DataField] + public SoundSpecifier CookingAmbient = new SoundPathSpecifier("/Audio/_CP14/Ambience/pan_frying.ogg"); +} diff --git a/Content.Shared/_CP14/Cooking/CP14CookingRequirement.cs b/Content.Shared/_CP14/Cooking/CP14CookingRequirement.cs new file mode 100644 index 0000000000..af648d86f2 --- /dev/null +++ b/Content.Shared/_CP14/Cooking/CP14CookingRequirement.cs @@ -0,0 +1,29 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared.Chemistry.Components; +using Content.Shared.Tag; +using JetBrains.Annotations; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Cooking; + +/// +/// An abstract condition that is a key element of the system. The more complex the conditions for a recipe, +/// the more difficult it is to “get” that recipe by collecting ingredients at random. +/// The system automatically calculates the complexity of a recipe using GetComplexity() for each condition. +/// +[ImplicitDataDefinitionForInheritors] +[MeansImplicitUse] +public abstract partial class CP14CookingCraftRequirement +{ + public abstract bool CheckRequirement(IEntityManager entManager, + IPrototypeManager protoManager, + IReadOnlyList placedEntities, + List> placedTags, + Solution? solution = null); + + public abstract float GetComplexity(); +} diff --git a/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.DoAfter.cs b/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.DoAfter.cs new file mode 100644 index 0000000000..01ef53d1c8 --- /dev/null +++ b/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.DoAfter.cs @@ -0,0 +1,170 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared._CP14.Cooking.Components; +using Content.Shared.DoAfter; +using Content.Shared.Temperature; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Serialization; +using Robust.Shared.Timing; + +namespace Content.Shared._CP14.Cooking; + +public abstract partial class CP14SharedCookingSystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + private void InitDoAfter() + { + SubscribeLocalEvent(OnTemperatureChange); + SubscribeLocalEvent(OnParentChanged); + + SubscribeLocalEvent(OnCookFinished); + SubscribeLocalEvent(OnCookBurned); + } + + private void UpdateDoAfter(float frameTime) + { + var query = EntityQueryEnumerator(); + while(query.MoveNext(out var uid, out var cooker)) + { + if (_timing.CurTime > cooker.LastHeatingTime + cooker.HeatingFrequencyRequired && _doAfter.IsRunning(cooker.DoAfterId)) + _doAfter.Cancel(cooker.DoAfterId); + } + } + + + protected virtual void OnCookBurned(Entity ent, ref CP14BurningDoAfter args) + { + StopCooking(ent); + + if (args.Cancelled || args.Handled) + return; + + BurntFood(ent); + + args.Handled = true; + } + + protected virtual void OnCookFinished(Entity ent, ref CP14CookingDoAfter args) + { + StopCooking(ent); + + if (args.Cancelled || args.Handled) + return; + + if (!_proto.TryIndex(args.Recipe, out var indexedRecipe)) + return; + + CookFood(ent, indexedRecipe); + + args.Handled = true; + } + + private void StartCooking(Entity ent, CP14CookingRecipePrototype recipe) + { + if (_doAfter.IsRunning(ent.Comp.DoAfterId)) + return; + + _appearance.SetData(ent, CP14CookingVisuals.Cooking, true); + + var doAfterArgs = new DoAfterArgs(EntityManager, ent, recipe.CookingTime, new CP14CookingDoAfter(recipe.ID), ent) + { + NeedHand = false, + BreakOnWeightlessMove = false, + RequireCanInteract = false, + }; + + _doAfter.TryStartDoAfter(doAfterArgs, out var doAfterId); + ent.Comp.DoAfterId = doAfterId; + _ambientSound.SetAmbience(ent, true); + _ambientSound.SetSound(ent, recipe.CookingAmbient); + } + + private void StartBurning(Entity ent) + { + if (_doAfter.IsRunning(ent.Comp.DoAfterId)) + return; + + _appearance.SetData(ent, CP14CookingVisuals.Burning, true); + + var doAfterArgs = new DoAfterArgs(EntityManager, ent, 20, new CP14BurningDoAfter(), ent) + { + NeedHand = false, + BreakOnWeightlessMove = false, + RequireCanInteract = false, + }; + + _doAfter.TryStartDoAfter(doAfterArgs, out var doAfterId); + ent.Comp.DoAfterId = doAfterId; + _ambientSound.SetAmbience(ent, true); + } + + protected void StopCooking(Entity ent) + { + if (_doAfter.IsRunning(ent.Comp.DoAfterId)) + _doAfter.Cancel(ent.Comp.DoAfterId); + + _appearance.SetData(ent, CP14CookingVisuals.Cooking, false); + _appearance.SetData(ent, CP14CookingVisuals.Burning, false); + + _ambientSound.SetAmbience(ent, false); + } + + private void OnTemperatureChange(Entity ent, ref OnTemperatureChangeEvent args) + { + if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container)) + return; + + if (container.ContainedEntities.Count <= 0 && ent.Comp.FoodData is null) + { + StopCooking(ent); + return; + } + + if (args.TemperatureDelta > 0) + { + ent.Comp.LastHeatingTime = _timing.CurTime; + DirtyField(ent.Owner,ent.Comp, nameof(CP14FoodCookerComponent.LastHeatingTime)); + + if (!_doAfter.IsRunning(ent.Comp.DoAfterId) && ent.Comp.FoodData is null) + { + var recipe = GetRecipe(ent); + if (recipe is not null) + StartCooking(ent, recipe); + } + else + { + StartBurning(ent); + } + } + else + { + StopCooking(ent); + } + } + + private void OnParentChanged(Entity ent, ref EntParentChangedMessage args) + { + StopCooking(ent); + } +} + +[Serializable, NetSerializable] +public sealed partial class CP14CookingDoAfter : DoAfterEvent +{ + [DataField] + public ProtoId Recipe; + + public CP14CookingDoAfter(ProtoId recipe) + { + Recipe = recipe; + } + + public override DoAfterEvent Clone() => this; +} + +[Serializable, NetSerializable] +public sealed partial class CP14BurningDoAfter : SimpleDoAfterEvent; diff --git a/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.Transfer.cs b/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.Transfer.cs new file mode 100644 index 0000000000..20db3630d3 --- /dev/null +++ b/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.Transfer.cs @@ -0,0 +1,61 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared._CP14.Cooking.Components; +using Content.Shared.Interaction; +using Robust.Shared.Containers; + +namespace Content.Shared._CP14.Cooking; + +public abstract partial class CP14SharedCookingSystem +{ + private void InitTransfer() + { + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnInteractUsing); + + SubscribeLocalEvent(OnInsertAttempt); + } + + private void OnAfterInteract(Entity ent, ref AfterInteractEvent args) + { + if (!TryComp(args.Target, out var cooker)) + return; + + if (cooker.FoodData is null) + return; + + if (ent.Comp.Visuals is not null) + return; + + MoveFoodToHolder(ent, (args.Target.Value, cooker)); + } + + private void OnInteractUsing(Entity ent, ref AfterInteractEvent args) + { + if (!TryComp(args.Target, out var holder)) + return; + + if (holder.Visuals is not null) + return; + + if (ent.Comp.FoodData is null) + return; + + MoveFoodToHolder((args.Target.Value, holder), ent); + } + + private void OnInsertAttempt(Entity ent, ref ContainerIsInsertingAttemptEvent args) + { + if (args.Cancelled) + return; + + if (ent.Comp.FoodData is not null) + { + _popup.PopupEntity(Loc.GetString("cp14-cooking-popup-not-empty", ("name", MetaData(ent).EntityName)), ent); + args.Cancel(); + } + } +} diff --git a/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.cs b/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.cs new file mode 100644 index 0000000000..6fa4f94c98 --- /dev/null +++ b/Content.Shared/_CP14/Cooking/CP14SharedCookingSystem.cs @@ -0,0 +1,314 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using System.Linq; +using Content.Shared._CP14.Cooking.Components; +using Content.Shared.Audio; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Fluids; +using Content.Shared.Nutrition.Components; +using Content.Shared.Popups; +using Content.Shared.Tag; +using Content.Shared.Throwing; +using Robust.Shared.Containers; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Shared._CP14.Cooking; + +public abstract partial class CP14SharedCookingSystem : EntitySystem +{ + [Dependency] protected readonly IPrototypeManager _proto = default!; + [Dependency] protected readonly SharedContainerSystem _container = default!; + [Dependency] protected readonly IRobustRandom _random = default!; + [Dependency] protected readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedPuddleSystem _puddle = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedAmbientSoundSystem _ambientSound = default!; + [Dependency] protected readonly SharedAppearanceSystem _appearance = default!; + + /// + /// When overcooking food, we will replace the reagents inside with this reagent. + /// + private readonly ProtoId _burntFoodReagent = "CP14BurntFood"; + + /// + /// Stores a list of all recipes sorted by complexity: the most complex ones at the beginning. + /// When attempting to cook, the most complex recipes will be checked first, + /// gradually moving down to the easiest ones. + /// The easiest recipes are usually the most “abstract,” + /// so they will be suitable for the largest number of recipes. + /// + protected List OrderedRecipes = []; + + public override void Initialize() + { + base.Initialize(); + InitTransfer(); + InitDoAfter(); + + CacheAndOrderRecipes(); + + SubscribeLocalEvent(OnPrototypesReloaded); + SubscribeLocalEvent(OnExaminedEvent); + SubscribeLocalEvent(OnLand); + } + + public override void Update(float frameTime) + { + UpdateDoAfter(frameTime); + } + + private void CacheAndOrderRecipes() + { + OrderedRecipes = _proto.EnumeratePrototypes() + .Where(recipe => recipe.Requirements.Count > 0) // Only include recipes with requirements + .OrderByDescending(recipe => recipe.Requirements.Sum(condition => condition.GetComplexity())) + .ToList(); + } + + private void OnPrototypesReloaded(PrototypesReloadedEventArgs ev) + { + if (!ev.WasModified()) + return; + + CacheAndOrderRecipes(); + } + + private void OnExaminedEvent(Entity ent, ref ExaminedEvent args) + { + if (ent.Comp.FoodData?.Name is null) + return; + + if (!_solution.TryGetSolution(ent.Owner, ent.Comp.SolutionId, out _, out var solution)) + return; + + if (solution.Volume == 0) + return; + + var remaining = solution.Volume; + + args.PushMarkup(Loc.GetString("cp14-cooking-examine", + ("name", Loc.GetString(ent.Comp.FoodData.Name)), + ("count", remaining))); + } + + private void OnLand(Entity ent, ref LandEvent args) + { + ent.Comp.FoodData = null; + Dirty(ent); + } + + + + /// + /// Transfer food data from cooker to holder + /// + private void MoveFoodToHolder(Entity ent, Entity cooker) + { + if (!TryComp(ent, out var foodComp)) + return; + + if (cooker.Comp.FoodData is null) + return; + + if (!_solution.TryGetSolution(cooker.Owner, cooker.Comp.SolutionId, out _, out var cookerSolution)) + return; + + //Solutions + if (_solution.TryGetSolution(ent.Owner, foodComp.Solution, out var soln, out var solution)) + { + if (solution.Volume > 0) + { + _popup.PopupEntity(Loc.GetString("cp14-cooking-popup-not-empty", ("name", MetaData(ent).EntityName)), + ent); + return; + } + + _solution.TryTransferSolution(soln.Value, cookerSolution, solution.MaxVolume); + } + + //Trash + //If we have a lot of trash, we put 1 random trash in each plate. If it's a last plate (out of solution in cooker), we put all the remaining trash in it. + if (cooker.Comp.FoodData.Trash.Count > 0) + { + if (cookerSolution.Volume <= 0) + { + foodComp.Trash.AddRange(cooker.Comp.FoodData.Trash); + } + else + { + if (_net.IsServer) + { + var newTrash = _random.Pick(cooker.Comp.FoodData.Trash); + cooker.Comp.FoodData.Trash.Remove(newTrash); + foodComp.Trash.Add(newTrash); + } + } + } + + //Name and Description + if (cooker.Comp.FoodData.Name is not null) + _metaData.SetEntityName(ent, Loc.GetString(cooker.Comp.FoodData.Name)); + if (cooker.Comp.FoodData.Desc is not null) + _metaData.SetEntityDescription(ent, Loc.GetString(cooker.Comp.FoodData.Desc)); + + //Flavors + EnsureComp(ent, out var flavorComp); + foreach (var flavor in cooker.Comp.FoodData.Flavors) + { + flavorComp.Flavors.Add(flavor); + } + + //Visuals + ent.Comp.Visuals = cooker.Comp.FoodData.Visuals; + + //Clear cooker data + if (cookerSolution.Volume <= 0) + cooker.Comp.FoodData = null; + + Dirty(ent); + Dirty(cooker); + } + + private CP14CookingRecipePrototype? GetRecipe(Entity ent) + { + if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container)) + return null; + + _solution.TryGetSolution(ent.Owner, ent.Comp.SolutionId, out _, out var solution); + + //Get all tags + var allTags = new List>(); + foreach (var contained in container.ContainedEntities) + { + if (!TryComp(contained, out var tags)) + continue; + + allTags.AddRange(tags.Tags); + } + + if (OrderedRecipes.Count == 0) + { + throw new InvalidOperationException( + "No cooking recipes found. Please ensure that the CP14CookingRecipePrototype is defined and loaded."); + } + + CP14CookingRecipePrototype? selectedRecipe = null; + foreach (var recipe in OrderedRecipes) + { + if (recipe.FoodType != ent.Comp.FoodType) + continue; + + var conditionsMet = true; + foreach (var condition in recipe.Requirements) + { + if (!condition.CheckRequirement(EntityManager, _proto, container.ContainedEntities, allTags, solution)) + { + conditionsMet = false; + break; + } + } + + if (!conditionsMet) + continue; + + selectedRecipe = recipe; + break; + } + + return selectedRecipe; + } + + protected void CookFood(Entity ent, CP14CookingRecipePrototype recipe) + { + if (!_solution.TryGetSolution(ent.Owner, ent.Comp.SolutionId, out var soln, out var solution)) + return; + + if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container)) + return; + + var newData = new CP14FoodData + { + Visuals = new List(recipe.FoodData.Visuals), + Trash = new List(recipe.FoodData.Trash), + Flavors = new HashSet(recipe.FoodData.Flavors), + Name = recipe.FoodData.Name, + Desc = recipe.FoodData.Desc, + CurrentRecipe = recipe + }; + + newData.Name = recipe.FoodData.Name; + newData.Desc = recipe.FoodData.Desc; + + //Process entities + foreach (var contained in container.ContainedEntities) + { + if (TryComp(contained, out var food)) + { + //Merge trash + newData.Trash.AddRange(food.Trash); + + //Merge solutions + if (_solution.TryGetSolution(contained, food.Solution, out _, out var foodSolution)) + { + _solution.TryMixAndOverflow(soln.Value, foodSolution, solution.MaxVolume, out var overflowed); + if (overflowed is not null) + { + _puddle.TrySplashSpillAt(ent, Transform(ent).Coordinates, overflowed, out _); + } + } + } + + if (TryComp(contained, out var flavorComp)) + { + //Merge flavors + foreach (var flavor in flavorComp.Flavors) + { + newData.Flavors.Add(flavor); + } + } + + QueueDel(contained); + } + + if (solution.Volume <= 0) + return; + + ent.Comp.FoodData = newData; + Dirty(ent); + } + + protected void BurntFood(Entity ent) + { + if (ent.Comp.FoodData is null) + return; + + if (!_solution.TryGetSolution(ent.Owner, ent.Comp.SolutionId, out var soln, out var solution)) + return; + + //Brown visual + foreach (var visuals in ent.Comp.FoodData.Visuals) + { + visuals.Color = Color.FromHex("#212121"); + } + + ent.Comp.FoodData.Name = Loc.GetString("cp14-meal-recipe-burned-trash-name"); + ent.Comp.FoodData.Desc = Loc.GetString("cp14-meal-recipe-burned-trash-desc"); + + var replacedVolume = solution.Volume / 2; + solution.SplitSolution(replacedVolume); + solution.AddReagent(_burntFoodReagent, replacedVolume); + + DirtyField(ent.Owner, ent.Comp, nameof(CP14FoodCookerComponent.FoodData)); + } +} diff --git a/Content.Shared/_CP14/Cooking/Components/CP14FoodCookerComponent.cs b/Content.Shared/_CP14/Cooking/Components/CP14FoodCookerComponent.cs new file mode 100644 index 0000000000..64b3d90bde --- /dev/null +++ b/Content.Shared/_CP14/Cooking/Components/CP14FoodCookerComponent.cs @@ -0,0 +1,91 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared.DoAfter; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Cooking.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(fieldDeltas: true), Access(typeof(CP14SharedCookingSystem))] +public sealed partial class CP14FoodCookerComponent : Component +{ + /// + /// What food is currently stored here? + /// + [DataField, AutoNetworkedField] + public CP14FoodData? FoodData; + + [DataField(required: true)] + public CP14FoodType FoodType; + + [DataField] + public string ContainerId; + + [DataField] + public string? SolutionId; + + public DoAfterId? DoAfterId = null; + + /// + /// The moment in time when this entity was last heated. Used for calculations when DoAfter cooking should be reset. + /// + [DataField, AutoNetworkedField] + public TimeSpan LastHeatingTime = TimeSpan.Zero; + + /// + /// How often do you need to heat this entity so that doAfter does not reset? + /// + /// + /// Ideally, this system should check that the Cooker temperature is within certain limits, + /// but at the moment the entire temperature system is a terrible mess that we don't want to get deeply involved with, + /// so we simplify the simulation by simply requiring the heating action to be performed. + /// We don't care how much it heats up, we care how long it takes. + /// + [DataField] + public TimeSpan HeatingFrequencyRequired = TimeSpan.FromSeconds(2f); + + [DataField] + public EntProtoId? BurntAdditionalSpawn = "CP14Fire"; + + [DataField] + public float BurntAdditionalSpawnProb = 0.2f; +} + +[Serializable] +[DataDefinition] +public sealed partial class CP14FoodData +{ + [DataField] + public ProtoId? CurrentRecipe; + + [DataField] + public LocId? Name; + + [DataField] + public LocId? Desc; + + [DataField] + public List Visuals = new(); + + [DataField] + public List Trash = new(); + + [DataField] + public HashSet Flavors = new(); +} + +public enum CP14FoodType +{ + Meal, +} + +[Serializable, NetSerializable] +public enum CP14CookingVisuals : byte +{ + Cooking, + Burning, +} diff --git a/Content.Shared/_CP14/Cooking/Components/CP14FoodHolderComponent.cs b/Content.Shared/_CP14/Cooking/Components/CP14FoodHolderComponent.cs new file mode 100644 index 0000000000..24ba713d00 --- /dev/null +++ b/Content.Shared/_CP14/Cooking/Components/CP14FoodHolderComponent.cs @@ -0,0 +1,29 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Robust.Shared.GameStates; + +namespace Content.Shared._CP14.Cooking.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(CP14SharedCookingSystem))] +public sealed partial class CP14FoodHolderComponent : Component +{ + [DataField, AutoNetworkedField] + public List? Visuals; + + [DataField(required: true)] + public CP14FoodType FoodType; + + [DataField] + public string? SolutionId; + + /// + /// target layer, where new layers will be added. This allows you to control the order of generative layers and static layers. + /// + [DataField] + public string TargetLayerMap = "cp14_foodLayers"; + + public HashSet RevealedLayers = new(); +} diff --git a/Content.Shared/_CP14/Cooking/Requirements/AlwaysMet.cs b/Content.Shared/_CP14/Cooking/Requirements/AlwaysMet.cs new file mode 100644 index 0000000000..f247ca6f9c --- /dev/null +++ b/Content.Shared/_CP14/Cooking/Requirements/AlwaysMet.cs @@ -0,0 +1,27 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared.Chemistry.Components; +using Content.Shared.Tag; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Cooking.Requirements; + +public sealed partial class AlwaysMet : CP14CookingCraftRequirement +{ + public override bool CheckRequirement(IEntityManager entManager, + IPrototypeManager protoManager, + IReadOnlyList placedEntities, + List> placedTags, + Solution? solution = null) + { + return true; + } + + public override float GetComplexity() + { + return 0; + } +} diff --git a/Content.Shared/_CP14/Cooking/Requirements/TagBlocked.cs b/Content.Shared/_CP14/Cooking/Requirements/TagBlocked.cs new file mode 100644 index 0000000000..7bede7e352 --- /dev/null +++ b/Content.Shared/_CP14/Cooking/Requirements/TagBlocked.cs @@ -0,0 +1,36 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared.Chemistry.Components; +using Content.Shared.Tag; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Cooking.Requirements; + +public sealed partial class TagBlocked : CP14CookingCraftRequirement +{ + [DataField(required: true)] + public HashSet> Tags = default!; + + public override bool CheckRequirement(IEntityManager entManager, + IPrototypeManager protoManager, + IReadOnlyList placedEntities, + List> placedTags, + Solution? solution = null) + { + foreach (var placedTag in placedTags) + { + if (Tags.Contains(placedTag)) + return false; + } + + return true; + } + + public override float GetComplexity() + { + return 1; + } +} diff --git a/Content.Shared/_CP14/Cooking/Requirements/TagRequired.cs b/Content.Shared/_CP14/Cooking/Requirements/TagRequired.cs new file mode 100644 index 0000000000..dee433482e --- /dev/null +++ b/Content.Shared/_CP14/Cooking/Requirements/TagRequired.cs @@ -0,0 +1,56 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared.Chemistry.Components; +using Content.Shared.Tag; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Cooking.Requirements; + +public sealed partial class TagRequired : CP14CookingCraftRequirement +{ + /// + /// Any of this tags accepted + /// + [DataField(required: true)] + public List> Tags = default!; + + [DataField] + public byte Min = 1; + + [DataField] + public byte Max = 255; + + [DataField] + public bool AllowOtherTags = true; + + public override bool CheckRequirement(IEntityManager entManager, + IPrototypeManager protoManager, + IReadOnlyList placedEntities, + List> placedTags, + Solution? solution = null) + { + var count = 0; + foreach (var placedTag in placedTags) + { + if (Tags.Contains(placedTag)) + { + count++; + } + else + { + if (!AllowOtherTags) + return false; // If we don't allow other tags, and we found one that isn't in the required list, fail. + } + } + + return count >= Min && count <= Max; + } + + public override float GetComplexity() + { + return Min; + } +} diff --git a/Content.Server/_CP14/Temperature/CP14TemperatureTransformationComponent.cs b/Content.Shared/_CP14/Temperature/CP14TemperatureTransformationComponent.cs similarity index 67% rename from Content.Server/_CP14/Temperature/CP14TemperatureTransformationComponent.cs rename to Content.Shared/_CP14/Temperature/CP14TemperatureTransformationComponent.cs index 27134eceb6..1567b308ab 100644 --- a/Content.Server/_CP14/Temperature/CP14TemperatureTransformationComponent.cs +++ b/Content.Shared/_CP14/Temperature/CP14TemperatureTransformationComponent.cs @@ -1,12 +1,13 @@ using System.Numerics; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -namespace Content.Server._CP14.Temperature; +namespace Content.Shared._CP14.Temperature; /// /// passively returns the solution temperature to the standard /// -[RegisterComponent, Access(typeof(CP14TemperatureSystem))] +[RegisterComponent, NetworkedComponent] public sealed partial class CP14TemperatureTransformationComponent : Component { [DataField(required: true)] @@ -17,6 +18,12 @@ public sealed partial class CP14TemperatureTransformationComponent : Component /// [DataField] public string Solution = "food"; + + /// + /// The transformation will occur instantly if the entity was in FoodCookerComponent at the moment cooking ended. + /// + [DataField] + public bool AutoTransformOnCooked = true; } [DataRecord] diff --git a/Resources/Audio/_CP14/Ambience/attributions.yml b/Resources/Audio/_CP14/Ambience/attributions.yml index 9ac94c838c..146ce5c26d 100644 --- a/Resources/Audio/_CP14/Ambience/attributions.yml +++ b/Resources/Audio/_CP14/Ambience/attributions.yml @@ -23,6 +23,11 @@ copyright: 'by be-steele of Freesound.org.' source: "https://freesound.org/people/be-steele/sounds/130753/" +- files: ["pan_frying.ogg"] + license: "CC0-1.0" + copyright: 'by NachtmahrTV of Freesound.org.' + source: "https://freesound.org/people/NachtmahrTV/sounds/571670/" + - files: ["blood_moon_raise.ogg"] license: "CC-BY-4.0" copyright: 'by xkeril of Freesound.org.' diff --git a/Resources/Audio/_CP14/Ambience/pan_frying.ogg b/Resources/Audio/_CP14/Ambience/pan_frying.ogg new file mode 100644 index 0000000000..6b6225984b Binary files /dev/null and b/Resources/Audio/_CP14/Ambience/pan_frying.ogg differ diff --git a/Resources/Audio/_CP14/Effects/attributions.yml b/Resources/Audio/_CP14/Effects/attributions.yml index b6f7203990..180ed916fb 100644 --- a/Resources/Audio/_CP14/Effects/attributions.yml +++ b/Resources/Audio/_CP14/Effects/attributions.yml @@ -111,4 +111,9 @@ - files: ["heartbeat.ogg"] license: "CC0-1.0" copyright: 'Created by MickBoere on Freesound.org' - source: "https://freesound.org/people/MickBoere/sounds/276578/" \ No newline at end of file + source: "https://freesound.org/people/MickBoere/sounds/276578/" + +- files: ["pan_open.ogg", "pan_close.ogg"] + license: "CC0-1.0" + copyright: 'Created by RossBell on Freesound.org' + source: "https://freesound.org/people/RossBell/sounds/389428/" \ No newline at end of file diff --git a/Resources/Audio/_CP14/Effects/pan_close.ogg b/Resources/Audio/_CP14/Effects/pan_close.ogg new file mode 100644 index 0000000000..540175d927 Binary files /dev/null and b/Resources/Audio/_CP14/Effects/pan_close.ogg differ diff --git a/Resources/Audio/_CP14/Effects/pan_open.ogg b/Resources/Audio/_CP14/Effects/pan_open.ogg new file mode 100644 index 0000000000..f81a38ff28 Binary files /dev/null and b/Resources/Audio/_CP14/Effects/pan_open.ogg differ diff --git a/Resources/Locale/en-US/_CP14/cooking/examine.ftl b/Resources/Locale/en-US/_CP14/cooking/examine.ftl new file mode 100644 index 0000000000..9a87b94810 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/cooking/examine.ftl @@ -0,0 +1,2 @@ +cp14-cooking-examine = Here is [color=gold]{$name}[/color]. Remainig: [color=gold]{$count}u[/color] +cp14-cooking-popup-not-empty = First, remove everything from {$name}! \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/cooking/meals.ftl b/Resources/Locale/en-US/_CP14/cooking/meals.ftl new file mode 100644 index 0000000000..8802b15e4c --- /dev/null +++ b/Resources/Locale/en-US/_CP14/cooking/meals.ftl @@ -0,0 +1,41 @@ +cp14-meal-recipe-trash-name = inedible slop +cp14-meal-recipe-trash-desc = One glance makes you feel nauseous. + +cp14-meal-recipe-burned-trash-name = burnt mass +cp14-meal-recipe-burned-trash-desc = This could have been a delicious meal, but the cook overdid it with the heat treatment. + +cp14-meal-recipe-green-salad-name = vegetable salad +cp14-meal-recipe-green-salad-desc = Green salad made from various herbs and vegetables. + +cp14-meal-recipe-green-salad-meat-name = vegetable salad with meat +cp14-meal-recipe-green-salad-meat-desc = Green salad made from various herbs and vegetables, with added meat for extra nutrition. + +cp14-meal-recipe-zellasian-breakfast-name =zellasian breakfast +cp14-meal-recipe-zellasian-breakfast-desc = Scrambled eggs with meat and bread. Delicious, traditional, consistent. + +cp14-meal-recipe-monster-egg-name = monstrous omelet +cp14-meal-recipe-monster-egg-desc = A terrifying combination of monster meat and fried eggs. Thankfully, these aren't monster eggs. + +cp14-meal-recipe-bread-plate-name = bread plate +cp14-meal-recipe-bread-plate-desc = Bread, bread, and only bread. Nothing but bread. + +cp14-meal-recipe-pig-cheese-name = ham in cheese +cp14-meal-recipe-pig-cheese-desc = Juicy and oozy ham, in cheese and lettuce leaves. Just like in the best restaurants. + +cp14-meal-recipe-stuffed-potato-name = stuffed cheese potato +cp14-meal-recipe-stuffed-potato-desc = Potatoes stuffed with stringy cheese and slices of meat. + +cp14-meal-recipe-meat-plate-name = meat plate +cp14-meal-recipe-meat-plate-desc = For real beasts. For those who need nothing but meat. + +cp14-meal-recipe-mashed-potato-meat-name = mashed potatoes with meat +cp14-meal-recipe-mashed-potato-meat-desc = Today we have morally smashed potatoes on plate. The meat next to them, however, looks more optimistic. + +cp14-meal-recipe-mashed-potato-salad-name = mashed potatoes with herbs +cp14-meal-recipe-mashed-potato-salad-desc = Today we have morally smashed potatoes on plate. Their sadness is embellished with greens. + +cp14-meal-recipe-mashed-potato-name = mashed potatoes +cp14-meal-recipe-mashed-potato-desc = Today we have morally smashed potatoes on plate. + +cp14-meal-recipe-cheese-bread-name = sandwiches with processed cheese +cp14-meal-recipe-cheese-bread-desc = Crispy toasted bread with melted, stringy hot cheese on top. \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/job/job.ftl b/Resources/Locale/en-US/_CP14/job/job.ftl index bb36cac650..5154245068 100644 --- a/Resources/Locale/en-US/_CP14/job/job.ftl +++ b/Resources/Locale/en-US/_CP14/job/job.ftl @@ -30,10 +30,10 @@ cp14-job-desc-adventurer = A hunter for thrills, riches and fame, constantly ris cp14-job-name-alchemist = Alchemist cp14-job-desc-alchemist = A scientist of sorts, exploring the nature of substances. Create poisons and medicines from numerous natural plants and ingredients and earn money by selling them to people in need. -cp14-job-name-innkeeper = Innkeeper [Early WIP] +cp14-job-name-innkeeper = Innkeeper cp14-job-desc-innkeeper = Anywhere in Sylate there will be people looking to drink and relax. And you can capitalize on that desire! Find a way to provide people with good rest, food and drink. -cp14-job-name-blacksmith = Blacksmith +cp14-job-name-blacksmith = Blacksmith [Early WIP] cp14-job-desc-blacksmith = Create and improve equipment for everyone in need! You have the power of metal and fire in your hands, and only you know how to use them carefully to create masterpieces. cp14-job-name-apprentice = Apprentice diff --git a/Resources/Locale/ru-RU/_CP14/cooking/examine.ftl b/Resources/Locale/ru-RU/_CP14/cooking/examine.ftl new file mode 100644 index 0000000000..307d0ef047 --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/cooking/examine.ftl @@ -0,0 +1,2 @@ +cp14-cooking-examine = Здесь находится [color=gold]{$name}[/color]. Осталось: [color=gold]{$count}u[/color] +cp14-cooking-popup-not-empty = Сначала уберите все из {$name}! \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/cooking/meals.ftl b/Resources/Locale/ru-RU/_CP14/cooking/meals.ftl new file mode 100644 index 0000000000..25c120cf61 --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/cooking/meals.ftl @@ -0,0 +1,41 @@ +cp14-meal-recipe-trash-name = несьедобная бурда +cp14-meal-recipe-trash-desc = Один взгляд вызывает у вас рвотные спазмы. + +cp14-meal-recipe-burned-trash-name = сгоревшая масса +cp14-meal-recipe-burned-trash-desc = Это могло быть вкусной едой, но повар перестарался с термической обработкой. + +cp14-meal-recipe-green-salad-name = овощной салат +cp14-meal-recipe-green-salad-desc = Зеленый салат из различных трав и овощей. + +cp14-meal-recipe-green-salad-meat-name = овощной салат с мясом +cp14-meal-recipe-green-salad-meat-desc = Зеленый салат из различных трав и овощей, с добавлением мяска для дополнительной питательности. + +cp14-meal-recipe-zellasian-breakfast-name = зелласианский завтрак +cp14-meal-recipe-zellasian-breakfast-desc = Яишница с мясом и хлебом. Вкусно, традиционно, стабильно. + +cp14-meal-recipe-monster-egg-name = чудовищный омлет +cp14-meal-recipe-monster-egg-desc = Ужасающее сочетание мяса монстров и глазуньи. Хорошо, что это все таки не яйца монстров. + +cp14-meal-recipe-bread-plate-name = хлебная тарелка +cp14-meal-recipe-bread-plate-desc = Хлеб, хлеб и только хлеб. Ничего кроме хлеба. + +cp14-meal-recipe-pig-cheese-name = сырная свинья +cp14-meal-recipe-pig-cheese-desc = Сочный и нежный окорок, в сыре и листьях салата. Как в лучших ресторанах. + +cp14-meal-recipe-stuffed-potato-name = запеченый сырный картофель +cp14-meal-recipe-stuffed-potato-desc = Картошка, фаршированная тягучим сыром и мясными ломтиками. + +cp14-meal-recipe-meat-plate-name = мясная тарелка +cp14-meal-recipe-meat-plate-desc = Для настоящих зверей. Для тех, кому кроме мяса ничего не нужно. + +cp14-meal-recipe-mashed-potato-meat-name = картофельная пюрешка с мясом +cp14-meal-recipe-mashed-potato-meat-desc = Сегодня у нас на столе морально подавленный картофель. Мясо рядом, тем не менее, выглядит более оптимистично. + +cp14-meal-recipe-mashed-potato-salad-name = картофельная пюрешка с зеленью +cp14-meal-recipe-mashed-potato-salad-desc = Сегодня у нас на столе морально подавленный картофель. Ее грусть приукрашена зеленью. + +cp14-meal-recipe-mashed-potato-name = картофельная пюрешка +cp14-meal-recipe-mashed-potato-desc = Сегодня у нас на столе морально подавленный картофель. + +cp14-meal-recipe-cheese-bread-name = бутерброды с плавленным сыром +cp14-meal-recipe-cheese-bread-desc = Хрустящий поджаренный хлеб, с таящим, тянущимся горячим сыром сверху. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/job/job.ftl b/Resources/Locale/ru-RU/_CP14/job/job.ftl index 7589f7aa1c..de84be09fc 100644 --- a/Resources/Locale/ru-RU/_CP14/job/job.ftl +++ b/Resources/Locale/ru-RU/_CP14/job/job.ftl @@ -30,10 +30,10 @@ cp14-job-desc-adventurer = Охотник за острыми эмоциями, cp14-job-name-alchemist = Алхимик cp14-job-desc-alchemist = В своем роде ученый, исследующий природу веществ. Создавайте яды и лекарства, из многочисленных природных растений и ингредиентов, и зарабатывайте деньги, продавая их нуждающимся. -cp14-job-name-innkeeper = Трактирщик [Early WIP] +cp14-job-name-innkeeper = Трактирщик cp14-job-desc-innkeeper = В любом месте Силейты найдутся желающие выпить и отдохнуть. И вы можете заработать на этом желании! Найдите способ обеспечить людей хорошим отдыхом, едой и выпивкой. -cp14-job-name-blacksmith = Кузнец +cp14-job-name-blacksmith = Кузнец [Early WIP] cp14-job-desc-blacksmith = Создавайте и улучшайте экипировку для всех нуждающихся! В ваших руках мощь металла и огня, и только вы знаете как аккуратно использовать их, чтобы создавать шедевры. cp14-job-name-apprentice = Подмастерье diff --git a/Resources/Maps/_CP14/comoss.yml b/Resources/Maps/_CP14/comoss.yml index 53ea5a4d3d..a4141adfb3 100644 --- a/Resources/Maps/_CP14/comoss.yml +++ b/Resources/Maps/_CP14/comoss.yml @@ -4,8 +4,8 @@ meta: engineVersion: 264.0.0 forkId: "" forkVersion: "" - time: 07/11/2025 11:56:20 - entityCount: 14817 + time: 07/16/2025 04:54:40 + entityCount: 14827 maps: - 1 grids: @@ -799,11 +799,6 @@ entities: - type: Transform pos: -12.38047,-29.118898 parent: 1 - - uid: 28 - components: - - type: Transform - pos: -14.360294,-14.934297 - parent: 1 - uid: 29 components: - type: Transform @@ -45644,11 +45639,6 @@ entities: parent: 1 - proto: CP14FoodApple entities: - - uid: 8722 - components: - - type: Transform - pos: -14.461581,-16.665932 - parent: 1 - uid: 8723 components: - type: Transform @@ -45659,10 +45649,10 @@ entities: - type: Transform pos: -17.664963,-19.691994 parent: 1 - - uid: 8725 + - uid: 9676 components: - type: Transform - pos: -10.379791,-23.153708 + pos: -14.689453,-16.273108 parent: 1 - uid: 11643 components: @@ -45688,11 +45678,6 @@ entities: - type: Transform pos: -8.455805,-4.242589 parent: 1 - - uid: 8729 - components: - - type: Transform - pos: -4.64024,-22.501534 - parent: 1 - uid: 8730 components: - type: Transform @@ -45710,11 +45695,6 @@ entities: - type: Transform pos: -14.427665,5.521161 parent: 1 - - uid: 8733 - components: - - type: Transform - pos: -7.4199834,-22.816376 - parent: 1 - proto: CP14FoodCabbage entities: - uid: 8734 @@ -45802,11 +45782,6 @@ entities: enabled: False - proto: CP14FoodMeatLambCooked entities: - - uid: 8751 - components: - - type: Transform - pos: -7.3074436,-23.187439 - parent: 1 - uid: 8752 components: - type: Transform @@ -45819,11 +45794,6 @@ entities: - type: Transform pos: -17.282326,-21.007586 parent: 1 - - uid: 8754 - components: - - type: Transform - pos: -4.572716,-23.311129 - parent: 1 - proto: CP14FoodPieApple entities: - uid: 8758 @@ -45831,13 +45801,6 @@ entities: - type: Transform pos: -17.327341,-20.09679 parent: 1 -- proto: CP14FoodPieFish - entities: - - uid: 8759 - components: - - type: Transform - pos: -11.595931,-21.455805 - parent: 1 - proto: CP14FoodPotatoHot entities: - uid: 7230 @@ -45855,6 +45818,53 @@ entities: - type: Transform pos: 17.61832,-16.268383 parent: 1 +- proto: CP14Fork + entities: + - uid: 9668 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.782056,-22.78113 + parent: 1 + - uid: 9669 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.320888,-23.287128 + parent: 1 + - uid: 9670 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.598874,-22.80362 + parent: 1 + - uid: 9671 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.4606848,-23.590725 + parent: 1 + - uid: 9674 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.399505,-16.982975 + parent: 1 + - uid: 9675 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.389506,-16.803066 + parent: 1 +- proto: CP14FryingPan + entities: + - uid: 8722 + components: + - type: Transform + pos: -15.524707,-19.24207 + parent: 1 + - type: CollisionWake + enabled: False - proto: CP14Furnace entities: - uid: 2 @@ -45870,6 +45880,9 @@ entities: - type: Transform pos: -15.5,-19.5 parent: 1 + - type: ItemPlacer + placedEntities: + - 8722 - uid: 4 components: - type: Transform @@ -46011,6 +46024,18 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-40.5 parent: 1 +- proto: CP14GoldChest + entities: + - uid: 9665 + components: + - type: Transform + pos: -5.5,18.5 + parent: 1 + - uid: 9666 + components: + - type: Transform + pos: 3.5,19.5 + parent: 1 - proto: CP14GreenBottle entities: - uid: 8816 @@ -47259,7 +47284,42 @@ entities: - type: Transform pos: -23.5,-20.5 parent: 1 -- proto: CP14Plate +- proto: CP14PlateGold + entities: + - uid: 28 + components: + - type: Transform + pos: 16.62023,-16.163067 + parent: 1 +- proto: CP14PlateIron + entities: + - uid: 8751 + components: + - type: Transform + pos: -13.513987,-23.309616 + parent: 1 + - type: CollisionWake + enabled: False + - uid: 9667 + components: + - type: Transform + pos: -13.817682,-23.42206 + parent: 1 + - type: CollisionWake + enabled: False +- proto: CP14PlatePie + entities: + - uid: 9054 + components: + - type: Transform + pos: -14.687898,-20.121904 + parent: 1 + - uid: 9055 + components: + - type: Transform + pos: -14.327769,-20.256838 + parent: 1 +- proto: CP14PlateWooden entities: - uid: 9050 components: @@ -47281,17 +47341,32 @@ entities: - type: Transform pos: -14.597865,-19.278576 parent: 1 -- proto: CP14PlatePie +- proto: CP14PlateWoodenRandom entities: - - uid: 9054 + - uid: 8725 components: - type: Transform - pos: -14.687898,-20.121904 + pos: -7.6855574,-22.511265 parent: 1 - - uid: 9055 + - uid: 8729 components: - type: Transform - pos: -14.327769,-20.256838 + pos: -4.5473676,-22.488777 + parent: 1 + - uid: 8733 + components: + - type: Transform + pos: -1.7128735,-23.354593 + parent: 1 + - uid: 8754 + components: + - type: Transform + pos: -7.2581334,-22.949797 + parent: 1 + - uid: 8759 + components: + - type: Transform + pos: -10.553796,-23.287128 parent: 1 - proto: CP14PortalFrameCrystal entities: @@ -63608,11 +63683,6 @@ entities: parent: 1 - proto: CP14SackFarmingSeedFull entities: - - uid: 15063 - components: - - type: Transform - pos: -19.5,-14.5 - parent: 1 - uid: 15064 components: - type: Transform @@ -64285,6 +64355,20 @@ entities: pos: 24.655243,14.690253 parent: 1 - type: DamagedByContact +- proto: CP14Spoon + entities: + - uid: 9672 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.449496,-17.202866 + parent: 1 + - uid: 9673 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.403179,-17.420208 + parent: 1 - proto: CP14SteelBeerMug entities: - uid: 11423 @@ -65893,13 +65977,6 @@ entities: parent: 1 - type: Fixtures fixtures: {} - - uid: 11746 - components: - - type: Transform - pos: -13.5,-19.5 - parent: 1 - - type: Fixtures - fixtures: {} - uid: 11747 components: - type: Transform @@ -65917,6 +65994,13 @@ entities: fixtures: {} - proto: CP14WallmountBarShelfB entities: + - uid: 9677 + components: + - type: Transform + pos: -13.5,-19.5 + parent: 1 + - type: Fixtures + fixtures: {} - uid: 11683 components: - type: Transform @@ -66817,14 +66901,6 @@ entities: parent: 1 - type: Fixtures fixtures: {} - - uid: 11907 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,-17.5 - parent: 1 - - type: Fixtures - fixtures: {} - uid: 11908 components: - type: Transform @@ -83544,11 +83620,6 @@ entities: - type: Transform pos: 3.5,18.5 parent: 1 - - uid: 11704 - components: - - type: Transform - pos: -5.5,18.5 - parent: 1 - uid: 11717 components: - type: Transform @@ -83559,11 +83630,6 @@ entities: - type: Transform pos: -1.5,21.5 parent: 1 - - uid: 15057 - components: - - type: Transform - pos: 3.5,19.5 - parent: 1 - uid: 15058 components: - type: Transform @@ -83642,6 +83708,20 @@ entities: - type: Transform pos: 31.5,16.5 parent: 1 +- proto: CP14WoodenClosetChefFilled + entities: + - uid: 9663 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-15.5 + parent: 1 + - uid: 9664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-17.5 + parent: 1 - proto: CP14WoodenClosetGuildmasterFilled entities: - uid: 15089 @@ -84118,6 +84198,8 @@ entities: - 8748 - 8749 - 8750 + - 8751 + - 9667 - proto: CP14WorkbenchFurnace entities: - uid: 15176 diff --git a/Resources/Maps/_CP14/venicialis.yml b/Resources/Maps/_CP14/venicialis.yml index 5f3e48ec34..1d6b0b42dc 100644 --- a/Resources/Maps/_CP14/venicialis.yml +++ b/Resources/Maps/_CP14/venicialis.yml @@ -4,8 +4,8 @@ meta: engineVersion: 264.0.0 forkId: "" forkVersion: "" - time: 07/11/2025 11:57:25 - entityCount: 19196 + time: 07/16/2025 04:57:56 + entityCount: 19206 maps: - 2 grids: @@ -59352,7 +59352,7 @@ entities: pos: 14.5,-24.5 parent: 2 - type: Door - secondsUntilStateChange: -13667.896 + secondsUntilStateChange: -13845.33 state: Closing - uid: 1792 components: @@ -60893,12 +60893,6 @@ entities: - type: Transform pos: 12.5,-17.5 parent: 2 - - uid: 5722 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-27.5 - parent: 2 - proto: CP14FloorTorch entities: - uid: 6917 @@ -76245,39 +76239,13 @@ entities: - type: Transform pos: 41.42377,-34.32005 parent: 2 -- proto: CP14FoodBreadSlice - entities: - - uid: 2318 - components: - - type: Transform - pos: 7.308227,-21.98852 - parent: 2 -- proto: CP14FoodCabbageSlice - entities: - - uid: 2320 - components: - - type: Transform - pos: -0.63027596,-22.27597 - parent: 2 - proto: CP14FoodCheesePart entities: - - uid: 2319 - components: - - type: Transform - pos: -0.5515399,-25.286625 - parent: 2 - uid: 2321 components: - type: Transform pos: 9.42285,-24.259884 parent: 2 -- proto: CP14FoodCheeseSlice - entities: - - uid: 2324 - components: - - type: Transform - pos: 7.381567,-21.496378 - parent: 2 - proto: CP14FoodMeatDino entities: - uid: 2507 @@ -76285,6 +76253,13 @@ entities: - type: Transform pos: 3.0940614,-30.361221 parent: 2 +- proto: CP14FoodMeatFlemHeadCooked + entities: + - uid: 11886 + components: + - type: Transform + pos: 5.138539,-32.355686 + parent: 2 - proto: CP14FoodMeatFrogLeg entities: - uid: 2509 @@ -76322,11 +76297,6 @@ entities: - type: Transform pos: 6.912213,-26.203783 parent: 2 - - uid: 2323 - components: - - type: Transform - pos: 3.5989685,-21.309408 - parent: 2 - proto: CP14FoodPieApple entities: - uid: 2282 @@ -76343,6 +76313,51 @@ entities: - type: Transform pos: 42.107338,-34.496113 parent: 2 +- proto: CP14Fork + entities: + - uid: 11879 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.322892,-21.417997 + parent: 2 + - uid: 11880 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.6571183,-21.654129 + parent: 2 + - uid: 11881 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.62943745,-25.162376 + parent: 2 + - uid: 11882 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.3824203,-30.361307 + parent: 2 + - type: CollisionWake + enabled: False + - uid: 11883 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5511405,-30.203886 + parent: 2 + - type: CollisionWake + enabled: False +- proto: CP14FryingPan + entities: + - uid: 11887 + components: + - type: Transform + pos: 9.415325,-29.152672 + parent: 2 + - type: CollisionWake + enabled: False - proto: CP14Furnace entities: - uid: 2505 @@ -76351,12 +76366,18 @@ entities: rot: -1.5707963267948966 rad pos: 9.5,-28.5 parent: 2 + - type: ItemPlacer + placedEntities: + - 11887 - uid: 2506 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-29.5 parent: 2 + - type: ItemPlacer + placedEntities: + - 11887 - uid: 2844 components: - type: Transform @@ -76385,6 +76406,18 @@ entities: - type: Transform pos: 22.5,-30.5 parent: 2 +- proto: CP14GoldChest + entities: + - uid: 7865 + components: + - type: Transform + pos: -20.5,-23.5 + parent: 2 + - uid: 7936 + components: + - type: Transform + pos: -18.5,-36.5 + parent: 2 - proto: CP14IronDoor entities: - uid: 12340 @@ -77134,32 +77167,58 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-36.5 parent: 2 -- proto: CP14Plate +- proto: CP14PlateIron entities: - - uid: 2283 + - uid: 11884 components: - type: Transform - pos: 7.5331874,-22.337095 + pos: 0.5972259,-27.179148 parent: 2 + - type: CollisionWake + enabled: False + - uid: 11885 + components: + - type: Transform + pos: 0.68720937,-27.370302 + parent: 2 + - type: CollisionWake + enabled: False +- proto: CP14PlateWoodenRandom + entities: - uid: 2284 components: - type: Transform - pos: 8.433026,-22.269629 + pos: 3.6833415,-21.535347 parent: 2 - uid: 2294 components: - type: Transform - pos: -0.40167212,-23.337002 + pos: -0.26470375,-23.18827 parent: 2 - uid: 2296 components: - type: Transform - pos: 3.569388,-21.290525 + pos: -0.43342304,-25.392168 parent: 2 - - uid: 2406 + - uid: 2313 components: - type: Transform - pos: 3.6947498,-22.223633 + pos: 7.4514184,-22.277475 + parent: 2 + - uid: 2319 + components: + - type: Transform + pos: 6.1354036,-26.257986 + parent: 2 + - uid: 2320 + components: + - type: Transform + pos: 8.45249,-21.332949 + parent: 2 + - uid: 2323 + components: + - type: Transform + pos: -0.4784155,-22.536097 parent: 2 - proto: CP14PortalFrameCrystal entities: @@ -101431,12 +101490,12 @@ entities: - type: Transform pos: 32.5,32.5 parent: 2 -- proto: CP14SackFarmingSeedFull +- proto: CP14SackFarmingSeed entities: - uid: 2982 components: - type: Transform - pos: 0.42527747,-27.375025 + pos: 0.31348777,-27.316204 parent: 2 - type: CollisionWake enabled: False @@ -101963,6 +102022,31 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-42.5 parent: 2 +- proto: CP14Spoon + entities: + - uid: 2318 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5414248,-25.409752 + parent: 2 + - uid: 2324 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.4832139,-22.160128 + parent: 2 + - uid: 2406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.3973436,-21.923996 + parent: 2 + - uid: 11878 + components: + - type: Transform + pos: 8.683899,-22.227592 + parent: 2 - proto: CP14StatueAngel entities: - uid: 6637 @@ -102476,12 +102560,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-30.5 parent: 2 - - uid: 2313 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-27.5 - parent: 2 - uid: 2315 components: - type: Transform @@ -111167,16 +111245,6 @@ entities: - type: Transform pos: -20.5,-24.5 parent: 2 - - uid: 7865 - components: - - type: Transform - pos: -20.5,-23.5 - parent: 2 - - uid: 7936 - components: - - type: Transform - pos: -18.5,-36.5 - parent: 2 - uid: 7942 components: - type: Transform @@ -111259,6 +111327,18 @@ entities: rot: 1.5707963267948966 rad pos: 30.5,-27.5 parent: 2 +- proto: CP14WoodenClosetChefFilled + entities: + - uid: 2283 + components: + - type: Transform + pos: -0.5,-27.5 + parent: 2 + - uid: 5722 + components: + - type: Transform + pos: -1.5,-27.5 + parent: 2 - proto: CP14WoodenClosetMerchantFilled entities: - uid: 7867 @@ -111519,12 +111599,12 @@ entities: - uid: 2512 components: - type: Transform - pos: -0.59833705,-27.353706 + pos: 6.2311254,-32.280533 parent: 2 - uid: 2513 components: - type: Transform - pos: -0.3621297,-27.44366 + pos: 2.448766,-30.314747 parent: 2 - proto: CP14Workbench entities: @@ -111545,6 +111625,10 @@ entities: - type: Transform pos: -1.5,-30.5 parent: 2 + - type: ItemPlacer + placedEntities: + - 11882 + - 11883 - uid: 8057 components: - type: Transform @@ -111611,6 +111695,8 @@ entities: - type: ItemPlacer placedEntities: - 2982 + - 11884 + - 11885 - uid: 8056 components: - type: Transform diff --git a/Resources/Prototypes/Recipes/Reactions/single_reagent.yml b/Resources/Prototypes/Recipes/Reactions/single_reagent.yml index d5c0efd21a..f86f74b0d2 100644 --- a/Resources/Prototypes/Recipes/Reactions/single_reagent.yml +++ b/Resources/Prototypes/Recipes/Reactions/single_reagent.yml @@ -4,6 +4,7 @@ id: ProteinCooking impact: Low minTemp: 347 + sound: null #CP14 reactants: UncookedAnimalProteins: amount: 0.5 diff --git a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml index d8d3bad2e9..6e8a4600d5 100644 --- a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml +++ b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml @@ -85,7 +85,6 @@ - id: CP14IronBar10 - id: CP14PaperFolderRed - id: CP14PenFeather - amount: 1 - type: entity parent: CP14WoodenCloset @@ -100,3 +99,21 @@ - id: CP14StampApproved - id: CP14PaperFolderBlue - id: CP14ArmorIronChainmailPresets + +- type: entity + parent: CP14WoodenCloset + id: CP14WoodenClosetChefFilled + suffix: Chef, Filled + components: + - type: StorageFill + contents: + - id: CP14Fork + amount: 4 + - id: CP14Spoon + amount: 4 + - id: CP14FryingPan + amount: 2 + - id: CP14ModularIronDagger + - id: CP14SackFarmingSeed + - id: CP14PlateWooden + amount: 4 diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/heat.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/heat.yml index 86b6f9bc0c..ced40d9e30 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/heat.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/heat.yml @@ -18,11 +18,11 @@ spawns: - CP14ImpactEffectHeat - !type:CP14AdjustAllSolutionThermalEnergy - delta: 3600 # One full use heats 100u from ~300k to ~650k + delta: 2500 - !type:CP14SpellApplyEntityEffect effects: - !type:AdjustTemperature - amount: 36000 + amount: 20000 - !type:ExtinguishReaction - type: CP14MagicEffectVerbalAspect startSpeech: "Vos adepto calidum..." diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/Meals/plate.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/Meals/plate.yml new file mode 100644 index 0000000000..3d58333e83 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/Meals/plate.yml @@ -0,0 +1,87 @@ +- type: entity + id: CP14PlateBase + parent: BaseItem + description: This is your plate for a delicious meal! + categories: [ ForkFiltered ] + abstract: true + components: + - type: Sprite + sprite: _CP14/Objects/Consumable/Food/Meals/plates.rsi + - type: Item + shape: + - 0,0,1,0 + - type: Tag + tags: + - CP14Plate + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + - type: CP14FoodHolder + foodType: Meal + solutionId: food + - type: Food + +- type: entity + id: CP14PlateWooden + parent: CP14PlateBase + name: wooden plate + components: + - type: Sprite + layers: + - state: wooden + - map: ["cp14_foodLayers"] + - type: PhysicalComposition + materialComposition: + CP14WoodenPlanks: 20 + - type: Food + trash: + - CP14PlateWooden + +- type: entity + id: CP14PlateIron + parent: CP14PlateBase + name: iron plate + components: + - type: Sprite + layers: + - state: iron + - map: ["cp14_foodLayers"] + - type: PhysicalComposition + materialComposition: + CP14Iron: 10 + - type: Food + trash: + - CP14PlateIron + +- type: entity + id: CP14PlateGold + parent: CP14PlateBase + name: gold plate + components: + - type: Sprite + layers: + - state: gold + - map: ["cp14_foodLayers"] + - type: PhysicalComposition + materialComposition: + CP14Gold: 10 + - type: Food + trash: + - CP14PlateGold + +- type: entity + id: CP14PlateWoodenRandom + parent: CP14PlateWooden + suffix: Random food + components: + - type: CP14RandomFoodData + - type: SolutionContainerManager + solutions: + food: + maxVol: 20 + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Protein + Quantity: 10 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cheese.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cheese.yml index 1f006db337..dc7874d237 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cheese.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cheese.yml @@ -27,6 +27,9 @@ - type: SliceableFood count: 5 slice: CP14FoodCheesePart + - type: Tag + tags: + - CP14Cheese - type: entity id: CP14FoodCheesePart @@ -62,6 +65,9 @@ - type: SliceableFood count: 3 slice: CP14FoodCheeseSlice + - type: Tag + tags: + - CP14Cheese - type: entity id: CP14FoodCheeseSlice @@ -98,6 +104,9 @@ - type: FoodSequenceElement entries: CP14Sandwich: CP14CheeseSandwich + - type: Tag + tags: + - CP14Cheese # Blue Cheese (50% more protein) - type: entity @@ -127,6 +136,9 @@ slice: CP14FoodBlueCheesePart - type: StaticPrice price: 20 + - type: Tag + tags: + - CP14Cheese - type: entity id: CP14FoodBlueCheesePart @@ -162,6 +174,9 @@ slice: CP14FoodBlueCheeseSlice - type: StaticPrice price: 4 + - type: Tag + tags: + - CP14Cheese - type: entity id: CP14FoodBlueCheeseSlice @@ -194,6 +209,9 @@ Quantity: 1.5 # 4.5/3 - type: StaticPrice price: 1 + - type: Tag + tags: + - CP14Cheese # Aged Cheese (100% more protein) - type: entity @@ -223,6 +241,9 @@ slice: CP14FoodAgedCheesePart - type: StaticPrice price: 35 + - type: Tag + tags: + - CP14Cheese - type: entity id: CP14FoodAgedCheesePart @@ -258,6 +279,9 @@ slice: CP14FoodAgedCheeseSlice - type: StaticPrice price: 7 + - type: Tag + tags: + - CP14Cheese - type: entity id: CP14FoodAgedCheeseSlice @@ -289,4 +313,7 @@ - ReagentId: Protein Quantity: 2 # 6/3 - type: StaticPrice - price: 2 \ No newline at end of file + price: 2 + - type: Tag + tags: + - CP14Cheese \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cutlery.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cutlery.yml index 7e5019adbb..62974842ca 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cutlery.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/cutlery.yml @@ -1,23 +1,3 @@ -- type: entity - id: CP14Plate - parent: BaseItem - name: plate - description: This is your plate for a delicious meal! - categories: [ ForkFiltered ] - components: - - type: Sprite - sprite: _CP14/Objects/Consumable/Food/plates.rsi - state: plate - - type: Item - shape: - - 0,0,1,0 - - type: Tag - tags: - - CP14Plate - - type: PhysicalComposition - materialComposition: - CP14WoodenPlanks: 20 # 2 wooden plank in craft - - type: entity id: CP14PlatePie parent: BaseItem diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/dough.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/dough.yml index 528d311895..5c4f0ce656 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/dough.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/dough.yml @@ -30,6 +30,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodBread + - type: Tag + tags: + - CP14Dough - type: entity id: CP14FoodBread @@ -56,6 +59,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Dough - type: entity id: CP14FoodBreadSlice @@ -78,6 +84,9 @@ entries: - temperatureRange: 400, 500 transformTo: null + - type: Tag + tags: + - CP14Dough - type: entity id: CP14FoodDoughMedium @@ -107,6 +116,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodBreadBun + - type: Tag + tags: + - CP14Dough - type: entity id: CP14FoodBreadBun @@ -137,6 +149,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Dough - type: entity id: CP14FoodBreadBunBottom @@ -174,6 +189,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Dough - type: entity id: CP14FoodBreadBunTop @@ -200,6 +218,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Dough - type: entity id: CP14FoodDoughMediumFlat @@ -222,4 +243,7 @@ - type: CP14TemperatureTransformation entries: - temperatureRange: 400, 500 - transformTo: CP14Ash1 #TODO: лаваш? \ No newline at end of file + transformTo: CP14Ash1 #TODO: лаваш? + - type: Tag + tags: + - CP14Dough \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/egg.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/egg.yml index 662cecb3e6..61513b9d43 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/egg.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/egg.yml @@ -26,10 +26,6 @@ Quantity: 2 - type: DrawableSolution solution: food - - type: SolutionSpiker - sourceSolution: food - ignoreEmpty: true - popup: spike-solution-egg # egg fragile - type: DamageOnHighSpeedImpact minimumSpeed: 0.1 @@ -65,6 +61,10 @@ area: 0.04 # conductivity of egg shell based on a paper from Romanoff and Romanoff (1949) conductivity: 0.456 + - type: Tag + tags: + - CP14Egg + - CP14FitInFryingPan # Splat - type: entity diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat.yml index c4abf2ffd4..eb894d926a 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat.yml @@ -86,6 +86,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatLambCooked + - type: Tag + tags: + - CP14Meat - type: entity id: CP14FoodMeatLambCooked @@ -109,9 +112,13 @@ - ReagentId: Fat Quantity: 8 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat - type: entity id: CP14FoodMeatLambSlice @@ -147,6 +154,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatLambCookedSlice + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice - type: entity id: CP14FoodMeatLambCookedSlice @@ -175,9 +186,14 @@ - ReagentId: Fat Quantity: 2 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice - type: entity id: CP14FoodMeatLambCutlet @@ -210,6 +226,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatLambCutletCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatCutlet - type: entity id: CP14FoodMeatLambCutletCooked @@ -236,9 +256,14 @@ entries: CP14Sandwich: CP14CutletCookedSandwich - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatCutlet # Frog Leg - type: entity @@ -265,6 +290,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatFrogLegCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg - type: entity id: CP14FoodMeatFrogLegCooked @@ -285,9 +314,14 @@ - ReagentId: Protein Quantity: 1 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg # Human Meat - type: entity @@ -323,6 +357,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatHumanCooked + - type: Tag + tags: + - CP14Meat - type: entity id: CP14FoodMeatHumanCooked @@ -350,9 +387,13 @@ human_meat1_cooked: "" human_meat2_cooked: "" - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat # Dino Meat - type: entity @@ -381,6 +422,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatDinoCooked + - type: Tag + tags: + - CP14Meat - type: entity id: CP14FoodMeatDinoCooked @@ -401,9 +445,13 @@ - ReagentId: Fat Quantity: 2 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat - type: entity id: CP14FoodMeatHydra @@ -429,6 +477,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatHydraCooked + - type: Tag + tags: + - CP14Meat - type: entity id: CP14FoodMeatHydraCooked @@ -447,9 +498,13 @@ - ReagentId: Protein Quantity: 3 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat # Rabbit Meat - type: entity @@ -485,6 +540,9 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatRabbitCooked + - type: Tag + tags: + - CP14Meat - type: entity id: CP14FoodMeatRabbitCooked @@ -513,9 +571,13 @@ rabbit_meat1_cooked: "" rabbit_meat2_cooked: "" - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat # Pig and Boar Meat - type: entity @@ -554,6 +616,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatPigCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatPig - type: entity id: CP14FoodMeatPigCooked @@ -584,9 +650,14 @@ pig_meat1_cooked: "" pig_meat4_cooked: "" - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatPig - type: entity id: CP14FoodMeatPigLeg @@ -614,6 +685,11 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatPigLegCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg + - CP14MeatPig - type: entity id: CP14FoodMeatPigLegCooked @@ -634,9 +710,15 @@ - ReagentId: Fat Quantity: 10 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg + - CP14MeatPig - type: entity id: CP14FoodMeatBoar @@ -674,6 +756,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatBoarCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatPig - type: entity id: CP14FoodMeatBoarCooked @@ -705,9 +791,14 @@ pig_meat2_cooked: "" pig_meat3_cooked: "" - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatPig - type: entity id: CP14FoodMeatPigSlice @@ -736,6 +827,11 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatPigCookedSlice + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice + - CP14MeatPig - type: entity id: CP14FoodMeatPigCookedSlice @@ -757,9 +853,15 @@ - ReagentId: Fat Quantity: 3 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice + - CP14MeatPig # Monster Meat - type: entity @@ -802,6 +904,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatMonsterCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatMonster - type: entity id: CP14FoodMeatMonsterCooked @@ -835,9 +941,14 @@ mole_meat3: CP14cookedMeat mole_meat4: CP14cookedMeat - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatMonster - type: entity id: CP14FoodMeatMonsterLeg @@ -867,6 +978,11 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatMonsterLegCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg + - CP14MeatMonster - type: entity id: CP14FoodMeatMonsterLegCooked @@ -888,9 +1004,15 @@ - ReagentId: Fat Quantity: 10 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg + - CP14MeatMonster - type: entity id: CP14FoodMeatMonsterSlice @@ -921,6 +1043,11 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatMonsterCookedSlice + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice + - CP14MeatMonster - type: entity id: CP14FoodMeatMonsterCookedSlice @@ -943,9 +1070,15 @@ - ReagentId: Fat Quantity: 2 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice + - CP14MeatMonster # Flem meat - type: entity @@ -961,7 +1094,7 @@ sprite: _CP14/Objects/Consumable/Food/meat.rsi state: flem_head - type: Item - size: Large + size: Normal shape: - 0,0,1,1 - type: SolutionContainerManager @@ -979,6 +1112,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatFlemHeadCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatMonster - type: entity id: CP14FoodMeatFlemHeadCooked @@ -999,9 +1136,14 @@ - ReagentId: Fat Quantity: 5 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatMonster - type: entity id: CP14FoodMeatFlemTorso @@ -1019,7 +1161,7 @@ count: 3 slice: CP14FoodMeatFlemTorsoCut - type: Item - size: Large + size: Normal shape: - 0,0,1,1 - type: SolutionContainerManager @@ -1037,6 +1179,10 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatFlemTorsoCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatMonster - type: entity id: CP14FoodMeatFlemTorsoCooked @@ -1060,9 +1206,14 @@ - ReagentId: Fat Quantity: 2 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatMonster - type: entity id: CP14FoodMeatFlemTorsoCut @@ -1094,6 +1245,11 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatFlemTorsoCookedCut + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice + - CP14MeatMonster - type: entity id: CP14FoodMeatFlemTorsoCookedCut @@ -1115,9 +1271,15 @@ - ReagentId: Fat Quantity: 0.5 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatSlice + - CP14MeatMonster - type: entity id: CP14FoodMeatFlemLeg @@ -1150,6 +1312,11 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodMeatFlemLegCooked + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg + - CP14MeatMonster - type: entity id: CP14FoodMeatFlemLegCooked @@ -1171,6 +1338,12 @@ - ReagentId: Fat Quantity: 0.1 - type: CP14TemperatureTransformation + autoTransformOnCooked: false entries: - temperatureRange: 400, 500 transformTo: CP14Ash1 + - type: Tag + tags: + - CP14Meat + - CP14MeatLeg + - CP14MeatMonster diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat_dish.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat_dish.yml index b9f883b84a..d439558b16 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat_dish.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/meat_dish.yml @@ -1,43 +1,3 @@ -- type: entity - name: ham in cheese - parent: - - FoodInjectableBase - - CP14BurnsAsh - id: CP14FoodHamCheese - description: Juicy and oozy ham, in cheese and lettuce leaves. Just like in the best restaurants. - categories: [ ForkFiltered ] - components: - - type: FlavorProfile - flavors: - - meaty - - cabbage - - cheesy - - type: SolutionContainerManager - solutions: - food: - maxVol: 42 - reagents: - - ReagentId: Nutriment - Quantity: 16 - - ReagentId: Protein - Quantity: 13 - - ReagentId: Vitamin - Quantity: 0.5 - - ReagentId: Fat - Quantity: 12 - - type: Sprite - layers: - - sprite: _CP14/Objects/Consumable/Food/plates.rsi - state: plate - - sprite: _CP14/Objects/Consumable/Food/pig_cheese.rsi - state: pig_cheese - - type: Tag - tags: - - Meat - - type: Food - trash: - - CP14Plate - - type: entity name: Klanir stuffed pumpkin parent: diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/produce.yml index 89ba9190e9..5e4f700d05 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/produce.yml @@ -37,6 +37,9 @@ - type: Tag tags: - CP14FarmFood + - CP14Vegetable + - CP14Salad + - CP14Cabbage - type: entity id: CP14FoodCabbageSlice @@ -74,6 +77,13 @@ - type: FoodSequenceElement entries: CP14Sandwich: CP14CabbageSandwich + - type: Tag + tags: + - CP14FarmFood + - CP14Vegetable + - CP14Salad + - CP14SaladSlice + - CP14Cabbage - type: entity id: CP14FoodPumpkin @@ -115,6 +125,7 @@ - type: Tag tags: - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodPumpkinSlice @@ -152,6 +163,10 @@ - type: FoodSequenceElement entries: CP14Sandwich: CP14PumpkinSandwich + - type: Tag + tags: + - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodPotato @@ -188,9 +203,6 @@ Quantity: 1.14 - type: CP14Seed plantProto: CP14PlantPotato #TODO sliceable potato - - type: Tag - tags: - - CP14FarmFood - type: Temperature currentTemperature: 290 - type: InternalTemperature @@ -200,6 +212,11 @@ entries: - temperatureRange: 400, 500 transformTo: CP14FoodPotatoHot + - type: Tag + tags: + - CP14FarmFood + - CP14Vegetable + - CP14Potato - type: entity id: CP14FoodCucumber @@ -244,6 +261,7 @@ - type: Tag tags: - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodCucumberSlice @@ -276,6 +294,10 @@ - type: FoodSequenceElement entries: CP14Sandwich: CP14CucumberSandwich + - type: Tag + tags: + - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodTomatoes @@ -344,6 +366,7 @@ - type: Tag tags: - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodTomatoesSlice @@ -378,6 +401,10 @@ - type: FoodSequenceElement entries: CP14Sandwich: CP14TomatoesSandwich + - type: Tag + tags: + - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodApple @@ -416,6 +443,7 @@ - type: Tag tags: - CP14FarmFood + - CP14Fruits - type: entity id: CP14FoodAppleSlice @@ -445,6 +473,10 @@ - type: FoodSequenceElement entries: CP14Sandwich: CP14AppleSandwich + - type: Tag + tags: + - CP14FarmFood + - CP14Fruits - type: entity id: CP14FoodPepper @@ -485,6 +517,7 @@ - type: Tag tags: - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodPepperSlice @@ -514,6 +547,10 @@ - type: FoodSequenceElement entries: CP14Sandwich: CP14PepperSandwich + - type: Tag + tags: + - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodOnion @@ -558,6 +595,7 @@ - type: Tag tags: - CP14FarmFood + - CP14Vegetable - type: entity id: CP14FoodOnionSlice @@ -588,4 +626,8 @@ Quantity: 0.8 - type: FoodSequenceElement entries: - CP14Sandwich: CP14OnionSandwich \ No newline at end of file + CP14Sandwich: CP14OnionSandwich + - type: Tag + tags: + - CP14FarmFood + - CP14Vegetable \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/salad.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/salad.yml deleted file mode 100644 index aab06861c4..0000000000 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/salad.yml +++ /dev/null @@ -1,35 +0,0 @@ -- type: entity - name: green salad - parent: FoodInjectableBase - id: CP14FoodSaladGreen - description: An extremely nutritious green salad, with a pumpkin twist. - categories: [ ForkFiltered ] - components: - - type: FlavorProfile - flavors: - - pumpkin - - cabbage - - CP14cucumber - - type: SolutionContainerManager - solutions: - food: - maxVol: 47 - reagents: - - ReagentId: PumpkinFlesh - Quantity: 12 - - ReagentId: Nutriment - Quantity: 16 - - ReagentId: Vitamin - Quantity: 10 - - type: Sprite - layers: - - sprite: _CP14/Objects/Consumable/Food/plates.rsi - state: plate - - sprite: _CP14/Objects/Consumable/Food/salad.rsi - state: green_salad - - type: Tag - tags: - - Fruit - - type: Food - trash: - - CP14Plate diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/simple_dish.yml b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/simple_dish.yml index 6952b0c227..2825277a6c 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/simple_dish.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Consumable/Food/simple_dish.yml @@ -34,46 +34,6 @@ - ReagentId: Vitamin Quantity: 2 -- type: entity - id: CP14FoodStuffedPotato - parent: - - FoodInjectableBase - - CP14BurnsAsh - categories: [ ForkFiltered ] - name: stuffed potato - description: Baked potatoes stuffed with juicy meat. - components: - - type: Item - size: Tiny - - type: FlavorProfile - flavors: - - CP14HotPotato - - meaty - - type: Sprite - sprite: _CP14/Objects/Consumable/Food/hot_potato.rsi - layers: - - state: stuffed_potato1 - map: [ "random" ] - - type: RandomSprite - available: - - random: - stuffed_potato1: "" - stuffed_potato2: "" - stuffed_potato3: "" - - type: SolutionContainerManager - solutions: - food: - maxVol: 14 - reagents: - - ReagentId: Nutriment - Quantity: 6 - - ReagentId: Protein - Quantity: 2 - - ReagentId: Vitamin - Quantity: 2 - - ReagentId: Fat - Quantity: 3 - - type: entity id: CP14FoodChromiumJelly parent: diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Materials/dye.yml b/Resources/Prototypes/_CP14/Entities/Objects/Materials/dye.yml index 1b64549870..26391e2cba 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Materials/dye.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Materials/dye.yml @@ -10,9 +10,6 @@ size: Tiny - type: Sprite sprite: _CP14/Objects/Materials/dye.rsi - - type: Tag - tags: - - CP14Dye - type: StaticPrice price: 6 @@ -26,10 +23,6 @@ - state: base - state: powder color: "#bd2b26" - - type: Tag - tags: - - CP14Dye - - CP14DyeRed - type: StaticPrice price: 4 @@ -43,10 +36,6 @@ - state: base - state: powder color: "#ffe269" - - type: Tag - tags: - - CP14Dye - - CP14DyeYellow - type: StaticPrice price: 3.5 @@ -60,10 +49,6 @@ - state: base - state: powder color: "#5eabeb" - - type: Tag - tags: - - CP14Dye - - CP14DyeBlue - type: StaticPrice price: 8.6 @@ -77,10 +62,6 @@ - state: base - state: powder color: "#85903e" - - type: Tag - tags: - - CP14Dye - - CP14DyeGreen - type: entity id: CP14DyePurple @@ -92,10 +73,6 @@ - state: base - state: powder color: "#8241cc" - - type: Tag - tags: - - CP14Dye - - CP14DyePurple - type: StaticPrice price: 4.4 @@ -109,7 +86,3 @@ - state: base - state: powder color: "#242329" - - type: Tag - tags: - - CP14Dye - - CP14DyeBlack diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Cooking/frying_pen.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Cooking/frying_pen.yml new file mode 100644 index 0000000000..2c05b0f2d9 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Cooking/frying_pen.yml @@ -0,0 +1,95 @@ +- type: entity + id: CP14FryingPan + parent: BaseStorageItem + categories: [ ForkFiltered ] + name: frying pan + description: "You can always watch three things: how fire burns, how water flows, and how delicious meat is cooked." + components: + - type: Sprite + sprite: _CP14/Objects/Specific/Cooking/frying_pan.rsi + noRot: true + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: [ base ] + - state: cooking + visible: false + map: [ cook ] + - state: cooking + visible: false + color: "#38312e" + map: [ burn ] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.StorageVisuals.Open: + base: + True: { state: opened } + False: { state: closed } + enum.CP14CookingVisuals.Cooking: + cook: + True: { visible: true } + False: { visible: false } + enum.CP14CookingVisuals.Burning: + burn: + True: { visible: true } + False: { visible: false } + - type: Item + size: Ginormous + - type: MultiHandedItem + - type: MeleeWeapon + wideAnimationRotation: 270 + damage: + types: + Blunt: 6 + soundHit: + path: "/Audio/Weapons/smash.ogg" + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + - type: Storage + maxItemSize: Normal + storageOpenSound: /Audio/_CP14/Effects/pan_open.ogg + storageCloseSound: /Audio/_CP14/Effects/pan_close.ogg + storageInsertSound: /Audio/Items/toolbox_insert.ogg + storageRemoveSound: /Audio/Items/toolbox_insert.ogg + grid: + - 0,0,3,3 + - 0,0,2,2 + whitelist: + components: + - Food + tags: + - CP14FitInFryingPan + cP14Ignorelist: + components: + - CP14FoodHolder + - FoodSequenceStartPoint + - type: SolutionContainerManager + solutions: + pan: + maxVol: 100 + - type: CP14FoodCooker + foodType: Meal + containerId: storagebase + solutionId: pan + - type: Temperature + - type: RefillableSolution + solution: pan + - type: DrainableSolution + solution: pan + - type: Spillable + solution: pan + - type: DoAfter + - type: AmbientSound + enabled: false + volume: 5 + range: 5 + sound: + path: /Audio/_CP14/Ambience/pan_frying.ogg + - type: PhysicalComposition + materialComposition: + CP14Iron: 20 + CP14WoodenPlanks: 10 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Recipes/Cooking/meals.yml b/Resources/Prototypes/_CP14/Recipes/Cooking/meals.yml new file mode 100644 index 0000000000..de6140d386 --- /dev/null +++ b/Resources/Prototypes/_CP14/Recipes/Cooking/meals.yml @@ -0,0 +1,227 @@ +- type: CP14CookingRecipe + id: InedibleMeal + foodType: Meal + foodData: + name: cp14-meal-recipe-trash-name + desc: cp14-meal-recipe-trash-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: trash + requirements: + - !type:AlwaysMet + +# 1 ingredient types + +- type: CP14CookingRecipe + id: GreenSalad + foodType: Meal + foodData: + name: cp14-meal-recipe-green-salad-name + desc: cp14-meal-recipe-green-salad-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: green_salad + requirements: + - !type:TagRequired + tags: + - CP14Salad + - CP14Vegetable + +- type: CP14CookingRecipe + id: MeatPlate + foodType: Meal + foodData: + name: cp14-meal-recipe-meat-plate-name + desc: cp14-meal-recipe-meat-plate-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: meat_plate + requirements: + - !type:TagRequired + tags: + - CP14Meat + - CP14MeatSlice + +- type: CP14CookingRecipe + id: BreadPlate + foodType: Meal + foodData: + name: cp14-meal-recipe-bread-plate-name + desc: cp14-meal-recipe-bread-plate-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: bread_plate + requirements: + - !type:TagRequired + tags: + - CP14Dough + +- type: CP14CookingRecipe + id: MashedPotato + foodType: Meal + foodData: + name: cp14-meal-recipe-mashed-potato-name + desc: cp14-meal-recipe-mashed-potato-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: mashed_potato + requirements: + - !type:TagRequired + tags: + - CP14Potato + +# 2 ingredient types + +- type: CP14CookingRecipe + id: GreenSaladMeat + foodType: Meal + foodData: + name: cp14-meal-recipe-green-salad-meat-name + desc: cp14-meal-recipe-green-salad-meat-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: green_salad_meat + requirements: + - !type:TagRequired + tags: + - CP14Salad + - CP14Vegetable + - !type:TagRequired + tags: + - CP14Meat + +- type: CP14CookingRecipe + id: MonsterEgg + foodType: Meal + foodData: + name: cp14-meal-recipe-monster-egg-name + desc: cp14-meal-recipe-monster-egg-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: monster_egg + requirements: + - !type:TagRequired + tags: + - CP14Egg + - !type:TagRequired + tags: + - CP14MeatMonster + +- type: CP14CookingRecipe + id: MashedPotatoMeat + foodType: Meal + foodData: + name: cp14-meal-recipe-mashed-potato-meat-name + desc: cp14-meal-recipe-mashed-potato-meat-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: mashed_potato_meat + requirements: + - !type:TagRequired + tags: + - CP14Potato + - !type:TagRequired + tags: + - CP14Meat + +- type: CP14CookingRecipe + id: MashedPotatoSalad + foodType: Meal + foodData: + name: cp14-meal-recipe-mashed-potato-salad-name + desc: cp14-meal-recipe-mashed-potato-salad-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: mashed_potato_salad + requirements: + - !type:TagRequired + tags: + - CP14Potato + - !type:TagRequired + tags: + - CP14Salad + - CP14Vegetable + +- type: CP14CookingRecipe + id: CheeseBread + foodType: Meal + foodData: + name: cp14-meal-recipe-cheese-bread-name + desc: cp14-meal-recipe-cheese-bread-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: cheese_bread + requirements: + - !type:TagRequired + tags: + - CP14Dough + - !type:TagRequired + tags: + - CP14Cheese + +# 3 ingredient types + +- type: CP14CookingRecipe + id: ZellasianBreakfast + foodType: Meal + foodData: + name: cp14-meal-recipe-zellasian-breakfast-name + desc: cp14-meal-recipe-zellasian-breakfast-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: zellasian_breakfast + requirements: + - !type:TagRequired + tags: + - CP14Egg + - !type:TagRequired + tags: + - CP14Dough + - !type:TagRequired + tags: + - CP14Meat + +- type: CP14CookingRecipe + id: StuffedPotato + foodType: Meal + foodData: + name: cp14-meal-recipe-stuffed-potato-name + desc: cp14-meal-recipe-stuffed-potato-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: stuffed_potato + requirements: + - !type:TagRequired + tags: + - CP14MeatSlice + - !type:TagRequired + tags: + - CP14Cheese + - !type:TagRequired + tags: + - CP14Potato + +# 4 ingredient types + +- type: CP14CookingRecipe + id: HamInCheese + foodType: Meal + foodData: + name: cp14-meal-recipe-pig-cheese-name + desc: cp14-meal-recipe-pig-cheese-desc + visuals: + - sprite: _CP14/Objects/Consumable/Food/Meals/misc.rsi + state: pig_cheese + requirements: + - !type:TagRequired + tags: + - CP14MeatPig + - !type:TagRequired + tags: + - CP14MeatLeg + - !type:TagRequired + tags: + - CP14Cheese + - !type:TagRequired + tags: + - CP14Salad \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml index a11840604f..ab62e7b81b 100644 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml +++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/misc.yml @@ -476,3 +476,18 @@ stack: CP14GoldBar count: 1 result: CP14SteelGobletGold + +- type: CP14Recipe + id: CP14FryingPan + tag: CP14RecipeAnvil + craftTime: 2 + requiredSkills: + - IronMelting + requirements: + - !type:StackResource + stack: CP14IronBar + count: 2 + - !type:StackResource + stack: CP14WoodenPlanks + count: 1 + result: CP14FryingPan diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/meat_dish.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/meat_dish.yml deleted file mode 100644 index 49087480c4..0000000000 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/meat_dish.yml +++ /dev/null @@ -1,32 +0,0 @@ -- type: CP14Recipe - id: CP14FoodHamCheese - tag: CP14RecipeCooking - craftTime: 5 - requirements: - - !type:ProtoIdResource - protoId: CP14Plate - - !type:ProtoIdResource - protoId: CP14FoodCabbageSlice - count: 3 - - !type:ProtoIdResource - protoId: CP14FoodCheeseSlice - count: 2 - - !type:ProtoIdResource - protoId: CP14FoodMeatPigLegCooked - count: 1 - result: CP14FoodHamCheese - -- type: CP14Recipe - id: CP14FoodStuffedPumpkin - tag: CP14RecipeCooking - craftTime: 5 - requirements: - - !type:ProtoIdResource - protoId: CP14FoodPumpkin - - !type:ProtoIdResource - protoId: CP14FoodPotatoHot - count: 2 - - !type:ProtoIdResource - protoId: CP14FoodMeatPigCookedSlice - count: 2 - result: CP14FoodStuffedPumpkin diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/misc.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/misc.yml index d742a713ba..76b1524b70 100644 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/misc.yml +++ b/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/misc.yml @@ -39,14 +39,3 @@ protoId: CP14FoodDoughMedium count: 1 result: CP14FoodDoughMediumFlat - -- type: CP14Recipe - id: CP14FoodStuffedPotato - tag: CP14RecipeCooking - craftTime: 1 - requirements: - - !type:ProtoIdResource - protoId: CP14FoodPotatoHot - - !type:ProtoIdResource - protoId: CP14FoodMeatPigCookedSlice - result: CP14FoodStuffedPotato diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/salad.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/salad.yml deleted file mode 100644 index 948e8d2b91..0000000000 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/CookingTable/salad.yml +++ /dev/null @@ -1,17 +0,0 @@ -- type: CP14Recipe - id: CP14FoodSaladGreen - tag: CP14RecipeCooking - craftTime: 5 - requirements: - - !type:ProtoIdResource - protoId: CP14Plate - - !type:ProtoIdResource - protoId: CP14FoodCabbageSlice - count: 4 - - !type:ProtoIdResource - protoId: CP14FoodPumpkinSlice - count: 3 - - !type:ProtoIdResource - protoId: CP14FoodCucumber - count: 2 - result: CP14FoodSaladGreen diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Workbench/misc.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Workbench/misc.yml index 9616d85383..6b91f00043 100644 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/Workbench/misc.yml +++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Workbench/misc.yml @@ -70,14 +70,14 @@ result: CP14SmokingPipe - type: CP14Recipe - id: CP14Plate + id: CP14PlateWooden tag: CP14RecipeWorkbench craftTime: 3 requirements: - !type:StackGroupResource group: WoodenPlanks count: 2 - result: CP14Plate + result: CP14PlateWooden - type: CP14Recipe id: CP14ModularBladeWoodMop diff --git a/Resources/Prototypes/_CP14/Procedural/Demiplane/tags.yml b/Resources/Prototypes/_CP14/Tags/demiplane.yml similarity index 100% rename from Resources/Prototypes/_CP14/Procedural/Demiplane/tags.yml rename to Resources/Prototypes/_CP14/Tags/demiplane.yml diff --git a/Resources/Prototypes/_CP14/Tags/food.yml b/Resources/Prototypes/_CP14/Tags/food.yml new file mode 100644 index 0000000000..1e6b345ad4 --- /dev/null +++ b/Resources/Prototypes/_CP14/Tags/food.yml @@ -0,0 +1,63 @@ +# Util + +- type: Tag + id: CP14FitInFryingPan + +# Meat + +- type: Tag + id: CP14Meat + +- type: Tag + id: CP14MeatLeg + +- type: Tag + id: CP14MeatSlice + +- type: Tag + id: CP14MeatCutlet + +- type: Tag + id: CP14MeatMonster + +- type: Tag + id: CP14MeatPig + +# Vegetable + +- type: Tag + id: CP14Vegetable + +- type: Tag + id: CP14Salad + +- type: Tag + id: CP14SaladSlice + +- type: Tag + id: CP14Cabbage + +- type: Tag + id: CP14Potato + +# Fruits + +- type: Tag + id: CP14Fruits + +# Misc + +- type: Tag + id: CP14Wheat + +- type: Tag + id: CP14Egg + +- type: Tag + id: CP14Dough + +- type: Tag + id: CP14Cheese + +- type: Tag + id: CP14Sandwich \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/tags.yml b/Resources/Prototypes/_CP14/Tags/misc.yml similarity index 80% rename from Resources/Prototypes/_CP14/tags.yml rename to Resources/Prototypes/_CP14/Tags/misc.yml index ae88af6985..3d511fb3ea 100644 --- a/Resources/Prototypes/_CP14/tags.yml +++ b/Resources/Prototypes/_CP14/Tags/misc.yml @@ -61,39 +61,9 @@ - type: Tag id: CP14Boar -- type: Tag - id: CP14Wheat - - type: Tag id: CP14Mosquito -- type: Tag - id: CP14Dye - -- type: Tag - id: CP14DyeRed - -- type: Tag - id: CP14DyeYellow - -- type: Tag - id: CP14DyeBlue - -- type: Tag - id: CP14DyeGreen - -- type: Tag - id: CP14DyePurple - -- type: Tag - id: CP14DyeBlack - -- type: Tag - id: CP14Meat - -- type: Tag - id: CP14MeatSlice - - type: Tag id: CP14Torch @@ -150,6 +120,3 @@ - type: Tag id: CP14BigCrossbowBolt - -- type: Tag - id: CP14Sandwich diff --git a/Resources/Prototypes/_CP14/Trading/BuyPositions/dairy_products.yml b/Resources/Prototypes/_CP14/Trading/BuyPositions/dairy_products.yml index f9e7a03048..582ae11c78 100644 --- a/Resources/Prototypes/_CP14/Trading/BuyPositions/dairy_products.yml +++ b/Resources/Prototypes/_CP14/Trading/BuyPositions/dairy_products.yml @@ -32,7 +32,8 @@ product: CP14FoodCheesePart count: 3 -# Premium Dairy (Requires Reputation) +# Rep 1 + - type: cp14TradingPosition id: CP14FoodBlueCheeseWheel faction: Dairy @@ -45,6 +46,19 @@ product: CP14FoodBlueCheeseWheel count: 1 +- type: cp14TradingPosition + id: CP14FryingPan + faction: Dairy + reputationLevel: 1 + uiPosition: 2 + icon: + sprite: _CP14/Objects/Specific/Cooking/frying_pan.rsi + state: base + service: !type:CP14BuyItemsService + product: CP14FryingPan + count: 1 + +# Rep 2 - type: cp14TradingPosition id: CP14FoodAgedCheeseWheel faction: Dairy diff --git a/Resources/Prototypes/_CP14/Trading/SellRequests/gardens.yml b/Resources/Prototypes/_CP14/Trading/SellRequests/gardens.yml index 0456d825dd..d7de7a7ff7 100644 --- a/Resources/Prototypes/_CP14/Trading/SellRequests/gardens.yml +++ b/Resources/Prototypes/_CP14/Trading/SellRequests/gardens.yml @@ -1,13 +1,3 @@ -- type: cp14TradingRequest - id: VictoriaGardensGreenSalad - possibleFactions: - - VictoriaGardens - - Dairy - requirements: - - !type:ProtoIdResource - protoId: CP14FoodSaladGreen - count: 5 - - type: cp14TradingRequest id: VictoriaGardensBreadBuns possibleFactions: diff --git a/Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Innkeepers.xml b/Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Innkeepers.xml index 7f09e4ae43..92f79faed5 100644 --- a/Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Innkeepers.xml +++ b/Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Innkeepers.xml @@ -37,7 +37,7 @@ - + diff --git a/Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Innkeepers.xml b/Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Innkeepers.xml index 7f09e4ae43..92f79faed5 100644 --- a/Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Innkeepers.xml +++ b/Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Innkeepers.xml @@ -37,7 +37,7 @@ - + diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/bread_plate.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/bread_plate.png new file mode 100644 index 0000000000..4eb1f03294 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/bread_plate.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/cheese_bread.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/cheese_bread.png new file mode 100644 index 0000000000..0eac63ae99 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/cheese_bread.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/green_salad.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/green_salad.png new file mode 100644 index 0000000000..09c4b4f600 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/green_salad.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/green_salad_meat.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/green_salad_meat.png new file mode 100644 index 0000000000..2a62970714 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/green_salad_meat.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato.png new file mode 100644 index 0000000000..a62031caff Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato_meat.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato_meat.png new file mode 100644 index 0000000000..7c3c891d11 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato_meat.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato_salad.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato_salad.png new file mode 100644 index 0000000000..9515ddc006 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/mashed_potato_salad.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/meat_plate.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/meat_plate.png new file mode 100644 index 0000000000..d94dd56eb0 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/meat_plate.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/meta.json b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/meta.json new file mode 100644 index 0000000000..7e17d06586 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/meta.json @@ -0,0 +1,50 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Created by prazat911, trash by TheShuEd, green_salad by Aeoli", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "bread_plate" + }, + { + "name": "cheese_bread" + }, + { + "name": "green_salad" + }, + { + "name": "green_salad_meat" + }, + { + "name": "mashed_potato" + }, + { + "name": "mashed_potato_meat" + }, + { + "name": "mashed_potato_salad" + }, + { + "name": "meat_plate" + }, + { + "name": "monster_egg" + }, + { + "name": "pig_cheese" + }, + { + "name": "stuffed_potato" + }, + { + "name": "trash" + }, + { + "name": "zellasian_breakfast" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/monster_egg.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/monster_egg.png new file mode 100644 index 0000000000..25f6c47eef Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/monster_egg.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/pig_cheese.rsi/pig_cheese.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/pig_cheese.png similarity index 100% rename from Resources/Textures/_CP14/Objects/Consumable/Food/pig_cheese.rsi/pig_cheese.png rename to Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/pig_cheese.png diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/stuffed_potato.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/stuffed_potato.png new file mode 100644 index 0000000000..d7ca10cf3b Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/stuffed_potato.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/trash.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/trash.png new file mode 100644 index 0000000000..26b5e0a8eb Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/trash.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/zellasian_breakfast.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/zellasian_breakfast.png new file mode 100644 index 0000000000..2a4d7e2fb9 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/misc.rsi/zellasian_breakfast.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/gold.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/gold.png new file mode 100644 index 0000000000..1a362ffb61 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/gold.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/iron.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/iron.png new file mode 100644 index 0000000000..15acaf3282 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/iron.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/meta.json b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/meta.json new file mode 100644 index 0000000000..fc6596ca10 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "All right reserved", + "copyright": "Created by KREKS, iron by TheShuEd, gold by Prazat", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "wooden" + }, + { + "name": "iron" + }, + { + "name": "gold" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/wooden.png b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/wooden.png new file mode 100644 index 0000000000..a1b8e207d2 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Consumable/Food/Meals/plates.rsi/wooden.png differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/meta.json b/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/meta.json index cfd5670ee6..979b2dc151 100644 --- a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/meta.json +++ b/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-4.0", - "copyright": "Created by Dinazewwr, stuffed_potato by prazat911", + "copyright": "Created by Dinazewwr", "size": { "x": 32, "y": 32 @@ -18,15 +18,6 @@ }, { "name": "base4" - }, - { - "name": "stuffed_potato1" - }, - { - "name": "stuffed_potato2" - }, - { - "name": "stuffed_potato3" } ] } diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato1.png b/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato1.png deleted file mode 100644 index f18e773d24..0000000000 Binary files a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato1.png and /dev/null differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato2.png b/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato2.png deleted file mode 100644 index 94e73a7462..0000000000 Binary files a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato2.png and /dev/null differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato3.png b/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato3.png deleted file mode 100644 index 6581714a37..0000000000 Binary files a/Resources/Textures/_CP14/Objects/Consumable/Food/hot_potato.rsi/stuffed_potato3.png and /dev/null differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/pig_cheese.rsi/meta.json b/Resources/Textures/_CP14/Objects/Consumable/Food/pig_cheese.rsi/meta.json deleted file mode 100644 index 913f64f2a2..0000000000 --- a/Resources/Textures/_CP14/Objects/Consumable/Food/pig_cheese.rsi/meta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-4.0", - "copyright": "Created by prazat911", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "pig_cheese" - } - ] -} diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/plates.rsi/meta.json b/Resources/Textures/_CP14/Objects/Consumable/Food/plates.rsi/meta.json deleted file mode 100644 index 6728721af4..0000000000 --- a/Resources/Textures/_CP14/Objects/Consumable/Food/plates.rsi/meta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": 1, - "license": "All right reserved", - "copyright": "Created bby KREKS", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "plate" - } - ] -} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/plates.rsi/plate.png b/Resources/Textures/_CP14/Objects/Consumable/Food/plates.rsi/plate.png deleted file mode 100644 index 159b54008f..0000000000 Binary files a/Resources/Textures/_CP14/Objects/Consumable/Food/plates.rsi/plate.png and /dev/null differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/salad.rsi/green_salad.png b/Resources/Textures/_CP14/Objects/Consumable/Food/salad.rsi/green_salad.png deleted file mode 100644 index 541b1d11f5..0000000000 Binary files a/Resources/Textures/_CP14/Objects/Consumable/Food/salad.rsi/green_salad.png and /dev/null differ diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/salad.rsi/meta.json b/Resources/Textures/_CP14/Objects/Consumable/Food/salad.rsi/meta.json deleted file mode 100644 index 16c2daaa4a..0000000000 --- a/Resources/Textures/_CP14/Objects/Consumable/Food/salad.rsi/meta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-4.0", - "copyright": "Created by aeoli (discord)", - "states": [ - { - "name": "green_salad" - } - ] -} diff --git a/Resources/Textures/_CP14/Objects/Specific/Alchemy/syringe.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Alchemy/syringe.rsi/meta.json index 077bc1cd6c..402c1a509d 100644 --- a/Resources/Textures/_CP14/Objects/Specific/Alchemy/syringe.rsi/meta.json +++ b/Resources/Textures/_CP14/Objects/Specific/Alchemy/syringe.rsi/meta.json @@ -1,31 +1,31 @@ { - "version": 1, - "license": "CC-BY-SA-4.0", - "copyright": "Created by Max Gab", - "size": { - "x": 32, - "y": 32 + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Created by Max Gab", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" }, - "states": [ - { - "name": "base" - }, - { - "name": "syringe1" - }, - { - "name": "syringe2" - }, - { - "name": "syringe3" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} + { + "name": "syringe1" + }, + { + "name": "syringe2" + }, + { + "name": "syringe3" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/base.png b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/base.png new file mode 100644 index 0000000000..6465477d08 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/base.png differ diff --git a/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/closed.png b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/closed.png new file mode 100644 index 0000000000..948a64ca96 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/closed.png differ diff --git a/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/cooking.png b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/cooking.png new file mode 100644 index 0000000000..c582ed6504 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/cooking.png differ diff --git a/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/inhand-left.png new file mode 100644 index 0000000000..b92c7f5e57 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/inhand-left.png differ diff --git a/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/inhand-right.png new file mode 100644 index 0000000000..44b5ac2ea4 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/inhand-right.png differ diff --git a/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/meta.json b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/meta.json new file mode 100644 index 0000000000..d2eadda949 --- /dev/null +++ b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-4.0", + "copyright": "Created by TheShuEd (Github)", + "states": [ + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "opened" + }, + { + "name": "cooking", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/opened.png b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/opened.png new file mode 100644 index 0000000000..ce025c5143 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Specific/Cooking/frying_pan.rsi/opened.png differ diff --git a/Resources/migration.yml b/Resources/migration.yml index d0cedbe497..e4535b4f86 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -138,10 +138,10 @@ CP14ClothingCloakCuirassLoincloth: CP14ArmorIronCuirass CP14ClothingCloakCuirassLeg: CP14ArmorIronCuirass #2025-21-01 -CP14PlateWooden: CP14Plate -CP14PlateWooden2: CP14Plate -CP14PlateCeramic: CP14Plate -CP14PlateIron: CP14Plate +CP14PlateWooden: CP14PlateWooden +CP14PlateWooden2: CP14PlateWooden +CP14PlateCeramic: CP14PlateWooden +CP14PlateIron: CP14PlateIron #2025-22-01 CP14BaseLightHammer: CP14ModularIronHammer @@ -369,6 +369,10 @@ CP14AlchemyFurnace: CP14Furnace CP14WoodenClosetGuardFilled: null CP14WoodenClosetGuardCommanderFilled: null +#2025-13-07 +CP14Plate: CP14PlateWooden + + # <---> CrystallEdge migration zone end