Cooking Simulator (#1529)

* frying pan start

* fix data saving

* Refactor cooking system and add localization support

Refactored food data handling in the cooking system to use Visuals instead of FoodData on holders, improved food transfer logic, and added popups and examine messages for user feedback. Added English and Russian localization files for cooking examine and meal descriptions, and updated prototype files to increase plate solution volume and add a whitelist for the cooking furnace.

* Refactor cooking system solution handling

Removed Solution field from CP14FoodData and updated CP14SharedCookingSystem to use solution containers directly. Improved solution transfer, mixing, and overflow handling during cooking. Increased pan max volume from 30 to 100 in cooking_furnace.yml.

* Improve cooking system trash handling and update food sprites

Enhanced trash distribution in CP14SharedCookingSystem to randomly assign trash to plates, only adding all trash to the last plate. Updated meat_dish and salad prototypes to use new wooden plate sprites. Added wideAnimationRotation and DrainableSolution to cooking_furnace for improved functionality.

* Remove unused usings and redundant comments in cooking components

Cleaned up CP14 cooking-related components by removing unused using directives and empty XML comments. This improves code readability and maintainability.

* Add tag-based cooking requirements and new meal recipes

Introduces tag-based cooking requirement classes (TagRequired, TagBlocked, SolutionRequired) and updates the cooking system to support tag checks. Adds new tags for food items, updates food and meal prototypes to include relevant tags, and implements new meal recipes (Zellasian Breakfast, Monster Egg) with corresponding sprites and localization. Also refactors and renames some tag and structure prototype files for better organization.

* Refactor and expand CP14 cooking recipes and tags

Reworked meal recipes to use tag-based requirements, added new tags for food categorization (meat, cheese, vegetables, etc.), and removed hardcoded entity recipes for ham in cheese and stuffed potato. Updated and added new meal recipes (bread plate, ham in cheese, stuffed potato), localized their names and descriptions, and migrated/added corresponding sprites. Deprecated SolutionRequired requirement, cleaned up unused tags, and improved TagRequired/TagBlocked logic. Updated prototype files to use new tags and added missing tags to food entities.

* Refactor and expand green salad recipes and assets

Replaces the old green salad entity and workbench recipe with new cooking recipes for green salad and green salad with meat. Updates English and Russian localization, moves and adds new salad textures, and removes obsolete salad assets and trading request.

* mashed potatoes

* Add mashed potatoes with herbs meal

Introduced a new 'mashed potatoes with herbs' meal, including English and Russian localization, recipe definition, and associated sprite. Updated the texture metadata and added the new image asset.

* Update dye.yml

* Fix frying pan item size and update plate recipe

Moved the 'size: Ginormous' property to the correct component in frying_pen.yml. Renamed the plate recipe and result from 'CP14Plate' to 'CP14PlateWooden' in misc.yml for clarity.

* Update meals.yml

* Update migration.yml

* fixes

* fix heating food sounds

* Nyranu temperature transmission

* Update plate.yml

* Cooking DoAfter works

* burning logic

* cooking more work

* auto transform transformable

* Update CP14SharedCookingSystem.DoAfter.cs

* cool burning visuals!

* Add MIT license headers to cooking system files

Added sublicensing notice and MIT license header to all files in the CP14 cooking system. Also made minor code cleanups, such as removing unnecessary default initializations and improving XML documentation for clarity.

* constant heating required

* cooking visuals improve!

* sandwiches with processed cheese + reagent burnt fuckuping

* inhand pan sprites + FIRE fuckup

* crafting & buying pan

* fix predicting

* random food spawner + chef closet

* mapping update

* Update frying_pen.yml

* move WIP to blacksmith lol
This commit is contained in:
Red
2025-07-16 08:15:08 +03:00
committed by GitHub
parent 60d9f4ee3b
commit 7bb7ea2183
95 changed files with 2437 additions and 548 deletions

View File

@@ -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<CP14FoodHolderComponent, AfterAutoHandleStateEvent>(OnAfterHandleState);
}
private void OnAfterHandleState(Entity<CP14FoodHolderComponent> ent, ref AfterAutoHandleStateEvent args)
{
if (!TryComp<SpriteComponent>(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++;
}
}
}

View File

