continue;
var stackProto = protoManager.Index<StackPrototype>(materialStep.MaterialPrototypeId);
- var spawnProto = protoManager.Index<EntityPrototype>(stackProto.Spawn);
+ var spawnProto = protoManager.Index(stackProto.Spawn);
if (!spawnProto.Components.ContainsKey(materialName) ||
!spawnProto.Components.TryGetValue(compositionName, out var compositionReg))
return;
}
- // Machine parts cannot currently satisfy stack/component/tag restrictions. Similarly stacks cannot satisfy
- // component/tag restrictions. However, there is no reason this cannot be supported in the future. If this
- // changes, then RegenerateProgress() also needs to be updated.
- //
+ // If this changes in the future, then RegenerateProgress() also needs to be updated.
// Note that one entity is ALLOWED to satisfy more than one kind of component or tag requirements. This is
// necessary in order to avoid weird entity-ordering shenanigans in RegenerateProgress().
+ var stack = CompOrNull<StackComponent>(args.Used);
+ var machinePart = CompOrNull<MachinePartComponent>(args.Used);
+ if (stack != null && machinePart != null)
+ {
+ if (TryInsertPartStack(uid, args.Used, component, machinePart, stack))
+ args.Handled = true;
+ return;
+ }
// Handle parts
- if (TryComp<MachinePartComponent>(args.Used, out var machinePart))
+ if (machinePart != null)
{
if (TryInsertPart(uid, args.Used, component, machinePart))
args.Handled = true;
return;
}
- // Handle stacks
- if (TryComp<StackComponent>(args.Used, out var stack))
+ if (stack != null)
{
if (TryInsertStack(uid, args.Used, component, stack))
args.Handled = true;
return true;
}
+ /// <returns>Whether or not the function had any effect. Does not indicate success.</returns>
+ private bool TryInsertPartStack(EntityUid uid, EntityUid used, MachineFrameComponent component, MachinePartComponent machinePart, StackComponent stack)
+ {
+ if (!component.Requirements.ContainsKey(machinePart.PartType))
+ return false;
+
+ var progress = component.Progress[machinePart.PartType];
+ var requirement = component.Requirements[machinePart.PartType];
+
+ var needed = requirement - progress;
+ if (needed <= 0)
+ return false;
+
+ var count = stack.Count;
+ if (count < needed)
+ {
+ if (!_container.Insert(used, component.PartContainer))
+ return true;
+
+ component.Progress[machinePart.PartType] += count;
+ return true;
+ }
+
+ var splitStack = _stack.Split(used, needed, Transform(uid).Coordinates, stack);
+
+ if (splitStack == null)
+ return false;
+
+ if (!_container.Insert(splitStack.Value, component.PartContainer))
+ return true;
+
+ component.Progress[machinePart.PartType] += needed;
+ if (IsComplete(component))
+ _popupSystem.PopupEntity(Loc.GetString("machine-frame-component-on-complete"), uid);
+
+ return true;
+ }
+
/// <returns>Whether or not the function had any effect. Does not indicate success.</returns>
private bool TryInsertStack(EntityUid uid, EntityUid used, MachineFrameComponent component, StackComponent stack)
{
{
if (TryComp<MachinePartComponent>(part, out var machinePart))
{
- DebugTools.Assert(!HasComp<StackComponent>(part));
-
// Check this is part of the requirements...
if (!component.Requirements.ContainsKey(machinePart.PartType))
continue;
component.Progress[machinePart.PartType] = 1;
else
component.Progress[machinePart.PartType]++;
-
continue;
}
// Get a prototype ID to spawn the new entity. Null is also valid, although it should rarely be picked...
var prototype = _prototypeManager.TryIndex<StackPrototype>(stack.StackTypeId, out var stackType)
- ? stackType.Spawn
+ ? stackType.Spawn.ToString()
: Prototype(uid)?.ID;
// Set the output parameter in the event instance to the newly split stack.
foreach (var (stackId, amount) in comp.MaterialIdRequirements)
{
var stackProto = _prototype.Index<StackPrototype>(stackId);
+ var defaultProto = _prototype.Index(stackProto.Spawn);
- if (_prototype.TryIndex(stackProto.Spawn, out var defaultProto) &&
- defaultProto.TryGetComponent<PhysicalCompositionComponent>(out var physComp))
+ if (defaultProto.TryGetComponent<PhysicalCompositionComponent>(out var physComp))
{
foreach (var (mat, matAmount) in physComp.MaterialComposition)
{
/// include which stack we should spawn by default.
/// </summary>
[DataField]
- public ProtoId<EntityPrototype>? StackEntity;
+ public EntProtoId? StackEntity;
[DataField]
public string Name = string.Empty;
namespace Content.Shared.Stacks;
-[Prototype("stack")]
+[Prototype]
public sealed partial class StackPrototype : IPrototype
{
[ViewVariables]
/// Human-readable name for this stack type e.g. "Steel"
/// </summary>
/// <remarks>This is a localization string ID.</remarks>
- [DataField("name")]
+ [DataField]
public string Name { get; private set; } = string.Empty;
/// <summary>
/// An icon that will be used to represent this stack type.
/// </summary>
- [DataField("icon")]
+ [DataField]
public SpriteSpecifier? Icon { get; private set; }
/// <summary>
/// The entity id that will be spawned by default from this stack.
/// </summary>
- [DataField("spawn", required: true, customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
- public string Spawn { get; private set; } = string.Empty;
+ [DataField(required: true)]
+ public EntProtoId Spawn { get; private set; } = string.Empty;
/// <summary>
/// The maximum amount of things that can be in a stack.
/// Can be overriden on <see cref="StackComponent"/>
/// if null, simply has unlimited max count.
/// </summary>
- [DataField("maxCount")]
+ [DataField]
public int? MaxCount { get; private set; }
-
- /// <summary>
- /// The size of an individual unit of this stack.
- /// </summary>
- [DataField("itemSize")]
- public int? ItemSize;
}
-
sprite: Objects/Misc/stock_parts.rsi
- type: Item
size: Tiny
+ - type: Stack
+ count: 1
- type: entity
id: CapacitorStockPart
- type: Tag
tags:
- CapacitorStockPart
+ - type: Stack
+ stackType: Capacitor
- type: entity
id: MicroManipulatorStockPart
- type: MachinePart
part: Manipulator
rating: 1
+ - type: Stack
+ stackType: MicroManipulator
- type: entity
id: MatterBinStockPart
- type: MachinePart
part: MatterBin
rating: 1
+ - type: Stack
+ stackType: MatterBin
state: extraction_pack
spawn: Fulton1
maxCount: 10
- itemSize: 2
# Entities
- type: entity
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: glass }
spawn: SheetGlass1
maxCount: 30
- itemSize: 1
- type: stack
id: ReinforcedGlass
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: rglass }
spawn: SheetRGlass1
maxCount: 30
- itemSize: 1
- type: stack
id: PlasmaGlass
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: pglass }
spawn: SheetPGlass1
maxCount: 30
- itemSize: 1
- type: stack
id: ReinforcedPlasmaGlass
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: rpglass }
spawn: SheetRPGlass1
maxCount: 30
- itemSize: 1
- type: stack
id: UraniumGlass
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: uglass }
spawn: SheetUGlass1
maxCount: 30
- itemSize: 1
- type: stack
id: ReinforcedUraniumGlass
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: ruglass }
spawn: SheetRUGlass1
maxCount: 30
- itemSize: 1
- type: stack
id: ClockworkGlass
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: cglass }
spawn: SheetClockworkGlass1
maxCount: 30
- itemSize: 1
icon: { sprite: /Textures/Objects/Materials/Sheets/metal.rsi, state: steel }
spawn: SheetSteel1
maxCount: 30
- itemSize: 1
- type: stack
id: Plasteel
icon: { sprite: /Textures/Objects/Materials/Sheets/metal.rsi, state: plasteel }
spawn: SheetPlasteel1
maxCount: 30
- itemSize: 1
- type: stack
id: Brass
icon: { sprite: /Textures/Objects/Materials/Sheets/metal.rsi, state: brass }
spawn: SheetBrass1
maxCount: 30
- itemSize: 1
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: paper }
spawn: SheetPaper1
maxCount: 30
- itemSize: 1
- type: stack
id: Plasma
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: plasma }
spawn: SheetPlasma1
maxCount: 30
- itemSize: 1
- type: stack
id: Plastic
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: plastic }
spawn: SheetPlastic1
maxCount: 30
- itemSize: 1
- type: stack
id: Uranium
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: uranium }
spawn: SheetUranium1
maxCount: 30
- itemSize: 1
name: telecrystal
icon: Objects/Specific/Syndicate/telecrystal.rsi
spawn: Telecrystal1
- itemSize: 1
icon: { sprite: "/Textures/Objects/Materials/ingots.rsi", state: gold }
spawn: IngotGold1
maxCount: 30
- itemSize: 1
- type: stack
id: Silver
icon: { sprite: "/Textures/Objects/Materials/ingots.rsi", state: silver }
spawn: IngotSilver1
maxCount: 30
- itemSize: 1
icon: { sprite: /Textures/Objects/Misc/monkeycube.rsi, state: cube }
spawn: MaterialBiomass1
maxCount: 100
- itemSize: 1
- type: stack
id: WoodPlank
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: wood }
spawn: MaterialWoodPlank1
maxCount: 30
- itemSize: 1
- type: stack
id: Cardboard
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cardboard }
spawn: MaterialCardboard1
maxCount: 30
- itemSize: 1
- type: stack
id: Cloth
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cloth }
spawn: MaterialCloth1
maxCount: 30
- itemSize: 1
- type: stack
id: Durathread
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: durathread }
spawn: MaterialDurathread1
maxCount: 30
- itemSize: 1
- type: stack
id: Diamond
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: diamond }
spawn: MaterialDiamond1
maxCount: 30
- itemSize: 2
- type: stack
id: Cotton
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cotton }
spawn: MaterialCotton1
maxCount: 30
- itemSize: 1
- type: stack
id: Pyrotton
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: pyrotton }
spawn: MaterialPyrotton1
maxCount: 30
- itemSize: 1
- type: stack
id: Bananium
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: bananium }
spawn: MaterialBananium1
maxCount: 10
- itemSize: 2
- type: stack
id: MeatSheets
icon: { sprite: /Textures/Objects/Materials/Sheets/meaterial.rsi, state: meat }
spawn: MaterialSheetMeat1
maxCount: 30
- itemSize: 1
- type: stack
id: WebSilk
icon: { sprite: /Textures/Objects/Materials/silk.rsi, state: icon }
spawn: MaterialWebSilk1
maxCount: 50
- itemSize: 1
- type: stack
id: Bones
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: bones}
spawn: MaterialBones1
maxCount: 30
- itemSize: 1
- type: stack
id: Gunpowder
icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile }
spawn: MaterialGunpowder
maxCount: 60
- itemSize: 1
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: gold }
spawn: GoldOre1
maxCount: 30
- itemSize: 2
- type: stack
id: SteelOre
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: iron }
spawn: SteelOre1
maxCount: 30
- itemSize: 2
- type: stack
id: PlasmaOre
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: plasma }
spawn: PlasmaOre1
maxCount: 30
- itemSize: 2
- type: stack
id: SilverOre
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: silver }
spawn: SilverOre1
maxCount: 30
- itemSize: 2
- type: stack
id: SpaceQuartz
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: spacequartz }
spawn: SpaceQuartz1
maxCount: 30
- itemSize: 2
- type: stack
id: UraniumOre
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: uranium }
spawn: UraniumOre1
maxCount: 30
- itemSize: 2
- type: stack
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: bananium }
spawn: BananiumOre1
maxCount: 30
- itemSize: 2
- type: stack
id: Coal
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: coal }
spawn: Coal1
maxCount: 30
- itemSize: 2
- type: stack
id: SaltOre
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: salt }
spawn: Salt1
maxCount: 30
- itemSize: 2
icon: { sprite: /Textures/Objects/Materials/parts.rsi, state: rods }
spawn: PartRodMetal1
maxCount: 30
- itemSize: 1
name: pancake
spawn: FoodBakedPancake
maxCount: 3
- itemSize: 1
# Food Containers
icon: { sprite: Objects/Consumable/Food/Baked/pizza.rsi, state: box }
spawn: FoodBoxPizza
maxCount: 30
- itemSize: 10
# Smokeables
icon: { sprite: /Textures/Objects/Consumable/Smokeables/Cigarettes/paper.rsi, state: cigpaper }
spawn: PaperRolling
maxCount: 5
- itemSize: 1
- type: stack
id: CigaretteFilter
icon: { sprite: /Textures/Objects/Consumable/Smokeables/Cigarettes/paper.rsi, state: cigfilter }
spawn: CigaretteFilter
maxCount: 5
- itemSize: 2
- type: stack
id: GroundTobacco
icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile }
spawn: GroundTobacco
maxCount: 5
- itemSize: 1
- type: stack
id: GroundCannabis
icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile }
spawn: GroundCannabis
maxCount:
- itemSize: 1
- type: stack
id: GroundCannabisRainbow
icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: powderpile_rainbow }
spawn: GroundCannabisRainbow
maxCount:
- itemSize: 1
- type: stack
id: LeavesTobaccoDried
icon: { sprite: /Textures/Objects/Specific/Hydroponics/tobacco.rsi, state: dried }
spawn: LeavesTobaccoDried
maxCount: 5
- itemSize: 5
- type: stack
id: LeavesCannabisDried
icon: { sprite: /Textures/Objects/Specific/Hydroponics/tobacco.rsi, state: dried }
spawn: LeavesCannabisDried
maxCount: 5
- itemSize: 5
- type: stack
id: LeavesCannabisRainbowDried
name: dried rainbow cannabis leaves
icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: dried }
spawn: LeavesCannabisRainbowDried
- maxCount: 5
- itemSize: 5
name: inflatable wall
spawn: InflatableWallStack1
maxCount: 10
- itemSize: 1
- type: stack
id: InflatableDoor
name: inflatable door
spawn: InflatableDoorStack1
maxCount: 4
- itemSize: 1
name: steel tile
spawn: FloorTileItemSteel
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileMetalDiamond
name: steel tile
spawn: FloorTileItemMetalDiamond
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileWood
name: wood floor
spawn: FloorTileItemWood
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileWhite
name: white tile
spawn: FloorTileItemWhite
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileDark
name: dark tile
spawn: FloorTileItemDark
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileTechmaint
name: techmaint floor
spawn: FloorTileItemTechmaint
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileFreezer
name: freezer tile
spawn: FloorTileItemFreezer
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileShowroom
name: showroom tile
spawn: FloorTileItemShowroom
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileGCircuit
name: green-circuit floor
spawn: FloorTileItemGCircuit
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileGold
name: gold floor
spawn: FloorTileItemGold
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileReinforced
name: reinforced tile
spawn: FloorTileItemReinforced
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileMono
name: mono tile
spawn: FloorTileItemMono
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileBrassFilled
name: filled brass plate
spawn: FloorTileItemBrassFilled
maxCount: 30
- itemSize: 5
-
+
- type: stack
id: FloorTileBrassReebe
name: smooth brass plate
spawn: FloorTileItemBrassReebe
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileLino
name: linoleum floor
spawn: FloorTileItemLino
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileHydro
name: hydro tile
spawn: FloorTileItemHydro
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileLime
name: lime tile
spawn: FloorTileItemLime
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileDirty
name: dirty tile
spawn: FloorTileItemDirty
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackShuttleWhite
name: white shuttle tile
spawn: FloorTileItemShuttleWhite
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackShuttleBlue
name: blue shuttle tile
spawn: FloorTileItemShuttleBlue
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackShuttleOrange
name: orange shuttle tile
spawn: FloorTileItemShuttleOrange
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackShuttlePurple
name: purple shuttle tile
spawn: FloorTileItemShuttlePurple
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackShuttleRed
name: red shuttle tile
spawn: FloorTileItemShuttleRed
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackShuttleGrey
name: grey shuttle tile
spawn: FloorTileItemShuttleGrey
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackShuttleBlack
name: black shuttle tile
spawn: FloorTileItemShuttleBlack
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackEighties
name: eighties floor tile
spawn: FloorTileItemEighties
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackArcadeBlue
name: blue arcade tile
spawn: FloorTileItemArcadeBlue
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackArcadeBlue2
name: blue arcade tile
spawn: FloorTileItemArcadeBlue2
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackArcadeRed
name: red arcade tile
spawn: FloorTileItemArcadeRed
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetRed
name: red carpet tile
spawn: FloorCarpetItemRed
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetBlack
name: block carpet tile
spawn: FloorCarpetItemBlack
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetBlue
name: blue carpet tile
spawn: FloorCarpetItemBlue
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetGreen
name: green carpet tile
spawn: FloorCarpetItemGreen
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetOrange
name: orange carpet tile
spawn: FloorCarpetItemOrange
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetSkyBlue
name: skyblue carpet tile
spawn: FloorCarpetItemSkyBlue
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetPurple
name: purple carpet tile
spawn: FloorCarpetItemPurple
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetPink
name: pink carpet tile
spawn: FloorCarpetItemPink
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetCyan
name: cyan carpet tile
spawn: FloorCarpetItemCyan
maxCount: 30
- itemSize: 5
- type: stack
id: FloorCarpetWhite
name: white carpet tile
spawn: FloorCarpetItemWhite
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackCarpetClown
name: clown carpet tile
spawn: FloorTileItemCarpetClown
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackCarpetOffice
name: office carpet tile
spawn: FloorTileItemCarpetOffice
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackBoxing
name: boxing ring tile
spawn: FloorTileItemBoxing
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileStackGym
name: gym floor tile
spawn: FloorTileItemGym
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileElevatorShaft
name: elevator shaft tile
spawn: FloorTileItemElevatorShaft
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileRockVault
name: rock vault tile
spawn: FloorTileItemRockVault
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileBlue
name: blue floor tile
spawn: FloorTileItemBlue
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileMining
name: mining floor tile
spawn: FloorTileItemMining
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileMiningDark
name: dark mining floor tile
spawn: FloorTileItemMiningDark
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileMiningLight
name: light mining floor tile
spawn: FloorTileItemMiningLight
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileBar
name: item bar floor tile
spawn: FloorTileItemBar
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileClown
name: clown floor tile
spawn: FloorTileItemClown
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileMime
name: mime floor tile
spawn: FloorTileItemMime
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileKitchen
name: kitchen floor tile
spawn: FloorTileItemKitchen
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileLaundry
name: laundry floor tile
spawn: FloorTileItemLaundry
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileConcrete
name: concrete tile
spawn: FloorTileItemGrayConcrete
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileGrayConcrete
name: gray concrete tile
spawn: FloorTileItemLaundry
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileOldConcrete
name: old concrete tile
spawn: FloorTileItemOldConcrete
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileSilver
name: silver floor tile
spawn: FloorTileItemSilver
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileBCircuit
name: bcircuit floor tile
spawn: FloorTileItemBCircuit
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileGrass
name: grass floor tile
spawn: FloorTileItemGrass
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileGrassJungle
name: grass jungle floor tile
spawn: FloorTileItemGrassJungle
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileSnow
name: snow floor tile
spawn: FloorTileItemSnow
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileWoodPattern
name: wood pattern floor
spawn: FloorTileItemWoodPattern
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileFlesh
name: flesh floor
spawn: FloorTileItemFlesh
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileSteelMaint
name: steel maint floor
spawn: FloorTileItemSteelMaint
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileGratingMaint
name: grating maint floor
spawn: FloorTileItemGratingMaint
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileWeb
name: web tile
spawn: FloorTileItemWeb
maxCount: 30
- itemSize: 5
# Faux science tiles
- type: stack
name: astro-grass floor
spawn: FloorTileItemAstroGrass
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileMowedAstroGrass
name: mowed astro-grass floor
spawn: FloorTileItemMowedAstroGrass
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileJungleAstroGrass
name: jungle astro-grass floor
spawn: FloorTileItemJungleAstroGrass
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileAstroIce
name: astro-ice floor
spawn: FloorTileItemAstroIce
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileAstroSnow
name: astro-snow floor
spawn: FloorTileItemAstroSnow
maxCount: 30
- itemSize: 5
- type: stack
id: FloorTileWoodLarge
name: large wood floor
spawn: FloorTileItemWoodLarge
- maxCount: 30
\ No newline at end of file
+ maxCount: 30
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: ointment }
spawn: Ointment
maxCount: 10
- itemSize: 1
- type: stack
id: AloeCream
icon: { sprite: "/Textures/Objects/Specific/Hydroponics/aloe.rsi", state: cream }
spawn: AloeCream
maxCount: 10
- itemSize: 1
- type: stack
id: Gauze
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: gauze }
spawn: Gauze
maxCount: 10
- itemSize: 1
- type: stack
id: Brutepack
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: gauze }
spawn: Brutepack
maxCount: 10
- itemSize: 1
- type: stack
id: Bloodpack
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: bloodpack }
spawn: Bloodpack
maxCount: 10
- itemSize: 1
- type: stack
id: MedicatedSuture
icon: {sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: medicated-suture }
spawn: MedicatedSuture
maxCount: 10
- itemSize: 1
- type: stack
id: RegenerativeMesh
icon: {sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: regenerative-mesh}
spawn: RegenerativeMesh
maxCount: 10
- itemSize: 1
-
icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coil-30 }
spawn: CableApcStack1
maxCount: 30
- itemSize: 1
- type: stack
id: CableMV
icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coilmv-30 }
spawn: CableMVStack1
maxCount: 30
- itemSize: 1
- type: stack
id: CableHV
icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coilhv-30 }
spawn: CableHVStack1
maxCount: 30
- itemSize: 1
name: artifact fragment
spawn: ArtifactFragment1
maxCount: 30
- itemSize: 5
\ No newline at end of file
+
+- type: stack
+ id: Capacitor
+ name: capacitor
+ spawn: CapacitorStockPart
+ maxCount: 10
+
+- type: stack
+ id: MicroManipulator
+ name: micro manipulator
+ spawn: MicroManipulatorStockPart
+ maxCount: 10
+
+- type: stack
+ id: MatterBin
+ name: matter bin
+ spawn: MatterBinStockPart
+ maxCount: 10