Revert "Storage TEST MERGE" (#21258)

This commit is contained in:
metalgearsloth
2023-10-26 18:46:22 +11:00
committed by GitHub
parent a850b1f568
commit c08349a947
235 changed files with 1019 additions and 1072 deletions

View File

@@ -1,15 +1,16 @@
using System.Numerics; using System.Numerics;
using Content.Client.Message; using Robust.Client.GameObjects;
using Robust.Client.Graphics; using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Content.Client.Stylesheets; using Content.Client.Stylesheets;
using Content.Client.UserInterface.Controls; using Content.Client.UserInterface.Controls;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Item; using Content.Shared.Item;
using Content.Shared.Stacks; using Content.Shared.Stacks;
using Content.Shared.Storage; using Content.Shared.Storage;
using Content.Shared.Storage.EntitySystems;
using Robust.Client.UserInterface; using Robust.Client.UserInterface;
using Robust.Shared.Containers;
using static Robust.Client.UserInterface.Controls.BoxContainer; using static Robust.Client.UserInterface.Controls.BoxContainer;
using Direction = Robust.Shared.Maths.Direction; using Direction = Robust.Shared.Maths.Direction;
@@ -22,9 +23,7 @@ namespace Content.Client.Storage.UI
{ {
private readonly IEntityManager _entityManager; private readonly IEntityManager _entityManager;
private readonly SharedStorageSystem _storage; private readonly Label _information;
private readonly RichTextLabel _information;
public readonly ContainerButton StorageContainerButton; public readonly ContainerButton StorageContainerButton;
public readonly ListContainer EntityList; public readonly ListContainer EntityList;
private readonly StyleBoxFlat _hoveredBox = new() { BackgroundColor = Color.Black.WithAlpha(0.35f) }; private readonly StyleBoxFlat _hoveredBox = new() { BackgroundColor = Color.Black.WithAlpha(0.35f) };
@@ -33,7 +32,6 @@ namespace Content.Client.Storage.UI
public StorageWindow(IEntityManager entityManager) public StorageWindow(IEntityManager entityManager)
{ {
_entityManager = entityManager; _entityManager = entityManager;
_storage = _entityManager.System<SharedStorageSystem>();
SetSize = new Vector2(240, 320); SetSize = new Vector2(240, 320);
Title = Loc.GetString("comp-storage-window-title"); Title = Loc.GetString("comp-storage-window-title");
RectClipContent = true; RectClipContent = true;
@@ -62,14 +60,11 @@ namespace Content.Client.Storage.UI
StorageContainerButton.AddChild(vBox); StorageContainerButton.AddChild(vBox);
_information = new RichTextLabel _information = new Label
{ {
Text = Loc.GetString("comp-storage-window-volume", ("itemCount", 0), ("usedVolume", 0), ("maxVolume", 0)),
VerticalAlignment = VAlignment.Center VerticalAlignment = VAlignment.Center
}; };
_information.SetMessage(Loc.GetString("comp-storage-window-volume",
("itemCount", 0),
("maxCount", 0),
("size", SharedItemSystem.GetItemSizeLocale(ItemSize.Normal))));
vBox.AddChild(_information); vBox.AddChild(_information);
@@ -106,23 +101,15 @@ namespace Content.Client.Storage.UI
EntityList.PopulateList(list); EntityList.PopulateList(list);
SetStorageInformation((entity, component)); // Sets information about entire storage container current capacity
} if (component.StorageCapacityMax != 0)
private void SetStorageInformation(Entity<StorageComponent> uid)
{
if (uid.Comp.MaxSlots != uid.Comp.Container.ContainedEntities.Count
&& _storage.GetCumulativeItemSizes(uid, uid.Comp) == _storage.GetMaxTotalWeight((uid, uid.Comp)))
{ {
_information.SetMarkup(Loc.GetString("comp-storage-window-volume-full", _information.Text = Loc.GetString("comp-storage-window-volume", ("itemCount", storedCount),
("size", SharedItemSystem.GetItemSizeLocale(_storage.GetMaxItemSize((uid, uid.Comp)))))); ("usedVolume", component.StorageUsed), ("maxVolume", component.StorageCapacityMax));
} }
else else
{ {
_information.SetMarkup(Loc.GetString("comp-storage-window-volume", _information.Text = Loc.GetString("comp-storage-window-volume-unlimited", ("itemCount", storedCount));
("itemCount", uid.Comp.Container.ContainedEntities.Count),
("maxCount", uid.Comp.MaxSlots),
("size", SharedItemSystem.GetItemSizeLocale(_storage.GetMaxItemSize((uid, uid.Comp))))));
} }
} }
@@ -135,9 +122,10 @@ namespace Content.Client.Storage.UI
|| !_entityManager.EntityExists(entity)) || !_entityManager.EntityExists(entity))
return; return;
_entityManager.TryGetComponent(entity, out StackComponent? stack);
_entityManager.TryGetComponent(entity, out ItemComponent? item); _entityManager.TryGetComponent(entity, out ItemComponent? item);
_entityManager.TryGetComponent(entity, out StackComponent? stack);
var count = stack?.Count ?? 1; var count = stack?.Count ?? 1;
var size = item?.Size;
var spriteView = new SpriteView var spriteView = new SpriteView
{ {
@@ -159,14 +147,12 @@ namespace Content.Client.Storage.UI
HorizontalExpand = true, HorizontalExpand = true,
ClipText = true, ClipText = true,
Text = _entityManager.GetComponent<MetaDataComponent>(Identity.Entity(entity, _entityManager)).EntityName + Text = _entityManager.GetComponent<MetaDataComponent>(Identity.Entity(entity, _entityManager)).EntityName +
(count > 1 ? $" x {count}" : string.Empty) (count > 1 ? $" x {count}" : string.Empty),
}, },
new Label new Label
{ {
Align = Label.AlignMode.Right, Align = Label.AlignMode.Right,
Text = item?.Size != null Text = size.ToString() ?? Loc.GetString("comp-storage-no-item-size"),
? SharedItemSystem.GetItemSizeLocale(item.Size)
: Loc.GetString("comp-storage-no-item-size")
} }
} }
}); });

View File

@@ -26,7 +26,7 @@ namespace Content.IntegrationTests.Tests
- type: Clothing - type: Clothing
slots: [innerclothing] slots: [innerclothing]
- type: Item - type: Item
size: Tiny size: 5
- type: entity - type: entity
name: IDCardDummy name: IDCardDummy
@@ -36,7 +36,7 @@ namespace Content.IntegrationTests.Tests
slots: slots:
- idcard - idcard
- type: Item - type: Item
size: Tiny size: 5
- type: IdCard - type: IdCard
- type: entity - type: entity
@@ -44,14 +44,14 @@ namespace Content.IntegrationTests.Tests
id: FlashlightDummy id: FlashlightDummy
components: components:
- type: Item - type: Item
size: Tiny size: 5
- type: entity - type: entity
name: ToolboxDummy name: ToolboxDummy
id: ToolboxDummy id: ToolboxDummy
components: components:
- type: Item - type: Item
size: Huge size: 9999
"; ";
[Test] [Test]
public async Task Test() public async Task Test()

View File

@@ -0,0 +1,39 @@
using Content.Shared.Item;
using Content.Shared.Stacks;
using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests;
[TestFixture]
public sealed class StackTest
{
[Test]
public async Task StackCorrectItemSize()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var protoManager = server.ResolveDependency<IPrototypeManager>();
var compFact = server.ResolveDependency<IComponentFactory>();
Assert.Multiple(() =>
{
foreach (var entity in PoolManager.GetPrototypesWithComponent<StackComponent>(server))
{
if (!entity.TryGetComponent<StackComponent>(out var stackComponent, compFact) ||
!entity.TryGetComponent<ItemComponent>(out var itemComponent, compFact))
continue;
if (!protoManager.TryIndex<StackPrototype>(stackComponent.StackTypeId, out var stackProto) ||
stackProto.ItemSize == null)
continue;
var expectedSize = stackProto.ItemSize * stackComponent.Count;
Assert.That(itemComponent.Size, Is.EqualTo(expectedSize), $"Prototype id: {entity.ID} has an item size of {itemComponent.Size} but expected size of {expectedSize}.");
}
});
await pair.CleanReturnAsync();
}
}

View File

@@ -3,12 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Content.Server.Storage.Components; using Content.Server.Storage.Components;
using Content.Shared.Item; using Content.Shared.Item;
using Content.Shared.Prototypes;
using Content.Shared.Storage; using Content.Shared.Storage;
using Content.Shared.Storage.Components; using Content.Shared.Storage.Components;
using Content.Shared.Storage.EntitySystems;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.UnitTesting;
namespace Content.IntegrationTests.Tests namespace Content.IntegrationTests.Tests
{ {
@@ -33,11 +32,9 @@ namespace Content.IntegrationTests.Tests
{ {
if (!proto.TryGetComponent<StorageComponent>("Storage", out var storage) || if (!proto.TryGetComponent<StorageComponent>("Storage", out var storage) ||
storage.Whitelist != null || storage.Whitelist != null ||
storage.MaxItemSize == null || !proto.TryGetComponent<ItemComponent>("Item", out var item)) continue;
!proto.TryGetComponent<ItemComponent>("Item", out var item))
continue;
Assert.That(storage.MaxItemSize.Value, Is.LessThan(item.Size), $"Found storage arbitrage on {proto.ID}"); Assert.That(storage.StorageCapacityMax, Is.LessThanOrEqualTo(item.Size), $"Found storage arbitrage on {proto.ID}");
} }
}); });
await pair.CleanReturnAsync(); await pair.CleanReturnAsync();
@@ -85,120 +82,69 @@ namespace Content.IntegrationTests.Tests
{ {
foreach (var proto in PoolManager.GetPrototypesWithComponent<StorageFillComponent>(server)) foreach (var proto in PoolManager.GetPrototypesWithComponent<StorageFillComponent>(server))
{ {
if (proto.HasComponent<EntityStorageComponent>(compFact)) int capacity;
continue; var isEntStorage = false;
if (!proto.TryGetComponent<StorageComponent>("Storage", out var storage)) if (proto.TryGetComponent<StorageComponent>("Storage", out var storage))
{
capacity = storage.StorageCapacityMax;
}
else if (proto.TryGetComponent<EntityStorageComponent>("EntityStorage", out var entStorage))
{
capacity = entStorage.Capacity;
isEntStorage = true;
}
else
{ {
Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!");
continue; continue;
} }
proto.TryGetComponent<ItemComponent>("Item", out var item);
var maxSize = storage.MaxItemSize ??
(item?.Size == null
? SharedStorageSystem.DefaultStorageMaxItemSize
: (ItemSize) Math.Max(0, (int) item.Size - 1));
var capacity = storage.MaxTotalWeight ??
storage.MaxSlots * SharedItemSystem.GetItemSizeWeight(storage.MaxItemSize ?? maxSize);
var fill = (StorageFillComponent) proto.Components[id].Component; var fill = (StorageFillComponent) proto.Components[id].Component;
var size = GetFillSize(fill, false, protoMan); var size = GetFillSize(fill, isEntStorage);
Assert.That(size, Is.LessThanOrEqualTo(capacity), $"{proto.ID} storage fill is too large."); Assert.That(size, Is.LessThanOrEqualTo(capacity), $"{proto.ID} storage fill is too large.");
Assert.That(GetFillSize(fill, true, protoMan), Is.LessThanOrEqualTo(storage.MaxSlots), $"{proto.ID} storage fill has too many items.");
foreach (var entry in fill.Contents)
{
if (entry.PrototypeId == null)
continue;
if (!protoMan.TryIndex<EntityPrototype>(entry.PrototypeId, out var fillItem))
continue;
if (!fillItem.TryGetComponent<ItemComponent>("Item", out var entryItem))
continue;
Assert.That(entryItem.Size, Is.LessThanOrEqualTo(maxSize),
$"Entity {proto.ID} has storage-fill item, {entry.PrototypeId}, that is too large");
}
} }
}); });
await pair.CleanReturnAsync(); int GetEntrySize(EntitySpawnEntry entry, bool isEntStorage)
}
[Test]
public async Task TestSufficientSpaceForEntityStorageFill()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
var compFact = server.ResolveDependency<IComponentFactory>();
var id = compFact.GetComponentName(typeof(StorageFillComponent));
Assert.Multiple(() =>
{ {
foreach (var proto in PoolManager.GetPrototypesWithComponent<StorageFillComponent>(server)) if (entry.PrototypeId == null)
return 0;
if (!protoMan.TryIndex<EntityPrototype>(entry.PrototypeId, out var proto))
{ {
if (proto.HasComponent<StorageComponent>(compFact)) Assert.Fail($"Unknown prototype: {entry.PrototypeId}");
continue; return 0;
if (!proto.TryGetComponent<EntityStorageComponent>("EntityStorage", out var entStorage))
{
Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!");
continue;
}
var fill = (StorageFillComponent) proto.Components[id].Component;
var size = GetFillSize(fill, true, protoMan);
Assert.That(size, Is.LessThanOrEqualTo(entStorage.Capacity),
$"{proto.ID} storage fill is too large.");
} }
});
if (isEntStorage)
return entry.Amount;
if (proto.TryGetComponent<ItemComponent>("Item", out var item))
return item.Size * entry.Amount;
Assert.Fail($"Prototype is missing item comp: {entry.PrototypeId}");
return 0;
}
int GetFillSize(StorageFillComponent fill, bool isEntStorage)
{
var totalSize = 0;
var groups = new Dictionary<string, int>();
foreach (var entry in fill.Contents)
{
var size = GetEntrySize(entry, isEntStorage);
if (entry.GroupId == null)
totalSize += size;
else
groups[entry.GroupId] = Math.Max(size, groups.GetValueOrDefault(entry.GroupId));
}
return totalSize + groups.Values.Sum();
}
await pair.CleanReturnAsync(); await pair.CleanReturnAsync();
} }
private int GetEntrySize(EntitySpawnEntry entry, bool getCount, IPrototypeManager protoMan)
{
if (entry.PrototypeId == null)
return 0;
if (!protoMan.TryIndex<EntityPrototype>(entry.PrototypeId, out var proto))
{
Assert.Fail($"Unknown prototype: {entry.PrototypeId}");
return 0;
}
if (getCount)
return entry.Amount;
if (proto.TryGetComponent<ItemComponent>("Item", out var item))
return SharedItemSystem.GetItemSizeWeight(item.Size) * entry.Amount;
Assert.Fail($"Prototype is missing item comp: {entry.PrototypeId}");
return 0;
}
private int GetFillSize(StorageFillComponent fill, bool getCount, IPrototypeManager protoMan)
{
var totalSize = 0;
var groups = new Dictionary<string, int>();
foreach (var entry in fill.Contents)
{
var size = GetEntrySize(entry, getCount, protoMan);
if (entry.GroupId == null)
totalSize += size;
else
groups[entry.GroupId] = Math.Max(size, groups.GetValueOrDefault(entry.GroupId));
}
return totalSize + groups.Values.Sum();
}
} }
} }

View File