@@ -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<CP14RandomFoodDataComponent, MapInitEvent>(OnRandomFoodMapInit);
}
private void OnRandomFoodMapInit(Entity<CP14RandomFoodDataComponent> ent, ref MapInitEvent args)
{
if (!TryComp<CP14FoodHolderComponent>(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<CP14FoodCookerComponent> 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<CP14FoodCookerComponent> ent, ref CP14CookingDoAfter args)
{
base.OnCookFinished(ent, ref args);
if (args.Cancelled || args.Handled)
return;
TryTransformAll(ent);
}
private void TryTransformAll(Entity<CP14FoodCookerComponent> ent)
{
if (!_container.TryGetContainer(ent, ent.Comp.ContainerId, out var container))
return;
var containedEntities = container.ContainedEntities.ToList();
foreach (var contained in containedEntities)
{
if (!TryComp<CP14TemperatureTransformationComponent>(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);
}
}
}

View File

@@ -0,0 +1,14 @@
namespace Content.Server._CP14.Cooking;
/// <summary>
/// Attempting to add a random dish to CP14FoodHolderComponent
/// </summary>
[RegisterComponent, Access(typeof(CP14CookingSystem))]
public sealed partial class CP14RandomFoodDataComponent : Component
{
/// <summary>
/// Chance of food appearing
/// </summary>
[DataField]
public float Prob = 0.75f;
}

View File

@@ -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<CP14TemperatureTransformationComponent, OnTemperatureChangeEvent>(OnTemperatureChanged);
SubscribeLocalEvent<CP14TemperatureTransmissionComponent, OnTemperatureChangeEvent>(OnTemperatureTransmite);
}
/// <summary>
/// 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.
/// </summary>
private void OnTemperatureTransmite(Entity<CP14TemperatureTransmissionComponent> 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<CP14TemperatureTransformationComponent> 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<CP14FlammableSolutionHeaterComponent, ItemPlacerComponent, FlammableComponent>();
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<SolutionContainerManagerComponent>(heatingEntity, out var container))
continue;

View File

@@ -0,0 +1,11 @@
namespace Content.Server._CP14.Temperature;
/// <summary>
/// when it receives the temperature, it distributes it among all objects inside the specified container
/// </summary>
[RegisterComponent, Access(typeof(CP14TemperatureSystem))]
public sealed partial class CP14TemperatureTransmissionComponent : Component
{
[DataField("containerId", required: true)]
public string ContainerId = string.Empty;
}

View File

@@ -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
/// <summary>
/// If true, this reaction will only consume only integer multiples of the reactant amounts. If there are not

View File

@@ -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]

View File

@@ -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!;
/// <summary>
/// List of conditions that must be met in the set of ingredients for a dish
/// </summary>
[DataField]
public List<CP14CookingCraftRequirement> Requirements = new();
/// <summary>
/// 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.
/// </summary>
[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");
}

View File

@@ -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;
/// <summary>
/// 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.
/// </summary>
[ImplicitDataDefinitionForInheritors]
[MeansImplicitUse]
public abstract partial class CP14CookingCraftRequirement
{
public abstract bool CheckRequirement(IEntityManager entManager,
IPrototypeManager protoManager,
IReadOnlyList<EntityUid> placedEntities,
List<ProtoId<TagPrototype>> placedTags,
Solution? solution = null);
public abstract float GetComplexity();
}

View File

@@ -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<CP14FoodCookerComponent, OnTemperatureChangeEvent>(OnTemperatureChange);
SubscribeLocalEvent<CP14FoodCookerComponent, EntParentChangedMessage>(OnParentChanged);
SubscribeLocalEvent<CP14FoodCookerComponent, CP14CookingDoAfter>(OnCookFinished);
SubscribeLocalEvent<CP14FoodCookerComponent, CP14BurningDoAfter>(OnCookBurned);
}
private void UpdateDoAfter(float frameTime)
{
var query = EntityQueryEnumerator<CP14FoodCookerComponent>();
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<CP14FoodCookerComponent> ent, ref CP14BurningDoAfter args)
{
StopCooking(ent);
if (args.Cancelled || args.Handled)
return;
BurntFood(ent);
args.Handled = true;
}
protected virtual void OnCookFinished(Entity<CP14FoodCookerComponent> 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<CP14FoodCookerComponent> 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<CP14FoodCookerComponent> 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<CP14FoodCookerComponent> 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<CP14FoodCookerComponent> 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<CP14FoodCookerComponent> ent, ref EntParentChangedMessage args)
{
StopCooking(ent);
}
}
[Serializable, NetSerializable]
public sealed partial class CP14CookingDoAfter : DoAfterEvent
{
[DataField]
public ProtoId<CP14CookingRecipePrototype> Recipe;
public CP14CookingDoAfter(ProtoId<CP14CookingRecipePrototype> recipe)
{
Recipe = recipe;
}
public override DoAfterEvent Clone() => this;
}
[Serializable, NetSerializable]
public sealed partial class CP14BurningDoAfter : SimpleDoAfterEvent;

