Metamorphosis - FoodSequence 3 (#31012)

* setup some data

* cheeseburger recipe

* Update FoodSequenceSystem.cs

* finalize cheseburger recipe

* remove fun

* return old taco sprites

* full foodsequence data refactor

* return tacos

* well done

* add cutlets to burger

* chickenburger recipe

* +2 burger recipes

* more fun

* Update brain.png

* some slice produce added

* documentation

* watermelon

* skewer work

* flipping

* tomato

* skewer watermelon

* Update skewer.yml

* oopsie, ok, im go to sleep

* fix checks

* Update produce.yml

* screwed

* cheeeeeeeese

* all cooked meat added

* produce added

* aaaaand suppermatter

* key to Tag

* More

* proto string remove

* raw snail

* fix

* Update FoodMetamorphableByAddingComponent.cs

* fixes

* fix3

* fififififx
This commit is contained in:
Ed
2024-09-08 09:22:27 +03:00
committed by GitHub
parent 680b9c9cfb
commit 230ea9be46
49 changed files with 2282 additions and 1255 deletions

View File

@@ -1,7 +1,6 @@
using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.Components;
using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.EntitySystems;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
using Robust.Shared.Utility;
namespace Content.Client.Nutrition.EntitySystems; namespace Content.Client.Nutrition.EntitySystems;
@@ -50,6 +49,7 @@ public sealed class ClientFoodSequenceSystem : SharedFoodSequenceSystem
sprite.AddBlankLayer(index); sprite.AddBlankLayer(index);
sprite.LayerMapSet(keyCode, index); sprite.LayerMapSet(keyCode, index);
sprite.LayerSetSprite(index, state.Sprite); sprite.LayerSetSprite(index, state.Sprite);
sprite.LayerSetScale(index, state.Scale);
//Offset the layer //Offset the layer
var layerPos = start.Comp.StartPosition; var layerPos = start.Comp.StartPosition;

View File

@@ -4,10 +4,14 @@ using Content.Server.Nutrition.Components;
using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Nutrition;
using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.Components;
using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.EntitySystems;
using Content.Shared.Nutrition.Prototypes;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Tag; using Content.Shared.Tag;
using Robust.Server.GameObjects;
using Robust.Shared.Prototypes;
using Robust.Shared.Random; using Robust.Shared.Random;
namespace Content.Server.Nutrition.EntitySystems; namespace Content.Server.Nutrition.EntitySystems;
@@ -20,12 +24,16 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem
[Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly MobStateSystem _mobState = default!;
[Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly TransformSystem _transform = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<FoodSequenceStartPointComponent, InteractUsingEvent>(OnInteractUsing); SubscribeLocalEvent<FoodSequenceStartPointComponent, InteractUsingEvent>(OnInteractUsing);
SubscribeLocalEvent<FoodMetamorphableByAddingComponent, FoodSequenceIngredientAddedEvent>(OnIngredientAdded);
} }
private void OnInteractUsing(Entity<FoodSequenceStartPointComponent> ent, ref InteractUsingEvent args) private void OnInteractUsing(Entity<FoodSequenceStartPointComponent> ent, ref InteractUsingEvent args)
@@ -34,47 +42,113 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem
TryAddFoodElement(ent, (args.Used, sequenceElement), args.User); TryAddFoodElement(ent, (args.Used, sequenceElement), args.User);
} }
private bool TryAddFoodElement(Entity<FoodSequenceStartPointComponent> start, Entity<FoodSequenceElementComponent> element, EntityUid? user = null) private void OnIngredientAdded(Entity<FoodMetamorphableByAddingComponent> ent, ref FoodSequenceIngredientAddedEvent args)
{ {
FoodSequenceElementEntry? elementData = null; if (!TryComp<FoodSequenceStartPointComponent>(args.Start, out var start))
foreach (var entry in element.Comp.Entries) return;
if (!_proto.TryIndex(args.Proto, out var elementProto))
return;
if (!ent.Comp.OnlyFinal || elementProto.Final || start.FoodLayers.Count == start.MaxLayers)
{ {
if (entry.Key == start.Comp.Key) TryMetamorph((ent, start));
}
}
private bool TryMetamorph(Entity<FoodSequenceStartPointComponent> start)
{ {
elementData = entry.Value; List<MetamorphRecipePrototype> availableRecipes = new();
foreach (var recipe in _proto.EnumeratePrototypes<MetamorphRecipePrototype>())
{
if (recipe.Key != start.Comp.Key)
continue;
bool allowed = true;
foreach (var rule in recipe.Rules)
{
if (!rule.Check(_proto, EntityManager, start, start.Comp.FoodLayers))
{
allowed = false;
break; break;
} }
} }
if (allowed)
if (elementData is null) availableRecipes.Add(recipe);
return false;
if (TryComp<FoodComponent>(element, out var elementFood) && elementFood.RequireDead)
{
if (_mobState.IsAlive(element))
return false;
} }
if (availableRecipes.Count <= 0)
return true;
Metamorf(start, _random.Pick(availableRecipes)); //In general, if there's more than one recipe, the yml-guys screwed up. Maybe some kind of unit test is needed.
QueueDel(start);
return true;
}
private void Metamorf(Entity<FoodSequenceStartPointComponent> start, MetamorphRecipePrototype recipe)
{
var result = SpawnAtPosition(recipe.Result, Transform(start).Coordinates);
//Try putting in container
_transform.DropNextTo(result, (start, Transform(start)));
if (!_solutionContainer.TryGetSolution(result, start.Comp.Solution, out var resultSoln, out var resultSolution))
return;
if (!_solutionContainer.TryGetSolution(start.Owner, start.Comp.Solution, out var startSoln, out var startSolution))
return;
_solutionContainer.RemoveAllSolution(resultSoln.Value); //Remove all YML reagents
resultSoln.Value.Comp.Solution.MaxVolume = startSoln.Value.Comp.Solution.MaxVolume;
_solutionContainer.TryAddSolution(resultSoln.Value, startSolution);
MergeFlavorProfiles(start, result);
MergeTrash(start, result);
MergeTags(start, result);
}
private bool TryAddFoodElement(Entity<FoodSequenceStartPointComponent> start, Entity<FoodSequenceElementComponent> element, EntityUid? user = null)
{
// we can't add a live mouse to a burger.
if (!TryComp<FoodComponent>(element, out var elementFood))
return false;
if (elementFood.RequireDead && _mobState.IsAlive(element))
return false;
//looking for a suitable FoodSequence prototype
ProtoId<FoodSequenceElementPrototype> elementProto = string.Empty;
foreach (var pair in element.Comp.Entries)
{
if (pair.Key == start.Comp.Key)
{
elementProto = pair.Value;
}
}
if (!_proto.TryIndex(elementProto, out var elementIndexed))
return false;
//if we run out of space, we can still put in one last, final finishing element. //if we run out of space, we can still put in one last, final finishing element.
if (start.Comp.FoodLayers.Count >= start.Comp.MaxLayers && !elementData.Final || start.Comp.Finished) if (start.Comp.FoodLayers.Count >= start.Comp.MaxLayers && !elementIndexed.Final || start.Comp.Finished)
{ {
if (user is not null) if (user is not null)
_popup.PopupEntity(Loc.GetString("food-sequence-no-space"), start, user.Value); _popup.PopupEntity(Loc.GetString("food-sequence-no-space"), start, user.Value);
return false; return false;
} }
//If no specific sprites are specified, standard sprites will be used. //Generate new visual layer
if (elementData.Sprite is null && element.Comp.Sprite is not null) var flip = start.Comp.AllowHorizontalFlip && _random.Prob(0.5f);
elementData.Sprite = element.Comp.Sprite; var layer = new FoodSequenceVisualLayer(elementIndexed,
_random.Pick(elementIndexed.Sprites),
elementData.LocalOffset = new Vector2( new Vector2(flip ? -1 : 1, 1),
new Vector2(
_random.NextFloat(start.Comp.MinLayerOffset.X, start.Comp.MaxLayerOffset.X), _random.NextFloat(start.Comp.MinLayerOffset.X, start.Comp.MaxLayerOffset.X),
_random.NextFloat(start.Comp.MinLayerOffset.Y,start.Comp.MaxLayerOffset.Y)); _random.NextFloat(start.Comp.MinLayerOffset.Y, start.Comp.MaxLayerOffset.Y))
);
start.Comp.FoodLayers.Add(elementData); start.Comp.FoodLayers.Add(layer);
Dirty(start); Dirty(start);
if (elementData.Final) if (elementIndexed.Final)
start.Comp.Finished = true; start.Comp.Finished = true;
UpdateFoodName(start); UpdateFoodName(start);
@@ -82,6 +156,10 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem
MergeFlavorProfiles(start, element); MergeFlavorProfiles(start, element);
MergeTrash(start, element); MergeTrash(start, element);
MergeTags(start, element); MergeTags(start, element);
var ev = new FoodSequenceIngredientAddedEvent(start, element, elementProto, user);
RaiseLocalEvent(start, ev);
QueueDel(element); QueueDel(element);
return true; return true;
} }
@@ -96,17 +174,23 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem
if (start.Comp.ContentSeparator is not null) if (start.Comp.ContentSeparator is not null)
separator = Loc.GetString(start.Comp.ContentSeparator); separator = Loc.GetString(start.Comp.ContentSeparator);
HashSet<LocId> existedContentNames = new(); HashSet<ProtoId<FoodSequenceElementPrototype>> existedContentNames = new();
foreach (var layer in start.Comp.FoodLayers) foreach (var layer in start.Comp.FoodLayers)
{ {
if (layer.Name is not null && !existedContentNames.Contains(layer.Name.Value)) if (!existedContentNames.Contains(layer.Proto))
existedContentNames.Add(layer.Name.Value); existedContentNames.Add(layer.Proto);
} }
var nameCounter = 1; var nameCounter = 1;
foreach (var name in existedContentNames) foreach (var proto in existedContentNames)
{ {
content.Append(Loc.GetString(name)); if (!_proto.TryIndex(proto, out var protoIndexed))
continue;
if (protoIndexed.Name is null)
continue;
content.Append(Loc.GetString(protoIndexed.Name.Value));
if (nameCounter < existedContentNames.Count) if (nameCounter < existedContentNames.Count)
content.Append(separator); content.Append(separator);
@@ -121,19 +205,25 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem
_metaData.SetEntityName(start, newName); _metaData.SetEntityName(start, newName);
} }
private void MergeFoodSolutions(Entity<FoodSequenceStartPointComponent> start, Entity<FoodSequenceElementComponent> element) private void MergeFoodSolutions(EntityUid start, EntityUid element)
{ {
if (!_solutionContainer.TryGetSolution(start.Owner, start.Comp.Solution, out var startSolutionEntity, out var startSolution)) if (!TryComp<FoodComponent>(start, out var startFood))
return; return;
if (!_solutionContainer.TryGetSolution(element.Owner, element.Comp.Solution, out _, out var elementSolution)) if (!TryComp<FoodComponent>(element, out var elementFood))
return;
if (!_solutionContainer.TryGetSolution(start, startFood.Solution, out var startSolutionEntity, out var startSolution))
return;
if (!_solutionContainer.TryGetSolution(element, elementFood.Solution, out _, out var elementSolution))
return; return;
startSolution.MaxVolume += elementSolution.MaxVolume; startSolution.MaxVolume += elementSolution.MaxVolume;
_solutionContainer.TryAddSolution(startSolutionEntity.Value, elementSolution); _solutionContainer.TryAddSolution(startSolutionEntity.Value, elementSolution);
} }
private void MergeFlavorProfiles(Entity<FoodSequenceStartPointComponent> start, Entity<FoodSequenceElementComponent> element) private void MergeFlavorProfiles(EntityUid start, EntityUid element)
{ {
if (!TryComp<FlavorProfileComponent>(start, out var startProfile)) if (!TryComp<FlavorProfileComponent>(start, out var startProfile))
return; return;
@@ -148,7 +238,7 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem
} }
} }
private void MergeTrash(Entity<FoodSequenceStartPointComponent> start, Entity<FoodSequenceElementComponent> element) private void MergeTrash(EntityUid start, EntityUid element)
{ {
if (!TryComp<FoodComponent>(start, out var startFood)) if (!TryComp<FoodComponent>(start, out var startFood))
return; return;
@@ -162,13 +252,13 @@ public sealed class FoodSequenceSystem : SharedFoodSequenceSystem
} }
} }
private void MergeTags(Entity<FoodSequenceStartPointComponent> start, Entity<FoodSequenceElementComponent> element) private void MergeTags(EntityUid start, EntityUid element)
{ {
if (!TryComp<TagComponent>(element, out var elementTags)) if (!TryComp<TagComponent>(element, out var elementTags))
return; return;
EnsureComp<TagComponent>(start.Owner); EnsureComp<TagComponent>(start);
_tag.TryAddTags(start.Owner, elementTags.Tags); _tag.TryAddTags(start, elementTags.Tags);
} }
} }