@@ -180,13 +180,14 @@ namespace Content.Server.Chemistry.EntitySystems
var user = message.Session.AttachedEntity; var user = message.Session.AttachedEntity;
var maybeContainer = _itemSlotsSystem.GetItemOrNull(chemMaster, SharedChemMaster.OutputSlotName); var maybeContainer = _itemSlotsSystem.GetItemOrNull(chemMaster, SharedChemMaster.OutputSlotName);
if (maybeContainer is not { Valid: true } container if (maybeContainer is not { Valid: true } container
|| !TryComp(container, out StorageComponent? storage)) || !TryComp(container, out StorageComponent? storage)
|| storage.Container is null)
{ {
return; // output can't fit pills return; // output can't fit pills
} }
// Ensure the number is valid. // Ensure the number is valid.
if (message.Number == 0 || !_storageSystem.HasSpace((container, storage))) if (message.Number == 0 || message.Number > storage.StorageCapacityMax - storage.StorageUsed)
return; return;
// Ensure the amount is valid. // Ensure the amount is valid.
@@ -344,7 +345,7 @@ namespace Content.Server.Chemistry.EntitySystems
} }
} }
if (!TryComp(container, out StorageComponent? storage) || storage.Container == null) if (!TryComp(container, out StorageComponent? storage))
return null; return null;
var pills = storage.Container?.ContainedEntities.Select((Func<EntityUid, (string, FixedPoint2 quantity)>) (pill => var pills = storage.Container?.ContainedEntities.Select((Func<EntityUid, (string, FixedPoint2 quantity)>) (pill =>
@@ -357,7 +358,7 @@ namespace Content.Server.Chemistry.EntitySystems
if (pills == null) if (pills == null)
return null; return null;
return new ContainerInfo(name, storage.Container!.ContainedEntities.Count, storage.MaxSlots) return new ContainerInfo(name, storage.StorageUsed, storage.StorageCapacityMax)
{ {
Entities = pills Entities = pills
}; };

View File

@@ -1,4 +1,3 @@
using System.Linq;
using Content.Server.Body.Components; using Content.Server.Body.Components;
using Content.Server.Body.Systems; using Content.Server.Body.Systems;
using Content.Server.Inventory; using Content.Server.Inventory;
@@ -123,7 +122,7 @@ public sealed class FoodSystem : EntitySystem
return (false, false); return (false, false);
// Check for used storage on the food item // Check for used storage on the food item
if (TryComp<StorageComponent>(food, out var storageState) && storageState.Container.ContainedEntities.Any()) if (TryComp<StorageComponent>(food, out var storageState) && storageState.StorageUsed != 0)
{ {
_popup.PopupEntity(Loc.GetString("food-has-used-storage", ("food", food)), user, user); _popup.PopupEntity(Loc.GetString("food-has-used-storage", ("food", food)), user, user);
return (false, true); return (false, true);

View File

@@ -19,7 +19,7 @@ namespace Content.Server.Storage.Components
/// Max item size that can be fitted into secret stash. /// Max item size that can be fitted into secret stash.
/// </summary> /// </summary>
[DataField("maxItemSize")] [DataField("maxItemSize")]
public ItemSize MaxItemSize = ItemSize.Small; public int MaxItemSize = (int) ReferenceSizes.Pocket;
/// <summary> /// <summary>
/// IC secret stash name. For example "the toilet cistern". /// IC secret stash name. For example "the toilet cistern".

View File

@@ -1,6 +1,7 @@
using Content.Shared.Rounding; using Content.Shared.Rounding;
using Content.Shared.Storage; using Content.Shared.Storage;
using Content.Shared.Storage.Components; using Content.Shared.Storage.Components;
using Robust.Server.GameObjects;
using Robust.Shared.Containers; using Robust.Shared.Containers;
namespace Content.Server.Storage.EntitySystems; namespace Content.Server.Storage.EntitySystems;
@@ -12,12 +13,12 @@ public sealed class StorageFillVisualizerSystem : EntitySystem
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<StorageFillVisualizerComponent, ComponentStartup>(OnStartup); SubscribeLocalEvent<StorageFillVisualizerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<StorageFillVisualizerComponent, EntInsertedIntoContainerMessage>(OnInserted); SubscribeLocalEvent<StorageFillVisualizerComponent, EntInsertedIntoContainerMessage>(OnInserted);
SubscribeLocalEvent<StorageFillVisualizerComponent, EntRemovedFromContainerMessage>(OnRemoved); SubscribeLocalEvent<StorageFillVisualizerComponent, EntRemovedFromContainerMessage>(OnRemoved);
} }
private void OnStartup(EntityUid uid, StorageFillVisualizerComponent component, ComponentStartup args) private void OnInit(EntityUid uid, StorageFillVisualizerComponent component, ComponentInit args)
{ {
UpdateAppearance(uid, component: component); UpdateAppearance(uid, component: component);
} }
@@ -41,7 +42,7 @@ public sealed class StorageFillVisualizerSystem : EntitySystem
if (component.MaxFillLevels < 1) if (component.MaxFillLevels < 1)
return; return;
var level = ContentHelpers.RoundToEqualLevels(storage.Container.ContainedEntities.Count, storage.MaxSlots, component.MaxFillLevels); var level = ContentHelpers.RoundToEqualLevels(storage.StorageUsed, storage.StorageCapacityMax, component.MaxFillLevels);
_appearance.SetData(uid, StorageFillVisuals.FillLevel, level, appearance); _appearance.SetData(uid, StorageFillVisuals.FillLevel, level, appearance);
} }
} }

View File

@@ -98,7 +98,7 @@ public sealed class EnergySwordSystem : EntitySystem
{ {
if (TryComp(uid, out ItemComponent? item)) if (TryComp(uid, out ItemComponent? item))
{ {
_item.SetSize(uid, ItemSize.Small, item); _item.SetSize(uid, 5, item);
} }
if (TryComp<DisarmMalusComponent>(uid, out var malus)) if (TryComp<DisarmMalusComponent>(uid, out var malus))
@@ -125,7 +125,7 @@ public sealed class EnergySwordSystem : EntitySystem
{ {
if (TryComp(uid, out ItemComponent? item)) if (TryComp(uid, out ItemComponent? item))
{ {
_item.SetSize(uid, ItemSize.Huge, item); _item.SetSize(uid, 9999, item);
} }
if (comp.IsSharp) if (comp.IsSharp)

View File

@@ -264,7 +264,7 @@ public abstract partial class InventorySystem
if (slotDefinition.DependsOn != null && !TryGetSlotEntity(target, slotDefinition.DependsOn, out _, inventory)) if (slotDefinition.DependsOn != null && !TryGetSlotEntity(target, slotDefinition.DependsOn, out _, inventory))
return false; return false;
var fittingInPocket = slotDefinition.SlotFlags.HasFlag(SlotFlags.POCKET) && item is { Size: <= ItemSize.Small }; var fittingInPocket = slotDefinition.SlotFlags.HasFlag(SlotFlags.POCKET) && item is { Size: <= (int) ReferenceSizes.Pocket };
if (clothing == null && !fittingInPocket if (clothing == null && !fittingInPocket
|| clothing != null && !clothing.Slots.HasFlag(slotDefinition.SlotFlags) && !fittingInPocket) || clothing != null && !clothing.Slots.HasFlag(slotDefinition.SlotFlags) && !fittingInPocket)
{ {

View File

@@ -13,17 +13,18 @@ namespace Content.Shared.Item;
[Access(typeof(SharedItemSystem))] [Access(typeof(SharedItemSystem))]
public sealed partial class ItemComponent : Component public sealed partial class ItemComponent : Component
{ {
[DataField, ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[Access(typeof(SharedItemSystem))] [DataField("size")]
public ItemSize Size = ItemSize.Small; [Access(typeof(SharedItemSystem), Other = AccessPermissions.ReadExecute)]
public int Size = 5;
[Access(typeof(SharedItemSystem))] [Access(typeof(SharedItemSystem))]
[DataField] [DataField("inhandVisuals")]
public Dictionary<HandLocation, List<PrototypeLayerData>> InhandVisuals = new(); public Dictionary<HandLocation, List<PrototypeLayerData>> InhandVisuals = new();
[Access(typeof(SharedItemSystem))] [Access(typeof(SharedItemSystem))]
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField] [DataField("heldPrefix")]
public string? HeldPrefix; public string? HeldPrefix;
/// <summary> /// <summary>
@@ -38,10 +39,10 @@ public sealed partial class ItemComponent : Component
[Serializable, NetSerializable] [Serializable, NetSerializable]
public sealed class ItemComponentState : ComponentState public sealed class ItemComponentState : ComponentState
{ {
public ItemSize Size { get; } public int Size { get; }
public string? HeldPrefix { get; } public string? HeldPrefix { get; }
public ItemComponentState(ItemSize size, string? heldPrefix) public ItemComponentState(int size, string? heldPrefix)
{ {
Size = size; Size = size;
HeldPrefix = heldPrefix; HeldPrefix = heldPrefix;
@@ -65,43 +66,6 @@ public sealed class VisualsChangedEvent : EntityEventArgs
} }
} }
/// <summary>
/// Abstracted sizes for items.
/// Used to determine what can fit into inventories.
/// </summary>
public enum ItemSize
{
/// <summary>
/// Items that can be held completely in one's hand.
/// </summary>
Tiny = 1,
/// <summary>
/// Items that can fit inside of a standard pocket.
/// </summary>
Small = 2,
/// <summary>
/// Items that can fit inside of a standard bag.
/// </summary>
Normal = 3,
/// <summary>
/// Items that are too large to fit inside of standard bags, but can worn in exterior slots or placed in custom containers.
/// </summary>
Large = 4,
/// <summary>
/// Items that are too large to place inside of any kind of container.
/// </summary>
Huge = 5,
/// <summary>
/// Picture furry gf
/// </summary>
Ginormous = 6
}
/// <summary> /// <summary>
/// Reference sizes for common containers and items. /// Reference sizes for common containers and items.
/// </summary> /// </summary>

View File

@@ -1,4 +1,3 @@
using Content.Shared.Item;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
@@ -21,11 +20,11 @@ public sealed partial class ItemToggleComponent : Component
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("offSize")] [DataField("offSize")]
public ItemSize OffSize = ItemSize.Small; public int OffSize = 1;
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("onSize")] [DataField("onSize")]
public ItemSize OnSize = ItemSize.Huge; public int OnSize = 9999;
} }
[ByRefEvent] [ByRefEvent]

View File

@@ -1,27 +1,23 @@
using Content.Shared.CombatMode;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Stacks; using Content.Shared.Stacks;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Content.Shared.Examine; using Content.Shared.Examine;
using JetBrains.Annotations;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility; using Robust.Shared.Utility;
namespace Content.Shared.Item; namespace Content.Shared.Item;
public abstract class SharedItemSystem : EntitySystem public abstract class SharedItemSystem : EntitySystem
{ {
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!;
[Dependency] private readonly SharedCombatModeSystem _combatMode = default!;
[Dependency] protected readonly SharedContainerSystem Container = default!; [Dependency] protected readonly SharedContainerSystem Container = default!;
public const int ItemSizeWeightTiny = 1;
public const int ItemSizeWeightSmall = 2;
public const int ItemSizeWeightNormal = 4;
public const int ItemSizeWeightLarge = 8;
public const int ItemSizeWeightHuge = 16;
public const int ItemSizeWeightGinormous = 32;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
@@ -37,13 +33,13 @@ public abstract class SharedItemSystem : EntitySystem
#region Public API #region Public API
public void SetSize(EntityUid uid, ItemSize size, ItemComponent? component = null) public void SetSize(EntityUid uid, int size, ItemComponent? component = null)
{ {
if (!Resolve(uid, ref component, false)) if (!Resolve(uid, ref component, false))
return; return;
component.Size = size; component.Size = size;
Dirty(uid, component); Dirty(component);
} }
public void SetHeldPrefix(EntityUid uid, string? heldPrefix, ItemComponent? component = null) public void SetHeldPrefix(EntityUid uid, string? heldPrefix, ItemComponent? component = null)
@@ -55,7 +51,7 @@ public abstract class SharedItemSystem : EntitySystem
return; return;
component.HeldPrefix = heldPrefix; component.HeldPrefix = heldPrefix;
Dirty(uid, component); Dirty(component);
VisualsChanged(uid); VisualsChanged(uid);
} }
@@ -71,7 +67,7 @@ public abstract class SharedItemSystem : EntitySystem
item.InhandVisuals = otherItem.InhandVisuals; item.InhandVisuals = otherItem.InhandVisuals;
item.HeldPrefix = otherItem.HeldPrefix; item.HeldPrefix = otherItem.HeldPrefix;
Dirty(uid, item); Dirty(item);
VisualsChanged(uid); VisualsChanged(uid);
} }
@@ -87,7 +83,14 @@ public abstract class SharedItemSystem : EntitySystem
protected virtual void OnStackCountChanged(EntityUid uid, ItemComponent component, StackCountChangedEvent args) protected virtual void OnStackCountChanged(EntityUid uid, ItemComponent component, StackCountChangedEvent args)
{ {
if (!TryComp<StackComponent>(uid, out var stack))
return;
if (!_prototype.TryIndex<StackPrototype>(stack.StackTypeId, out var stackProto) ||
stackProto.ItemSize is not { } size)
return;
SetSize(uid, args.NewCount * size, component);
} }
private void OnHandleState(EntityUid uid, ItemComponent component, ref ComponentHandleState args) private void OnHandleState(EntityUid uid, ItemComponent component, ref ComponentHandleState args)
@@ -132,7 +135,7 @@ public abstract class SharedItemSystem : EntitySystem
private void OnExamine(EntityUid uid, ItemComponent component, ExaminedEvent args) private void OnExamine(EntityUid uid, ItemComponent component, ExaminedEvent args)
{ {
args.PushMarkup(Loc.GetString("item-component-on-examine-size", args.PushMarkup(Loc.GetString("item-component-on-examine-size",
("size", GetItemSizeLocale(component.Size)))); ("size", component.Size)));
} }
/// <summary> /// <summary>
@@ -145,32 +148,4 @@ public abstract class SharedItemSystem : EntitySystem
public virtual void VisualsChanged(EntityUid owner) public virtual void VisualsChanged(EntityUid owner)
{ {
} }
[PublicAPI]
public static string GetItemSizeLocale(ItemSize size)
{
return Robust.Shared.Localization.Loc.GetString($"item-component-size-{size.ToString()}");
}
[PublicAPI]
public static int GetItemSizeWeight(ItemSize size)
{
switch (size)
{
case ItemSize.Tiny:
return ItemSizeWeightTiny;
case ItemSize.Small:
return ItemSizeWeightSmall;
case ItemSize.Normal:
return ItemSizeWeightNormal;
case ItemSize.Large:
return ItemSizeWeightLarge;
case ItemSize.Huge:
return ItemSizeWeightHuge;
case ItemSize.Ginormous:
return ItemSizeWeightGinormous;
default:
throw new ArgumentOutOfRangeException(nameof(size), size, null);
}
}
} }

View File

@@ -1,7 +1,10 @@
using Content.Server.Storage.Components; using Content.Server.Storage.Components;
using Content.Shared.Hands;
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Content.Shared.Stacks;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Components;
using Robust.Shared.Player;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Shared.Storage.EntitySystems; namespace Content.Shared.Storage.EntitySystems;
@@ -53,7 +56,7 @@ public sealed class MagnetPickupSystem : EntitySystem
comp.NextScan += ScanDelay; comp.NextScan += ScanDelay;
// No space // No space
if (!_storage.HasSpace((uid, storage))) if (storage.StorageUsed >= storage.StorageCapacityMax)
continue; continue;
if (!_inventory.TryGetContainingSlot(uid, out var slotDef)) if (!_inventory.TryGetContainingSlot(uid, out var slotDef))

View File

