Merge remote-tracking branch 'upstream/master' into 20-11-19-sandboxing

This commit is contained in:
Pieter-Jan Briers
2020-11-24 08:39:05 +01:00
3195 changed files with 17920 additions and 17354 deletions

View File

@@ -8,7 +8,7 @@
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>8</LangVersion>
<LangVersion>9</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>8</LangVersion>
<LangVersion>9</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>..\bin\Content.Client\</OutputPath>

View File

@@ -79,6 +79,7 @@ namespace Content.Client
prototypes.RegisterIgnore("gasReaction");
prototypes.RegisterIgnore("seed"); // Seeds prototypes are server-only.
prototypes.RegisterIgnore("barSign");
prototypes.RegisterIgnore("objective");
ClientContentIoC.Register();

View File

@@ -1,26 +1,30 @@
#nullable enable
using System.Drawing;
using Content.Client.GameObjects.Components.Mobs;
using Content.Client.UserInterface;
using Content.Client.UserInterface.Stylesheets;
using Content.Shared.GameObjects.Components.Actor;
using Robust.Client.Interfaces.GameObjects.Components;
using Robust.Client.Interfaces.ResourceManagement;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.Utility;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.Network;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Players;
namespace Content.Client.GameObjects.Components.Actor
{
[RegisterComponent]
public sealed class CharacterInfoComponent : Component, ICharacterUI
public sealed class CharacterInfoComponent : SharedCharacterInfoComponent, ICharacterUI
{
[Dependency] private readonly IResourceCache _resourceCache = default!;
private CharacterInfoControl _control;
private CharacterInfoControl _control = default!;
public override string Name => "CharacterInfo";
public Control Scene { get; private set; }
public Control Scene { get; private set; } = default!;
public UIPriority Priority => UIPriority.Info;
public override void OnAdd()
@@ -30,18 +34,29 @@ namespace Content.Client.GameObjects.Components.Actor
Scene = _control = new CharacterInfoControl(_resourceCache);
}
public override void Initialize()
public void Opened()
{
base.Initialize();
SendNetworkMessage(new RequestCharacterInfoMessage());
}
if (Owner.TryGetComponent(out ISpriteComponent spriteComponent))
public override void HandleNetworkMessage(ComponentMessage message, INetChannel netChannel, ICommonSession? session = null)
{
base.HandleNetworkMessage(message, netChannel, session);
if(session?.AttachedEntity != Owner) return;
switch (message)
{
_control.SpriteView.Sprite = spriteComponent;
}
case CharacterInfoMessage characterInfoMessage:
_control.UpdateUI(characterInfoMessage);
if (Owner.TryGetComponent(out ISpriteComponent? spriteComponent))
{
_control.SpriteView.Sprite = spriteComponent;
}
_control.NameLabel.Text = Owner.Name;
// ReSharper disable once StringLiteralTypo
_control.SubText.Text = Loc.GetString("Professional Greyshirt");
_control.NameLabel.Text = Owner.Name;
break;
}
}
private sealed class CharacterInfoControl : VBoxContainer
@@ -50,8 +65,12 @@ namespace Content.Client.GameObjects.Components.Actor
public Label NameLabel { get; }
public Label SubText { get; }
public VBoxContainer ObjectivesContainer { get; }
public CharacterInfoControl(IResourceCache resourceCache)
{
IoCManager.InjectDependencies(this);
AddChild(new HBoxContainer
{
Children =
@@ -66,7 +85,8 @@ namespace Content.Client.GameObjects.Components.Actor
(SubText = new Label
{
SizeFlagsVertical = SizeFlags.None,
StyleClasses = {StyleNano.StyleClassLabelSubText}
StyleClasses = {StyleNano.StyleClassLabelSubText},
})
}
}
@@ -78,16 +98,65 @@ namespace Content.Client.GameObjects.Components.Actor
PlaceholderText = Loc.GetString("Health & status effects")
});
AddChild(new Placeholder(resourceCache)
AddChild(new Label
{
PlaceholderText = Loc.GetString("Objectives")
Text = Loc.GetString("Objectives"),
SizeFlagsHorizontal = SizeFlags.ShrinkCenter
});
ObjectivesContainer = new VBoxContainer();
AddChild(ObjectivesContainer);
AddChild(new Placeholder(resourceCache)
{
PlaceholderText = Loc.GetString("Antagonist Roles")
});
}
public void UpdateUI(CharacterInfoMessage characterInfoMessage)
{
SubText.Text = characterInfoMessage.JobTitle;
ObjectivesContainer.RemoveAllChildren();
foreach (var (groupId, objectiveConditions) in characterInfoMessage.Objectives)
{
var vbox = new VBoxContainer
{
Modulate = Color.Gray
};
vbox.AddChild(new Label
{
Text = groupId,
Modulate = Color.LightSkyBlue
});
foreach (var objectiveCondition in objectiveConditions)
{
var hbox = new HBoxContainer();
hbox.AddChild(new ProgressTextureRect
{
Texture = objectiveCondition.SpriteSpecifier.Frame0(),
Progress = objectiveCondition.Progress,
SizeFlagsVertical = SizeFlags.ShrinkCenter
});
hbox.AddChild(new Control
{
CustomMinimumSize = (10,0)
});
hbox.AddChild(new VBoxContainer
{
Children =
{
new Label{Text = objectiveCondition.Title},
new Label{Text = objectiveCondition.Description}
}
}
);
vbox.AddChild(hbox);
}
ObjectivesContainer.AddChild(vbox);
}
}
}
}
}

View File

@@ -116,6 +116,7 @@ namespace Content.Client.GameObjects.Components.Actor
public class CharacterWindow : SS14Window
{
private readonly VBoxContainer _contentsVBox;
private readonly List<ICharacterUI> _windowComponents;
public CharacterWindow(List<ICharacterUI> windowComponents)
{
@@ -129,6 +130,17 @@ namespace Content.Client.GameObjects.Components.Actor
{
_contentsVBox.AddChild(element.Scene);
}
_windowComponents = windowComponents;
}
protected override void Opened()
{
base.Opened();
foreach (var windowComponent in _windowComponents)
{
windowComponent.Opened();
}
}
}
}

View File

@@ -0,0 +1,22 @@
using System;
using Content.Client.GameObjects.EntitySystems.DoAfter;
using Robust.Client.Graphics.Drawing;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Maths;
namespace Content.Client.GameObjects.Components.Actor
{
public class ProgressTextureRect : TextureRect
{
public float Progress;
protected override void Draw(DrawingHandleScreen handle)
{
var dims = Texture != null ? GetDrawDimensions(Texture) : UIBox2.FromDimensions(Vector2.Zero, PixelSize);
dims.Top = Math.Max(dims.Bottom - dims.Bottom * Progress,0);
handle.DrawRect(dims, DoAfterHelpers.GetProgressColor(Progress));
base.Draw(handle);
}
}
}

View File

@@ -1,9 +1,13 @@
using Content.Client.GameObjects.Components.Items;
#nullable enable
using Content.Client.GameObjects.Components.HUD.Inventory;
using Content.Client.GameObjects.Components.Items;
using Content.Shared.GameObjects;
using Content.Shared.GameObjects.Components.Inventory;
using Content.Shared.GameObjects.Components.Items;
using Robust.Client.Graphics;
using Robust.Shared.Containers;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects.Components;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
@@ -18,8 +22,29 @@ namespace Content.Client.GameObjects.Components.Clothing
public override string Name => "Clothing";
public override uint? NetID => ContentNetIDs.CLOTHING;
private string? _clothingEquippedPrefix;
[ViewVariables(VVAccess.ReadWrite)]
public string ClothingEquippedPrefix { get; set; }
public string? ClothingEquippedPrefix
{
get => _clothingEquippedPrefix;
set
{
if (_clothingEquippedPrefix == value)
return;
_clothingEquippedPrefix = value;
if (!Owner.TryGetContainer(out IContainer? container))
return;
if (!container.Owner.TryGetComponent(out ClientInventoryComponent? inventory))
return;
if (!inventory.TryFindItemSlots(Owner, out EquipmentSlotDefines.Slots? slots))
return;
inventory.SetSlotVisuals(slots.Value, Owner);
}
}
[ViewVariables(VVAccess.ReadWrite)]
public FemaleClothingMask FemaleMask
@@ -54,7 +79,7 @@ namespace Content.Client.GameObjects.Components.Clothing
return null;
}
public override void HandleComponentState(ComponentState curState, ComponentState nextState)
public override void HandleComponentState(ComponentState? curState, ComponentState? nextState)
{
if (curState == null)
return;

View File

@@ -1,4 +1,6 @@
using System.Collections.Generic;
#nullable enable
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Client.GameObjects.Components.Clothing;
using Content.Shared.GameObjects.Components.Inventory;
@@ -22,10 +24,9 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory
{
private readonly Dictionary<Slots, IEntity> _slots = new Dictionary<Slots, IEntity>();
[ViewVariables]
public InventoryInterfaceController InterfaceController { get; private set; }
[ViewVariables] public InventoryInterfaceController InterfaceController { get; private set; } = default!;
private ISpriteComponent _sprite;
private ISpriteComponent? _sprite;
private bool _playerAttached = false;
@@ -69,7 +70,7 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory
}
}
public override void HandleComponentState(ComponentState curState, ComponentState nextState)
public override void HandleComponentState(ComponentState? curState, ComponentState? nextState)
{
base.HandleComponentState(curState, nextState);
@@ -126,7 +127,7 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory
return;
}
if (entity != null && entity.TryGetComponent(out ClothingComponent clothing))
if (entity.TryGetComponent(out ClothingComponent? clothing))
{
var flag = SlotMasks[slot];
var data = clothing.GetEquippedStateInfo(flag);
@@ -155,6 +156,9 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory
internal void ClearAllSlotVisuals()
{
if (_sprite == null)
return;
foreach (var slot in InventoryInstance.SlotMasks)
{
if (slot != Slots.NONE)
@@ -192,7 +196,7 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory
SendNetworkMessage(new OpenSlotStorageUIMessage(slot));
}
public override void HandleMessage(ComponentMessage message, IComponent component)
public override void HandleMessage(ComponentMessage message, IComponent? component)
{
base.HandleMessage(message, component);
@@ -210,9 +214,25 @@ namespace Content.Client.GameObjects.Components.HUD.Inventory
}
}
public bool TryGetSlot(Slots slot, out IEntity item)
public bool TryGetSlot(Slots slot, out IEntity? item)
{
return _slots.TryGetValue(slot, out item);
}
public bool TryFindItemSlots(IEntity item, [NotNullWhen(true)] out Slots? slots)
{
slots = null;
foreach (var (slot, entity) in _slots)
{
if (entity == item)
{
slots = slot;
return true;
}
}
return false;
}
}
}

View File

@@ -17,5 +17,10 @@ namespace Content.Client.GameObjects.Components.Mobs
/// The order it will appear in the character UI, higher is lower
/// </summary>
UIPriority Priority { get; }
/// <summary>
/// Called when the CharacterUi was opened
/// </summary>
void Opened(){}
}
}

View File

@@ -1,4 +1,4 @@
#nullable enable
#nullable enable
using System;
using Robust.Client.Graphics.Drawing;
using Robust.Client.Graphics.Shaders;
@@ -105,16 +105,10 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
}
color = new Color(1.0f, 0.0f, 0.0f, _flash ? 1.0f : 0.0f);
}
else if (Ratio >= 1.0f)
{
color = new Color(0f, 1f, 0f);
}
}
else
{
// lerp
var hue = (5f / 18f) * Ratio;
color = Color.FromHsv((hue, 1f, 0.75f, 1f));
color = DoAfterHelpers.GetProgressColor(Ratio);
}
handle.UseShader(_shader);
@@ -128,4 +122,18 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
handle.DrawRect(box, color);
}
}
public static class DoAfterHelpers
{
public static Color GetProgressColor(float progress)
{
if (progress >= 1.0f)
{
return new Color(0f, 1f, 0f);
}
// lerp
var hue = (5f / 18f) * progress;
return Color.FromHsv((hue, 1f, 0.75f, 1f));
}
}
}

View File

@@ -114,7 +114,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
// Predictions
if (doAfter.BreakOnUserMove)
{
if (userGrid != doAfter.UserGrid)
if (!userGrid.InRange(EntityManager, doAfter.UserGrid, doAfter.MovementThreshold))
{
comp.Cancel(id, currentTime);
continue;
@@ -123,7 +123,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter
if (doAfter.BreakOnTargetMove)
{
if (EntityManager.TryGetEntity(doAfter.TargetUid, out var targetEntity) && targetEntity.Transform.Coordinates != doAfter.TargetGrid)
if (EntityManager.TryGetEntity(doAfter.TargetUid, out var targetEntity) && !targetEntity.Transform.Coordinates.InRange(EntityManager, doAfter.TargetGrid, doAfter.MovementThreshold))
{
comp.Cancel(id, currentTime);
continue;

View File

@@ -35,7 +35,6 @@
"Smes",
"LightBulb",
"Healing",
"Catwalk",
"RangedMagazine",
"Ammo",
"HitscanWeaponCapacitor",
@@ -210,8 +209,9 @@
"CrematoriumEntityStorage",
"RandomArcade",
"RandomSpriteState",
"WelderRefinable",
"ConveyorAssembly",
"TwoWayLever"
"TwoWayLever",
};
}
}

View File

@@ -6,7 +6,7 @@
<OutputPath>..\bin\Content.IntegrationTests\</OutputPath>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<LangVersion>8</LangVersion>
<LangVersion>9</LangVersion>
</PropertyGroup>
<Import Project="..\RobustToolbox\MSBuild\Robust.DefineConstants.targets" />
<ItemGroup>

View File

@@ -53,11 +53,11 @@ namespace Content.IntegrationTests.Tests
Assert.That(inventory.HasSlot(Slots.INNERCLOTHING));
Assert.That(inventory.HasSlot(Slots.IDCARD));
Assert.That(inventory.SpawnItemInSlot(Slots.INNERCLOTHING, "UniformJanitor", true));
Assert.That(inventory.SpawnItemInSlot(Slots.INNERCLOTHING, "ClothingUniformJumpsuitJanitor", true));
// Do we actually have the uniform equipped?
Assert.That(inventory.TryGetSlotItem(Slots.INNERCLOTHING, out ItemComponent uniform));
Assert.That(uniform.Owner.Prototype != null && uniform.Owner.Prototype.ID == "UniformJanitor");
Assert.That(uniform.Owner.Prototype != null && uniform.Owner.Prototype.ID == "ClothingUniformJumpsuitJanitor");
stun.Stun(1f);

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>8</LangVersion>
<LangVersion>9</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>..\bin\Content.Server.Database\</OutputPath>

View File

@@ -197,7 +197,7 @@ namespace Content.Server.Atmos
foreach (var entity in _gridTileLookupSystem.GetEntitiesIntersecting(GridIndex, GridIndices))
{
if (!entity.TryGetComponent(out IPhysicsComponent physics)
|| !entity.TryGetComponent(out MovedByPressureComponent pressure)
|| !entity.IsMovedByPressure(out var pressure)
|| entity.IsInContainer())
continue;

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>8</LangVersion>
<LangVersion>9</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>..\bin\Content.Server\</OutputPath>

View File

@@ -0,0 +1,58 @@
#nullable enable
using System.Collections.Generic;
using System.Linq;
using Content.Server.GameObjects.Components.Mobs;
using Content.Server.Mobs.Roles;
using Content.Shared.GameObjects.Components.Actor;
using Content.Shared.Objectives;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.Network;
using Robust.Shared.Players;
namespace Content.Server.GameObjects.Components.Actor
{
[RegisterComponent]
public class CharacterInfoComponent : SharedCharacterInfoComponent
{
public override void HandleNetworkMessage(ComponentMessage message, INetChannel netChannel, ICommonSession? session = null)
{
switch (message)
{
case RequestCharacterInfoMessage _:
var conditions = new Dictionary<string, List<ConditionInfo>>();
var jobTitle = "No Profession";
if (Owner.TryGetComponent(out MindComponent? mindComponent))
{
var mind = mindComponent.Mind;
if (mind != null)
{
// getting conditions
foreach (var objective in mind.AllObjectives)
{
if (!conditions.ContainsKey(objective.Issuer))
conditions[objective.Issuer] = new List<ConditionInfo>();
foreach (var condition in objective.Conditions)
{
conditions[objective.Issuer].Add(new ConditionInfo(condition.GetTitle(),
condition.GetDescription(), condition.GetIcon(), condition.GetProgress(mindComponent.Mind)));
}
}
// getting jobtitle
foreach (var role in mind.AllRoles)
{
if (role.GetType() == typeof(Job))
{
jobTitle = role.Name;
break;
}
}
}
}
SendNetworkMessage(new CharacterInfoMessage(jobTitle, conditions));
break;
}
}
}
}

View File

@@ -1,4 +1,7 @@
using Robust.Shared.GameObjects;
#nullable enable
using System.Diagnostics.CodeAnalysis;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
@@ -9,6 +12,8 @@ namespace Content.Server.GameObjects.Components.Atmos
{
public override string Name => "MovedByPressure";
[ViewVariables(VVAccess.ReadWrite)]
public bool Enabled { get; set; } = true;
[ViewVariables(VVAccess.ReadWrite)]
public float PressureResistance { get; set; } = 1f;
[ViewVariables(VVAccess.ReadWrite)]
@@ -19,8 +24,23 @@ namespace Content.Server.GameObjects.Components.Atmos
public override void ExposeData(ObjectSerializer serializer)
{
base.ExposeData(serializer);
serializer.DataField(this, x => x.Enabled, "enabled", true);
serializer.DataField(this, x => PressureResistance, "pressureResistance", 1f);
serializer.DataField(this, x => MoveResist, "moveResist", 100f);
}
}
public static class MovedByPressureExtensions
{
public static bool IsMovedByPressure(this IEntity entity)
{
return entity.IsMovedByPressure(out _);
}
public static bool IsMovedByPressure(this IEntity entity, [NotNullWhen(true)] out MovedByPressureComponent? moved)
{
return entity.TryGetComponent(out moved) &&
moved.Enabled;
}
}
}

View File

@@ -1,13 +0,0 @@
using Robust.Shared.GameObjects;
namespace Content.Server.GameObjects.Components
{
/// <summary>
/// Literally just a marker component for footsteps for now.
/// </summary>
[RegisterComponent]
public sealed class CatwalkComponent : Component
{
public override string Name => "Catwalk";
}
}

View File

@@ -0,0 +1,71 @@
#nullable enable
using System.Collections.Generic;
using System.Threading.Tasks;
using Content.Server.GameObjects.Components.Interactable;
using Content.Server.GameObjects.Components.Stack;
using Content.Shared.GameObjects.Components.Interactable;
using Content.Shared.Interfaces.GameObjects.Components;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
namespace Content.Server.GameObjects.Components.Construction
{
/// <summary>
/// Used for something that can be refined by welder.
/// For example, glass shard can be refined to glass sheet.
/// </summary>
[RegisterComponent]
public class WelderRefinableComponent : Component, IInteractUsing
{
[ViewVariables]
private HashSet<string>? _refineResult = default;
[ViewVariables]
private float _refineTime;
private bool _beingWelded;
public override string Name => "WelderRefinable";
public override void ExposeData(ObjectSerializer serializer)
{
base.ExposeData(serializer);
serializer.DataField(ref _refineResult, "refineResult", new HashSet<string> { "GlassStack" });
serializer.DataField(ref _refineTime, "refineTime", 2f);
}
public async Task<bool> InteractUsing(InteractUsingEventArgs eventArgs)
{
// check if object is welder
if (!eventArgs.Using.TryGetComponent(out ToolComponent? tool))
return false;
// check if someone is already welding object
if (_beingWelded)
return false;
_beingWelded = true;
if (!await tool.UseTool(eventArgs.User, Owner, _refineTime, ToolQuality.Welding))
{
// failed to veld - abort refine
_beingWelded = false;
return false;
}
// get last owner coordinates and delete it
var resultPosition = Owner.Transform.Coordinates;
Owner.Delete();
// spawn each result afrer refine
foreach (var result in _refineResult!)
{
var droppedEnt = Owner.EntityManager.SpawnEntity(result, resultPosition);
if (droppedEnt.TryGetComponent<StackComponent>(out var stackComp))
stackComp.Count = 1;
}
return true;
}
}
}

View File

@@ -0,0 +1,23 @@
using Robust.Server.GameObjects.Components.Container;
namespace Content.Server.GameObjects.Components.ContainerExt
{
public static class ContainerExt
{
public static int CountPrototypeOccurencesRecursive(this ContainerManagerComponent mgr, string prototypeId)
{
int total = 0;
foreach (var container in mgr.GetAllContainers())
{
foreach (var entity in container.ContainedEntities)
{
if (entity.Prototype?.ID == prototypeId) total++;
if(!entity.TryGetComponent<ContainerManagerComponent>(out var component)) continue;
total += component.CountPrototypeOccurencesRecursive(prototypeId);
}
}
return total;
}
}
}

View File

@@ -2,12 +2,13 @@
using System;
using System.Diagnostics.CodeAnalysis;
using Content.Server.Administration;
using Content.Server.GameObjects.Components.Atmos;
using Content.Server.GameObjects.EntitySystems;
using Content.Shared.Administration;
using Content.Shared.GameObjects.Components.Damage;
using Robust.Server.Interfaces.Console;
using Robust.Server.Interfaces.Player;
using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.IoC;
@@ -204,17 +205,12 @@ namespace Content.Server.GameObjects.Components.Damage
return;
}
if (entity.HasComponent<MovedByPressureComponent>())
{
entity.RemoveComponent<MovedByPressureComponent>();
}
var godmodeSystem = EntitySystem.Get<GodmodeSystem>();
var enabled = godmodeSystem.ToggleGodmode(entity);
if (entity.TryGetComponent(out IDamageableComponent? damageable))
{
damageable.AddFlag(DamageFlag.Invulnerable);
}
shell.SendText(player, $"Enabled godmode for entity {entity.Name}");
shell.SendText(player, enabled
? $"Enabled godmode for entity {entity.Name} with id {entity.Uid}"
: $"Disabled godmode for entity {entity.Name} with id {entity.Uid}");
}
}
}