View File

@@ -0,0 +1,17 @@
using Content.Shared.Nutrition.EntitySystems;
using Robust.Shared.GameStates;
namespace Content.Shared.Nutrition.Components;
/// <summary>
/// Attempts to metamorphose a modular food when a new ingredient is added.
/// </summary>
[RegisterComponent, NetworkedComponent, Access(typeof(SharedFoodSequenceSystem))]
public sealed partial class FoodMetamorphableByAddingComponent : Component
{
/// <summary>
/// if true, the metamorphosis will only be attempted when the sequence ends, not when each element is added.
/// </summary>
[DataField]
public bool OnlyFinal = true;
}

View File

@@ -1,55 +1,25 @@
using System.Numerics;
using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.EntitySystems;
using Robust.Shared.Serialization; using Content.Shared.Nutrition.Prototypes;
using Robust.Shared.Utility; using Content.Shared.Tag;
using Robust.Shared.Prototypes;
namespace Content.Shared.Nutrition.Components; namespace Content.Shared.Nutrition.Components;
/// <summary> /// <summary>
/// Tndicates that this entity can be inserted into FoodSequence, which will transfer all reagents to the target. /// Indicates that this entity can be inserted into FoodSequence, which will transfer all reagents to the target.
/// </summary> /// </summary>
[RegisterComponent, Access(typeof(SharedFoodSequenceSystem))] [RegisterComponent, Access(typeof(SharedFoodSequenceSystem))]
public sealed partial class FoodSequenceElementComponent : Component public sealed partial class FoodSequenceElementComponent : Component
{ {
/// <summary> /// <summary>
/// the same object can be used in different sequences, and it will have a different sprite in different sequences. /// The same object can be used in different sequences, and it will have a different data in then.
/// </summary> /// </summary>
[DataField(required: true)] [DataField(required: true)]
public Dictionary<string, FoodSequenceElementEntry> Entries = new(); public Dictionary<ProtoId<TagPrototype>, ProtoId<FoodSequenceElementPrototype>> Entries = new();
/// <summary> /// <summary>
/// which solution we will add to the main dish /// Which solution we will add to the main dish
/// </summary> /// </summary>
[DataField] [DataField]
public string Solution = "food"; public string Solution = "food";
/// <summary>
/// state used to generate the appearance of the added layer
/// </summary>
[DataField]
public SpriteSpecifier? Sprite;
}
[DataRecord, Serializable, NetSerializable]
public sealed class FoodSequenceElementEntry
{
/// <summary>
/// A localized name piece to build into the item name generator.
/// </summary>
public LocId? Name { get; set; } = null;
/// <summary>
/// overriding default sprite
/// </summary>
public SpriteSpecifier? Sprite { get; set; } = null;
/// <summary>
/// If the layer is the final one, it can be added over the limit, but no other layers can be added after it.
/// </summary>
public bool Final { get; set; } = false;
/// <summary>
/// the shear of a particular layer. Allows a little "randomization" of each layer.
/// </summary>
public Vector2 LocalOffset { get; set; } = Vector2.Zero;
} }

View File

