mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 05:27:38 +03:00
Salvage / Borg Tweaks (#2145)
<!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> Originally started because I wanted to add some stuff to salvage, but ended up with me porting over whitelisted borg hands, the PKA module, and some other stuff. --- # Changelog <!-- You can add an author after the `🆑` to change the name that appears in the changelog (ex: `🆑 Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> 🆑 - add: Engi borgs can now carry electronics, and medical borgs can carry organs - add: Salvage borgs now get a PKA module - tweak: All mining drills have had their damage turned to piercing and have received a moderate damage buff - tweak: Exosuit drills now swing at the same speed as normal drills (why were they worse???) - tweak: The RPD and RCD modules for borg have been merged into one - tweak: Salvage can now purchase drills from their vendor - tweak: Salvage borgs mining module no longer contains a shovel --------- Co-authored-by: Your Name <EctoplasmIsGood@users.noreply.github.com> Co-authored-by: Whatstone <whatston3@gmail.com> Co-authored-by: RatherUncreative <RatherUncreativeName@proton.me> Co-authored-by: Aidenkrz <aiden@djkraz.com> (cherry picked from commit ed8850e551bd9c0d533d69cad262a8743442a62a)
This commit is contained in:
committed by
Spatison
parent
1ae1e9f913
commit
9a65bedfc4
@@ -13,6 +13,7 @@ using Robust.Client.UserInterface.Controllers;
|
||||
using Robust.Shared.Input;
|
||||
using Robust.Shared.Timing;
|
||||
using Robust.Shared.Utility;
|
||||
using Content.Shared._NF.Interaction.Components;
|
||||
|
||||
namespace Content.Client.UserInterface.Systems.Hands;
|
||||
|
||||
@@ -133,6 +134,13 @@ public sealed class HandsUIController : UIController, IOnStateEntered<GameplaySt
|
||||
handButton.SetEntity(virt.BlockingEntity);
|
||||
handButton.Blocked = true;
|
||||
}
|
||||
// Frontier - borg hand placeholder
|
||||
else if (_entities.TryGetComponent(hand.HeldEntity, out HandPlaceholderVisualsComponent? placeholder))
|
||||
{
|
||||
handButton.SetEntity(placeholder.Dummy);
|
||||
handButton.Blocked = true;
|
||||
}
|
||||
// End Frontier - borg hand placeholder
|
||||
else
|
||||
{
|
||||
handButton.SetEntity(hand.HeldEntity);
|
||||
@@ -184,6 +192,13 @@ public sealed class HandsUIController : UIController, IOnStateEntered<GameplaySt
|
||||
hand.SetEntity(virt.BlockingEntity);
|
||||
hand.Blocked = true;
|
||||
}
|
||||
// Frontier: borg hand placeholders
|
||||
else if (_entities.TryGetComponent(entity, out HandPlaceholderVisualsComponent? placeholder))
|
||||
{
|
||||
hand.SetEntity(placeholder.Dummy);
|
||||
hand.Blocked = true;
|
||||
}
|
||||
// End Frontier: borg hand placeholders
|
||||
else
|
||||
{
|
||||
hand.SetEntity(entity);
|
||||
|
||||
13
Content.Client/_NF/Hands/UI/HandPlaceholderStatus.cs
Normal file
13
Content.Client/_NF/Hands/UI/HandPlaceholderStatus.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
|
||||
namespace Content.Client._NF.Hands.UI
|
||||
{
|
||||
public sealed class HandPlaceholderStatus : Control
|
||||
{
|
||||
public HandPlaceholderStatus()
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Content.Client/_NF/Hands/UI/HandPlaceholderStatus.xaml
Normal file
3
Content.Client/_NF/Hands/UI/HandPlaceholderStatus.xaml
Normal file
@@ -0,0 +1,3 @@
|
||||
<Control xmlns="https://spacestation14.io">
|
||||
<Label StyleClasses="ItemStatus" Text="{Loc 'hand-placeholder-name'}" />
|
||||
</Control>
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace Content.Shared._NF.Interaction.Components;
|
||||
|
||||
[RegisterComponent]
|
||||
// Client-side component of the HandPlaceholder. Creates and tracks a client-side entity for hand blocking visuals
|
||||
public sealed partial class HandPlaceholderVisualsComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public EntityUid Dummy;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
using Content.Client._NF.Hands.UI;
|
||||
using Content.Client.Items;
|
||||
using Content.Client.Items.Systems;
|
||||
using Content.Shared._NF.Interaction.Components;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
|
||||
namespace Content.Client._NF.Interaction.Systems;
|
||||
|
||||
/// <summary>
|
||||
/// Handles interactions with items that spawn HandPlaceholder items.
|
||||
/// </summary>
|
||||
[UsedImplicitly]
|
||||
public sealed partial class HandPlaceholderVisualsSystem : EntitySystem
|
||||
{
|
||||
[Dependency] ContainerSystem _container = default!;
|
||||
[Dependency] ItemSystem _item = default!;
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<HandPlaceholderComponent, AfterAutoHandleStateEvent>(OnAfterAutoHandleState);
|
||||
|
||||
SubscribeLocalEvent<HandPlaceholderVisualsComponent, ComponentRemove>(PlaceholderRemove);
|
||||
|
||||
Subs.ItemStatus<HandPlaceholderVisualsComponent>(_ => new HandPlaceholderStatus());
|
||||
}
|
||||
|
||||
private void OnAfterAutoHandleState(Entity<HandPlaceholderComponent> ent, ref AfterAutoHandleStateEvent args)
|
||||
{
|
||||
if (!TryComp(ent, out HandPlaceholderVisualsComponent? placeholder))
|
||||
return;
|
||||
|
||||
if (placeholder.Dummy != EntityUid.Invalid)
|
||||
QueueDel(placeholder.Dummy);
|
||||
placeholder.Dummy = Spawn(ent.Comp.Prototype);
|
||||
|
||||
if (_container.IsEntityInContainer(ent))
|
||||
_item.VisualsChanged(ent);
|
||||
}
|
||||
|
||||
private void PlaceholderRemove(Entity<HandPlaceholderVisualsComponent> ent, ref ComponentRemove args)
|
||||
{
|
||||
if (ent.Comp.Dummy != EntityUid.Invalid)
|
||||
QueueDel(ent.Comp.Dummy);
|
||||
}
|
||||
}
|
||||
@@ -104,7 +104,7 @@ public sealed class MaterialArbitrageTest
|
||||
continue;
|
||||
|
||||
var stackProto = protoManager.Index<StackPrototype>(materialStep.MaterialPrototypeId);
|
||||
var spawnProto = protoManager.Index<EntityPrototype>(stackProto.Spawn);
|
||||
var spawnProto = protoManager.Index(stackProto.Spawn);
|
||||
|
||||
if (!spawnProto.Components.ContainsKey(materialName) ||
|
||||
!spawnProto.Components.TryGetValue(compositionName, out var compositionReg))
|
||||
|
||||
@@ -28,7 +28,8 @@ public sealed class PrototypeSaveTest
|
||||
{
|
||||
// The only prototypes that should get ignored are those that REQUIRE setup to get a sprite. At that point it is
|
||||
// the responsibility of the spawner to ensure that a valid sprite is set.
|
||||
"VirtualItem"
|
||||
"VirtualItem",
|
||||
"HandPlaceholder" // Frontier
|
||||
};
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -59,23 +59,27 @@ public sealed class MachineFrameSystem : EntitySystem
|
||||
return;
|
||||
}
|
||||
|
||||
// Machine parts cannot currently satisfy stack/component/tag restrictions. Similarly stacks cannot satisfy
|
||||
// component/tag restrictions. However, there is no reason this cannot be supported in the future. If this
|
||||
// changes, then RegenerateProgress() also needs to be updated.
|
||||
//
|
||||
// If this changes in the future, then RegenerateProgress() also needs to be updated.
|
||||
// Note that one entity is ALLOWED to satisfy more than one kind of component or tag requirements. This is
|
||||
// necessary in order to avoid weird entity-ordering shenanigans in RegenerateProgress().
|
||||
var stack = CompOrNull<StackComponent>(args.Used);
|
||||
var machinePart = CompOrNull<MachinePartComponent>(args.Used);
|
||||
if (stack != null && machinePart != null)
|
||||
{
|
||||
if (TryInsertPartStack(uid, args.Used, component, machinePart, stack))
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle parts
|
||||
if (TryComp<MachinePartComponent>(args.Used, out var machinePart))
|
||||
if (machinePart != null)
|
||||
{
|
||||
if (TryInsertPart(uid, args.Used, component, machinePart))
|
||||
args.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle stacks
|
||||
if (TryComp<StackComponent>(args.Used, out var stack))
|
||||
if (stack != null)
|
||||
{
|
||||
if (TryInsertStack(uid, args.Used, component, stack))
|
||||
args.Handled = true;
|
||||
@@ -191,6 +195,44 @@ public sealed class MachineFrameSystem : EntitySystem
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <returns>Whether or not the function had any effect. Does not indicate success.</returns>
|
||||
private bool TryInsertPartStack(EntityUid uid, EntityUid used, MachineFrameComponent component, MachinePartComponent machinePart, StackComponent stack)
|
||||
{
|
||||
if (!component.Requirements.ContainsKey(machinePart.PartType))
|
||||
return false;
|
||||
|
||||
var progress = component.Progress[machinePart.PartType];
|
||||
var requirement = component.Requirements[machinePart.PartType];
|
||||
|
||||
var needed = requirement - progress;
|
||||
if (needed <= 0)
|
||||
return false;
|
||||
|
||||
var count = stack.Count;
|
||||
if (count < needed)
|
||||
{
|
||||
if (!_container.Insert(used, component.PartContainer))
|
||||
return true;
|
||||
|
||||
component.Progress[machinePart.PartType] += count;
|
||||
return true;
|
||||
}
|
||||
|
||||
var splitStack = _stack.Split(used, needed, Transform(uid).Coordinates, stack);
|
||||
|
||||
if (splitStack == null)
|
||||
return false;
|
||||
|
||||
if (!_container.Insert(splitStack.Value, component.PartContainer))
|
||||
return true;
|
||||
|
||||
component.Progress[machinePart.PartType] += needed;
|
||||
if (IsComplete(component))
|
||||
_popupSystem.PopupEntity(Loc.GetString("machine-frame-component-on-complete"), uid);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <returns>Whether or not the function had any effect. Does not indicate success.</returns>
|
||||
private bool TryInsertStack(EntityUid uid, EntityUid used, MachineFrameComponent component, StackComponent stack)
|
||||
{
|
||||
@@ -328,8 +370,6 @@ public sealed class MachineFrameSystem : EntitySystem
|
||||
{
|
||||
if (TryComp<MachinePartComponent>(part, out var machinePart))
|
||||
{
|
||||
DebugTools.Assert(!HasComp<StackComponent>(part));
|
||||
|
||||
// Check this is part of the requirements...
|
||||
if (!component.Requirements.ContainsKey(machinePart.PartType))
|
||||
continue;
|
||||
@@ -338,7 +378,6 @@ public sealed class MachineFrameSystem : EntitySystem
|
||||
component.Progress[machinePart.PartType] = 1;
|
||||
else
|
||||
component.Progress[machinePart.PartType]++;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using Content.Shared.Silicons.Borgs.Components;
|
||||
using Content.Shared.Whitelist;
|
||||
using Content.Server.Silicons.Borgs.Components;
|
||||
using Robust.Shared.Containers;
|
||||
using Content.Shared._NF.Interaction.Components; // Frontier
|
||||
|
||||
namespace Content.Server.Silicons.Borgs;
|
||||
|
||||
@@ -230,6 +231,63 @@ public sealed partial class BorgSystem
|
||||
component.ProvidedItems.Add(handId, item);
|
||||
}
|
||||
|
||||
// Frontier: droppable cyborg items
|
||||
foreach (var itemProto in component.DroppableItems)
|
||||
{
|
||||
EntityUid item;
|
||||
|
||||
if (!component.ItemsCreated)
|
||||
{
|
||||
item = Spawn(itemProto.ID, xform.Coordinates);
|
||||
var placeComp = EnsureComp<HandPlaceholderRemoveableComponent>(item);
|
||||
placeComp.Whitelist = itemProto.Whitelist;
|
||||
placeComp.Prototype = itemProto.ID;
|
||||
Dirty(item, placeComp);
|
||||
}
|
||||
else
|
||||
{
|
||||
item = component.ProvidedContainer.ContainedEntities
|
||||
.FirstOrDefault(ent => _whitelistSystem.IsWhitelistPassOrNull(itemProto.Whitelist, ent) || TryComp<HandPlaceholderComponent>(ent, out var placeholder));
|
||||
if (!item.IsValid())
|
||||
{
|
||||
Log.Debug($"no items found: {component.ProvidedContainer.ContainedEntities.Count}");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Just in case, make sure the borg can't drop the placeholder.
|
||||
if (!HasComp<HandPlaceholderComponent>(item))
|
||||
{
|
||||
var placeComp = EnsureComp<HandPlaceholderRemoveableComponent>(item);
|
||||
placeComp.Whitelist = itemProto.Whitelist;
|
||||
placeComp.Prototype = itemProto.ID;
|
||||
Dirty(item, placeComp);
|
||||
}
|
||||
}
|
||||
|
||||
if (!item.IsValid())
|
||||
{
|
||||
Log.Debug("no valid item");
|
||||
continue;
|
||||
}
|
||||
|
||||
var handId = $"{uid}-item{component.HandCounter}";
|
||||
component.HandCounter++;
|
||||
_hands.AddHand(chassis, handId, HandLocation.Middle, hands);
|
||||
_hands.DoPickup(chassis, hands.Hands[handId], item, hands);
|
||||
if (hands.Hands[handId].HeldEntity != item)
|
||||
{
|
||||
// If we didn't pick up our expected item, delete the hand. No free hands!
|
||||
_hands.RemoveHand(chassis, handId);
|
||||
}
|
||||
else if (HasComp<HandPlaceholderComponent>(item))
|
||||
{
|
||||
// Placeholders can't be put down, must be changed after picked up (otherwise it'll fail to pick up)
|
||||
EnsureComp<UnremoveableComponent>(item);
|
||||
}
|
||||
component.DroppableProvidedItems.Add(handId, (item, itemProto));
|
||||
}
|
||||
// End Frontier: droppable cyborg items
|
||||
|
||||
component.ItemsCreated = true;
|
||||
}
|
||||
|
||||
@@ -249,6 +307,14 @@ public sealed partial class BorgSystem
|
||||
_hands.RemoveHand(chassis, hand, hands);
|
||||
}
|
||||
component.ProvidedItems.Clear();
|
||||
// Frontier: droppable items
|
||||
foreach (var (hand, item) in component.DroppableProvidedItems)
|
||||
{
|
||||
QueueDel(item.Item1);
|
||||
_hands.RemoveHand(chassis, hand, hands);
|
||||
}
|
||||
component.DroppableProvidedItems.Clear();
|
||||
// End Frontier: droppable items
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -262,6 +328,20 @@ public sealed partial class BorgSystem
|
||||
_hands.RemoveHand(chassis, handId, hands);
|
||||
}
|
||||
component.ProvidedItems.Clear();
|
||||
// Frontier: remove all items from borg hands directly, not from the provided items set
|
||||
foreach (var (handId, _) in component.DroppableProvidedItems)
|
||||
{
|
||||
_hands.TryGetHand(chassis, handId, out var hand, hands);
|
||||
if (hand?.HeldEntity != null)
|
||||
{
|
||||
RemComp<UnremoveableComponent>(hand.HeldEntity.Value);
|
||||
_container.Insert(hand.HeldEntity.Value, component.ProvidedContainer);
|
||||
}
|
||||
|
||||
_hands.RemoveHand(chassis, handId, hands);
|
||||
}
|
||||
component.DroppableProvidedItems.Clear();
|
||||
// End Frontier
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -288,13 +368,16 @@ public sealed partial class BorgSystem
|
||||
|
||||
if (TryComp<ItemBorgModuleComponent>(module, out var itemModuleComp))
|
||||
{
|
||||
var droppableComparer = new DroppableBorgItemComparer(); // Frontier: cached comparer
|
||||
foreach (var containedModuleUid in component.ModuleContainer.ContainedEntities)
|
||||
{
|
||||
if (!TryComp<ItemBorgModuleComponent>(containedModuleUid, out var containedItemModuleComp))
|
||||
continue;
|
||||
|
||||
if (containedItemModuleComp.Items.Count == itemModuleComp.Items.Count &&
|
||||
containedItemModuleComp.Items.All(itemModuleComp.Items.Contains))
|
||||
containedItemModuleComp.DroppableItems.Count == itemModuleComp.DroppableItems.Count && // Frontier
|
||||
containedItemModuleComp.Items.All(itemModuleComp.Items.Contains) &&
|
||||
containedItemModuleComp.DroppableItems.All(x => itemModuleComp.DroppableItems.Contains(x, droppableComparer))) // Frontier
|
||||
{
|
||||
if (user != null)
|
||||
Popup.PopupEntity(Loc.GetString("borg-module-duplicate"), uid, user.Value);
|
||||
@@ -306,6 +389,30 @@ public sealed partial class BorgSystem
|
||||
return true;
|
||||
}
|
||||
|
||||
// Frontier: droppable borg item comparator
|
||||
private sealed class DroppableBorgItemComparer : IEqualityComparer<DroppableBorgItem>
|
||||
{
|
||||
public bool Equals(DroppableBorgItem? x, DroppableBorgItem? y)
|
||||
{
|
||||
// Same object (or both null)
|
||||
if (ReferenceEquals(x, y))
|
||||
return true;
|
||||
// One-side null
|
||||
if (x == null || y == null)
|
||||
return false;
|
||||
// Otherwise, use EntProtoId of item
|
||||
return x.ID == y.ID;
|
||||
}
|
||||
|
||||
public int GetHashCode(DroppableBorgItem obj)
|
||||
{
|
||||
if (obj is null)
|
||||
return 0;
|
||||
return obj.ID.GetHashCode();
|
||||
}
|
||||
}
|
||||
// End Frontier
|
||||
|
||||
/// <summary>
|
||||
/// Check if a module can be removed from a borg.
|
||||
/// </summary>
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace Content.Server.Stack
|
||||
|
||||
// Get a prototype ID to spawn the new entity. Null is also valid, although it should rarely be picked...
|
||||
var prototype = _prototypeManager.TryIndex<StackPrototype>(stack.StackTypeId, out var stackType)
|
||||
? stackType.Spawn
|
||||
? stackType.Spawn.ToString()
|
||||
: Prototype(uid)?.ID;
|
||||
|
||||
// Set the output parameter in the event instance to the newly split stack.
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Content.Server._Goobstation.Whitelist.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Whitelist component for electronics to avoid tag redefinition and collisions
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class ElectronicsComponent : Component;
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Content.Server._Goobstation.Whitelist.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Whitelist component for stock parts to avoid tag redefinition and collisions
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class StockPartComponent : Component;
|
||||
@@ -102,8 +102,7 @@ namespace Content.Shared.Construction
|
||||
foreach (var (stackId, amount) in comp.MaterialIdRequirements)
|
||||
{
|
||||
var stackProto = _prototype.Index<StackPrototype>(stackId);
|
||||
|
||||
if (_prototype.TryIndex(stackProto.Spawn, out var defaultProto) &&
|
||||
if (_prototype.TryIndex(stackProto.Spawn, out var defaultProto) &&
|
||||
defaultProto.TryGetComponent<PhysicalCompositionComponent>(out var physComp))
|
||||
{
|
||||
foreach (var (mat, matAmount) in physComp.MaterialComposition)
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace Content.Shared.Materials
|
||||
/// include which stack we should spawn by default.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public ProtoId<EntityPrototype>? StackEntity;
|
||||
public EntProtoId? StackEntity;
|
||||
|
||||
[DataField]
|
||||
public string Name = string.Empty;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Robust.Shared.Containers;
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
||||
@@ -14,15 +15,27 @@ public sealed partial class ItemBorgModuleComponent : Component
|
||||
/// <summary>
|
||||
/// The items that are provided.
|
||||
/// </summary>
|
||||
[DataField("items", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>), required: true)]
|
||||
[DataField("items", customTypeSerializer: typeof(PrototypeIdListSerializer<EntityPrototype>))] // Frontier: removed
|
||||
public List<string> Items = new();
|
||||
|
||||
/// <summary>
|
||||
/// Frontier: The droppable items that are provided.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public List<DroppableBorgItem> DroppableItems = new();
|
||||
|
||||
/// <summary>
|
||||
/// The entities from <see cref="Items"/> that were spawned.
|
||||
/// </summary>
|
||||
[DataField("providedItems")]
|
||||
public SortedDictionary<string, EntityUid> ProvidedItems = new();
|
||||
|
||||
/// <summary>
|
||||
/// The entities from <see cref="Items"/> that were spawned.
|
||||
/// </summary>
|
||||
[DataField("droppableProvidedItems")]
|
||||
public SortedDictionary<string, (EntityUid, DroppableBorgItem)> DroppableProvidedItems = new();
|
||||
|
||||
/// <summary>
|
||||
/// A counter that ensures a unique
|
||||
/// </summary>
|
||||
@@ -49,3 +62,13 @@ public sealed partial class ItemBorgModuleComponent : Component
|
||||
public string ProvidedContainerId = "provided_container";
|
||||
}
|
||||
|
||||
// Frontier: droppable borg item data definitions
|
||||
[DataDefinition]
|
||||
public sealed partial class DroppableBorgItem
|
||||
{
|
||||
[IdDataField]
|
||||
public EntProtoId ID;
|
||||
|
||||
[DataField]
|
||||
public EntityWhitelist Whitelist;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.Stacks;
|
||||
|
||||
[Prototype("stack")]
|
||||
[Prototype]
|
||||
public sealed partial class StackPrototype : IPrototype
|
||||
{
|
||||
[ViewVariables]
|
||||
@@ -15,33 +15,26 @@ public sealed partial class StackPrototype : IPrototype
|
||||
/// Human-readable name for this stack type e.g. "Steel"
|
||||
/// </summary>
|
||||
/// <remarks>This is a localization string ID.</remarks>
|
||||
[DataField("name")]
|
||||
[DataField]
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// An icon that will be used to represent this stack type.
|
||||
/// </summary>
|
||||
[DataField("icon")]
|
||||
[DataField]
|
||||
public SpriteSpecifier? Icon { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The entity id that will be spawned by default from this stack.
|
||||
/// </summary>
|
||||
[DataField("spawn", required: true, customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string Spawn { get; private set; } = string.Empty;
|
||||
[DataField(required: true)]
|
||||
public EntProtoId Spawn { get; private set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// The maximum amount of things that can be in a stack.
|
||||
/// Can be overriden on <see cref="StackComponent"/>
|
||||
/// if null, simply has unlimited max count.
|
||||
/// </summary>
|
||||
[DataField("maxCount")]
|
||||
[DataField]
|
||||
public int? MaxCount { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The size of an individual unit of this stack.
|
||||
/// </summary>
|
||||
[DataField("itemSize")]
|
||||
public int? ItemSize;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._NF.Interaction.Components;
|
||||
|
||||
[RegisterComponent]
|
||||
[NetworkedComponent]
|
||||
[AutoGenerateComponentState(true)]
|
||||
// When an entity with this is removed from a hand, it is replaced with a placeholder entity that blocks the hand's use until re-equipped with the same prototype.
|
||||
public sealed partial class HandPlaceholderComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// A whitelist to match entities that this should accept.
|
||||
/// </summary>
|
||||
[ViewVariables, AutoNetworkedField]
|
||||
public EntityWhitelist? Whitelist;
|
||||
|
||||
[ViewVariables, AutoNetworkedField]
|
||||
public EntProtoId? Prototype;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
using Content.Shared.Whitelist;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._NF.Interaction.Components;
|
||||
|
||||
[RegisterComponent]
|
||||
[NetworkedComponent]
|
||||
// When an entity with this is removed from a hand, it is replaced with a placeholder entity that blocks the hand's use until re-equipped with the same prototype.
|
||||
public sealed partial class HandPlaceholderRemoveableComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public EntityWhitelist? Whitelist;
|
||||
|
||||
[DataField]
|
||||
public EntProtoId? Prototype;
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
using Content.Shared._NF.Interaction.Components;
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Interaction.Events;
|
||||
using Content.Shared.Item;
|
||||
using Content.Shared.Whitelist;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._NF.Interaction.Systems;
|
||||
|
||||
/// <summary>
|
||||
/// Handles interactions with items that spawn HandPlaceholder items.
|
||||
/// </summary>
|
||||
[UsedImplicitly]
|
||||
public sealed partial class HandPlaceholderSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly INetManager _net = default!;
|
||||
[Dependency] private readonly SharedHandsSystem _hands = default!;
|
||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||
[Dependency] private readonly SharedItemSystem _item = default!;
|
||||
[Dependency] private readonly EntityWhitelistSystem _whitelist = default!;
|
||||
[Dependency] private readonly MetaDataSystem _metadata = default!;
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<HandPlaceholderRemoveableComponent, GotUnequippedHandEvent>(OnUnequipHand);
|
||||
SubscribeLocalEvent<HandPlaceholderRemoveableComponent, DroppedEvent>(OnDropped);
|
||||
|
||||
SubscribeLocalEvent<HandPlaceholderComponent, AfterInteractEvent>(AfterInteract);
|
||||
SubscribeLocalEvent<HandPlaceholderComponent, BeforeRangedInteractEvent>(BeforeRangedInteract);
|
||||
}
|
||||
|
||||
private void OnUnequipHand(Entity<HandPlaceholderRemoveableComponent> ent, ref GotUnequippedHandEvent args)
|
||||
{
|
||||
if (args.Handled)
|
||||
return; // If this is happening in practice, this is a bug.
|
||||
|
||||
SpawnAndPickUpPlaceholder(ent, args.User);
|
||||
RemCompDeferred<HandPlaceholderRemoveableComponent>(ent);
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void OnDropped(Entity<HandPlaceholderRemoveableComponent> ent, ref DroppedEvent args)
|
||||
{
|
||||
if (args.Handled)
|
||||
return; // If this is happening in practice, this is a bug.
|
||||
|
||||
SpawnAndPickUpPlaceholder(ent, args.User);
|
||||
RemCompDeferred<HandPlaceholderRemoveableComponent>(ent);
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private void SpawnAndPickUpPlaceholder(Entity<HandPlaceholderRemoveableComponent> ent, EntityUid user)
|
||||
{
|
||||
if (_net.IsServer)
|
||||
{
|
||||
var placeholder = Spawn("HandPlaceholder");
|
||||
if (TryComp<HandPlaceholderComponent>(placeholder, out var placeComp))
|
||||
{
|
||||
placeComp.Whitelist = ent.Comp.Whitelist;
|
||||
placeComp.Prototype = ent.Comp.Prototype;
|
||||
Dirty(placeholder, placeComp);
|
||||
}
|
||||
|
||||
if (_proto.TryIndex(ent.Comp.Prototype, out var itemProto))
|
||||
_metadata.SetEntityName(placeholder, itemProto.Name);
|
||||
|
||||
if (!_hands.TryPickup(user, placeholder)) // Can we get the hand this came from?
|
||||
QueueDel(placeholder);
|
||||
}
|
||||
}
|
||||
|
||||
private void BeforeRangedInteract(Entity<HandPlaceholderComponent> ent, ref BeforeRangedInteractEvent args)
|
||||
{
|
||||
if (args.Target == null || args.Handled)
|
||||
return;
|
||||
|
||||
args.Handled = true;
|
||||
TryToPickUpTarget(ent, args.Target.Value, args.User);
|
||||
}
|
||||
|
||||
private void AfterInteract(Entity<HandPlaceholderComponent> ent, ref AfterInteractEvent args)
|
||||
{
|
||||
if (args.Target == null || args.Handled)
|
||||
return;
|
||||
|
||||
args.Handled = true;
|
||||
TryToPickUpTarget(ent, args.Target.Value, args.User);
|
||||
}
|
||||
|
||||
private void TryToPickUpTarget(Entity<HandPlaceholderComponent> ent, EntityUid target, EntityUid user)
|
||||
{
|
||||
if (_whitelist.IsWhitelistFail(ent.Comp.Whitelist, target))
|
||||
return;
|
||||
|
||||
// Can't get the hand we're holding this with? Something's wrong, abort. No empty hands.
|
||||
if (!_hands.IsHolding(user, ent, out var hand))
|
||||
return;
|
||||
|
||||
// Cache the whitelist/prototype, entity might be deleted.
|
||||
var whitelist = ent.Comp.Whitelist;
|
||||
var prototype = ent.Comp.Prototype;
|
||||
|
||||
if (_net.IsServer)
|
||||
Del(ent);
|
||||
|
||||
_hands.DoPickup(user, hand, target); // Force pickup - empty hands are not okay
|
||||
var placeComp = EnsureComp<HandPlaceholderRemoveableComponent>(target);
|
||||
placeComp.Whitelist = whitelist;
|
||||
placeComp.Prototype = prototype;
|
||||
Dirty(target, placeComp);
|
||||
}
|
||||
}
|
||||
1
Resources/Locale/en-US/_NF/hands/hands-system.ftl
Normal file
1
Resources/Locale/en-US/_NF/hands/hands-system.ftl
Normal file
@@ -0,0 +1 @@
|
||||
hand-placeholder-name = Module slot for
|
||||
@@ -54043,7 +54043,6 @@ entities:
|
||||
- BorgModuleAdvancedTool
|
||||
- BorgModuleGPS
|
||||
- BorgModuleRCD
|
||||
- BorgModuleRPD
|
||||
- BorgModuleArtifact
|
||||
- BorgModuleAnomaly
|
||||
- BorgModuleGardening
|
||||
|
||||
@@ -401,3 +401,5 @@ AirlockHydroponics: AirlockHydroponicsLocked
|
||||
Biogenerator: null
|
||||
FloraGreyStalagmite: null
|
||||
FelinidCube: TajaranCube
|
||||
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Meat
|
||||
- Organ
|
||||
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -4,4 +4,4 @@
|
||||
icon: {sprite: Objects/Misc/bureaucracy.rsi, state: paper}
|
||||
spawn: SheetPrinter1
|
||||
maxCount: 1
|
||||
itemSize: 1
|
||||
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
cost: 750
|
||||
- id: WeaponCrusher
|
||||
cost: 750
|
||||
- id: MiningDrill
|
||||
cost: 750
|
||||
- id: WeaponCrusherGlaive
|
||||
cost: 2400
|
||||
- id: WeaponProtoKineticAccelerator
|
||||
|
||||
@@ -16,4 +16,5 @@
|
||||
materialComposition:
|
||||
Glass: 200
|
||||
chemicalComposition:
|
||||
Silicon: 20
|
||||
Silicon: 2
|
||||
- type: Electronics # Goobstation
|
||||
|
||||
@@ -9,18 +9,13 @@
|
||||
sprite: Objects/Misc/stock_parts.rsi
|
||||
- type: Item
|
||||
size: Tiny
|
||||
- type: EmitSoundOnPickup
|
||||
sound: /Audio/SimpleStation14/Items/Handling/component_pickup.ogg
|
||||
- type: EmitSoundOnDrop
|
||||
sound: /Audio/SimpleStation14/Items/Handling/component_drop.ogg
|
||||
- type: EmitSoundOnLand
|
||||
sound: /Audio/SimpleStation14/Items/Handling/component_drop.ogg
|
||||
# Rating 1
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- MachineUpgrading
|
||||
|
||||
# Rating 1
|
||||
- type: Stack
|
||||
count: 1
|
||||
- type: PhysicalComposition #Goobstation - Recycle update
|
||||
materialComposition:
|
||||
Steel: 12
|
||||
Plastic: 12
|
||||
- type: StockPart # Goobstation
|
||||
|
||||
- type: entity
|
||||
id: CapacitorStockPart
|
||||
@@ -40,6 +35,8 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- CapacitorStockPart
|
||||
- type: Stack
|
||||
stackType: Capacitor
|
||||
|
||||
- type: entity
|
||||
id: MicroManipulatorStockPart
|
||||
@@ -53,6 +50,8 @@
|
||||
- type: MachinePart
|
||||
part: Manipulator
|
||||
rating: 1
|
||||
- type: Stack
|
||||
stackType: MicroManipulator
|
||||
- type: ReverseEngineering # Nyano
|
||||
recipes:
|
||||
- MicroManipulatorStockPart
|
||||
@@ -69,6 +68,8 @@
|
||||
- type: MachinePart
|
||||
part: MatterBin
|
||||
rating: 1
|
||||
- type: Stack
|
||||
stackType: MatterBin
|
||||
- type: ReverseEngineering # Nyano
|
||||
recipes:
|
||||
- MatterBinStockPart
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- MiningDrill
|
||||
- Shovel
|
||||
# - Shovel # Goobstation
|
||||
- OreBag
|
||||
- Crowbar
|
||||
- RadioHandheld
|
||||
@@ -310,6 +310,18 @@
|
||||
- SheetGlassLingering0
|
||||
- PartRodMetalLingering0
|
||||
- FloorTileItemSteelLingering0
|
||||
# Frontier: droppable borg items
|
||||
droppableItems:
|
||||
- id: APCElectronics
|
||||
whitelist:
|
||||
components:
|
||||
- Electronics
|
||||
- MachineBoard
|
||||
- id: CapacitorStockPart
|
||||
whitelist:
|
||||
components:
|
||||
- StockPart
|
||||
# End Frontier: droppable borg items
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: construction-module }
|
||||
|
||||
@@ -325,23 +337,9 @@
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- RCDRecharging
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: rcd-module }
|
||||
|
||||
- type: entity
|
||||
id: BorgModuleRPD
|
||||
parent: [ BaseBorgModuleEngineering, BaseProviderBorgModule ]
|
||||
name: RPD cyborg module
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: engineering
|
||||
- state: icon-rpd
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- RPDRecharging
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: rpd-module }
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: rcd-module }
|
||||
|
||||
# janitorial modules (this gets its own unique things because janis are epic)
|
||||
- type: entity
|
||||
@@ -461,10 +459,17 @@
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- HandheldHealthAnalyzerUnpowered
|
||||
- Beaker
|
||||
- Beaker
|
||||
- BorgDropper
|
||||
# - Beaker # Frontier
|
||||
# - Beaker # Frontier
|
||||
# - BorgDropper # Frontier
|
||||
- BorgHypo
|
||||
# Frontier: droppable borg items
|
||||
droppableItems:
|
||||
- id: Beaker
|
||||
whitelist:
|
||||
components:
|
||||
- FitsInDispenser
|
||||
# End Frontier: droppable borg items
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-diagnosis-module }
|
||||
|
||||
@@ -520,8 +525,15 @@
|
||||
- BooksBag
|
||||
- HandLabeler
|
||||
- Lighter
|
||||
- DrinkShaker
|
||||
- BorgDropper
|
||||
# Frontier: droppable borg items
|
||||
# - DrinkShaker
|
||||
# - BorgDropper
|
||||
droppableItems:
|
||||
- id: DrinkShaker
|
||||
whitelist:
|
||||
components:
|
||||
- FitsInDispenser
|
||||
# End Frontier: droppable borg items
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: service-module }
|
||||
|
||||
@@ -557,6 +569,13 @@
|
||||
- HydroponicsToolSpade
|
||||
- HydroponicsToolClippers
|
||||
- Bucket
|
||||
# Frontier: droppable borg items
|
||||
droppableItems:
|
||||
- id: AppleSeeds
|
||||
whitelist:
|
||||
components:
|
||||
- Seed
|
||||
# End Frontier: droppable borg items
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: gardening-module }
|
||||
|
||||
@@ -678,3 +697,64 @@
|
||||
- SelfDestructSeq
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-martyr-module }
|
||||
|
||||
# Shitmed Modules
|
||||
|
||||
- type: entity
|
||||
id: BorgModuleSurgery
|
||||
parent: [ BaseBorgModuleMedical, BaseProviderBorgModule ]
|
||||
name: surgery cyborg module
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: medical
|
||||
- state: icon-surgery
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- Scalpel
|
||||
- Drill
|
||||
- Hemostat
|
||||
- Retractor
|
||||
- Cautery
|
||||
- SawElectric
|
||||
- BoneGel
|
||||
# Frontier: droppable borg items
|
||||
droppableItems:
|
||||
- id: OrganHumanHeart
|
||||
whitelist:
|
||||
components:
|
||||
- BodyPart
|
||||
- Organ
|
||||
tags:
|
||||
- Organ
|
||||
# End Frontier: droppable borg items
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: surgery-module }
|
||||
|
||||
- type: entity
|
||||
id: BorgModuleAdvancedSurgery
|
||||
parent: [ BaseBorgModuleMedical, BaseProviderBorgModule ]
|
||||
name: advanced surgery cyborg module
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: medical
|
||||
- state: icon-advanced-surgery
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- EnergyScalpel
|
||||
- EnergyCautery
|
||||
- AdvancedRetractor
|
||||
- BoneGel
|
||||
# Frontier: droppable borg items
|
||||
droppableItems:
|
||||
- id: OrganHumanHeart
|
||||
whitelist:
|
||||
components:
|
||||
- BodyPart
|
||||
- Organ
|
||||
tags:
|
||||
- Organ
|
||||
# End Frontier: droppable borg items
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-surgery-module }
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
state: extraction_pack
|
||||
spawn: Fulton1
|
||||
maxCount: 10
|
||||
itemSize: 2
|
||||
|
||||
# Entities
|
||||
- type: entity
|
||||
|
||||
@@ -73,17 +73,15 @@
|
||||
range: 1.5
|
||||
heavyStaminaCost: 0.7
|
||||
damage:
|
||||
groups:
|
||||
Brute: 3
|
||||
types:
|
||||
Structural: 15
|
||||
Piercing: 6
|
||||
- type: DamageOtherOnHit
|
||||
staminaCost: 9
|
||||
damage:
|
||||
groups:
|
||||
Brute: 9
|
||||
types:
|
||||
Structural: 15
|
||||
Structural: 25
|
||||
Piercing: 9
|
||||
- type: ThrowingAngle
|
||||
angle: 270
|
||||
|
||||
@@ -105,16 +103,14 @@
|
||||
path: "/Audio/Items/drill_hit.ogg"
|
||||
heavyStaminaCost: 0.55 # More efficient so less stamina needed to use
|
||||
damage:
|
||||
groups:
|
||||
Brute: 6
|
||||
types:
|
||||
Structural: 30
|
||||
Piercing: 12
|
||||
Structural: 50
|
||||
- type: DamageOtherOnHit
|
||||
damage:
|
||||
groups:
|
||||
Brute: 18
|
||||
types:
|
||||
Structural: 30
|
||||
Structural: 40
|
||||
Piercing: 18
|
||||
|
||||
- type: entity
|
||||
abstract: true
|
||||
|
||||
@@ -729,7 +729,6 @@
|
||||
- BorgModuleAdvancedTool
|
||||
- BorgModuleGPS
|
||||
- BorgModuleRCD
|
||||
- BorgModuleRPD
|
||||
- BorgModuleJetpack
|
||||
- BorgModulePka
|
||||
- BorgModuleArtifact
|
||||
|
||||
@@ -317,11 +317,6 @@
|
||||
id: BorgModuleRCD
|
||||
result: BorgModuleRCD
|
||||
|
||||
- type: latheRecipe
|
||||
parent: BaseGoldBorgModuleRecipe
|
||||
id: BorgModuleRPD
|
||||
result: BorgModuleRPD
|
||||
|
||||
# Janitor Modules
|
||||
|
||||
- type: latheRecipe
|
||||
|
||||
@@ -171,7 +171,6 @@
|
||||
- JawsOfLife
|
||||
- BorgModuleAdvancedTool
|
||||
- BorgModuleRCD
|
||||
- BorgModuleRPD
|
||||
|
||||
- type: technology
|
||||
id: MassExcavation
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: glass }
|
||||
spawn: SheetGlass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: ReinforcedGlass
|
||||
@@ -12,7 +11,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: rglass }
|
||||
spawn: SheetRGlass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: PlasmaGlass
|
||||
@@ -20,7 +18,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: pglass }
|
||||
spawn: SheetPGlass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: ReinforcedPlasmaGlass
|
||||
@@ -28,7 +25,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: rpglass }
|
||||
spawn: SheetRPGlass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: UraniumGlass
|
||||
@@ -36,7 +32,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: uglass }
|
||||
spawn: SheetUGlass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: ReinforcedUraniumGlass
|
||||
@@ -44,7 +39,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: ruglass }
|
||||
spawn: SheetRUGlass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: ClockworkGlass
|
||||
@@ -52,4 +46,3 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/glass.rsi, state: cglass }
|
||||
spawn: SheetClockworkGlass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/metal.rsi, state: steel }
|
||||
spawn: SheetSteel1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Plasteel
|
||||
@@ -12,7 +11,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/metal.rsi, state: plasteel }
|
||||
spawn: SheetPlasteel1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Brass
|
||||
@@ -20,4 +18,3 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/metal.rsi, state: brass }
|
||||
spawn: SheetBrass1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: paper }
|
||||
spawn: SheetPaper1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Plasma
|
||||
@@ -12,7 +11,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: plasma }
|
||||
spawn: SheetPlasma1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Plastic
|
||||
@@ -20,7 +18,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: plastic }
|
||||
spawn: SheetPlastic1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Uranium
|
||||
@@ -28,4 +25,3 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/other.rsi, state: uranium }
|
||||
spawn: SheetUranium1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
name: telecrystal
|
||||
icon: Objects/Specific/Syndicate/telecrystal.rsi
|
||||
spawn: Telecrystal1
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Bluespace
|
||||
@@ -11,12 +10,9 @@
|
||||
icon: { sprite: Objects/Materials/materials.rsi, state: bluespace }
|
||||
spawn: MaterialBluespace1
|
||||
maxCount: 5
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Normality
|
||||
name: normality
|
||||
icon: { sprite: Objects/Materials/materials.rsi, state: normality }
|
||||
spawn: MaterialNormality1
|
||||
maxCount: 5
|
||||
itemSize: 1
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Materials/ingots.rsi", state: gold }
|
||||
spawn: IngotGold1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Silver
|
||||
@@ -12,7 +11,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Materials/ingots.rsi", state: silver }
|
||||
spawn: IngotSilver1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Tungsten
|
||||
@@ -20,4 +18,3 @@
|
||||
icon: { sprite: "/Textures/Objects/Materials/ingots.rsi", state: tungsten_1 }
|
||||
spawn: IngotTungsten1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon: { sprite: /Textures/Objects/Misc/monkeycube.rsi, state: cube }
|
||||
spawn: MaterialBiomass1
|
||||
maxCount: 100
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: WoodPlank
|
||||
@@ -12,7 +11,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: wood }
|
||||
spawn: MaterialWoodPlank1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Cardboard
|
||||
@@ -20,7 +18,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cardboard }
|
||||
spawn: MaterialCardboard1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Cloth
|
||||
@@ -28,7 +25,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cloth }
|
||||
spawn: MaterialCloth1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Durathread
|
||||
@@ -36,7 +32,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: durathread }
|
||||
spawn: MaterialDurathread1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Diamond
|
||||
@@ -44,7 +39,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: diamond }
|
||||
spawn: MaterialDiamond1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: Cotton
|
||||
@@ -52,7 +46,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: cotton }
|
||||
spawn: MaterialCotton1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Pyrotton
|
||||
@@ -60,7 +53,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: pyrotton }
|
||||
spawn: MaterialPyrotton1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Bananium
|
||||
@@ -68,7 +60,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: bananium }
|
||||
spawn: MaterialBananium1
|
||||
maxCount: 10
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: MeatSheets
|
||||
@@ -76,7 +67,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/Sheets/meaterial.rsi, state: meat }
|
||||
spawn: MaterialSheetMeat1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: WebSilk
|
||||
@@ -84,7 +74,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/silk.rsi, state: icon }
|
||||
spawn: MaterialWebSilk1
|
||||
maxCount: 50
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Bones
|
||||
@@ -105,4 +94,4 @@
|
||||
name: goliath hide
|
||||
icon: { sprite: /Textures/Objects/Materials/hide.rsi, state: goliath_hide }
|
||||
spawn: MaterialGoliathHide1
|
||||
maxCount: 30
|
||||
maxCount: 30
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: iron }
|
||||
spawn: SteelOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: PlasmaOre
|
||||
@@ -26,7 +25,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: plasma }
|
||||
spawn: PlasmaOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: SilverOre
|
||||
@@ -34,7 +32,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: silver }
|
||||
spawn: SilverOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: SpaceQuartz
|
||||
@@ -42,7 +39,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: spacequartz }
|
||||
spawn: SpaceQuartz1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: UraniumOre
|
||||
@@ -50,7 +46,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: uranium }
|
||||
spawn: UraniumOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: BananiumOre
|
||||
@@ -58,7 +53,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: bananium }
|
||||
spawn: BananiumOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: Coal
|
||||
@@ -66,7 +60,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: coal }
|
||||
spawn: Coal1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: SaltOre
|
||||
@@ -74,7 +67,6 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/ore.rsi, state: salt }
|
||||
spawn: Salt1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: BluespaceOre
|
||||
@@ -82,7 +74,6 @@
|
||||
icon: { sprite: Objects/Materials/ore.rsi, state: bluespace }
|
||||
spawn: BluespaceOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: NormalityOre
|
||||
@@ -90,7 +81,6 @@
|
||||
icon: { sprite: Objects/Materials/ore.rsi, state: normality }
|
||||
spawn: NormalityOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: TungstenOre
|
||||
@@ -98,4 +88,3 @@
|
||||
icon: { sprite: Objects/Materials/ore.rsi, state: tungsten }
|
||||
spawn: TungstenOre1
|
||||
maxCount: 30
|
||||
itemSize: 2
|
||||
|
||||
@@ -4,4 +4,3 @@
|
||||
icon: { sprite: /Textures/Objects/Materials/parts.rsi, state: rods }
|
||||
spawn: PartRodMetal1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
name: pancake
|
||||
spawn: FoodBakedPancake
|
||||
maxCount: 3
|
||||
itemSize: 1
|
||||
|
||||
# Food Containers
|
||||
|
||||
@@ -15,7 +14,6 @@
|
||||
icon: { sprite: Objects/Consumable/Food/Baked/pizza.rsi, state: box }
|
||||
spawn: FoodBoxPizza
|
||||
maxCount: 30
|
||||
itemSize: 10
|
||||
|
||||
# Smokeables
|
||||
|
||||
@@ -25,7 +23,6 @@
|
||||
icon: { sprite: /Textures/Objects/Consumable/Smokeables/Cigarettes/paper.rsi, state: cigpaper }
|
||||
spawn: PaperRolling
|
||||
maxCount: 5
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: CigaretteFilter
|
||||
@@ -33,7 +30,6 @@
|
||||
icon: { sprite: /Textures/Objects/Consumable/Smokeables/Cigarettes/paper.rsi, state: cigfilter }
|
||||
spawn: CigaretteFilter
|
||||
maxCount: 5
|
||||
itemSize: 2
|
||||
|
||||
- type: stack
|
||||
id: GroundTobacco
|
||||
@@ -41,7 +37,6 @@
|
||||
icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile }
|
||||
spawn: GroundTobacco
|
||||
maxCount: 5
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: GroundCannabis
|
||||
@@ -49,7 +44,6 @@
|
||||
icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile }
|
||||
spawn: GroundCannabis
|
||||
maxCount:
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: GroundCannabisRainbow
|
||||
@@ -57,7 +51,6 @@
|
||||
icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: powderpile_rainbow }
|
||||
spawn: GroundCannabisRainbow
|
||||
maxCount:
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: LeavesTobaccoDried
|
||||
@@ -65,7 +58,6 @@
|
||||
icon: { sprite: /Textures/Objects/Specific/Hydroponics/tobacco.rsi, state: dried }
|
||||
spawn: LeavesTobaccoDried
|
||||
maxCount: 5
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: LeavesCannabisDried
|
||||
@@ -73,12 +65,9 @@
|
||||
icon: { sprite: /Textures/Objects/Specific/Hydroponics/tobacco.rsi, state: dried }
|
||||
spawn: LeavesCannabisDried
|
||||
maxCount: 5
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: LeavesCannabisRainbowDried
|
||||
name: dried rainbow cannabis leaves
|
||||
icon: { sprite: /Textures/Objects/Specific/Hydroponics/rainbow_cannabis.rsi, state: dried }
|
||||
spawn: LeavesCannabisRainbowDried
|
||||
maxCount: 5
|
||||
itemSize: 5
|
||||
|
||||
@@ -4,11 +4,9 @@
|
||||
name: inflatable wall
|
||||
spawn: InflatableWallStack1
|
||||
maxCount: 10
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: InflatableDoor
|
||||
name: inflatable door
|
||||
spawn: InflatableDoorStack1
|
||||
maxCount: 4
|
||||
itemSize: 1
|
||||
|
||||
@@ -3,203 +3,174 @@
|
||||
name: steel tile
|
||||
spawn: FloorTileItemSteel
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMetalDiamond
|
||||
name: steel tile
|
||||
spawn: FloorTileItemMetalDiamond
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWood
|
||||
name: wood floor
|
||||
spawn: FloorTileItemWood
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWhite
|
||||
name: white tile
|
||||
spawn: FloorTileItemWhite
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileDark
|
||||
name: dark tile
|
||||
spawn: FloorTileItemDark
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileTechmaint
|
||||
name: techmaint floor
|
||||
spawn: FloorTileItemTechmaint
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileFreezer
|
||||
name: freezer tile
|
||||
spawn: FloorTileItemFreezer
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileShowroom
|
||||
name: showroom tile
|
||||
spawn: FloorTileItemShowroom
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGCircuit
|
||||
name: green-circuit floor
|
||||
spawn: FloorTileItemGCircuit
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGold
|
||||
name: gold floor
|
||||
spawn: FloorTileItemGold
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileReinforced
|
||||
name: reinforced tile
|
||||
spawn: FloorTileItemReinforced
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMono
|
||||
name: mono tile
|
||||
spawn: FloorTileItemMono
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBrassFilled
|
||||
name: filled brass plate
|
||||
spawn: FloorTileItemBrassFilled
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBrassReebe
|
||||
name: smooth brass plate
|
||||
spawn: FloorTileItemBrassReebe
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileLino
|
||||
name: linoleum floor
|
||||
spawn: FloorTileItemLino
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileHydro
|
||||
name: hydro tile
|
||||
spawn: FloorTileItemHydro
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileLime
|
||||
name: lime tile
|
||||
spawn: FloorTileItemLime
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileDirty
|
||||
name: dirty tile
|
||||
spawn: FloorTileItemDirty
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleWhite
|
||||
name: white shuttle tile
|
||||
spawn: FloorTileItemShuttleWhite
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleBlue
|
||||
name: blue shuttle tile
|
||||
spawn: FloorTileItemShuttleBlue
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleOrange
|
||||
name: orange shuttle tile
|
||||
spawn: FloorTileItemShuttleOrange
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttlePurple
|
||||
name: purple shuttle tile
|
||||
spawn: FloorTileItemShuttlePurple
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleRed
|
||||
name: red shuttle tile
|
||||
spawn: FloorTileItemShuttleRed
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleGrey
|
||||
name: grey shuttle tile
|
||||
spawn: FloorTileItemShuttleGrey
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleBlack
|
||||
name: black shuttle tile
|
||||
spawn: FloorTileItemShuttleBlack
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackEighties
|
||||
name: eighties floor tile
|
||||
spawn: FloorTileItemEighties
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackArcadeBlue
|
||||
name: blue arcade tile
|
||||
spawn: FloorTileItemArcadeBlue
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackArcadeBlue2
|
||||
name: blue arcade tile
|
||||
spawn: FloorTileItemArcadeBlue2
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackArcadeRed
|
||||
name: red arcade tile
|
||||
spawn: FloorTileItemArcadeRed
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetRed
|
||||
@@ -207,7 +178,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-red }
|
||||
spawn: FloorCarpetItemRed
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetBlack
|
||||
@@ -215,7 +185,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-black }
|
||||
spawn: FloorCarpetItemBlack
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetBlue
|
||||
@@ -223,7 +192,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-blue }
|
||||
spawn: FloorCarpetItemBlue
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetGreen
|
||||
@@ -231,7 +199,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-green }
|
||||
spawn: FloorCarpetItemGreen
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetOrange
|
||||
@@ -239,7 +206,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-orange }
|
||||
spawn: FloorCarpetItemOrange
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetSkyBlue
|
||||
@@ -247,7 +213,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-skyblue }
|
||||
spawn: FloorCarpetItemSkyBlue
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetPurple
|
||||
@@ -255,7 +220,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-purple }
|
||||
spawn: FloorCarpetItemPurple
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetPink
|
||||
@@ -263,7 +227,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-pink }
|
||||
spawn: FloorCarpetItemPink
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetCyan
|
||||
@@ -271,7 +234,6 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-cyan }
|
||||
spawn: FloorCarpetItemCyan
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetWhite
|
||||
@@ -279,210 +241,180 @@
|
||||
icon: { sprite: Objects/Tiles/tile.rsi, state: carpet-white }
|
||||
spawn: FloorCarpetItemWhite
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackCarpetClown
|
||||
name: clown carpet tile
|
||||
spawn: FloorTileItemCarpetClown
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackCarpetOffice
|
||||
name: office carpet tile
|
||||
spawn: FloorTileItemCarpetOffice
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackBoxing
|
||||
name: boxing ring tile
|
||||
spawn: FloorTileItemBoxing
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackGym
|
||||
name: gym floor tile
|
||||
spawn: FloorTileItemGym
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileElevatorShaft
|
||||
name: elevator shaft tile
|
||||
spawn: FloorTileItemElevatorShaft
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileRockVault
|
||||
name: rock vault tile
|
||||
spawn: FloorTileItemRockVault
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBlue
|
||||
name: blue floor tile
|
||||
spawn: FloorTileItemBlue
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMining
|
||||
name: mining floor tile
|
||||
spawn: FloorTileItemMining
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMiningDark
|
||||
name: dark mining floor tile
|
||||
spawn: FloorTileItemMiningDark
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMiningLight
|
||||
name: light mining floor tile
|
||||
spawn: FloorTileItemMiningLight
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBar
|
||||
name: item bar floor tile
|
||||
spawn: FloorTileItemBar
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileClown
|
||||
name: clown floor tile
|
||||
spawn: FloorTileItemClown
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMime
|
||||
name: mime floor tile
|
||||
spawn: FloorTileItemMime
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileKitchen
|
||||
name: kitchen floor tile
|
||||
spawn: FloorTileItemKitchen
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileLaundry
|
||||
name: laundry floor tile
|
||||
spawn: FloorTileItemLaundry
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileConcrete
|
||||
name: concrete tile
|
||||
spawn: FloorTileItemGrayConcrete
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGrayConcrete
|
||||
name: gray concrete tile
|
||||
spawn: FloorTileItemLaundry
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileOldConcrete
|
||||
name: old concrete tile
|
||||
spawn: FloorTileItemOldConcrete
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileSilver
|
||||
name: silver floor tile
|
||||
spawn: FloorTileItemSilver
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBCircuit
|
||||
name: bcircuit floor tile
|
||||
spawn: FloorTileItemBCircuit
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileRCircuit
|
||||
name: red-circuit floor
|
||||
spawn: FloorTileItemRCircuit
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGrass
|
||||
name: grass floor tile
|
||||
spawn: FloorTileItemGrass
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGrassJungle
|
||||
name: grass jungle floor tile
|
||||
spawn: FloorTileItemGrassJungle
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileSnow
|
||||
name: snow floor tile
|
||||
spawn: FloorTileItemSnow
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWoodPattern
|
||||
name: wood pattern floor
|
||||
spawn: FloorTileItemWoodPattern
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileFlesh
|
||||
name: flesh floor
|
||||
spawn: FloorTileItemFlesh
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileSteelMaint
|
||||
name: steel maint floor
|
||||
spawn: FloorTileItemSteelMaint
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGratingMaint
|
||||
name: grating maint floor
|
||||
spawn: FloorTileItemGratingMaint
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWeb
|
||||
name: web tile
|
||||
spawn: FloorTileItemWeb
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
# Faux science tiles
|
||||
- type: stack
|
||||
@@ -490,35 +422,30 @@
|
||||
name: astro-grass floor
|
||||
spawn: FloorTileItemAstroGrass
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMowedAstroGrass
|
||||
name: mowed astro-grass floor
|
||||
spawn: FloorTileItemMowedAstroGrass
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileJungleAstroGrass
|
||||
name: jungle astro-grass floor
|
||||
spawn: FloorTileItemJungleAstroGrass
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileAstroIce
|
||||
name: astro-ice floor
|
||||
spawn: FloorTileItemAstroIce
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileAstroSnow
|
||||
name: astro-snow floor
|
||||
spawn: FloorTileItemAstroSnow
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWoodLarge
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: ointment }
|
||||
spawn: Ointment
|
||||
maxCount: 10
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: AloeCream
|
||||
@@ -12,7 +11,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Specific/Hydroponics/aloe.rsi", state: cream }
|
||||
spawn: AloeCream
|
||||
maxCount: 15 #Changed to 15 due to shitmed changes
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Gauze
|
||||
@@ -20,7 +18,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: gauze }
|
||||
spawn: Gauze
|
||||
maxCount: 15 #Changed to 15 due to shitmed changes
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Brutepack
|
||||
@@ -28,7 +25,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: gauze }
|
||||
spawn: Brutepack
|
||||
maxCount: 15 #Changed to 15 due to shitmed changes
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Bloodpack
|
||||
@@ -36,7 +32,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: bloodpack }
|
||||
spawn: Bloodpack
|
||||
maxCount: 15 #Changed to 15 due to shitmed changes
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: MedicatedSuture
|
||||
@@ -44,7 +39,6 @@
|
||||
icon: {sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: medicated-suture }
|
||||
spawn: MedicatedSuture
|
||||
maxCount: 15 #Changed to 15 due to shitmed changes
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: RegenerativeMesh
|
||||
@@ -52,6 +46,5 @@
|
||||
icon: {sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: regenerative-mesh}
|
||||
spawn: RegenerativeMesh
|
||||
maxCount: 15 #Changed to 15 due to shitmed changes
|
||||
itemSize: 1
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coil-30 }
|
||||
spawn: CableApcStack1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: CableMV
|
||||
@@ -12,7 +11,6 @@
|
||||
icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coilmv-30 }
|
||||
spawn: CableMVStack1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: CableHV
|
||||
@@ -20,4 +18,3 @@
|
||||
icon: { sprite: "/Textures/Objects/Tools/cable-coils.rsi", state: coilhv-30 }
|
||||
spawn: CableHVStack1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
@@ -4,4 +4,3 @@
|
||||
icon: { sprite: Objects/Fun/prizeticket.rsi, state: ticket }
|
||||
spawn: PrizeTicket1
|
||||
maxCount: 100
|
||||
itemSize: 1
|
||||
@@ -3,4 +3,21 @@
|
||||
name: artifact fragment
|
||||
spawn: ArtifactFragment1
|
||||
maxCount: 30
|
||||
itemSize: 5
|
||||
|
||||
- type: stack
|
||||
id: Capacitor
|
||||
name: capacitor
|
||||
spawn: CapacitorStockPart
|
||||
maxCount: 10
|
||||
|
||||
- type: stack
|
||||
id: MicroManipulator
|
||||
name: micro manipulator
|
||||
spawn: MicroManipulatorStockPart
|
||||
maxCount: 10
|
||||
|
||||
- type: stack
|
||||
id: MatterBin
|
||||
name: matter bin
|
||||
spawn: MatterBinStockPart
|
||||
maxCount: 10
|
||||
|
||||
@@ -12,18 +12,18 @@
|
||||
- Pickaxe
|
||||
- IndustrialMech
|
||||
- type: MeleeWeapon
|
||||
canWideSwing: false
|
||||
canWideSwing: true
|
||||
autoAttack: true
|
||||
angle: 0
|
||||
wideAnimationRotation: -90
|
||||
soundHit:
|
||||
path: "/Audio/Items/drill_hit.ogg"
|
||||
attackRate: 3.5
|
||||
attackRate: 0.25 # Should be better then a normal drill not worse
|
||||
damage:
|
||||
groups:
|
||||
Brute: 9
|
||||
Brute: 12 # Giant fucking mech drill
|
||||
types:
|
||||
Structural: 40 # ~10 seconds for solid wall / ~21 secods for reinforced wall
|
||||
Structural: 50 # Giant fucking mech drill
|
||||
|
||||
- type: entity
|
||||
id: WeaponMechMeleeDrillDiamond
|
||||
@@ -39,15 +39,15 @@
|
||||
- Pickaxe
|
||||
- IndustrialMech
|
||||
- type: MeleeWeapon
|
||||
canWideSwing: false
|
||||
canWideSwing: true
|
||||
autoAttack: true
|
||||
angle: 0
|
||||
wideAnimationRotation: -90
|
||||
soundHit:
|
||||
path: "/Audio/Items/drill_hit.ogg"
|
||||
attackRate: 4
|
||||
attackRate: 0.25 # Should be better then a normal drill not worse
|
||||
damage:
|
||||
groups:
|
||||
Brute: 18
|
||||
Brute: 24
|
||||
types:
|
||||
Structural: 60 # ~3 seconds for solid wall / 9 seconds for reinforced wall
|
||||
Structural: 100 # Giant fucking mech drill
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
- type: entity
|
||||
id: BorgModulePKA
|
||||
parent: [ BaseBorgModuleCargo, BaseProviderBorgModule ]
|
||||
name: proto kinetic accelerator cyborg module
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Goobstation/Objects/Specific/Robotics/borgmodule.rsi
|
||||
layers:
|
||||
- state: cargo
|
||||
- state: icon-pka
|
||||
- type: ItemBorgModule
|
||||
droppableItems:
|
||||
- id: WeaponProtoKineticAccelerator
|
||||
whitelist:
|
||||
components:
|
||||
- PressureDamageChange
|
||||
- type: BorgModuleIcon
|
||||
icon: { sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi, state: icon }
|
||||
@@ -0,0 +1,10 @@
|
||||
- type: entity
|
||||
id: HandPlaceholder
|
||||
name: unknown tool
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous # no storage insertion visuals
|
||||
- type: Unremoveable
|
||||
- type: HandPlaceholder
|
||||
- type: HandPlaceholderVisuals
|
||||
@@ -11,7 +11,6 @@
|
||||
icon: { sprite: "/Textures/_Nuclear14/Objects/Misc/materials.rsi", state: lead }
|
||||
spawn: N14AluminiumOre1
|
||||
maxCount: 10
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: N14LeadOre
|
||||
@@ -19,7 +18,6 @@
|
||||
icon: { sprite: "/Textures/_Nuclear14/Objects/Misc/materials.rsi", state: lead }
|
||||
spawn: N14LeadOre1
|
||||
maxCount: 10
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: CopperOre
|
||||
@@ -27,7 +25,6 @@
|
||||
icon: { sprite: "/Textures/_Nuclear14/Objects/Misc/materials.rsi", state: copper }
|
||||
spawn: CopperOre1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: SulfurOre
|
||||
@@ -35,7 +32,6 @@
|
||||
icon: { sprite: "/Textures/_Nuclear14/Objects/Misc/materials.rsi", state: sulfur }
|
||||
spawn: SulfurOre1
|
||||
maxCount: 10
|
||||
itemSize: 1
|
||||
|
||||
# Metals
|
||||
- type: stack
|
||||
@@ -44,7 +40,6 @@
|
||||
icon: { sprite: "/Textures/_Nuclear14/Objects/Misc/materials.rsi", state: ingot_lead }
|
||||
spawn: N14IngotLead1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Aluminium
|
||||
@@ -52,7 +47,6 @@
|
||||
icon: { sprite: "/Textures/_Nuclear14/Objects/Misc/materials.rsi", state: ingot_aluminum }
|
||||
spawn: N14IngotAluminium1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
- type: stack
|
||||
id: Copper
|
||||
@@ -60,4 +54,3 @@
|
||||
icon: { sprite: "/Textures/_Nuclear14/Objects/Misc/materials.rsi", state: ingot_copper }
|
||||
spawn: IngotCopper1
|
||||
maxCount: 30
|
||||
itemSize: 1
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
- type: entity
|
||||
id: BorgModuleSurgery
|
||||
parent: [ BaseBorgModuleMedical, BaseProviderBorgModule ]
|
||||
name: surgery cyborg module
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: medical
|
||||
- state: icon-surgery
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- Scalpel
|
||||
- Drill
|
||||
- Hemostat
|
||||
- Retractor
|
||||
- Cautery
|
||||
- SawElectric
|
||||
- BoneGel
|
||||
|
||||
- type: entity
|
||||
id: BorgModuleAdvancedSurgery
|
||||
parent: [ BaseBorgModuleMedical, BaseProviderBorgModule ]
|
||||
name: advanced surgery cyborg module
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: medical
|
||||
- state: icon-advanced-surgery
|
||||
- type: ItemBorgModule
|
||||
items:
|
||||
- EnergyScalpel
|
||||
- EnergyCautery
|
||||
- AdvancedRetractor
|
||||
- BoneGel
|
||||
@@ -87,6 +87,7 @@
|
||||
- BorgModuleGrapplingGun
|
||||
- BorgModuleMining
|
||||
- BorgModuleAppraisal
|
||||
- BorgModulePKA # Lavaland
|
||||
|
||||
radioChannels:
|
||||
- Supply
|
||||
|
||||
@@ -1049,6 +1049,9 @@
|
||||
- type: Tag
|
||||
id: Ore
|
||||
|
||||
- type: Tag
|
||||
id: Organ
|
||||
|
||||
- type: Tag
|
||||
id: Packet
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 509 B |
@@ -112,6 +112,12 @@
|
||||
{
|
||||
"name": "rpd-module"
|
||||
},
|
||||
{
|
||||
"name":"surgery-module"
|
||||
},
|
||||
{
|
||||
"name":"adv-surgery-module"
|
||||
},
|
||||
{
|
||||
"name": "pka-module"
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 475 B |
Binary file not shown.
|
After Width: | Height: | Size: 565 B |
Binary file not shown.
|
After Width: | Height: | Size: 299 B |
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC0-1.0",
|
||||
"copyright": "Lollypop by SolsticeOfTheWinter (Lollypop Guy), PKA by Mocho",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "cargo"
|
||||
},
|
||||
{
|
||||
"name": "icon-pka"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user