View File

@@ -1,4 +1,4 @@
#nullable enable
#nullable enable
using System.Collections.Generic;
using Content.Server.GameObjects.EntitySystems.DoAfter;
using Content.Shared.GameObjects.Components;
@@ -31,6 +31,7 @@ namespace Content.Server.GameObjects.Components
doAfter.EventArgs.Delay,
doAfter.EventArgs.BreakOnUserMove,
doAfter.EventArgs.BreakOnTargetMove,
doAfter.EventArgs.MovementThreshold,
doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid);
toAdd.Add(clientDoAfter);

View File

@@ -80,6 +80,10 @@ namespace Content.Server.GameObjects.Components.Doors
public bool Occludes => _occludes;
[ViewVariables(VVAccess.ReadWrite)] private bool _bumpOpen;
public bool BumpOpen => _bumpOpen;
[ViewVariables(VVAccess.ReadWrite)]
public bool IsWeldedShut
{
@@ -112,6 +116,7 @@ namespace Content.Server.GameObjects.Components.Doors
base.ExposeData(serializer);
serializer.DataField(ref _occludes, "occludes", true);
serializer.DataField(ref _bumpOpen, "bumpOpen", true);
serializer.DataField(ref _isWeldedShut, "welded", false);
serializer.DataField(ref _canCrush, "canCrush", true);
}
@@ -147,6 +152,11 @@ namespace Content.Server.GameObjects.Components.Doors
return;
}
if (!_bumpOpen)
{
return;
}
// Disabled because it makes it suck hard to walk through double doors.
if (entity.HasComponent<IBody>())

View File

@@ -3,8 +3,10 @@ using System.Threading.Tasks;
using Content.Server.GameObjects.Components.Items.Clothing;
using Content.Server.GameObjects.Components.Items.Storage;
using Content.Server.GameObjects.Components.Power;
using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels;
using Content.Shared.GameObjects.Components;
using Content.Shared.GameObjects.EntitySystems;
using Content.Shared.GameObjects.Verbs;
using Content.Shared.Interfaces;
using Content.Shared.Interfaces.GameObjects.Components;
using Content.Shared.Utility;
@@ -164,7 +166,7 @@ namespace Content.Server.GameObjects.Components.Interactable
if (Owner.TryGetComponent(out ClothingComponent? clothing))
{
clothing.ClothingEquippedPrefix = on ? "On" : "Off";
clothing.ClothingEquippedPrefix = on ? "on" : "off";
}
if (Owner.TryGetComponent(out ItemComponent? item))
@@ -226,5 +228,25 @@ namespace Content.Server.GameObjects.Components.Interactable
{
return new HandheldLightComponentState(GetLevel());
}
[Verb]
public sealed class ToggleLightVerb : Verb<HandheldLightComponent>
{
protected override void GetData(IEntity user, HandheldLightComponent component, VerbData data)
{
if (!ActionBlockerSystem.CanInteract(user))
{
data.Visibility = VerbVisibility.Invisible;
return;
}
data.Text = Loc.GetString("Toggle light");
}
protected override void Activate(IEntity user, HandheldLightComponent component)
{
component.ToggleStatus(user);
}
}
}
}

View File

@@ -16,7 +16,6 @@ using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Map;
using Robust.Shared.Serialization;
using Robust.Shared.Timers;
using Robust.Shared.Utility;
using Robust.Shared.ViewVariables;

View File

@@ -6,6 +6,7 @@ using Robust.Shared.GameObjects.Components.Timers;
using Robust.Shared.Interfaces.Timing;
using Robust.Shared.IoC;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
using Timer = Robust.Shared.Timers.Timer;
namespace Content.Server.GameObjects.Components.Timing
@@ -24,6 +25,7 @@ namespace Content.Server.GameObjects.Components.Timing
/// <summary>
/// The time, in seconds, between an object's use and when it can be used again
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
public float Delay { get => _delay; set => _delay = value; }
public bool ActiveDelay{ get; private set; }

View File

@@ -1,4 +1,4 @@
#nullable enable
#nullable enable
using System;
using System.Threading.Tasks;
using Content.Server.GameObjects.Components.GUI;
@@ -118,12 +118,14 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
}
// TODO :Handle inertia in space.
if (EventArgs.BreakOnUserMove && EventArgs.User.Transform.Coordinates != UserGrid)
if (EventArgs.BreakOnUserMove && !EventArgs.User.Transform.Coordinates.InRange(
EventArgs.User.EntityManager, UserGrid, EventArgs.MovementThreshold))
{
return true;
}
if (EventArgs.BreakOnTargetMove && EventArgs.Target!.Transform.Coordinates != TargetGrid)
if (EventArgs.BreakOnTargetMove && !EventArgs.Target!.Transform.Coordinates.InRange(
EventArgs.User.EntityManager, TargetGrid, EventArgs.MovementThreshold))
{
return true;
}

View File

@@ -1,4 +1,4 @@
#nullable enable
#nullable enable
using System;
using System.Threading;
using Content.Shared.Physics;
@@ -60,6 +60,11 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
/// </summary>
public bool BreakOnTargetMove { get; set; }
/// <summary>
/// Threshold for user and target movement
/// </summary>
public float MovementThreshold { get; set; }
public bool BreakOnDamage { get; set; }
public bool BreakOnStun { get; set; }
@@ -86,6 +91,7 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter
Delay = delay;
CancelToken = cancelToken;
Target = target;
MovementThreshold = 0.1f;
if (Target == null)
{

View File

@@ -0,0 +1,100 @@
#nullable enable
using System.Collections.Generic;
using Content.Server.GameObjects.Components.Atmos;
using Content.Shared.GameObjects.Components.Damage;
using Content.Shared.GameTicking;
using JetBrains.Annotations;
using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.GameObjects.EntitySystems
{
[UsedImplicitly]
public class GodmodeSystem : EntitySystem, IResettingEntitySystem
{
private readonly Dictionary<IEntity, OldEntityInformation> _entities = new Dictionary<IEntity, OldEntityInformation>();
public void Reset()
{
_entities.Clear();
}
public bool EnableGodmode(IEntity entity)
{
if (_entities.ContainsKey(entity))
{
return false;
}
_entities[entity] = new OldEntityInformation(entity);
if (entity.TryGetComponent(out MovedByPressureComponent? moved))
{
moved.Enabled = false;
}
if (entity.TryGetComponent(out IDamageableComponent? damageable))
{
damageable.AddFlag(DamageFlag.Invulnerable);
}
return true;
}
public bool HasGodmode(IEntity entity)
{
return _entities.ContainsKey(entity);
}
public bool DisableGodmode(IEntity entity)
{
if (!_entities.Remove(entity, out var old))
{
return false;
}
if (entity.TryGetComponent(out MovedByPressureComponent? moved))
{
moved.Enabled = old.MovedByPressure;
}
if (entity.TryGetComponent(out IDamageableComponent? damageable))
{
damageable.RemoveFlag(DamageFlag.Invulnerable);
}
return true;
}
/// <summary>
/// Toggles godmode for a given entity.
/// </summary>
/// <param name="entity">The entity to toggle godmode for.</param>
/// <returns>true if enabled, false if disabled.</returns>
public bool ToggleGodmode(IEntity entity)
{
if (HasGodmode(entity))
{
DisableGodmode(entity);
return false;
}
else
{
EnableGodmode(entity);
return true;
}
}
public class OldEntityInformation
{
public OldEntityInformation(IEntity entity)
{
Entity = entity;
MovedByPressure = entity.IsMovedByPressure();
}
public IEntity Entity { get; }
public bool MovedByPressure { get; }
}
}
}

View File

@@ -56,7 +56,8 @@ namespace Content.Server.GameObjects.EntitySystems
public override void Update(float frameTime)
{
foreach (var (moverComponent, collidableComponent) in EntityManager.ComponentManager.EntityQuery<IMoverComponent, IPhysicsComponent>())
foreach (var (moverComponent, collidableComponent) in EntityManager.ComponentManager
.EntityQuery<IMoverComponent, IPhysicsComponent>(false))
{
var entity = moverComponent.Owner;
UpdateKinematics(entity.Transform, moverComponent, collidableComponent);
@@ -141,24 +142,19 @@ namespace Content.Server.GameObjects.EntitySystems
var grid = _mapManager.GetGrid(coordinates.GetGridId(EntityManager));
var tile = grid.GetTileRef(coordinates);
// If the coordinates have a catwalk, it's always catwalk.
string soundCollectionName;
var catwalk = false;
foreach (var maybeCatwalk in grid.GetSnapGridCell(tile.GridIndices, SnapGridOffset.Center))
// If the coordinates have a FootstepModifier component
// i.e. component that emit sound on footsteps emit that sound
string? soundCollectionName = null;
foreach (var maybeFootstep in grid.GetSnapGridCell(tile.GridIndices, SnapGridOffset.Center))
{
if (maybeCatwalk.Owner.HasComponent<CatwalkComponent>())
if (maybeFootstep.Owner.TryGetComponent(out FootstepModifierComponent? footstep))
{
catwalk = true;
soundCollectionName = footstep._soundCollectionName;
break;
}
}
if (catwalk)
{
// Catwalk overrides tile sound.s
soundCollectionName = "footstep_catwalk";
}
else
// if there is no FootstepModifierComponent, determine sound based on tiles
if (soundCollectionName == null)
{
// Walking on a tile.
var def = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TypeId];

View File

@@ -10,7 +10,6 @@
"SubFloorHide",
"LowWall",
"ReinforcedWall",
"CharacterInfo",
"InteractionOutline",
"MeleeWeaponArcAnimation",
"AnimationsTest",

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using Content.Server.GameObjects.Components.Mobs;
using Content.Server.Mobs.Roles;
using Content.Server.Objectives;
using Content.Server.Players;
using Robust.Server.Interfaces.GameObjects;
using Robust.Server.Interfaces.Player;
@@ -27,6 +28,8 @@ namespace Content.Server.Mobs
{
private readonly ISet<Role> _roles = new HashSet<Role>();
private readonly List<ObjectivePrototype> _objectives = new List<ObjectivePrototype>();
/// <summary>
/// Creates the new mind attached to a specific player session.
/// </summary>
@@ -74,6 +77,12 @@ namespace Content.Server.Mobs
[ViewVariables]
public IEnumerable<Role> AllRoles => _roles;
/// <summary>
/// An enumerable over all the objectives this mind has.
/// </summary>
[ViewVariables]
public IEnumerable<ObjectivePrototype> AllObjectives => _objectives;
/// <summary>
/// The session of the player owning this mind.
/// Can be null, in which case the player is currently not logged in.
@@ -144,6 +153,32 @@ namespace Content.Server.Mobs
return _roles.Any(role => role.GetType() == t);
}
/// <summary>
/// Adds an objective to this mind.
/// </summary>
public bool TryAddObjective(ObjectivePrototype objective)
{
if (!objective.CanBeAssigned(this))
return false;
_objectives.Add(objective);
return true;
}
/// <summary>
/// Removes an objective to this mind.
/// </summary>
/// <returns>Returns true if the removal succeeded.</returns>
public bool TryRemoveObjective(int index)
{
if (_objectives.Count >= index) return false;
var objective = _objectives[index];
_objectives.Remove(objective);
return true;
}
/// <summary>
/// Transfer this mind's control over to a new entity.
/// </summary>

View File

@@ -0,0 +1,139 @@
#nullable enable
using System.Linq;
using Content.Server.Administration;
using Content.Server.Players;
using Content.Shared.Administration;
using Robust.Server.Interfaces.Console;
using Robust.Server.Interfaces.Player;
using Robust.Shared.IoC;
using Robust.Shared.Prototypes;
namespace Content.Server.Objectives
{
[AdminCommand(AdminFlags.Admin)]
public class AddObjectiveCommand : IClientCommand
{
public string Command => "addobjective";
public string Description => "Adds an objective to the player's mind.";
public string Help => "addobjective <username> <objectiveID>";
public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args)
{
if (args.Length != 2)
{
shell.SendText(player, "Expected exactly 2 arguments.");
return;
}
var mgr = IoCManager.Resolve<IPlayerManager>();
if (!mgr.TryGetPlayerDataByUsername(args[0], out var data))
{
shell.SendText(player, "Can't find the playerdata.");
return;
}
var mind = data.ContentData()?.Mind;
if (mind == null)
{
shell.SendText(player, "Can't find the mind.");
return;
}
if (!IoCManager.Resolve<IPrototypeManager>()
.TryIndex<ObjectivePrototype>(args[1], out var objectivePrototype))
{
shell.SendText(player, $"Can't find matching ObjectivePrototype {objectivePrototype}");
return;
}
if (!mind.TryAddObjective(objectivePrototype))
{
shell.SendText(player, "Objective requirements dont allow that objective to be added.");
}
}
}
[AdminCommand(AdminFlags.Admin)]
public class ListObjectivesCommand : IClientCommand
{
public string Command => "lsobjectives";
public string Description => "Lists all objectives in a players mind.";
public string Help => "lsobjectives [<username>]";
public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args)
{
IPlayerData? data;
if (args.Length == 0 && player != null)
{
data = player.Data;
}
else if (player == null || !IoCManager.Resolve<IPlayerManager>().TryGetPlayerDataByUsername(args[0], out data))
{
shell.SendText(player, "Can't find the playerdata.");
return;
}
var mind = data.ContentData()?.Mind;
if (mind == null)
{
shell.SendText(player, "Can't find the mind.");
return;
}
shell.SendText(player, $"Objectives for player {data.UserId}:");
var objectives = mind.AllObjectives.ToList();
if (objectives.Count == 0)
{
shell.SendText(player, "None.");
}
for (var i = 0; i < objectives.Count; i++)
{
shell.SendText(player, $"- [{i}] {objectives[i]}");
}
}
}
[AdminCommand(AdminFlags.Admin)]
public class RemoveObjectiveCommand : IClientCommand
{
public string Command => "rmobjective";
public string Description => "Removes an objective from the player's mind.";
public string Help => "rmobjective <username> <index>";
public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args)
{
if (args.Length != 2)
{
shell.SendText(player, "Expected exactly 2 arguments.");
return;
}
var mgr = IoCManager.Resolve<IPlayerManager>();
if (mgr.TryGetPlayerDataByUsername(args[0], out var data))
{
var mind = data.ContentData()?.Mind;
if (mind == null)
{
shell.SendText(player, "Can't find the mind.");
return;
}
if (int.TryParse(args[1], out var i))
{
shell.SendText(player,
mind.TryRemoveObjective(i)
? "Objective successfully removed!"
: "Objective removing failed. Maybe the index is out of bounds? Check lsobjectives!");
}
else
{
shell.SendText(player, $"Invalid index {args[1]}!");
}
}
else
{
shell.SendText(player, "Can't find the playerdata.");
}
}
}
}

View File

@@ -0,0 +1,57 @@
#nullable enable
using Content.Server.GameObjects.Components.ContainerExt;
using Content.Server.Mobs;
using Content.Server.Objectives.Interfaces;
using Robust.Server.GameObjects.Components.Container;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Log;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.Utility;
namespace Content.Server.Objectives.Conditions
{
public class StealCondition : IObjectiveCondition
{
public string PrototypeId { get; private set; } = default!;
public int Amount { get; private set; }
public void ExposeData(ObjectSerializer serializer)
{
serializer.DataField(this, x => x.PrototypeId, "prototype", "");
serializer.DataField(this, x => x.Amount, "amount", 1);
if (Amount < 1)
{
Logger.Error("StealCondition has an amount less than 1 ({0})", Amount);
}
}
private string PrototypeName =>
IoCManager.Resolve<IPrototypeManager>().TryIndex<EntityPrototype>(PrototypeId, out var prototype)
? prototype.Name
: "[CANNOT FIND NAME]";
public string GetTitle() => Loc.GetString("Steal {0} {1}", Amount > 1 ? $"{Amount}x" : "", Loc.GetString(PrototypeName));
public string GetDescription() => Loc.GetString("We need you to steal {0}. Don't get caught.", Loc.GetString(PrototypeName));
public SpriteSpecifier GetIcon()
{
return new SpriteSpecifier.EntityPrototype(PrototypeId);
}
public float GetProgress(Mind? mind)
{
if (mind?.OwnedEntity == null) return 0f;
if (!mind.OwnedEntity.TryGetComponent<ContainerManagerComponent>(out var containerManagerComponent)) return 0f;
float count = containerManagerComponent.CountPrototypeOccurencesRecursive(PrototypeId);
return count/Amount;
}
public float GetDifficulty() => 1f;
}
}

View File