@@ -1,6 +1,11 @@
using System.Numerics; using System.Numerics;
using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.EntitySystems;
using Content.Shared.Nutrition.Prototypes;
using Content.Shared.Tag;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.Utility;
namespace Content.Shared.Nutrition.Components; namespace Content.Shared.Nutrition.Components;
@@ -14,7 +19,7 @@ public sealed partial class FoodSequenceStartPointComponent : Component
/// A key that determines which types of food elements can be attached to a food. /// A key that determines which types of food elements can be attached to a food.
/// </summary> /// </summary>
[DataField(required: true)] [DataField(required: true)]
public string Key = string.Empty; public ProtoId<TagPrototype> Key = string.Empty;
/// <summary> /// <summary>
/// The maximum number of layers of food that can be placed on this item. /// The maximum number of layers of food that can be placed on this item.
@@ -22,62 +27,20 @@ public sealed partial class FoodSequenceStartPointComponent : Component
[DataField] [DataField]
public int MaxLayers = 10; public int MaxLayers = 10;
/// <summary>
/// Start shift from the center of the sprite where the first layer of food will be placed.
/// </summary>
[DataField]
public Vector2 StartPosition = Vector2.Zero;
/// <summary>
/// Shift from the start position applied to each subsequent layer.
/// </summary>
[DataField]
public Vector2 Offset = Vector2.Zero;
/// <summary> /// <summary>
/// Can we put more layers? /// Can we put more layers?
/// </summary> /// </summary>
[DataField] [DataField]
public bool Finished; public bool Finished;
/// <summary>
/// list of sprite states to be displayed on this object.
/// </summary>
[DataField, AutoNetworkedField]
public List<FoodSequenceElementEntry> FoodLayers = new();
public HashSet<string> RevealedLayers = new();
/// <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 = "foodSequenceLayers";
/// <summary>
/// If true, the generative layers will be placed in reverse order.
/// </summary>
[DataField]
public bool InverseLayers;
/// <summary>
/// each layer will get a random offset in the specified range
/// </summary>
[DataField]
public Vector2 MaxLayerOffset = Vector2.Zero;
/// <summary>
/// each layer will get a random offset in the specified range
/// </summary>
[DataField]
public Vector2 MinLayerOffset = Vector2.Zero;
/// <summary> /// <summary>
/// solution where reagents will be added from newly added ingredients /// solution where reagents will be added from newly added ingredients
/// </summary> /// </summary>
[DataField] [DataField]
public string Solution = "food"; public string Solution = "food";
#region name generation
/// <summary> /// <summary>
/// LocId with a name generation pattern. /// LocId with a name generation pattern.
/// </summary> /// </summary>
@@ -101,4 +64,96 @@ public sealed partial class FoodSequenceStartPointComponent : Component
/// </summary> /// </summary>
[DataField] [DataField]
public LocId? NameSuffix; public LocId? NameSuffix;
#endregion
#region visual
/// <summary>
/// list of sprite states to be displayed on this object.
/// </summary>
[DataField, AutoNetworkedField]
public List<FoodSequenceVisualLayer> FoodLayers = new();
/// <summary>
/// If true, the generative layers will be placed in reverse order.
/// </summary>
[DataField]
public bool InverseLayers;
/// <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 = "foodSequenceLayers";
/// <summary>
/// Start shift from the center of the sprite where the first layer of food will be placed.
/// </summary>
[DataField]
public Vector2 StartPosition = Vector2.Zero;
/// <summary>
/// Shift from the start position applied to each subsequent layer.
/// </summary>
[DataField]
public Vector2 Offset = Vector2.Zero;
/// <summary>
/// each layer will get a random offset in the specified range
/// </summary>
[DataField]
public Vector2 MaxLayerOffset = Vector2.Zero;
/// <summary>
/// each layer will get a random offset in the specified range
/// </summary>
[DataField]
public Vector2 MinLayerOffset = Vector2.Zero;
[DataField]
public bool AllowHorizontalFlip = true;
public HashSet<string> RevealedLayers = new();
#endregion
}
/// <summary>
/// class that synchronizes with the client
/// Stores all the necessary information for rendering the FoodSequence element
/// </summary>
[DataRecord, Serializable, NetSerializable]
public record struct FoodSequenceVisualLayer
{
/// <summary>
/// reference to the original prototype of the layer. Used to edit visual layers.
/// </summary>
public ProtoId<FoodSequenceElementPrototype> Proto;
/// <summary>
/// Sprite rendered in sequence
/// </summary>
public SpriteSpecifier? Sprite { get; set; } = SpriteSpecifier.Invalid;
/// <summary>
/// Relative size of the sprite displayed in FoodSequence
/// </summary>
public Vector2 Scale { get; set; } = Vector2.One;
/// <summary>
/// The offset of a particular layer. Allows a little position randomization of each layer.
/// </summary>
public Vector2 LocalOffset { get; set; } = Vector2.Zero;
public FoodSequenceVisualLayer(ProtoId<FoodSequenceElementPrototype> proto,
SpriteSpecifier? sprite,
Vector2 scale,
Vector2 offset)
{
Proto = proto;
Sprite = sprite;
Scale = scale;
LocalOffset = offset;
}
} }

View File

@@ -1,5 +1,8 @@
using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components;
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.Nutrition.Components;
using Content.Shared.Nutrition.Prototypes;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
namespace Content.Shared.Nutrition; namespace Content.Shared.Nutrition;
@@ -67,3 +70,8 @@ public record struct SliceFoodEvent();
public sealed partial class SliceFoodDoAfterEvent : SimpleDoAfterEvent public sealed partial class SliceFoodDoAfterEvent : SimpleDoAfterEvent
{ {
} }
/// <summary>
/// Raised on FoodSequence start element entity when new ingredient is added to FoodSequence
/// </summary>
public record struct FoodSequenceIngredientAddedEvent(EntityUid Start, EntityUid Element, ProtoId<FoodSequenceElementPrototype> Proto, EntityUid? User = null);

View File

@@ -0,0 +1,218 @@
using Content.Shared.Chemistry.Components.SolutionManager;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Reagent;
using Content.Shared.Destructible.Thresholds;
using Content.Shared.Nutrition.Components;
using Content.Shared.Tag;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Nutrition.FoodMetamorphRules;
/// <summary>
/// abstract rules that are used to verify the correct foodSequence for recipe
/// </summary>
[ImplicitDataDefinitionForInheritors]
[Serializable, NetSerializable]
public abstract partial class FoodMetamorphRule
{
public abstract bool Check(IPrototypeManager protoMan, EntityManager entMan, EntityUid food, List<FoodSequenceVisualLayer> ingredients);
}
/// <summary>
/// The requirement that the sequence be within the specified size limit
/// </summary>
[UsedImplicitly]
[Serializable, NetSerializable]
public sealed partial class SequenceLength : FoodMetamorphRule
{
[DataField(required: true)]
public MinMax Range;
public override bool Check(IPrototypeManager protoMan, EntityManager entMan, EntityUid food, List<FoodSequenceVisualLayer> ingredients)
{
return ingredients.Count <= Range.Max && ingredients.Count >= Range.Min;
}
}
/// <summary>
/// A requirement that the last element of the sequence have one or all of the required tags
/// </summary>
[UsedImplicitly]
[Serializable, NetSerializable]
public sealed partial class LastElementHasTags : FoodMetamorphRule
{
[DataField(required: true)]
public List<ProtoId<TagPrototype>> Tags = new ();
[DataField]
public bool NeedAll = true;
public override bool Check(IPrototypeManager protoMan, EntityManager entMan, EntityUid food, List<FoodSequenceVisualLayer> ingredients)
{
var lastIngredient = ingredients[ingredients.Count - 1];
if (!protoMan.TryIndex(lastIngredient.Proto, out var protoIndexed))
return false;
foreach (var tag in Tags)
{
var containsTag = protoIndexed.Tags.Contains(tag);
if (NeedAll && !containsTag)
{
return false;
}
if (!NeedAll && containsTag)
{
return true;
}
}
return NeedAll;
}
}
/// <summary>
/// A requirement that the specified sequence element have one or all of the required tags
/// </summary>
[UsedImplicitly]
[Serializable, NetSerializable]
public sealed partial class ElementHasTags : FoodMetamorphRule
{
[DataField(required: true)]
public int ElementNumber = 0;
[DataField(required: true)]
public List<ProtoId<TagPrototype>> Tags = new ();
[DataField]
public bool NeedAll = true;
public override bool Check(IPrototypeManager protoMan, EntityManager entMan, EntityUid food, List<FoodSequenceVisualLayer> ingredients)
{
if (ingredients.Count < ElementNumber + 1)
return false;
if (!protoMan.TryIndex(ingredients[ElementNumber].Proto, out var protoIndexed))
return false;
foreach (var tag in Tags)
{
var containsTag = protoIndexed.Tags.Contains(tag);
if (NeedAll && !containsTag)
{
return false;
}
if (!NeedAll && containsTag)
{
return true;
}
}
return NeedAll;
}
}
/// <summary>
/// requirement that the food contains certain reagents (e.g. sauces)
/// </summary>
[UsedImplicitly]
[Serializable, NetSerializable]
public sealed partial class FoodHasReagent : FoodMetamorphRule
{
[DataField(required: true)]
public ProtoId<ReagentPrototype> Reagent = new();
[DataField(required: true)]
public MinMax Count;
[DataField]
public string Solution = "food";
public override bool Check(IPrototypeManager protoMan, EntityManager entMan, EntityUid food, List<FoodSequenceVisualLayer> ingredients)
{
if (!entMan.TryGetComponent<SolutionContainerManagerComponent>(food, out var solMan))
return false;
var solutionMan = entMan.System<SharedSolutionContainerSystem>();
if (!solutionMan.TryGetSolution(food, Solution, out var foodSoln, out var foodSolution))
return false;
foreach (var (id, quantity) in foodSoln.Value.Comp.Solution.Contents)
{
if (id.Prototype != Reagent.Id)
continue;
if (quantity < Count.Min || quantity > Count.Max)
break;
return true;
}
return false;
}
}
/// <summary>
/// A requirement that there be X ingredients in the sequence that have one or all of the specified tags.
/// </summary>
[UsedImplicitly]
[Serializable, NetSerializable]
public sealed partial class IngredientsWithTags : FoodMetamorphRule
{
[DataField(required: true)]
public List<ProtoId<TagPrototype>> Tags = new ();
[DataField(required: true)]
public MinMax Count = new();
[DataField]
public bool NeedAll = true;
public override bool Check(IPrototypeManager protoMan, EntityManager entMan, EntityUid food, List<FoodSequenceVisualLayer> ingredients)
{
var count = 0;
foreach (var ingredient in ingredients)
{
if (!protoMan.TryIndex(ingredient.Proto, out var protoIndexed))
continue;
var allowed = false;
if (NeedAll)
{
allowed = true;
foreach (var tag in Tags)
{
if (!protoIndexed.Tags.Contains(tag))
{
allowed = false;
break;
}
}
}
else
{
allowed = false;
foreach (var tag in Tags)
{
if (protoIndexed.Tags.Contains(tag))
{
allowed = true;
break;
}
}
}
if (allowed)
count++;
}
return count >= Count.Min && count <= Count.Max;
}
}