@@ -4,6 +4,7 @@ using Content.Shared.CombatMode;
using Content.Shared.Containers.ItemSlots; using Content.Shared.Containers.ItemSlots;
using Content.Shared.Destructible; using Content.Shared.Destructible;
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.Hands;
using Content.Shared.Hands.Components; using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems; using Content.Shared.Hands.EntitySystems;
using Content.Shared.Implants.Components; using Content.Shared.Implants.Components;
@@ -45,8 +46,6 @@ public abstract class SharedStorageSystem : EntitySystem
private EntityQuery<StackComponent> _stackQuery; private EntityQuery<StackComponent> _stackQuery;
private EntityQuery<TransformComponent> _xformQuery; private EntityQuery<TransformComponent> _xformQuery;
public const ItemSize DefaultStorageMaxItemSize = ItemSize.Normal;
/// <inheritdoc /> /// <inheritdoc />
public override void Initialize() public override void Initialize()
{ {
@@ -90,7 +89,6 @@ public abstract class SharedStorageSystem : EntitySystem
{ {
// TODO: I had this. // TODO: I had this.
// We can get states being applied before the container is ready. // We can get states being applied before the container is ready.
// ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
if (component.Container == default) if (component.Container == default)
return; return;
@@ -231,7 +229,7 @@ public abstract class SharedStorageSystem : EntitySystem
return; return;
} }
if (_xformQuery.TryGetComponent(uid, out var transformOwner) && TryComp<TransformComponent>(target, out var transformEnt)) if (TryComp<TransformComponent>(uid, out var transformOwner) && TryComp<TransformComponent>(target, out var transformEnt))
{ {
var parent = transformOwner.ParentUid; var parent = transformOwner.ParentUid;
@@ -241,7 +239,7 @@ public abstract class SharedStorageSystem : EntitySystem
_transform _transform
); );
if (PlayerInsertEntityInWorld((uid, storageComp), args.User, target)) if (PlayerInsertEntityInWorld(uid, args.User, target, storageComp))
{ {
RaiseNetworkEvent(new AnimateInsertingEntitiesEvent(GetNetEntity(uid), RaiseNetworkEvent(new AnimateInsertingEntitiesEvent(GetNetEntity(uid),
new List<NetEntity> { GetNetEntity(target) }, new List<NetEntity> { GetNetEntity(target) },
@@ -287,7 +285,7 @@ public abstract class SharedStorageSystem : EntitySystem
var angle = targetXform.LocalRotation; var angle = targetXform.LocalRotation;
if (PlayerInsertEntityInWorld((uid, component), args.Args.User, entity)) if (PlayerInsertEntityInWorld(uid, args.Args.User, entity, component))
{ {
successfullyInserted.Add(entity); successfullyInserted.Add(entity);
successfullyInsertedPositions.Add(position); successfullyInsertedPositions.Add(position);
@@ -324,7 +322,7 @@ public abstract class SharedStorageSystem : EntitySystem
/// </summary> /// </summary>
private void OnInteractWithItem(EntityUid uid, StorageComponent storageComp, StorageInteractWithItemEvent args) private void OnInteractWithItem(EntityUid uid, StorageComponent storageComp, StorageInteractWithItemEvent args)
{ {
if (args.Session.AttachedEntity is not { } player) if (args.Session.AttachedEntity is not EntityUid player)
return; return;
var entity = GetEntity(args.InteractedItemUID); var entity = GetEntity(args.InteractedItemUID);
@@ -398,10 +396,27 @@ public abstract class SharedStorageSystem : EntitySystem
public void RecalculateStorageUsed(EntityUid uid, StorageComponent storageComp) public void RecalculateStorageUsed(EntityUid uid, StorageComponent storageComp)
{ {
// it might make more sense to use the weights instead of the slots. storageComp.StorageUsed = 0;
// I'm not sure.
_appearance.SetData(uid, StorageVisuals.StorageUsed, storageComp.Container.ContainedEntities.Count); foreach (var entity in storageComp.Container.ContainedEntities)
_appearance.SetData(uid, StorageVisuals.Capacity, storageComp.MaxSlots); {
if (!_itemQuery.TryGetComponent(entity, out var itemComp))
continue;
var size = itemComp.Size;
storageComp.StorageUsed += size;
}
_appearance.SetData(uid, StorageVisuals.StorageUsed, storageComp.StorageUsed);
_appearance.SetData(uid, StorageVisuals.Capacity, storageComp.StorageCapacityMax);
}
public int GetAvailableSpace(EntityUid uid, StorageComponent? component = null)
{
if (!Resolve(uid, ref component))
return 0;
return component.StorageCapacityMax - component.StorageUsed;
} }
/// <summary> /// <summary>
@@ -434,20 +449,17 @@ public abstract class SharedStorageSystem : EntitySystem
/// Verifies if an entity can be stored and if it fits /// Verifies if an entity can be stored and if it fits
/// </summary> /// </summary>
/// <param name="uid">The entity to check</param> /// <param name="uid">The entity to check</param>
/// <param name="insertEnt"></param>
/// <param name="reason">If returning false, the reason displayed to the player</param> /// <param name="reason">If returning false, the reason displayed to the player</param>
/// <param name="storageComp"></param>
/// <param name="item"></param>
/// <returns>true if it can be inserted, false otherwise</returns> /// <returns>true if it can be inserted, false otherwise</returns>
public bool CanInsert(EntityUid uid, EntityUid insertEnt, out string? reason, StorageComponent? storageComp = null, ItemComponent? item = null) public bool CanInsert(EntityUid uid, EntityUid insertEnt, out string? reason, StorageComponent? storageComp = null)
{ {
if (!Resolve(uid, ref storageComp) || !Resolve(insertEnt, ref item)) if (!Resolve(uid, ref storageComp))
{ {
reason = null; reason = null;
return false; return false;
} }
if (Transform(insertEnt).Anchored) if (TryComp(insertEnt, out TransformComponent? transformComp) && transformComp.Anchored)
{ {
reason = "comp-storage-anchored-failure"; reason = "comp-storage-anchored-failure";
return false; return false;
@@ -465,19 +477,15 @@ public abstract class SharedStorageSystem : EntitySystem
return false; return false;
} }
if (item.Size > GetMaxItemSize((uid, storageComp))) if (TryComp(insertEnt, out StorageComponent? storage) &&
{ storage.StorageCapacityMax >= storageComp.StorageCapacityMax)
reason = "comp-storage-too-big";
return false;
}
if (storageComp.Container.ContainedEntities.Count >= storageComp.MaxSlots)
{ {
reason = "comp-storage-insufficient-capacity"; reason = "comp-storage-insufficient-capacity";
return false; return false;
} }
if (SharedItemSystem.GetItemSizeWeight(item.Size) + GetCumulativeItemSizes(uid, storageComp) > GetMaxTotalWeight((uid, storageComp))) if (TryComp(insertEnt, out ItemComponent? itemComp) &&
itemComp.Size > storageComp.StorageCapacityMax - storageComp.StorageUsed)
{ {
reason = "comp-storage-insufficient-capacity"; reason = "comp-storage-insufficient-capacity";
return false; return false;
@@ -534,7 +542,8 @@ public abstract class SharedStorageSystem : EntitySystem
if (insertStack.Count > 0) if (insertStack.Count > 0)
{ {
// Try to insert it as a new stack. // Try to insert it as a new stack.
if (!CanInsert(uid, insertEnt, out _, storageComp) || if (TryComp(insertEnt, out ItemComponent? itemComp) &&
itemComp.Size > storageComp.StorageCapacityMax - storageComp.StorageUsed ||
!storageComp.Container.Insert(insertEnt)) !storageComp.Container.Insert(insertEnt))
{ {
// If we also didn't do any stack fills above then just end // If we also didn't do any stack fills above then just end
@@ -559,9 +568,7 @@ public abstract class SharedStorageSystem : EntitySystem
/// <summary> /// <summary>
/// Inserts an entity into storage from the player's active hand /// Inserts an entity into storage from the player's active hand
/// </summary> /// </summary>
/// <param name="uid"></param>
/// <param name="player">The player to insert an entity from</param> /// <param name="player">The player to insert an entity from</param>
/// <param name="storageComp"></param>
/// <returns>true if inserted, false otherwise</returns> /// <returns>true if inserted, false otherwise</returns>
public bool PlayerInsertHeldEntity(EntityUid uid, EntityUid player, StorageComponent? storageComp = null) public bool PlayerInsertHeldEntity(EntityUid uid, EntityUid player, StorageComponent? storageComp = null)
{ {
@@ -582,23 +589,21 @@ public abstract class SharedStorageSystem : EntitySystem
return false; return false;
} }
return PlayerInsertEntityInWorld((uid, storageComp), player, toInsert.Value); return PlayerInsertEntityInWorld(uid, player, toInsert.Value, storageComp);
} }
/// <summary> /// <summary>
/// Inserts an Entity (<paramref name="toInsert"/>) in the world into storage, informing <paramref name="player"/> if it fails. /// Inserts an Entity (<paramref name="toInsert"/>) in the world into storage, informing <paramref name="player"/> if it fails.
/// <paramref name="toInsert"/> is *NOT* held, see <see cref="PlayerInsertHeldEntity(EntityUid,EntityUid,StorageComponent)"/>. /// <paramref name="toInsert"/> is *NOT* held, see <see cref="PlayerInsertHeldEntity(Robust.Shared.GameObjects.EntityUid)"/>.
/// </summary> /// </summary>
/// <param name="uid"></param>
/// <param name="player">The player to insert an entity with</param> /// <param name="player">The player to insert an entity with</param>
/// <param name="toInsert"></param>
/// <returns>true if inserted, false otherwise</returns> /// <returns>true if inserted, false otherwise</returns>
public bool PlayerInsertEntityInWorld(Entity<StorageComponent?> uid, EntityUid player, EntityUid toInsert) public bool PlayerInsertEntityInWorld(EntityUid uid, EntityUid player, EntityUid toInsert, StorageComponent? storageComp = null)
{ {
if (!Resolve(uid, ref uid.Comp) || !_sharedInteractionSystem.InRangeUnobstructed(player, uid)) if (!Resolve(uid, ref storageComp) || !_sharedInteractionSystem.InRangeUnobstructed(player, uid))
return false; return false;
if (!Insert(uid, toInsert, out _, user: player, uid.Comp)) if (!Insert(uid, toInsert, out _, user: player, storageComp))
{ {
_popupSystem.PopupClient(Loc.GetString("comp-storage-cant-insert"), uid, player); _popupSystem.PopupClient(Loc.GetString("comp-storage-cant-insert"), uid, player);
return false; return false;
@@ -606,65 +611,6 @@ public abstract class SharedStorageSystem : EntitySystem
return true; return true;
} }
/// <summary>
/// Returns true if there is enough space to theoretically fit another item.
/// </summary>
public bool HasSpace(Entity<StorageComponent?> uid)
{
if (!Resolve(uid, ref uid.Comp))
return false;
return uid.Comp.Container.ContainedEntities.Count < uid.Comp.MaxSlots &&
GetCumulativeItemSizes(uid, uid.Comp) < GetMaxTotalWeight(uid);
}
/// <summary>
/// Returns the sum of all the ItemSizes of the items inside of a storage.
/// </summary>
public int GetCumulativeItemSizes(EntityUid uid, StorageComponent? component = null)
{
if (!Resolve(uid, ref component))
return 0;
var sum = 0;
foreach (var item in component.Container.ContainedEntities)
{
if (!_itemQuery.TryGetComponent(item, out var itemComp))
continue;
sum += SharedItemSystem.GetItemSizeWeight(itemComp.Size);
}
return sum;
}
public ItemSize GetMaxItemSize(Entity<StorageComponent?> uid)
{
if (!Resolve(uid, ref uid.Comp))
return DefaultStorageMaxItemSize;
// If we specify a max item size, use that
if (uid.Comp.MaxItemSize != null)
return uid.Comp.MaxItemSize.Value;
if (!_itemQuery.TryGetComponent(uid, out var item))
return DefaultStorageMaxItemSize;
// if there is no max item size specified, the value used
// is one below the item size of the storage entity, clamped at ItemSize.Tiny
return (ItemSize) Math.Max((int) item.Size - 1, 1);
}
public int GetMaxTotalWeight(Entity<StorageComponent?> uid)
{
if (!Resolve(uid, ref uid.Comp))
return 0;
if (uid.Comp.MaxTotalWeight != null)
return uid.Comp.MaxTotalWeight.Value;
return uid.Comp.MaxSlots * SharedItemSystem.GetItemSizeWeight(GetMaxItemSize(uid));
}
/// <summary> /// <summary>
/// Plays a clientside pickup animation for the specified uid. /// Plays a clientside pickup animation for the specified uid.
/// </summary> /// </summary>

View File

@@ -1,5 +1,3 @@
using Content.Shared.Item;
using Content.Shared.Storage.EntitySystems;
using Content.Shared.Whitelist; using Content.Shared.Whitelist;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Containers; using Robust.Shared.Containers;
@@ -22,25 +20,6 @@ namespace Content.Shared.Storage
[ViewVariables] [ViewVariables]
public Container Container = default!; public Container Container = default!;
/// <summary>
/// The max number of entities that can be inserted into this storage.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public int MaxSlots = 7;
/// <summary>
/// The maximum size item that can be inserted into this storage,
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
[Access(typeof(SharedStorageSystem))]
public ItemSize? MaxItemSize;
/// <summary>
/// A limit for the cumulative ItemSizes that can be inserted in this storage.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public int? MaxTotalWeight;
// TODO: Make area insert its own component. // TODO: Make area insert its own component.
[DataField("quickInsert")] [DataField("quickInsert")]
public bool QuickInsert; // Can insert storables by "attacking" them with the storage entity public bool QuickInsert; // Can insert storables by "attacking" them with the storage entity
@@ -66,6 +45,18 @@ namespace Content.Shared.Storage
[DataField("blacklist")] [DataField("blacklist")]
public EntityWhitelist? Blacklist; public EntityWhitelist? Blacklist;
/// <summary>
/// How much storage is currently being used by contained entities.
/// </summary>
[ViewVariables, DataField("storageUsed"), AutoNetworkedField]
public int StorageUsed;
/// <summary>
/// Maximum capacity for storage.
/// </summary>
[DataField("capacity"), AutoNetworkedField]
public int StorageCapacityMax = 10000;
/// <summary> /// <summary>
/// Sound played whenever an entity is inserted into storage. /// Sound played whenever an entity is inserted into storage.
/// </summary> /// </summary>

View File

@@ -1,10 +1,9 @@
comp-storage-no-item-size = N/A comp-storage-no-item-size = N/A
comp-storage-cant-insert = Can't insert. comp-storage-cant-insert = Can't insert.
comp-storage-too-big = Too big! comp-storage-insufficient-capacity = Insufficient capacity.
comp-storage-insufficient-capacity = No room!
comp-storage-invalid-container = This doesn't go in there! comp-storage-invalid-container = This doesn't go in there!
comp-storage-anchored-failure = Can't insert an anchored item. comp-storage-anchored-failure = Can't insert an anchored item.
comp-storage-cant-drop = You can't let go of { THE($entity) }! comp-storage-cant-drop = You can't let go of { THE($entity) }!
comp-storage-window-title = Storage Item comp-storage-window-title = Storage Item
comp-storage-window-volume = Items: { $itemCount }/{ $maxCount }, Max Size: {$size} comp-storage-window-volume = Items: { $itemCount }, Stored: { $usedVolume }/{ $maxVolume }
comp-storage-window-volume-full = [color=orange][bold]FULL[/bold][/color], Max Size: {$size} comp-storage-window-volume-unlimited = Items: { $itemCount }

View File

@@ -7,10 +7,3 @@ pick-up-verb-get-data-text = Pick Up
pick-up-verb-get-data-text-inventory = Put in hand pick-up-verb-get-data-text-inventory = Put in hand
item-component-on-examine-size = Size: {$size} item-component-on-examine-size = Size: {$size}
item-component-size-Tiny = tiny
item-component-size-Small = small
item-component-size-Normal = normal
item-component-size-Large = large
item-component-size-Huge = huge
item-component-size-Ginormous = bulky

View File

@@ -874,6 +874,36 @@ entities:
pos: -0.5,0.5 pos: -0.5,0.5
parent: 325 parent: 325
type: Transform type: Transform
- proto: ClothingBeltSyndieHolster
entities:
- uid: 317
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- canCollide: False
type: Physics
- proto: ClothingHandsGlovesCombat
entities:
- uid: 316
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- canCollide: False
type: Physics
- proto: ClothingMaskGasSyndicate
entities:
- uid: 318
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- canCollide: False
type: Physics
- proto: ComputerIFFSyndicate - proto: ComputerIFFSyndicate
entities: entities:
- uid: 40 - uid: 40
@@ -896,6 +926,16 @@ entities:
ents: ents:
- 245 - 245
type: ContainerContainer type: ContainerContainer
- proto: Crowbar
entities:
- uid: 313
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- canCollide: False
type: Physics
- proto: CyberPen - proto: CyberPen
entities: entities:
- uid: 77 - uid: 77
@@ -1632,6 +1672,16 @@ entities:
pos: -2.5,-3.5 pos: -2.5,-3.5
parent: 325 parent: 325
type: Transform type: Transform
- proto: Multitool
entities:
- uid: 314
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- canCollide: False
type: Physics
- proto: NitrogenTankFilled - proto: NitrogenTankFilled
entities: entities:
- uid: 105 - uid: 105
@@ -1830,6 +1880,20 @@ entities:
type: Transform type: Transform
- canCollide: False - canCollide: False
type: Physics type: Physics
- proto: Screwdriver
entities:
- uid: 310
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- selected:
enum.DamageStateVisualLayers.Base:
screwdriver: '#1861D5FF'
type: RandomSprite
- canCollide: False
type: Physics
- proto: SheetGlass1 - proto: SheetGlass1
entities: entities:
- uid: 244 - uid: 244
@@ -2318,6 +2382,21 @@ entities:
- pos: 1.5699697,-0.44908836 - pos: 1.5699697,-0.44908836
parent: 325 parent: 325
type: Transform type: Transform
- containers:
storagebase: !type:Container
showEnts: False
occludes: True
ents:
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
type: ContainerContainer
- canCollide: False - canCollide: False
type: Physics type: Physics
- proto: ToyFigurineNukie - proto: ToyFigurineNukie
@@ -2577,6 +2656,16 @@ entities:
- pos: -2.5,2.5 - pos: -2.5,2.5
parent: 325 parent: 325
type: Transform type: Transform
- proto: Welder
entities:
- uid: 312
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- canCollide: False
type: Physics
- proto: WindoorSecure - proto: WindoorSecure
entities: entities:
- uid: 166 - uid: 166
@@ -2598,6 +2687,30 @@ entities:
ents: ents:
- 346 - 346
type: ContainerContainer type: ContainerContainer
- proto: Wirecutter
entities:
- uid: 315
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- selected:
enum.DamageStateVisualLayers.Base:
cutters: '#D58C18FF'
type: RandomSprite
- canCollide: False
type: Physics
- proto: Wrench
entities:
- uid: 311
components:
- flags: InContainer
type: MetaData
- parent: 177
type: Transform
- canCollide: False
type: Physics
- proto: YellowOxygenTankFilled - proto: YellowOxygenTankFilled
entities: entities:
- uid: 167 - uid: 167

View File

@@ -102471,6 +102471,8 @@ entities:
type: Transform type: Transform
- count: 15 - count: 15
type: Stack type: Stack
- size: 15
type: Item
- proto: SheetPlasma - proto: SheetPlasma
entities: entities:
- uid: 12944 - uid: 12944
@@ -102562,6 +102564,8 @@ entities:
type: Transform type: Transform
- count: 20 - count: 20
type: Stack type: Stack
- size: 20
type: Item
- proto: Shovel - proto: Shovel
entities: entities:
- uid: 12955 - uid: 12955

View File

@@ -78331,6 +78331,8 @@ entities:
type: Transform type: Transform
- count: 15 - count: 15
type: Stack type: Stack
- size: 30
type: Item
- proto: StoolBar - proto: StoolBar
entities: entities:
- uid: 921 - uid: 921

View File

@@ -28,7 +28,7 @@
- id: BoxSurvivalSecurity - id: BoxSurvivalSecurity
- id: Flash - id: Flash
- id: MagazinePistol - id: MagazinePistol
- type: entity - type: entity
noSpawn: true noSpawn: true
parent: ClothingBackpackSecurity parent: ClothingBackpackSecurity
@@ -291,7 +291,8 @@
- id: RegenerativeMesh - id: RegenerativeMesh
- id: RCD - id: RCD
- id: RCDAmmo - id: RCDAmmo
amount: 2 - id: RCDAmmo
- id: RCDAmmo
- id: CableMVStack - id: CableMVStack
- id: CableHVStack - id: CableHVStack

View File

@@ -198,9 +198,6 @@
name: syndicate pyjama duffel bag name: syndicate pyjama duffel bag
description: Contains 3 pairs of syndicate pyjamas and 3 plushies for the ultimate sleepover. description: Contains 3 pairs of syndicate pyjamas and 3 plushies for the ultimate sleepover.
components: components:
- type: Storage
maxSlots: 16
maxTotalWeight: 44
- type: StorageFill - type: StorageFill
contents: contents:
- id: ClothingUniformJumpsuitPyjamaSyndicateRed - id: ClothingUniformJumpsuitPyjamaSyndicateRed
@@ -234,8 +231,6 @@
id: ClothingBackpackChameleonFill id: ClothingBackpackChameleonFill
suffix: Fill, Chameleon suffix: Fill, Chameleon
components: components:
- type: Storage
maxSlots: 9
- type: StorageFill - type: StorageFill
contents: contents:
- id: ClothingUniformJumpsuitChameleon - id: ClothingUniformJumpsuitChameleon
@@ -267,11 +262,6 @@
name: syndicate hardsuit bundle name: syndicate hardsuit bundle
description: "Contains the Syndicate's signature blood red hardsuit." description: "Contains the Syndicate's signature blood red hardsuit."
components: components:
- type: Storage
maxItemSize: Huge
whitelist: #to snub 'dem metagamers
components:
- Clothing
- type: StorageFill - type: StorageFill
contents: contents:
- id: ClothingOuterHardsuitSyndie - id: ClothingOuterHardsuitSyndie

View File

@@ -278,7 +278,7 @@
containers: containers:
ballistic-ammo: !type:Container ballistic-ammo: !type:Container
- type: Item - type: Item
size: Normal size: 30
- type: Sprite - type: Sprite
sprite: Objects/Storage/boxes.rsi sprite: Objects/Storage/boxes.rsi

View File

@@ -37,8 +37,7 @@
- state: box - state: box
- state: light - state: light
- type: Storage - type: Storage
maxSlots: 12 capacity: 60
maxTotalWeight: 24
whitelist: whitelist:
components: components:
- LightBulb - LightBulb
@@ -61,8 +60,7 @@
- state: box - state: box
- state: lighttube - state: lighttube
- type: Storage - type: Storage
maxSlots: 12 capacity: 60
maxTotalWeight: 24
whitelist: whitelist:
components: components:
- LightBulb - LightBulb
@@ -87,8 +85,7 @@
- state: box - state: box
- state: lightmixed - state: lightmixed
- type: Storage - type: Storage
maxSlots: 12 capacity: 60
maxTotalWeight: 24
whitelist: whitelist:
components: components:
- LightBulb - LightBulb
@@ -111,6 +108,7 @@
- state: box - state: box
- state: pda - state: pda
- type: Storage - type: Storage
capacity: 60
whitelist: whitelist:
components: components:
- Pda - Pda
@@ -130,6 +128,7 @@
- state: box - state: box
- state: pda - state: pda
- type: Storage - type: Storage
capacity: 60
whitelist: whitelist:
components: components:
- IdCard - IdCard
@@ -149,6 +148,7 @@
- state: box - state: box
- state: headset - state: headset
- type: Storage - type: Storage
capacity: 60
whitelist: whitelist:
components: components:
- Headset - Headset
@@ -192,6 +192,7 @@
description: A special box for sensitive people. description: A special box for sensitive people.
components: components:
- type: Storage - type: Storage
capacity: 30
- type: Sprite - type: Sprite
layers: layers:
- state: box_hug - state: box_hug
@@ -233,12 +234,6 @@
id: BoxPerformer id: BoxPerformer
description: Happy Hatsune Miku Day! description: Happy Hatsune Miku Day!
components: components:
- type: Storage
maxItemSize: Normal
whitelist:
components:
- Clothing
- Food
- type: StorageFill - type: StorageFill
contents: contents:
- id: ClothingShoesBootsPerformer - id: ClothingShoesBootsPerformer
@@ -272,7 +267,7 @@
- id: TrashBag - id: TrashBag
amount: 6 amount: 6
- type: Storage - type: Storage
maxItemSize: Normal capacity: 800
whitelist: whitelist:
tags: tags:
- TrashBag - TrashBag
@@ -299,6 +294,7 @@
- state: box - state: box
- state: encryptokey - state: encryptokey
- type: Storage - type: Storage
capacity: 30
whitelist: whitelist:
components: components:
- EncryptionKey - EncryptionKey
@@ -390,12 +386,13 @@
description: Two syndicate encryption keys for the price of one. Miniaturized for ease of use. description: Two syndicate encryption keys for the price of one. Miniaturized for ease of use.
components: components:
- type: Item - type: Item
size: Normal size: 15
- type: StorageFill - type: StorageFill
contents: contents:
- id: EncryptionKeySyndie - id: EncryptionKeySyndie
amount: 2 amount: 2
- type: Storage - type: Storage
capacity: 15
- type: entity - type: entity
name: deathrattle implant box name: deathrattle implant box
@@ -404,7 +401,7 @@
description: Six deathrattle implants and handheld GPS devices for the whole squad. description: Six deathrattle implants and handheld GPS devices for the whole squad.
components: components:
- type: Item - type: Item
size: Normal size: 60
- type: StorageFill - type: StorageFill
contents: contents:
- id: DeathRattleImplanter - id: DeathRattleImplanter
@@ -412,8 +409,7 @@
- id: HandheldGPSBasic - id: HandheldGPSBasic
amount: 6 amount: 6
- type: Storage - type: Storage
maxSlots: 12 capacity: 60
maxTotalWeight: 24
- type: Sprite - type: Sprite
layers: layers:
- state: box - state: box
@@ -438,21 +434,20 @@
description: This box filled with colorful darts. description: This box filled with colorful darts.
components: components:
- type: Item - type: Item
size: Normal size: 40
- type: StorageFill - type: StorageFill
contents: contents:
- id: Dart - id: Dart
amount: 3 amount: 5
- id: DartBlue - id: DartBlue
amount: 3 amount: 5
- id: DartPurple - id: DartPurple
amount: 3 amount: 5
- id: DartYellow - id: DartYellow
amount: 3 amount: 5
- type: Storage - type: Storage
maxSlots: 12 capacity: 40
maxTotalWeight: 24
- type: Sprite - type: Sprite
layers: layers:
- state: box - state: box
- state: darts - state: darts

View File

@@ -93,13 +93,10 @@
parent: BoxCardboard parent: BoxCardboard
id: BoxMouthSwab id: BoxMouthSwab
components: components:
- type: Storage
maxSlots: 10
maxTotalWeight: 20
- type: StorageFill - type: StorageFill
contents: contents:
- id: DiseaseSwab - id: DiseaseSwab
amount: 10 amount: 30
- type: Sprite - type: Sprite
layers: layers:
- state: box - state: box

View File

@@ -49,12 +49,6 @@
id: BoxZiptie id: BoxZiptie
description: A box full of zipties. description: A box full of zipties.
components: components:
- type: Storage
maxSlots: 10
maxTotalWeight: 20
whitelist:
components:
- Handcuff
- type: StorageFill - type: StorageFill
contents: contents:
- id: Zipties - id: Zipties
@@ -70,9 +64,6 @@
id: BoxForensicPad id: BoxForensicPad
description: A box of forensic pads. description: A box of forensic pads.
components: components:
- type: Storage
maxSlots: 10
maxTotalWeight: 20
- type: StorageFill - type: StorageFill
contents: contents:
- id: ForensicPad - id: ForensicPad

View File

@@ -302,8 +302,8 @@
- id: TargetDarts - id: TargetDarts
amount: 1 amount: 1
- id: BoxDarts - id: BoxDarts
amount: 2 amount: 1
- id: BoxDarts - id: BoxDarts
amount: 1 amount: 1
prob: 0.05 prob: 0.05

View File

@@ -89,11 +89,14 @@
- type: StorageFill - type: StorageFill
contents: contents:
- id: Brutepack - id: Brutepack
amount: 1
- id: Ointment - id: Ointment
amount: 1
- id: Bloodpack - id: Bloodpack
amount: 1
- id: Gauze - id: Gauze
- id: EmergencyMedipen #You never know what people are going to latejoin into - id: EmergencyMedipen #You never know what people are going to latejoin into
amount: 3 amount: 6
- type: entity - type: entity
id: ClothingBeltPlantFilled id: ClothingBeltPlantFilled
@@ -121,10 +124,6 @@
name: grenadier chest rig name: grenadier chest rig
suffix: Filled suffix: Filled
components: components:
- type: Item
size: Large
- type: Storage
maxSlots: 8
- type: StorageFill - type: StorageFill
contents: contents:
- id: ExGrenade - id: ExGrenade
@@ -170,4 +169,4 @@
contents: contents:
- id: WeaponRevolverInspector - id: WeaponRevolverInspector
- id: SpeedLoaderMagnum - id: SpeedLoaderMagnum
- id: SpeedLoaderMagnumRubber - id: SpeedLoaderMagnumRubber

View File

@@ -15,10 +15,6 @@
parent: BriefcaseSyndie parent: BriefcaseSyndie
suffix: SniperBundle suffix: SniperBundle
components: components:
- type: Item
size: Huge
- type: Storage
maxItemSize: Large
- type: StorageFill - type: StorageFill
contents: contents:
- id: WeaponSniperHristov - id: WeaponSniperHristov

View File

@@ -12,7 +12,8 @@
- id: Ointment - id: Ointment
amount: 2 amount: 2
- id: Gauze - id: Gauze
- id: PillCanisterTricordrazine - id: PillTricordrazine
amount: 5
# see https://github.com/tgstation/blob/master/code/game/objects/items/storage/firstaid.dm for example contents # see https://github.com/tgstation/blob/master/code/game/objects/items/storage/firstaid.dm for example contents
- type: entity - type: entity
@@ -27,8 +28,10 @@
- id: Ointment - id: Ointment
amount: 2 amount: 2
- id: SyringeSigynate - id: SyringeSigynate
- id: PillCanisterKelotane - id: PillKelotane
- id: PillCanisterDermaline amount: 5
- id: PillDermaline
amount: 5
- type: entity - type: entity
id: MedkitBruteFilled id: MedkitBruteFilled
@@ -42,8 +45,10 @@
- id: Gauze - id: Gauze
- id: Bloodpack - id: Bloodpack
- id: SyringeTranexamicAcid - id: SyringeTranexamicAcid
- id: PillCanisterIron - id: PillIron
- id: PillCanisterBicaridine amount: 5
- id: PillBicaridine
amount: 5
- type: entity - type: entity
id: MedkitToxinFilled id: MedkitToxinFilled
@@ -55,8 +60,10 @@
- id: SyringeIpecac - id: SyringeIpecac
- id: SyringeEthylredoxrazine - id: SyringeEthylredoxrazine
- id: AntiPoisonMedipen - id: AntiPoisonMedipen
- id: PillCanisterDylovene - id: PillDylovene
- id: PillCanisterCharcoal amount: 5
- id: PillCharcoal
amount: 3
- type: entity - type: entity
id: MedkitOxygenFilled id: MedkitOxygenFilled
@@ -69,7 +76,8 @@
- id: EmergencyOxygenTankFilled - id: EmergencyOxygenTankFilled
- id: EmergencyMedipen - id: EmergencyMedipen
- id: SyringeInaprovaline - id: SyringeInaprovaline
- id: PillCanisterDexalin - id: PillDexalin
amount: 7
- type: entity - type: entity
id: MedkitRadiationFilled id: MedkitRadiationFilled
@@ -84,7 +92,8 @@
amount: 1 amount: 1
- id: EmergencyMedipen - id: EmergencyMedipen
amount: 1 amount: 1
- id: PillCanisterHyronalin - id: PillHyronalin
amount: 5
- type: entity - type: entity
id: MedkitAdvancedFilled id: MedkitAdvancedFilled
@@ -111,9 +120,11 @@
- id: MedicatedSuture - id: MedicatedSuture
- id: RegenerativeMesh - id: RegenerativeMesh
- id: SyringeEphedrine - id: SyringeEphedrine
- id: SyringeSaline
- id: BruteAutoInjector - id: BruteAutoInjector
- id: BurnAutoInjector - id: BurnAutoInjector
- id: EmergencyMedipen - id: EmergencyMedipen
- id: Bloodpack
- type: entity - type: entity
id: StimkitFilled id: StimkitFilled

View File

@@ -86,16 +86,9 @@
suffix: Filled suffix: Filled
parent: ToolboxSyndicate parent: ToolboxSyndicate
components: components:
- type: Storage
maxSlots: 8
- type: StorageFill - type: StorageFill
contents: contents:
- id: Crowbar - id: ClothingBeltUtilityEngineering
- id: Wrench
- id: Screwdriver
- id: Wirecutter
- id: Welder
- id: Multitool
- id: ClothingHandsGlovesCombat - id: ClothingHandsGlovesCombat
- id: ClothingMaskGasSyndicate - id: ClothingMaskGasSyndicate

View File

@@ -8,14 +8,13 @@
sprite: Clothing/Back/Backpacks/backpack.rsi sprite: Clothing/Back/Backpacks/backpack.rsi
state: icon state: icon
- type: Item - type: Item
size: Huge size: 9999
- type: Clothing - type: Clothing
quickEquip: false quickEquip: false
slots: slots:
- back - back
- type: Storage - type: Storage
maxSlots: 7 capacity: 100
maxTotalWeight: 28
- type: ContainerContainer - type: ContainerContainer
containers: containers:
storagebase: !type:Container storagebase: !type:Container
@@ -197,8 +196,7 @@
- type: Sprite - type: Sprite
sprite: Clothing/Back/Backpacks/ertleader.rsi sprite: Clothing/Back/Backpacks/ertleader.rsi
- type: Storage - type: Storage
maxSlots: 10 capacity: 250
maxTotalWeight: 40
- type: entity - type: entity
parent: ClothingBackpackERTLeader parent: ClothingBackpackERTLeader
@@ -261,12 +259,8 @@
shader: unshaded shader: unshaded
- type: Clothing - type: Clothing
equippedPrefix: holding equippedPrefix: holding
- type: Item
size: Ginormous
- type: Storage - type: Storage
maxSlots: 14 capacity: 9999
maxItemSize: Large
maxTotalWeight: 56 #14 normal-sized items.
- type: entity - type: entity
parent: ClothingBackpackClown parent: ClothingBackpackClown

View File

@@ -7,8 +7,7 @@
- type: Sprite - type: Sprite
sprite: Clothing/Back/Duffels/duffel.rsi sprite: Clothing/Back/Duffels/duffel.rsi
- type: Storage - type: Storage
maxSlots: 10 capacity: 120
maxTotalWeight: 40
- type: ClothingSpeedModifier - type: ClothingSpeedModifier
walkModifier: 1 walkModifier: 1
sprintModifier: 0.9 sprintModifier: 0.9
@@ -163,6 +162,8 @@
components: components:
- type: Sprite - type: Sprite
sprite: Clothing/Back/Duffels/syndicate.rsi sprite: Clothing/Back/Duffels/syndicate.rsi
- type: Storage
capacity: 131
- type: entity - type: entity
parent: ClothingBackpackDuffelSyndicate parent: ClothingBackpackDuffelSyndicate
@@ -227,11 +228,7 @@
- state: icon - state: icon
- state: icon-unlit - state: icon-unlit
shader: unshaded shader: unshaded
- type: Item
size: Ginormous
- type: Storage - type: Storage
maxSlots: 14 capacity: 9999
maxItemSize: Large
maxTotalWeight: 56 #14 normal-sized items.
- type: ClothingSpeedModifier - type: ClothingSpeedModifier
sprintModifier: 1 # makes its stats identical to other variants of bag of holding sprintModifier: 1 # makes its stats identical to other variants of bag of holding

View File

@@ -167,9 +167,5 @@
- state: icon - state: icon
- state: icon-unlit - state: icon-unlit
shader: unshaded shader: unshaded
- type: Item
size: Ginormous
- type: Storage - type: Storage
maxSlots: 14 capacity: 9999
maxItemSize: Large
maxTotalWeight: 56 #14 normal-sized items.

View File

@@ -33,7 +33,7 @@
sprite: Clothing/Back/Backpacks/waterbackpack.rsi sprite: Clothing/Back/Backpacks/waterbackpack.rsi
state: icon state: icon
- type: Item - type: Item
size: Huge size: 200
- type: Clothing - type: Clothing
slots: BACK slots: BACK
sprite: Clothing/Back/Backpacks/waterbackpack.rsi sprite: Clothing/Back/Backpacks/waterbackpack.rsi

View File

@@ -6,7 +6,7 @@
- type: Sprite - type: Sprite
state: icon state: icon
- type: Item - type: Item
size: Normal size: 50
- type: Clothing - type: Clothing
slots: [belt] slots: [belt]
quickEquip: false quickEquip: false
@@ -22,10 +22,7 @@
id: ClothingBeltStorageBase id: ClothingBeltStorageBase
components: components:
- type: Storage - type: Storage
maxSlots: 7 capacity: 40
maxItemSize: Normal
- type: Item
size: Huge
- type: ContainerContainer - type: ContainerContainer
containers: containers:
storagebase: !type:Container storagebase: !type:Container

View File

@@ -11,7 +11,7 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/utility.rsi sprite: Clothing/Belt/utility.rsi
- type: Storage - type: Storage
maxItemSize: Normal capacity: 45
# TODO: Fill this out more. # TODO: Fill this out more.
whitelist: whitelist:
tags: tags:
@@ -83,6 +83,7 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/ce.rsi sprite: Clothing/Belt/ce.rsi
- type: Storage - type: Storage
capacity: 105
# TODO: Fill this out more. # TODO: Fill this out more.
whitelist: whitelist:
tags: tags:
@@ -237,6 +238,7 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/medical.rsi sprite: Clothing/Belt/medical.rsi
- type: Storage - type: Storage
capacity: 60
whitelist: whitelist:
tags: tags:
- Wrench - Wrench
@@ -391,7 +393,7 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/sheath.rsi sprite: Clothing/Belt/sheath.rsi
- type: Storage - type: Storage
maxSlots: 1 capacity: 15
whitelist: whitelist:
tags: tags:
- CaptainSabre - CaptainSabre
@@ -416,8 +418,9 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/bandolier.rsi sprite: Clothing/Belt/bandolier.rsi
- type: Item - type: Item
size: Large size: 60
- type: Storage - type: Storage
capacity: 60
whitelist: whitelist:
tags: tags:
- ShellShotgun - ShellShotgun
@@ -448,7 +451,7 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/holster.rsi sprite: Clothing/Belt/holster.rsi
- type: Storage - type: Storage
maxSlots: 3 capacity: 20
- type: entity - type: entity
parent: ClothingBeltStorageBase parent: ClothingBeltStorageBase
@@ -461,8 +464,9 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/syndieholster.rsi sprite: Clothing/Belt/syndieholster.rsi
- type: Item - type: Item
size: Large size: 60
- type: Storage - type: Storage
capacity: 60
whitelist: whitelist:
components: components:
- Gun - Gun
@@ -524,7 +528,9 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/militarywebbingmed.rsi sprite: Clothing/Belt/militarywebbingmed.rsi
- type: Item - type: Item
size: Large size: 70
- type: Storage
capacity: 70
- type: entity - type: entity
parent: ClothingBeltBase parent: ClothingBeltBase
@@ -553,7 +559,7 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/wand.rsi sprite: Clothing/Belt/wand.rsi
- type: Storage - type: Storage
maxSlots: 8 capacity: 120
whitelist: whitelist:
tags: tags:
- WizardWand - WizardWand

View File

@@ -12,8 +12,7 @@
visible: false visible: false
- type: Clothing - type: Clothing
- type: Storage - type: Storage
maxSlots: 15 capacity: 150
maxItemSize: Small
whitelist: whitelist:
tags: tags:
- Arrow - Arrow

View File

@@ -9,9 +9,8 @@
- type: Clothing - type: Clothing
sprite: Clothing/Belt/waistbag_leather.rsi sprite: Clothing/Belt/waistbag_leather.rsi
- type: Storage - type: Storage
maxSlots: 5 capacity: 20
maxItemSize: Small
#Colorization on worn items doesn't work. If this ever gets fixed, you can duplicate this entry and change the color on the sprite to add color variants. #Colorization on worn items doesn't work. If this ever gets fixed, you can duplicate this entry and change the color on the sprite to add color variants.
#- type: entity #- type: entity
# parent: ClothingBeltStorageWaistbag # parent: ClothingBeltStorageWaistbag
@@ -30,4 +29,4 @@
# layers: # layers:
# - state: "equipped-BELT" # - state: "equipped-BELT"
# color: "#bf1313" # color: "#bf1313"
# - state: "equipped-trinkets" # - state: "equipped-trinkets"

View File

@@ -17,8 +17,6 @@
keySlots: 4 keySlots: 4
- type: Sprite - type: Sprite
state: icon state: icon
- type: Item
size: Small
- type: Clothing - type: Clothing
slots: slots:
- ears - ears

View File

@@ -7,5 +7,3 @@
state: icon state: icon
- type: Clothing - type: Clothing
slots: [eyes] slots: [eyes]
- type: Item
size: Small

View File

@@ -9,8 +9,6 @@
slots: [gloves] slots: [gloves]
- type: Food - type: Food
requiresSpecialDigestion: true requiresSpecialDigestion: true
- type: Item
size: Small
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
food: food:

View File

@@ -8,8 +8,6 @@
- HEAD - HEAD
- type: Sprite - type: Sprite
state: icon state: icon
- type: Item
size: Small
- type: Food - type: Food
requiresSpecialDigestion: true requiresSpecialDigestion: true
- type: SolutionContainerManager - type: SolutionContainerManager
@@ -119,7 +117,7 @@
name: base space helmet name: base space helmet
components: components:
- type: Item - type: Item
size: Small size: 10
- type: PressureProtection - type: PressureProtection
highPressureMultiplier: 0.6 highPressureMultiplier: 0.6
lowPressureMultiplier: 1000 lowPressureMultiplier: 1000
@@ -243,4 +241,4 @@
- type: GroupExamine - type: GroupExamine
- type: Tag - type: Tag
tags: tags:
- HidesHair - HidesHair

View File

@@ -197,7 +197,7 @@
- type: Clothing - type: Clothing
sprite: Clothing/Head/Hats/chefhat.rsi sprite: Clothing/Head/Hats/chefhat.rsi
- type: Storage - type: Storage
maxSlots: 1 capacity: 5
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.StorageUiKey.Key - key: enum.StorageUiKey.Key
@@ -751,10 +751,10 @@
offset: "0, 0.12" offset: "0, 0.12"
sprite: Clothing/Head/Hats/magician.rsi sprite: Clothing/Head/Hats/magician.rsi
- type: Item - type: Item
size: Small size: 10
sprite: Clothing/Head/Hats/magician.rsi sprite: Clothing/Head/Hats/magician.rsi
- type: Storage - type: Storage
maxSlots: 1 capacity: 10
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.StorageUiKey.Key - key: enum.StorageUiKey.Key

View File

@@ -5,8 +5,6 @@
components: components:
- type: Sprite - type: Sprite
state: icon state: icon
- type: Item
size: Small
- type: Clothing - type: Clothing
slots: [mask] slots: [mask]

View File

@@ -4,7 +4,7 @@
id: ClothingNeckBase id: ClothingNeckBase
components: components:
- type: Item - type: Item
size: Small size: 10
- type: Clothing - type: Clothing
quickEquip: true quickEquip: true
slots: slots:

View File

@@ -6,7 +6,7 @@
description: be nothing do crime description: be nothing do crime
components: components:
- type: Item - type: Item
size: Tiny size: 1
- type: entity - type: entity
parent: ClothingNeckPinBase parent: ClothingNeckPinBase

View File

@@ -15,7 +15,7 @@
id: ClothingOuterBaseLarge id: ClothingOuterBaseLarge
components: components:
- type: Item - type: Item
size: Large size: 80
- type: Clothing - type: Clothing
slots: slots:
- outerClothing - outerClothing
@@ -28,8 +28,10 @@
parent: ClothingOuterBase parent: ClothingOuterBase
id: ClothingOuterStorageBase id: ClothingOuterStorageBase
components: components:
- type: Item
size: 10
- type: Storage - type: Storage
maxSlots: 3 capacity: 10
- type: ContainerContainer - type: ContainerContainer
containers: containers:
storagebase: !type:Container storagebase: !type:Container
@@ -70,7 +72,7 @@
walkModifier: 0.4 walkModifier: 0.4
sprintModifier: 0.6 sprintModifier: 0.6
- type: Item - type: Item
size: Huge size: 121
- type: Armor - type: Armor
modifiers: modifiers:
coefficients: coefficients:
@@ -105,7 +107,7 @@
walkModifier: 0.8 walkModifier: 0.8
sprintModifier: 0.8 sprintModifier: 0.8
- type: Item - type: Item
size: Large size: 80
- type: entity - type: entity
parent: ClothingOuterBase parent: ClothingOuterBase
@@ -128,7 +130,7 @@
id: ClothingOuterBaseMedium id: ClothingOuterBaseMedium
components: components:
- type: Item - type: Item
size: Large size: 30
- type: Clothing - type: Clothing
slots: slots:
- outerClothing - outerClothing

View File

@@ -350,7 +350,7 @@
walkModifier: 0.75 walkModifier: 0.75
sprintModifier: 0.75 sprintModifier: 0.75
- type: Item - type: Item
size: Normal size: 50
- type: Tag - type: Tag
tags: tags:
- WhitelistChameleon - WhitelistChameleon

View File

@@ -176,7 +176,7 @@
- type: Sprite - type: Sprite
sprite: Clothing/OuterClothing/Suits/iansuit.rsi sprite: Clothing/OuterClothing/Suits/iansuit.rsi
- type: Item - type: Item
size: Normal size: 30
- type: Clothing - type: Clothing
sprite: Clothing/OuterClothing/Suits/iansuit.rsi sprite: Clothing/OuterClothing/Suits/iansuit.rsi
- type: ToggleableClothing - type: ToggleableClothing
@@ -197,7 +197,7 @@
- type: Sprite - type: Sprite
sprite: Clothing/OuterClothing/Suits/carpsuit.rsi sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
- type: Item - type: Item
size: Normal size: 30
- type: Clothing - type: Clothing
sprite: Clothing/OuterClothing/Suits/carpsuit.rsi sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
- type: ToggleableClothing - type: ToggleableClothing

View File

@@ -11,7 +11,7 @@
- type: TemperatureProtection - type: TemperatureProtection
coefficient: 0.1 coefficient: 0.1
- type: Item - type: Item
size: Small size: 10
- type: Armor - type: Armor
modifiers: modifiers:
coefficients: coefficients:

View File

@@ -8,8 +8,6 @@
- FEET - FEET
- type: Sprite - type: Sprite
state: icon state: icon
- type: Item
size: Normal
- type: Food - type: Food
requiresSpecialDigestion: true requiresSpecialDigestion: true
- type: SolutionContainerManager - type: SolutionContainerManager
@@ -41,7 +39,7 @@
id: ClothingShoesStorageBase id: ClothingShoesStorageBase
components: components:
- type: Storage - type: Storage
maxSlots: 1 capacity: 10
- type: ContainerContainer - type: ContainerContainer
containers: containers:
storagebase: !type:Container storagebase: !type:Container

View File

@@ -181,7 +181,7 @@
- state: equipped-FEET - state: equipped-FEET
offset: "0, -0.02" offset: "0, -0.02"
- type: Item - type: Item
size: Small size: 10
sprite: Clothing/Shoes/Specific/large_clown.rsi sprite: Clothing/Shoes/Specific/large_clown.rsi
- type: ClothingSpeedModifier - type: ClothingSpeedModifier
walkModifier: 0.85 walkModifier: 0.85

View File

@@ -3,8 +3,6 @@
parent: BaseItem parent: BaseItem
id: Clothing id: Clothing
components: components:
- type: Item
size: Normal
- type: Sprite - type: Sprite
- type: Tag - type: Tag
tags: tags:

View File

@@ -101,7 +101,7 @@
types: types:
Blunt: 20000 Blunt: 20000
- type: Item - type: Item
size: Tiny size: 1
sprite: Objects/Weapons/Melee/debug.rsi sprite: Objects/Weapons/Melee/debug.rsi
- type: entity - type: entity

View File

@@ -959,7 +959,7 @@
- map: ["enum.DamageStateVisualLayers.Base"] - map: ["enum.DamageStateVisualLayers.Base"]
state: mouse-0 state: mouse-0
- type: Item - type: Item
size: Tiny size: 5
- type: Clothing - type: Clothing
quickEquip: false quickEquip: false
sprite: Mobs/Animals/mouse.rsi sprite: Mobs/Animals/mouse.rsi
@@ -1424,7 +1424,7 @@
groups: groups:
Brute: 5 Brute: 5
- type: Item - type: Item
size: Normal size: 80
- type: OnUseTimerTrigger - type: OnUseTimerTrigger
delay: 10 delay: 10
beepSound: beepSound:
@@ -2329,7 +2329,7 @@
- map: ["enum.DamageStateVisualLayers.Base"] - map: ["enum.DamageStateVisualLayers.Base"]
state: hamster-0 state: hamster-0
- type: Item - type: Item
size: Tiny size: 5
- type: Physics - type: Physics
- type: Fixtures - type: Fixtures
fixtures: fixtures:

View File

@@ -172,9 +172,7 @@
graph: SupplyBot graph: SupplyBot
node: bot node: bot
- type: Storage - type: Storage
maxSlots: 15 capacity: 250
maxItemSize: Large
maxTotalWeight: 60
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.StorageUiKey.Key - key: enum.StorageUiKey.Key

View File

@@ -370,9 +370,9 @@
map: ["6pack6"] map: ["6pack6"]
visible: false visible: false
- type: Item - type: Item
size: Normal size: 6
- type: Storage - type: Storage
maxSlots: 6 capacity: 30
whitelist: whitelist:
tags: tags:
- Cola - Cola

View File

@@ -28,7 +28,7 @@
abstract: true abstract: true
components: components:
- type: Item - type: Item
size: Tiny size: 1
- type: FlavorProfile - type: FlavorProfile
flavors: flavors:
- bread - bread

View File

@@ -21,7 +21,7 @@
- ReagentId: Vitamin - ReagentId: Vitamin
Quantity: 5 Quantity: 5
- type: Item - type: Item
size: Normal size: 25
- type: entity - type: entity
parent: FoodCakeBase parent: FoodCakeBase
@@ -43,7 +43,7 @@
- ReagentId: Vitamin - ReagentId: Vitamin
Quantity: 1 Quantity: 1
- type: Item - type: Item
size: Tiny size: 5
# Custom Cake Example # Custom Cake Example
@@ -574,7 +574,7 @@
- type: Food - type: Food
transferAmount: 12 transferAmount: 12
- type: Item - type: Item
size: Normal size: 40
- type: PointLight - type: PointLight
color: "#FFFF00" color: "#FFFF00"
radius: 2 radius: 2

View File

@@ -16,7 +16,7 @@
- ReagentId: Nutriment - ReagentId: Nutriment
Quantity: 3 Quantity: 3
- type: Item - type: Item
size: Tiny size: 1
- type: Tag - type: Tag
tags: tags:
- DonkPocket - DonkPocket

View File

@@ -21,7 +21,7 @@
Quantity: 3 Quantity: 3
- type: Item - type: Item
sprite: Objects/Consumable/Food/Baked/donut.rsi sprite: Objects/Consumable/Food/Baked/donut.rsi
size: Tiny size: 1
# Tastes like donut. # Tastes like donut.
# The sprinkles are now an overlay, so you can put them on any donut! If we really # The sprinkles are now an overlay, so you can put them on any donut! If we really

View File

@@ -16,7 +16,7 @@
- ReagentId: Nutriment - ReagentId: Nutriment
Quantity: 5 Quantity: 5
- type: Item - type: Item
size: Tiny size: 1
# Muffins/Buns # Muffins/Buns

View File

@@ -24,7 +24,7 @@
- type: SliceableFood - type: SliceableFood
count: 8 count: 8
- type: Item - type: Item
size: Normal size: 8
- type: Tag - type: Tag
tags: tags:
- Pizza - Pizza
@@ -53,7 +53,7 @@
- ReagentId: Vitamin - ReagentId: Vitamin
Quantity: 0.8 Quantity: 0.8
- type: Item - type: Item
size: Tiny size: 1
- type: Tag - type: Tag
tags: tags:
- Pizza - Pizza

View File

@@ -38,14 +38,13 @@
map: ["pink-box6"] map: ["pink-box6"]
visible: false visible: false
- type: Storage - type: Storage
maxSlots: 6 capacity: 6
maxTotalWeight: 12
whitelist: whitelist:
tags: tags:
- Donut - Donut
- type: Item - type: Item
sprite: Objects/Consumable/Food/Baked/donut.rsi sprite: Objects/Consumable/Food/Baked/donut.rsi
size: Small size: 6
heldPrefix: box heldPrefix: box
- type: StorageFill - type: StorageFill
contents: contents:
@@ -119,13 +118,13 @@
map: ["box12"] map: ["box12"]
visible: false visible: false
- type: Storage - type: Storage
maxSlots: 12 capacity: 12
whitelist: whitelist:
tags: tags:
- Egg - Egg
- type: Item - type: Item
sprite: Objects/Consumable/Food/egg.rsi sprite: Objects/Consumable/Food/egg.rsi
size: Small size: 12
- type: StorageFill - type: StorageFill
contents: contents:
- id: FoodEgg - id: FoodEgg
@@ -176,9 +175,6 @@
id: EggBoxBroken id: EggBoxBroken
suffix: Broken suffix: Broken
components: components:
- type: Storage
maxSlots: 12
maxItemSize: Small
- type: StorageFill - type: StorageFill
contents: contents:
- id: Eggshells - id: Eggshells
@@ -210,8 +206,7 @@
map: ["enum.StorageVisualLayers.Door"] map: ["enum.StorageVisualLayers.Door"]
# TODO make these entitystorage again + placeablesurface after entity storage ECS gets merged. # TODO make these entitystorage again + placeablesurface after entity storage ECS gets merged.
- type: Storage - type: Storage
maxSlots: 1 capacity: 8
maxItemSize: Normal
whitelist: whitelist:
tags: tags:
- Pizza - Pizza
@@ -301,10 +296,10 @@
map: ["box6"] map: ["box6"]
visible: false visible: false
- type: Storage - type: Storage
maxSlots: 6 capacity: 6
- type: Item - type: Item
sprite: Objects/Consumable/Food/Baked/nuggets.rsi sprite: Objects/Consumable/Food/Baked/nuggets.rsi
size: Small size: 6
heldPrefix: box heldPrefix: box
- type: StorageFill - type: StorageFill
contents: contents:
@@ -338,10 +333,10 @@
whitelist: whitelist:
tags: tags:
- DonkPocket - DonkPocket
maxSlots: 6 capacity: 6
- type: Item - type: Item
sprite: Objects/Consumable/Food/Baked/donkpocket.rsi sprite: Objects/Consumable/Food/Baked/donkpocket.rsi
size: Small size: 6
- type: StorageFill - type: StorageFill
contents: contents:
- id: FoodDonkpocket - id: FoodDonkpocket
@@ -463,6 +458,8 @@
- type: Item - type: Item
sprite: Objects/Storage/Happyhonk/clown.rsi sprite: Objects/Storage/Happyhonk/clown.rsi
heldPrefix: box heldPrefix: box
- type: Storage
capacity: 30
- type: Tag - type: Tag
tags: tags:
- Trash - Trash
@@ -586,8 +583,10 @@
suffix: Toy Unsafe, Snacks suffix: Toy Unsafe, Snacks
name: syndicate snack box name: syndicate snack box
components: components:
- type: Item
size: 64
- type: Storage - type: Storage
maxSlots: 9 capacity: 64 # need more room for goodies
- type: StorageFill - type: StorageFill
contents: contents:
# toy # toy

View File

@@ -37,7 +37,7 @@
- type: Item - type: Item
sprite: Objects/Consumable/Food/snacks.rsi sprite: Objects/Consumable/Food/snacks.rsi
heldPrefix: packet heldPrefix: packet
size: Tiny size: 3
- type: DamageOnLand - type: DamageOnLand
damage: damage:
types: types:
@@ -63,7 +63,7 @@
- type: Item - type: Item
sprite: Objects/Consumable/Food/snacks.rsi sprite: Objects/Consumable/Food/snacks.rsi
heldPrefix: packet heldPrefix: packet
size: Tiny size: 3
- type: PhysicalComposition - type: PhysicalComposition
materialComposition: materialComposition:
Steel: 100 Steel: 100

View File

@@ -16,7 +16,7 @@
sprite: Objects/Consumable/Food/egg.rsi sprite: Objects/Consumable/Food/egg.rsi
- type: Item - type: Item
sprite: Objects/Consumable/Food/egg.rsi sprite: Objects/Consumable/Food/egg.rsi
size: Tiny size: 1
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
food: food:
@@ -69,7 +69,7 @@
sprite: Objects/Consumable/Food/egg.rsi sprite: Objects/Consumable/Food/egg.rsi
state: eggshells state: eggshells
- type: Item - type: Item
size: Tiny size: 1
- type: SolutionContainerManager - type: SolutionContainerManager
solutions: solutions:
food: food:

View File

@@ -24,7 +24,7 @@
- ReagentId: Fat - ReagentId: Fat
Quantity: 5 Quantity: 5
- type: Item - type: Item
size: Tiny size: 5
- type: Fixtures - type: Fixtures
fixtures: fixtures:
fix1: fix1:
@@ -209,7 +209,7 @@
graph: BearSteak graph: BearSteak
node: start node: start
defaultTarget: filet migrawr defaultTarget: filet migrawr
- type: entity - type: entity
name: raw penguin meat name: raw penguin meat

View File

@@ -136,7 +136,7 @@
- type: Sprite - type: Sprite
sprite: Objects/Specific/Hydroponics/nettle.rsi sprite: Objects/Specific/Hydroponics/nettle.rsi
- type: Item - type: Item
size: Small size: 10
sprite: Objects/Specific/Hydroponics/nettle.rsi sprite: Objects/Specific/Hydroponics/nettle.rsi
- type: MeleeWeapon - type: MeleeWeapon
damage: damage:
@@ -166,7 +166,7 @@
- type: Sprite - type: Sprite
sprite: Objects/Specific/Hydroponics/death_nettle.rsi sprite: Objects/Specific/Hydroponics/death_nettle.rsi
- type: Item - type: Item
size: Small size: 10
sprite: Objects/Specific/Hydroponics/death_nettle.rsi sprite: Objects/Specific/Hydroponics/death_nettle.rsi
- type: MeleeWeapon - type: MeleeWeapon
damage: damage:
@@ -184,7 +184,7 @@
- type: Produce - type: Produce
seedId: deathNettle seedId: deathNettle
- type: MeleeChemicalInjector - type: MeleeChemicalInjector
transferAmount: 6 transferAmount: 6
solution: food solution: food
pierceArmor: true # We do a little trolling pierceArmor: true # We do a little trolling
- type: Extractable - type: Extractable
@@ -222,7 +222,7 @@
- type: Tag - type: Tag
tags: tags:
- Fruit - Fruit
- type: entity - type: entity
name: mimana name: mimana
parent: FoodProduceBase parent: FoodProduceBase
@@ -314,7 +314,7 @@
state: peel state: peel
- type: Item - type: Item
sprite: Objects/Specific/Hydroponics/mimana.rsi sprite: Objects/Specific/Hydroponics/mimana.rsi
heldPrefix: peel heldPrefix: peel
- type: Slippery - type: Slippery
slipSound: slipSound:
path: /Audio/Effects/slip.ogg path: /Audio/Effects/slip.ogg
@@ -836,7 +836,7 @@
sprite: Objects/Specific/Hydroponics/corn.rsi sprite: Objects/Specific/Hydroponics/corn.rsi
state: cob state: cob
- type: Item - type: Item
size: Tiny size: 1
- type: Tag - type: Tag
tags: tags:
- Trash - Trash
@@ -1237,7 +1237,7 @@
- type: Tag - type: Tag
tags: tags:
- Galaxythistle - Galaxythistle
- Fruit # Probably? - Fruit # Probably?
- type: entity - type: entity
name: fly amanita name: fly amanita
@@ -1365,7 +1365,7 @@
description: Round green object that you can slice and eat. description: Round green object that you can slice and eat.
components: components:
- type: Item - type: Item
size: Small size: 10
- type: FlavorProfile - type: FlavorProfile
flavors: flavors:
- watermelon - watermelon
@@ -1427,7 +1427,7 @@
description: Juicy green and red slice. description: Juicy green and red slice.
components: components:
- type: Item - type: Item
size: Tiny size: 2
- type: FlavorProfile - type: FlavorProfile
flavors: flavors:
- watermelon - watermelon

View File

@@ -17,7 +17,7 @@
- ReagentId: Nutriment - ReagentId: Nutriment
Quantity: 8 Quantity: 8
- type: Item - type: Item
size: Small size: 5
# Kebabs # Kebabs

View File

@@ -21,7 +21,7 @@
- type: Item - type: Item
sprite: Objects/Consumable/Food/snacks.rsi sprite: Objects/Consumable/Food/snacks.rsi
heldPrefix: packet heldPrefix: packet
size: Tiny size: 3
# Snacks # Snacks
# "Snacks" means food in a packet. Down the line this stuff can have multiple # "Snacks" means food in a packet. Down the line this stuff can have multiple
@@ -101,7 +101,7 @@
state: chocolatebar state: chocolatebar
- type: Item - type: Item
heldPrefix: chocolatebar heldPrefix: chocolatebar
size: Tiny size: 3
- type: Tag - type: Tag
tags: tags:
- FoodSnack - FoodSnack
@@ -346,7 +346,7 @@
- type: Item - type: Item
sprite: Objects/Consumable/Food/snacks.rsi sprite: Objects/Consumable/Food/snacks.rsi
heldPrefix: packet heldPrefix: packet
size: Tiny size: 1
- type: Food - type: Food
trash: FoodCookieFortune trash: FoodCookieFortune
@@ -357,7 +357,7 @@
description: A carefully synthesized brick designed to contain the highest ratio of nutriment to volume. Tastes like shit. description: A carefully synthesized brick designed to contain the highest ratio of nutriment to volume. Tastes like shit.
components: components:
- type: Item - type: Item
size: Small size: 10
- type: Tag - type: Tag
tags: tags:
- FoodSnack - FoodSnack
@@ -381,7 +381,7 @@
flavors: flavors:
- nutribrick - nutribrick
- type: Item - type: Item
size: Small size: 10
- type: Sprite - type: Sprite
state: nutribrick-open state: nutribrick-open
- type: Food - type: Food

View File

@@ -10,9 +10,11 @@
- state: closed - state: closed
- state: open - state: open
map: ["openLayer"] map: ["openLayer"]
- type: Storage
capacity: 36
- type: Item - type: Item
sprite: Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi sprite: Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi
size: Normal size: 36
- type: StorageFill - type: StorageFill
contents: contents:
- id: CigPackGreen - id: CigPackGreen

View File

@@ -17,7 +17,7 @@
slots: [ mask ] slots: [ mask ]
equippedPrefix: unlit equippedPrefix: unlit
- type: Item - type: Item
size: Tiny size: 1
- type: Construction - type: Construction
graph: smokeableCigarette graph: smokeableCigarette
node: cigarette node: cigarette
@@ -41,7 +41,7 @@
slots: [ mask ] slots: [ mask ]
equippedPrefix: unlit equippedPrefix: unlit
- type: Item - type: Item
size: Tiny size: 1
- type: Construction - type: Construction
graph: smokeableCigarette graph: smokeableCigarette
node: cigarette node: cigarette

View File

@@ -17,7 +17,7 @@
slots: [ mask ] slots: [ mask ]
equippedPrefix: unlit equippedPrefix: unlit
- type: Item - type: Item
size: Tiny size: 1
- type: Construction - type: Construction
graph: smokeableJoint graph: smokeableJoint
node: joint node: joint
@@ -48,7 +48,7 @@
slots: [ mask ] slots: [ mask ]
equippedPrefix: unlit equippedPrefix: unlit
- type: Item - type: Item
size: Tiny size: 1
- type: Construction - type: Construction
graph: smokeableBlunt graph: smokeableBlunt
node: blunt node: blunt

View File

@@ -43,9 +43,9 @@
Steel: 50 Steel: 50
- type: SpaceGarbage - type: SpaceGarbage
- type: Storage - type: Storage
maxSlots: 5 capacity: 5
- type: Item - type: Item
size: Small size: 5
- type: StorageFill - type: StorageFill
contents: contents:
- id: Cigarette - id: Cigarette
@@ -108,10 +108,9 @@
Steel: 50 Steel: 50
- type: SpaceGarbage - type: SpaceGarbage
- type: Storage - type: Storage
maxSlots: 10 capacity: 10
maxTotalWeight: 20
- type: Item - type: Item
size: Small size: 10
- type: StorageFill - type: StorageFill
contents: contents:
- id: CigaretteRandom - id: CigaretteRandom

View File

@@ -9,7 +9,7 @@
tags: tags:
- RollingPaper - RollingPaper
- CigFilter - CigFilter
maxSlots: 20 capacity: 20
- type: StorageFill - type: StorageFill
contents: contents:
- id: PaperRolling - id: PaperRolling
@@ -31,6 +31,7 @@
tags: tags:
- RollingPaper - RollingPaper
- CigFilter - CigFilter
capacity: 32
- type: StorageFill - type: StorageFill
contents: contents:
- id: PaperRolling - id: PaperRolling
@@ -53,7 +54,7 @@
state: cigpaper state: cigpaper
- type: Item - type: Item
sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi
size: Tiny size: 5
- type: Tag - type: Tag
tags: tags:
- RollingPaper - RollingPaper
@@ -67,6 +68,8 @@
components: components:
- type: Stack - type: Stack
count: 1 count: 1
- type: Item
size: 1
- type: entity - type: entity
id: CigaretteFilter id: CigaretteFilter
@@ -83,7 +86,7 @@
state: cigfilter state: cigfilter
- type: Item - type: Item
sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi
size: Tiny size: 10
- type: Tag - type: Tag
tags: tags:
- CigFilter - CigFilter
@@ -96,3 +99,5 @@
components: components:
- type: Stack - type: Stack
count: 1 count: 1
- type: Item
size: 2

View File

@@ -35,10 +35,10 @@
map: ["cigar8"] map: ["cigar8"]
visible: false visible: false
- type: Storage - type: Storage
maxSlots: 8 capacity: 8
- type: Item - type: Item
sprite: Objects/Consumable/Smokeables/Cigars/case.rsi sprite: Objects/Consumable/Smokeables/Cigars/case.rsi
size: Small size: 8
- type: StorageFill - type: StorageFill
contents: contents:
- id: Cigar - id: Cigar

View File

@@ -19,7 +19,7 @@
slots: [ mask ] slots: [ mask ]
equippedPrefix: unlit equippedPrefix: unlit
- type: Item - type: Item
size: Tiny size: 1
- type: entity - type: entity
id: CigarSpent id: CigarSpent
@@ -49,7 +49,7 @@
slots: [ mask ] slots: [ mask ]
equippedPrefix: unlit equippedPrefix: unlit
- type: Item - type: Item
size: Tiny size: 1
- type: entity - type: entity
id: CigarGoldSpent id: CigarGoldSpent

View File

@@ -12,7 +12,7 @@
slots: [ mask ] slots: [ mask ]
equippedPrefix: unlit equippedPrefix: unlit
- type: Item - type: Item
size: Tiny size: 3
sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
- type: Appearance - type: Appearance
- type: BurnStateVisuals - type: BurnStateVisuals

View File

@@ -9,6 +9,6 @@
layers: layers:
- state: icon - state: icon
- type: Item - type: Item
size: Huge size: 1001
- type: StaticPrice - type: StaticPrice
price: 0 price: 0

View File

@@ -15,7 +15,9 @@
suffix: Empty suffix: Empty
components: components:
- type: Item - type: Item
size: Normal size: 30
- type: Storage
capacity: 30
- type: entity - type: entity
id: PresentRandomUnsafe id: PresentRandomUnsafe

View File

@@ -17,7 +17,7 @@
sprite: Objects/Devices/timer.rsi sprite: Objects/Devices/timer.rsi
state: timer state: timer
- type: Item - type: Item
size: Small size: 5
- type: PayloadTrigger - type: PayloadTrigger
components: components:
- type: OnUseTimerTrigger - type: OnUseTimerTrigger

View File

@@ -6,9 +6,9 @@
components: components:
- type: Sprite - type: Sprite
sprite: Objects/Misc/module.rsi sprite: Objects/Misc/module.rsi
state: abductor_mod state: abductor_mod
- type: Item - type: Item
size: Small size: 10
- type: Tag - type: Tag
tags: tags:
- WeaponPistolCHIMPUpgradeKit - WeaponPistolCHIMPUpgradeKit

View File

@@ -8,7 +8,7 @@
sprite: Objects/Devices/forensic_scanner.rsi sprite: Objects/Devices/forensic_scanner.rsi
state: forensicnew state: forensicnew
- type: Item - type: Item
size: Small size: 5
- type: Clothing - type: Clothing
sprite: Objects/Devices/forensic_scanner.rsi sprite: Objects/Devices/forensic_scanner.rsi
quickEquip: false quickEquip: false

View File

@@ -37,7 +37,7 @@
components: components:
- IdCard - IdCard
- type: Item - type: Item
size: Tiny size: 10
- type: ContainerContainer - type: ContainerContainer
containers: containers:
PDA-id: !type:ContainerSlot {} PDA-id: !type:ContainerSlot {}

View File

@@ -16,7 +16,7 @@
- key: enum.InstrumentUiKey.Key - key: enum.InstrumentUiKey.Key
type: InstrumentBoundUserInterface type: InstrumentBoundUserInterface
- type: Item - type: Item
size: Normal size: 24
- type: StaticPrice - type: StaticPrice
price: 200 price: 200

View File

@@ -14,7 +14,7 @@
sprite: Objects/Fun/Instruments/trumpet.rsi sprite: Objects/Fun/Instruments/trumpet.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/trumpet.rsi sprite: Objects/Fun/Instruments/trumpet.rsi
- type: Tag - type: Tag
tags: tags:
@@ -32,7 +32,7 @@
sprite: Objects/Fun/Instruments/trombone.rsi sprite: Objects/Fun/Instruments/trombone.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 48
sprite: Objects/Fun/Instruments/trombone.rsi sprite: Objects/Fun/Instruments/trombone.rsi
- type: Tag - type: Tag
tags: tags:
@@ -50,7 +50,7 @@
sprite: Objects/Fun/Instruments/frenchhorn.rsi sprite: Objects/Fun/Instruments/frenchhorn.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 48
sprite: Objects/Fun/Instruments/frenchhorn.rsi sprite: Objects/Fun/Instruments/frenchhorn.rsi
- type: Tag - type: Tag
tags: tags:
@@ -69,7 +69,7 @@
sprite: Objects/Fun/Instruments/euphonium.rsi sprite: Objects/Fun/Instruments/euphonium.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 48
sprite: Objects/Fun/Instruments/euphonium.rsi sprite: Objects/Fun/Instruments/euphonium.rsi
- type: Tag - type: Tag
tags: tags:

View File

@@ -10,7 +10,7 @@
- type: Instrument - type: Instrument
program: 121 program: 121
- type: Item - type: Item
size: Small size: 10
- type: entity - type: entity
parent: BaseHandheldInstrument parent: BaseHandheldInstrument
@@ -24,7 +24,7 @@
- type: Instrument - type: Instrument
program: 122 program: 122
- type: Item - type: Item
size: Small size: 10
- type: entity - type: entity
parent: BaseHandheldInstrument parent: BaseHandheldInstrument
@@ -38,7 +38,7 @@
- type: Instrument - type: Instrument
program: 123 program: 123
- type: Item - type: Item
size: Tiny size: 5
- type: entity - type: entity
parent: BaseHandheldInstrument parent: BaseHandheldInstrument
@@ -55,7 +55,7 @@
- type: Instrument - type: Instrument
program: 124 program: 124
- type: Item - type: Item
size: Small size: 10
- type: Prayable - type: Prayable
sentMessage: prayer-popup-notify-centcom-sent sentMessage: prayer-popup-notify-centcom-sent
notifiactionPrefix: prayer-chat-notify-centcom notifiactionPrefix: prayer-chat-notify-centcom
@@ -74,7 +74,7 @@
- type: Instrument - type: Instrument
program: 125 program: 125
- type: Item - type: Item
size: Small size: 10
- type: entity - type: entity
parent: BaseHandheldInstrument parent: BaseHandheldInstrument
@@ -88,7 +88,7 @@
- type: Instrument - type: Instrument
program: 126 program: 126
- type: Item - type: Item
size: Tiny size: 5
- type: entity - type: entity
parent: BaseHandheldInstrument parent: BaseHandheldInstrument
@@ -102,7 +102,7 @@
sprite: Objects/Fun/Instruments/gunpet.rsi sprite: Objects/Fun/Instruments/gunpet.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 15
sprite: Objects/Fun/Instruments/gunpet.rsi sprite: Objects/Fun/Instruments/gunpet.rsi
- type: Tag - type: Tag
tags: tags:
@@ -125,7 +125,7 @@
- BrassInstrument #Go figure. - BrassInstrument #Go figure.
- type: Item - type: Item
sprite: Objects/Fun/Instruments/bike_horn.rsi sprite: Objects/Fun/Instruments/bike_horn.rsi
size: Small size: 10
- type: Clothing - type: Clothing
sprite: Objects/Fun/Instruments/bike_horn.rsi sprite: Objects/Fun/Instruments/bike_horn.rsi
slots: [Belt] slots: [Belt]

View File

@@ -9,7 +9,7 @@
sprite: Objects/Fun/Instruments/glockenspiel.rsi sprite: Objects/Fun/Instruments/glockenspiel.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/glockenspiel.rsi sprite: Objects/Fun/Instruments/glockenspiel.rsi
- type: Tag - type: Tag
tags: tags:
@@ -58,7 +58,7 @@
sprite: Objects/Fun/Instruments/microphone.rsi sprite: Objects/Fun/Instruments/microphone.rsi
state: icon state: icon
- type: Item - type: Item
size: Small size: 10
sprite: Objects/Fun/Instruments/microphone.rsi sprite: Objects/Fun/Instruments/microphone.rsi
- type: entity - type: entity
@@ -76,7 +76,7 @@
sprite: Objects/Fun/Instruments/h_synthesizer.rsi sprite: Objects/Fun/Instruments/h_synthesizer.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/h_synthesizer.rsi sprite: Objects/Fun/Instruments/h_synthesizer.rsi
- type: Tag - type: Tag
tags: tags:
@@ -135,5 +135,5 @@
sprite: Objects/Fun/Instruments/h_synthesizer.rsi sprite: Objects/Fun/Instruments/h_synthesizer.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/h_synthesizer.rsi sprite: Objects/Fun/Instruments/h_synthesizer.rsi

View File

@@ -15,7 +15,7 @@
sprite: Objects/Fun/Instruments/eguitar.rsi sprite: Objects/Fun/Instruments/eguitar.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/eguitar.rsi sprite: Objects/Fun/Instruments/eguitar.rsi
- type: Clothing - type: Clothing
quickEquip: false quickEquip: false
@@ -44,7 +44,7 @@
sprite: Objects/Fun/Instruments/bassguitar.rsi sprite: Objects/Fun/Instruments/bassguitar.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/bassguitar.rsi sprite: Objects/Fun/Instruments/bassguitar.rsi
- type: Clothing - type: Clothing
quickEquip: false quickEquip: false
@@ -72,7 +72,7 @@
sprite: Objects/Fun/Instruments/rockguitar.rsi sprite: Objects/Fun/Instruments/rockguitar.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/rockguitar.rsi sprite: Objects/Fun/Instruments/rockguitar.rsi
- type: Clothing - type: Clothing
quickEquip: false quickEquip: false
@@ -115,7 +115,7 @@
- StringInstrument - StringInstrument
- type: Item - type: Item
sprite: Objects/Fun/Instruments/guitar.rsi sprite: Objects/Fun/Instruments/guitar.rsi
size: Normal size: 24
- type: Clothing - type: Clothing
quickEquip: false quickEquip: false
slots: slots:
@@ -178,7 +178,7 @@
sprite: Objects/Fun/Instruments/banjo.rsi sprite: Objects/Fun/Instruments/banjo.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/banjo.rsi sprite: Objects/Fun/Instruments/banjo.rsi
- type: Tag - type: Tag
tags: tags:
@@ -200,7 +200,7 @@
sprite: Objects/Fun/Instruments/violin.rsi sprite: Objects/Fun/Instruments/violin.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/violin.rsi sprite: Objects/Fun/Instruments/violin.rsi
- type: Tag - type: Tag
tags: tags:
@@ -218,7 +218,7 @@
sprite: Objects/Fun/Instruments/viola.rsi sprite: Objects/Fun/Instruments/viola.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/viola.rsi sprite: Objects/Fun/Instruments/viola.rsi
- type: Tag - type: Tag
tags: tags:
@@ -236,7 +236,7 @@
sprite: Objects/Fun/Instruments/cello.rsi sprite: Objects/Fun/Instruments/cello.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 48
sprite: Objects/Fun/Instruments/cello.rsi sprite: Objects/Fun/Instruments/cello.rsi
- type: Tag - type: Tag
tags: tags:

View File

@@ -16,7 +16,7 @@
sprite: Objects/Fun/Instruments/saxophone.rsi sprite: Objects/Fun/Instruments/saxophone.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/saxophone.rsi sprite: Objects/Fun/Instruments/saxophone.rsi
- type: Tag - type: Tag
tags: tags:
@@ -45,7 +45,7 @@
sprite: Objects/Fun/Instruments/accordion.rsi sprite: Objects/Fun/Instruments/accordion.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/accordion.rsi sprite: Objects/Fun/Instruments/accordion.rsi
- type: Tag - type: Tag
tags: tags:
@@ -62,7 +62,7 @@
sprite: Objects/Fun/Instruments/harmonica.rsi sprite: Objects/Fun/Instruments/harmonica.rsi
state: icon state: icon
- type: Item - type: Item
size: Small size: 10
sprite: Objects/Fun/Instruments/harmonica.rsi sprite: Objects/Fun/Instruments/harmonica.rsi
- type: Tag - type: Tag
tags: tags:
@@ -80,7 +80,7 @@
sprite: Objects/Fun/Instruments/clarinet.rsi sprite: Objects/Fun/Instruments/clarinet.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 20
sprite: Objects/Fun/Instruments/clarinet.rsi sprite: Objects/Fun/Instruments/clarinet.rsi
- type: Tag - type: Tag
tags: tags:
@@ -98,7 +98,7 @@
sprite: Objects/Fun/Instruments/flute.rsi sprite: Objects/Fun/Instruments/flute.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 20
sprite: Objects/Fun/Instruments/flute.rsi sprite: Objects/Fun/Instruments/flute.rsi
- type: Tag - type: Tag
tags: tags:
@@ -116,7 +116,7 @@
sprite: Objects/Fun/Instruments/recorder.rsi sprite: Objects/Fun/Instruments/recorder.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/Instruments/recorder.rsi sprite: Objects/Fun/Instruments/recorder.rsi
- type: Tag - type: Tag
tags: tags:
@@ -134,7 +134,7 @@
sprite: Objects/Fun/Instruments/panflute.rsi sprite: Objects/Fun/Instruments/panflute.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 15
sprite: Objects/Fun/Instruments/panflute.rsi sprite: Objects/Fun/Instruments/panflute.rsi
- type: Tag - type: Tag
tags: tags:
@@ -153,7 +153,7 @@
sprite: Objects/Fun/Instruments/ocarina.rsi sprite: Objects/Fun/Instruments/ocarina.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 15
sprite: Objects/Fun/Instruments/ocarina.rsi sprite: Objects/Fun/Instruments/ocarina.rsi
- type: Tag - type: Tag
tags: tags:
@@ -171,8 +171,8 @@
sprite: Objects/Fun/Instruments/bagpipes.rsi sprite: Objects/Fun/Instruments/bagpipes.rsi
state: icon state: icon
- type: Item - type: Item
size: Normal size: 48
sprite: Objects/Fun/Instruments/bagpipes.rsi sprite: Objects/Fun/Instruments/bagpipes.rsi
- type: Tag - type: Tag
tags: tags:
- WoodwindInstrument - WoodwindInstrument

View File

@@ -9,7 +9,7 @@
state: icon state: icon
- type: Item - type: Item
sprite: Objects/Fun/bikehorn.rsi sprite: Objects/Fun/bikehorn.rsi
size: Tiny size: 5
- type: Clothing - type: Clothing
sprite: Objects/Fun/bikehorn.rsi sprite: Objects/Fun/bikehorn.rsi
slots: [Belt] slots: [Belt]
@@ -58,7 +58,7 @@
state: icon state: icon
- type: Item - type: Item
sprite: Objects/Fun/cluwnehorn.rsi sprite: Objects/Fun/cluwnehorn.rsi
size: Tiny size: 5
- type: Clothing - type: Clothing
sprite: Objects/Fun/cluwnehorn.rsi sprite: Objects/Fun/cluwnehorn.rsi
slots: [Belt] slots: [Belt]
@@ -100,7 +100,7 @@
state: icon state: icon
- type: Item - type: Item
sprite: Objects/Fun/goldbikehorn.rsi sprite: Objects/Fun/goldbikehorn.rsi
size: Tiny size: 5
- type: Clothing - type: Clothing
sprite: Objects/Fun/goldbikehorn.rsi sprite: Objects/Fun/goldbikehorn.rsi
slots: [Belt] slots: [Belt]
@@ -119,7 +119,7 @@
state: icon state: icon
- type: Item - type: Item
sprite: Objects/Fun/bananiumhorn.rsi sprite: Objects/Fun/bananiumhorn.rsi
size: Tiny size: 5
- type: Clothing - type: Clothing
sprite: Objects/Fun/bananiumhorn.rsi sprite: Objects/Fun/bananiumhorn.rsi
slots: [Belt] slots: [Belt]

View File

@@ -9,7 +9,7 @@
sprite: Objects/Fun/crayons.rsi sprite: Objects/Fun/crayons.rsi
- type: Item - type: Item
sprite: Objects/Fun/crayons.rsi sprite: Objects/Fun/crayons.rsi
size: Tiny size: 1
- type: Tag - type: Tag
tags: tags:
- Write - Write
@@ -235,11 +235,10 @@
sprite: Objects/Fun/crayons.rsi sprite: Objects/Fun/crayons.rsi
state: box state: box
- type: Storage - type: Storage
maxSlots: 7 capacity: 7
maxTotalWeight: 7
- type: Item - type: Item
sprite: Objects/Fun/crayons.rsi sprite: Objects/Fun/crayons.rsi
size: Small size: 7
heldPrefix: box heldPrefix: box
- type: StorageFill - type: StorageFill
contents: contents:

View File

@@ -40,7 +40,7 @@
types: types:
Piercing: 4 Piercing: 4
- type: Item - type: Item
size: Tiny size: 2
sprite: Objects/Fun/Darts/dart_red.rsi sprite: Objects/Fun/Darts/dart_red.rsi
- type: ItemCooldown - type: ItemCooldown
- type: SolutionContainerManager - type: SolutionContainerManager
@@ -86,7 +86,7 @@
- type: SolutionContainerVisuals - type: SolutionContainerVisuals
maxFillLevels: 1 maxFillLevels: 1
fillBaseName: dart fillBaseName: dart
- type: entity - type: entity
parent: Dart parent: Dart
id: DartBlue id: DartBlue
@@ -95,7 +95,7 @@
sprite: Objects/Fun/Darts/dart_blue.rsi sprite: Objects/Fun/Darts/dart_blue.rsi
- type: Item - type: Item
sprite: Objects/Fun/Darts/dart_blue.rsi sprite: Objects/Fun/Darts/dart_blue.rsi
- type: entity - type: entity
parent: Dart parent: Dart
id: DartPurple id: DartPurple
@@ -104,7 +104,7 @@
sprite: Objects/Fun/Darts/dart_purple.rsi sprite: Objects/Fun/Darts/dart_purple.rsi
- type: Item - type: Item
sprite: Objects/Fun/Darts/dart_purple.rsi sprite: Objects/Fun/Darts/dart_purple.rsi
- type: entity - type: entity
parent: Dart parent: Dart
id: DartYellow id: DartYellow

View File

@@ -13,7 +13,7 @@
tags: tags:
- Dice - Dice
- type: Item - type: Item
size: Tiny size: 2
- type: entity - type: entity
parent: BaseDice parent: BaseDice

View File

@@ -17,11 +17,11 @@
sprite: Objects/Fun/dice.rsi sprite: Objects/Fun/dice.rsi
state: dicebag state: dicebag
- type: Item - type: Item
size: Small
- type: Storage - type: Storage
capacity: 18
whitelist: whitelist:
tags: tags:
- Dice - Dice
- type: entity - type: entity
parent: DiceBag parent: DiceBag
@@ -32,5 +32,4 @@
sprite: Objects/Fun/dice.rsi sprite: Objects/Fun/dice.rsi
state: magicdicebag state: magicdicebag
- type: Storage - type: Storage
maxSlots: 14 capacity: 30
maxTotalWeight: 28

View File

@@ -14,7 +14,7 @@
- type: DoAfter - type: DoAfter
- type: VentriloquistPuppet - type: VentriloquistPuppet
- type: Item - type: Item
size: Normal size: 30
- type: Muted - type: Muted
- type: TypingIndicator - type: TypingIndicator
proto: robot proto: robot

View File

@@ -554,7 +554,7 @@
components: components:
- type: Sprite - type: Sprite
- type: Item - type: Item
size: Normal size: 24
- type: entity - type: entity
parent: FoamWeaponBase parent: FoamWeaponBase
@@ -566,7 +566,7 @@
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
state: foamcrossbow state: foamcrossbow
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: foamcrossbow heldPrefix: foamcrossbow
- type: Gun - type: Gun
@@ -672,7 +672,7 @@
types: types:
Blunt: 0 Blunt: 0
- type: Item - type: Item
size: Small size: 20
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: foamblade heldPrefix: foamblade
- type: ItemCooldown - type: ItemCooldown
@@ -692,7 +692,7 @@
sound: sound:
path: /Audio/Effects/Footsteps/bounce.ogg path: /Audio/Effects/Footsteps/bounce.ogg
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: bask heldPrefix: bask
- type: TileFrictionModifier - type: TileFrictionModifier
@@ -708,7 +708,7 @@
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
state: football state: football
- type: Item - type: Item
size: Small size: 12
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: footb heldPrefix: footb
@@ -725,7 +725,7 @@
sound: sound:
path: /Audio/Effects/Footsteps/bounce.ogg path: /Audio/Effects/Footsteps/bounce.ogg
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: beachb heldPrefix: beachb
- type: TileFrictionModifier - type: TileFrictionModifier
@@ -741,7 +741,7 @@
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
state: synb state: synb
- type: Item - type: Item
size: Small size: 24
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: synb heldPrefix: synb
- type: Damageable - type: Damageable
@@ -760,7 +760,7 @@
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
state: corgib state: corgib
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: corgib heldPrefix: corgib
- type: Damageable - type: Damageable
@@ -785,7 +785,7 @@
intensity: 2000 intensity: 2000
falloffPower: 2.6 falloffPower: 2.6
- type: Item - type: Item
size: Small size: 12
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: singularitytoy heldPrefix: singularitytoy
@@ -803,7 +803,7 @@
radius: 2 radius: 2
color: "#00CCFF" color: "#00CCFF"
- type: Item - type: Item
size: Normal size: 24
sprite: Objects/Fun/toys.rsi sprite: Objects/Fun/toys.rsi
heldPrefix: orb heldPrefix: orb
- type: TileFrictionModifier - type: TileFrictionModifier
@@ -828,7 +828,7 @@
shader: unshaded shader: unshaded
map: [ "blade" ] map: [ "blade" ]
- type: Item - type: Item
size: Small size: 5
sprite: Objects/Weapons/Melee/e_sword.rsi sprite: Objects/Weapons/Melee/e_sword.rsi
- type: UseDelay - type: UseDelay
delay: 1.0 delay: 1.0
@@ -892,7 +892,7 @@
types: types:
Blunt: 0 Blunt: 0
- type: Item - type: Item
size: Normal size: 15
sprite: Objects/Weapons/Melee/cutlass.rsi sprite: Objects/Weapons/Melee/cutlass.rsi
- type: entity - type: entity
@@ -934,7 +934,7 @@
- type: StaminaDamageOnHit - type: StaminaDamageOnHit
damage: 8 damage: 8
- type: Item - type: Item
size: Small size: 5
sprite: Objects/Fun/rubber_hammer.rsi sprite: Objects/Fun/rubber_hammer.rsi
- type: Appearance - type: Appearance
- type: DisarmMalus - type: DisarmMalus

View File

@@ -9,7 +9,7 @@
sprite: Objects/Materials/Sheets/glass.rsi sprite: Objects/Materials/Sheets/glass.rsi
- type: Item - type: Item
sprite: Objects/Materials/Sheets/glass.rsi sprite: Objects/Materials/Sheets/glass.rsi
size: Normal size: 30
- type: StaticPrice - type: StaticPrice
price: 0 price: 0
- type: Tag - type: Tag
@@ -83,6 +83,8 @@
- type: Stack - type: Stack
stackType: Glass stackType: Glass
count: 10 count: 10
- type: Item
size: 10
- type: entity - type: entity
parent: SheetGlass parent: SheetGlass
@@ -94,12 +96,16 @@
- type: Stack - type: Stack
stackType: Glass stackType: Glass
count: 1 count: 1
- type: Item
size: 1
- type: entity - type: entity
parent: SheetGlass parent: SheetGlass
id: SheetGlassLingering0 id: SheetGlassLingering0
suffix: Lingering, 0 suffix: Lingering, 0
components: components:
- type: Item
size: 0
- type: Stack - type: Stack
lingering: true lingering: true
count: 0 count: 0
@@ -168,6 +174,8 @@
- type: Stack - type: Stack
stackType: ReinforcedGlass stackType: ReinforcedGlass
count: 1 count: 1
- type: Item
size: 1
- type: entity - type: entity
parent: SheetGlassBase parent: SheetGlassBase
@@ -193,6 +201,7 @@
map: ["base"] map: ["base"]
- type: Item - type: Item
heldPrefix: pglass heldPrefix: pglass
size: 30
- type: Construction - type: Construction
graph: Glass graph: Glass
node: SheetPGlass node: SheetPGlass
@@ -230,6 +239,8 @@
- type: Stack - type: Stack
stackType: PlasmaGlass stackType: PlasmaGlass
count: 1 count: 1
- type: Item
size: 1
- type: entity - type: entity
parent: SheetPGlass parent: SheetPGlass
@@ -270,6 +281,8 @@
- type: Stack - type: Stack
stackType: ReinforcedPlasmaGlass stackType: ReinforcedPlasmaGlass
count: 1 count: 1
- type: Item
size: 1
- type: entity - type: entity
parent: SheetGlassBase parent: SheetGlassBase
@@ -332,6 +345,8 @@
- type: Stack - type: Stack
stackType: UraniumGlass stackType: UraniumGlass
count: 1 count: 1
- type: Item
size: 1
- type: entity - type: entity
parent: SheetUGlass parent: SheetUGlass
@@ -371,3 +386,5 @@
- type: Stack - type: Stack
stackType: ReinforcedUraniumGlass stackType: ReinforcedUraniumGlass
count: 1 count: 1
- type: Item
size: 1

Some files were not shown because too many files have changed in this diff Show More