@@ -0,0 +1,35 @@
using Content.Server.Mobs;
using Robust.Shared.Interfaces.Serialization;
using Robust.Shared.Utility;
namespace Content.Server.Objectives.Interfaces
{
public interface IObjectiveCondition : IExposeData
{
/// <summary>
/// Returns the title of the condition.
/// </summary>
string GetTitle();
/// <summary>
/// Returns the description of the condition.
/// </summary>
string GetDescription();
/// <summary>
/// Returns a SpriteSpecifier to be used as an icon for the condition.
/// </summary>
SpriteSpecifier GetIcon();
/// <summary>
/// Returns the current progress of the condition in %.
/// </summary>
/// <returns>Current progress in %.</returns>
float GetProgress(Mind mind);
/// <summary>
/// Returns a difficulty of the condition.
/// </summary>
float GetDifficulty();
}
}

View File

@@ -0,0 +1,15 @@
using Content.Server.Mobs;
using Robust.Shared.Interfaces.Serialization;
namespace Content.Server.Objectives.Interfaces
{
public interface IObjectiveRequirement : IExposeData
{
/// <summary>
/// Checks whether or not the entity & its surroundings are valid to be given the objective.
/// </summary>
/// <returns>Returns true if objective can be given.</returns>
bool CanBeAssigned(Mind mind);
}
}

View File

@@ -0,0 +1,17 @@
using Content.Server.Mobs;
namespace Content.Server.Objectives.Interfaces
{
public interface IObjectivesManager
{
/// <summary>
/// Returns all objectives the provided mind is valid for.
/// </summary>
ObjectivePrototype[] GetAllPossibleObjectives(Mind mind);
/// <summary>
/// Returns a randomly picked (no pop) collection of objectives the provided mind is valid for.
/// </summary>
ObjectivePrototype[] GetRandomObjectives(Mind mind, float maxDifficulty = 3f);
}
}

View File

@@ -0,0 +1,60 @@
using System.Collections.Generic;
using System.Linq;
using Content.Server.Mobs;
using Content.Server.Objectives.Interfaces;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.ViewVariables;
using YamlDotNet.RepresentationModel;
namespace Content.Server.Objectives
{
[Prototype("objective")]
public class ObjectivePrototype : IPrototype, IIndexedPrototype
{
[ViewVariables]
public string ID { get; private set; }
[ViewVariables(VVAccess.ReadWrite)]
public string Issuer { get; private set; }
[ViewVariables]
public float Probability { get; private set; }
[ViewVariables]
public IReadOnlyList<IObjectiveCondition> Conditions => _conditions;
[ViewVariables]
public IReadOnlyList<IObjectiveRequirement> Requirements => _requirements;
[ViewVariables]
public float Difficulty => _difficultyOverride ?? _conditions.Sum(c => c.GetDifficulty());
private List<IObjectiveCondition> _conditions = new List<IObjectiveCondition>();
private List<IObjectiveRequirement> _requirements = new List<IObjectiveRequirement>();
[ViewVariables(VVAccess.ReadWrite)]
private float? _difficultyOverride = null;
public bool CanBeAssigned(Mind mind)
{
foreach (var requirement in _requirements)
{
if (!requirement.CanBeAssigned(mind)) return false;
}
return true;
}
public void LoadFrom(YamlMappingNode mapping)
{
var ser = YamlObjectSerializer.NewReader(mapping);
ser.DataField(this, x => x.ID, "id", string.Empty);
ser.DataField(this, x => x.Issuer, "issuer", "Unknown");
ser.DataField(this, x => x.Probability, "prob", 0.3f);
ser.DataField(this, x => x._conditions, "conditions", new List<IObjectiveCondition>());
ser.DataField(this, x => x._requirements, "requirements", new List<IObjectiveRequirement>());
ser.DataField(this, x => x._difficultyOverride, "difficultyOverride", null);
}
}
}

View File

@@ -0,0 +1,53 @@
using System.Collections.Generic;
using System.Linq;
using Content.Server.Mobs;
using Content.Server.Objectives.Interfaces;
using Robust.Shared.Interfaces.Random;
using Robust.Shared.IoC;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Utility;
namespace Content.Server.Objectives
{
public class ObjectivesManager : IObjectivesManager
{
[Dependency] private IPrototypeManager _prototypeManager = default!;
[Dependency] private IRobustRandom _random = default!;
public ObjectivePrototype[] GetAllPossibleObjectives(Mind mind)
{
return _prototypeManager.EnumeratePrototypes<ObjectivePrototype>().Where(objectivePrototype => objectivePrototype.CanBeAssigned(mind)).ToArray();
}
public ObjectivePrototype[] GetRandomObjectives(Mind mind, float maxDifficulty = 3)
{
var objectives = GetAllPossibleObjectives(mind);
//to prevent endless loops
if(objectives.Length == 0 || objectives.Sum(o => o.Difficulty) == 0f) return objectives;
var result = new List<ObjectivePrototype>();
var currentDifficulty = 0f;
_random.Shuffle(objectives);
while (currentDifficulty < maxDifficulty)
{
foreach (var objective in objectives)
{
if (!_random.Prob(objective.Probability)) continue;
result.Add(objective);
currentDifficulty += objective.Difficulty;
if (currentDifficulty >= maxDifficulty) break;
}
}
if (currentDifficulty > maxDifficulty) //will almost always happen
{
result.Pop();
}
return result.ToArray();
}
}
}

View File

@@ -0,0 +1,17 @@
using Content.Server.Mobs;
using Content.Server.Mobs.Roles.Suspicion;
using Content.Server.Objectives.Interfaces;
using Robust.Shared.Serialization;
namespace Content.Server.Objectives.Requirements
{
public class SuspicionTraitorRequirement : IObjectiveRequirement
{
public void ExposeData(ObjectSerializer serializer){}
public bool CanBeAssigned(Mind mind)
{
return mind.HasRole<SuspicionTraitorRole>();
}
}
}

View File