View File

@@ -0,0 +1,38 @@
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared.Nutrition.Prototypes;
/// <summary>
/// Unique data storage block for different FoodSequence layers
/// </summary>
[Prototype("foodSequenceElement")]
public sealed partial class FoodSequenceElementPrototype : IPrototype
{
[IdDataField] public string ID { get; private set; } = default!;
/// <summary>
/// sprite options. A random one will be selected and used to display the layer.
/// </summary>
[DataField]
public List<SpriteSpecifier> Sprites { get; private set; } = new();
/// <summary>
/// A localized name piece to build into the item name generator.
/// </summary>
[DataField]
public LocId? Name { get; private set; }
/// <summary>
/// If the layer is the final one, it can be added over the limit, but no other layers can be added after it.
/// </summary>
[DataField]
public bool Final { get; private set; }
/// <summary>
/// Tag list of this layer. Used for recipes for food metamorphosis.
/// </summary>
[DataField]
public List<ProtoId<TagPrototype>> Tags { get; set; } = new();
}

View File

@@ -0,0 +1,32 @@
using Content.Shared.Nutrition.FoodMetamorphRules;
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
namespace Content.Shared.Nutrition.Prototypes;
/// <summary>
/// Stores a recipe so that FoodSequence assembled in the right sequence can turn into a special meal.
/// </summary>
[Prototype]
public sealed partial class MetamorphRecipePrototype : IPrototype
{
[IdDataField] public string ID { get; private set; } = default!;
/// <summary>
/// The key of the FoodSequence being collected. For example “burger” “taco” etc.
/// </summary>
[DataField(required: true)]
public ProtoId<TagPrototype> Key = string.Empty;
/// <summary>
/// The entity that will be created as a result of this recipe, and into which all the reagents will be transferred.
/// </summary>
[DataField(required: true)]
public EntProtoId Result = default!;
/// <summary>
/// A sequence of rules that must be followed for FoodSequence to metamorphose into a special food.
/// </summary>
[DataField]
public List<FoodMetamorphRule> Rules = new();
}

View File

@@ -4,7 +4,7 @@ food-sequence-no-space = You can't put any more!
food-sequence-content-chicken = chicken food-sequence-content-chicken = chicken
food-sequence-content-duck = duck food-sequence-content-duck = duck
food-sequence-content-crab = crabs food-sequence-content-crab = crab
food-sequence-content-dragon = dragon food-sequence-content-dragon = dragon
food-sequence-content-snake = snake food-sequence-content-snake = snake
food-sequence-content-xeno = xeno food-sequence-content-xeno = xeno
@@ -83,6 +83,7 @@ food-sequence-burger-content-raw-meat = raw
food-sequence-burger-content-meat = meaty food-sequence-burger-content-meat = meaty
food-sequence-burger-content-carp = carpo food-sequence-burger-content-carp = carpo
food-sequence-burger-content-bear = bear food-sequence-burger-content-bear = bear
food-sequence-burger-content-crab = crabs
food-sequence-burger-content-penguin = peng food-sequence-burger-content-penguin = peng
food-sequence-burger-content-corgi = corgi food-sequence-burger-content-corgi = corgi
food-sequence-burger-content-goliath = goli food-sequence-burger-content-goliath = goli

View File

@@ -68,14 +68,9 @@
flavors: flavors:
- people - people
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Mobs/Species/Human/organs.rsi
state: brain
entries: entries:
burger: Burger: Brain
name: food-sequence-content-brain Taco: Brain
taco:
name: food-sequence-content-brain
- type: entity - type: entity
id: OrganHumanEyes id: OrganHumanEyes
@@ -96,15 +91,6 @@
components: components:
- type: Sprite - type: Sprite
state: tongue state: tongue
- type: FoodSequenceElement
sprite:
sprite: Mobs/Species/Human/organs.rsi
state: tongue
entries:
burger:
name: food-sequence-content-tongue
taco:
name: food-sequence-content-tongue
- type: entity - type: entity
id: OrganHumanAppendix id: OrganHumanAppendix
@@ -125,15 +111,6 @@
components: components:
- type: Sprite - type: Sprite
state: ears state: ears
- type: FoodSequenceElement
sprite:
sprite: Mobs/Species/Human/organs.rsi
state: ears
entries:
burger:
name: food-sequence-content-ears
taco:
name: food-sequence-content-ears
- type: entity - type: entity
id: OrganHumanLungs id: OrganHumanLungs
@@ -216,15 +193,6 @@
groups: groups:
- id: Food - id: Food
- id: Drink - id: Drink
- type: FoodSequenceElement
sprite:
sprite: Mobs/Species/Human/organs.rsi
state: stomach
entries:
burger:
name: food-sequence-content-stomach
taco:
name: food-sequence-content-stomach
- type: entity - type: entity
id: OrganHumanLiver id: OrganHumanLiver
@@ -240,15 +208,6 @@
groups: groups:
- id: Alcohol - id: Alcohol
rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink
- type: FoodSequenceElement
sprite:
sprite: Mobs/Species/Human/organs.rsi
state: liver
entries:
burger:
name: food-sequence-content-liver
taco:
name: food-sequence-content-liver
- type: entity - type: entity
id: OrganHumanKidneys id: OrganHumanKidneys

View File

@@ -1724,20 +1724,10 @@
sprite: Mobs/Effects/onfire.rsi sprite: Mobs/Effects/onfire.rsi
normalState: Mouse_burning normalState: Mouse_burning
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Mobs/Animals/mouse.rsi
state: dead-0
entries: entries:
burger: Taco: RatTaco
name: food-sequence-burger-content-rat Burger: RatBurger
taco: Skewer: RatSkewer
name: food-sequence-content-rat
skewer:
name: food-sequence-content-rat
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-rat
- type: entity - type: entity
parent: MobMouse parent: MobMouse
@@ -1794,10 +1784,6 @@
- type: Item - type: Item
size: Tiny size: Tiny
heldPrefix: 1 heldPrefix: 1
- type: FoodSequenceElement
sprite:
sprite: Mobs/Animals/mouse.rsi
state: dead-1
- type: entity - type: entity
parent: MobMouse parent: MobMouse
@@ -1827,10 +1813,6 @@
- type: Item - type: Item
size: Tiny size: Tiny
heldPrefix: 2 heldPrefix: 2
- type: FoodSequenceElement
sprite:
sprite: Mobs/Animals/mouse.rsi
state: dead-2
- type: entity - type: entity
name: cancer mouse name: cancer mouse
@@ -3257,15 +3239,6 @@
- type: FireVisuals - type: FireVisuals
sprite: Mobs/Effects/onfire.rsi sprite: Mobs/Effects/onfire.rsi
normalState: Mouse_burning normalState: Mouse_burning
- type: FoodSequenceElement
sprite:
sprite: Mobs/Animals/hamster.rsi
state: dead-0
entries:
burger:
name: food-sequence-burger-content-hamster
taco:
name: food-sequence-content-hamster
- type: entity - type: entity
name: pig name: pig

View File

@@ -785,11 +785,6 @@
tags: tags:
- Slice - Slice
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Consumable/Food/Baked/cake.rsi
state: suppermatter-shard
entries: entries:
burger: Taco: Suppermatter
name: food-sequence-burger-content-suppermatter Burger: SuppermatterBurger
taco:
name: food-sequence-content-suppermatter

View File

@@ -39,19 +39,20 @@
- type: Sprite - type: Sprite
drawdepth: Mobs drawdepth: Mobs
noRot: true noRot: true
sprite: Objects/Consumable/Food/burger.rsi sprite: Objects/Consumable/Food/burger_sequence.rsi
layers: layers:
- state: bun_bottom - state: bun_bottom
- map: ["foodSequenceLayers"] - map: ["foodSequenceLayers"]
- type: FoodSequenceStartPoint - type: FoodSequenceStartPoint
key: burger key: Burger
maxLayers: 10 maxLayers: 10
startPosition: 0, 0 startPosition: 0, 0
offset: 0, 0.1 offset: 0, 0.07
minLayerOffset: -0.05, 0 minLayerOffset: -0.05, 0
maxLayerOffset: 0.05, 0 maxLayerOffset: 0.05, 0
nameGeneration: food-sequence-burger-gen nameGeneration: food-sequence-burger-gen
- type: Appearance - type: Appearance
- type: FoodMetamorphableByAdding
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
food: food:
@@ -69,7 +70,7 @@
components: components:
- type: Food - type: Food
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Food/burger.rsi sprite: Objects/Consumable/Food/burger_sequence.rsi
layers: layers:
- state: bun_top - state: bun_top
- type: SolutionContainerManager - type: SolutionContainerManager
@@ -80,12 +81,8 @@
- ReagentId: Nutriment - ReagentId: Nutriment
Quantity: 3.3 # 1/2 of a bun Quantity: 3.3 # 1/2 of a bun
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Consumable/Food/burger.rsi
state: bun_top
entries: entries:
burger: Burger: BunTopBurger
final: true
# Base # Base