View File

@@ -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<CP14FoodHolderComponent, AfterInteractEvent>(OnAfterInteract);
SubscribeLocalEvent<CP14FoodCookerComponent, AfterInteractEvent>(OnInteractUsing);
SubscribeLocalEvent<CP14FoodCookerComponent, ContainerIsInsertingAttemptEvent>(OnInsertAttempt);
}
private void OnAfterInteract(Entity<CP14FoodHolderComponent> ent, ref AfterInteractEvent args)
{
if (!TryComp<CP14FoodCookerComponent>(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<CP14FoodCookerComponent> ent, ref AfterInteractEvent args)
{
if (!TryComp<CP14FoodHolderComponent>(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<CP14FoodCookerComponent> 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();
}
}
}

View File

@@ -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!;
/// <summary>
/// When overcooking food, we will replace the reagents inside with this reagent.
/// </summary>
private readonly ProtoId<ReagentPrototype> _burntFoodReagent = "CP14BurntFood";
/// <summary>
/// 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.
/// </summary>
protected List<CP14CookingRecipePrototype> OrderedRecipes = [];
public override void Initialize()
{
base.Initialize();
InitTransfer();
InitDoAfter();
CacheAndOrderRecipes();
SubscribeLocalEvent<PrototypesReloadedEventArgs>(OnPrototypesReloaded);
SubscribeLocalEvent<CP14FoodCookerComponent, ExaminedEvent>(OnExaminedEvent);
SubscribeLocalEvent<CP14FoodCookerComponent, LandEvent>(OnLand);
}
public override void Update(float frameTime)
{
UpdateDoAfter(frameTime);
}
private void CacheAndOrderRecipes()
{
OrderedRecipes = _proto.EnumeratePrototypes<CP14CookingRecipePrototype>()
.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<EntityPrototype>())
return;
CacheAndOrderRecipes();
}
private void OnExaminedEvent(Entity<CP14FoodCookerComponent> 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<CP14FoodCookerComponent> ent, ref LandEvent args)
{
ent.Comp.FoodData = null;
Dirty(ent);
}
/// <summary>
/// Transfer food data from cooker to holder
/// </summary>
private void MoveFoodToHolder(Entity<CP14FoodHolderComponent> ent, Entity<CP14FoodCookerComponent> cooker)
{
if (!TryComp<FoodComponent>(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<FlavorProfileComponent>(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<CP14FoodCookerComponent> 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<ProtoId<TagPrototype>>();
foreach (var contained in container.ContainedEntities)
{
if (!TryComp<TagComponent>(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<CP14FoodCookerComponent> 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<PrototypeLayerData>(recipe.FoodData.Visuals),
Trash = new List<EntProtoId>(recipe.FoodData.Trash),
Flavors = new HashSet<LocId>(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<FoodComponent>(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<FlavorProfileComponent>(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<CP14FoodCookerComponent> 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));
}
}

View File

@@ -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
{
/// <summary>
/// What food is currently stored here?
/// </summary>
[DataField, AutoNetworkedField]
public CP14FoodData? FoodData;
[DataField(required: true)]
public CP14FoodType FoodType;
[DataField]
public string ContainerId;
[DataField]
public string? SolutionId;
public DoAfterId? DoAfterId = null;
/// <summary>
/// The moment in time when this entity was last heated. Used for calculations when DoAfter cooking should be reset.
/// </summary>
[DataField, AutoNetworkedField]
public TimeSpan LastHeatingTime = TimeSpan.Zero;
/// <summary>
/// How often do you need to heat this entity so that doAfter does not reset?
/// </summary>
/// <remarks>
/// 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.
/// </remarks>
[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<CP14CookingRecipePrototype>? CurrentRecipe;
[DataField]
public LocId? Name;
[DataField]
public LocId? Desc;
[DataField]
public List<PrototypeLayerData> Visuals = new();
[DataField]
public List<EntProtoId> Trash = new();
[DataField]
public HashSet<LocId> Flavors = new();
}
public enum CP14FoodType
{
Meal,
}
[Serializable, NetSerializable]
public enum CP14CookingVisuals : byte
{
Cooking,
Burning,
}

View File

@@ -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<PrototypeLayerData>? Visuals;
[DataField(required: true)]
public CP14FoodType FoodType;
[DataField]
public string? SolutionId;
/// <summary>
/// target layer, where new layers will be added. This allows you to control the order of generative layers and static layers.
/// </summary>
[DataField]
public string TargetLayerMap = "cp14_foodLayers";
public HashSet<string> RevealedLayers = new();
}

View File

@@ -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<EntityUid> placedEntities,
List<ProtoId<TagPrototype>> placedTags,
Solution? solution = null)
{
return true;
}
public override float GetComplexity()
{
return 0;
}
}

View File

@@ -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<ProtoId<TagPrototype>> Tags = default!;
public override bool CheckRequirement(IEntityManager entManager,
IPrototypeManager protoManager,
IReadOnlyList<EntityUid> placedEntities,
List<ProtoId<TagPrototype>> placedTags,
Solution? solution = null)
{
foreach (var placedTag in placedTags)
{
if (Tags.Contains(placedTag))
return false;
}
return true;
}
public override float GetComplexity()
{
return 1;
}
}

View File

@@ -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
{
/// <summary>
/// Any of this tags accepted
/// </summary>
[DataField(required: true)]
public List<ProtoId<TagPrototype>> 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<EntityUid> placedEntities,
List<ProtoId<TagPrototype>> 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;
}
}

View File

@@ -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;
/// <summary>
/// passively returns the solution temperature to the standard
/// </summary>
[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
/// </summary>
[DataField]
public string Solution = "food";
/// <summary>
/// The transformation will occur instantly if the entity was in FoodCookerComponent at the moment cooking ended.
/// </summary>
[DataField]
public bool AutoTransformOnCooked = true;
}
[DataRecord]

View File

@@ -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.'

Binary file not shown.

View File

@@ -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/"
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/"

Binary file not shown.

Binary file not shown.

View File

@@ -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}!

View File

@@ -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.

View File

@@ -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

View File

@@ -0,0 +1,2 @@
cp14-cooking-examine = Здесь находится [color=gold]{$name}[/color]. Осталось: [color=gold]{$count}u[/color]
cp14-cooking-popup-not-empty = Сначала уберите все из {$name}!

View File

@@ -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 = Хрустящий поджаренный хлеб, с таящим, тянущимся горячим сыром сверху.

View File

@@ -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 = Подмастерье

View File

@@ -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

View File

@@ -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

View File

@@ -4,6 +4,7 @@
id: ProteinCooking
impact: Low
minTemp: 347
sound: null #CP14
reactants:
UncookedAnimalProteins:
amount: 0.5

View File

@@ -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

View File

@@ -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..."

View File

@@ -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

View File

@@ -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
price: 2
- type: Tag
tags:
- CP14Cheese

View File

@@ -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

View File

@@ -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: лаваш?
transformTo: CP14Ash1 #TODO: лаваш?
- type: Tag
tags:
- CP14Dough

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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
CP14Sandwich: CP14OnionSandwich
- type: Tag
tags:
- CP14FarmFood
- CP14Vegetable

View File

@@ -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

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -1,13 +1,3 @@
- type: cp14TradingRequest
id: VictoriaGardensGreenSalad
possibleFactions:
- VictoriaGardens
- Dairy
requirements:
- !type:ProtoIdResource
protoId: CP14FoodSaladGreen
count: 5
- type: cp14TradingRequest
id: VictoriaGardensBreadBuns
possibleFactions:

View File

@@ -37,7 +37,7 @@
<GuideEntityEmbed Entity="CP14FoodCabbageSlice"/>
<GuideEntityEmbed Entity="CP14FoodCucumber"/>
<GuideEntityEmbed Entity="CP14FoodPumpkinSlice"/>
<GuideEntityEmbed Entity="CP14Plate"/>
<GuideEntityEmbed Entity="CP14PlateWooden"/>
</Box>

View File

@@ -37,7 +37,7 @@
<GuideEntityEmbed Entity="CP14FoodCabbageSlice"/>
<GuideEntityEmbed Entity="CP14FoodCucumber"/>
<GuideEntityEmbed Entity="CP14FoodPumpkinSlice"/>
<GuideEntityEmbed Entity="CP14Plate"/>
<GuideEntityEmbed Entity="CP14PlateWooden"/>
</Box>

Binary file not shown.

After

Width:  |  Height:  |  Size: 494 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

View File

@@ -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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

View File

@@ -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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

View File

@@ -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"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 B

View File

@@ -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"
}
]
}

View File

@@ -1,14 +0,0 @@
{
"version": 1,
"license": "All right reserved",
"copyright": "Created bby KREKS",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "plate"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 470 B

View File

@@ -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"
}
]
}

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -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