@@ -14,6 +14,8 @@ using Content.Server.Interfaces;
using Content.Server.Interfaces.Chat;
using Content.Server.Interfaces.GameTicking;
using Content.Server.Interfaces.PDA;
using Content.Server.Objectives;
using Content.Server.Objectives.Interfaces;
using Content.Server.PDA;
using Content.Server.Preferences;
using Content.Server.Sandbox;
@@ -49,6 +51,7 @@ namespace Content.Server
IoCManager.Register<ConsiderationsManager, ConsiderationsManager>();
IoCManager.Register<IAccentManager, AccentManager>();
IoCManager.Register<IConnectionManager, ConnectionManager>();
IoCManager.Register<IObjectivesManager, ObjectivesManager>();
IoCManager.Register<IAdminManager, AdminManager>();
IoCManager.Register<IDeviceNetwork, DeviceNetwork>();
IoCManager.Register<EuiManager, EuiManager>();

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>8</LangVersion>
<LangVersion>9</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>../bin/Content.Shared</OutputPath>

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using Content.Shared.Objectives;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization;
namespace Content.Shared.GameObjects.Components.Actor
{
public class SharedCharacterInfoComponent : Component
{
public override string Name => "CharacterInfo";
public override uint? NetID => ContentNetIDs.CHARACTERINFO;
[Serializable, NetSerializable]
protected class RequestCharacterInfoMessage : ComponentMessage
{
public RequestCharacterInfoMessage()
{
Directed = true;
}
}
[Serializable, NetSerializable]
protected class CharacterInfoMessage : ComponentMessage
{
public readonly Dictionary<string, List<ConditionInfo>> Objectives;
public readonly string JobTitle;
public CharacterInfoMessage(string jobTitle, Dictionary<string, List<ConditionInfo>> objectives)
{
Directed = true;
JobTitle = jobTitle;
Objectives = objectives;
}
}
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
@@ -59,7 +59,9 @@ namespace Content.Shared.GameObjects.Components
public bool BreakOnTargetMove { get; }
public ClientDoAfter(byte id, EntityCoordinates userGrid, EntityCoordinates targetGrid, TimeSpan startTime, float delay, bool breakOnUserMove, bool breakOnTargetMove, EntityUid targetUid = default)
public float MovementThreshold { get; }
public ClientDoAfter(byte id, EntityCoordinates userGrid, EntityCoordinates targetGrid, TimeSpan startTime, float delay, bool breakOnUserMove, bool breakOnTargetMove, float movementThreshold, EntityUid targetUid = default)
{
ID = id;
UserGrid = userGrid;
@@ -68,6 +70,7 @@ namespace Content.Shared.GameObjects.Components
Delay = delay;
BreakOnUserMove = breakOnUserMove;
BreakOnTargetMove = breakOnTargetMove;
MovementThreshold = movementThreshold;
TargetUid = targetUid;
}
}

View File

@@ -84,6 +84,7 @@
public const uint PULLABLE = 1078;
public const uint GAS_TANK = 1079;
public const uint SINGULARITY = 1080;
public const uint CHARACTERINFO = 1081;
// Net IDs for integration tests.
public const uint PREDICTION_TEST = 10001;

View File

@@ -49,7 +49,8 @@ namespace Content.Shared.GameObjects.EntitySystems
base.Shutdown();
}
protected void UpdateKinematics(ITransformComponent transform, IMoverComponent mover, IPhysicsComponent physics)
//TODO: reorganize this to make more logical sense
protected void UpdateKinematics(ITransformComponent transform, IMoverComponent mover, IPhysicsComponent physics)
{
physics.EnsureController<MoverController>();
@@ -70,14 +71,14 @@ namespace Content.Shared.GameObjects.EntitySystems
// TODO: movement check.
var (walkDir, sprintDir) = mover.VelocityDir;
var combined = walkDir + sprintDir;
if (combined.LengthSquared < 0.001 || !ActionBlockerSystem.CanMove(mover.Owner) && !weightless)
if (combined.LengthSquared < 0.001 || !ActionBlockerSystem.CanMove(mover.Owner) && !weightless)
{
if (physics.TryGetController(out MoverController controller))
{
controller.StopMoving();
}
}
else
else if (ActionBlockerSystem.CanMove(mover.Owner))
{
if (weightless)
{

View File

@@ -0,0 +1,23 @@
using System;
using Robust.Shared.Serialization;
using Robust.Shared.Utility;
namespace Content.Shared.Objectives
{
[Serializable, NetSerializable]
public class ConditionInfo
{
public string Title { get; }
public string Description { get; }
public SpriteSpecifier SpriteSpecifier { get; }
public float Progress { get; }
public ConditionInfo(string title, string description, SpriteSpecifier spriteSpecifier, float progress)
{
Title = title;
Description = description;
SpriteSpecifier = spriteSpecifier;
Progress = progress;
}
}
}

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>8</LangVersion>
<LangVersion>9</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>..\bin\Content.Tests\</OutputPath>

View File

@@ -1,7 +1,7 @@
meta:
format: 2
name: DemoStation
author: Space-Wizards
name: Saltern
author: Buncha sickass mfers
postmapinit: false
tilemap:
0: space
@@ -474,7 +474,7 @@ entities:
rot: -1.5707963267948966 rad
type: Transform
- uid: 52
type: ShoesCoder
type: ClothingUnderSocksCoder
components:
- parent: 855
pos: 47.437466,-6.6893435
@@ -490,14 +490,14 @@ entities:
- useSound: /Audio/Items/jaws_pry.ogg
type: Tool
- uid: 54
type: GlovesLatex
type: ClothingHandsGlovesLatex
components:
- parent: 855
pos: 22.086878,-4.4133806
rot: -1.5707963267948966 rad
type: Transform
- uid: 55
type: GlovesLatex
type: ClothingHandsGlovesLatex
components:
- parent: 855
pos: 21.618128,-4.4133806
@@ -712,14 +712,14 @@ entities:
rot: -1.5707963267948966 rad
type: Transform
- uid: 82
type: Bling
type: ClothingNeckBling
components:
- parent: 855
pos: -2.861164,18.612366
rot: -1.5707963267948966 rad
type: Transform
- uid: 83
type: Bling
type: ClothingNeckBling
components:
- parent: 855
pos: -2.564289,18.643616
@@ -971,19 +971,19 @@ entities:
type: Content.Server.GameObjects.ContainerSlot
type: ContainerContainer
- uid: 117
type: HatHardhatYellow
type: ClothingHeadHatHardhatYellow
components:
- parent: 855
pos: 31.357727,-4.36431
type: Transform
- uid: 118
type: HatHardhatWhite
type: ClothingHeadHatHardhatWhite
components:
- parent: 855
pos: 31.623352,-4.14556
type: Transform
- uid: 119
type: HatHardhatRed
type: ClothingHeadHatHardhatRed
components:
- parent: 855
pos: 31.201477,-4.05181
@@ -47190,7 +47190,7 @@ entities:
rot: -1.5707963267948966 rad
type: Transform
- uid: 4144
type: MaskJoy
type: ClothingMaskJoy
components:
- parent: 855
pos: 13.418978,24.555822

View File

@@ -1977,7 +1977,7 @@ entities:
- anchored: False
type: Physics
- uid: 225
type: OuterclothingVest
type: ClothingOuterVest
components:
- parent: 216
pos: 1.412994,7.507263
@@ -2973,7 +2973,7 @@ entities:
rot: -1.5707963267949 rad
type: Transform
- uid: 361
type: OuterclothingVest
type: ClothingOuterVest
components:
- parent: 216
pos: 0.5223687,7.507263
@@ -3874,7 +3874,7 @@ entities:
- anchored: False
type: Physics
- uid: 473
type: UniformEngineering
type: ClothingUniformJumpsuitEngineering
components:
- parent: 216
pos: -0.6474335,-10.27245
@@ -3883,7 +3883,7 @@ entities:
- anchored: False
type: Physics
- uid: 474
type: GasMaskClothing
type: ClothingMaskGas
components:
- parent: 216
pos: -0.2880585,-10.69432
@@ -3892,7 +3892,7 @@ entities:
- anchored: False
type: Physics
- uid: 475
type: OuterclothingVest
type: ClothingOuterVest
components:
- parent: 216
pos: -0.9130585,-10.66307
@@ -3901,7 +3901,7 @@ entities:
- anchored: False
type: Physics
- uid: 476
type: UtilityBeltClothingFilled
type: ClothingBeltUtilityFilled
components:
- parent: 216
pos: -1.895102,-10.33495
@@ -3914,7 +3914,7 @@ entities:
type: Robust.Server.GameObjects.Components.Container.Container
type: ContainerContainer
- uid: 477
type: UtilityBeltClothingFilled
type: ClothingBeltUtilityFilled
components:
- parent: 216
pos: -1.770102,-10.63182
@@ -3972,7 +3972,7 @@ entities:
type: Robust.Server.GameObjects.Components.Container.Container
type: ContainerContainer
- uid: 481
type: BackpackClothing
type: ClothingBackpack
components:
- parent: 216
pos: -5.089887,7.591276
@@ -3985,7 +3985,7 @@ entities:
type: Robust.Server.GameObjects.Components.Container.Container
type: ContainerContainer
- uid: 482
type: BackpackClothing
type: ClothingBackpack
components:
- parent: 216
pos: -4.683637,7.606901
@@ -3998,7 +3998,7 @@ entities:
type: Robust.Server.GameObjects.Components.Container.Container
type: ContainerContainer
- uid: 483
type: GlovesBlack
type: ClothingHandsGlovesColorBlack
components:
- parent: 216
pos: -3.386762,7.466276
@@ -4348,7 +4348,7 @@ entities:
rot: -1.5707963267949 rad
type: Transform
- uid: 527
type: GlovesLeather
type: ClothingHandsGlovesLeather
components:
- parent: 216
pos: -4.332221,4.64238
@@ -4357,7 +4357,7 @@ entities:
- anchored: False
type: Physics
- uid: 528
type: GlovesLeather
type: ClothingHandsGlovesLeather
components:
- parent: 216
pos: -3.519721,4.64238
@@ -4366,7 +4366,7 @@ entities:
- anchored: False
type: Physics
- uid: 529
type: GlovesLeather
type: ClothingHandsGlovesLeather
components:
- parent: 216
pos: -2.597846,4.61113

View File

@@ -1,7 +1,7 @@
- type: entity
abstract: true
parent: BackpackClothing
id: BackpackClothingFilled
parent: ClothingBackpack
id: ClothingBackpackFilled
components:
- type: StorageFill
contents:
@@ -9,8 +9,8 @@
- type: entity
abstract: true
parent: ClownPack
id: ClownPackFilled
parent: ClothingBackpackClown
id: ClothingBackpackClownFilled
components:
- type: StorageFill
contents:
@@ -18,8 +18,8 @@
- type: entity
abstract: true
parent: SecPack
id: SecPackFilled
parent: ClothingBackpackSecurity
id: ClothingBackpackSecurityFilled
components:
- type: StorageFill
contents:
@@ -29,8 +29,8 @@
- type: entity
abstract: true
parent: BackpackMedical
id: BackpackMedicalFilled
parent: ClothingBackpackMedical
id: ClothingBackpackMedicalFilled
components:
- type: StorageFill
contents:
@@ -38,8 +38,8 @@
- type: entity
abstract: true
parent: BackpackCaptain
id: BackpackCaptainFilled
parent: ClothingBackpackCaptain
id: ClothingBackpackCaptainFilled
components:
- type: StorageFill
contents:
@@ -49,8 +49,8 @@
- type: entity
abstract: true
parent: BackpackEngineering
id: BackpackEngineeringFilled
parent: ClothingBackpackEngineering
id: ClothingBackpackEngineeringFilled
components:
- type: StorageFill
contents:

View File

@@ -1,6 +1,6 @@
- type: entity
id: UtilityBeltClothingFilled #Change to ClothingBeltUtilityFilled
parent: UtilityBeltClothing #Change to ClothingBeltUtility
id: ClothingBeltUtilityFilled
parent: ClothingBeltUtility
description: "Holds tools."
suffix: Filled
components:
@@ -13,17 +13,6 @@
- name: Welder
- name: Multitool
- type: entity
id: UtilityBeltClothingFilledEvent
parent: UtilityBeltClothing
suffix: Filled
components:
- type: StorageFill
contents:
- name: Crowbar
- name: Screwdriver
- name: Multitool
- type: entity
id: ClothingBeltChiefEngineerFilled
parent: ClothingBeltChiefEngineer
@@ -44,7 +33,6 @@
components:
- type: StorageFill
contents:
- name: SecGlasses
- name: GrenadeFlashBang
- name: GrenadeFlashBang
- name: Stunbaton
@@ -60,6 +48,6 @@
contents:
- name: Soap #Make a soap group and pick between when i'm not lazy
- name: SprayBottleSpaceCleaner
- name: # GrenadeChem
- name: # GrenadeChem
#- name: GrenadeChem
#- name: GrenadeChem
- name: FlashlightLantern

View File

@@ -0,0 +1,16 @@
- type: entity
parent: ClothingBackpackDuffelMedical
id: ClothingBackpackDuffelSurgeryFilled
name: surgical duffel bag
description: "A large duffel bag for holding extra medical supplies - this one seems to be designed for holding surgical tools."
components:
- type: StorageFill
contents:
- name: Hemostat
- name: BoneSaw
- name: Drill
- name: Cautery
- name: Retractor
- name: Scalpel
- type: Storage
capacity: 30

View File

@@ -5,7 +5,7 @@
components:
- type: StorageFill
contents:
- name: OuterclothingHazard
- name: ClothingOuterVestHazard
prob: 0.4
- name: FlashlightLantern
prob: 0.7
@@ -21,11 +21,11 @@
prob: 0.7
- name: Multitool
prob: 0.2
- name: UtilityBeltClothing
- name: ClothingBeltUtility
prob: 0.2
- name: GlovesYellow
- name: ClothingHandsGlovesColorYellow
prob: 0.05
- name: HatHardhatRed
- name: ClothingHeadHatHardhatRed
prob: 0.4
- name: ApcExtensionCableStack
prob: 0.3
@@ -43,9 +43,9 @@
contents:
- name: ToolboxEmergencyFilled
prob: 0.4
- name: BreathMaskClothing
- name: ClothingMaskBreath
prob: 0.4
- name: BreathMaskClothing
- name: ClothingMaskBreath
prob: 0.25
- name: EmergencyOxygenTankFilled
prob: 0.4
@@ -79,9 +79,9 @@
components:
- type: StorageFill
contents:
- name: HelmetHardsuitCE
- name: HardsuitCE
- name: BreathMaskClothing
- name: ClothingHeadHelmetHardsuitEngineeringWhite
- name: ClothingOuterHardsuitEngineeringWhite
- name: ClothingMaskBreath
- name: OxygenTankFilled
- type: entity
@@ -101,9 +101,9 @@
components:
- type: StorageFill
contents:
- name: HelmetHardsuitAtmos
- name: HardsuitAtmos
- name: BreathMaskClothing
- name: ClothingHeadHelmetHardsuitAtmos
- name: ClothingOuterHardsuitAtmos
- name: ClothingMaskBreath
- name: OxygenTankFilled
- type: entity
@@ -113,9 +113,9 @@
components:
- type: StorageFill
contents:
- name: HelmetHardsuitEngineering
- name: HardsuitEngineering
- name: BreathMaskClothing
- name: ClothingHeadHelmetHardsuitEngineering
- name: ClothingOuterHardsuitEngineering
- name: ClothingMaskBreath
- name: OxygenTankFilled
- type: entity
@@ -135,7 +135,7 @@
components:
- type: StorageFill
contents:
- name: GlovesLatex
- name: ClothingHandsGlovesLatex
prob: 0.4
- type: entity
@@ -241,7 +241,7 @@
components:
- type: StorageFill
contents:
- name: GlovesLatex
- name: ClothingHandsGlovesLatex
prob: 0.4
- type: entity
@@ -328,7 +328,7 @@
contents:
- name: RedOxygenTankFilled
prob: 0.6
- name: OuterclothingFiresuit
- name: ClothingOuterSuitFire
prob: 0.75
- type: entity

View File

@@ -4,13 +4,10 @@
description: "A vending machine containing religious supplies and clothing. A label reads: \"A holy vendor for a pious man.\""
spriteName: chapel
startingInventory:
OuterclothingChaplainhoodie: 1
OuterclothingAcolyte: 4
OuterclothingBedsheet: 4
OuterclothingBlackhoodie: 1
OuterclothingChurchcoat: 1
OuterclothingCultrobes: 1
OuterclothingCultarmour: 1
HatChaplainHood: 1
HatCulthood: 1
HatCultHelmet: 1
ClothingOuterHoodieChaplain: 1
ClothingOuterHoodieBlack: 1
ClothingOuterRobesCult: 1
ClothingOuterArmorCult: 1
ClothingHeadHatHoodChaplainHood: 1
ClothingHeadHatHoodCulthood: 1
ClothingHeadHelmetCult: 1

View File

@@ -5,6 +5,6 @@
animationDuration: 2.1
spriteName: engivend
startingInventory:
MesonGlasses: 4
ClothingEyesGlassesMeson: 4
Multitool: 4
PowerCellSmallHigh: 5

View File

@@ -4,22 +4,19 @@
description: A vending machine containing hats.
spriteName: hats
startingInventory:
HatBandana: 3
HatBandblack: 3
HatBandblue: 3
HatBandbotany: 3
HatBandcamo: 3
HatBandgreen: 3
HatBandred: 3
HatBandskull: 3
HatBearpelt: 3
HatBeret: 3
HatBluesoft: 3
HatBluesoftFlipped: 3
HatBowler: 3
HatBunny: 3
HatCake: 3
HatCargosoft: 3
HatCentcom: 3
HatChefhat: 3
HatCowboy: 3
HatBandBlack: 3
HatBandBlue: 3
HatBandBotany: 3
HatBandGreen: 3
HatBandRed: 3
HatBandSkull: 3
ClothingHeadHatBearpelt: 3
ClothingHeadHatBeret: 3
ClothingHeadHatBluesoft: 3
ClothingHeadHatBluesoftFlipped: 3
ClothingHeadHatBowlerHat: 3
ClothingHeadHatBunny: 3
ClothingHeadHatCake: 3
ClothingHeadHatCargosoft: 3
ClothingHeadHatCentcom: 3
ClothingHeadHatChef: 3

View File

@@ -4,7 +4,7 @@
description: A vending machine containing footwear.
spriteName: shoes
startingInventory:
ShoesWhite: 3
ShoesClown: 3
ShoesJackboots: 3
ShoesBrown: 3
ClothingShoesColorWhite: 3
ClothingShoesClown: 3
ClothingShoesBootsJack: 3
ClothingShoesColorBrown: 3

View File

@@ -4,12 +4,11 @@
description: A vending machine containing jumpsuits and dress garments.
spriteName: suits
startingInventory:
UniformJanitor: 3
UniformColorGrey: 3
UniformEngineering: 3
UniformAssistant: 3
UniformClown: 3
UniformSec: 3
UniformChef: 3
UniformCaptain: 3
ClothingUniformJumpsuitJanitor: 3
ClothingUniformJumpsuitColorGrey: 3
ClothingUniformJumpsuitEngineering: 3
ClothingUniformJumpsuitClown: 3
ClothingUniformJumpsuitSec: 3
ClothingUniformJumpsuitChef: 3
ClothingUniformJumpsuitCaptain: 3

View File

@@ -1,6 +1,6 @@
- type: entity
parent: Clothing
id: BackpackClothing
id: ClothingBackpack
name: backpack
description: You wear this on your back and put items into it.
components:
@@ -17,106 +17,96 @@
capacity: 100
- type: entity
parent: BackpackClothing
id: ClownPack
parent: ClothingBackpack
id: ClothingBackpackClown
name: giggles von honkerton
description: It's a backpack made by Honk! Co.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/clown.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/clown.rsi
- type: entity
parent: BackpackClothing
id: SecPack
parent: ClothingBackpack
id: ClothingBackpackSecurity
name: security backpack
description: It's a very robust backpack.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/security.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/security.rsi
- type: entity
parent: BackpackClothing
id: BackpackEngineering
parent: ClothingBackpack
id: ClothingBackpackEngineering
name: engineering backpack
description: It's a tough backpack for the daily grind of station life.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/engineering.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/engineering.rsi
- type: entity
parent: BackpackClothing
id: BackpackMedical
parent: ClothingBackpack
id: ClothingBackpackMedical
name: medical backpack
description: It's a backpack especially designed for use in a sterile environment.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/medical.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/medical.rsi
- type: entity
parent: BackpackClothing
id: BackpackCaptain
parent: ClothingBackpack
id: ClothingBackpackCaptain
name: captain's backpack
description: It's a special backpack made exclusively for Nanotrasen officers.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/captain.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/captain.rsi
# Inhands/On mob aren't working until I refactor this file -Swept
- type: entity
parent: BackpackClothing
id: BackpackMime
parent: ClothingBackpack
id: ClothingBackpackMime
name: mime backpack
description: A silent backpack made for those silent workers. Silence Co.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/mime.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/mime.rsi
- type: entity
parent: BackpackClothing
id: BackpackChemistry
parent: ClothingBackpack
id: ClothingBackpackChemistry
name: chemistry backpack
description: A backpack specially designed to repel stains and hazardous liquids.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/chemistry.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/chemistry.rsi
- type: entity
parent: BackpackClothing
id: BackpackBotany
parent: ClothingBackpack
id: ClothingBackpackBotany
name: botany backpack
description: It's a backpack made of all-natural fibers.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/botany.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Backpacks/botany.rsi
- type: entity
parent: BackpackClothing
id: BackpackHolding
parent: ClothingBackpack
id: ClothingBackpackHolding
name: bag of holding
description: A backpack that opens into a localized pocket of bluespace.
components:

View File

@@ -1,7 +1,7 @@
- type: entity
parent: Clothing
id: Duffelbag
name: duffelbag
id: ClothingBackpackDuffel
name: duffel bag
description: "A large duffel bag for holding extra things."
components:
- type: Sprite
@@ -17,97 +17,67 @@
capacity: 100
- type: entity
parent: Duffelbag
id: DuffelbagEngineering
name: engineering duffelbag
parent: ClothingBackpackDuffel
id: ClothingBackpackDuffelEngineering
name: engineering duffel bag
description:
components:
- type: Sprite
sprite: Clothing/Back/Duffels/duffel_eng.rsi
state: icon
sprite: Clothing/Back/Duffels/engineering.rsi
- type: Clothing
sprite: Clothing/Back/Duffels/duffel_eng.rsi
sprite: Clothing/Back/Duffels/engineering.rsi
- type: entity
parent: Duffelbag
id: DuffelbagMedical
name: medical duffelbag
parent: ClothingBackpackDuffel
id: ClothingBackpackDuffelMedical
name: medical duffel bag
description: "A large duffel bag for holding extra medical supplies."
components:
- type: Sprite
sprite: Clothing/Back/Duffels/duffel_med.rsi
state: icon
sprite: Clothing/Back/Duffels/medical.rsi
- type: Clothing
sprite: Clothing/Back/Duffels/duffel_med.rsi
sprite: Clothing/Back/Duffels/medical.rsi
- type: entity
parent: Duffelbag
id: DuffelbagCaptain
name: captain duffelbag
parent: ClothingBackpackDuffel
id: ClothingBackpackDuffelCaptain
name: captain's duffel bag
description: "A large duffel bag for holding extra captainly goods."
components:
- type: Sprite
sprite: Clothing/Back/Duffels/duffel_cap.rsi
state: icon
sprite: Clothing/Back/Duffels/captain.rsi
- type: Clothing
sprite: Clothing/Back/Duffels/duffel_cap.rsi
sprite: Clothing/Back/Duffels/captain.rsi
- type: entity
parent: Duffelbag
id: DuffelbagClown
name: clown duffelbag
parent: ClothingBackpackDuffel
id: ClothingBackpackDuffelClown
name: clown duffel bag
description: "A large duffel bag for holding extra honk goods."
components:
- type: Sprite
sprite: Clothing/Back/Duffels/duffel_clown.rsi
state: icon
sprite: Clothing/Back/Duffels/clown.rsi
- type: Clothing
sprite: Clothing/Back/Duffels/duffel_clown.rsi
sprite: Clothing/Back/Duffels/clown.rsi
- type: entity
parent: Duffelbag
id: DuffelbagSecurity
name: security duffelbag
parent: ClothingBackpackDuffel
id: ClothingBackpackDuffelSecurity
name: security duffel bag
description: "A large duffel bag for holding extra security related goods."
components:
- type: Sprite
sprite: Clothing/Back/Duffels/duffel_sec.rsi
state: icon
sprite: Clothing/Back/Duffels/security.rsi
- type: Clothing
sprite: Clothing/Back/Duffels/duffel_sec.rsi
sprite: Clothing/Back/Duffels/security.rsi
- type: entity
parent: Duffelbag
id: DuffelbagSyndicate
name: syndicate duffelbag
parent: ClothingBackpackDuffel
id: ClothingBackpackDuffelSyndicate
name: syndicate duffel bag
description: "A large duffel bag for holding various traitor goods."
components:
- type: Sprite
sprite: Clothing/Back/Duffels/duffel_syn.rsi
state: icon
sprite: Clothing/Back/Duffels/syndicate.rsi
- type: Clothing
sprite: Clothing/Back/Duffels/duffel_syn.rsi
# FILLED
- type: entity
parent: Duffelbag
id: DuffelbagSurgeryFilled
name: surgical duffelbag
description: "A large duffel bag for holding extra medical supplies - this one seems to be designed for holding surgical tools."
components:
- type: Sprite
sprite: Clothing/Back/Duffels/duffel_med.rsi
state: icon
- type: Clothing
sprite: Clothing/Back/Duffels/duffel_med.rsi
- type: StorageFill
contents:
- name: Hemostat
- name: BoneSaw
- name: Drill
- name: Cautery
- name: Retractor
- name: Scalpel
- type: Storage
capacity: 30
sprite: Clothing/Back/Duffels/syndicate.rsi

View File

@@ -29,7 +29,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/oxygen.rsi
state: icon
- type: GasTank
outputPressure: 21.27825
air:
@@ -65,7 +64,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/yellow.rsi
state: icon
- type: Clothing
sprite: Objects/Tanks/yellow.rsi
Slots:
@@ -81,7 +79,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/yellow.rsi
state: icon
- type: Clothing
sprite: Objects/Tanks/yellow.rsi
Slots:
@@ -97,7 +94,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/red.rsi
state: icon
- type: Clothing
sprite: Objects/Tanks/red.rsi
Slots:
@@ -113,7 +109,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/red.rsi
state: icon
- type: Clothing
sprite: Objects/Tanks/red.rsi
Slots:
@@ -129,7 +124,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/emergency.rsi
state: icon
- type: GasTank
outputPressure: 21.27825
air:
@@ -166,7 +160,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/emergency_yellow.rsi
state: icon
- type: GasTank
outputPressure: 21.27825
air:
@@ -203,7 +196,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/emergency_double.rsi
state: icon
- type: GasTank
outputPressure: 21.27825
air:
@@ -240,7 +232,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/generic.rsi
state: icon
- type: GasTank
outputPressure: 101.325
air:
@@ -261,7 +252,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/generic.rsi
state: icon
- type: GasTank
outputPressure: 101.325
air:
@@ -285,7 +275,6 @@
components:
- type: Sprite
sprite: Objects/Tanks/phoron.rsi
state: icon
- type: GasTank
outputPressure: 101.325
air:

View File

@@ -1,6 +1,6 @@
- type: entity
parent: Clothing
id: SatchelBase
id: ClothingBackpackSatchel
name: satchel
description: A trendy looking satchel.
components:
@@ -17,85 +17,78 @@
capacity: 100
- type: entity
parent: SatchelBase
id: SatchelEngineering
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelEngineering
name: engineering satchel
description: A tough satchel with extra pockets.
components:
- type: Sprite
sprite: Clothing/Back/Satchels/satchel_engineering.rsi
state: icon
sprite: Clothing/Back/Satchels/engineering.rsi
- type: Clothing
sprite: Clothing/Back/Satchels/satchel_engineering.rsi
sprite: Clothing/Back/Satchels/engineering.rsi
- type: entity
parent: SatchelBase
id: SatchelMedical
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelMedical
name: medical satchel
description: A sterile satchel used in medical departments.
components:
- type: Sprite
sprite: Clothing/Back/Satchels/satchel_medical.rsi
state: icon
sprite: Clothing/Back/Satchels/medical.rsi
- type: Clothing
sprite: Clothing/Back/Satchels/satchel_medical.rsi
sprite: Clothing/Back/Satchels/medical.rsi
- type: entity
parent: SatchelBase
id: SatchelChemistry
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelChemistry
name: chemistry satchel
description: A sterile satchel with chemist colours.
components:
- type: Sprite
sprite: Clothing/Back/Satchels/satchel_chemistry.rsi
state: icon
sprite: Clothing/Back/Satchels/chemistry.rsi
- type: Clothing
sprite: Clothing/Back/Satchels/satchel_chemistry.rsi
sprite: Clothing/Back/Satchels/chemistry.rsi
- type: entity
parent: SatchelBase
id: SatchelScience
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelScience
name: science satchel
description: Useful for holding research materials.
components:
- type: Sprite
sprite: Clothing/Back/Satchels/satchel_science.rsi
state: icon
sprite: Clothing/Back/Satchels/science.rsi
- type: Clothing
sprite: Clothing/Back/Satchels/satchel_science.rsi
sprite: Clothing/Back/Satchels/science.rsi
- type: entity
parent: SatchelBase
id: SatchelSecurity
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelSecurity
name: security satchel
description: A robust satchel for security related needs.
components:
- type: Sprite
sprite: Clothing/Back/Satchels/satchel_security.rsi
state: icon
sprite: Clothing/Back/Satchels/security.rsi
- type: Clothing
sprite: Clothing/Back/Satchels/satchel_security.rsi
sprite: Clothing/Back/Satchels/security.rsi
- type: entity
parent: SatchelBase
id: SatchelCaptain
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelCaptain
name: captain's satchel
description: An exclusive satchel for Nanotrasen officers.
components:
- type: Sprite
sprite: Clothing/Back/Satchels/satchel_captain.rsi
state: icon
sprite: Clothing/Back/Satchels/captain.rsi
- type: Clothing
sprite: Clothing/Back/Satchels/satchel_captain.rsi
sprite: Clothing/Back/Satchels/captain.rsi
- type: entity
parent: SatchelBase
id: SatchelHydroponics
parent: ClothingBackpackSatchel
id: ClothingBackpackSatchelHydroponics
name: hydroponics satchel
description: A satchel made of all natural fibers.
components:
- type: Sprite
sprite: Clothing/Back/Satchels/satchel_hydroponics.rsi
state: icon
sprite: Clothing/Back/Satchels/hydroponics.rsi
- type: Clothing
sprite: Clothing/Back/Satchels/satchel_hydroponics.rsi
sprite: Clothing/Back/Satchels/hydroponics.rsi

View File

@@ -0,0 +1,11 @@
- type: entity
parent: Clothing
id: ClothingBeltBase
abstract: true
components:
- type: Sprite
state: icon
- type: Clothing
Slots: [belt]
size: 50
QuickEquip: false

View File

@@ -1,17 +1,3 @@
# BASE
- type: entity
parent: Clothing
id: ClothingBeltBase
abstract: true
components:
- type: Sprite
state: icon
- type: Clothing
Slots: [belt]
size: 50
QuickEquip: false
# CONTENT
- type: entity
parent: ClothingBeltBase
id: ClothingBeltAssault
@@ -41,7 +27,7 @@
- type: entity
parent: ClothingBeltBase
id: ClothingBeltChiefEngineer
name: the Chief Engineer's toolbelt
name: chief's toolbelt
description: "Holds tools, looks snazzy."
components:
- type: Sprite
@@ -168,7 +154,7 @@
- type: entity
parent: ClothingBeltBase
id: UtilityBeltClothing #Change to ClothingBeltUtility
id: ClothingBeltUtility
name: utility belt
description: "Can hold various things."
components:

View File

@@ -1,123 +1,113 @@
- type: entity
parent: Clothing
id: HeadsetBase
id: ClothingHeadset
name: headset
abstract: true
description: An updated, modular intercom that fits over the head. Takes encryption keys.
components:
- type: Headset
- type: Sprite
state: icon
- type: Clothing
Slots:
- ears
sprite: Clothing/Ears/Headsets/base.rsi
- type: entity
parent: HeadsetBase
id: HeadsetCargo
parent: ClothingHeadset
id: ClothingHeadsetCargo
name: cargo headset
description: A headset used by the quartermaster and his slaves.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/cargo.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetCentCom
parent: ClothingHeadset
id: ClothingHeadsetCentCom
name: centcomm headset
description: A headset used by the upper echelons of Nanotrasen.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/centcom.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetCommand
parent: ClothingHeadset
id: ClothingHeadsetCommand
name: command headset
description: A headset with a commanding channel.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/command.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetEngineering
parent: ClothingHeadset
id: ClothingHeadsetEngineering
name: engineering headset
description: When the engineers wish to chat like girls.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/engineering.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetMedical
parent: ClothingHeadset
id: ClothingHeadsetMedical
name: medical headset
description: A headset for the trained staff of the medbay.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/medical.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetMedicalScience
parent: ClothingHeadset
id: ClothingHeadsetMedicalScience
name: medical research headset
description: A headset that is a result of the mating between medical and science.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/medicalscience.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetMining
parent: ClothingHeadset
id: ClothingHeadsetMining
name: mining headset
description: Headset used by shaft miners.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/mining.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetRobotics
parent: ClothingHeadset
id: ClothingHeadsetRobotics
name: robotics headset
description: Made specifically for the roboticists, who cannot decide between departments.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/robotics.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetScience
parent: ClothingHeadset
id: ClothingHeadsetScience
name: science headset
description: A sciency headset. Like usual.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/science.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetSecurity
parent: ClothingHeadset
id: ClothingHeadsetSecurity
name: security headset
description: This is used by your elite security force.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/security.rsi
state: icon
- type: entity
parent: HeadsetBase
id: HeadsetService
parent: ClothingHeadset
id: ClothingHeadsetService
name: service headset
description: Headset used by the service staff, tasked with keeping the station full, happy and clean.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/service.rsi
state: icon

View File

@@ -1,61 +1,54 @@
- type: entity
parent: Clothing
id: HeadsetBaseAlt
id: ClothingHeadsetAlt
name: headset
abstract: true
description: An updated, modular intercom that fits over the head. Takes encryption keys.
components:
- type: Headset
- type: Sprite
state: icon_alt
- type: Clothing
Slots:
- ears
- type: entity
parent: HeadsetBaseAlt
id: HeadsetCommandAlt
parent: ClothingHeadsetAlt
id: ClothingHeadsetAltCommand
name: command overear-headset
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/command.rsi
state: icon_alt
- type: Clothing
Slots:
- ears
sprite: Clothing/Ears/Headsets/command.rsi
- type: entity
parent: HeadsetBaseAlt
id: HeadsetMedicalAlt
parent: ClothingHeadsetAlt
id: ClothingHeadsetAltMedical
name: medical overear-headset
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/medical.rsi
state: icon_alt
- type: Clothing
Slots:
- ears
sprite: Clothing/Ears/Headsets/medical.rsi
- type: entity
parent: HeadsetBaseAlt
id: HeadsetSecurityAlt
parent: ClothingHeadsetAlt
id: ClothingHeadsetAltSecurity
name: security overear-headset
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/security.rsi
state: icon_alt
- type: Clothing
Slots:
- ears
sprite: Clothing/Ears/Headsets/security.rsi
- type: entity
parent: HeadsetBaseAlt
id: HeadsetSyndicateAlt
parent: ClothingHeadsetAlt
id: ClothingHeadsetAltSyndicate
name: syndicate overear-headset
description: A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs.
components:
- type: Sprite
sprite: Clothing/Ears/Headsets/syndicate.rsi
state: icon_alt
- type: Clothing
Slots:
- ears
sprite: Clothing/Ears/Headsets/syndicate.rsi

View File

@@ -0,0 +1,9 @@
- type: entity
parent: Clothing
id: ClothingEyesBase
abstract: true
components:
- type: Sprite
state: icon
- type: Clothing
Slots: [eyes]

View File

@@ -0,0 +1,103 @@
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesBeer
name: beer goggles
description: A pair of sunglasses outfitted with apparatus to scan reagents, as well as providing an innate understanding of liquid viscosity while in motion.
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/beergoggles.rsi
- type: Clothing
sprite: Clothing/Eyes/Glasses/beergoggles.rsi
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesGar
name: gar glasses
description: Go beyond impossible and kick reason to the curb!
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/gar.rsi
- type: Clothing
sprite: Clothing/Eyes/Glasses/gar.rsi
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesGarOrange
name: orange gar glasses
description: Just who the hell do you think I am?!
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/gar.rsi
state: icon-alt
- type: Clothing
sprite: Clothing/Eyes/Glasses/gar.rsi
HeldPrefix: alt
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesGarGiga
name: giga gar glasses
description: We evolve past the person we were a minute before. Little by little we advance with each turn. That's how a drill works!
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/gar.rsi
state: icon-super
- type: Clothing
sprite: Clothing/Eyes/Glasses/gar.rsi
HeldPrefix: super
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesMeson
name: optical meson scanners
description: The pinnacle of modern science, wallhacks in real life
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/meson.rsi
- type: Clothing
sprite: Clothing/Eyes/Glasses/meson.rsi
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlasses
name: glasses
description: You want to wear glasses in a game? Imagine rping as physically disabled.
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/glasses.rsi
- type: Clothing
sprite: Clothing/Eyes/Glasses/glasses.rsi
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesSunglasses
name: sun glasses
description: Useful both for security and cargonia
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/sunglasses.rsi
- type: Clothing
sprite: Clothing/Eyes/Glasses/sunglasses.rsi
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesSecurity
name: security sunglasses
description: Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes. Often worn by budget security officers.
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/secglasses.rsi
- type: Clothing
sprite: Clothing/Eyes/Glasses/secglasses.rsi
#Make a scanner category when these actually function and we get the trayson
- type: entity
parent: ClothingEyesBase
id: ClothingEyesGlassesThermal
name: optical thermal scanner
description: Thermals in the shape of glasses.
components:
- type: Sprite
sprite: Clothing/Eyes/Glasses/thermal.rsi
- type: Clothing
sprite: Clothing/Eyes/Glasses/thermal.rsi

View File

@@ -0,0 +1,32 @@
- type: entity
parent: ClothingEyesBase
id: ClothingEyesHudDiagnostic
name: diagnostic hud
description: A heads-up display capable of analyzing the integrity and status of robotics and exosuits.
components:
- type: Sprite
sprite: Clothing/Eyes/Hud/diag.rsi
- type: Clothing
sprite: Clothing/Eyes/Hud/diag.rsi
- type: entity
parent: ClothingEyesBase
id: ClothingEyesHudMedical
name: medical hud
description: A heads-up display that scans the humanoids in view and provides accurate data about their health status.
components:
- type: Sprite
sprite: Clothing/Eyes/Hud/med.rsi
- type: Clothing
sprite: Clothing/Eyes/Hud/med.rsi
- type: entity
parent: ClothingEyesBase
id: ClothingEyesHudSecurity
name: security hud
description: A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records.
components:
- type: Sprite
sprite: Clothing/Eyes/Hud/sec.rsi
- type: Clothing
sprite: Clothing/Eyes/Hud/sec.rsi

View File

@@ -0,0 +1,10 @@
- type: entity
parent: ClothingEyesBase
id: ClothingEyesEyepatch
name: eyepatch
description: Yarr.
components:
- type: Sprite
sprite: Clothing/Eyes/Misc/eyepatch.rsi
- type: Clothing
sprite: Clothing/Eyes/Misc/eyepatch.rsi

View File

@@ -1,46 +0,0 @@
- type: entity
parent: Clothing
id: GlassesBase
abstract: true
components:
- type: Clothing
Slots: [eyes]
- type: entity
parent: GlassesBase
id: MesonGlasses
name: optical meson scanners
description: The pinnacle of modern science, wallhacks in real life
components:
- type: Sprite
sprite: Clothing/Glasses/meson_scanners.rsi
state: meson
- type: Clothing
sprite: Clothing/Glasses/meson_scanners.rsi
- type: entity
parent: GlassesBase
id: SunGlasses
name: sun glasses
description: Useful both for security and cargonia
components:
- type: Sprite
sprite: Clothing/Glasses/sunglasses.rsi
state: icon
- type: Clothing
sprite: Clothing/Glasses/sunglasses.rsi
- type: entity
parent: GlassesBase
id: SecGlasses
name: security sunglasses
description: Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes. Often worn by budget security officers.
components:
- type: Sprite
sprite: Clothing/Glasses/sunglasses_sec.rsi
state: icon
- type: Clothing
sprite: Clothing/Glasses/sunglasses_sec.rsi

View File

@@ -1,312 +0,0 @@
- type: entity
parent: Clothing
id: GlovesBase
abstract: true
components:
- type: Sprite
state: icon
- type: Clothing
Slots:
- gloves
- type: entity
parent: GlovesBase
id: GlovesBlack
name: black gloves
description: Regular black gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/black.rsi
- type: Clothing
sprite: Clothing/Gloves/black.rsi
- type: entity
parent: GlovesBase
id: GlovesBlue
name: blue gloves
description: Regular blue gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/blue.rsi
- type: Clothing
sprite: Clothing/Gloves/blue.rsi
- type: entity
parent: GlovesBase
id: GlovesBoxingRed
name: boxing gloves (red)
description: Red gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Gloves/boxing.rsi
- type: Clothing
sprite: Clothing/Gloves/boxing.rsi
- type: entity
parent: GlovesBase
id: GlovesBoxingBlue
name: boxing gloves (blue)
description: Blue gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Gloves/boxingblue.rsi
- type: Clothing
sprite: Clothing/Gloves/boxingblue.rsi
- type: entity
parent: GlovesBase
id: GlovesBoxingGreen
name: boxing gloves (green)
description: Green gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Gloves/boxinggreen.rsi
- type: Clothing
sprite: Clothing/Gloves/boxinggreen.rsi
- type: entity
parent: GlovesBase
id: GlovesBoxingYellow
name: boxing gloves (yellow)
description: Yellow gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Gloves/boxingyellow.rsi
- type: Clothing
sprite: Clothing/Gloves/boxingyellow.rsi
- type: entity
parent: GlovesBase
id: GlovesBrown
name: brown gloves
description: Regular brown gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/brown.rsi
- type: Clothing
sprite: Clothing/Gloves/brown.rsi
- type: entity
parent: GlovesBase
id: GlovesCaptain
name: captain gloves
description: Regal blue gloves, with a nice gold trim. Swanky.
components:
- type: Sprite
sprite: Clothing/Gloves/captain.rsi
- type: Clothing
sprite: Clothing/Gloves/captain.rsi
- type: entity
parent: GlovesBase
id: GlovesGray
name: grey gloves
description: Regular grey gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/gray.rsi
- type: Clothing
sprite: Clothing/Gloves/gray.rsi
- type: entity
parent: GlovesBase
id: GlovesGreen
name: green gloves
description: Regular green gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/green.rsi
- type: Clothing
sprite: Clothing/Gloves/green.rsi
- type: entity
parent: GlovesBase
id: GlovesIhscombat
name: IHS combat gloves
description: These tactical gloves are somewhat fire and impact resistant.
components:
- type: Sprite
sprite: Clothing/Gloves/ihscombat.rsi
- type: Clothing
sprite: Clothing/Gloves/ihscombat.rsi
- type: entity
parent: GlovesBase
id: GlovesLatex
name: latex gloves
description: Thin sterile latex gloves.
components:
- type: Sprite
sprite: Clothing/Gloves/latex.rsi
- type: Clothing
sprite: Clothing/Gloves/latex.rsi
- type: entity
parent: GlovesBase
id: GlovesLeather
name: "botanist's leather gloves"
description: "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm."
components:
- type: Sprite
sprite: Clothing/Gloves/leather.rsi
- type: Clothing
sprite: Clothing/Gloves/leather.rsi
HeatResistance: 1400
- type: entity
parent: GlovesBase
id: GlovesLightBrown
name: light brown gloves
description: Regular light brown gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/lightbrown.rsi
- type: Clothing
sprite: Clothing/Gloves/lightbrown.rsi
- type: entity
parent: GlovesBase
id: GlovesOrange
name: orange gloves
description: Regular orange gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/orange.rsi
- type: Clothing
sprite: Clothing/Gloves/orange.rsi
- type: entity
parent: GlovesBase
id: GlovesPowerglove
name: power gloves
description: Now I'm playin' with power! Wait, they are turned off.
components:
- type: Sprite
sprite: Clothing/Gloves/powerglove.rsi
- type: Clothing
sprite: Clothing/Gloves/powerglove.rsi
- type: entity
parent: GlovesBase
id: GlovesPowergloveActive
name: powergloves (active)
description: Now I'm playin' with power! BAM!
components:
- type: Sprite
sprite: Clothing/Gloves/powerglove_active.rsi
- type: Clothing
sprite: Clothing/Gloves/powerglove_active.rsi
- type: entity
parent: GlovesBase
id: GlovesPurple
name: purple gloves
description: Regular purple gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/purple.rsi
- type: Clothing
sprite: Clothing/Gloves/purple.rsi
- type: entity
parent: GlovesBase
id: GlovesRed
name: red gloves
description: Regular red gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Gloves/red.rsi
- type: Clothing
sprite: Clothing/Gloves/red.rsi
- type: entity
parent: GlovesBase
id: GlovesRobohands
name: robohands gloves
description: Beep boop borp!
components:
- type: Sprite
sprite: Clothing/Gloves/robohands.rsi
- type: Clothing
sprite: Clothing/Gloves/robohands.rsi
- type: entity
parent: GlovesBase
id: GlovesSNinja
name: S ninja gloves
description: These black nano-enhanced gloves insulate from electricity and provide fire resistance.
components:
- type: Sprite
sprite: Clothing/Gloves/s_ninja.rsi
- type: Clothing
sprite: Clothing/Gloves/s_ninja.rsi
- type: entity
parent: GlovesBase
id: GlovesSNinjak
name: S ninjak gloves
description: These black and red nano-enhanced gloves insulate from electricity and provide fire resistance.
components:
- type: Sprite
sprite: Clothing/Gloves/s_ninjak.rsi
- type: Clothing
sprite: Clothing/Gloves/s_ninjak.rsi
- type: entity
parent: GlovesBase
id: GlovesSNinjan
name: S ninjan gloves
description: These black and green nano-enhanced gloves insulate from electricity and provide fire resistance.
components:
- type: Sprite
sprite: Clothing/Gloves/s_ninjan.rsi
- type: Clothing
sprite: Clothing/Gloves/s_ninjan.rsi
- type: entity
parent: GlovesBase
id: GlovesWhite
name: white gloves
description: Those gloves look fancy.
components:
- type: Sprite
sprite: Clothing/Gloves/white.rsi
- type: Clothing
sprite: Clothing/Gloves/white.rsi
- type: entity
parent: GlovesBase
id: GlovesYellow
name: insulated gloves
description: These gloves will protect the wearer from electric shocks.
components:
- type: Sprite
sprite: Clothing/Gloves/yellow.rsi
- type: Clothing
sprite: Clothing/Gloves/yellow.rsi

View File

@@ -0,0 +1,9 @@
- type: entity
parent: Clothing
id: ClothingHandsBase
abstract: true
components:
- type: Sprite
state: icon
- type: Clothing
Slots: [gloves]

View File

@@ -0,0 +1,120 @@
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorPurple
name: purple gloves
description: Regular purple gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/purple.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/purple.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorRed
name: red gloves
description: Regular red gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/red.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/red.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorBlack
name: black gloves
description: Regular black gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/black.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/black.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorBlue
name: blue gloves
description: Regular blue gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/blue.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/blue.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorBrown
name: brown gloves
description: Regular brown gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/brown.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/brown.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorGray
name: grey gloves
description: Regular grey gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/gray.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/gray.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorGreen
name: green gloves
description: Regular green gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/green.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/green.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorLightBrown
name: light brown gloves
description: Regular light brown gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/lightbrown.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/lightbrown.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorOrange
name: orange gloves
description: Regular orange gloves that do not keep you from frying.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/orange.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/orange.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorWhite
name: white gloves
description: Those gloves look fancy.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/white.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/white.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesColorYellow
name: insulated gloves
description: These gloves will protect the wearer from electric shocks.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/Color/yellow.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/Color/yellow.rsi

View File

@@ -0,0 +1,127 @@
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesBoxingRed
name: boxing gloves
description: Red gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/boxing.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/boxing.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesBoxingBlue
name: blue boxing gloves
description: Blue gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/boxing.rsi
state: icon-blue
- type: Clothing
sprite: Clothing/Hands/Gloves/boxing.rsi
HeldPrefix: blue
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesBoxingGreen
name: green boxing gloves
description: Green gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/boxing.rsi
state: icon-green
- type: Clothing
sprite: Clothing/Hands/Gloves/boxing.rsi
HeldPrefix: green
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesBoxingYellow
name: yellow boxing gloves
description: Yellow gloves for competitive boxing.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/boxing.rsi
state: icon-yellow
- type: Clothing
sprite: Clothing/Hands/Gloves/boxing.rsi
HeldPrefix: yellow
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesCaptain
name: captain gloves
description: Regal blue gloves, with a nice gold trim. Swanky.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/captain.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/captain.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesIhscombat
name: IHS combat gloves
description: These tactical gloves are somewhat fire and impact resistant.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/ihscombat.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/ihscombat.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesLatex
name: latex gloves
description: Thin sterile latex gloves.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/latex.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/latex.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesLeather
name: "botanist's leather gloves"
description: "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm."
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/leather.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/leather.rsi
HeatResistance: 1400
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesPowerglove
name: power gloves
description: Now I'm playin' with power! Wait, they are turned off. # Use "Now I'm playin' with power! BAM!" for when they're turned on
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/powerglove.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/powerglove.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesRobohands
name: robohands gloves
description: Beep boop borp!
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/robohands.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/robohands.rsi
- type: entity
parent: ClothingHandsBase
id: ClothingHandsGlovesSpaceNinja
name: space ninja gloves
description: These black nano-enhanced gloves insulate from electricity and provide fire resistance.
components:
- type: Sprite
sprite: Clothing/Hands/Gloves/spaceninja.rsi
- type: Clothing
sprite: Clothing/Hands/Gloves/spaceninja.rsi

View File

@@ -1,131 +1,87 @@
- type: entity
parent: HatBase
id: HatMonkey
name: monkey
description: That's a monkey head. It has a hole on a mouth to eat bananas.
components:
- type: Sprite
sprite: Clothing/Head/monkey.rsi
- type: Clothing
sprite: Clothing/Head/monkey.rsi
- type: entity
parent: HatBase
id: HatMouseBrown
name: mouse brown
description: This is a head of a brown mouse. Squeak!
components:
- type: Sprite
sprite: Clothing/Head/mouse_brown.rsi
- type: Clothing
sprite: Clothing/Head/mouse_brown.rsi
- type: entity
parent: HatBase
id: HatMouseGray
name: mouse gray
description: This is a head of a grey mouse. Squeak!
components:
- type: Sprite
sprite: Clothing/Head/mouse_gray.rsi
- type: Clothing
sprite: Clothing/Head/mouse_gray.rsi
- type: entity
parent: HatBase
id: HatMouseWhite
name: mouse white
description: This is a head of a white mouse. Squeak!
components:
- type: Sprite
sprite: Clothing/Head/mouse_white.rsi
- type: Clothing
sprite: Clothing/Head/mouse_white.rsi
- type: entity
parent: HatBase
id: HatNymph
name: nymph
description: It's a nymph. You can put it on your head.
components:
- type: Sprite
sprite: Clothing/Head/nymph.rsi
- type: Clothing
sprite: Clothing/Head/nymph.rsi
- type: entity
parent: HatBase
id: HatPai-cat
name: pai-cat
description: Personal AI in a cat form.
components:
- type: Sprite
sprite: Clothing/Head/pai-cat.rsi
- type: Clothing
sprite: Clothing/Head/pai-cat.rsi
- type: entity
parent: HatBase
id: HatPai-monkey
name: pai-monkey
description: Personal AI in a monkey form.
components:
- type: Sprite
sprite: Clothing/Head/pai-monkey.rsi
- type: Clothing
sprite: Clothing/Head/pai-monkey.rsi
- type: entity
parent: HatBase
id: HatPai-mouse
name: pai-mouse
description: Personal AI in a mouse form.
components:
- type: Sprite
sprite: Clothing/Head/pai-mouse.rsi
- type: Clothing
sprite: Clothing/Head/pai-mouse.rsi
- type: entity
parent: HatBase
id: HatCatGrey
parent: ClothingHeadBase
id: ClothingHeadHatAnimalCat
name: grey cat
description: A cute and fluffy head of a grey cat.
components:
- type: Sprite
sprite: Clothing/Head/cat.rsi
sprite: Clothing/Head/Animals/cat.rsi
- type: Clothing
sprite: Clothing/Head/cat.rsi
sprite: Clothing/Head/Animals/cat.rsi
- type: entity
parent: HatBase
id: HatCatBrown
parent: ClothingHeadBase
id: ClothingHeadHatAnimalCatBrown
name: brown cat
description: A cute and fluffy head of a brown cat.
components:
- type: Sprite
sprite: Clothing/Head/cat2.rsi
sprite: Clothing/Head/Animals/cat2.rsi
- type: Clothing
sprite: Clothing/Head/cat2.rsi
sprite: Clothing/Head/Animals/cat2.rsi
- type: entity
parent: HatBase
id: HatCatBlack
parent: ClothingHeadBase
id: ClothingHeadHatAnimalCatBlack
name: black cat
description: A cute and fluffy head of a black cat.
components:
- type: Sprite
sprite: Clothing/Head/cat3.rsi
sprite: Clothing/Head/Animals/cat3.rsi
- type: Clothing
sprite: Clothing/Head/cat3.rsi
sprite: Clothing/Head/Animals/cat3.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatAnimalHeadslime
name: headslime
description: A green, sticky headslime, you put it on your head.
components:
- type: Sprite
sprite: Clothing/Head/Animals/headslime.rsi
- type: Clothing
sprite: Clothing/Head/Animals/headslime.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatAnimalMonkey
name: monkey
description: That's a monkey head. It has a hole on a mouth to eat bananas.
components:
- type: Sprite
sprite: Clothing/Head/Animals/monkey.rsi
- type: Clothing
sprite: Clothing/Head/Animals/monkey.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatAnimalMouseBrown
name: mouse brown
description: This is a head of a brown mouse. Squeak!
components:
- type: Sprite
sprite: Clothing/Head/Animals/mouse_brown.rsi
- type: Clothing
sprite: Clothing/Head/Animals/mouse_brown.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatAnimalMouseGray
name: mouse gray
description: This is a head of a grey mouse. Squeak!
components:
- type: Sprite
sprite: Clothing/Head/Animals/mouse_gray.rsi
- type: Clothing
sprite: Clothing/Head/Animals/mouse_gray.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatAnimalMouseWhite
name: mouse white
description: This is a head of a white mouse. Squeak!
components:
- type: Sprite
sprite: Clothing/Head/Animals/mouse_white.rsi
- type: Clothing
sprite: Clothing/Head/Animals/mouse_white.rsi

View File

@@ -0,0 +1,87 @@
- type: entity
parent: ClothingHeadBase
id: HatBandBlack
name: black bandana
description: A black bandana to make you look cool.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/black.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/black.rsi
- type: entity
parent: ClothingHeadBase
id: HatBandBlue
name: blue bandana
description: A blue bandana to make you look cool.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/blue.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/blue.rsi
- type: entity
parent: ClothingHeadBase
id: HatBandBotany
name: botany bandana
description: A botany bandana to make you look cool, made from natural fibers.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/botany.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/botany.rsi
- type: entity
parent: ClothingHeadBase
id: HatBandGold
name: gold bandana
description: A gold bandana to make you look cool.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/gold.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/gold.rsi
- type: entity
parent: ClothingHeadBase
id: HatBandGreen
name: green bandana
description: A green bandana to make you look cool.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/green.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/green.rsi
- type: entity
parent: ClothingHeadBase
id: HatBandGrey
name: grey bandana
description: A grey bandana to make you look cool.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/grey.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/grey.rsi
- type: entity
parent: ClothingHeadBase
id: HatBandRed
name: red bandana
description: A red bandana to make you look cool.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/red.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/red.rsi
- type: entity
parent: ClothingHeadBase
id: HatBandSkull
name: skull bandana
description: A bandana with a skull to make you look even cooler.
components:
- type: Sprite
sprite: Clothing/Head/Bandanas/skull.rsi
- type: Clothing
sprite: Clothing/Head/Bandanas/skull.rsi

View File

@@ -0,0 +1,31 @@
- type: entity
parent: Clothing
id: ClothingHeadBase
abstract: true
components:
- type: Clothing
Slots:
- Helmet
- type: Sprite
state: icon
- type: entity
parent: Clothing
id: HatBase
abstract: true
components:
- type: Clothing
Slots:
- Helmet
- type: Sprite
state: icon
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHardsuitBase
name: base hardsuit helmet
abstract: true
components:
- type: PressureProtection
highPressureMultiplier: 0.5
lowPressureMultiplier: 100

View File

@@ -0,0 +1,78 @@
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatHardhatBase
abstract: true
components:
- type: Sprite
layers:
- state: icon
- state: light-icon
shader: unshaded
visible: false
- type: Clothing
HeldPrefix: off
ClothingPrefix: off
- type: PointLight
enabled: false
radius: 3
- type: LoopingSound
- type: Appearance
visuals:
- type: FlashLightVisualizer
- type: HandheldLight
- type: PowerCellSlot
- type: entity
parent: ClothingHeadHatHardhatBase
id: ClothingHeadHatHardhatBlue
name: blue hard hat
description: A hard hat, painted in blue, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/Hardhats/blue.rsi
- type: Clothing
sprite: Clothing/Head/Hardhats/blue.rsi
- type: entity
parent: ClothingHeadHatHardhatBase
id: ClothingHeadHatHardhatOrange
name: orange hard hat
description: A hard hat, painted in orange, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/Hardhats/orange.rsi
- type: Clothing
sprite: Clothing/Head/Hardhats/orange.rsi
- type: entity
parent: ClothingHeadHatHardhatBase
id: ClothingHeadHatHardhatRed
name: red hard hat
description: A hard hat, painted in red, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/Hardhats/red.rsi
- type: Clothing
sprite: Clothing/Head/Hardhats/red.rsi
- type: entity
parent: ClothingHeadHatHardhatBase
id: ClothingHeadHatHardhatWhite
name: white hard hat
description: A hard hat, painted in white, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/Hardhats/white.rsi
- type: Clothing
sprite: Clothing/Head/Hardhats/white.rsi
- type: entity
parent: ClothingHeadHatHardhatBase
id: ClothingHeadHatHardhatYellow
name: yellow hard hat
description: A hard hat, painted in yellow, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/Hardhats/yellow.rsi
- type: Clothing
sprite: Clothing/Head/Hardhats/yellow.rsi

View File

@@ -1,158 +1,163 @@
- type: entity
parent: HatBase
id: HelmetHardsuitBase
name: base hardsuit helmet
abstract: true
components:
- type: PressureProtection
highPressureMultiplier: 0.75
lowPressureMultiplier: 100
- type: entity
parent: HelmetHardsuitBase
id: HatHardsuitOld
name: old hardsuit helmet
description: An old helmet from a hardsuit. Still functional, for now.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-old.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-old.rsi
- type: PressureProtection
highPressureMultiplier: 0.85
lowPressureMultiplier: 45
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitAtmos
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitAtmos
name: atmos hardsuit helmet
description: A special hardsuit helmet designed for working in low-pressure, high thermal environments.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-atmos.rsi
sprite: Clothing/Head/Hardsuits/atmospherics.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-atmos.rsi
- type: PressureProtection
highPressureMultiplier: 0.5
lowPressureMultiplier: 100
sprite: Clothing/Head/Hardsuits/atmospherics.rsi
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitEngineering
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitCap
name: captain's hardsuit helmet
description: Special hardsuit helmet, made for the captain of the station.
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/capspace.rsi
- type: Clothing
sprite: Clothing/Head/Hardsuits/capspace.rsi
- type: entity
parent: HatBase
id: ClothingHeadHelmetHardsuitDeathsquad
name: deathsquad
description: A robust helmet for special operations.
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/deathsquad.rsi
- type: Clothing
sprite: Clothing/Head/Hardsuits/deathsquad.rsi
- type: entity
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitEngineering
name: engineering hardsuit helmet
description: An engineering hardsuit helmet designed for working in low-pressure, high radioactive environments.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-engineering.rsi
sprite: Clothing/Head/Hardsuits/engineering.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-engineering.rsi
sprite: Clothing/Head/Hardsuits/engineering.rsi
- type: PressureProtection
highPressureMultiplier: 0.65
highPressureMultiplier: 0.40
lowPressureMultiplier: 100
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitHazard
name: hazard hardsuit helmet
description: Robust hardsuit helmet made for dangerous and hazardous situations.
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitEngineeringWhite
name: CE hardsuit helmet
description: Special hardsuit helmet, made for the chief engineer of the station.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-hazardhardsuit.rsi
sprite: Clothing/Head/Hardsuits/engineering-white.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-hazardhardsuit.rsi
sprite: Clothing/Head/Hardsuits/engineering-white.rsi
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitMedical
parent: HatBase
id: ClothingHeadHelmetIHSVoidHelm
name: IHS voidhelm
description: A robust, tactical IHS helmet.
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/ihsvoid.rsi
- type: Clothing
sprite: Clothing/Head/Hardsuits/ihsvoid.rsi
- type: PressureProtection
highPressureMultiplier: 0.60
lowPressureMultiplier: 100
- type: entity
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitMedical
name: medical hardsuit helmet
description: Lightweight medical hardsuit helmet that doesn't restrict your head movements.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-medical.rsi
sprite: Clothing/Head/Hardsuits/medical.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-medical.rsi
sprite: Clothing/Head/Hardsuits/medical.rsi
- type: PressureProtection
highPressureMultiplier: 0.80
lowPressureMultiplier: 55
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitMining
name: mining hardsuit helmet
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitRd
name: rd hardsuit helmet
description: Lightweight hardsuit helmet that doesn't restrict your head movements.
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/rd.rsi
- type: Clothing
sprite: Clothing/Head/Hardsuits/rd.rsi
- type: PressureProtection
highPressureMultiplier: 0.80
lowPressureMultiplier: 55
- type: entity
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitSalvage
name: salvage hardsuit helmet
description: A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating for wildlife encounters and dual floodlights.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-mining.rsi
sprite: Clothing/Head/Hardsuits/salvage.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-mining.rsi
sprite: Clothing/Head/Hardsuits/salvage.rsi
- type: PressureProtection
highPressureMultiplier: 0.70
lowPressureMultiplier: 100
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitSecurity
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitSecurity
name: security hardsuit helmet
description: Armored hardsuit helmet for security needs.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-sectg.rsi
sprite: Clothing/Head/Hardsuits/security.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-sectg.rsi
sprite: Clothing/Head/Hardsuits/security.rsi
- type: PressureProtection
highPressureMultiplier: 0.70
lowPressureMultiplier: 100
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitSyndie
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitSecurityRed
name: hos hardsuit helmet
description: Red armored hardsuit helmet for security needs. Belongs to the HoS.
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/security-red.rsi
- type: Clothing
sprite: Clothing/Head/Hardsuits/security-red.rsi
- type: PressureProtection
highPressureMultiplier: 0.60
lowPressureMultiplier: 100
- type: entity
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitSyndie
name: blood red hardsuit helmet
description: An advanced red hardsuit helmet designed for work in special operations.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-syndie.rsi
state: icon
sprite: Clothing/Head/Hardsuits/syndicate.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-syndie.rsi
- type: PressureProtection
highPressureMultiplier: 0.45
lowPressureMultiplier: 100
sprite: Clothing/Head/Hardsuits/syndicate.rsi
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitCE
name: CE hardsuit helmet
description: Special hardsuit helmet, made for the chief engineer of the station.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-white.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-white.rsi
- type: PressureProtection
highPressureMultiplier: 0.5
lowPressureMultiplier: 100
- type: entity
parent: HelmetHardsuitBase
id: HelmetHardsuitWizard
parent: ClothingHeadHardsuitBase
id: ClothingHeadHelmetHardsuitWizard
name: wizard hardsuit helmet
description: A bizarre gem-encrusted helmet that radiates magical energies.
components:
- type: Sprite
sprite: Clothing/Head/hardsuit-wiz.rsi
sprite: Clothing/Head/Hardsuits/wizard.rsi
- type: Clothing
sprite: Clothing/Head/hardsuit-wiz.rsi
- type: PressureProtection
highPressureMultiplier: 0.45
lowPressureMultiplier: 100
sprite: Clothing/Head/Hardsuits/wizard.rsi

File diff suppressed because it is too large Load Diff

View File

@@ -1,119 +1,131 @@
- type: entity
parent: HatBase
id: HatAtmosHelm
name: atmos helm
description: A helmet, designed for work in low-pressure enviroments.
parent: ClothingHeadBase
id: ClothingHeadHelmetBombSuit
name: bombsuit helmet
description: A heavy helmet designed to withstand the pressure generated by a bomb and any fragments the bomb may produce.
components:
- type: Sprite
sprite: Clothing/Head/atmos_helm.rsi
sprite: Clothing/Head/Helmets/bombsuit.rsi
- type: Clothing
sprite: Clothing/Head/atmos_helm.rsi
sprite: Clothing/Head/Helmets/bombsuit.rsi
- type: entity
parent: HatBase
id: HatCultHelmet
parent: ClothingHeadBase
id: ClothingHeadHelmetCosmonaut
name: cosmonaut
description:
components:
- type: Sprite
sprite: Clothing/Head/Helmets/cosmonaut.rsi
- type: Clothing
sprite: Clothing/Head/Helmets/cosmonaut.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHelmetCult
name: cult helmet
description: A robust, evil-looking cult helmet.
components:
- type: Sprite
sprite: Clothing/Head/cult_helmet.rsi
sprite: Clothing/Head/Helmets/cult.rsi
- type: Clothing
sprite: Clothing/Head/cult_helmet.rsi
sprite: Clothing/Head/Helmets/cult.rsi
- type: entity
parent: HatBase
id: HatHardhatBlue
name: blue hard hat
description: A hard hat, painted in blue, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
parent: ClothingHeadBase
id: ClothingHeadHelmetHelmet
name: helmet
description: A usual helmet.
components:
- type: Sprite
sprite: Clothing/Head/hardhat_blue.rsi
sprite: Clothing/Head/Helmets/security.rsi
- type: Clothing
sprite: Clothing/Head/hardhat_blue.rsi
sprite: Clothing/Head/Helmets/security.rsi
- type: entity
parent: HatBase
id: HatHardhatOrange
name: orange hard hat
description: A hard hat, painted in orange, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
parent: ClothingHeadBase
id: ClothingHeadHelmetHelmetOld
name: helmet
description: An old usual helmet.
components:
- type: Sprite
sprite: Clothing/Head/hardhat_orange.rsi
sprite: Clothing/Head/Helmets/securityold.rsi
- type: Clothing
sprite: Clothing/Head/hardhat_orange.rsi
sprite: Clothing/Head/Helmets/securityold.rsi
- type: entity
parent: HatBase
id: HatHardhatRed
name: red hard hat
description: A hard hat, painted in red, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/hardhat_red.rsi
- type: Clothing
sprite: Clothing/Head/hardhat_red.rsi
- type: entity
parent: HatBase
id: HatHardhatWhite
name: white hard hat
description: A hard hat, painted in white, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/hardhat_white.rsi
- type: Clothing
sprite: Clothing/Head/hardhat_white.rsi
- type: entity
parent: HatBase
id: HatHardhatYellow
name: yellow hard hat
description: A hard hat, painted in yellow, used in dangerous working conditions to protect the head. Comes with a built-in flashlight.
components:
- type: Sprite
sprite: Clothing/Head/hardhat_yellow.rsi
- type: Clothing
sprite: Clothing/Head/hardhat_yellow.rsi
- type: entity
parent: HatBase
id: HatLightRiot
parent: ClothingHeadBase
id: ClothingHeadHelmetRiot
name: light riot helmet
description: It's a helmet specifically designed to protect against close range attacks.
components:
- type: Sprite
sprite: Clothing/Head/light_riot.rsi
sprite: Clothing/Head/Helmets/light_riot.rsi
- type: Clothing
sprite: Clothing/Head/light_riot.rsi
sprite: Clothing/Head/Helmets/light_riot.rsi
- type: entity
parent: HatBase
id: HatScaf
parent: ClothingHeadBase
id: ClothingHeadHelmetScaf
name: scaf
description: A robust, strong helmet.
components:
- type: Sprite
sprite: Clothing/Head/scaf.rsi
sprite: Clothing/Head/Helmets/scaf.rsi
- type: Clothing
sprite: Clothing/Head/scaf.rsi
sprite: Clothing/Head/Helmets/scaf.rsi
- type: entity
parent: HatBase
id: HatSecurity
name: security
description: Standard issue security helmet.
parent: ClothingHeadBase
id: ClothingHeadHelmetSpaceNinja
name: space ninja helmet
description:
components:
- type: Sprite
sprite: Clothing/Head/security.rsi
sprite: Clothing/Head/Helmets/spaceninja.rsi
- type: Clothing
sprite: Clothing/Head/security.rsi
sprite: Clothing/Head/Helmets/spaceninja.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHelmetSyndicate
name: syndicate
description: A stylish, robust syndicate helmet
components:
- type: Sprite
sprite: Clothing/Head/Helmets/syndicate.rsi
- type: Clothing
sprite: Clothing/Head/Helmets/syndicate.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHelmetTemplar
name: templar helmet
description: DEUS VULT
components:
- type: Sprite
sprite: Clothing/Head/Helmets/templar.rsi
- type: Clothing
sprite: Clothing/Head/Helmets/templar.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHelmetThunderdome
name: thunderdome
description: Let the battle commence!
components:
- type: Sprite
sprite: Clothing/Head/Helmets/thunderdome.rsi
- type: Clothing
sprite: Clothing/Head/Helmets/thunderdome.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHelmetWizardHelm
name: wizard helm
description: Strange-looking helmet that most certainly belongs to a real magic user.
components:
- type: Sprite
sprite: Clothing/Head/Helmets/wizardhelm.rsi
- type: Clothing
sprite: Clothing/Head/Helmets/wizardhelm.rsi

View File

@@ -1,155 +1,115 @@
- type: entity
parent: HatBase
id: HatBioCmo
name: bio - cmo
parent: ClothingHeadBase
id: ClothingHeadHatHoodBioGeneral
name: bio hood
suffix: Generic
description: A hood that protects the head and face from biological contaminants.
components:
- type: Sprite
sprite: Clothing/Head/Hoods/Bio/general.rsi
- type: Clothing
sprite: Clothing/Head/Hoods/Bio/general.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatHoodBioCmo
name: bio hood
suffix: CMO
description: An advanced hood for chief medical officer that protects the head and face from biological contaminants.
components:
- type: Sprite
sprite: Clothing/Head/bio_cmo.rsi
sprite: Clothing/Head/Hoods/Bio/cmo.rsi
- type: Clothing
sprite: Clothing/Head/bio_cmo.rsi
sprite: Clothing/Head/Hoods/Bio/cmo.rsi
- type: entity
parent: HatBase
id: HatBioGeneral
name: bio - general
parent: ClothingHeadBase
id: ClothingHeadHatHoodBioJanitor
name: bio hood
suffix: Janitor
description: A hood that protects the head and face from biological contaminants.
components:
- type: Sprite
sprite: Clothing/Head/bio_general.rsi
sprite: Clothing/Head/Hoods/Bio/janitor.rsi
- type: Clothing
sprite: Clothing/Head/bio_general.rsi
sprite: Clothing/Head/Hoods/Bio/janitor.rsi
- type: entity
parent: HatBase
id: HatBioJanitor
name: bio - janitor
parent: ClothingHeadBase
id: ClothingHeadHatHoodBioScientist
name: bio hood
suffix: Science
description: A hood that protects the head and face from biological contaminants.
components:
- type: Sprite
sprite: Clothing/Head/bio_janitor.rsi
sprite: Clothing/Head/Hoods/Bio/scientist.rsi
- type: Clothing
sprite: Clothing/Head/bio_janitor.rsi
sprite: Clothing/Head/Hoods/Bio/scientist.rsi
- type: entity
parent: HatBase
id: HatBioScientist
name: bio - scientist
parent: ClothingHeadBase
id: ClothingHeadHatHoodBioSecurity
name: bio hood
suffix: Security
description: A hood that protects the head and face from biological contaminants.
components:
- type: Sprite
sprite: Clothing/Head/bio_scientist.rsi
sprite: Clothing/Head/Hoods/Bio/security.rsi
- type: Clothing
sprite: Clothing/Head/bio_scientist.rsi
sprite: Clothing/Head/Hoods/Bio/security.rsi
- type: entity
parent: HatBase
id: HatBioSecurity
name: bio - security
parent: ClothingHeadBase
id: ClothingHeadHatHoodBioVirology
name: bio hood
suffix: Virology
description: A hood that protects the head and face from biological contaminants.
components:
- type: Sprite
sprite: Clothing/Head/bio_security.rsi
sprite: Clothing/Head/Hoods/Bio/virology.rsi
- type: Clothing
sprite: Clothing/Head/bio_security.rsi
sprite: Clothing/Head/Hoods/Bio/virology.rsi
- type: entity
parent: HatBase
id: HatBioVirology
name: bio - virology
description: A hood that protects the head and face from biological contaminants.
components:
- type: Sprite
sprite: Clothing/Head/bio_virology.rsi
- type: Clothing
sprite: Clothing/Head/bio_virology.rsi
- type: entity
parent: HatBase
id: HatBombsuit
name: bombsuit
description: A heavy helmet designed to withstand the pressure generated by a bomb and any fragments the bomb may produce.
components:
- type: Sprite
sprite: Clothing/Head/bombsuit.rsi
- type: Clothing
sprite: Clothing/Head/bombsuit.rsi
- type: entity
parent: HatBase
id: HatBombsuitsec
name: bombsuit sec
description: A heavy helmet designed to withstand the pressure generated by a bomb and any fragments the bomb may produce.
components:
- type: Sprite
sprite: Clothing/Head/bombsuitsec.rsi
- type: Clothing
sprite: Clothing/Head/bombsuitsec.rsi
- type: entity
parent: HatBase
id: HatBombsuitWhite
name: bombsuit white
description: A heavy helmet designed to withstand the pressure generated by a bomb and any fragments the bomb may produce.
components:
- type: Sprite
sprite: Clothing/Head/bombsuit_white.rsi
- type: Clothing
sprite: Clothing/Head/bombsuit_white.rsi
- type: entity
parent: HatBase
id: HatChaplainHood
parent: ClothingHeadBase
id: ClothingHeadHatHoodChaplainHood
name: chaplain hood
description: Maximum piety in this star system.
components:
- type: Sprite
sprite: Clothing/Head/chaplain_hood.rsi
sprite: Clothing/Head/Hoods/chaplain.rsi
- type: Clothing
sprite: Clothing/Head/chaplain_hood.rsi
sprite: Clothing/Head/Hoods/chaplain.rsi
- type: entity
parent: HatBase
id: HatCulthood
parent: ClothingHeadBase
id: ClothingHeadHatHoodCulthood
name: cult hood
description: There's no cult without cult hoods.
components:
- type: Sprite
sprite: Clothing/Head/culthood.rsi
sprite: Clothing/Head/Hoods/cult.rsi
- type: Clothing
sprite: Clothing/Head/culthood.rsi
sprite: Clothing/Head/Hoods/cult.rsi
- type: entity
parent: HatBase
id: HatNunHood
parent: ClothingHeadBase
id: ClothingHeadHatHoodNunHood
name: nun hood
description: Maximum piety in this star system.
components:
- type: Sprite
sprite: Clothing/Head/nun_hood.rsi
sprite: Clothing/Head/Hoods/nun.rsi
- type: Clothing
sprite: Clothing/Head/nun_hood.rsi
sprite: Clothing/Head/Hoods/nun.rsi
- type: entity
parent: HatBase
id: HatRad
parent: ClothingHeadBase
id: ClothingHeadHatHoodRad
name: rad
description: A hood of the hazmat suit, designed for protection from high radioactivity.
components:
- type: Sprite
sprite: Clothing/Head/rad.rsi
sprite: Clothing/Head/Hoods/rad.rsi
- type: Clothing
sprite: Clothing/Head/rad.rsi
sprite: Clothing/Head/Hoods/rad.rsi

View File

@@ -1,11 +1,120 @@
- type: entity
parent: HatBase
id: HatSkub
parent: ClothingHeadBase
id: ClothingHeadHatBearpelt
name: bear pelt
description: It's a cute bear pelt.
components:
- type: Sprite
sprite: Clothing/Head/Misc/bearpelt.rsi
- type: Clothing
sprite: Clothing/Head/Misc/bearpelt.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatBunny
name: bunny
description: Cute bunny ears.
components:
- type: Sprite
sprite: Clothing/Head/Misc/bunny.rsi
- type: Clothing
sprite: Clothing/Head/Misc/bunny.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatCake
name: cake hat
description: You put the cake on your head. Brilliant.
components:
- type: Sprite
sprite: Clothing/Head/Misc/cake.rsi
- type: Clothing
sprite: Clothing/Head/Misc/cake.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatChickenhead
name: chicken head
description: "It's a chicken head. Bok bok bok!"
components:
- type: Sprite
sprite: Clothing/Head/Misc/chickenhead.rsi
- type: Clothing
sprite: Clothing/Head/Misc/chickenhead.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatHairflower
name: hairflower
description: A red rose for beautiful ladies.
components:
- type: Sprite
sprite: Clothing/Head/Misc/hairflower.rsi
- type: Clothing
sprite: Clothing/Head/Misc/hairflower.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatPumpkin
name: pumpkin hat
description: A jack o' lantern! Believed to ward off evil spirits.
components:
- type: Sprite
sprite: Clothing/Head/Misc/pumpkin.rsi
- type: Clothing
sprite: Clothing/Head/Misc/pumpkin.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatPwig
name: pwig
description: To be honest, those look ridiculous.
components:
- type: Sprite
sprite: Clothing/Head/Misc/pwig.rsi
- type: Clothing
sprite: Clothing/Head/Misc/pwig.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatRichard
name: richard
description: 'Do you like hurting people?'
components:
- type: Sprite
sprite: Clothing/Head/Misc/richard.rsi
- type: Clothing
sprite: Clothing/Head/Misc/richard.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatSkub
name: Skub Hat
description: 'Best paired with the Skub Suit.'
components:
- type: Sprite
sprite: Clothing/Head/skubhead.rsi
sprite: Clothing/Head/Misc/skubhead.rsi
- type: Clothing
sprite: Clothing/Head/skubhead.rsi
sprite: Clothing/Head/Misc/skubhead.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatXenoMom
name: xeno matriarch
description: Hiss hiss hiss!
components:
- type: Sprite
sprite: Clothing/Head/Misc/xenom.rsi
- type: Clothing
sprite: Clothing/Head/Misc/xenom.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatXeno
name: xenos
description: Hiss hiss hiss!
components:
- type: Sprite
sprite: Clothing/Head/Misc/xenos.rsi
- type: Clothing
sprite: Clothing/Head/Misc/xenos.rsi

View File

@@ -0,0 +1,241 @@
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatBluesoft
name: bluesoft
description: "It's a baseball hat in a tasteless blue colour."
components:
- type: Sprite
sprite: Clothing/Head/Soft/bluesoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/bluesoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatBluesoftFlipped
name: bluesoft flipped
description: "It's a baseball hat in a tasteless blue colour. Flipped."
components:
- type: Sprite
sprite: Clothing/Head/Soft/bluesoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/bluesoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatCargosoft
name: cargosoft
description: "It's a baseball hat painted in Cargo colours."
components:
- type: Sprite
sprite: Clothing/Head/Soft/cargosoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/cargosoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatCargosoftFlipped
name: cargosoft flipped
description: "It's a baseball hat painted in Cargo colours. Flipped."
components:
- type: Sprite
sprite: Clothing/Head/Soft/cargosoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/cargosoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatCorpsoft
name: corpsoft
description: A baseball bat in corporation colors.
components:
- type: Sprite
sprite: Clothing/Head/Soft/corpsoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/corpsoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatCorpsoftFlipped
name: corpsoft flipped
description: A baseball bat in corporation colors. Flipped.
components:
- type: Sprite
sprite: Clothing/Head/Soft/corpsoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/corpsoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatGreensoft
name: greensoft
description: "It's a baseball hat in a tasteless green colour."
components:
- type: Sprite
sprite: Clothing/Head/Soft/greensoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/greensoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatGreensoftFlipped
name: greensoft flipped
description: "It's a baseball hat in a tasteless green colour. Flipped."
components:
- type: Sprite
sprite: Clothing/Head/Soft/greensoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/greensoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatGreysoft
name: greysoft
description: "It's a baseball hat in a tasteless grey colour."
components:
- type: Sprite
sprite: Clothing/Head/Soft/greysoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/greysoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatGreysoftFlipped
name: greysoft flipped
description: "It's a baseball hat in a tasteless grey colour. Flipped."
components:
- type: Sprite
sprite: Clothing/Head/Soft/greysoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/greysoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatMimesoft
name: mimesoft
description: "It's a baseball hat in a tasteless white colour."
components:
- type: Sprite
sprite: Clothing/Head/Soft/mimesoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/mimesoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatMimesoftFlipped
name: mimesoft flipped
description: It's a baseball hat in a tasteless white colour. Flipped.
components:
- type: Sprite
sprite: Clothing/Head/Soft/mimesoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/mimesoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatOrangesoft
name: orangesoft
description: It's a baseball hat in a good-looking orange colour.
components:
- type: Sprite
sprite: Clothing/Head/Soft/orangesoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/orangesoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatOrangesoftFlipped
name: orangesoft flipped
description: It's a baseball hat in a good-looking orange colour. Flipped.
components:
- type: Sprite
sprite: Clothing/Head/Soft/orangesoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/orangesoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatPurplesoft
name: purple soft
description: It's a baseball hat in a tasteless purple colour.
components:
- type: Sprite
sprite: Clothing/Head/Soft/purplesoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/purplesoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatPurplesoftFlipped
name: purplesoft flipped
description: It's a baseball hat in a tasteless purple colour. Flipped.
components:
- type: Sprite
sprite: Clothing/Head/Soft/purplesoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/purplesoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatRedsoft
name: redsoft
description: It's a baseball hat in a tasteless red colour.
components:
- type: Sprite
sprite: Clothing/Head/Soft/redsoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/redsoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatRedsoftFlipped
name: redsoft flipped
description: It's a baseball hat in a tasteless purple colour. Flipped.
components:
- type: Sprite
sprite: Clothing/Head/Soft/redsoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/redsoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatSecsoft
name: secsoft
description: It's a robust baseball hat in tasteful red colour.
components:
- type: Sprite
sprite: Clothing/Head/Soft/secsoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/secsoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatSecsoftFlipped
name: secsoft flipped
description: It's a robust baseball hat in tasteful red colour. Flipped.
components:
- type: Sprite
sprite: Clothing/Head/Soft/secsoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/secsoft_flipped.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatYellowsoft
name: yellowsoft
description: A yellow baseball hat.
components:
- type: Sprite
sprite: Clothing/Head/Soft/yellowsoft.rsi
- type: Clothing
sprite: Clothing/Head/Soft/yellowsoft.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatYellowsoftFlipped
name: yellowsoft flipped
description: A yellow flipped baseball hat.
components:
- type: Sprite
sprite: Clothing/Head/Soft/yellowsoft_flipped.rsi
- type: Clothing
sprite: Clothing/Head/Soft/yellowsoft_flipped.rsi

View File

@@ -1,95 +0,0 @@
- type: entity
parent: HatBase
id: HatWelding
name: welding mask
description: A head-mounted face cover designed to protect the wearer completely from space-arc eye.
components:
- type: Sprite
sprite: Clothing/Head/welding.rsi
- type: Clothing
sprite: Clothing/Head/welding.rsi
- type: entity
parent: HatBase
id: HatWeldingup
name: welding mask (up)
description: A head-mounted face cover designed to protect the wearer completely from space-arc eye.
components:
- type: Sprite
sprite: Clothing/Head/weldingup.rsi
- type: Clothing
sprite: Clothing/Head/weldingup.rsi
- type: entity
parent: HatBase
id: HatFireWeldingMask
name: fire welding mask
description: A painted welding helmet, this one has flames on it.
components:
- type: Sprite
sprite: Clothing/Head/fire_welding_mask_1.rsi
- type: Clothing
sprite: Clothing/Head/fire_welding_mask_1.rsi
- type: entity
parent: HatBase
id: HatFireWeldingMaskup
name: fire welding mask (up)
description: A painted welding helmet, this one has flames on it.
components:
- type: Sprite
sprite: Clothing/Head/fire_welding_mask_1up.rsi
- type: Clothing
sprite: Clothing/Head/fire_welding_mask_1up.rsi
- type: entity
parent: HatBase
id: HatBlueFlameWeldingMask
name: blue flame welding mask
description: A painted welding helmet, this one has blue flames on it.
components:
- type: Sprite
sprite: Clothing/Head/blue_flame_welding_mask_1.rsi
- type: Clothing
sprite: Clothing/Head/blue_flame_welding_mask_1.rsi
- type: entity
parent: HatBase
id: HatBlueFlameWeldingMaskup
name: blue flame welding mask (up)
description: A painted welding helmet, this one has blue flames on it.
components:
- type: Sprite
sprite: Clothing/Head/blue_flame_welding_mask_1up.rsi
- type: Clothing
sprite: Clothing/Head/blue_flame_welding_mask_1up.rsi
- type: entity
parent: HatBase
id: HatPaintedwelding
name: painted welding mask
description: A welding helmet, painted in crimson.
components:
- type: Sprite
sprite: Clothing/Head/paintedwelding.rsi
- type: Clothing
sprite: Clothing/Head/paintedwelding.rsi
- type: entity
parent: HatBase
id: HatPaintedweldingup
name: painted welding mask (up)
description: A welding helmet, painted in crimson.
components:
- type: Sprite
sprite: Clothing/Head/paintedweldingup.rsi
- type: Clothing
sprite: Clothing/Head/paintedweldingup.rsi

View File

@@ -0,0 +1,43 @@
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatWelding
name: welding mask
description: A head-mounted face cover designed to protect the wearer completely from space-arc eye.
components:
- type: Sprite
sprite: Clothing/Head/Welding/welding.rsi
- type: Clothing
sprite: Clothing/Head/Welding/welding.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatWeldingMaskFlame
name: flame welding mask
description: A painted welding helmet, this one has flames on it.
components:
- type: Sprite
sprite: Clothing/Head/Welding/flame_welding_mask.rsi
- type: Clothing
sprite: Clothing/Head/Welding/flame_welding_mask.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatWeldingMaskFlameBlue
name: blue-flame welding mask
description: A painted welding helmet, this one has blue flames on it.
components:
- type: Sprite
sprite: Clothing/Head/Welding/blue_flame_welding_mask.rsi
- type: Clothing
sprite: Clothing/Head/Welding/blue_flame_welding_mask.rsi
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHatWeldingMaskPainted
name: painted welding mask
description: A welding helmet, painted in crimson.
components:
- type: Sprite
sprite: Clothing/Head/Welding/paintedwelding.rsi
- type: Clothing
sprite: Clothing/Head/Welding/paintedwelding.rsi

View File

@@ -0,0 +1,9 @@
- type: entity
parent: Clothing
id: ClothingMaskBase
abstract: true
components:
- type: Sprite
state: icon
- type: Clothing
Slots: [mask]

View File

@@ -1,98 +1,71 @@
- type: entity
parent: Clothing
id: MasksBase
abstract: true
components:
- type: Clothing
Slots: [mask]
- type: entity
parent: MasksBase
id: OldGasMaskClothing
parent: ClothingMaskBase
id: ClothingMaskGas
name: old gas mask
description: An old, dusty mask. Yet still dutifully functional.
components:
- type: Sprite
sprite: Clothing/Masks/mask_gasalt.rsi
state: icon
- type: BreathMask
sprite: Clothing/Mask/gas.rsi
- type: Clothing
sprite: Clothing/Masks/mask_gasalt.rsi
sprite: Clothing/Mask/gas.rsi
- type: BreathMask
- type: entity
parent: MasksBase
id: GasMaskClothing
name: gas mask
description: Regulations require these to be stocked after the fourth coolant leak.
components:
- type: Sprite
sprite: Clothing/Masks/mask_gas.rsi
state: icon
- type: BreathMask
- type: Clothing
sprite: Clothing/Masks/mask_gas.rsi
- type: entity
parent: MasksBase
id: BreathMaskClothing
parent: ClothingMaskBase
id: ClothingMaskBreath
name: breath mask
description: Might as well keep this on 24/7.
components:
- type: Sprite
sprite: Clothing/Masks/mask_breath.rsi
state: icon
- type: BreathMask
sprite: Clothing/Mask/breath.rsi
- type: Clothing
sprite: Clothing/Masks/mask_breath.rsi
sprite: Clothing/Mask/breath.rsi
- type: BreathMask
- type: entity
parent: MasksBase
id: MaskClown
parent: ClothingMaskBase
id: ClothingMaskClown
name: clown wig and mask
description: A true prankster's facial attire. A clown is incomplete without his wig and mask.
components:
- type: Sprite
sprite: Clothing/Masks/mask_clown.rsi
state: icon
- type: BreathMask
sprite: Clothing/Mask/clown.rsi
- type: Clothing
sprite: Clothing/Masks/mask_clown.rsi
sprite: Clothing/Mask/clown.rsi
- type: BreathMask
- type: entity
parent: MasksBase
id: MaskJoy
parent: ClothingMaskBase
id: ClothingMaskJoy
name: joy mask
description: Express your happiness or hide your sorrows with this laughing face with crying tears of joy cutout.
components:
- type: Sprite
sprite: Clothing/Masks/mask_joy.rsi
state: icon
- type: BreathMask
sprite: Clothing/Mask/joy.rsi
- type: Clothing
sprite: Clothing/Masks/mask_joy.rsi
sprite: Clothing/Mask/joy.rsi
- type: BreathMask
- type: entity
parent: MasksBase
id: MaskMime
parent: ClothingMaskBase
id: ClothingMaskMime
name: mime mask
description: The traditional mime's mask. It has an eerie facial posture.
components:
- type: Sprite
sprite: Clothing/Masks/mask_mime.rsi
state: icon
- type: BreathMask
sprite: Clothing/Mask/mime.rsi
- type: Clothing
sprite: Clothing/Masks/mask_mime.rsi
sprite: Clothing/Mask/mime.rsi
- type: BreathMask
- type: entity
parent: MasksBase
id: MaskSterile
parent: ClothingMaskBase
id: ClothingMaskSterile
name: sterile mask
description: A sterile mask designed to help prevent the spread of diseases.
components:
- type: Sprite
sprite: Clothing/Masks/mask_sterile.rsi
state: icon
- type: BreathMask
sprite: Clothing/Mask/sterile.rsi
- type: Clothing
sprite: Clothing/Masks/mask_sterile.rsi
sprite: Clothing/Mask/sterile.rsi
- type: BreathMask

View File

@@ -0,0 +1,14 @@
- type: entity
parent: Clothing
id: ClothingNeckBase
abstract: true
name: neck
description:
components:
- type: Clothing
size: 10
QuickEquip: true
Slots:
- neck
- type: Sprite
state: icon

View File

@@ -1,124 +1,88 @@
- type: entity
parent: Clothing
id: CloakClothing
name: cloak
abstract: true
description:
components:
- type: Clothing
size: 10
QuickEquip: true
Slots:
- neck
- type: entity
parent: CloakClothing
id: CapCloak
parent: ClothingNeckBase
id: ClothingNeckCloakCap
name: captain's cloak
description: A pompous and comfy blue cloak with a nice gold trim.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/cap_cloak.rsi
state: capcloak
sprite: Clothing/Neck/Cloaks/cap.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/cap_cloak.rsi
HeldPrefix: capcloak
sprite: Clothing/Neck/Cloaks/cap.rsi
- type: entity
parent: CloakClothing
id: HosCloak
parent: ClothingNeckBase
id: ClothingNeckCloakHos
name: HoS's cloak
description: An exquisite dark and red cloak of a Head of Security.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/hos_cloak.rsi
state: hoscloak
sprite: Clothing/Neck/Cloaks/hos.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/hos_cloak.rsi
HeldPrefix: hoscloak
sprite: Clothing/Neck/Cloaks/hos.rsi
- type: entity
parent: CloakClothing
id: CeCloak
parent: ClothingNeckBase
id: ClothingNeckCloakCe
name: CE's cloak
description: A dark green cloak with light blue ornaments.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/ce_cloak.rsi
state: cecloak
sprite: Clothing/Neck/Cloaks/ce.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/ce_cloak.rsi
HeldPrefix: cecloak
sprite: Clothing/Neck/Cloaks/ce.rsi
- type: entity
parent: CloakClothing
id: CmoCloak
parent: ClothingNeckBase
id: CloathingCloakCmo
name: CMO's cloak
description: A sterile blue cloak with a green cross.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/cmo_cloak.rsi
state: cmocloak
sprite: Clothing/Neck/Cloaks/cmo.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/cmo_cloak.rsi
HeldPrefix: cmocloak
sprite: Clothing/Neck/Cloaks/cmo.rsi
- type: entity
parent: CloakClothing
id: RdCloak
parent: ClothingNeckBase
id: ClothingNeckCloakRd
name: RD's cloak
description: A white cloak with violet stripes.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/rd_cloak.rsi
state: rdcloak
sprite: Clothing/Neck/Cloaks/rd.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/rd_cloak.rsi
HeldPrefix: rdcloak
sprite: Clothing/Neck/Cloaks/rd.rsi
- type: entity
parent: CloakClothing
id: QmCloak
parent: ClothingNeckBase
id: ClothingNeckCloakQm
name: QM's cloak
description: A strong brown cloak with a reflective stripe.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/qm_cloak.rsi
state: qmcloak
sprite: Clothing/Neck/Cloaks/qm.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/qm_cloak.rsi
HeldPrefix: qmcloak
sprite: Clothing/Neck/Cloaks/qm.rsi
- type: entity
parent: CloakClothing
id: HopCloak
parent: ClothingNeckBase
id: ClothingNeckCloakHop
name: HoP's cloak
description: A blue cloak with red shoudlers and gold buttons.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/hop_cloak.rsi
state: hopcloak
sprite: Clothing/Neck/Cloaks/hop.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/hop_cloak.rsi
HeldPrefix: hopcloak
sprite: Clothing/Neck/Cloaks/hop.rsi
- type: entity
parent: CloakClothing
id: HeraldCloak
parent: ClothingNeckBase
id: ClothingNeckCloakHerald
name: Herald's cloak
description: An evil-looking red cloak with spikes on its shoulders.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/herald_cloak.rsi
state: heraldcloak
sprite: Clothing/Neck/Cloaks/herald.rsi
- type: Clothing
sprite: Clothing/Neck/Cloaks/herald_cloak.rsi
HeldPrefix: heraldcloak
sprite: Clothing/Neck/Cloaks/herald.rsi

View File

@@ -0,0 +1,32 @@
- type: entity
parent: ClothingNeckBase
id: ClothingNeckHeadphones
name: headphones
description: Quality headphones from Drunk Masters, with good sound insulation.
components:
- type: Sprite
sprite: Clothing/Neck/Misc/headphones.rsi
- type: Clothing
sprite: Clothing/Neck/Misc/headphones.rsi
- type: entity
parent: ClothingNeckBase
id: ClothingNeckStethoscope
name: stethoscope
description: An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing.
components:
- type: Sprite
sprite: Clothing/Neck/Misc/stethoscope.rsi
- type: Clothing
sprite: Clothing/Neck/Misc/stethoscope.rsi
- type: entity
parent: ClothingNeckBase
id: ClothingNeckBling
name: bling
description: Damn, it feels good to be a gangster.
components:
- type: Sprite
sprite: Clothing/Neck/Misc/bling.rsi
- type: Clothing
sprite: Clothing/Neck/Misc/bling.rsi

View File

@@ -1,138 +0,0 @@
- type: entity
parent: Clothing
id: NeckClothing
abstract: true
name: neck
description:
components:
- type: Clothing
size: 10
QuickEquip: true
Slots:
- neck
- type: entity
parent: NeckClothing
id: HeadPhonesOn
name: headphones
description: Quality headphones from Drunk Masters, with good sound insulation.
components:
- type: Sprite
sprite: Clothing/Neck/headphones.rsi
state: headphones_on
- type: Clothing
sprite: Clothing/Neck/headphones.rsi
HeldPrefix: headphones_on
- type: entity
parent: NeckClothing
id: RedTie
name: red-tie
description: A neosilk clip-on red tie.
components:
- type: Sprite
sprite: Clothing/Neck/redtie.rsi
state: redtie
- type: Clothing
sprite: Clothing/Neck/redtie.rsi
HeldPrefix: redtie
- type: entity
parent: NeckClothing
id: DetTie
name: detective's tie
description: A loosely tied necktie, a perfect accessory for the over-worked detective.
components:
- type: Sprite
sprite: Clothing/Neck/dettie.rsi
state: dettie
- type: Clothing
sprite: Clothing/Neck/dettie.rsi
HeldPrefix: dettie
- type: entity
parent: NeckClothing
id: Stethoscope
name: stethoscope
description: An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing.
components:
- type: Sprite
sprite: Clothing/Neck/stethoscope.rsi
state: stethoscope
- type: Clothing
sprite: Clothing/Neck/stethoscope.rsi
HeldPrefix: stethoscope
- type: entity
parent: NeckClothing
id: StripedRedScarf
name: striped red scarf
description: A stylish striped red scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/red_scarf.rsi
state: stripedredscarf
- type: Clothing
sprite: Clothing/Neck/Scarfs/red_scarf.rsi
HeldPrefix: stripedredscarf
- type: entity
parent: NeckClothing
id: StripedBlueScarf
name: striped blue scarf
description: A stylish striped blue scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/blue_scarf.rsi
state: stripedbluescarf
- type: Clothing
sprite: Clothing/Neck/Scarfs/blue_scarf.rsi
HeldPrefix: stripedbluescarf
- type: entity
parent: NeckClothing
id: StripedGreenScarf
name: striped green scarf
description: A stylish striped green scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/green_scarf.rsi
state: stripedgreenscarf
- type: Clothing
sprite: Clothing/Neck/Scarfs/green_scarf.rsi
HeldPrefix: stripedgreenscarf
- type: entity
parent: NeckClothing
id: ZebraScarf
name: zebra scarf
description: A striped scarf, a mandatory accessory for artists.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/zebra_scarf.rsi
state: zebrascarf
- type: Clothing
sprite: Clothing/Neck/Scarfs/zebra_scarf.rsi
HeldPrefix: zebrascarf
- type: entity
parent: NeckClothing
id: Bling
name: bling
description: Damn, it feels good to be a gangster.
components:
- type: Sprite
sprite: Clothing/Neck/bling.rsi
state: bling
- type: Clothing
sprite: Clothing/Neck/bling.rsi
HeldPrefix: bling

View File

@@ -0,0 +1,43 @@
- type: entity
parent: ClothingNeckBase
id: ClothingNeckScarfStripedRed
name: striped red scarf
description: A stylish striped red scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/red.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/red.rsi
- type: entity
parent: ClothingNeckBase
id: ClothingNeckScarfStripedBlue
name: striped blue scarf
description: A stylish striped blue scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/blue.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/blue.rsi
- type: entity
parent: ClothingNeckBase
id: ClothingNeckScarfStripedGreen
name: striped green scarf
description: A stylish striped green scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/green.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/green.rsi
- type: entity
parent: ClothingNeckBase
id: ClothingNeckScarfStripedZebra
name: zebra scarf
description: A striped scarf, a mandatory accessory for artists.
components:
- type: Sprite
sprite: Clothing/Neck/Scarfs/zebra.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/zebra.rsi

View File

@@ -0,0 +1,21 @@
- type: entity
parent: ClothingNeckBase
id: ClothingNeckTieRed
name: red-tie
description: A neosilk clip-on red tie.
components:
- type: Sprite
sprite: Clothing/Neck/Ties/redtie.rsi
- type: Clothing
sprite: Clothing/Neck/Ties/redtie.rsi
- type: entity
parent: ClothingNeckBase
id: ClothingNeckTieDet
name: detective's tie
description: A loosely tied necktie, a perfect accessory for the over-worked detective.
components:
- type: Sprite
sprite: Clothing/Neck/Ties/dettie.rsi
- type: Clothing
sprite: Clothing/Neck/Ties/dettie.rsi

View File

@@ -1,265 +1,109 @@
- type: entity
parent: Clothing
id: OuterclothingBase
abstract: true
components:
- type: Clothing
Slots:
- outerclothing
- type: Sprite
state: icon
- type: entity
parent: OuterclothingBase
id: OuterclothingArmorVest
name: armor vest
description: "A slim Type I armored vest that provides decent protection against most types of damage."
components:
- type: Sprite
sprite: Clothing/OuterClothing/armor.rsi
state: armor
- type: Clothing
sprite: Clothing/OuterClothing/armor.rsi
ClothingPrefix: armor
- type: entity
parent: OuterclothingBase
id: OuterclothingArmorreflec
parent: ClothingOuterBase
id: ClothingOuterArmorReflective
name: armor (reflective)
description: An armored vest with advanced shielding to protect against energy weapons.
components:
- type: Sprite
sprite: Clothing/OuterClothing/armor_reflec.rsi
sprite: Clothing/OuterClothing/Armor/armor_reflec.rsi
- type: Clothing
sprite: Clothing/OuterClothing/armor_reflec.rsi
sprite: Clothing/OuterClothing/Armor/armor_reflec.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingBulletproof
parent: ClothingOuterBase
id: ClothingOuterArmorBulletproof
name: bulletproof
description: An armored vest with heavy plates to protect against ballistic projectiles.
components:
- type: Sprite
sprite: Clothing/OuterClothing/bulletproof.rsi
sprite: Clothing/OuterClothing/Armor/bulletproof.rsi
- type: Clothing
sprite: Clothing/OuterClothing/bulletproof.rsi
sprite: Clothing/OuterClothing/Armor/bulletproof.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingCaparmor
name: captain's armor
description: A suit of protective formal armor made for the station's captain.
components:
- type: Sprite
sprite: Clothing/OuterClothing/caparmor.rsi
- type: Clothing
sprite: Clothing/OuterClothing/caparmor.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingAcolyte
name: acolyte
description: An armored suit for acolytes of the cult.
components:
- type: Sprite
sprite: Clothing/OuterClothing/acolyte.rsi
- type: Clothing
sprite: Clothing/OuterClothing/acolyte.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingCultarmour
parent: ClothingOuterBase
id: ClothingOuterArmorCult
name: cult armor
description: An evil-looking cult armor, made of bones.
components:
- type: Sprite
sprite: Clothing/OuterClothing/cult_armour.rsi
sprite: Clothing/OuterClothing/Armor/cult_armour.rsi
- type: Clothing
sprite: Clothing/OuterClothing/cult_armour.rsi
sprite: Clothing/OuterClothing/Armor/cult_armour.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingCustodian
name: custodian
description: A special armormed custodian suit for cleaning trash in very dangerous places.
components:
- type: Sprite
sprite: Clothing/OuterClothing/custodian.rsi
- type: Clothing
sprite: Clothing/OuterClothing/custodian.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingHeavy
parent: ClothingOuterBase
id: ClothingOuterArmorHeavy
name: heavy
description: A heavily armored suit that protects against excessive damage.
components:
- type: Sprite
sprite: Clothing/OuterClothing/heavy.rsi
sprite: Clothing/OuterClothing/Armor/heavy.rsi
- type: Clothing
sprite: Clothing/OuterClothing/heavy.rsi
sprite: Clothing/OuterClothing/Armor/heavy.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingHmarmorvest
name: HM armor vest
description: A handmade armor vest with a big and thick steel plate.
parent: ClothingOuterBase
id: ClothingOuterArmorHeavyGreen
name: heavy
description: A heavily armored suit with green accents that protects against excessive damage.
components:
- type: Sprite
sprite: Clothing/OuterClothing/hm_armorvest.rsi
sprite: Clothing/OuterClothing/Armor/heavygreen.rsi
- type: Clothing
sprite: Clothing/OuterClothing/hm_armorvest.rsi
sprite: Clothing/OuterClothing/Armor/heavygreen.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingHos
name: HoS armor vest
description: A synthetic armor vest with COMMANDER printed in gold lettering on the chest. This one has added webbing and ballistic plates.
parent: ClothingOuterBase
id: ClothingOuterArmorHeavyRed
name: heavy
description: A heavily armored suit with red accents that protects against excessive damage.
components:
- type: Sprite
sprite: Clothing/OuterClothing/hos.rsi
sprite: Clothing/OuterClothing/Armor/heavyred.rsi
- type: Clothing
sprite: Clothing/OuterClothing/hos.rsi
sprite: Clothing/OuterClothing/Armor/heavyred.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingKvest
name: kvest
description: An armor vest made of synthetic fibers.
components:
- type: Sprite
sprite: Clothing/OuterClothing/kvest.rsi
- type: Clothing
sprite: Clothing/OuterClothing/kvest.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingMagusblue
parent: ClothingOuterBase
id: ClothingOuterArmorMagusblue
name: magus blue
description: An blue armored suit that provides good protection.
components:
- type: Sprite
sprite: Clothing/OuterClothing/magusblue.rsi
sprite: Clothing/OuterClothing/Armor/magusblue.rsi
- type: Clothing
sprite: Clothing/OuterClothing/magusblue.rsi
sprite: Clothing/OuterClothing/Armor/magusblue.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingMagusred
parent: ClothingOuterBase
id: ClothingOuterArmorMagusred
name: magus red
description: A red armored suit that provides good protection.
components:
- type: Sprite
sprite: Clothing/OuterClothing/magusred.rsi
sprite: Clothing/OuterClothing/Armor/magusred.rsi
- type: Clothing
sprite: Clothing/OuterClothing/magusred.rsi
sprite: Clothing/OuterClothing/Armor/magusred.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingMercwebvest
name: merc web vest
description: A high-quality armored vest made from a hard synthetic material. It is surprisingly flexible and light, despite formidable armor plating.
components:
- type: Sprite
sprite: Clothing/OuterClothing/mercwebvest.rsi
- type: Clothing
sprite: Clothing/OuterClothing/mercwebvest.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingReactive
name: reactive
description: An experimental suit with a reactive armor that stops very fast projectiles. Currently on.
components:
- type: Sprite
sprite: Clothing/OuterClothing/reactive.rsi
- type: Clothing
sprite: Clothing/OuterClothing/reactive.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingReactiveoff
name: reactive (off)
description: An experimental suit with a reactive armor that stops very fast projectiles. Currently off.
components:
- type: Sprite
sprite: Clothing/OuterClothing/reactiveoff.rsi
- type: Clothing
sprite: Clothing/OuterClothing/reactiveoff.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingRiot
parent: ClothingOuterBase
id: ClothingOuterArmorRiot
name: riot
description: An armored vest with heavy padding to protect against melee attacks.
components:
- type: Sprite
sprite: Clothing/OuterClothing/riot.rsi
sprite: Clothing/OuterClothing/Armor/riot.rsi
- type: Clothing
sprite: Clothing/OuterClothing/riot.rsi
sprite: Clothing/OuterClothing/Armor/riot.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingScaf
parent: ClothingOuterBase
id: ClothingOuterArmorScaf
name: scaf
description: A green and brown tactical suit for combat situations.
components:
- type: Sprite
sprite: Clothing/OuterClothing/scaf.rsi
sprite: Clothing/OuterClothing/Armor/scaf.rsi
- type: Clothing
sprite: Clothing/OuterClothing/scaf.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingSwat
name: swat
description: Very durable vest that provides excellent protection from ranged and melee weapons.
components:
- type: Sprite
sprite: Clothing/OuterClothing/swat.rsi
- type: Clothing
sprite: Clothing/OuterClothing/swat.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingSninja
name: S ninja
description: This black technologically advanced, cybernetically-enhanced suit provides good protection and many abilities like invisibility or teleportation.
components:
- type: Sprite
sprite: Clothing/OuterClothing/s_ninja.rsi
- type: Clothing
sprite: Clothing/OuterClothing/s_ninja.rsi
- type: entity
parent: OuterclothingBase
id: OuterclothingWebvest
name: web vest
description: A synthetic armor vest. This one has added webbing and ballistic plates.
components:
- type: Sprite
sprite: Clothing/OuterClothing/webvest.rsi
- type: Clothing
sprite: Clothing/OuterClothing/webvest.rsi
sprite: Clothing/OuterClothing/Armor/scaf.rsi

View File

@@ -0,0 +1,20 @@
- type: entity
parent: Clothing
id: ClothingOuterBase
abstract: true
components:
- type: Clothing
Slots:
- outerclothing
- type: Sprite
state: icon
- type: entity
parent: ClothingOuterBase
id: ClothingOuterHardsuitBase
name: base hardsuit
abstract: true
components:
- type: PressureProtection
highPressureMultiplier: 0.75
lowPressureMultiplier: 100

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