View File

@@ -642,14 +642,9 @@
tags: tags:
- Slice - Slice
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Consumable/Food/ingredients.rsi
state: cheesewedge
entries: entries:
burger: Taco: CheeseTaco
name: food-sequence-content-cheese Burger: CheeseBurger
taco:
name: food-sequence-content-cheese
- type: entity - type: entity
name: chèvre log name: chèvre log
@@ -700,15 +695,6 @@
- type: Tag - type: Tag
tags: tags:
- Slice - Slice
- type: FoodSequenceElement
sprite:
sprite: Objects/Consumable/Food/ingredients.rsi
state: chevredisk
entries:
burger:
name: food-sequence-content-chevre
taco:
name: food-sequence-content-chevre
- type: entity - type: entity
name: tofu name: tofu
@@ -757,15 +743,6 @@
- type: Tag - type: Tag
tags: tags:
- Slice - Slice
- type: FoodSequenceElement
sprite:
sprite: Objects/Consumable/Food/ingredients.rsi
state: tofu
entries:
burger:
name: food-sequence-content-tofu
taco:
name: food-sequence-content-tofu
- type: entity - type: entity
name: burned mess name: burned mess
@@ -822,15 +799,6 @@
- type: Tag - type: Tag
tags: tags:
- Ingredient - Ingredient
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/cocoa.rsi
state: produce-beans
entries:
burger:
name: food-sequence-content-cocoa
taco:
name: food-sequence-content-cocoa
- type: entity - type: entity
name: raw croissant name: raw croissant

View File

@@ -142,15 +142,6 @@
- type: Tag - type: Tag
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/laughin_pea.rsi
state: produce
entries:
burger:
name: food-sequence-content-pea
taco:
name: food-sequence-content-pea
- type: entity - type: entity
name: tower-cap log name: tower-cap log
@@ -213,7 +204,7 @@
- type: Produce - type: Produce
seedId: nettle seedId: nettle
- type: MeleeChemicalInjector - type: MeleeChemicalInjector
transferAmount: 3 #To OD someone you would need 2 nettles and about 6-7 hits, the DOT is likely to crit them if they are running away with almost no health transferAmount: 3 #TODO someone you would need 2 nettles and about 6-7 hits, the DOT is likely to crit them if they are running away with almost no health
solution: food solution: food
pierceArmor: false pierceArmor: false
- type: Extractable - type: Extractable
@@ -288,14 +279,9 @@
- Fruit - Fruit
- Banana - Banana
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/banana.rsi
state: produce
entries: entries:
burger: Burger: Banana
name: food-sequence-content-banana Taco: Banana
taco:
name: food-sequence-content-banana
- type: entity - type: entity
name: mimana name: mimana
@@ -334,14 +320,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/mimana.rsi
state: produce
entries: entries:
burger: Burger: Mimana
name: food-sequence-content-mimana Taco: Mimana
taco:
name: food-sequence-content-mimana
- type: entity - type: entity
name: banana peel name: banana peel
@@ -481,14 +462,9 @@
- ReagentId: Oculine - ReagentId: Oculine
Quantity: 2 Quantity: 2
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/carrot.rsi
state: produce
entries: entries:
burger: Burger: CarrotBurger
name: food-sequence-burger-content-carrot Taco: Carrot
taco:
name: food-sequence-content-carrot
- type: entity - type: entity
name: cabbage name: cabbage
@@ -516,14 +492,9 @@
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/cabbage.rsi
state: produce
entries: entries:
burger: Burger: CabbageBurger
name: food-sequence-burger-content-cabbage Taco: Cabbage
taco:
name: food-sequence-content-cabbage
- type: entity - type: entity
name: garlic name: garlic
@@ -553,14 +524,9 @@
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/garlic.rsi
state: produce
entries: entries:
burger: Burger: GarlicBurger
name: food-sequence-burger-content-garlic Taco: Garlic
taco:
name: food-sequence-content-garlic
- type: entity - type: entity
name: lemon name: lemon
@@ -594,14 +560,9 @@
- Lemon - Lemon
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/lemon.rsi
state: produce
entries: entries:
burger: Burger: Lemon
name: food-sequence-content-lemon Taco: Lemon
taco:
name: food-sequence-content-lemon
- type: entity - type: entity
name: lemoon name: lemoon
@@ -634,14 +595,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/lemoon.rsi
state: produce
entries: entries:
burger: Burger: Lemoon
name: food-sequence-content-lemoon Taco: Lemoon
taco:
name: food-sequence-content-lemoon
- type: entity - type: entity
name: lime name: lime
@@ -666,14 +622,9 @@
- Lime - Lime
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/lime.rsi
state: produce
entries: entries:
burger: Burger: Lime
name: food-sequence-content-lime Taco: Lime
taco:
name: food-sequence-content-lime
- type: entity - type: entity
name: orange name: orange
@@ -697,14 +648,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/orange.rsi
state: produce
entries: entries:
burger: Burger: Orange
name: food-sequence-content-orange Taco: Orange
taco:
name: food-sequence-content-orange
- type: entity - type: entity
name: pineapple name: pineapple
@@ -774,14 +720,9 @@
- Potato - Potato
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/potato.rsi
state: produce
entries: entries:
burger: Burger: Potato
name: food-sequence-content-potato Taco: Potato
taco:
name: food-sequence-content-potato
- type: entity - type: entity
@@ -839,19 +780,10 @@
- Fruit - Fruit
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/tomato.rsi
state: produce
entries: entries:
burger: Skewer: TomatoSkewer
name: food-sequence-content-tomato Burger: Tomato
taco: Taco: Tomato
name: food-sequence-content-tomato
skewer:
name: food-sequence-content-tomato
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-tomato
- type: entity - type: entity
name: blue tomato name: blue tomato
@@ -898,14 +830,9 @@
- Fruit - Fruit
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/blue_tomato.rsi
state: produce
entries: entries:
burger: Burger: BlueTomato
name: food-sequence-content-tomato Taco: BlueTomato
taco:
name: food-sequence-content-tomato
- type: entity - type: entity
name: blood tomato name: blood tomato
@@ -950,19 +877,10 @@
- Fruit # Fuck you they're a fruit - Fruit # Fuck you they're a fruit
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/blood_tomato.rsi
state: produce
entries: entries:
burger: Skewer: TomatoSkewer
name: food-sequence-content-tomato Burger: BloodTomato
taco: Taco: BloodTomato
name: food-sequence-content-tomato
skewer:
name: food-sequence-content-tomato
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-tomato
- type: entity - type: entity
name: eggplant name: eggplant
@@ -1022,14 +940,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/apple.rsi
state: produce
entries: entries:
burger: Burger: Apple
name: food-sequence-content-apple Taco: Apple
taco:
name: food-sequence-content-apple
- type: entity - type: entity
name: golden apple name: golden apple
@@ -1067,14 +980,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/golden_apple.rsi
state: produce
entries: entries:
burger: Burger: GoldenApple
name: food-sequence-content-apple Taco: GoldenApple
taco:
name: food-sequence-content-apple
- type: entity - type: entity
name: cocoa pod name: cocoa pod
@@ -1108,15 +1016,6 @@
- type: Tag - type: Tag
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/cocoa.rsi
state: produce
entries:
burger:
name: food-sequence-content-cocoa
taco:
name: food-sequence-content-cocoa
- type: entity - type: entity
name: ear of corn name: ear of corn
@@ -1156,19 +1055,10 @@
- ReagentId: Enzyme - ReagentId: Enzyme
Quantity: 2 Quantity: 2
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/corn.rsi
state: produce
entries: entries:
burger: Burger: Corn
name: food-sequence-content-corn Taco: Corn
taco: Skewer: CornSkewer
name: food-sequence-content-corn
skewer:
name: food-sequence-content-corn
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-corn
- type: entity - type: entity
name: corn cob name: corn cob
@@ -1191,15 +1081,6 @@
reagents: reagents:
- ReagentId: Cornmeal - ReagentId: Cornmeal
Quantity: 10 Quantity: 10
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/corn.rsi
state: produce
entries:
burger:
name: food-sequence-content-corn
taco:
name: food-sequence-content-corn
- type: entity - type: entity
name: onion name: onion
@@ -1231,15 +1112,6 @@
- type: Tag - type: Tag
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/onion.rsi
state: produce
entries:
burger:
name: food-sequence-burger-content-onion
taco:
name: food-sequence-content-onion
- type: entity - type: entity
name: red onion name: red onion
@@ -1271,15 +1143,6 @@
- type: Tag - type: Tag
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/onion_red.rsi
state: produce
entries:
burger:
name: food-sequence-burger-content-onion
taco:
name: food-sequence-content-onion
- type: entity - type: entity
name: chanterelle cluster name: chanterelle cluster
@@ -1300,20 +1163,6 @@
- type: Tag - type: Tag
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/chanterelle.rsi
state: produce
entries:
burger:
name: food-sequence-content-mushroom
taco:
name: food-sequence-content-mushroom
skewer:
name: food-sequence-content-mushroom
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-mushroom
# Slices # Slices
@@ -1358,14 +1207,9 @@
- Fruit - Fruit
- Slice - Slice
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/pineapple.rsi
state: slice
entries: entries:
burger: Burger: PineappleSliceBurger
name: food-sequence-burger-content-pineapple Taco: PineappleSlice
taco:
name: food-sequence-content-pineapple
- type: entity - type: entity
name: onion slice name: onion slice
@@ -1394,14 +1238,9 @@
- Vegetable - Vegetable
- Slice - Slice
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/onion.rsi
state: slice
entries: entries:
burger: Burger: OnionSliceBurger
name: food-sequence-burger-content-onion Taco: OnionSlice
taco:
name: food-sequence-content-onion
- type: entity - type: entity
name: red onion slice name: red onion slice
@@ -1430,14 +1269,9 @@
- Vegetable - Vegetable
- Slice - Slice
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/onion_red.rsi
state: slice
entries: entries:
burger: Burger: OnionRedSliceBurger
name: food-sequence-burger-content-onion Taco: OnionRedSlice
taco:
name: food-sequence-content-onion
- type: entity - type: entity
name: chili pepper name: chili pepper
@@ -1467,19 +1301,10 @@
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/chili.rsi
state: produce
entries: entries:
burger: Taco: ChiliPepper
name: food-sequence-content-chili Burger: ChiliPepper
taco: Skewer: ChiliPepperSkewer
name: food-sequence-content-chili
skewer:
name: food-sequence-content-chili
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-pepper
- type: entity - type: entity
name: chilly pepper name: chilly pepper
@@ -1507,19 +1332,10 @@
- type: Produce - type: Produce
seedId: chilly seedId: chilly
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/chilly.rsi
state: produce
entries: entries:
burger: Taco: ChillyPepper
name: food-sequence-content-chilly Burger: ChillyPepper
taco: Skewer: ChillyPepperSkewer
name: food-sequence-content-chilly
skewer:
name: food-sequence-content-chilly
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-bluepepper
- type: entity - type: entity
name: aloe name: aloe
@@ -1549,14 +1365,9 @@
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/aloe.rsi
state: produce
entries: entries:
burger: Taco: Aloe
name: food-sequence-content-aloe Burger: Aloe
taco:
name: food-sequence-content-aloe
- type: entity - type: entity
name: poppy name: poppy
@@ -1590,14 +1401,9 @@
tags: tags:
- Flower # TODO add "RedFlower" or "Poppy" tag, when other color flowers will be - Flower # TODO add "RedFlower" or "Poppy" tag, when other color flowers will be
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/poppy.rsi
state: produce
entries: entries:
burger: Taco: Poppy
name: food-sequence-content-poppy Burger: Poppy
taco:
name: food-sequence-content-poppy
- type: entity - type: entity
name: lily name: lily
@@ -1627,14 +1433,9 @@
tags: tags:
- Flower - Flower
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/lily.rsi
state: produce
entries: entries:
burger: Taco: Lily
name: food-sequence-content-lily Burger: Lily
taco:
name: food-sequence-content-lily
- type: entity - type: entity
name: lingzhi name: lingzhi
@@ -1662,19 +1463,9 @@
- type: Extractable - type: Extractable
grindableSolutionName: food grindableSolutionName: food
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/lingzhi.rsi
state: produce
entries: entries:
burger: Taco: Lingzhi
name: food-sequence-content-mushroom Burger: Lingzhi
taco:
name: food-sequence-content-mushroom
skewer:
name: food-sequence-content-mushroom
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-mushroom
- type: entity - type: entity
name: ambrosia vulgaris name: ambrosia vulgaris
@@ -1716,11 +1507,8 @@
- Ambrosia - Ambrosia
- type: FoodSequenceElement - type: FoodSequenceElement
entries: entries:
burger: Taco: AmbrosiaVulgaris
name: food-sequence-burger-content-ambrosia Burger: AmbrosiaVulgarisBurger
sprite:
sprite: Objects/Specific/Hydroponics/ambrosia_vulgaris.rsi
state: produce
- type: entity - type: entity
name: ambrosia deus name: ambrosia deus
@@ -1759,14 +1547,9 @@
tags: tags:
- Ambrosia - Ambrosia
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/ambrosia_deus.rsi
state: produce
entries: entries:
burger: Taco: AmbrosiaDeus
name: food-sequence-burger-content-ambrosia Burger: AmbrosiaDeusBurger
taco:
name: food-sequence-content-ambrosia
- type: entity - type: entity
name: galaxythistle name: galaxythistle
@@ -1795,14 +1578,9 @@
- Galaxythistle - Galaxythistle
- Fruit # Probably? - Fruit # Probably?
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/galaxythistle.rsi
state: produce
entries: entries:
burger: Taco: Galaxythistle
name: food-sequence-burger-content-galaxy Burger: GalaxythistleBurger
taco:
name: food-sequence-content-galaxy
- type: entity - type: entity
name: glasstle name: glasstle
@@ -1868,14 +1646,9 @@
tags: tags:
- Galaxythistle - Galaxythistle
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/glasstle.rsi
state: produce
entries: entries:
burger: Taco: Glasstle
name: food-sequence-burger-content-glasstle Burger: GlasstleBurger
taco:
name: food-sequence-content-glasstle
- type: entity - type: entity
name: fly amanita name: fly amanita
@@ -1903,19 +1676,9 @@
grindableSolutionName: food grindableSolutionName: food
- type: BadFood - type: BadFood
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/fly_amanita.rsi
state: produce
entries: entries:
burger: Taco: FlyAmanita
name: food-sequence-content-mushroom Burger: FlyAmanita
taco:
name: food-sequence-content-mushroom
skewer:
name: food-sequence-content-mushroom
sprite:
sprite: Objects/Consumable/Food/skewer.rsi
state: skewer-mushroom
- type: entity - type: entity
name: gatfruit name: gatfruit
@@ -1946,14 +1709,9 @@
tags: tags:
- Fruit # It's in the name - Fruit # It's in the name
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/gatfruit.rsi
state: produce
entries: entries:
burger: Taco: Gatfruit
name: food-sequence-burger-content-gatfruit Burger: GatfruitBurger
taco:
name: food-sequence-content-gatfruit
- type: entity - type: entity
name: capfruit name: capfruit
@@ -1984,14 +1742,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/capfruit.rsi
state: produce
entries: entries:
burger: Taco: Capfruit
name: food-sequence-burger-content-capfruit Burger: CapfruitBurger
taco:
name: food-sequence-content-capfruit
- type: entity - type: entity
name: capfruit name: capfruit
@@ -2048,14 +1801,9 @@
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/soybeans.rsi
state: produce
entries: entries:
burger: Taco: Soybeans
name: food-sequence-content-soy Burger: SoybeansBurger
taco:
name: food-sequence-content-soy
- type: entity - type: entity
name: spaceman's trumpet name: spaceman's trumpet
@@ -2085,14 +1833,9 @@
- type: Instrument #hehe trumpet - type: Instrument #hehe trumpet
program: 56 program: 56
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/spacemans_trumpet.rsi
state: produce
entries: entries:
burger: Taco: SpacemansTrumpet
name: food-sequence-burger-content-spacemans-trumpet Burger: SpacemansTrumpetBurger
taco:
name: food-sequence-content-spacemans-trumpet
- type: entity - type: entity
name: koibean name: koibean
@@ -2122,14 +1865,9 @@
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/koibean.rsi
state: produce
entries: entries:
burger: Taco: Koibean
name: food-sequence-burger-content-koibean Burger: KoibeanBurger
taco:
name: food-sequence-content-koibean
- type: entity - type: entity
name: watermelon name: watermelon
@@ -2227,14 +1965,10 @@
- Fruit - Fruit
- Slice - Slice
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/watermelon.rsi
state: slice
entries: entries:
burger: Burger: WatermelonSliceBurger
name: food-sequence-burger-content-watermelon Taco: WatermelonSlice
taco: Skewer: WatermelonSliceSkewer
name: food-sequence-content-watermelon
- type: entity - type: entity
name: grapes name: grapes
@@ -2298,14 +2032,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/berries.rsi
state: produce
entries: entries:
burger: Taco: Berries
name: food-sequence-burger-content-berries Burger: BerriesBurger
taco:
name: food-sequence-content-berries
- type: entity - type: entity
name: bungo fruit name: bungo fruit
@@ -2341,14 +2070,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/bungo.rsi
state: produce
entries: entries:
burger: Taco: Bungo
name: food-sequence-content-bungo Burger: Bungo
taco:
name: food-sequence-content-bungo
- type: entity - type: entity
name: bungo pit name: bungo pit
@@ -2404,14 +2128,9 @@
tags: tags:
- Vegetable - Vegetable
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/pea.rsi
state: produce
entries: entries:
burger: Taco: Pea
name: food-sequence-content-pea Burger: Pea
taco:
name: food-sequence-content-pea
- type: entity - type: entity
name: pumpkin name: pumpkin
@@ -2608,14 +2327,9 @@
tags: tags:
- Fruit - Fruit
- type: FoodSequenceElement - type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/cherry.rsi
state: produce
entries: entries:
burger: Taco: Cherry
name: food-sequence-content-cherry Burger: Cherry
taco:
name: food-sequence-content-cherry
- type: entity - type: entity
name: cherry pit name: cherry pit

View File

@@ -13,11 +13,34 @@
layers: layers:
- state: skewer - state: skewer
- map: ["foodSequenceLayers"] - map: ["foodSequenceLayers"]
- type: LandAtCursor
- type: Fixtures
fixtures:
fix1:
shape: !type:PolygonShape
vertices:
- -0.40,-0.20
- -0.30,-0.30
- 0.50,0.10
- 0.40,0.20
density: 20
mask:
- ItemMask
restitution: 0.3
friction: 0.2
- type: DamageOtherOnHit
damage:
types:
Piercing: 6
- type: ThrowingAngle
angle: 245
- type: EmbeddableProjectile
offset: -0.15,0.0
- type: MeleeWeapon - type: MeleeWeapon
wideAnimationRotation: -120 wideAnimationRotation: -120
damage: damage:
types: types:
Piercing: 4 Piercing: 8
angle: 0 angle: 0
animation: WeaponArcThrust animation: WeaponArcThrust
soundHit: soundHit:
@@ -35,10 +58,11 @@
canReact: false # Dont want cause reactions inside skewers after merging ingredients canReact: false # Dont want cause reactions inside skewers after merging ingredients
maxVol: 0 maxVol: 0
- type: FoodSequenceStartPoint - type: FoodSequenceStartPoint
key: skewer key: Skewer
maxLayers: 4 maxLayers: 4
startPosition: -0.27, -0.19 startPosition: -0.27, -0.19
inverseLayers: true inverseLayers: true
offset: 0.2, 0.1 offset: 0.2, 0.1
nameGeneration: food-sequence-skewer-gen nameGeneration: food-sequence-skewer-gen
contentSeparator: ", " contentSeparator: ", "
allowHorizontalFlip: false

View File

@@ -11,7 +11,7 @@
- type: Food - type: Food
transferAmount: 3 transferAmount: 3
- type: Sprite - type: Sprite
sprite: Objects/Consumable/Food/taco.rsi sprite: Objects/Consumable/Food/taco_sequence.rsi
layers: layers:
- state: tacoshell_back - state: tacoshell_back
- map: ["foodSequenceLayers"] - map: ["foodSequenceLayers"]
@@ -25,12 +25,161 @@
- ReagentId: Nutriment - ReagentId: Nutriment
Quantity: 6.66 Quantity: 6.66
- type: FoodSequenceStartPoint - type: FoodSequenceStartPoint
key: taco key: Taco
maxLayers: 3 maxLayers: 3
startPosition: -0.2, 0 startPosition: -0.15, 0
offset: 0.1, 0 offset: 0.15, 0
minLayerOffset: 0, 0 minLayerOffset: 0, 0
maxLayerOffset: 0, 0.05 maxLayerOffset: 0, 0.05
nameGeneration: food-sequence-taco-gen nameGeneration: food-sequence-taco-gen
contentSeparator: ", " contentSeparator: ", "
- type: Appearance - type: Appearance
# Old tacos
- type: entity
parent: FoodInjectableBase
id: FoodTacoBase
abstract: true
components:
- type: FlavorProfile
flavors:
- meaty
- cheesy
- type: Food
transferAmount: 3
- type: Sprite
sprite: Objects/Consumable/Food/taco.rsi
- type: SolutionContainerManager
solutions:
food:
maxVol: 15
reagents:
- ReagentId: Nutriment
Quantity: 6
- ReagentId: Vitamin
Quantity: 4
- type: Item
sprite: Objects/Consumable/Food/taco.rsi
storedRotation: -90
- type: Tag
tags:
- Meat
- type: entity
name: beef taco
parent: FoodTacoBase
id: FoodTacoBeef
description: A very basic and run of the mill beef taco, now with cheese!
components:
- type: Food
- type: Sprite
state: beeftaco
- type: entity
name: chicken taco
parent: FoodTacoBase
id: FoodTacoChicken
description: A very basic and run of the mill chicken taco, now with cheese!
components:
- type: Food
- type: Sprite
state: chickentaco
- type: entity
name: fish taco
parent: FoodTacoBase
id: FoodTacoFish
description: Sounds kinda gross, but it's actually not that bad.
components:
- type: FlavorProfile
flavors:
- onion
- fishy
- type: Food
- type: Sprite
state: fishtaco
- type: SolutionContainerManager
solutions:
food:
maxVol: 20
reagents:
- ReagentId: Nutriment
Quantity: 10
- ReagentId: Vitamin
Quantity: 6
- type: entity
name: rat taco
parent: FoodTacoBase
id: FoodTacoRat
description: Yeah, that looks about right...
components:
- type: Food
- type: Sprite
state: rattaco
- type: SolutionContainerManager
solutions:
food:
maxVol: 15
reagents:
- ReagentId: Nutriment
Quantity: 6
- ReagentId: Vitamin
Quantity: 4
- type: entity
name: beef taco supreme
parent: FoodTacoBase
id: FoodTacoBeefSupreme
description: It's like a regular beef taco, but surpeme!
components:
- type: Food
- type: Sprite
state: beeftacosupreme
- type: SolutionContainerManager
solutions:
food:
maxVol: 26
reagents:
- ReagentId: Nutriment
Quantity: 14
- ReagentId: Vitamin
Quantity: 6
- type: entity
name: chicken taco supreme
parent: FoodTacoBase
id: FoodTacoChickenSupreme
description: It's like a regular chicken taco, but surpeme!
components:
- type: Food
- type: Sprite
state: chickentacosupreme
- type: SolutionContainerManager
solutions:
food:
maxVol: 26
reagents:
- ReagentId: Nutriment
Quantity: 14
- ReagentId: Vitamin
Quantity: 6
- type: entity
name: soft taco
parent: FoodMealBase
id: FoodMealSoftTaco
description: Take a bite!
components:
- type: FlavorProfile
flavors:
- cheesy
- tomato
- meaty
- onion
- type: Sprite
state: softtaco
- type: Tag
tags:
- Meat

View File

@@ -17,15 +17,6 @@
reagents: reagents:
- ReagentId: THC - ReagentId: THC
Quantity: 15 Quantity: 15
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/cannabis.rsi
state: produce
entries:
burger:
name: food-sequence-burger-content-cannabis
taco:
name: food-sequence-content-cannabis
- type: entity - type: entity
@@ -106,15 +97,6 @@
# Quantity: 1 # Quantity: 1
- ReagentId: Psicodine - ReagentId: Psicodine
Quantity: 0.6 Quantity: 0.6
- type: FoodSequenceElement
sprite:
sprite: Objects/Specific/Hydroponics/rainbow_cannabis.rsi
state: produce
entries:
burger:
name: food-sequence-burger-content-rainbow-cannabis
taco:
name: food-sequence-content-rainbow-cannabis
- type: entity - type: entity
name: dried rainbow cannabis leaves name: dried rainbow cannabis leaves

File diff suppressed because it is too large Load Diff

View File

@@ -75,7 +75,7 @@
FoodTomato: 1 FoodTomato: 1
FoodOnionSlice: 2 FoodOnionSlice: 2
- type: microwaveMealRecipe - type: microwaveMealRecipe #Added to metamorph recipes
id: RecipeBrainBurger id: RecipeBrainBurger
name: brain burger recipe name: brain burger recipe
result: FoodBurgerBrain result: FoodBurgerBrain
@@ -94,7 +94,7 @@
FoodMeat: 1 FoodMeat: 1
ClothingHeadHatCatEars: 1 ClothingHeadHatCatEars: 1
- type: microwaveMealRecipe - type: microwaveMealRecipe #Added to metamorph recipes
id: RecipeCheeseburger id: RecipeCheeseburger
name: cheeseburger recipe name: cheeseburger recipe
result: FoodBurgerCheese result: FoodBurgerCheese
@@ -104,7 +104,7 @@
FoodMeat: 1 FoodMeat: 1
FoodCheeseSlice: 1 FoodCheeseSlice: 1
- type: microwaveMealRecipe - type: microwaveMealRecipe #Added to metamorph recipes
id: RecipeChickenSandwich id: RecipeChickenSandwich
name: chicken sandwich recipe name: chicken sandwich recipe
result: FoodBurgerChicken result: FoodBurgerChicken
@@ -133,7 +133,7 @@
FoodBreadBun: 1 FoodBreadBun: 1
FoodMeatCorgi: 1 FoodMeatCorgi: 1
- type: microwaveMealRecipe - type: microwaveMealRecipe #Added to metamorph recipes
id: RecipeCrabBurger id: RecipeCrabBurger
name: crab burger recipe name: crab burger recipe
result: FoodBurgerCrab result: FoodBurgerCrab
@@ -158,7 +158,7 @@
CrayonGreen: 1 CrayonGreen: 1
Flare: 1 Flare: 1
- type: microwaveMealRecipe - type: microwaveMealRecipe #Added to metamorph recipes
id: RecipeDuckBurger id: RecipeDuckBurger
name: duck sandwich recipe name: duck sandwich recipe
result: FoodBurgerDuck result: FoodBurgerDuck
@@ -1892,6 +1892,74 @@
solids: solids:
FoodDoughTortillaFlat: 1 # one third of a standard bread dough recipe FoodDoughTortillaFlat: 1 # one third of a standard bread dough recipe
- type: microwaveMealRecipe
id: RecipeTacoBeef
name: beef taco recipe
result: FoodTacoBeef
time: 10
solids:
FoodTacoShell: 1
FoodMeatCutlet: 1
FoodCheeseSlice: 1
- type: microwaveMealRecipe
id: RecipeTacoChicken
name: chicken taco recipe
result: FoodTacoChicken
time: 10
solids:
FoodTacoShell: 1
FoodMeatChickenCutlet: 1
FoodCheeseSlice: 1
- type: microwaveMealRecipe
id: RecipeTacoFish
name: fish taco recipe
result: FoodTacoFish
time: 10
solids:
FoodTacoShell: 1
FoodMeatFish: 1
FoodOnionSlice: 2
FoodTomato: 1
FoodCabbage: 1
- type: microwaveMealRecipe
id: RecipeTacoRat
name: rat taco recipe
result: FoodTacoRat
time: 10
solids:
FoodTacoShell: 1
FoodCheeseSlice: 1
FoodMeatRat: 1
- type: microwaveMealRecipe
id: RecipeTacoBeefSupreme
name: beef taco supreme recipe
result: FoodTacoBeefSupreme
time: 10
solids:
FoodTacoShell: 1
FoodCheeseSlice: 1
FoodMeatCutlet: 1
FoodTomato: 1
FoodCabbage: 1
FoodOnionSlice: 2
- type: microwaveMealRecipe
id: RecipeTacoChickenSupreme
name: beef taco supreme recipe
result: FoodTacoChickenSupreme
time: 10
solids:
FoodTacoShell: 1
FoodCheeseSlice: 1
FoodMeatChickenCutlet: 1
FoodTomato: 1
FoodCabbage: 1
FoodOnionSlice: 2
- type: microwaveMealRecipe - type: microwaveMealRecipe
id: RecipeCroissant id: RecipeCroissant
name: croissant recipe name: croissant recipe

View File

@@ -0,0 +1,125 @@
# rules for transferring recipes from microwaveMealRecipe
# 1) leave room for variation. If the original recipe calls for 2 pieces of meat, allow players to put in 2-3 pieces.
# 2) max SequenceLength must be 1 element greater than the minimum ingredient set requires. This will allow you to put 1 poison fly or 1 other ingredient in different recipes and the recipes will still be valid.
- type: metamorphRecipe
id: FoodBurgerCheese
key: Burger
result: FoodBurgerCheese
rules:
- !type:SequenceLength
range:
min: 3
max: 4
- !type:IngredientsWithTags # 1 meat cutlet
tags:
- Cooked
- Cutlet
- Meat
count:
min: 1
max: 2
- !type:IngredientsWithTags # 1 cheese
tags:
- Cheese
count:
min: 1
max: 2
- !type:LastElementHasTags # last bun
tags:
- Bun
- type: metamorphRecipe
id: FoodBurgerChicken
key: Burger
result: FoodBurgerChicken
rules:
- !type:SequenceLength
range:
min: 2
max: 3
- !type:IngredientsWithTags # 1 chicken meat
tags:
- Cooked
- Cutlet
- Meat
- Chicken
count:
min: 1
max: 2
- !type:FoodHasReagent # 5 +- 2 mayo
reagent: Mayo
count:
min: 3
max: 7
- !type:LastElementHasTags # last bun
tags:
- Bun
- type: metamorphRecipe
id: FoodBurgerCrab
key: Burger
result: FoodBurgerCrab
rules:
- !type:SequenceLength
range:
min: 3
max: 4
- !type:IngredientsWithTags # 2 crab meat
tags:
- Cooked
- Meat
- Crab
count:
min: 2
max: 3
- !type:LastElementHasTags # last bun
tags:
- Bun
- type: metamorphRecipe
id: FoodBurgerDuck
key: Burger
result: FoodBurgerDuck
rules:
- !type:SequenceLength
range:
min: 3
max: 4
- !type:IngredientsWithTags # 1 duck meat
tags:
- Cooked
- Cutlet
- Meat
- Duck
count:
min: 1
max: 2
- !type:IngredientsWithTags # 1 cheese
tags:
- Cheese
count:
min: 1
max: 2
- !type:LastElementHasTags # last bun
tags:
- Bun
- type: metamorphRecipe
id: FoodBurgerBrain
key: Burger
result: FoodBurgerBrain
rules:
- !type:SequenceLength
range:
min: 2
max: 3
- !type:IngredientsWithTags # 1 brain
tags:
- Brain
count:
min: 1
max: 2
- !type:LastElementHasTags # last bun
tags:
- Bun

View File

@@ -222,6 +222,9 @@
- type: Tag - type: Tag
id: BoxHug id: BoxHug
- type: Tag
id: Brain
- type: Tag - type: Tag
id: BrassInstrument id: BrassInstrument
@@ -243,12 +246,18 @@
- type: Tag - type: Tag
id: Bucket id: Bucket
- type: Tag
id: Burger
- type: Tag - type: Tag
id: BulletFoam id: BulletFoam
- type: Tag - type: Tag
id: Burnt id: Burnt
- type: Tag
id: Bun
- type: Tag - type: Tag
id: BypassDropChecks id: BypassDropChecks
@@ -367,6 +376,9 @@
- type: Tag - type: Tag
id: Chicken id: Chicken
- type: Tag
id: Cheese
# Allowed to control someone wearing a Chef's hat if inside their hat. # Allowed to control someone wearing a Chef's hat if inside their hat.
- type: Tag - type: Tag
id: ChefPilot id: ChefPilot
@@ -443,6 +455,9 @@
- type: Tag - type: Tag
id: Cow id: Cow
- type: Tag
id: Crab
- type: Tag - type: Tag
id: Crayon id: Crayon
@@ -1261,6 +1276,9 @@
- type: Tag - type: Tag
id: TabletopBoard id: TabletopBoard
- type: Tag
id: Taco
- type: Tag - type: Tag
id: TabletopPiece id: TabletopPiece

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 471 B

View File

@@ -1,7 +1,7 @@
{ {
"version": 1, "version": 1,
"license": "CC-BY-SA-3.0", "license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation and modified by Swept and potato1234x at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, ian.png created by EmoGarbage, mothroach.png created by TurboTracker", "copyright": "Taken from tgstation and modified by Swept and potato1234x at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, ian.png created by EmoGarbage, mothroach.png created by TurboTracker, screwed by TheShuEd",
"size": { "size": {
"x": 32, "x": 32,
"y": 32 "y": 32
@@ -28,12 +28,6 @@
{ {
"name": "bun" "name": "bun"
}, },
{
"name": "bun_top"
},
{
"name": "bun_bottom"
},
{ {
"name": "c" "name": "c"
}, },
@@ -161,6 +155,9 @@
] ]
] ]
}, },
{
"name": "screwed"
},
{ {
"name": "spell" "name": "spell"
}, },

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

View File

@@ -0,0 +1,20 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Created by TheShuEd. Bun taken from tgstation and modified by Swept and potato1234x at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, and edited by TheShuEd",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "bun_top"
},
{
"name": "bun_bottom"
},
{
"name": "cheese"
}
]
}

View File

@@ -42,6 +42,9 @@
}, },
{ {
"name": "skewer-snake" "name": "skewer-snake"
},
{
"name": "skewer-watermelon"
} }
] ]
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

View File

@@ -1,17 +1,29 @@
{ {
"version": 1, "version": 1,
"license": "CC-BY-SA-3.0", "license": "CC-BY-SA-3.0",
"copyright": "Original sprite by Phunny, redrawn by TheShuEd", "copyright": "Added by Phunny",
"size": { "size": {
"x": 32, "x": 32,
"y": 32 "y": 32
}, },
"states": [ "states": [
{ {
"name": "tacoshell_back" "name": "beeftaco"
}, },
{ {
"name": "tacoshell_forward" "name": "beeftacosupreme"
},
{
"name": "chickentaco"
},
{
"name": "chickentacosupreme"
},
{
"name": "fishtaco"
},
{
"name": "rattaco"
} }
] ]
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

View File

@@ -0,0 +1,23 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Created by TheShuEd, rat Taken from https://github.com/tgstation/tgstation/commit/e15c63d100db65eaaa5231133b8a2662ff439131#diff-8dd94e19fdb2ff341b57e31bce101298 and edited by TheShuEd",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "tacoshell_back"
},
{
"name": "tacoshell_forward"
},
{
"name": "cheese"
},
{
"name": "rat"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 426 B

After

Width:  |  Height:  |  Size: 381 B