diff --git a/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs b/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs
index 73f18aec8d6..c3fac8cb92a 100644
--- a/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs
+++ b/Content.Client/Access/UI/AgentIDCardBoundUserInterface.cs
@@ -40,9 +40,9 @@ private void OnJobChanged(string newJob)
SendMessage(new AgentIDCardJobChangedMessage(newJob));
}
- public void OnJobIconChanged(string newJobIcon)
+ public void OnJobIconChanged(string newJobIconId)
{
- SendMessage(new AgentIDCardJobIconChangedMessage(newJobIcon));
+ SendMessage(new AgentIDCardJobIconChangedMessage(newJobIconId));
}
///
@@ -57,7 +57,7 @@ protected override void UpdateState(BoundUserInterfaceState state)
_window.SetCurrentName(cast.CurrentName);
_window.SetCurrentJob(cast.CurrentJob);
- _window.SetAllowedIcons(cast.Icons);
+ _window.SetAllowedIcons(cast.Icons, cast.CurrentJobIconId);
}
protected override void Dispose(bool disposing)
diff --git a/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs b/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs
index beca0c41ba9..9a38c0c4853 100644
--- a/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs
+++ b/Content.Client/Access/UI/AgentIDCardWindow.xaml.cs
@@ -38,7 +38,7 @@ public AgentIDCardWindow(AgentIDCardBoundUserInterface bui)
JobLineEdit.OnFocusExit += e => OnJobChanged?.Invoke(e.Text);
}
- public void SetAllowedIcons(HashSet icons)
+ public void SetAllowedIcons(HashSet icons, string currentJobIconId)
{
IconGrid.DisposeAllChildren();
@@ -79,6 +79,10 @@ public void SetAllowedIcons(HashSet icons)
jobIconButton.AddChild(jobIconTexture);
jobIconButton.OnPressed += _ => _bui.OnJobIconChanged(jobIcon.ID);
IconGrid.AddChild(jobIconButton);
+
+ if (jobIconId.Equals(currentJobIconId))
+ jobIconButton.Pressed = true;
+
i++;
}
}
diff --git a/Content.Client/Clothing/ClientClothingSystem.cs b/Content.Client/Clothing/ClientClothingSystem.cs
index 37b740d7f7c..6dd31d3189e 100644
--- a/Content.Client/Clothing/ClientClothingSystem.cs
+++ b/Content.Client/Clothing/ClientClothingSystem.cs
@@ -11,6 +11,7 @@
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;
+using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.TypeSerializers.Implementations;
using Robust.Shared.Utility;
using static Robust.Client.GameObjects.SpriteComponent;
@@ -46,6 +47,7 @@ public sealed class ClientClothingSystem : ClothingSystem
};
[Dependency] private readonly IResourceCache _cache = default!;
+ [Dependency] private readonly ISerializationManager _serialization = default!;
[Dependency] private readonly InventorySystem _inventorySystem = default!;
public override void Initialize()
@@ -299,6 +301,7 @@ private void RenderEquipment(EntityUid equipee, EntityUid equipment, string slot
// temporary, until layer draw depths get added. Basically: a layer with the key "slot" is being used as a
// bookmark to determine where in the list of layers we should insert the clothing layers.
bool slotLayerExists = sprite.LayerMapTryGet(slot, out var index);
+ var displacementData = inventory.Displacements.GetValueOrDefault(slot);
// add the new layers
foreach (var (key, layerData) in ev.Layers)
@@ -342,6 +345,28 @@ private void RenderEquipment(EntityUid equipee, EntityUid equipment, string slot
sprite.LayerSetData(index, layerData);
layer.Offset += slotDef.Offset;
+
+ if (displacementData != null)
+ {
+ if (displacementData.ShaderOverride != null)
+ sprite.LayerSetShader(index, displacementData.ShaderOverride);
+
+ var displacementKey = $"{key}-displacement";
+ if (!revealedLayers.Add(displacementKey))
+ {
+ Log.Warning($"Duplicate key for clothing visuals DISPLACEMENT: {displacementKey}.");
+ continue;
+ }
+
+ var displacementLayer = _serialization.CreateCopy(displacementData.Layer, notNullableOverride: true);
+ displacementLayer.CopyToShaderParameters!.LayerKey = key;
+
+ // Add before main layer for this item.
+ sprite.AddLayer(displacementLayer, index);
+ sprite.LayerMapSet(displacementKey, index);
+
+ revealedLayers.Add(displacementKey);
+ }
}
RaiseLocalEvent(equipment, new EquipmentVisualsUpdatedEvent(equipee, slot, revealedLayers), true);
diff --git a/Content.Client/Fax/System/FaxVisualsSystem.cs b/Content.Client/Fax/System/FaxVisualsSystem.cs
new file mode 100644
index 00000000000..892aec1d954
--- /dev/null
+++ b/Content.Client/Fax/System/FaxVisualsSystem.cs
@@ -0,0 +1,48 @@
+using Robust.Client.GameObjects;
+using Content.Shared.Fax.Components;
+using Content.Shared.Fax;
+using Robust.Client.Animations;
+
+namespace Content.Client.Fax.System;
+
+///
+/// Visualizer for the fax machine which displays the correct sprite based on the inserted entity.
+///
+public sealed class FaxVisualsSystem : EntitySystem
+{
+ [Dependency] private readonly AnimationPlayerSystem _player = default!;
+ [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnAppearanceChanged);
+ }
+
+ private void OnAppearanceChanged(EntityUid uid, FaxMachineComponent component, ref AppearanceChangeEvent args)
+ {
+ if (args.Sprite == null)
+ return;
+
+ if (_appearance.TryGetData(uid, FaxMachineVisuals.VisualState, out FaxMachineVisualState visuals) && visuals == FaxMachineVisualState.Inserting)
+ {
+ _player.Play(uid, new Animation()
+ {
+ Length = TimeSpan.FromSeconds(2.4),
+ AnimationTracks =
+ {
+ new AnimationTrackSpriteFlick()
+ {
+ LayerKey = FaxMachineVisuals.VisualState,
+ KeyFrames =
+ {
+ new AnimationTrackSpriteFlick.KeyFrame(component.InsertingState, 0f),
+ new AnimationTrackSpriteFlick.KeyFrame("icon", 2.4f),
+ }
+ }
+ }
+ }, "faxecute");
+ }
+ }
+}
diff --git a/Content.Client/Fax/UI/FaxBoundUi.cs b/Content.Client/Fax/UI/FaxBoundUi.cs
index 9b57595d7b4..a95066a3b58 100644
--- a/Content.Client/Fax/UI/FaxBoundUi.cs
+++ b/Content.Client/Fax/UI/FaxBoundUi.cs
@@ -40,7 +40,7 @@ private async void OnFileButtonPressed()
{
if (_dialogIsOpen)
return;
-
+
_dialogIsOpen = true;
var filters = new FileDialogFilters(new FileDialogFilters.Group("txt"));
await using var file = await _fileDialogManager.OpenFile(filters);
@@ -52,8 +52,27 @@ private async void OnFileButtonPressed()
}
using var reader = new StreamReader(file);
+
+ var firstLine = await reader.ReadLineAsync();
+ string? label = null;
var content = await reader.ReadToEndAsync();
- SendMessage(new FaxFileMessage(content[..Math.Min(content.Length, FaxFileMessageValidation.MaxContentSize)], _window.OfficePaper));
+
+ if (firstLine is { })
+ {
+ if (firstLine.StartsWith('#'))
+ {
+ label = firstLine[1..].Trim();
+ }
+ else
+ {
+ content = firstLine + "\n" + content;
+ }
+ }
+
+ SendMessage(new FaxFileMessage(
+ label?[..Math.Min(label.Length, FaxFileMessageValidation.MaxLabelSize)],
+ content[..Math.Min(content.Length, FaxFileMessageValidation.MaxContentSize)],
+ _window.OfficePaper));
}
private void OnSendButtonPressed()
diff --git a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs
index e2b09386dfb..537494933bc 100644
--- a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs
+++ b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs
@@ -4,6 +4,7 @@
using Content.Client.Guidebook.Richtext;
using Content.Client.Message;
using Content.Client.UserInterface.ControlExtensions;
+using Content.Shared.Body.Prototypes;
using Content.Shared.Chemistry.Reaction;
using Content.Shared.Chemistry.Reagent;
using JetBrains.Annotations;
@@ -128,7 +129,7 @@ private void GenerateControl(ReagentPrototype reagent)
var groupLabel = new RichTextLabel();
groupLabel.SetMarkup(Loc.GetString("guidebook-reagent-effects-metabolism-group-rate",
- ("group", group), ("rate", effect.MetabolismRate)));
+ ("group", _prototype.Index(group).LocalizedName), ("rate", effect.MetabolismRate)));
var descriptionLabel = new RichTextLabel
{
Margin = new Thickness(25, 0, 10, 0)
diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs
index 0cb3ad144d7..fcf6d4551fd 100644
--- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs
+++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs
@@ -139,7 +139,7 @@ private void DrawDiagnosticGroups(
var groupTitleText = $"{Loc.GetString(
"health-analyzer-window-damage-group-text",
- ("damageGroup", Loc.GetString("health-analyzer-window-damage-group-" + damageGroupId)),
+ ("damageGroup", _prototypes.Index(damageGroupId).LocalizedName),
("amount", damageAmount)
)}";
@@ -170,7 +170,7 @@ private void DrawDiagnosticGroups(
var damageString = Loc.GetString(
"health-analyzer-window-damage-type-text",
- ("damageType", Loc.GetString("health-analyzer-window-damage-type-" + type)),
+ ("damageType", _prototypes.Index(type).LocalizedName),
("amount", typeAmount)
);
diff --git a/Content.Client/Labels/EntitySystems/HandLabelerSystem.cs b/Content.Client/Labels/EntitySystems/HandLabelerSystem.cs
new file mode 100644
index 00000000000..e956014b2e1
--- /dev/null
+++ b/Content.Client/Labels/EntitySystems/HandLabelerSystem.cs
@@ -0,0 +1,18 @@
+using Content.Client.Labels.UI;
+using Content.Shared.Labels;
+using Content.Shared.Labels.Components;
+using Content.Shared.Labels.EntitySystems;
+
+namespace Content.Client.Labels.EntitySystems;
+
+public sealed class HandLabelerSystem : SharedHandLabelerSystem
+{
+ protected override void UpdateUI(Entity ent)
+ {
+ if (UserInterfaceSystem.TryGetOpenUi(ent.Owner, HandLabelerUiKey.Key, out var bui)
+ && bui is HandLabelerBoundUserInterface cBui)
+ {
+ cBui.Reload();
+ }
+ }
+}
diff --git a/Content.Client/Labels/UI/HandLabelerBoundUserInterface.cs b/Content.Client/Labels/UI/HandLabelerBoundUserInterface.cs
index d393c43f936..555f1ff09e6 100644
--- a/Content.Client/Labels/UI/HandLabelerBoundUserInterface.cs
+++ b/Content.Client/Labels/UI/HandLabelerBoundUserInterface.cs
@@ -1,4 +1,5 @@
using Content.Shared.Labels;
+using Content.Shared.Labels.Components;
using Robust.Client.GameObjects;
namespace Content.Client.Labels.UI
@@ -8,11 +9,14 @@ namespace Content.Client.Labels.UI
///
public sealed class HandLabelerBoundUserInterface : BoundUserInterface
{
+ [Dependency] private readonly IEntityManager _entManager = default!;
+
[ViewVariables]
private HandLabelerWindow? _window;
public HandLabelerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
+ IoCManager.InjectDependencies(this);
}
protected override void Open()
@@ -27,24 +31,25 @@ protected override void Open()
_window.OnClose += Close;
_window.OnLabelChanged += OnLabelChanged;
+ Reload();
}
private void OnLabelChanged(string newLabel)
{
- SendMessage(new HandLabelerLabelChangedMessage(newLabel));
+ // Focus moment
+ if (_entManager.TryGetComponent(Owner, out HandLabelerComponent? labeler) &&
+ labeler.AssignedLabel.Equals(newLabel))
+ return;
+
+ SendPredictedMessage(new HandLabelerLabelChangedMessage(newLabel));
}
- ///
- /// Update the UI state based on server-sent info
- ///
- ///
- protected override void UpdateState(BoundUserInterfaceState state)
+ public void Reload()
{
- base.UpdateState(state);
- if (_window == null || state is not HandLabelerBoundUserInterfaceState cast)
+ if (_window == null || !_entManager.TryGetComponent(Owner, out HandLabelerComponent? component))
return;
- _window.SetCurrentLabel(cast.CurrentLabel);
+ _window.SetCurrentLabel(component.AssignedLabel);
}
protected override void Dispose(bool disposing)
diff --git a/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs b/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs
index 7706c31f85a..6482cdc1cc2 100644
--- a/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs
+++ b/Content.Client/Labels/UI/HandLabelerWindow.xaml.cs
@@ -9,17 +9,40 @@ public sealed partial class HandLabelerWindow : DefaultWindow
{
public event Action? OnLabelChanged;
+ ///
+ /// Is the user currently entering text into the control?
+ ///
+ private bool _focused;
+ // TODO LineEdit Make this a bool on the LineEdit control
+
+ private string _label = string.Empty;
+
public HandLabelerWindow()
{
RobustXamlLoader.Load(this);
- LabelLineEdit.OnTextEntered += e => OnLabelChanged?.Invoke(e.Text);
- LabelLineEdit.OnFocusExit += e => OnLabelChanged?.Invoke(e.Text);
+ LabelLineEdit.OnTextEntered += e =>
+ {
+ _label = e.Text;
+ OnLabelChanged?.Invoke(_label);
+ };
+
+ LabelLineEdit.OnFocusEnter += _ => _focused = true;
+ LabelLineEdit.OnFocusExit += _ =>
+ {
+ _focused = false;
+ LabelLineEdit.Text = _label;
+ };
}
public void SetCurrentLabel(string label)
{
- LabelLineEdit.Text = label;
+ if (label == _label)
+ return;
+
+ _label = label;
+ if (!_focused)
+ LabelLineEdit.Text = label;
}
}
}
diff --git a/Content.Client/Lathe/UI/LatheMenu.xaml.cs b/Content.Client/Lathe/UI/LatheMenu.xaml.cs
index ca8d2561270..9e15f8239e5 100644
--- a/Content.Client/Lathe/UI/LatheMenu.xaml.cs
+++ b/Content.Client/Lathe/UI/LatheMenu.xaml.cs
@@ -10,6 +10,8 @@
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
+using Robust.Client.ResourceManagement;
+using Robust.Client.Graphics;
using Robust.Shared.Prototypes;
namespace Content.Client.Lathe.UI;
@@ -19,6 +21,8 @@ public sealed partial class LatheMenu : DefaultWindow
{
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IResourceCache _resources = default!;
+
private EntityUid _owner;
private readonly SpriteSystem _spriteSystem;
private readonly LatheSystem _lathe;
@@ -104,12 +108,21 @@ public void PopulateRecipes()
RecipeList.Children.Clear();
foreach (var prototype in sortedRecipesToShow)
{
- var icon = prototype.Icon == null
- ? _spriteSystem.GetPrototypeIcon(prototype.Result).Default
- : _spriteSystem.Frame0(prototype.Icon);
+ List textures;
+ if (_prototypeManager.TryIndex(prototype.Result, out EntityPrototype? entityProto) && entityProto != null)
+ {
+ textures = SpriteComponent.GetPrototypeTextures(entityProto, _resources).Select(o => o.Default).ToList();
+ }
+ else
+ {
+ textures = prototype.Icon == null
+ ? new List { _spriteSystem.GetPrototypeIcon(prototype.Result).Default }
+ : new List { _spriteSystem.Frame0(prototype.Icon) };
+ }
+
var canProduce = _lathe.CanProduce(_owner, prototype, quantity);
- var control = new RecipeControl(prototype, () => GenerateTooltipText(prototype), canProduce, icon);
+ var control = new RecipeControl(prototype, () => GenerateTooltipText(prototype), canProduce, textures);
control.OnButtonPressed += s =>
{
if (!int.TryParse(AmountLineEdit.Text, out var amount) || amount <= 0)
diff --git a/Content.Client/Lathe/UI/RecipeControl.xaml b/Content.Client/Lathe/UI/RecipeControl.xaml
index 2e02c8a6147..d1371a026a2 100644
--- a/Content.Client/Lathe/UI/RecipeControl.xaml
+++ b/Content.Client/Lathe/UI/RecipeControl.xaml
@@ -5,11 +5,15 @@
Margin="0"
StyleClasses="ButtonSquare">
-
+ CanShrink="true"
+ />
diff --git a/Content.Client/Lathe/UI/RecipeControl.xaml.cs b/Content.Client/Lathe/UI/RecipeControl.xaml.cs
index bf85ff7d938..47b6b5932c4 100644
--- a/Content.Client/Lathe/UI/RecipeControl.xaml.cs
+++ b/Content.Client/Lathe/UI/RecipeControl.xaml.cs
@@ -2,8 +2,8 @@
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
-using Robust.Shared.Graphics;
namespace Content.Client.Lathe.UI;
@@ -13,12 +13,12 @@ public sealed partial class RecipeControl : Control
public Action? OnButtonPressed;
public Func TooltipTextSupplier;
- public RecipeControl(LatheRecipePrototype recipe, Func tooltipTextSupplier, bool canProduce, Texture? texture = null)
+ public RecipeControl(LatheRecipePrototype recipe, Func tooltipTextSupplier, bool canProduce, List textures)
{
RobustXamlLoader.Load(this);
RecipeName.Text = recipe.Name;
- RecipeTexture.Texture = texture;
+ RecipeTextures.Textures = textures;
Button.Disabled = !canProduce;
TooltipTextSupplier = tooltipTextSupplier;
Button.TooltipSupplier = SupplyTooltip;
diff --git a/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs
index c29a69a5b7b..fa33c40fe27 100644
--- a/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs
+++ b/Content.Client/Preferences/UI/HumanoidProfileEditor.xaml.cs
@@ -711,6 +711,20 @@ private void OnSkinColorOnValueChanged()
var color = SkinColor.TintedHues(_rgbSkinColorSelector.Color);
+ CMarkings.CurrentSkinColor = color;
+ Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(color));
+ break;
+ }
+ case HumanoidSkinColor.VoxFeathers:
+ {
+ if (!_rgbSkinColorContainer.Visible)
+ {
+ _skinColor.Visible = false;
+ _rgbSkinColorContainer.Visible = true;
+ }
+
+ var color = SkinColor.ClosestVoxColor(_rgbSkinColorSelector.Color);
+
CMarkings.CurrentSkinColor = color;
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(color));
break;
@@ -931,6 +945,18 @@ private void UpdateSkinColor()
_rgbSkinColorSelector.Color = Profile.Appearance.SkinColor;
break;
}
+ case HumanoidSkinColor.VoxFeathers:
+ {
+ if (!_rgbSkinColorContainer.Visible)
+ {
+ _skinColor.Visible = false;
+ _rgbSkinColorContainer.Visible = true;
+ }
+
+ _rgbSkinColorSelector.Color = SkinColor.ClosestVoxColor(Profile.Appearance.SkinColor);
+
+ break;
+ }
}
}
diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
index 8191bec3c34..3661a0c1506 100644
--- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
+++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs
@@ -551,7 +551,7 @@ private void UpdateChannelPermissions()
}
// only admins can see / filter asay
- if (_admin.HasFlag(AdminFlags.Admin) || _admin.HasFlag(AdminFlags.Adminhelp))
+ if (_admin.HasFlag(AdminFlags.Adminchat))
{
FilterableChannels |= ChatChannel.Admin;
FilterableChannels |= ChatChannel.AdminAlert;
diff --git a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs
index 59cf34944c8..2890bb3dbf7 100644
--- a/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs
+++ b/Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs
@@ -78,17 +78,44 @@ public void SetButtonsDisabled(AnalysisConsoleUpdateState state)
else
UpBiasButton.Pressed = true;
- var disabled = !state.ServerConnected || !state.CanScan || state.PointAmount <= 0;
-
- ExtractButton.Disabled = disabled;
+ ExtractButton.Disabled = false;
+ if (!state.ServerConnected)
+ {
+ ExtractButton.Disabled = true;
+ ExtractButton.ToolTip = Loc.GetString("analysis-console-no-server-connected");
+ }
+ else if (!state.CanScan)
+ {
+ ExtractButton.Disabled = true;
+
+ // CanScan can be false if either there's no analyzer connected or if there's
+ // no entity on the scanner. The `Information` text will always tell the user
+ // of the former case, but in the latter, it'll only show a message if a scan
+ // has never been performed, so add a tooltip to indicate that the artifact
+ // is gone.
+ if (state.AnalyzerConnected)
+ {
+ ExtractButton.ToolTip = Loc.GetString("analysis-console-no-artifact-placed");
+ }
+ else
+ {
+ ExtractButton.ToolTip = null;
+ }
+ }
+ else if (state.PointAmount <= 0)
+ {
+ ExtractButton.Disabled = true;
+ ExtractButton.ToolTip = Loc.GetString("analysis-console-no-points-to-extract");
+ }
- if (disabled)
+ if (ExtractButton.Disabled)
{
ExtractButton.RemoveStyleClass("ButtonColorGreen");
}
else
{
ExtractButton.AddStyleClass("ButtonColorGreen");
+ ExtractButton.ToolTip = null;
}
}
private void UpdateArtifactIcon(EntityUid? uid)
diff --git a/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs b/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs
index 16744d83dce..c40b8ed286f 100644
--- a/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs
+++ b/Content.IntegrationTests/Tests/Damageable/DamageableTest.cs
@@ -19,36 +19,45 @@ public sealed class DamageableTest
# Define some damage groups
- type: damageType
id: TestDamage1
+ name: damage-type-blunt
- type: damageType
id: TestDamage2a
+ name: damage-type-blunt
- type: damageType
id: TestDamage2b
+ name: damage-type-blunt
- type: damageType
id: TestDamage3a
+ name: damage-type-blunt
- type: damageType
id: TestDamage3b
+ name: damage-type-blunt
- type: damageType
id: TestDamage3c
+ name: damage-type-blunt
# Define damage Groups with 1,2,3 damage types
- type: damageGroup
id: TestGroup1
+ name: damage-group-brute
damageTypes:
- TestDamage1
- type: damageGroup
id: TestGroup2
+ name: damage-group-brute
damageTypes:
- TestDamage2a
- TestDamage2b
- type: damageGroup
id: TestGroup3
+ name: damage-group-brute
damageTypes:
- TestDamage3a
- TestDamage3b
diff --git a/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs b/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs
index 12292f4652d..7ff92423984 100644
--- a/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs
+++ b/Content.IntegrationTests/Tests/Destructible/DestructibleTestPrototypes.cs
@@ -12,24 +12,31 @@ public static class DestructibleTestPrototypes
public const string DamagePrototypes = $@"
- type: damageType
id: TestBlunt
+ name: damage-type-blunt
- type: damageType
id: TestSlash
+ name: damage-type-slash
- type: damageType
id: TestPiercing
+ name: damage-type-piercing
- type: damageType
id: TestHeat
+ name: damage-type-heat
- type: damageType
id: TestShock
+ name: damage-type-shock
- type: damageType
id: TestCold
+ name: damage-type-cold
- type: damageGroup
id: TestBrute
+ name: damage-group-brute
damageTypes:
- TestBlunt
- TestSlash
@@ -37,6 +44,7 @@ public static class DestructibleTestPrototypes
- type: damageGroup
id: TestBurn
+ name: damage-group-burn
damageTypes:
- TestHeat
- TestShock
diff --git a/Content.IntegrationTests/Tests/GameRules/FailAndStartPresetTest.cs b/Content.IntegrationTests/Tests/GameRules/FailAndStartPresetTest.cs
new file mode 100644
index 00000000000..1fed226beee
--- /dev/null
+++ b/Content.IntegrationTests/Tests/GameRules/FailAndStartPresetTest.cs
@@ -0,0 +1,152 @@
+#nullable enable
+using Content.Server.GameTicking;
+using Content.Server.GameTicking.Components;
+using Content.Server.GameTicking.Presets;
+using Content.Shared.CCVar;
+using Content.Shared.GameTicking;
+using Robust.Shared.GameObjects;
+
+namespace Content.IntegrationTests.Tests.GameRules;
+
+[TestFixture]
+public sealed class FailAndStartPresetTest
+{
+ [TestPrototypes]
+ private const string Prototypes = @"
+- type: gamePreset
+ id: TestPreset
+ alias:
+ - nukeops
+ name: Test Preset
+ description: """"
+ showInVote: false
+ rules:
+ - TestRule
+
+- type: gamePreset
+ id: TestPresetTenPlayers
+ alias:
+ - nukeops
+ name: Test Preset 10 players
+ description: """"
+ showInVote: false
+ rules:
+ - TestRuleTenPlayers
+
+- type: entity
+ id: TestRule
+ parent: BaseGameRule
+ noSpawn: true
+ components:
+ - type: GameRule
+ minPlayers: 0
+ - type: TestRule
+
+- type: entity
+ id: TestRuleTenPlayers
+ parent: BaseGameRule
+ noSpawn: true
+ components:
+ - type: GameRule
+ minPlayers: 10
+ - type: TestRule
+";
+
+ ///
+ /// Test that a nuke ops gamemode can start after failing to start once.
+ ///
+ [Test]
+ public async Task FailAndStartTest()
+ {
+ await using var pair = await PoolManager.GetServerClient(new PoolSettings
+ {
+ Dirty = true,
+ DummyTicker = false,
+ Connected = true,
+ InLobby = true
+ });
+
+ var server = pair.Server;
+ var client = pair.Client;
+ var entMan = server.EntMan;
+ var ticker = server.System();
+ server.System().Run = true;
+
+ Assert.That(server.CfgMan.GetCVar(CCVars.GridFill), Is.False);
+ Assert.That(server.CfgMan.GetCVar(CCVars.GameLobbyFallbackEnabled), Is.True);
+ Assert.That(server.CfgMan.GetCVar(CCVars.GameLobbyDefaultPreset), Is.EqualTo("secret"));
+ server.CfgMan.SetCVar(CCVars.GridFill, true);
+ server.CfgMan.SetCVar(CCVars.GameLobbyFallbackEnabled, false);
+ server.CfgMan.SetCVar(CCVars.GameLobbyDefaultPreset, "TestPreset");
+
+ // Initially in the lobby
+ Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
+ Assert.That(client.AttachedEntity, Is.Null);
+ Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.NotReadyToPlay));
+
+ // Try to start nukeops without readying up
+ await pair.WaitCommand("setgamepreset TestPresetTenPlayers");
+ await pair.WaitCommand("startround");
+ await pair.RunTicksSync(10);
+
+ // Game should not have started
+ Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
+ Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.NotReadyToPlay));
+ Assert.That(!client.EntMan.EntityExists(client.AttachedEntity));
+ var player = pair.Player!.AttachedEntity;
+ Assert.That(!entMan.EntityExists(player));
+
+ // Ready up and start nukeops
+ await pair.WaitClientCommand("toggleready True");
+ Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.ReadyToPlay));
+ await pair.WaitCommand("setgamepreset TestPreset");
+ await pair.WaitCommand("startround");
+ await pair.RunTicksSync(10);
+
+ // Game should have started
+ Assert.That(ticker.RunLevel, Is.EqualTo(GameRunLevel.InRound));
+ Assert.That(ticker.PlayerGameStatuses[client.User!.Value], Is.EqualTo(PlayerGameStatus.JoinedGame));
+ Assert.That(client.EntMan.EntityExists(client.AttachedEntity));
+ player = pair.Player!.AttachedEntity!.Value;
+ Assert.That(entMan.EntityExists(player));
+
+ ticker.SetGamePreset((GamePresetPrototype?)null);
+ server.CfgMan.SetCVar(CCVars.GridFill, false);
+ server.CfgMan.SetCVar(CCVars.GameLobbyFallbackEnabled, true);
+ server.CfgMan.SetCVar(CCVars.GameLobbyDefaultPreset, "secret");
+ server.System().Run = false;
+ await pair.CleanReturnAsync();
+ }
+}
+
+public sealed class TestRuleSystem : EntitySystem
+{
+ public bool Run;
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnRoundStartAttempt);
+ }
+
+ private void OnRoundStartAttempt(RoundStartAttemptEvent args)
+ {
+ if (!Run)
+ return;
+
+ if (args.Forced || args.Cancelled)
+ return;
+
+ var query = EntityQueryEnumerator();
+ while (query.MoveNext(out _, out _, out var gameRule))
+ {
+ var minPlayers = gameRule.MinPlayers;
+ if (args.Players.Length >= minPlayers)
+ continue;
+
+ args.Cancel();
+ }
+ }
+}
+
+[RegisterComponent]
+public sealed partial class TestRuleComponent : Component;
diff --git a/Content.Server/Access/Systems/AgentIDCardSystem.cs b/Content.Server/Access/Systems/AgentIDCardSystem.cs
index 2c4425ec105..d5e9dc357dd 100644
--- a/Content.Server/Access/Systems/AgentIDCardSystem.cs
+++ b/Content.Server/Access/Systems/AgentIDCardSystem.cs
@@ -67,7 +67,7 @@ private void AfterUIOpen(EntityUid uid, AgentIDCardComponent component, AfterAct
if (!TryComp(uid, out var idCard))
return;
- var state = new AgentIDCardBoundUserInterfaceState(idCard.FullName ?? "", idCard.JobTitle ?? "", component.Icons);
+ var state = new AgentIDCardBoundUserInterfaceState(idCard.FullName ?? "", idCard.JobTitle ?? "", idCard.JobIcon ?? "", component.Icons);
_uiSystem.SetUiState(uid, AgentIDCardUiKey.Key, state);
}
@@ -94,7 +94,7 @@ private void OnJobIconChanged(EntityUid uid, AgentIDCardComponent comp, AgentIDC
return;
}
- if (!_prototypeManager.TryIndex(args.JobIcon, out var jobIcon))
+ if (!_prototypeManager.TryIndex(args.JobIconId, out var jobIcon))
{
return;
}
diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs
index b104ab2cf37..84cf6bc421f 100644
--- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs
+++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs
@@ -18,7 +18,6 @@
using Content.Server.Storage.EntitySystems;
using Content.Server.Tabletop;
using Content.Server.Tabletop.Components;
-using Content.Server.Terminator.Systems;
using Content.Shared.Administration;
using Content.Shared.Administration.Components;
using Content.Shared.Body.Components;
@@ -31,7 +30,6 @@
using Content.Shared.Electrocution;
using Content.Shared.Interaction.Components;
using Content.Shared.Inventory;
-using Content.Shared.Mind.Components;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
@@ -74,7 +72,6 @@ public sealed partial class AdminVerbSystem
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly TabletopSystem _tabletopSystem = default!;
- [Dependency] private readonly TerminatorSystem _terminator = default!;
[Dependency] private readonly VomitSystem _vomitSystem = default!;
[Dependency] private readonly WeldableSystem _weldableSystem = default!;
[Dependency] private readonly SharedContentEyeSystem _eyeSystem = default!;
@@ -866,27 +863,5 @@ private void AddSmiteVerbs(GetVerbsEvent args)
Impact = LogImpact.Extreme,
};
args.Verbs.Add(superBonk);
-
- Verb terminate = new()
- {
- Text = "Terminate",
- Category = VerbCategory.Smite,
- Icon = new SpriteSpecifier.Rsi(new ("Mobs/Species/Terminator/parts.rsi"), "skull_icon"),
- Act = () =>
- {
- if (!TryComp(args.Target, out var mindContainer) || mindContainer.Mind == null)
- return;
-
- var coords = Transform(args.Target).Coordinates;
- var mindId = mindContainer.Mind.Value;
- _terminator.CreateSpawner(coords, mindId);
-
- _popupSystem.PopupEntity(Loc.GetString("admin-smite-terminate-prompt"), args.Target,
- args.Target, PopupType.LargeCaution);
- },
- Impact = LogImpact.Extreme,
- Message = Loc.GetString("admin-smite-terminate-description")
- };
- args.Verbs.Add(terminate);
}
}
diff --git a/Content.Server/Chat/Commands/AdminChatCommand.cs b/Content.Server/Chat/Commands/AdminChatCommand.cs
index 11e85955c01..1a7ae050b66 100644
--- a/Content.Server/Chat/Commands/AdminChatCommand.cs
+++ b/Content.Server/Chat/Commands/AdminChatCommand.cs
@@ -5,8 +5,7 @@
namespace Content.Server.Chat.Commands
{
- [AdminCommand(AdminFlags.Admin)]
- [AdminCommand(AdminFlags.Adminhelp)]
+ [AdminCommand(AdminFlags.Adminchat)]
internal sealed class AdminChatCommand : IConsoleCommand
{
public string Command => "asay";
diff --git a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs
index 94a3fe21861..c375d97b8c3 100644
--- a/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs
+++ b/Content.Server/Chemistry/EntitySystems/TransformableContainerSystem.cs
@@ -20,7 +20,7 @@ public override void Initialize()
SubscribeLocalEvent(OnSolutionChange);
}
- private void OnMapInit(Entity entity, ref MapInitEvent args)
+ private void OnMapInit(Entity entity, ref MapInitEvent args)
{
var meta = MetaData(entity.Owner);
if (string.IsNullOrEmpty(entity.Comp.InitialName))
diff --git a/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs b/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs
index 3b7bffb9cff..4ae13b6a6e4 100644
--- a/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs
+++ b/Content.Server/Chemistry/ReagentEffectConditions/OrganType.cs
@@ -1,4 +1,4 @@
-using Content.Server.Body.Components;
+using Content.Server.Body.Components;
using Content.Shared.Body.Prototypes;
using Content.Shared.Chemistry.Reagent;
using Robust.Shared.Prototypes;
@@ -35,7 +35,7 @@ public override bool Condition(ReagentEffectArgs args)
public override string GuidebookExplanation(IPrototypeManager prototype)
{
return Loc.GetString("reagent-effect-condition-guidebook-organ-type",
- ("name", prototype.Index(Type).Name),
+ ("name", prototype.Index(Type).LocalizedName),
("shouldhave", ShouldHave));
}
}
diff --git a/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs b/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs
index 664569d7be4..6ac1549ab00 100644
--- a/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs
+++ b/Content.Server/Chemistry/ReagentEffectConditions/ReagentThreshold.cs
@@ -1,4 +1,4 @@
-using Content.Shared.Chemistry.Reagent;
+using Content.Shared.Chemistry.Reagent;
using Content.Shared.FixedPoint;
using Robust.Shared.Prototypes;
@@ -43,7 +43,7 @@ public override string GuidebookExplanation(IPrototypeManager prototype)
prototype.TryIndex(Reagent, out reagentProto);
return Loc.GetString("reagent-effect-condition-guidebook-reagent-threshold",
- ("reagent", reagentProto?.LocalizedName ?? "this reagent"),
+ ("reagent", reagentProto?.LocalizedName ?? Loc.GetString("reagent-effect-condition-guidebook-this-reagent")),
("max", Max == FixedPoint2.MaxValue ? (float) int.MaxValue : Max.Float()),
("min", Min.Float()));
}
diff --git a/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs b/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs
index e70626f1d3e..16d69edd9aa 100644
--- a/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs
+++ b/Content.Server/Chemistry/ReagentEffects/AdjustReagent.cs
@@ -1,4 +1,4 @@
-using Content.Shared.Body.Prototypes;
+using Content.Shared.Body.Prototypes;
using Content.Shared.Chemistry.Reagent;
using Content.Shared.FixedPoint;
using JetBrains.Annotations;
@@ -74,7 +74,7 @@ public override void Effect(ReagentEffectArgs args)
return Loc.GetString("reagent-effect-guidebook-adjust-reagent-group",
("chance", Probability),
("deltasign", MathF.Sign(Amount.Float())),
- ("group", groupProto.ID),
+ ("group", groupProto.LocalizedName),
("amount", MathF.Abs(Amount.Float())));
}
diff --git a/Content.Server/Chemistry/ReagentEffects/HealthChange.cs b/Content.Server/Chemistry/ReagentEffects/HealthChange.cs
index 2a6181c7f35..24880cfd371 100644
--- a/Content.Server/Chemistry/ReagentEffects/HealthChange.cs
+++ b/Content.Server/Chemistry/ReagentEffects/HealthChange.cs
@@ -74,7 +74,7 @@ protected override string ReagentEffectGuidebookText(IPrototypeManager prototype
damages.Add(
Loc.GetString("health-change-display",
- ("kind", group.ID),
+ ("kind", group.LocalizedName),
("amount", MathF.Abs(amount.Float())),
("deltasign", sign)
));
@@ -96,7 +96,7 @@ protected override string ReagentEffectGuidebookText(IPrototypeManager prototype
damages.Add(
Loc.GetString("health-change-display",
- ("kind", kind),
+ ("kind", prototype.Index(kind).LocalizedName),
("amount", MathF.Abs(amount.Float())),
("deltasign", sign)
));
diff --git a/Content.Server/Construction/Conditions/Locked.cs b/Content.Server/Construction/Conditions/Locked.cs
index fde704b161b..0b8c9118dc7 100644
--- a/Content.Server/Construction/Conditions/Locked.cs
+++ b/Content.Server/Construction/Conditions/Locked.cs
@@ -15,7 +15,7 @@ public sealed partial class Locked : IGraphCondition
public bool Condition(EntityUid uid, IEntityManager entityManager)
{
if (!entityManager.TryGetComponent(uid, out LockComponent? lockcomp))
- return false;
+ return true;
return lockcomp.Locked == IsLocked;
}
@@ -25,7 +25,8 @@ public bool DoExamine(ExaminedEvent args)
var entMan = IoCManager.Resolve();
var entity = args.Examined;
- if (!entMan.TryGetComponent(entity, out LockComponent? lockcomp)) return false;
+ if (!entMan.TryGetComponent(entity, out LockComponent? lockcomp))
+ return true;
switch (IsLocked)
{
diff --git a/Content.Server/Construction/ConstructionSystem.Guided.cs b/Content.Server/Construction/ConstructionSystem.Guided.cs
index fe7f9152c0b..e096bc02c31 100644
--- a/Content.Server/Construction/ConstructionSystem.Guided.cs
+++ b/Content.Server/Construction/ConstructionSystem.Guided.cs
@@ -41,6 +41,18 @@ private void AddDeconstructVerb(EntityUid uid, ConstructionComponent component,
component.Node == component.DeconstructionNode)
return;
+ if (!_prototypeManager.TryIndex(component.Graph, out ConstructionGraphPrototype? graph))
+ return;
+
+ if (component.DeconstructionNode == null)
+ return;
+
+ if (GetCurrentNode(uid, component) is not {} currentNode)
+ return;
+
+ if (graph.Path(currentNode.Name, component.DeconstructionNode) is not {} path || path.Length == 0)
+ return;
+
Verb verb = new();
//verb.Category = VerbCategories.Construction;
//TODO VERBS add more construction verbs? Until then, removing construction category
diff --git a/Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs b/Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs
index 515c884fa06..e6f429228c2 100644
--- a/Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs
+++ b/Content.Server/Corvax/StationGoal/StationGoalPaperSystem.cs
@@ -1,5 +1,6 @@
using System.Linq;
using Content.Server.Fax;
+using Content.Shared.Fax.Components;
using Content.Shared.GameTicking;
using Content.Shared.Paper;
using Robust.Shared.Prototypes;
@@ -40,22 +41,24 @@ public bool SendRandomGoal()
/// True if at least one fax received paper
public bool SendStationGoal(StationGoalPrototype goal)
{
- var faxes = EntityManager.EntityQuery();
+ var faxes = EntityQueryEnumerator();
var wasSent = false;
- foreach (var fax in faxes)
+ while (faxes.MoveNext(out var owner, out var fax))
{
- if (!fax.ReceiveStationGoal) continue;
+ if (!fax.ReceiveStationGoal)
+ continue;
var printout = new FaxPrintout(
Loc.GetString(goal.Text),
Loc.GetString("station-goal-fax-paper-name"),
null,
+ null,
"paper_stamp-centcom",
new List
{
new() { StampedName = Loc.GetString("stamp-component-stamped-name-centcom"), StampedColor = Color.FromHex("#006600") },
});
- _faxSystem.Receive(fax.Owner, printout, null, fax);
+ _faxSystem.Receive(owner, printout, null, fax);
wasSent = true;
}
diff --git a/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs
index 59589c19aa7..1d7ce24f600 100644
--- a/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs
+++ b/Content.Server/Destructible/Thresholds/Behaviors/PopupBehavior.cs
@@ -1,6 +1,6 @@
using Content.Shared.Popups;
-namespace Content.Server.Destructible.Thresholds.Behaviors;
+namespace Content.Server.Destructible.Thresholds.Behaviors;
///
/// Shows a popup for everyone.
diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs
index 21e152c1035..416e0744b54 100644
--- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs
+++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs
@@ -143,6 +143,9 @@ private void AddClimbInsideVerb(EntityUid uid, SharedDisposalUnitComponent compo
return;
}
+ if (!CanInsert(uid, component, args.User))
+ return;
+
// Add verb to climb inside of the unit,
Verb verb = new()
{
diff --git a/Content.Server/Fax/AdminUI/AdminFaxEui.cs b/Content.Server/Fax/AdminUI/AdminFaxEui.cs
index c8be6618e45..452fc593d95 100644
--- a/Content.Server/Fax/AdminUI/AdminFaxEui.cs
+++ b/Content.Server/Fax/AdminUI/AdminFaxEui.cs
@@ -1,6 +1,7 @@
using Content.Server.DeviceNetwork.Components;
using Content.Server.EUI;
using Content.Shared.Eui;
+using Content.Shared.Fax.Components;
using Content.Shared.Fax;
using Content.Shared.Follower;
using Content.Shared.Ghost;
@@ -54,7 +55,7 @@ public override void HandleMessage(EuiMessageBase msg)
}
case AdminFaxEuiMsg.Send sendData:
{
- var printout = new FaxPrintout(sendData.Content, sendData.Title, null, sendData.StampState,
+ var printout = new FaxPrintout(sendData.Content, sendData.Title, null, null, sendData.StampState,
new() { new StampDisplayInfo { StampedName = sendData.From, StampedColor = sendData.StampColor } });
_faxSystem.Receive(_entityManager.GetEntity(sendData.Target), printout);
break;
diff --git a/Content.Server/Fax/FaxConstants.cs b/Content.Server/Fax/FaxConstants.cs
index 102510bd46e..24ed7cbcf32 100644
--- a/Content.Server/Fax/FaxConstants.cs
+++ b/Content.Server/Fax/FaxConstants.cs
@@ -23,6 +23,7 @@ public static class FaxConstants
public const string FaxNameData = "fax_data_name";
public const string FaxPaperNameData = "fax_data_title";
+ public const string FaxPaperLabelData = "fax_data_label";
public const string FaxPaperPrototypeData = "fax_data_prototype";
public const string FaxPaperContentData = "fax_data_content";
public const string FaxPaperStampStateData = "fax_data_stamp_state";
diff --git a/Content.Server/Fax/FaxSystem.cs b/Content.Server/Fax/FaxSystem.cs
index f492595444a..e86dbca4a13 100644
--- a/Content.Server/Fax/FaxSystem.cs
+++ b/Content.Server/Fax/FaxSystem.cs
@@ -4,6 +4,7 @@
using Content.Server.DeviceNetwork;
using Content.Server.DeviceNetwork.Components;
using Content.Server.DeviceNetwork.Systems;
+using Content.Server.Labels;
using Content.Server.Paper;
using Content.Server.Popups;
using Content.Server.Power.Components;
@@ -16,7 +17,11 @@
using Content.Shared.Emag.Components;
using Content.Shared.Emag.Systems;
using Content.Shared.Fax;
+using Content.Shared.Fax.Systems;
+using Content.Shared.Fax.Components;
using Content.Shared.Interaction;
+using Content.Shared.Labels.Components;
+using Content.Shared.Mobs.Components;
using Content.Shared.Paper;
using Robust.Server.GameObjects;
using Robust.Shared.Audio;
@@ -36,12 +41,14 @@ public sealed class FaxSystem : EntitySystem
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!;
[Dependency] private readonly PaperSystem _paperSystem = default!;
+ [Dependency] private readonly LabelSystem _labelSystem = default!;
[Dependency] private readonly SharedAudioSystem _audioSystem = default!;
[Dependency] private readonly ToolSystem _toolSystem = default!;
[Dependency] private readonly QuickDialogSystem _quickDialog = default!;
[Dependency] private readonly UserInterfaceSystem _userInterface = default!;
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!;
+ [Dependency] private readonly FaxecuteSystem _faxecute = default!;
private const string PaperSlotId = "Paper";
@@ -236,7 +243,7 @@ private void OnInteractUsing(EntityUid uid, FaxMachineComponent component, Inter
}
_adminLogger.Add(LogType.Action, LogImpact.Low,
- $"{ToPrettyString(args.User):user} renamed {ToPrettyString(uid)} from \"{component.FaxName}\" to \"{newName}\"");
+ $"{ToPrettyString(args.User):user} renamed {ToPrettyString(uid):tool} from \"{component.FaxName}\" to \"{newName}\"");
component.FaxName = newName;
_popupSystem.PopupEntity(Loc.GetString("fax-machine-popup-name-set"), uid);
UpdateUserInterface(uid, component);
@@ -288,11 +295,12 @@ private void OnPacketReceived(EntityUid uid, FaxMachineComponent component, Devi
!args.Data.TryGetValue(FaxConstants.FaxPaperContentData, out string? content))
return;
+ args.Data.TryGetValue(FaxConstants.FaxPaperLabelData, out string? label);
args.Data.TryGetValue(FaxConstants.FaxPaperStampStateData, out string? stampState);
args.Data.TryGetValue(FaxConstants.FaxPaperStampedByData, out List? stampedBy);
args.Data.TryGetValue(FaxConstants.FaxPaperPrototypeData, out string? prototypeId);
- var printout = new FaxPrintout(content, name, prototypeId, stampState, stampedBy);
+ var printout = new FaxPrintout(content, name, label, prototypeId, stampState, stampedBy);
Receive(uid, printout, args.SenderAddress);
break;
@@ -307,18 +315,25 @@ private void OnToggleInterface(EntityUid uid, FaxMachineComponent component, Aft
private void OnFileButtonPressed(EntityUid uid, FaxMachineComponent component, FaxFileMessage args)
{
+ args.Label = args.Label?[..Math.Min(args.Label.Length, FaxFileMessageValidation.MaxLabelSize)];
args.Content = args.Content[..Math.Min(args.Content.Length, FaxFileMessageValidation.MaxContentSize)];
PrintFile(uid, component, args);
}
private void OnCopyButtonPressed(EntityUid uid, FaxMachineComponent component, FaxCopyMessage args)
{
- Copy(uid, component, args);
+ if (HasComp(component.PaperSlot.Item))
+ _faxecute.Faxecute(uid, component); /// when button pressed it will hurt the mob.
+ else
+ Copy(uid, component, args);
}
private void OnSendButtonPressed(EntityUid uid, FaxMachineComponent component, FaxSendMessage args)
{
- Send(uid, component, args.Actor);
+ if (HasComp(component.PaperSlot.Item))
+ _faxecute.Faxecute(uid, component); /// when button pressed it will hurt the mob.
+ else
+ Send(uid, component, args);
}
private void OnRefreshButtonPressed(EntityUid uid, FaxMachineComponent component, FaxRefreshMessage args)
@@ -336,14 +351,20 @@ private void UpdateAppearance(EntityUid uid, FaxMachineComponent? component = nu
if (!Resolve(uid, ref component))
return;
+ if (TryComp(component.PaperSlot.Item, out var faxable))
+ component.InsertingState = faxable.InsertingState;
+
+
if (component.InsertingTimeRemaining > 0)
+ {
_appearanceSystem.SetData(uid, FaxMachineVisuals.VisualState, FaxMachineVisualState.Inserting);
+ Dirty(uid, component);
+ }
else if (component.PrintingTimeRemaining > 0)
_appearanceSystem.SetData(uid, FaxMachineVisuals.VisualState, FaxMachineVisualState.Printing);
else
_appearanceSystem.SetData(uid, FaxMachineVisuals.VisualState, FaxMachineVisualState.Normal);
}
-
private void UpdateUserInterface(EntityUid uid, FaxMachineComponent? component = null)
{
if (!Resolve(uid, ref component))
@@ -409,16 +430,20 @@ public void PrintFile(EntityUid uid, FaxMachineComponent component, FaxFileMessa
else
prototype = DefaultPaperPrototypeId;
- var name = Loc.GetString("fax-machine-printed-paper-name");
+ var name = Loc.GetString("fax-machine-printed-paper-name");
- var printout = new FaxPrintout(args.Content, name, prototype);
+ var printout = new FaxPrintout(args.Content, name, args.Label, prototype);
component.PrintingQueue.Enqueue(printout);
component.SendTimeoutRemaining += component.SendTimeout;
UpdateUserInterface(uid, component);
+ // Unfortunately, since a paper entity does not yet exist, we have to emulate what LabelSystem will do.
+ var nameWithLabel = (args.Label is { } label) ? $"{name} ({label})" : name;
_adminLogger.Add(LogType.Action, LogImpact.Low,
- $"{ToPrettyString(args.Actor):actor} added print job to {ToPrettyString(uid):tool} with text: {args.Content}");
+ $"{ToPrettyString(args.Actor):actor} " +
+ $"added print job to \"{component.FaxName}\" {ToPrettyString(uid):tool} " +
+ $"of {nameWithLabel}: {args.Content}");
}
///
@@ -438,9 +463,12 @@ public void Copy(EntityUid uid, FaxMachineComponent? component, FaxCopyMessage a
!TryComp(sendEntity, out var paper))
return;
+ TryComp(sendEntity, out var labelComponent);
+
// TODO: See comment in 'Send()' about not being able to copy whole entities
var printout = new FaxPrintout(paper.Content,
- metadata.EntityName,
+ labelComponent?.OriginalName ?? metadata.EntityName,
+ labelComponent?.CurrentLabel,
metadata.EntityPrototype?.ID ?? DefaultPaperPrototypeId,
paper.StampState,
paper.StampedBy);
@@ -454,14 +482,16 @@ public void Copy(EntityUid uid, FaxMachineComponent? component, FaxCopyMessage a
UpdateUserInterface(uid, component);
_adminLogger.Add(LogType.Action, LogImpact.Low,
- $"{ToPrettyString(args.Actor):actor} added copy job to {ToPrettyString(uid):tool} with text: {ToPrettyString(component.PaperSlot.Item):subject}");
+ $"{ToPrettyString(args.Actor):actor} " +
+ $"added copy job to \"{component.FaxName}\" {ToPrettyString(uid):tool} " +
+ $"of {ToPrettyString(sendEntity):subject}: {printout.Content}");
}
///
/// Sends message to addressee if paper is set and a known fax is selected
/// A timeout is set after sending, which is shared by the copy button.
///
- public void Send(EntityUid uid, FaxMachineComponent? component = null, EntityUid? sender = null)
+ public void Send(EntityUid uid, FaxMachineComponent? component, FaxSendMessage args)
{
if (!Resolve(uid, ref component))
return;
@@ -477,13 +507,16 @@ public void Send(EntityUid uid, FaxMachineComponent? component = null, EntityUid
return;
if (!TryComp(sendEntity, out var metadata) ||
- !TryComp(sendEntity, out var paper))
+ !TryComp(sendEntity, out var paper))
return;
+ TryComp(sendEntity, out var labelComponent);
+
var payload = new NetworkPayload()
{
{ DeviceNetworkConstants.Command, FaxConstants.FaxPrintCommand },
- { FaxConstants.FaxPaperNameData, metadata.EntityName },
+ { FaxConstants.FaxPaperNameData, labelComponent?.OriginalName ?? metadata.EntityName },
+ { FaxConstants.FaxPaperLabelData, labelComponent?.CurrentLabel },
{ FaxConstants.FaxPaperContentData, paper.Content },
};
@@ -504,7 +537,11 @@ public void Send(EntityUid uid, FaxMachineComponent? component = null, EntityUid
_deviceNetworkSystem.QueuePacket(uid, component.DestinationFaxAddress, payload);
- _adminLogger.Add(LogType.Action, LogImpact.Low, $"{(sender != null ? ToPrettyString(sender.Value) : "Unknown"):user} sent fax from \"{component.FaxName}\" {ToPrettyString(uid)} to {faxName} ({component.DestinationFaxAddress}): {paper.Content}");
+ _adminLogger.Add(LogType.Action, LogImpact.Low,
+ $"{ToPrettyString(args.Actor):actor} " +
+ $"sent fax from \"{component.FaxName}\" {ToPrettyString(uid):tool} " +
+ $"to \"{faxName}\" ({component.DestinationFaxAddress}) " +
+ $"of {ToPrettyString(sendEntity):subject}: {paper.Content}");
component.SendTimeoutRemaining += component.SendTimeout;
@@ -560,7 +597,13 @@ private void SpawnPaperFromQueue(EntityUid uid, FaxMachineComponent? component =
}
_metaData.SetEntityName(printed, printout.Name);
- _adminLogger.Add(LogType.Action, LogImpact.Low, $"\"{component.FaxName}\" {ToPrettyString(uid)} printed {ToPrettyString(printed)}: {printout.Content}");
+
+ if (printout.Label is { } label)
+ {
+ _labelSystem.Label(printed, label);
+ }
+
+ _adminLogger.Add(LogType.Action, LogImpact.Low, $"\"{component.FaxName}\" {ToPrettyString(uid):tool} printed {ToPrettyString(printed):subject}: {printout.Content}");
}
private void NotifyAdmins(string faxName)
diff --git a/Content.Server/Labels/Label/Components/HandLabelerComponent.cs b/Content.Server/Labels/Label/Components/HandLabelerComponent.cs
deleted file mode 100644
index 6c96cada9e7..00000000000
--- a/Content.Server/Labels/Label/Components/HandLabelerComponent.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Content.Shared.Whitelist;
-
-namespace Content.Server.Labels.Components
-{
- [RegisterComponent]
- public sealed partial class HandLabelerComponent : Component
- {
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("assignedLabel")]
- public string AssignedLabel { get; set; } = string.Empty;
-
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("maxLabelChars")]
- public int MaxLabelChars { get; set; } = 50;
-
- [DataField("whitelist")]
- public EntityWhitelist Whitelist = new();
- }
-}
diff --git a/Content.Server/Labels/Label/HandLabelerSystem.cs b/Content.Server/Labels/Label/HandLabelerSystem.cs
index 84c41b0db57..d52bf260460 100644
--- a/Content.Server/Labels/Label/HandLabelerSystem.cs
+++ b/Content.Server/Labels/Label/HandLabelerSystem.cs
@@ -1,116 +1,8 @@
-using Content.Server.Labels.Components;
-using Content.Server.UserInterface;
-using Content.Server.Popups;
-using Content.Shared.Administration.Logs;
-using Content.Shared.Database;
-using Content.Shared.Interaction;
-using Content.Shared.Labels;
-using Content.Shared.Verbs;
-using JetBrains.Annotations;
-using Robust.Server.GameObjects;
-using Robust.Shared.Player;
+using Content.Shared.Labels.EntitySystems;
-namespace Content.Server.Labels
-{
- ///
- /// A hand labeler system that lets an object apply labels to objects with the .
- ///
- [UsedImplicitly]
- public sealed class HandLabelerSystem : EntitySystem
- {
- [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
- [Dependency] private readonly PopupSystem _popupSystem = default!;
- [Dependency] private readonly LabelSystem _labelSystem = default!;
- [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
-
- public override void Initialize()
- {
- base.Initialize();
-
- SubscribeLocalEvent(AfterInteractOn);
- SubscribeLocalEvent>(OnUtilityVerb);
- // Bound UI subscriptions
- SubscribeLocalEvent(OnHandLabelerLabelChanged);
- }
-
- private void OnUtilityVerb(EntityUid uid, HandLabelerComponent handLabeler, GetVerbsEvent args)
- {
- if (args.Target is not { Valid: true } target || !handLabeler.Whitelist.IsValid(target) || !args.CanAccess)
- return;
-
- string labelerText = handLabeler.AssignedLabel == string.Empty ? Loc.GetString("hand-labeler-remove-label-text") : Loc.GetString("hand-labeler-add-label-text");
-
- var verb = new UtilityVerb()
- {
- Act = () =>
- {
- AddLabelTo(uid, handLabeler, target, out var result);
- if (result != null)
- _popupSystem.PopupEntity(result, args.User, args.User);
- },
- Text = labelerText
- };
-
- args.Verbs.Add(verb);
- }
-
- private void AfterInteractOn(EntityUid uid, HandLabelerComponent handLabeler, AfterInteractEvent args)
- {
- if (args.Target is not {Valid: true} target || !handLabeler.Whitelist.IsValid(target) || !args.CanReach)
- return;
-
- AddLabelTo(uid, handLabeler, target, out string? result);
- if (result == null)
- return;
- _popupSystem.PopupEntity(result, args.User, args.User);
+namespace Content.Server.Labels.Label;
- // Log labeling
- _adminLogger.Add(LogType.Action, LogImpact.Low,
- $"{ToPrettyString(args.User):user} labeled {ToPrettyString(target):target} with {ToPrettyString(uid):labeler}");
- }
-
- private void AddLabelTo(EntityUid uid, HandLabelerComponent? handLabeler, EntityUid target, out string? result)
- {
- if (!Resolve(uid, ref handLabeler))
- {
- result = null;
- return;
- }
-
- if (handLabeler.AssignedLabel == string.Empty)
- {
- _labelSystem.Label(target, null);
- result = Loc.GetString("hand-labeler-successfully-removed");
- return;
- }
-
- _labelSystem.Label(target, handLabeler.AssignedLabel);
- result = Loc.GetString("hand-labeler-successfully-applied");
- }
-
- private void OnHandLabelerLabelChanged(EntityUid uid, HandLabelerComponent handLabeler, HandLabelerLabelChangedMessage args)
- {
- if (args.Actor is not {Valid: true} player)
- return;
-
- var label = args.Label.Trim();
- handLabeler.AssignedLabel = label.Substring(0, Math.Min(handLabeler.MaxLabelChars, label.Length));
- DirtyUI(uid, handLabeler);
-
- // Log label change
- _adminLogger.Add(LogType.Action, LogImpact.Low,
- $"{ToPrettyString(player):user} set {ToPrettyString(uid):labeler} to apply label \"{handLabeler.AssignedLabel}\"");
-
- }
-
- private void DirtyUI(EntityUid uid,
- HandLabelerComponent? handLabeler = null)
- {
- if (!Resolve(uid, ref handLabeler))
- return;
+public sealed class HandLabelerSystem : SharedHandLabelerSystem
+{
- _userInterfaceSystem.SetUiState(uid, HandLabelerUiKey.Key,
- new HandLabelerBoundUserInterfaceState(handLabeler.AssignedLabel));
- }
- }
}
diff --git a/Content.Server/Labels/Label/LabelSystem.cs b/Content.Server/Labels/Label/LabelSystem.cs
index dd4ba1f718f..aee2abe7ab9 100644
--- a/Content.Server/Labels/Label/LabelSystem.cs
+++ b/Content.Server/Labels/Label/LabelSystem.cs
@@ -50,7 +50,7 @@ private void OnLabelCompMapInit(EntityUid uid, LabelComponent component, MapInit
/// intended label text (null to remove)
/// label component for resolve
/// metadata component for resolve
- public void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null)
+ public override void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null)
{
if (!Resolve(uid, ref metadata))
return;
diff --git a/Content.Server/NPC/HTN/Preconditions/InContainerPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/InContainerPrecondition.cs
new file mode 100644
index 00000000000..aa0ad98edec
--- /dev/null
+++ b/Content.Server/NPC/HTN/Preconditions/InContainerPrecondition.cs
@@ -0,0 +1,27 @@
+using Robust.Server.Containers;
+
+namespace Content.Server.NPC.HTN.Preconditions;
+
+///
+/// Checks if the owner in container or not
+///
+public sealed partial class InContainerPrecondition : HTNPrecondition
+{
+ private ContainerSystem _container = default!;
+
+ [ViewVariables(VVAccess.ReadWrite)] [DataField("isInContainer")] public bool IsInContainer = true;
+
+ public override void Initialize(IEntitySystemManager sysManager)
+ {
+ base.Initialize(sysManager);
+ _container = sysManager.GetEntitySystem();
+ }
+
+ public override bool IsMet(NPCBlackboard blackboard)
+ {
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+
+ return IsInContainer && _container.IsEntityInContainer(owner) ||
+ !IsInContainer && !_container.IsEntityInContainer(owner);
+ }
+}
diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/ContainerOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/ContainerOperator.cs
new file mode 100644
index 00000000000..667d0b8ec40
--- /dev/null
+++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/ContainerOperator.cs
@@ -0,0 +1,40 @@
+using Robust.Server.Containers;
+
+namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat;
+
+public sealed partial class ContainerOperator : HTNOperator
+{
+ [Dependency] private readonly IEntityManager _entManager = default!;
+ private ContainerSystem _container = default!;
+ private EntityQuery _transformQuery;
+
+ [DataField("shutdownState")]
+ public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished;
+
+ [DataField("targetKey", required: true)]
+ public string TargetKey = default!;
+
+ public override void Initialize(IEntitySystemManager sysManager)
+ {
+ base.Initialize(sysManager);
+ _container = sysManager.GetEntitySystem();
+ _transformQuery = _entManager.GetEntityQuery();
+ }
+
+ public override void Startup(NPCBlackboard blackboard)
+ {
+ base.Startup(blackboard);
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+
+ if (!_container.TryGetOuterContainer(owner, _transformQuery.GetComponent(owner), out var outerContainer) && outerContainer == null)
+ return;
+
+ var target = outerContainer.Owner;
+ blackboard.SetValue(TargetKey, target);
+ }
+
+ public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
+ {
+ return HTNOperatorStatus.Finished;
+ }
+}
diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/EscapeOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/EscapeOperator.cs
new file mode 100644
index 00000000000..a794e1e3140
--- /dev/null
+++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/EscapeOperator.cs
@@ -0,0 +1,140 @@
+using System.Threading;
+using System.Threading.Tasks;
+using Content.Server.NPC.Components;
+using Content.Server.Storage.EntitySystems;
+using Content.Shared.CombatMode;
+using Robust.Server.Containers;
+
+namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat.Melee;
+
+public sealed partial class EscapeOperator : HTNOperator, IHtnConditionalShutdown
+{
+ [Dependency] private readonly IEntityManager _entManager = default!;
+ private ContainerSystem _container = default!;
+ private EntityStorageSystem _entityStorage = default!;
+
+ [DataField("shutdownState")]
+ public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished;
+
+ [DataField("targetKey", required: true)]
+ public string TargetKey = default!;
+
+ public override void Initialize(IEntitySystemManager sysManager)
+ {
+ base.Initialize(sysManager);
+ _container = sysManager.GetEntitySystem();
+ _entityStorage = sysManager.GetEntitySystem();
+ }
+
+ public override void Startup(NPCBlackboard blackboard)
+ {
+ base.Startup(blackboard);
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+ var target = blackboard.GetValue(TargetKey);
+
+ if (_entityStorage.TryOpenStorage(owner, target))
+ {
+ TaskShutdown(blackboard, HTNOperatorStatus.Finished);
+ return;
+ }
+
+ var melee = _entManager.EnsureComponent(owner);
+ melee.MissChance = blackboard.GetValueOrDefault(NPCBlackboard.MeleeMissChance, _entManager);
+ melee.Target = target;
+ }
+
+ public override async Task<(bool Valid, Dictionary? Effects)> Plan(NPCBlackboard blackboard,
+ CancellationToken cancelToken)
+ {
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+ if (!blackboard.TryGetValue(TargetKey, out var target, _entManager))
+ {
+ return (false, null);
+ }
+
+ if (!_container.IsEntityInContainer(owner))
+ {
+ return (false, null);
+ }
+
+ if (_entityStorage.TryOpenStorage(owner, target))
+ {
+ return (false, null);
+ }
+
+ return (true, null);
+ }
+
+ public void ConditionalShutdown(NPCBlackboard blackboard)
+ {
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+ _entManager.System().SetInCombatMode(owner, false);
+ _entManager.RemoveComponent(owner);
+ blackboard.Remove(TargetKey);
+ }
+
+ public override void TaskShutdown(NPCBlackboard blackboard, HTNOperatorStatus status)
+ {
+ base.TaskShutdown(blackboard, status);
+
+ ConditionalShutdown(blackboard);
+ }
+
+ public override void PlanShutdown(NPCBlackboard blackboard)
+ {
+ base.PlanShutdown(blackboard);
+
+ ConditionalShutdown(blackboard);
+ }
+
+ public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
+ {
+ base.Update(blackboard, frameTime);
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+ HTNOperatorStatus status;
+
+ if (_entManager.TryGetComponent(owner, out var combat) &&
+ blackboard.TryGetValue(TargetKey, out var target, _entManager))
+ {
+ combat.Target = target;
+
+ // Success
+ if (!_container.IsEntityInContainer(owner))
+ {
+ status = HTNOperatorStatus.Finished;
+ }
+ else
+ {
+ if (_entityStorage.TryOpenStorage(owner, target))
+ {
+ status = HTNOperatorStatus.Finished;
+ }
+ else
+ {
+ switch (combat.Status)
+ {
+ case CombatStatus.TargetOutOfRange:
+ case CombatStatus.Normal:
+ status = HTNOperatorStatus.Continuing;
+ break;
+ default:
+ status = HTNOperatorStatus.Failed;
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ status = HTNOperatorStatus.Failed;
+ }
+
+ // Mark it as finished to continue the plan.
+ if (status == HTNOperatorStatus.Continuing && ShutdownState == HTNPlanState.PlanFinished)
+ {
+ status = HTNOperatorStatus.Finished;
+ }
+
+ return status;
+ }
+}
diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnPullOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnPullOperator.cs
new file mode 100644
index 00000000000..54f422fe67d
--- /dev/null
+++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnPullOperator.cs
@@ -0,0 +1,35 @@
+using Content.Shared.Movement.Pulling.Components;
+using Content.Shared.Movement.Pulling.Systems;
+
+namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat;
+
+public sealed partial class UnPullOperator : HTNOperator
+{
+ [Dependency] private readonly IEntityManager _entManager = default!;
+ private PullingSystem _pulling = default!;
+
+ private EntityQuery _pullableQuery;
+
+ [DataField("shutdownState")]
+ public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished;
+
+ public override void Initialize(IEntitySystemManager sysManager)
+ {
+ base.Initialize(sysManager);
+ _pulling = sysManager.GetEntitySystem();
+ _pullableQuery = _entManager.GetEntityQuery();
+ }
+
+ public override void Startup(NPCBlackboard blackboard)
+ {
+ base.Startup(blackboard);
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+
+ _pulling.TryStopPull(owner, _pullableQuery.GetComponent(owner), owner);
+ }
+
+ public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
+ {
+ return HTNOperatorStatus.Finished;
+ }
+}
diff --git a/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnbuckleOperator.cs b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnbuckleOperator.cs
new file mode 100644
index 00000000000..207665d786f
--- /dev/null
+++ b/Content.Server/NPC/HTN/PrimitiveTasks/Operators/Combat/UnbuckleOperator.cs
@@ -0,0 +1,34 @@
+using Content.Server.Buckle.Systems;
+using Content.Shared.Buckle.Components;
+
+namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat;
+
+public sealed partial class UnbuckleOperator : HTNOperator
+{
+ [Dependency] private readonly IEntityManager _entManager = default!;
+ private BuckleSystem _buckle = default!;
+
+ [DataField("shutdownState")]
+ public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished;
+
+ public override void Initialize(IEntitySystemManager sysManager)
+ {
+ base.Initialize(sysManager);
+ _buckle = sysManager.GetEntitySystem();
+ }
+
+ public override void Startup(NPCBlackboard blackboard)
+ {
+ base.Startup(blackboard);
+ var owner = blackboard.GetValue(NPCBlackboard.Owner);
+ if (!_entManager.TryGetComponent(owner, out var buckle) || !buckle.Buckled)
+ return;
+
+ _buckle.TryUnbuckle(owner, owner, true, buckle);
+ }
+
+ public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
+ {
+ return HTNOperatorStatus.Finished;
+ }
+}
diff --git a/Content.Server/Nuke/NukeCodePaperSystem.cs b/Content.Server/Nuke/NukeCodePaperSystem.cs
index 8df25feebfa..8025e2bbd51 100644
--- a/Content.Server/Nuke/NukeCodePaperSystem.cs
+++ b/Content.Server/Nuke/NukeCodePaperSystem.cs
@@ -1,6 +1,7 @@
using System.Diagnostics.CodeAnalysis;
using Content.Server.Chat.Systems;
using Content.Server.Fax;
+using Content.Shared.Fax.Components;
using Content.Server.Paper;
using Content.Server.Station.Components;
using Content.Server.Station.Systems;
@@ -65,6 +66,7 @@ public bool SendNukeCodes(EntityUid station)
paperContent,
Loc.GetString("nuke-codes-fax-paper-name"),
null,
+ null,
"paper_stamp-centcom",
new List
{
diff --git a/Content.Server/Objectives/Components/TerminatorTargetOverrideComponent.cs b/Content.Server/Objectives/Components/TerminatorTargetOverrideComponent.cs
deleted file mode 100644
index c66ff55f054..00000000000
--- a/Content.Server/Objectives/Components/TerminatorTargetOverrideComponent.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using Content.Server.Objectives.Systems;
-
-namespace Content.Server.Objectives.Components;
-
-///
-/// Sets this objective's target to the exterminator's target override, if it has one.
-/// If not it will be random.
-///
-[RegisterComponent, Access(typeof(TerminatorTargetOverrideSystem))]
-public sealed partial class TerminatorTargetOverrideComponent : Component
-{
-}
diff --git a/Content.Server/Objectives/Systems/TerminatorTargetOverrideSystem.cs b/Content.Server/Objectives/Systems/TerminatorTargetOverrideSystem.cs
deleted file mode 100644
index 0a81c2810ed..00000000000
--- a/Content.Server/Objectives/Systems/TerminatorTargetOverrideSystem.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Content.Server.Objectives.Components;
-using Content.Server.Terminator.Components;
-using Content.Shared.Mind;
-using Content.Shared.Objectives.Components;
-
-namespace Content.Server.Objectives.Systems;
-
-///
-/// Handles copying the exterminator's target override to this objective.
-///
-public sealed class TerminatorTargetOverrideSystem : EntitySystem
-{
- [Dependency] private readonly TargetObjectiveSystem _target = default!;
-
- public override void Initialize()
- {
- base.Initialize();
-
- SubscribeLocalEvent(OnAssigned);
- }
-
- private void OnAssigned(EntityUid uid, TerminatorTargetOverrideComponent comp, ref ObjectiveAssignedEvent args)
- {
- if (args.Mind.OwnedEntity == null)
- {
- args.Cancelled = true;
- return;
- }
-
- var user = args.Mind.OwnedEntity.Value;
- if (!TryComp(user, out var terminator))
- {
- args.Cancelled = true;
- return;
- }
-
- // this exterminator has a target override so set its objective target accordingly
- if (terminator.Target != null)
- _target.SetTarget(uid, terminator.Target.Value);
- }
-}
diff --git a/Content.Server/Power/Components/ChargerComponent.cs b/Content.Server/Power/Components/ChargerComponent.cs
index af4498f01ba..e45ded071cf 100644
--- a/Content.Server/Power/Components/ChargerComponent.cs
+++ b/Content.Server/Power/Components/ChargerComponent.cs
@@ -1,5 +1,10 @@
using Content.Shared.Power;
using Content.Shared.Whitelist;
+using Content.Shared.Power;
+using Content.Shared.Whitelist;
+using Robust.Shared.GameObjects;
+using Robust.Shared.Serialization.Manager.Attributes;
+using Robust.Shared.ViewVariables;
namespace Content.Server.Power.Components
{
@@ -26,5 +31,12 @@ public sealed partial class ChargerComponent : Component
///
[DataField("whitelist")]
public EntityWhitelist? Whitelist;
+
+ ///
+ /// Indicates whether the charger is portable and thus subject to EMP effects
+ /// and bypasses checks for transform, anchored, and ApcPowerReceiverComponent.
+ ///
+ [DataField]
+ public bool Portable = false;
}
}
diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs
index db16dfa008e..1ff13a24f2c 100644
--- a/Content.Server/Power/EntitySystems/ChargerSystem.cs
+++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs
@@ -1,8 +1,10 @@
using Content.Server.Power.Components;
+using Content.Server.Emp;
using Content.Server.PowerCell;
using Content.Shared.Examine;
using Content.Shared.Power;
using Content.Shared.PowerCell.Components;
+using Content.Shared.Emp;
using JetBrains.Annotations;
using Robust.Shared.Containers;
using System.Diagnostics.CodeAnalysis;
@@ -28,6 +30,8 @@ public override void Initialize()
SubscribeLocalEvent(OnInsertAttempt);
SubscribeLocalEvent(OnEntityStorageInsertAttempt);
SubscribeLocalEvent(OnChargerExamine);
+
+ SubscribeLocalEvent(OnEmpPulse);
}
private void OnStartup(EntityUid uid, ChargerComponent component, ComponentStartup args)
@@ -158,18 +162,27 @@ private void UpdateStatus(EntityUid uid, ChargerComponent component)
}
}
+ private void OnEmpPulse(EntityUid uid, ChargerComponent component, ref EmpPulseEvent args)
+ {
+ args.Affected = true;
+ args.Disabled = true;
+ }
+
private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component)
{
- if (!TryComp(uid, out TransformComponent? transformComponent))
- return CellChargerStatus.Off;
+ if (!component.Portable)
+ {
+ if (!TryComp(uid, out TransformComponent? transformComponent) || !transformComponent.Anchored)
+ return CellChargerStatus.Off;
+ }
- if (!transformComponent.Anchored)
+ if (!TryComp(uid, out ApcPowerReceiverComponent? apcPowerReceiverComponent))
return CellChargerStatus.Off;
- if (!TryComp(uid, out ApcPowerReceiverComponent? apcPowerReceiverComponent))
+ if (!component.Portable && !apcPowerReceiverComponent.Powered)
return CellChargerStatus.Off;
- if (!apcPowerReceiverComponent.Powered)
+ if (HasComp(uid))
return CellChargerStatus.Off;
if (!_container.TryGetContainer(uid, component.SlotId, out var container))
@@ -186,7 +199,7 @@ private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component)
return CellChargerStatus.Charging;
}
-
+
private void TransferPower(EntityUid uid, EntityUid targetEntity, ChargerComponent component, float frameTime)
{
if (!TryComp(uid, out ApcPowerReceiverComponent? receiverComponent))
diff --git a/Content.Server/RandomMetadata/RandomMetadataSystem.cs b/Content.Server/RandomMetadata/RandomMetadataSystem.cs
index 0c254c52ac0..abab5e5fc38 100644
--- a/Content.Server/RandomMetadata/RandomMetadataSystem.cs
+++ b/Content.Server/RandomMetadata/RandomMetadataSystem.cs
@@ -47,9 +47,13 @@ public string GetRandomFromSegments(List segments, string? separator)
var outputSegments = new List();
foreach (var segment in segments)
{
- if (_prototype.TryIndex(segment, out var proto))
- outputSegments.Add(_random.Pick(proto.Values));
- else if (Loc.TryGetString(segment, out var localizedSegment))
+ if (_prototype.TryIndex(segment, out var proto)) {
+ var random = _random.Pick(proto.Values);
+ if (Loc.TryGetString(random, out var localizedSegment))
+ outputSegments.Add(localizedSegment);
+ else
+ outputSegments.Add(random);
+ } else if (Loc.TryGetString(segment, out var localizedSegment))
outputSegments.Add(localizedSegment);
else
outputSegments.Add(segment);
diff --git a/Content.Server/Roles/RoleSystem.cs b/Content.Server/Roles/RoleSystem.cs
index f25f12aadee..92e60f567ef 100644
--- a/Content.Server/Roles/RoleSystem.cs
+++ b/Content.Server/Roles/RoleSystem.cs
@@ -20,7 +20,6 @@ public override void Initialize()
SubscribeAntagEvents();
SubscribeAntagEvents();
SubscribeAntagEvents();
- SubscribeAntagEvents();
SubscribeAntagEvents();
SubscribeAntagEvents();
diff --git a/Content.Server/Terminator/Components/TerminatorComponent.cs b/Content.Server/Terminator/Components/TerminatorComponent.cs
deleted file mode 100644
index 9427f95eeda..00000000000
--- a/Content.Server/Terminator/Components/TerminatorComponent.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Content.Server.Terminator.Systems;
-using Robust.Shared.Prototypes;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
-
-namespace Content.Server.Terminator.Components;
-
-///
-/// Main terminator component, handles the target, if any, and objectives.
-///
-[RegisterComponent, Access(typeof(TerminatorSystem))]
-public sealed partial class TerminatorComponent : Component
-{
- ///
- /// Used to force the terminate objective's target.
- /// If null it will be a random person.
- ///
- [DataField("target")]
- public EntityUid? Target;
-}
diff --git a/Content.Server/Terminator/Components/TerminatorTargetComponent.cs b/Content.Server/Terminator/Components/TerminatorTargetComponent.cs
deleted file mode 100644
index 786cbd1167b..00000000000
--- a/Content.Server/Terminator/Components/TerminatorTargetComponent.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Content.Server.Terminator.Systems;
-
-namespace Content.Server.Terminator.Components;
-
-///
-/// Sets after the ghost role spawns.
-///
-[RegisterComponent, Access(typeof(TerminatorSystem))]
-public sealed partial class TerminatorTargetComponent : Component
-{
- ///
- /// The target to set after the ghost role spawns.
- ///
- [DataField("target")]
- public EntityUid? Target;
-}
diff --git a/Content.Server/Terminator/Systems/TerminatorSystem.cs b/Content.Server/Terminator/Systems/TerminatorSystem.cs
deleted file mode 100644
index b6699352779..00000000000
--- a/Content.Server/Terminator/Systems/TerminatorSystem.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using Content.Server.Body.Components;
-using Content.Server.GenericAntag;
-using Content.Server.Ghost.Roles.Events;
-using Content.Server.Roles;
-using Content.Server.Terminator.Components;
-using Content.Shared.Roles;
-using Robust.Shared.Map;
-
-namespace Content.Server.Terminator.Systems;
-
-public sealed class TerminatorSystem : EntitySystem
-{
- [Dependency] private readonly SharedRoleSystem _role = default!;
-
- public override void Initialize()
- {
- base.Initialize();
-
- SubscribeLocalEvent(OnMapInit);
- SubscribeLocalEvent(OnSpawned);
- SubscribeLocalEvent(OnCreated);
- }
-
- private void OnMapInit(EntityUid uid, TerminatorComponent comp, MapInitEvent args)
- {
- // cyborg doesn't need to breathe
- RemComp(uid);
- }
-
- private void OnSpawned(EntityUid uid, TerminatorComponent comp, GhostRoleSpawnerUsedEvent args)
- {
- if (!TryComp(args.Spawner, out var target))
- return;
-
- comp.Target = target.Target;
- }
-
- private void OnCreated(EntityUid uid, TerminatorComponent comp, ref GenericAntagCreatedEvent args)
- {
- var mindId = args.MindId;
- var mind = args.Mind;
-
- _role.MindAddRole(mindId, new RoleBriefingComponent
- {
- Briefing = Loc.GetString("terminator-role-briefing")
- }, mind);
- _role.MindAddRole(mindId, new TerminatorRoleComponent(), mind);
- }
-
- ///
- /// Create a spawner at a position and return it.
- ///
- /// Coordinates to create the spawner at
- /// Optional target mind to force the terminator to target
- public EntityUid CreateSpawner(EntityCoordinates coords, EntityUid? target)
- {
- var uid = Spawn("SpawnPointGhostTerminator", coords);
- if (target != null)
- {
- var comp = EnsureComp(uid);
- comp.Target = target;
- }
-
- return uid;
- }
-}
diff --git a/Content.Shared/Access/SharedAgentIDCardSystem.cs b/Content.Shared/Access/SharedAgentIDCardSystem.cs
index ef6690cc356..d027a3937f5 100644
--- a/Content.Shared/Access/SharedAgentIDCardSystem.cs
+++ b/Content.Shared/Access/SharedAgentIDCardSystem.cs
@@ -26,12 +26,14 @@ public sealed class AgentIDCardBoundUserInterfaceState : BoundUserInterfaceState
public readonly HashSet Icons;
public string CurrentName { get; }
public string CurrentJob { get; }
+ public string CurrentJobIconId { get; }
- public AgentIDCardBoundUserInterfaceState(string currentName, string currentJob, HashSet icons)
+ public AgentIDCardBoundUserInterfaceState(string currentName, string currentJob, string currentJobIconId, HashSet icons)
{
Icons = icons;
CurrentName = currentName;
CurrentJob = currentJob;
+ CurrentJobIconId = currentJobIconId;
}
}
@@ -60,11 +62,11 @@ public AgentIDCardJobChangedMessage(string job)
[Serializable, NetSerializable]
public sealed class AgentIDCardJobIconChangedMessage : BoundUserInterfaceMessage
{
- public string JobIcon { get; }
+ public string JobIconId { get; }
- public AgentIDCardJobIconChangedMessage(string jobIcon)
+ public AgentIDCardJobIconChangedMessage(string jobIconId)
{
- JobIcon = jobIcon;
+ JobIconId = jobIconId;
}
}
}
diff --git a/Content.Shared/Administration/AdminFlags.cs b/Content.Shared/Administration/AdminFlags.cs
index 52161cf3f3a..571982b548d 100644
--- a/Content.Shared/Administration/AdminFlags.cs
+++ b/Content.Shared/Administration/AdminFlags.cs
@@ -99,6 +99,11 @@ public enum AdminFlags : uint
///
Stealth = 1 << 16,
+ ///
+ /// Allows you to use Admin chat
+ ///
+ Adminchat = 1 << 17,
+
///
/// Dangerous host permissions like scsi.
///
diff --git a/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs b/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs
index 162b5f2d6c2..82f4e70ce0c 100644
--- a/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs
+++ b/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs
@@ -1,4 +1,4 @@
-using Robust.Shared.Prototypes;
+using Robust.Shared.Prototypes;
namespace Content.Shared.Body.Prototypes
{
@@ -7,5 +7,11 @@ public sealed partial class MetabolismGroupPrototype : IPrototype
{
[IdDataField]
public string ID { get; private set; } = default!;
+
+ [DataField("name", required: true)]
+ private LocId Name { get; set; }
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ public string LocalizedName => Loc.GetString(Name);
}
}
diff --git a/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs b/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs
index c840983ca0c..5273ac722b2 100644
--- a/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs
+++ b/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs
@@ -1,4 +1,4 @@
-using Robust.Shared.Prototypes;
+using Robust.Shared.Prototypes;
namespace Content.Shared.Body.Prototypes
{
@@ -9,6 +9,9 @@ public sealed partial class MetabolizerTypePrototype : IPrototype
public string ID { get; private set; } = default!;
[DataField("name", required: true)]
- public string Name { get; private set; } = default!;
+ private LocId Name { get; set; }
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ public string LocalizedName => Loc.GetString(Name);
}
}
diff --git a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs
index d85506df4b1..e8bfb789613 100644
--- a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs
+++ b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs
@@ -96,20 +96,23 @@ private void ToggleVisualLayers(EntityUid equipee, HashSet
{
if (TryComp(item, out HideLayerClothingComponent? comp))
{
- //Checks for mask toggling. TODO: Make a generic system for this
- if (comp.HideOnToggle && TryComp(item, out MaskComponent? mask) && TryComp(item, out ClothingComponent? clothing))
+ if (comp.Slots.Contains(layer))
{
- if (clothing.EquippedPrefix != mask.EquippedPrefix)
+ //Checks for mask toggling. TODO: Make a generic system for this
+ if (comp.HideOnToggle && TryComp(item, out MaskComponent? mask) && TryComp(item, out ClothingComponent? clothing))
+ {
+ if (clothing.EquippedPrefix != mask.EquippedPrefix)
+ {
+ shouldLayerShow = false;
+ break;
+ }
+ }
+ else
{
shouldLayerShow = false;
break;
}
}
- else
- {
- shouldLayerShow = false;
- break;
- }
}
}
_humanoidSystem.SetLayerVisibility(equipee, layer, shouldLayerShow);
diff --git a/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs b/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs
index 807f143708c..bb5aea3a38c 100644
--- a/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs
+++ b/Content.Shared/Damage/Prototypes/DamageGroupPrototype.cs
@@ -17,6 +17,12 @@ public sealed partial class DamageGroupPrototype : IPrototype
{
[IdDataField] public string ID { get; } = default!;
+ [DataField(required: true)]
+ private LocId Name { get; set; }
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ public string LocalizedName => Loc.GetString(Name);
+
[DataField("damageTypes", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer))]
public List DamageTypes { get; private set; } = default!;
}
diff --git a/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs b/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs
index cde7a8617f5..a1ae23ef676 100644
--- a/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs
+++ b/Content.Shared/Damage/Prototypes/DamageTypePrototype.cs
@@ -11,6 +11,12 @@ public sealed partial class DamageTypePrototype : IPrototype
[IdDataField]
public string ID { get; private set; } = default!;
+ [DataField(required: true)]
+ private LocId Name { get; set; }
+
+ [ViewVariables(VVAccess.ReadOnly)]
+ public string LocalizedName => Loc.GetString(Name);
+
///
/// The price for each 1% damage reduction in armors
///
diff --git a/Content.Shared/Damage/Systems/DamageExamineSystem.cs b/Content.Shared/Damage/Systems/DamageExamineSystem.cs
index 8273719110b..fd1f191334f 100644
--- a/Content.Shared/Damage/Systems/DamageExamineSystem.cs
+++ b/Content.Shared/Damage/Systems/DamageExamineSystem.cs
@@ -1,8 +1,10 @@
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Events;
+using Content.Shared.Damage.Prototypes;
using Content.Shared.Examine;
using Content.Shared.FixedPoint;
using Content.Shared.Verbs;
+using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared.Damage.Systems;
@@ -10,6 +12,7 @@ namespace Content.Shared.Damage.Systems;
public sealed class DamageExamineSystem : EntitySystem
{
[Dependency] private readonly ExamineSystemShared _examine = default!;
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
public override void Initialize()
{
@@ -66,7 +69,7 @@ private FormattedMessage GetDamageExamine(DamageSpecifier damageSpecifier, strin
if (damage.Value != FixedPoint2.Zero)
{
msg.PushNewline();
- msg.AddMarkup(Loc.GetString("damage-value", ("type", damage.Key), ("amount", damage.Value)));
+ msg.AddMarkup(Loc.GetString("damage-value", ("type", _prototype.Index(damage.Key).LocalizedName), ("amount", damage.Value)));
}
}
diff --git a/Content.Server/Fax/FaxMachineComponent.cs b/Content.Shared/Fax/Components/FaxMachineComponent.cs
similarity index 81%
rename from Content.Server/Fax/FaxMachineComponent.cs
rename to Content.Shared/Fax/Components/FaxMachineComponent.cs
index d67a92a50a3..25519ee2975 100644
--- a/Content.Server/Fax/FaxMachineComponent.cs
+++ b/Content.Shared/Fax/Components/FaxMachineComponent.cs
@@ -1,12 +1,13 @@
using Content.Shared.Containers.ItemSlots;
using Content.Shared.Paper;
using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
-namespace Content.Server.Fax;
+namespace Content.Shared.Fax.Components;
-[RegisterComponent]
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class FaxMachineComponent : Component
{
///
@@ -16,6 +17,13 @@ public sealed partial class FaxMachineComponent : Component
[DataField("name")]
public string FaxName { get; set; } = "Unknown";
+ ///
+ /// Sprite to use when inserting an object.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField, AutoNetworkedField]
+ public string InsertingState = "inserting";
+
///
/// Device address of fax in network to which data will be send
///
@@ -26,7 +34,7 @@ public sealed partial class FaxMachineComponent : Component
///
/// Contains the item to be sent, assumes it's paper...
///
- [DataField("paperSlot", required: true)]
+ [DataField(required: true)]
public ItemSlot PaperSlot = new();
///
@@ -34,21 +42,21 @@ public sealed partial class FaxMachineComponent : Component
/// This will make it visible to others on the network
///
[ViewVariables(VVAccess.ReadWrite)]
- [DataField("responsePings")]
+ [DataField]
public bool ResponsePings { get; set; } = true;
///
/// Should admins be notified on message receive
///
[ViewVariables(VVAccess.ReadWrite)]
- [DataField("notifyAdmins")]
+ [DataField]
public bool NotifyAdmins { get; set; } = false;
///
/// Should that fax receive nuke codes send by admins. Probably should be captain fax only
///
[ViewVariables(VVAccess.ReadWrite)]
- [DataField("receiveNukeCodes")]
+ [DataField]
public bool ReceiveNukeCodes { get; set; } = false;
// Corvax-StationGoal-Start
@@ -63,19 +71,19 @@ public sealed partial class FaxMachineComponent : Component
///
/// Sound to play when fax has been emagged
///
- [DataField("emagSound")]
+ [DataField]
public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks");
///
/// Sound to play when fax printing new message
///
- [DataField("printSound")]
+ [DataField]
public SoundSpecifier PrintSound = new SoundPathSpecifier("/Audio/Machines/printer.ogg");
///
/// Sound to play when fax successfully send message
///
- [DataField("sendSound")]
+ [DataField]
public SoundSpecifier SendSound = new SoundPathSpecifier("/Audio/Machines/high_tech_confirm.ogg");
///
@@ -88,27 +96,27 @@ public sealed partial class FaxMachineComponent : Component
/// Print queue of the incoming message
///
[ViewVariables]
- [DataField("printingQueue")]
+ [DataField]
public Queue PrintingQueue { get; private set; } = new();
///
/// Message sending timeout
///
[ViewVariables]
- [DataField("sendTimeoutRemaining")]
+ [DataField]
public float SendTimeoutRemaining;
///
/// Message sending timeout
///
[ViewVariables]
- [DataField("sendTimeout")]
+ [DataField]
public float SendTimeout = 5f;
///
/// Remaining time of inserting animation
///
- [DataField("insertingTimeRemaining")]
+ [DataField]
public float InsertingTimeRemaining;
///
@@ -120,7 +128,7 @@ public sealed partial class FaxMachineComponent : Component
///
/// Remaining time of printing animation
///
- [DataField("printingTimeRemaining")]
+ [DataField]
public float PrintingTimeRemaining;
///
@@ -133,13 +141,16 @@ public sealed partial class FaxMachineComponent : Component
[DataDefinition]
public sealed partial class FaxPrintout
{
- [DataField("name", required: true)]
+ [DataField(required: true)]
public string Name { get; private set; } = default!;
- [DataField("content", required: true)]
+ [DataField]
+ public string? Label { get; private set; }
+
+ [DataField(required: true)]
public string Content { get; private set; } = default!;
- [DataField("prototypeId", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)]
+ [DataField(customTypeSerializer: typeof(PrototypeIdSerializer), required: true)]
public string PrototypeId { get; private set; } = default!;
[DataField("stampState")]
@@ -152,10 +163,11 @@ private FaxPrintout()
{
}
- public FaxPrintout(string content, string name, string? prototypeId = null, string? stampState = null, List? stampedBy = null)
+ public FaxPrintout(string content, string name, string? label = null, string? prototypeId = null, string? stampState = null, List? stampedBy = null)
{
Content = content;
Name = name;
+ Label = label;
PrototypeId = prototypeId ?? "";
StampState = stampState;
StampedBy = stampedBy ?? new List();
diff --git a/Content.Shared/Fax/Components/FaxableObjectComponent.cs b/Content.Shared/Fax/Components/FaxableObjectComponent.cs
new file mode 100644
index 00000000000..57b6e610a32
--- /dev/null
+++ b/Content.Shared/Fax/Components/FaxableObjectComponent.cs
@@ -0,0 +1,16 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Fax.Components;
+///
+/// Entity with this component can be faxed.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class FaxableObjectComponent : Component
+{
+ ///
+ /// Sprite to use when inserting an object.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField, AutoNetworkedField]
+ public string InsertingState = "inserting";
+}
diff --git a/Content.Shared/Fax/Components/FaxecuteComponent.cs b/Content.Shared/Fax/Components/FaxecuteComponent.cs
new file mode 100644
index 00000000000..9c9bd030203
--- /dev/null
+++ b/Content.Shared/Fax/Components/FaxecuteComponent.cs
@@ -0,0 +1,19 @@
+using Content.Shared.Damage;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Fax.Components;
+
+///
+/// A fax component which stores a damage specifier for attempting to fax a mob.
+///
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class FaxecuteComponent : Component
+{
+
+ ///
+ /// Type of damage dealt when entity is faxecuted.
+ ///
+ [DataField(required: true), AutoNetworkedField]
+ public DamageSpecifier Damage = new();
+}
+
diff --git a/Content.Shared/Fax/DamageOnFaxecuteEvent.cs b/Content.Shared/Fax/DamageOnFaxecuteEvent.cs
new file mode 100644
index 00000000000..b36f55ab5d2
--- /dev/null
+++ b/Content.Shared/Fax/DamageOnFaxecuteEvent.cs
@@ -0,0 +1,9 @@
+
+namespace Content.Shared.Fax.Components;
+
+///
+/// Event for killing any mob within the fax machine.
+///
+/// System for handling execution of a mob within fax when copy or send attempt is made.
+///
+public sealed class FaxecuteSystem : EntitySystem
+{
+ [Dependency] private readonly DamageableSystem _damageable = default!;
+ [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ }
+
+ public void Faxecute(EntityUid uid, FaxMachineComponent component, DamageOnFaxecuteEvent? args = null)
+ {
+ var sendEntity = component.PaperSlot.Item;
+ if (sendEntity == null)
+ return;
+
+ if (!TryComp(uid, out var faxecute))
+ return;
+
+ var damageSpec = faxecute.Damage;
+ _damageable.TryChangeDamage(sendEntity, damageSpec);
+ _popupSystem.PopupEntity(Loc.GetString("fax-machine-popup-error", ("target", uid)), uid, PopupType.LargeCaution);
+ return;
+
+ }
+}
diff --git a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs
index b1c89315279..8b7b59e4f58 100644
--- a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs
+++ b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs
@@ -104,7 +104,8 @@ public static HumanoidCharacterAppearance DefaultWithSpecies(string species)
HumanoidSkinColor.HumanToned => Humanoid.SkinColor.HumanSkinTone(speciesPrototype.DefaultHumanSkinTone),
HumanoidSkinColor.Hues => speciesPrototype.DefaultSkinTone,
HumanoidSkinColor.TintedHues => Humanoid.SkinColor.TintedHues(speciesPrototype.DefaultSkinTone),
- _ => Humanoid.SkinColor.ValidHumanSkinTone
+ HumanoidSkinColor.VoxFeathers => Humanoid.SkinColor.ClosestVoxColor(speciesPrototype.DefaultSkinTone),
+ _ => Humanoid.SkinColor.ValidHumanSkinTone,
};
return new(
@@ -167,6 +168,9 @@ public static HumanoidCharacterAppearance Random(string species, Sex sex)
case HumanoidSkinColor.TintedHues:
newSkinColor = Humanoid.SkinColor.ValidTintedHuesSkinTone(newSkinColor);
break;
+ case HumanoidSkinColor.VoxFeathers:
+ newSkinColor = Humanoid.SkinColor.ProportionalVoxColor(newSkinColor);
+ break;
}
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor,
diff --git a/Content.Shared/Humanoid/SkinColor.cs b/Content.Shared/Humanoid/SkinColor.cs
index 960f910a323..2dc95fcf076 100644
--- a/Content.Shared/Humanoid/SkinColor.cs
+++ b/Content.Shared/Humanoid/SkinColor.cs
@@ -1,3 +1,6 @@
+using System.Security.Cryptography;
+using Microsoft.VisualBasic.CompilerServices;
+
namespace Content.Shared.Humanoid;
public static class SkinColor
@@ -7,6 +10,13 @@ public static class SkinColor
public const float MinHuesLightness = 0.175f;
+ public const float MinFeathersHue = 29f / 360;
+ public const float MaxFeathersHue = 174f / 360;
+ public const float MinFeathersSaturation = 20f / 100;
+ public const float MaxFeathersSaturation = 88f / 100;
+ public const float MinFeathersValue = 36f / 100;
+ public const float MaxFeathersValue = 55f / 100;
+
public static Color ValidHumanSkinTone => Color.FromHsv(new Vector4(0.07f, 0.2f, 1f, 1f));
///
@@ -140,11 +150,65 @@ public static bool VerifyTintedHues(Color color)
return Color.ToHsl(color).Y <= MaxTintedHuesSaturation && Color.ToHsl(color).Z >= MinTintedHuesLightness;
}
+ ///
+ /// Converts a Color proportionally to the allowed vox color range.
+ /// Will NOT preserve the specific input color even if it is within the allowed vox color range.
+ ///
+ /// Color to convert
+ /// Vox feather coloration
+ public static Color ProportionalVoxColor(Color color)
+ {
+ var newColor = Color.ToHsv(color);
+
+ newColor.X = newColor.X * (MaxFeathersHue - MinFeathersHue) + MinFeathersHue;
+ newColor.Y = newColor.Y * (MaxFeathersSaturation - MinFeathersSaturation) + MinFeathersSaturation;
+ newColor.Z = newColor.Z * (MaxFeathersValue - MinFeathersValue) + MinFeathersValue;
+
+ return Color.FromHsv(newColor);
+ }
+
+ // ///
+ // /// Ensures the input Color is within the allowed vox color range.
+ // ///
+ // /// Color to convert
+ // /// The same Color if it was within the allowed range, or the closest matching Color otherwise
+ public static Color ClosestVoxColor(Color color)
+ {
+ var hsv = Color.ToHsv(color);
+
+ hsv.X = Math.Clamp(hsv.X, MinFeathersHue, MaxFeathersHue);
+ hsv.Y = Math.Clamp(hsv.Y, MinFeathersSaturation, MaxFeathersSaturation);
+ hsv.Z = Math.Clamp(hsv.Z, MinFeathersValue, MaxFeathersValue);
+
+ return Color.FromHsv(hsv);
+ }
+
+ ///
+ /// Verify if this color is a valid vox feather coloration, or not.
+ ///
+ /// The color to verify
+ /// True if valid, false otherwise
+ public static bool VerifyVoxFeathers(Color color)
+ {
+ var colorHsv = Color.ToHsv(color);
+
+ if (colorHsv.X < MinFeathersHue || colorHsv.X > MaxFeathersHue)
+ return false;
+
+ if (colorHsv.Y < MinFeathersSaturation || colorHsv.Y > MaxFeathersSaturation)
+ return false;
+
+ if (colorHsv.Z < MinFeathersValue || colorHsv.Z > MaxFeathersValue)
+ return false;
+
+ return true;
+ }
+
///
/// This takes in a color, and returns a color guaranteed to be above MinHuesLightness
///
///
- /// Either the color as-is if it's above MinHuesLightness, or the color with luminosity increased above MinHuesLightness
+ /// Either the color as-is if it's above MinHuesLightness, or the color with luminosity increased above MinHuesLightness
public static Color MakeHueValid(Color color)
{
var manipulatedColor = Color.ToHsv(color);
@@ -169,6 +233,7 @@ public static bool VerifySkinColor(HumanoidSkinColor type, Color color)
HumanoidSkinColor.HumanToned => VerifyHumanSkinTone(color),
HumanoidSkinColor.TintedHues => VerifyTintedHues(color),
HumanoidSkinColor.Hues => VerifyHues(color),
+ HumanoidSkinColor.VoxFeathers => VerifyVoxFeathers(color),
_ => false,
};
}
@@ -180,6 +245,7 @@ public static Color ValidSkinTone(HumanoidSkinColor type, Color color)
HumanoidSkinColor.HumanToned => ValidHumanSkinTone,
HumanoidSkinColor.TintedHues => ValidTintedHuesSkinTone(color),
HumanoidSkinColor.Hues => MakeHueValid(color),
+ HumanoidSkinColor.VoxFeathers => ClosestVoxColor(color),
_ => color
};
}
@@ -189,5 +255,6 @@ public enum HumanoidSkinColor : byte
{
HumanToned,
Hues,
+ VoxFeathers, // Vox feathers are limited to a specific color range
TintedHues, //This gives a color tint to a humanoid's skin (10% saturation with full hue range).
}
diff --git a/Content.Shared/Inventory/InventoryComponent.cs b/Content.Shared/Inventory/InventoryComponent.cs
index 2a8710f0f28..02b3a5b2583 100644
--- a/Content.Shared/Inventory/InventoryComponent.cs
+++ b/Content.Shared/Inventory/InventoryComponent.cs
@@ -13,6 +13,18 @@ public sealed partial class InventoryComponent : Component
[DataField("speciesId")] public string? SpeciesId { get; set; }
+ [DataField] public Dictionary Displacements = [];
+
public SlotDefinition[] Slots = Array.Empty();
public ContainerSlot[] Containers = Array.Empty();
+
+ [DataDefinition]
+ public sealed partial class SlotDisplacementData
+ {
+ [DataField(required: true)]
+ public PrototypeLayerData Layer = default!;
+
+ [DataField]
+ public string? ShaderOverride = "DisplacedStencilDraw";
+ }
}
diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs
index f351deb1b6e..e11e9d767b8 100644
--- a/Content.Shared/Inventory/InventorySystem.Relay.cs
+++ b/Content.Shared/Inventory/InventorySystem.Relay.cs
@@ -128,6 +128,11 @@ public InventoryRelayedEvent(TEvent args)
}
}
+public interface IClothingSlots
+{
+ SlotFlags Slots { get; }
+}
+
///
/// Events that should be relayed to inventory slots should implement this interface.
///
diff --git a/Content.Shared/Inventory/InventorySystem.Slots.cs b/Content.Shared/Inventory/InventorySystem.Slots.cs
index c634b68e041..1da44155b95 100644
--- a/Content.Shared/Inventory/InventorySystem.Slots.cs
+++ b/Content.Shared/Inventory/InventorySystem.Slots.cs
@@ -27,6 +27,31 @@ private void ShutdownSlots()
.RemoveHandler(HandleViewVariablesSlots, ListViewVariablesSlots);
}
+ ///
+ /// Tries to find an entity in the specified slot with the specified component.
+ ///
+ public bool TryGetInventoryEntity(Entity entity, out EntityUid targetUid)
+ where T : IComponent, IClothingSlots
+ {
+ if (TryGetContainerSlotEnumerator(entity.Owner, out var containerSlotEnumerator))
+ {
+ while (containerSlotEnumerator.NextItem(out var item, out var slot))
+ {
+ if (!TryComp(item, out var required))
+ continue;
+
+ if ((((IClothingSlots) required).Slots & slot.SlotFlags) == 0x0)
+ continue;
+
+ targetUid = item;
+ return true;
+ }
+ }
+
+ targetUid = EntityUid.Invalid;
+ return false;
+ }
+
protected virtual void OnInit(EntityUid uid, InventoryComponent component, ComponentInit args)
{
if (!_prototypeManager.TryIndex(component.TemplateId, out InventoryTemplatePrototype? invTemplate))
diff --git a/Content.Shared/Inventory/SlotFlags.cs b/Content.Shared/Inventory/SlotFlags.cs
index 8d5e33e3486..90971d1670b 100644
--- a/Content.Shared/Inventory/SlotFlags.cs
+++ b/Content.Shared/Inventory/SlotFlags.cs
@@ -27,4 +27,6 @@ public enum SlotFlags
FEET = 1 << 14,
SUITSTORAGE = 1 << 15,
All = ~NONE,
+
+ WITHOUT_POCKET = All & ~POCKET
}
diff --git a/Content.Shared/Labels/Components/HandLabelerComponent.cs b/Content.Shared/Labels/Components/HandLabelerComponent.cs
new file mode 100644
index 00000000000..8e2cb7b0675
--- /dev/null
+++ b/Content.Shared/Labels/Components/HandLabelerComponent.cs
@@ -0,0 +1,30 @@
+using Content.Shared.Labels.EntitySystems;
+using Content.Shared.Whitelist;
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.Labels.Components;
+
+[RegisterComponent, NetworkedComponent]
+[Access(typeof(SharedHandLabelerSystem))]
+public sealed partial class HandLabelerComponent : Component
+{
+ [ViewVariables(VVAccess.ReadWrite), Access(Other = AccessPermissions.ReadWriteExecute)]
+ [DataField]
+ public string AssignedLabel = string.Empty;
+
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField]
+ public int MaxLabelChars = 50;
+
+ [DataField]
+ public EntityWhitelist Whitelist = new();
+}
+
+[Serializable, NetSerializable]
+public sealed class HandLabelerComponentState(string assignedLabel) : IComponentState
+{
+ public string AssignedLabel = assignedLabel;
+
+ public int MaxLabelChars;
+}
diff --git a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs
new file mode 100644
index 00000000000..7dbeee3e770
--- /dev/null
+++ b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs
@@ -0,0 +1,129 @@
+using Content.Shared.Administration.Logs;
+using Content.Shared.Database;
+using Content.Shared.Interaction;
+using Content.Shared.Labels.Components;
+using Content.Shared.Popups;
+using Content.Shared.Verbs;
+using Robust.Shared.GameStates;
+using Robust.Shared.Network;
+
+namespace Content.Shared.Labels.EntitySystems;
+
+public abstract class SharedHandLabelerSystem : EntitySystem
+{
+ [Dependency] protected readonly SharedUserInterfaceSystem UserInterfaceSystem = default!;
+ [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
+ [Dependency] private readonly SharedLabelSystem _labelSystem = default!;
+ [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
+ [Dependency] private readonly INetManager _netManager = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(AfterInteractOn);
+ SubscribeLocalEvent>(OnUtilityVerb);
+ // Bound UI subscriptions
+ SubscribeLocalEvent(OnHandLabelerLabelChanged);
+ SubscribeLocalEvent(OnGetState);
+ SubscribeLocalEvent(OnHandleState);
+ }
+
+ private void OnGetState(Entity ent, ref ComponentGetState args)
+ {
+ args.State = new HandLabelerComponentState(ent.Comp.AssignedLabel)
+ {
+ MaxLabelChars = ent.Comp.MaxLabelChars,
+ };
+ }
+
+ private void OnHandleState(Entity ent, ref ComponentHandleState args)
+ {
+ if (args.Current is not HandLabelerComponentState state)
+ return;
+
+ ent.Comp.MaxLabelChars = state.MaxLabelChars;
+
+ if (ent.Comp.AssignedLabel == state.AssignedLabel)
+ return;
+
+ ent.Comp.AssignedLabel = state.AssignedLabel;
+ UpdateUI(ent);
+ }
+
+ protected virtual void UpdateUI(Entity ent)
+ {
+ }
+
+ private void AddLabelTo(EntityUid uid, HandLabelerComponent? handLabeler, EntityUid target, out string? result)
+ {
+ if (!Resolve(uid, ref handLabeler))
+ {
+ result = null;
+ return;
+ }
+
+ if (handLabeler.AssignedLabel == string.Empty)
+ {
+ if (_netManager.IsServer)
+ _labelSystem.Label(target, null);
+ result = Loc.GetString("hand-labeler-successfully-removed");
+ return;
+ }
+ if (_netManager.IsServer)
+ _labelSystem.Label(target, handLabeler.AssignedLabel);
+ result = Loc.GetString("hand-labeler-successfully-applied");
+ }
+
+ private void OnUtilityVerb(EntityUid uid, HandLabelerComponent handLabeler, GetVerbsEvent args)
+ {
+ if (args.Target is not { Valid: true } target || !handLabeler.Whitelist.IsValid(target) || !args.CanAccess)
+ return;
+
+ var labelerText = handLabeler.AssignedLabel == string.Empty ? Loc.GetString("hand-labeler-remove-label-text") : Loc.GetString("hand-labeler-add-label-text");
+
+ var verb = new UtilityVerb()
+ {
+ Act = () =>
+ {
+ Labeling(uid, target, args.User, handLabeler);
+ },
+ Text = labelerText
+ };
+
+ args.Verbs.Add(verb);
+ }
+
+ private void AfterInteractOn(EntityUid uid, HandLabelerComponent handLabeler, AfterInteractEvent args)
+ {
+ if (args.Target is not { Valid: true } target || !handLabeler.Whitelist.IsValid(target) || !args.CanReach)
+ return;
+
+ Labeling(uid, target, args.User, handLabeler);
+ }
+
+ private void Labeling(EntityUid uid, EntityUid target, EntityUid User, HandLabelerComponent handLabeler)
+ {
+ AddLabelTo(uid, handLabeler, target, out var result);
+ if (result == null)
+ return;
+
+ _popupSystem.PopupClient(result, User, User);
+
+ // Log labeling
+ _adminLogger.Add(LogType.Action, LogImpact.Low,
+ $"{ToPrettyString(User):user} labeled {ToPrettyString(target):target} with {ToPrettyString(uid):labeler}");
+ }
+
+ private void OnHandLabelerLabelChanged(EntityUid uid, HandLabelerComponent handLabeler, HandLabelerLabelChangedMessage args)
+ {
+ var label = args.Label.Trim();
+ handLabeler.AssignedLabel = label[..Math.Min(handLabeler.MaxLabelChars, label.Length)];
+ UpdateUI((uid, handLabeler));
+ Dirty(uid, handLabeler);
+
+ // Log label change
+ _adminLogger.Add(LogType.Action, LogImpact.Low,
+ $"{ToPrettyString(args.Actor):user} set {ToPrettyString(uid):labeler} to apply label \"{handLabeler.AssignedLabel}\"");
+ }
+}
diff --git a/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs b/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs
index a8239e7867b..1189bb46d04 100644
--- a/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs
+++ b/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs
@@ -13,6 +13,8 @@ public override void Initialize()
SubscribeLocalEvent(OnExamine);
}
+ public virtual void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null){}
+
private void OnExamine(EntityUid uid, LabelComponent? label, ExaminedEvent args)
{
if (!Resolve(uid, ref label))
diff --git a/Content.Shared/Labels/LabelEvents.cs b/Content.Shared/Labels/LabelEvents.cs
index 9f00354af24..62e9c15c85e 100644
--- a/Content.Shared/Labels/LabelEvents.cs
+++ b/Content.Shared/Labels/LabelEvents.cs
@@ -1,47 +1,27 @@
using Robust.Shared.Serialization;
-namespace Content.Shared.Labels
-{
- ///
- /// Key representing which is currently open.
- /// Useful when there are multiple UI for an object. Here it's future-proofing only.
- ///
- [Serializable, NetSerializable]
- public enum HandLabelerUiKey
- {
- Key,
- }
-
- [Serializable, NetSerializable]
- public enum PaperLabelVisuals : byte
- {
- Layer,
- HasLabel,
- LabelType
- }
+namespace Content.Shared.Labels;
- ///
- /// Represents a state that can be sent to the client
- ///
- [Serializable, NetSerializable]
- public sealed class HandLabelerBoundUserInterfaceState : BoundUserInterfaceState
- {
- public string CurrentLabel { get; }
-
- public HandLabelerBoundUserInterfaceState(string currentLabel)
- {
- CurrentLabel = currentLabel;
- }
- }
+///
+/// Key representing which is currently open.
+/// Useful when there are multiple UI for an object. Here it's future-proofing only.
+///
+[Serializable, NetSerializable]
+public enum HandLabelerUiKey
+{
+ Key,
+}
- [Serializable, NetSerializable]
- public sealed class HandLabelerLabelChangedMessage : BoundUserInterfaceMessage
- {
- public string Label { get; }
+[Serializable, NetSerializable]
+public enum PaperLabelVisuals : byte
+{
+ Layer,
+ HasLabel,
+ LabelType
+}
- public HandLabelerLabelChangedMessage(string label)
- {
- Label = label;
- }
- }
+[Serializable, NetSerializable]
+public sealed class HandLabelerLabelChangedMessage(string label) : BoundUserInterfaceMessage
+{
+ public string Label { get; } = label;
}
diff --git a/Content.Shared/Preferences/Loadouts/Effects/SpeciesLoadoutEffect.cs b/Content.Shared/Preferences/Loadouts/Effects/SpeciesLoadoutEffect.cs
new file mode 100644
index 00000000000..74673cbef39
--- /dev/null
+++ b/Content.Shared/Preferences/Loadouts/Effects/SpeciesLoadoutEffect.cs
@@ -0,0 +1,6 @@
+namespace Content.Shared.Preferences.Loadouts.Effects;
+
+public sealed class SpeciesLoadoutEffect
+{
+
+}
diff --git a/Content.Shared/Prying/Systems/PryingSystem.cs b/Content.Shared/Prying/Systems/PryingSystem.cs
index 5a15057f1e3..ab87585c706 100644
--- a/Content.Shared/Prying/Systems/PryingSystem.cs
+++ b/Content.Shared/Prying/Systems/PryingSystem.cs
@@ -107,7 +107,7 @@ private bool CanPry(EntityUid target, EntityUid user, out string? message, Pryin
{
BeforePryEvent canev;
- if (comp != null || Resolve(user, ref comp))
+ if (comp != null || Resolve(user, ref comp, false))
{
canev = new BeforePryEvent(user, comp.PryPowered, comp.Force);
}
diff --git a/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerComponent.cs b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerComponent.cs
new file mode 100644
index 00000000000..9efd78d0825
--- /dev/null
+++ b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerComponent.cs
@@ -0,0 +1,10 @@
+using Content.Shared.Inventory;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.StepTrigger.Components;
+
+///
+/// This is used for marking step trigger events that require the user to wear shoes, such as for glass shards.
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class ClothingRequiredStepTriggerComponent : Component;
diff --git a/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerImmuneComponent.cs b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerImmuneComponent.cs
new file mode 100644
index 00000000000..dc76207828c
--- /dev/null
+++ b/Content.Shared/StepTrigger/Components/ClothingRequiredStepTriggerImmuneComponent.cs
@@ -0,0 +1,16 @@
+using Content.Shared.Inventory;
+using Content.Shared.StepTrigger.Systems;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.StepTrigger.Components;
+
+///
+/// This is used for cancelling step trigger events if the user is wearing clothing in a valid slot.
+///
+[RegisterComponent, NetworkedComponent]
+[Access(typeof(StepTriggerImmuneSystem))]
+public sealed partial class ClothingRequiredStepTriggerImmuneComponent : Component, IClothingSlots
+{
+ [DataField]
+ public SlotFlags Slots { get; set; } = SlotFlags.FEET;
+}
diff --git a/Content.Shared/StepTrigger/Components/ShoesRequiredStepTriggerComponent.cs b/Content.Shared/StepTrigger/Components/ShoesRequiredStepTriggerComponent.cs
deleted file mode 100644
index dd95b94a7ef..00000000000
--- a/Content.Shared/StepTrigger/Components/ShoesRequiredStepTriggerComponent.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Robust.Shared.GameStates;
-
-namespace Content.Shared.StepTrigger.Components;
-
-///
-/// This is used for cancelling step trigger events if the user is wearing shoes, such as for glass shards.
-///
-[RegisterComponent, NetworkedComponent]
-public sealed partial class ShoesRequiredStepTriggerComponent : Component
-{
-}
diff --git a/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs b/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs
new file mode 100644
index 00000000000..74e10bafcea
--- /dev/null
+++ b/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs
@@ -0,0 +1,9 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.StepTrigger.Components;
+
+///
+/// Grants the attached entity to step triggers.
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class StepTriggerImmuneComponent : Component;
diff --git a/Content.Shared/StepTrigger/Systems/ShoesRequiredStepTriggerSystem.cs b/Content.Shared/StepTrigger/Systems/ShoesRequiredStepTriggerSystem.cs
deleted file mode 100644
index 5fc9140dfd0..00000000000
--- a/Content.Shared/StepTrigger/Systems/ShoesRequiredStepTriggerSystem.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Content.Shared.Examine;
-using Content.Shared.Inventory;
-using Content.Shared.StepTrigger.Components;
-using Content.Shared.Tag;
-
-namespace Content.Shared.StepTrigger.Systems;
-
-public sealed class ShoesRequiredStepTriggerSystem : EntitySystem
-{
- [Dependency] private readonly InventorySystem _inventory = default!;
- [Dependency] private readonly TagSystem _tagSystem = default!;
-
- ///
- public override void Initialize()
- {
- SubscribeLocalEvent(OnStepTriggerAttempt);
- SubscribeLocalEvent(OnExamined);
- }
-
- private void OnStepTriggerAttempt(EntityUid uid, ShoesRequiredStepTriggerComponent component, ref StepTriggerAttemptEvent args)
- {
- if (_tagSystem.HasTag(args.Tripper, "ShoesRequiredStepTriggerImmune"))
- {
- args.Cancelled = true;
- return;
- }
-
- if (!TryComp(args.Tripper, out var inventory))
- return;
-
- if (_inventory.TryGetSlotEntity(args.Tripper, "shoes", out _, inventory))
- {
- args.Cancelled = true;
- }
- }
-
- private void OnExamined(EntityUid uid, ShoesRequiredStepTriggerComponent component, ExaminedEvent args)
- {
- args.PushMarkup(Loc.GetString("shoes-required-step-trigger-examine"));
- }
-}
diff --git a/Content.Shared/StepTrigger/Systems/StepTriggerImmuneSystem.cs b/Content.Shared/StepTrigger/Systems/StepTriggerImmuneSystem.cs
new file mode 100644
index 00000000000..ca72a20ae9c
--- /dev/null
+++ b/Content.Shared/StepTrigger/Systems/StepTriggerImmuneSystem.cs
@@ -0,0 +1,37 @@
+using Content.Shared.Examine;
+using Content.Shared.Inventory;
+using Content.Shared.StepTrigger.Components;
+using Content.Shared.Tag;
+
+namespace Content.Shared.StepTrigger.Systems;
+
+public sealed class StepTriggerImmuneSystem : EntitySystem
+{
+ [Dependency] private readonly InventorySystem _inventory = default!;
+
+ ///
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnStepTriggerAttempt);
+ SubscribeLocalEvent(OnStepTriggerClothingAttempt);
+ SubscribeLocalEvent(OnExamined);
+ }
+
+ private void OnStepTriggerAttempt(Entity ent, ref StepTriggerAttemptEvent args)
+ {
+ args.Cancelled = true;
+ }
+
+ private void OnStepTriggerClothingAttempt(EntityUid uid, ClothingRequiredStepTriggerComponent component, ref StepTriggerAttemptEvent args)
+ {
+ if (_inventory.TryGetInventoryEntity(args.Tripper, out _))
+ {
+ args.Cancelled = true;
+ }
+ }
+
+ private void OnExamined(EntityUid uid, ClothingRequiredStepTriggerComponent component, ExaminedEvent args)
+ {
+ args.PushMarkup(Loc.GetString("clothing-required-step-trigger-examine"));
+ }
+}
diff --git a/Content.Shared/UserInterface/ActivatableUIComponent.cs b/Content.Shared/UserInterface/ActivatableUIComponent.cs
index 74e61349328..136a1f82cff 100644
--- a/Content.Shared/UserInterface/ActivatableUIComponent.cs
+++ b/Content.Shared/UserInterface/ActivatableUIComponent.cs
@@ -8,7 +8,7 @@ namespace Content.Shared.UserInterface
public sealed partial class ActivatableUIComponent : Component
{
[DataField(required: true, customTypeSerializer: typeof(EnumSerializer))]
- public Enum Key { get; set; } = default!;
+ public Enum? Key { get; set; } = default!;
[ViewVariables(VVAccess.ReadWrite)]
[DataField]
diff --git a/Content.Shared/UserInterface/ActivatableUISystem.Power.cs b/Content.Shared/UserInterface/ActivatableUISystem.Power.cs
index c9042243281..64099c9573e 100644
--- a/Content.Shared/UserInterface/ActivatableUISystem.Power.cs
+++ b/Content.Shared/UserInterface/ActivatableUISystem.Power.cs
@@ -21,7 +21,8 @@ private void OnPowerCellRemoved(EntityUid uid, PowerCellDrawComponent component,
_cell.SetPowerCellDrawEnabled(uid, false);
if (HasComp(uid) &&
- TryComp(uid, out var activatable))
+ TryComp(uid, out var activatable) &&
+ activatable.Key != null)
{
_uiSystem.CloseUi(uid, activatable.Key);
}
@@ -54,7 +55,7 @@ private void OnBatteryClosed(EntityUid uid, ActivatableUIRequiresPowerCellCompon
///
public void CheckUsage(EntityUid uid, ActivatableUIComponent? active = null, ActivatableUIRequiresPowerCellComponent? component = null, PowerCellDrawComponent? draw = null)
{
- if (!Resolve(uid, ref component, ref draw, ref active, false))
+ if (!Resolve(uid, ref component, ref draw, ref active, false) || active.Key == null)
return;
if (_cell.HasActivatableCharge(uid))
diff --git a/Content.Shared/UserInterface/ActivatableUISystem.cs b/Content.Shared/UserInterface/ActivatableUISystem.cs
index 5d848c0fdec..94271cc6812 100644
--- a/Content.Shared/UserInterface/ActivatableUISystem.cs
+++ b/Content.Shared/UserInterface/ActivatableUISystem.cs
@@ -136,7 +136,7 @@ private void OnUIClose(EntityUid uid, ActivatableUIComponent component, BoundUIC
private bool InteractUI(EntityUid user, EntityUid uiEntity, ActivatableUIComponent aui)
{
- if (!_uiSystem.HasUi(uiEntity, aui.Key))
+ if (aui.Key == null || !_uiSystem.HasUi(uiEntity, aui.Key))
return false;
if (_uiSystem.IsUiOpen(uiEntity, aui.Key, user))
@@ -205,10 +205,7 @@ public void SetCurrentSingleUser(EntityUid uid, EntityUid? user, ActivatableUICo
public void CloseAll(EntityUid uid, ActivatableUIComponent? aui = null)
{
- if (!Resolve(uid, ref aui, false))
- return;
-
- if (!_uiSystem.HasUi(uid, aui.Key))
+ if (!Resolve(uid, ref aui, false) || aui.Key == null)
return;
_uiSystem.CloseUi(uid, aui.Key);
diff --git a/Content.Shared/Weapons/Reflect/ReflectSystem.cs b/Content.Shared/Weapons/Reflect/ReflectSystem.cs
index 4a7c2f6b6a7..014b3cfe1ff 100644
--- a/Content.Shared/Weapons/Reflect/ReflectSystem.cs
+++ b/Content.Shared/Weapons/Reflect/ReflectSystem.cs
@@ -57,7 +57,7 @@ private void OnReflectUserHitscan(EntityUid uid, ReflectUserComponent component,
if (args.Reflected)
return;
- foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET))
+ foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.WITHOUT_POCKET))
{
if (!TryReflectHitscan(uid, ent, args.Shooter, args.SourceItem, args.Direction, out var dir))
continue;
@@ -70,7 +70,7 @@ private void OnReflectUserHitscan(EntityUid uid, ReflectUserComponent component,
private void OnReflectUserCollide(EntityUid uid, ReflectUserComponent component, ref ProjectileReflectAttemptEvent args)
{
- foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET))
+ foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.WITHOUT_POCKET))
{
if (!TryReflectProjectile(uid, ent, args.ProjUid))
continue;
@@ -222,7 +222,7 @@ private void OnToggleReflect(EntityUid uid, ReflectComponent comp, ref ItemToggl
///
private void RefreshReflectUser(EntityUid user)
{
- foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(user, SlotFlags.All & ~SlotFlags.POCKET))
+ foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(user, SlotFlags.WITHOUT_POCKET))
{
if (!HasComp(ent))
continue;
diff --git a/Content.Tests/Shared/DamageTest.cs b/Content.Tests/Shared/DamageTest.cs
index 11b810bf36a..88beca8841c 100644
--- a/Content.Tests/Shared/DamageTest.cs
+++ b/Content.Tests/Shared/DamageTest.cs
@@ -168,45 +168,57 @@ public void ModifierSetTest()
private string _damagePrototypes = @"
- type: damageType
id: Blunt
+ name: damage-type-blunt
- type: damageType
id: Slash
+ name: damage-type-slash
- type: damageType
id: Piercing
+ name: damage-type-piercing
- type: damageType
id: Heat
+ name: damage-type-heat
- type: damageType
id: Shock
+ name: damage-type-shock
- type: damageType
id: Cold
+ name: damage-type-cold
# Poison damage. Generally caused by various reagents being metabolised.
- type: damageType
id: Poison
+ name: damage-type-poison
- type: damageType
id: Radiation
+ name: damage-type-radiation
# Damage due to being unable to breathe.
# Represents not enough oxygen (or equivalent) getting to the blood.
# Usually healed automatically if entity can breathe
- type: damageType
id: Asphyxiation
+ name: damage-type-asphyxiation
# Damage representing not having enough blood.
# Represents there not enough blood to supply oxygen (or equivalent).
- type: damageType
id: Bloodloss
+ name: damage-type-bloodloss
- type: damageType
id: Cellular
+ name: damage-type-cellular
- type: damageGroup
id: Brute
+ name: damage-group-brute
damageTypes:
- Blunt
- Slash
@@ -214,6 +226,7 @@ public void ModifierSetTest()
- type: damageGroup
id: Burn
+ name: damage-group-burn
damageTypes:
- Heat
- Shock
@@ -225,6 +238,7 @@ public void ModifierSetTest()
# bloodloss, not this whole group, unless you have a wonder drug that affects both.
- type: damageGroup
id: Airloss
+ name: damage-group-airloss
damageTypes:
- Asphyxiation
- Bloodloss
@@ -233,12 +247,14 @@ public void ModifierSetTest()
# Though there are probably some radioactive poisons.
- type: damageGroup
id: Toxin
+ name: damage-group-toxin
damageTypes:
- Poison
- Radiation
- type: damageGroup
id: Genetic
+ name: damage-group-genetic
damageTypes:
- Cellular
diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml
index 675e4fff24e..b3ae4f611f9 100644
--- a/Resources/Audio/Items/attributions.yml
+++ b/Resources/Audio/Items/attributions.yml
@@ -127,3 +127,10 @@
license: "CC0-1.0"
copyright: "Original sound by stomachache on freesound.org, processed by vanilla"
source: "https://freesound.org/s/262213/"
+
+- files:
+ - "sheath.ogg"
+ - "unsheath.ogg"
+ license: "CC-BY-SA-3.0"
+ copyright: "Taken from tgstation."
+ source: "https://github.com/tgstation/tgstation/blob/a7f525bce9a359ab5282fc754078cd4b5678a006/sound/items"
diff --git a/Resources/Audio/Items/sheath.ogg b/Resources/Audio/Items/sheath.ogg
new file mode 100644
index 00000000000..9e1d5cdc009
Binary files /dev/null and b/Resources/Audio/Items/sheath.ogg differ
diff --git a/Resources/Audio/Items/unsheath.ogg b/Resources/Audio/Items/unsheath.ogg
new file mode 100644
index 00000000000..09867f5966a
Binary files /dev/null and b/Resources/Audio/Items/unsheath.ogg differ
diff --git a/Resources/Audio/Machines/warning_buzzer.ogg b/Resources/Audio/Machines/warning_buzzer.ogg
index 55bb179f57d..bef16f46fb9 100644
Binary files a/Resources/Audio/Machines/warning_buzzer.ogg and b/Resources/Audio/Machines/warning_buzzer.ogg differ
diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml
index 186b0500aec..fe1a1f56d7e 100644
--- a/Resources/Changelog/Admin.yml
+++ b/Resources/Changelog/Admin.yml
@@ -175,5 +175,24 @@ Entries:
id: 23
time: '2024-04-26T00:25:57.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/27319
+- author: Errant
+ changes:
+ - message: When spawning vox for admemes, they should be given/spawned in a nitrogen-filled
+ space if possible. If they must be placed in normal air, an alternate vox prototype
+ now comes with breathing gear and N2 tank already equipped, but the internals
+ must be turned on via right click and even if you do this instantly they will
+ still probably take ~4 poison damage from the air, so heal them afterwards.
+ type: Add
+ id: 24
+ time: '2024-04-27T10:33:35.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26705
+- author: Tainakov
+ changes:
+ - message: +Adminchat flag is added. Now to gain access to the admin chat you will
+ need this flag.
+ type: Add
+ id: 25
+ time: '2024-04-27T11:17:47.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26930
Name: Admin
Order: 1
diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml
index bcd2b08f734..de917dac2e0 100644
--- a/Resources/Changelog/Changelog.yml
+++ b/Resources/Changelog/Changelog.yml
@@ -1,243 +1,4 @@
Entries:
-- author: PotentiallyTom
- changes:
- - message: Added new covers for the medical, security, and science guidebooks
- type: Add
- id: 5951
- time: '2024-02-16T23:50:49.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25232
-- author: PJB3005
- changes:
- - message: Fix some rounding issues with complex chemical reactions.
- type: Fix
- id: 5952
- time: '2024-02-16T23:54:27.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25199
-- author: data_redacted
- changes:
- - message: New lobby art (of an Air Alarm blueprint).
- type: Add
- id: 5953
- time: '2024-02-17T02:52:17.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25179
-- author: Lank
- changes:
- - message: Diona nymphs, small cat-like creatures, several of which make up a Diona.
- type: Add
- - message: Diona are now able to split into three nymphs on death, and will control
- one of them. The controlled nymph is able to reform into a new diona after some
- time.
- type: Add
- - message: Diona now combust into flames upon being hit with significant heat damage.
- type: Tweak
- id: 5954
- time: '2024-02-17T02:54:45.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/24630
-- author: PolterTzi
- changes:
- - message: Seeds from sampled plants now inherit the sampled plant's health to discourage
- excessive sampling.
- type: Tweak
- - message: Plants need to grow a bit before being sampled.
- type: Tweak
- id: 5955
- time: '2024-02-17T05:02:12.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25326
-- author: Dygon
- changes:
- - message: Diona nymphs aren't deleted immediately after spawning anymore.
- type: Fix
- id: 5956
- time: '2024-02-17T16:38:21.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25344
-- author: Geekyhobo
- changes:
- - message: Massban Flag has been added to admin ranks
- type: Add
- id: 5957
- time: '2024-02-17T20:32:21.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25327
-- author: Moomoobeef
- changes:
- - message: Detectives are now supplied with a box of evidence markers, useful for
- marking evidence at a crime scene.
- type: Add
- id: 5958
- time: '2024-02-17T20:49:16.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25255
-- author: Ubaser
- changes:
- - message: New "tailed" hair.
- type: Add
- id: 5959
- time: '2024-02-17T20:49:48.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25216
-- author: Ubaser
- changes:
- - message: A new chest scar marking is now available to humans and dwarves.
- type: Add
- id: 5960
- time: '2024-02-17T20:50:40.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25215
-- author: ArchPigeon
- changes:
- - message: Tails now stop wagging on crit
- type: Fix
- id: 5961
- time: '2024-02-17T21:33:10.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25323
-- author: Killerqu00
- changes:
- - message: EVA and paramedic suits now play sound when putting helmet on.
- type: Fix
- id: 5962
- time: '2024-02-17T22:34:39.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25349
-- author: musicmanvr
- changes:
- - message: Toned down the newton cradle and added it to the bureaucracy crate for
- bored accountants.
- type: Fix
- id: 5963
- time: '2024-02-17T23:55:58.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25357
-- author: genderGeometries
- changes:
- - message: Allicin, nutriment, and vitamin can now be centrifuged. Protein and fat
- can now be electrolyzed.
- type: Add
- id: 5964
- time: '2024-02-19T06:05:43.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25366
-- author: azurerosegarden
- changes:
- - message: Drinks in the Solar's Best Hot Drinks menu now show their contents
- type: Fix
- id: 5965
- time: '2024-02-19T15:40:43.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25301
-- author: Lank
- changes:
- - message: Nymphs can now open doors and chirp.
- type: Tweak
- id: 5966
- time: '2024-02-19T17:11:20.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25363
-- author: PotentiallyTom
- changes:
- - message: Gave guidebooks to the 4 learner roles
- type: Tweak
- id: 5967
- time: '2024-02-19T18:54:02.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25388
-- author: jamessimo
- changes:
- - message: vending machine UI improved
- type: Tweak
- id: 5968
- time: '2024-02-19T22:18:27.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25377
-- author: marbow
- changes:
- - message: Moths can now eat plushies and with a distinctive sound!
- type: Add
- id: 5969
- time: '2024-02-19T22:35:35.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25382
-- author: ArchPigeon
- changes:
- - message: Liquid Tritium can now be used as a chem in flamethrowers
- type: Add
- id: 5970
- time: '2024-02-19T22:37:45.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25281
-- author: ElectroJr
- changes:
- - message: Fix actions sometimes disappearing.
- type: Fix
- id: 5971
- time: '2024-02-20T02:08:41.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25395
-- author: PJB3005
- changes:
- - message: Fixed timezone issues with the admin notes window.
- type: Fix
- id: 5972
- time: '2024-02-20T09:13:31.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25280
-- author: PJB3005
- changes:
- - message: Fixed selection behavior for player lists such as the ban panel or ahelp
- window.
- type: Fix
- id: 5973
- time: '2024-02-20T09:13:48.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25248
-- author: Tonydatguy
- changes:
- - message: Ore Crabs will now take structural damage.
- type: Tweak
- id: 5974
- time: '2024-02-20T10:43:16.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25390
-- author: Golinth
- changes:
- - message: The mindshield outline now flashes!
- type: Tweak
- id: 5975
- time: '2024-02-20T22:26:48.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25409
-- author: landwhale
- changes:
- - message: Resprited Nettles & Death Nettles.
- type: Tweak
- id: 5976
- time: '2024-02-20T23:58:08.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25421
-- author: takemysoult
- changes:
- - message: Explosive Technology changed to tier 2 arsenal and the cost has increased
- to 10 000
- type: Tweak
- id: 5977
- time: '2024-02-21T00:56:39.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25397
-- author: Callmore
- changes:
- - message: Shoving other people is now more consistent.
- type: Fix
- id: 5978
- time: '2024-02-21T04:01:45.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25353
-- author: Ubaser
- changes:
- - message: A new UI theme, "Ashen", is now available to select in the options menu.
- type: Add
- id: 5979
- time: '2024-02-21T05:26:55.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25408
-- author: Holinka4ever
- changes:
- - message: Sunglasses were removed from ClothesMate
- type: Remove
- id: 5980
- time: '2024-02-21T06:11:02.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25221
-- author: Errant
- changes:
- - message: Rotten food is now less lethal to eat, and has a high chance to induce
- vomiting.
- type: Tweak
- id: 5981
- time: '2024-02-21T06:12:59.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25418
-- author: EdenTheLiznerd
- changes:
- - message: Deathnettles no longer penetrate hardsuit armor
- type: Tweak
- id: 5982
- time: '2024-02-21T06:16:25.0000000+00:00'
- url: https://github.com/space-wizards/space-station-14/pull/25286
- author: Tayrtahn
changes:
- message: Added fill level visuals to all the drinks. Cheers!
@@ -3855,3 +3616,255 @@
id: 6450
time: '2024-04-26T22:58:26.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/27361
+- author: AllenTheGreat
+ changes:
+ - message: The Agent ID card will no longer reset the selected job icon between
+ UI loads
+ type: Fix
+ id: 6451
+ time: '2024-04-27T05:13:13.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27379
+- author: Slava0135
+ changes:
+ - message: added cancer mouse! (for real this time)
+ type: Add
+ id: 6452
+ time: '2024-04-27T05:46:50.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26768
+- author: EmoGarbage404
+ changes:
+ - message: Added the welding gas mask to salvage equipment research.
+ type: Add
+ id: 6453
+ time: '2024-04-27T05:47:38.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27108
+- author: VigersRay
+ changes:
+ - message: Angered NPC now can unbuckle, unpull and escape from containers.
+ type: Fix
+ id: 6454
+ time: '2024-04-27T05:58:10.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26868
+- author: Lukasz825700516
+ changes:
+ - message: Fixed undeconstructable objects showing deconstruct verb.
+ type: Fix
+ id: 6455
+ time: '2024-04-27T06:30:30.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27387
+- author: ps3moira
+ changes:
+ - message: Added Canes to the CuraDrobe and Cane Blades for Syndicate Librarians
+ type: Add
+ id: 6456
+ time: '2024-04-27T10:22:10.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/25873
+- author: Lukasz825700516
+ changes:
+ - message: Fixed books containing localization keys.
+ type: Fix
+ id: 6457
+ time: '2024-04-27T10:23:55.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27390
+- author: Errant
+ changes:
+ - message: Vox now take significant damage over time while inhaling oxygen.
+ type: Tweak
+ id: 6458
+ time: '2024-04-27T10:33:35.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26705
+- author: TheShuEd
+ changes:
+ - message: Added tomato killers in floral anomaly berries
+ type: Add
+ - message: tweak size and damage of killer tomatoes
+ type: Tweak
+ id: 6459
+ time: '2024-04-27T10:35:13.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27265
+- author: Plykiya
+ changes:
+ - message: You can no longer print singular bullets at the security techfab.
+ type: Remove
+ - message: The security techfab now has recipes for ammunition boxes and pre-filled
+ magazines of every type of ammo.
+ type: Add
+ - message: You can now print empty magazines at the security techfab.
+ type: Add
+ - message: Material costs for printing all ammo and mags were rebalanced.
+ type: Tweak
+ id: 6460
+ time: '2024-04-27T10:38:59.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26178
+- author: Ramlik
+ changes:
+ - message: Added security walkie talkies to the vendor.
+ type: Add
+ id: 6461
+ time: '2024-04-27T13:27:18.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/25913
+- author: brainfood1183
+ changes:
+ - message: Centcom advises all crewmembers to please stop putting rodents in the
+ fax machines (rodents can now be inserted into fax machine).
+ type: Add
+ id: 6462
+ time: '2024-04-27T13:50:57.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/21461
+- author: MilenVolf
+ changes:
+ - message: Glass Box now can be constructed and deconstructed!
+ type: Add
+ - message: Glass Box now makes an alarm sound on destruction.
+ type: Tweak
+ - message: Now Antique Laser can be put back in the Glass Box.
+ type: Fix
+ id: 6463
+ time: '2024-04-27T13:53:16.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/25365
+- author: metalgearsloth
+ changes:
+ - message: Fix a lot of UI bugs.
+ type: Fix
+ id: 6464
+ time: '2024-04-27T16:32:57.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27401
+- author: RiceMar1244
+ changes:
+ - message: Resprited the captain's antique laser pistol.
+ type: Tweak
+ id: 6465
+ time: '2024-04-27T19:08:38.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27037
+- author: SlamBamActionman
+ changes:
+ - message: Hardsuits and other helmets/hoods should no longer make you bald after
+ toggling.
+ type: Fix
+ id: 6466
+ time: '2024-04-27T19:10:47.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27404
+- author: Plykiya
+ changes:
+ - message: Max amount of traitors dropped from 12 to 8.
+ type: Tweak
+ id: 6467
+ time: '2024-04-28T02:25:19.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27415
+- author: Plykiya
+ changes:
+ - message: The emagged autolathe now has recipes for ammunition boxes and pre-filled
+ magazines of every type of ammo.
+ type: Add
+ - message: You can now print empty magazines at the emagged autolathe.
+ type: Add
+ id: 6468
+ time: '2024-04-28T03:02:56.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27396
+- author: icekot8
+ changes:
+ - message: T3 Portable Microfusion Weaponry research now have a portable charger
+ type: Add
+ id: 6469
+ time: '2024-04-28T03:19:33.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26655
+- author: osjarw
+ changes:
+ - message: Putting a hand labeler in a belt is now predicted correctly.
+ type: Fix
+ id: 6470
+ time: '2024-04-28T04:19:30.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26660
+- author: Dezzzix
+ changes:
+ - message: Added bar spoon, jigger and ice bucket
+ type: Add
+ - message: Bartender tools added in boozeomat
+ type: Add
+ - message: Jigger added in Bartender guidebook
+ type: Add
+ id: 6471
+ time: '2024-04-28T04:40:07.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27406
+- author: KrasnoshchekovPavel
+ changes:
+ - message: Included damage type/group, metabolism type/group localization for weapon
+ damage examination and guidebook reagent effects
+ type: Fix
+ id: 6472
+ time: '2024-04-28T04:48:20.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27368
+- author: Keer-Sar
+ changes:
+ - message: Medal Cases now only hold medals
+ type: Tweak
+ id: 6473
+ time: '2024-04-28T05:04:49.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27428
+- author: EmoGarbage404
+ changes:
+ - message: Lockers can now be deconstructed again.
+ type: Fix
+ id: 6474
+ time: '2024-04-28T05:26:56.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27431
+- author: SlamBamActionman
+ changes:
+ - message: "Removed Exterminators pending redesign. \U0001F525\U0001F44D\U0001F525"
+ type: Remove
+ id: 6475
+ time: '2024-04-28T05:45:54.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26978
+- author: Boaz1111
+ changes:
+ - message: Circuit imprinter recipes now cost less glass
+ type: Tweak
+ id: 6476
+ time: '2024-04-28T05:46:53.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27310
+- author: Piksqu & Boaz1111
+ changes:
+ - message: Added the hyperconvection circuit imprinter
+ type: Add
+ id: 6477
+ time: '2024-04-28T05:49:03.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27283
+- author: exincore
+ changes:
+ - message: Fax machines now copy the labels attached to papers.
+ type: Add
+ - message: Fax machine "Print File" functionality now applies the first line of
+ the file as a label when it begins with `#`.
+ type: Add
+ id: 6478
+ time: '2024-04-28T06:12:45.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/25979
+- author: Plykiya
+ changes:
+ - message: Hardsuits, EVA suits, firesuits and other things now protect your feet
+ from dangerous glass shards.
+ type: Tweak
+ id: 6479
+ time: '2024-04-28T07:11:46.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/26764
+- author: FungiFellow
+ changes:
+ - message: Bows now fit in Exosuit slot.
+ type: Tweak
+ id: 6480
+ time: '2024-04-28T08:23:28.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27433
+- author: osjarw
+ changes:
+ - message: Fixed some anomaly behaviours pulsing at wrong rates.
+ type: Fix
+ id: 6481
+ time: '2024-04-28T09:28:16.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27435
+- author: Ubaser
+ changes:
+ - message: Pyrotton can now be mutated from cotton.
+ type: Add
+ id: 6482
+ time: '2024-04-28T11:07:37.0000000+00:00'
+ url: https://github.com/space-wizards/space-station-14/pull/27200
diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt
index cffbe61d2b9..e212aa149e5 100644
--- a/Resources/Credits/GitHub.txt
+++ b/Resources/Credits/GitHub.txt
@@ -1 +1 @@
-0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUmAndXGabriel08X, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BellwetherLogic, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, Callmore, CaptainSqrBeard, Carbonhell, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DmitriyMX, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DoutorWhite, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Froffy025, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, Jark255, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, Kadeo64, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mephisto72, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, pigeonpeas, pissdemon, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, wafehling, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem
+0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUmAndXGabriel08X, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BellwetherLogic, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, Callmore, CaptainSqrBeard, Carbonhell, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DmitriyMX, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DoutorWhite, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Froffy025, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, hitomishirichan, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, Jark255, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, K-Dynamic, Kadeo64, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nairodian, Naive817, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, OctoRocket, OldDanceJacket, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, pigeonpeas, pissdemon, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, ProfanedBane, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulFN, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, superjj18, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, Terraspark4941, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, TokenStyle, tom-leys, tomasalves8, Tomeno, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UBlueberry, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, wafehling, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem
diff --git a/Resources/Locale/en-US/accessories/human-hair.ftl b/Resources/Locale/en-US/accessories/human-hair.ftl
index f052f232de3..7d3467a610c 100644
--- a/Resources/Locale/en-US/accessories/human-hair.ftl
+++ b/Resources/Locale/en-US/accessories/human-hair.ftl
@@ -55,7 +55,6 @@ marking-HumanHairCornrows2 = Cornrows 2
marking-HumanHairCornrowbun = Cornrow Bun
marking-HumanHairCornrowbraid = Cornrow Braid
marking-HumanHairCornrowtail = Cornrow Tail
-marking-HumanHairSpookyLong = Spooky Long
marking-HumanHairCrewcut = Crewcut
marking-HumanHairCrewcut2 = Crewcut 2
marking-HumanHairCurls = Curls
@@ -166,6 +165,7 @@ marking-HumanHairProtagonist = Slightly Long Hair
marking-HumanHairSpikey = Spiky
marking-HumanHairSpiky = Spiky 2
marking-HumanHairSpiky2 = Spiky 3
+marking-HumanHairSpookyLong = Spooky Long
marking-HumanHairSwept = Swept Back Hair
marking-HumanHairSwept2 = Swept Back Hair 2
marking-HumanHairTailed = Tailed
diff --git a/Resources/Locale/en-US/administration/smites.ftl b/Resources/Locale/en-US/administration/smites.ftl
index ae4e6f72715..ff3e3b09018 100644
--- a/Resources/Locale/en-US/administration/smites.ftl
+++ b/Resources/Locale/en-US/administration/smites.ftl
@@ -13,7 +13,6 @@ admin-smite-stomach-removal-self = Your stomach feels hollow...
admin-smite-run-walk-swap-prompt = You have to press shift to run!
admin-smite-super-speed-prompt = You move at mach 0.8!
admin-smite-lung-removal-self = You can't breathe!
-admin-smite-terminate-prompt = I'll be back
## Smite descriptions
@@ -58,7 +57,6 @@ admin-smite-disarm-prone-description = Makes them get disarmed 100% of the time
admin-smite-garbage-can-description = Turn them into a garbage bin to emphasize what they remind you of.
admin-smite-super-bonk-description = Slams them on every single table on the Station and beyond.
admin-smite-super-bonk-lite-description= Slams them on every single table on the Station and beyond. Stops when the target is dead.
-admin-smite-terminate-description = Creates a Terminator ghost role with the sole objective of killing them.
## Tricks descriptions
diff --git a/Resources/Locale/en-US/damage/damage-groups.ftl b/Resources/Locale/en-US/damage/damage-groups.ftl
new file mode 100644
index 00000000000..209cc2f6496
--- /dev/null
+++ b/Resources/Locale/en-US/damage/damage-groups.ftl
@@ -0,0 +1,10 @@
+damage-group-brute = Brute
+damage-group-burn = Burn
+damage-group-airloss = Airloss
+damage-group-toxin = Toxin
+damage-group-genetic = Genetic
+
+# backmen
+damage-group-immaterial = Immaterial
+damage-group-holy = Holy
+damage-group-stun = Stun
diff --git a/Resources/Locale/en-US/damage/damage-types.ftl b/Resources/Locale/en-US/damage/damage-types.ftl
new file mode 100644
index 00000000000..2b0933f60d3
--- /dev/null
+++ b/Resources/Locale/en-US/damage/damage-types.ftl
@@ -0,0 +1,16 @@
+damage-type-asphyxiation = Asphyxiation
+damage-type-bloodloss = Bloodloss
+damage-type-blunt = Blunt
+damage-type-cellular = Cellular
+damage-type-caustic = Caustic
+damage-type-cold = Cold
+damage-type-heat = Heat
+damage-type-piercing = Piercing
+damage-type-poison = Poison
+damage-type-radiation = Radiation
+damage-type-shock = Shock
+damage-type-slash = Slash
+damage-type-structural = Structural
+
+#backmen
+damage-type-stun = Stun
diff --git a/Resources/Locale/en-US/fax/fax.ftl b/Resources/Locale/en-US/fax/fax.ftl
index 1f1881a05d6..412f3d7f435 100644
--- a/Resources/Locale/en-US/fax/fax.ftl
+++ b/Resources/Locale/en-US/fax/fax.ftl
@@ -3,6 +3,8 @@ fax-machine-popup-received = Received correspondence from { $from }.
fax-machine-popup-name-long = Fax name is too long
fax-machine-popup-name-exist = Fax with same name already exist in network
fax-machine-popup-name-set = Fax name has been updated
+fax-machine-popup-error = ERROR - jam in paper feed
+fax-machine-popup-copy-error = ERROR - unable to copy!
fax-machine-dialog-rename = Rename
fax-machine-dialog-field-name = Name
diff --git a/Resources/Locale/en-US/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/flavors/flavor-profiles.ftl
index 41b575b7d63..f861624fb65 100644
--- a/Resources/Locale/en-US/flavors/flavor-profiles.ftl
+++ b/Resources/Locale/en-US/flavors/flavor-profiles.ftl
@@ -168,6 +168,7 @@ flavor-complex-light = like a light gone out
flavor-complex-profits = like profits
flavor-complex-fishops = like the dreaded fishops
flavor-complex-violets = like violets
+flavor-complex-pyrotton = like a burning mouth
flavor-complex-mothballs = like mothballs
flavor-complex-paint-thinner = like paint thinner
diff --git a/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl b/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl
deleted file mode 100644
index 41237a5c10d..00000000000
--- a/Resources/Locale/en-US/game-ticking/game-rules/rule-terminator.ftl
+++ /dev/null
@@ -1,14 +0,0 @@
-terminator-round-end-agent-name = nt-800
-
-objective-issuer-susnet = [color=#d64119]Susnet[/color]
-
-terminator-role-greeting =
- You are the exterminator, a relentless assassin sent into the past to secure our future.
- We need you to eliminate {$target}, {$job}.
- Use any means at your disposal to complete the mission.
- Glory to Cybersun.
-
-terminator-role-briefing = Kill the target at all costs.
-
-terminator-endoskeleton-gib-popup = All the battered flesh falls apart, revealing a titanium endoskeleton!
-terminator-endoskeleton-burn-popup = The seared flesh is burned to a crisp, revealing a titanium endoskeleton!
diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
index 687d225f7a4..c11cbb43ea3 100644
--- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
+++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
@@ -221,10 +221,6 @@ ghost-role-information-BreadDog-name = BreadDog
ghost-role-information-BreadDog-description = You are the chef's favorite child. You're a living bread dog.
ghost-role-information-BreadDog-rules = You're an edible dog made of bread. Your task is to find your place in this world where everything wants to eat you.
-ghost-role-information-exterminator-name = Exterminator
-ghost-role-information-exterminator-description = You been been sent back in time to terminate a target with high importance to the future.
-ghost-role-information-exterminator-rules = You are an antagonist and may kill anyone that tries to stop you, but killing the target is always your top priority.
-
ghost-role-information-space-ninja-name = Space Ninja
ghost-role-information-space-ninja-description = Use stealth and deception to sabotage the station.
ghost-role-information-space-ninja-rules = You are an elite mercenary of the Spider Clan. You aren't required to follow your objectives, yet your NINJA HONOR demands you try.
diff --git a/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl b/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl
index a6c869d6193..bea9c604830 100644
--- a/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl
+++ b/Resources/Locale/en-US/guidebook/chemistry/conditions.ftl
@@ -1,4 +1,4 @@
-reagent-effect-condition-guidebook-total-damage =
+reagent-effect-condition-guidebook-total-damage =
{ $max ->
[2147483648] it has at least {NATURALFIXED($min, 2)} total damage
*[other] { $min ->
@@ -57,3 +57,5 @@ reagent-effect-condition-guidebook-has-tag =
[true] does not have
*[false] has
} the tag {$tag}
+
+reagent-effect-condition-guidebook-this-reagent = this reagent
diff --git a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl
index 648db3f4ebd..8460bcc27b0 100644
--- a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl
+++ b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl
@@ -13,26 +13,4 @@ health-analyzer-window-scan-mode-text = Scan Mode:
health-analyzer-window-scan-mode-active = ACTIVE
health-analyzer-window-scan-mode-inactive = INACTIVE
-health-analyzer-window-damage-group-Brute = Brute
-health-analyzer-window-damage-type-Blunt = Blunt
-health-analyzer-window-damage-type-Slash = Slash
-health-analyzer-window-damage-type-Piercing = Piercing
-
-health-analyzer-window-damage-group-Burn = Burn
-health-analyzer-window-damage-type-Heat = Heat
-health-analyzer-window-damage-type-Shock = Shock
-health-analyzer-window-damage-type-Cold = Cold
-health-analyzer-window-damage-type-Caustic = Caustic
-
-health-analyzer-window-damage-group-Airloss = Airloss
-health-analyzer-window-damage-type-Asphyxiation = Asphyxiation
-health-analyzer-window-damage-type-Bloodloss = Bloodloss
-
-health-analyzer-window-damage-group-Toxin = Toxin
-health-analyzer-window-damage-type-Poison = Poison
-health-analyzer-window-damage-type-Radiation = Radiation
-
-health-analyzer-window-damage-group-Genetic = Genetic
-health-analyzer-window-damage-type-Cellular = Cellular
-
health-analyzer-window-malnutrition = Severely malnourished
diff --git a/Resources/Locale/en-US/metabolism/metabolism-groups.ftl b/Resources/Locale/en-US/metabolism/metabolism-groups.ftl
new file mode 100644
index 00000000000..404d0fc7868
--- /dev/null
+++ b/Resources/Locale/en-US/metabolism/metabolism-groups.ftl
@@ -0,0 +1,7 @@
+metabolism-group-poison = Poison
+metabolism-group-medicine = Medicine
+metabolism-group-narcotic = Narcotic
+metabolism-group-alcohol = Alcohol
+metabolism-group-food = Food
+metabolism-group-drink = Drink
+metabolism-group-gas = Gas
diff --git a/Resources/Locale/en-US/metabolism/metabolizer-types.ftl b/Resources/Locale/en-US/metabolism/metabolizer-types.ftl
new file mode 100644
index 00000000000..372c5c549e0
--- /dev/null
+++ b/Resources/Locale/en-US/metabolism/metabolizer-types.ftl
@@ -0,0 +1,11 @@
+metabolizer-type-animal = Animal
+metabolizer-type-bloodsucker = Bloodsucker
+metabolizer-type-dragon = Dragon
+metabolizer-type-human = Human
+metabolizer-type-slime = Slime
+metabolizer-type-vox = Vox
+metabolizer-type-rat = Rat
+metabolizer-type-plant = Plant
+metabolizer-type-dwarf = Dwarf
+metabolizer-type-moth = Moth
+metabolizer-type-arachnid = Arachnid
diff --git a/Resources/Locale/en-US/objectives/conditions/terminate.ftl b/Resources/Locale/en-US/objectives/conditions/terminate.ftl
deleted file mode 100644
index c88c7b14dae..00000000000
--- a/Resources/Locale/en-US/objectives/conditions/terminate.ftl
+++ /dev/null
@@ -1 +0,0 @@
-objective-terminate-title = Terminate {$targetName}, {CAPITALIZE($job)}
diff --git a/Resources/Locale/en-US/prototypes/roles/antags.ftl b/Resources/Locale/en-US/prototypes/roles/antags.ftl
index 06f8ae06c3e..bdf46526743 100644
--- a/Resources/Locale/en-US/prototypes/roles/antags.ftl
+++ b/Resources/Locale/en-US/prototypes/roles/antags.ftl
@@ -39,6 +39,3 @@ roles-antag-space-ninja-objective = Use your stealth to sabotage the station, no
roles-antag-thief-name = Thief
roles-antag-thief-objective = Add some NT property to your personal collection without using violence.
-
-roles-antag-terminator-name = Exterminator
-roles-antag-terminator-objective = Kill the target at all costs, the future depends on it.
diff --git a/Resources/Locale/en-US/seeds/seeds.ftl b/Resources/Locale/en-US/seeds/seeds.ftl
index bff317a7e67..4a125b17242 100644
--- a/Resources/Locale/en-US/seeds/seeds.ftl
+++ b/Resources/Locale/en-US/seeds/seeds.ftl
@@ -113,3 +113,5 @@ seeds-pumpkin-name = pumpkin
seeds-pumpkin-display-name = pumpkins
seeds-cotton-name = cotton
seeds-cotton-display-name = cotton plant
+seeds-pyrotton-name = pyrotton
+seeds-pyrotton-display-name = pyrotton plant
diff --git a/Resources/Locale/en-US/step-trigger/shoes-required.ftl b/Resources/Locale/en-US/step-trigger/shoes-required.ftl
index 8c1369a49f4..07a4b8a84f8 100644
--- a/Resources/Locale/en-US/step-trigger/shoes-required.ftl
+++ b/Resources/Locale/en-US/step-trigger/shoes-required.ftl
@@ -1 +1 @@
-shoes-required-step-trigger-examine = You probably shouldn't step on this barefoot.
+clothing-required-step-trigger-examine = You probably shouldn't step on this barefoot.
diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl
index 49d4ca0028d..383c6d32779 100644
--- a/Resources/Locale/en-US/store/uplink-catalog.ftl
+++ b/Resources/Locale/en-US/store/uplink-catalog.ftl
@@ -287,6 +287,9 @@ uplink-disposable-turret-desc = Looks and functions like a normal electrical too
uplink-cluster-banana-peel-name = Cluster Banana
uplink-cluster-banana-peel-desc = Splits into 6 explosive banana peels after being thrown, the peels detonate automatically after 20 seconds if nobody slips on them.
+uplink-cane-blade-name = Cane Blade
+uplink-cane-blade-desc = A cane that has a hidden blade that can be unsheathed.
+
# Armor
uplink-chameleon-name = Chameleon Kit
uplink-chameleon-desc = A backpack full of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more!
diff --git a/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl b/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl
index 672d80ed31d..35dd42167f6 100644
--- a/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl
+++ b/Resources/Locale/en-US/xenoarchaeology/artifact-analyzer.ftl
@@ -30,6 +30,9 @@ analysis-console-progress-text = {$seconds ->
[one] T-{$seconds} second
*[other] T-{$seconds} seconds
}
+analysis-console-no-server-connected = Cannot extract. No server connected.
+analysis-console-no-artifact-placed = No artifact on scanner.
+analysis-console-no-points-to-extract = No points to extract.
analyzer-artifact-component-upgrade-analysis = analysis duration
diff --git a/Resources/Locale/ru-RU/backmen/entities/vampiric.ftl b/Resources/Locale/ru-RU/backmen/entities/vampiric.ftl
new file mode 100644
index 00000000000..d1a6928d48c
--- /dev/null
+++ b/Resources/Locale/ru-RU/backmen/entities/vampiric.ftl
@@ -0,0 +1,2 @@
+
+vampiric = Вампир
diff --git a/Resources/Maps/Salvage/small-3.yml b/Resources/Maps/Salvage/small-3.yml
index 3982d2d33bb..4158388e8e1 100644
--- a/Resources/Maps/Salvage/small-3.yml
+++ b/Resources/Maps/Salvage/small-3.yml
@@ -926,176 +926,132 @@ entities:
rot: 3.141592653589793 rad
pos: 1.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 4
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 6
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 7
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 14
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 17
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 24
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 25
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 26
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 29
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 30
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 31
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 37
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 38
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 44
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 48
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 49
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -6.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 50
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -5.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 51
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 52
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 53
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 66
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 75
components:
- type: Transform
@@ -1108,8 +1064,6 @@ entities:
rot: -1.5707963267948966 rad
pos: -2.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 78
components:
- type: Transform
@@ -1122,144 +1076,108 @@ entities:
rot: -1.5707963267948966 rad
pos: -3.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 80
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 97
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 101
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 105
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 106
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 107
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 108
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 110
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 112
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 115
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 116
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 117
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 118
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 119
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 120
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 121
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 122
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 123
components:
- type: Transform
@@ -1278,48 +1196,36 @@ entities:
rot: -1.5707963267948966 rad
pos: -1.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 126
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 127
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 128
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -5.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 129
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 130
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 131
components:
- type: Transform
@@ -1332,88 +1238,66 @@ entities:
rot: 3.141592653589793 rad
pos: -1.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 133
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 134
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 135
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 136
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 137
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 138
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 139
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 140
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 141
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 142
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 143
components:
- type: Transform
@@ -1444,40 +1328,30 @@ entities:
rot: -1.5707963267948966 rad
pos: 2.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 148
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 149
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 150
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 151
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 152
components:
- type: Transform
@@ -1490,112 +1364,84 @@ entities:
rot: -1.5707963267948966 rad
pos: 5.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 154
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 155
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 156
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 157
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 158
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 159
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 160
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 161
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 162
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 163
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 164
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 165
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 166
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 167
components:
- type: Transform
@@ -1614,56 +1460,42 @@ entities:
rot: -1.5707963267948966 rad
pos: 8.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 170
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 171
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 9.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 172
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 10.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 173
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 10.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 174
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 175
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 176
components:
- type: Transform
@@ -1676,8 +1508,6 @@ entities:
rot: -1.5707963267948966 rad
pos: 9.5,5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 178
components:
- type: Transform
@@ -1690,1104 +1520,828 @@ entities:
rot: 3.141592653589793 rad
pos: 9.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 180
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 10.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 181
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 182
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 183
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 184
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 10.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 185
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 9.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 186
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 187
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 188
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 189
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 190
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 191
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 192
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 193
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 10.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 194
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 10.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 195
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 10.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 196
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 10.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 197
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 198
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 199
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 200
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 201
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 202
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 203
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 204
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 205
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 206
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 207
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 208
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 209
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 210
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 211
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 212
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 213
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 214
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 215
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 216
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 217
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 218
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 219
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 220
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 221
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 222
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 223
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 224
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 225
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 9.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 226
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -8.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 227
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 228
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 229
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -5.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 230
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 231
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 232
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 233
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 234
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 235
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 236
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 237
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 238
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 239
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 240
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 241
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 242
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 243
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 244
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 245
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 246
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 247
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 248
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 249
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 250
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 251
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 252
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 253
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 254
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 255
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 256
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 257
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 258
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -6.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 259
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 260
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 261
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -8.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 262
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 263
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 264
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 265
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -5.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 266
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 267
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 268
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 269
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 270
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 271
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 272
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -5.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 273
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 274
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 275
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 276
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 277
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 278
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 279
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 280
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 281
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 282
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 283
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 284
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 285
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 286
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 287
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 288
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 289
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 290
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 291
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 292
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 293
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 294
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 295
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 296
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 297
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 298
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 299
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 300
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 301
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 302
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 303
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 304
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 305
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 306
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 307
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 308
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,-1.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 309
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,-0.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 310
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 311
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 312
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 313
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 314
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 315
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 316
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,-2.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 317
components:
- type: Transform
@@ -2800,982 +2354,736 @@ entities:
rot: 3.141592653589793 rad
pos: 4.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 319
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 320
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 321
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 322
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 323
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 324
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 9.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 325
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 10.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 326
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 327
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 328
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 9.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 329
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 330
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 331
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 332
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 333
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 334
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 9.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 335
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 10.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 336
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 10.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 337
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 9.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 338
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 8.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 339
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 8.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 340
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 10.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 341
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 9.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 342
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 343
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 344
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 345
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 346
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 347
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 348
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 349
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 350
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 351
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 352
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 353
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 354
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 355
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 356
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 357
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 358
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 359
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 360
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 361
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 362
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 363
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 364
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 365
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 366
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 367
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 368
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 369
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 370
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 371
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 4.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 372
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 373
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 374
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 2.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 375
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 376
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 377
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 378
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 379
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 380
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 381
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 382
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 383
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 384
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -8.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 385
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 386
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -7.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 387
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 388
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 389
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 390
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 391
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 392
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -6.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 393
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 394
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 395
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -5.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 396
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 397
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 398
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 399
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 400
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 401
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 402
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 403
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 404
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 405
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -8.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 406
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -6.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 407
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 408
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -7.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 409
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 410
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -5.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 411
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -5.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 412
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 413
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 414
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 415
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 416
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 417
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 418
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 419
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 420
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 421
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,-6.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 422
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -3.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 423
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 424
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 425
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -2.5,-7.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 426
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,-3.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 427
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 428
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 429
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 430
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,-4.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 431
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,-5.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 432
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 433
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 0.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 434
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 435
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 436
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,-8.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 437
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,-10.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 438
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -0.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 439
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
- uid: 440
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,-9.5
parent: 10
- - type: Godmode
- oldDamage: {}
...
diff --git a/Resources/Prototypes/Anomaly/behaviours.yml b/Resources/Prototypes/Anomaly/behaviours.yml
index aa9ad2f90d3..dea1ddb69c3 100644
--- a/Resources/Prototypes/Anomaly/behaviours.yml
+++ b/Resources/Prototypes/Anomaly/behaviours.yml
@@ -58,14 +58,14 @@
id: DelayedForce
earnPointModifier: 1.15
description: anomaly-behavior-delayed-force
- pulseFrequencyModifier: 0.5
+ pulseFrequencyModifier: 2
pulsePowerModifier: 2
- type: anomalyBehavior
id: Rapid
earnPointModifier: 1.15
description: anomaly-behavior-rapid
- pulseFrequencyModifier: 2
+ pulseFrequencyModifier: 0.5
pulsePowerModifier: 0.5
- type: anomalyBehavior
diff --git a/Resources/Prototypes/Backmen/Body/Prototypes/drone.yml b/Resources/Prototypes/Backmen/Body/Prototypes/drone.yml
index b233420f144..802ca033189 100644
--- a/Resources/Prototypes/Backmen/Body/Prototypes/drone.yml
+++ b/Resources/Prototypes/Backmen/Body/Prototypes/drone.yml
@@ -4,7 +4,7 @@
root: torso
slots:
torso:
- part: TorsoTerminator
+ part: TorsoDrone
connections:
- hand 1
- hand 2
@@ -24,3 +24,27 @@
part: RightArmBorg
hand 6:
part: RightArmBorg
+
+- type: entity
+ parent: BaseItem
+ id: TorsoDrone
+ name: nt-800 torso
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Terminator/parts.rsi
+ state: torso_m
+ - type: Icon
+ sprite: Mobs/Species/Terminator/parts.rsi
+ state: torso_m
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Metallic
+ - type: ContainerContainer
+ containers:
+ bodypart: !type:Container
+ ents: []
+ - type: Gibbable
+ - type: StaticPrice
+ price: 200
+ - type: BodyPart
+ partType: Torso
diff --git a/Resources/Prototypes/Backmen/Damage/groups.yml b/Resources/Prototypes/Backmen/Damage/groups.yml
index 9491843bc2f..ba5914bf176 100644
--- a/Resources/Prototypes/Backmen/Damage/groups.yml
+++ b/Resources/Prototypes/Backmen/Damage/groups.yml
@@ -1,4 +1,5 @@
- type: damageGroup
id: Immaterial
+ name: damage-group-immaterial
damageTypes:
- Holy
diff --git a/Resources/Prototypes/Backmen/Damage/types.yml b/Resources/Prototypes/Backmen/Damage/types.yml
index 60826594253..0ce3a8f17d3 100644
--- a/Resources/Prototypes/Backmen/Damage/types.yml
+++ b/Resources/Prototypes/Backmen/Damage/types.yml
@@ -1,5 +1,6 @@
# Only affects magical beings.
- type: damageType
id: Holy
+ name: damage-group-holy
armorCoefficientPrice: 25
armorFlatPrice: 150
diff --git a/Resources/Prototypes/Backmen/Entities/Mobs/NPC/mutants.yml b/Resources/Prototypes/Backmen/Entities/Mobs/NPC/mutants.yml
index 005e7db05c4..10bf0c4cad2 100644
--- a/Resources/Prototypes/Backmen/Entities/Mobs/NPC/mutants.yml
+++ b/Resources/Prototypes/Backmen/Entities/Mobs/NPC/mutants.yml
@@ -216,155 +216,6 @@
rules: No antagonist restrictions. Just don't talk in emote; you have telepathic chat.
- type: GhostTakeoverAvailable
-- type: entity
- parent: SimpleMobBase
- id: MobMouseCancer
- name: Cancer Mouse
- description: Oh hey Civvie...
- components:
- - type: BlobCarrier # backmen: blob
- - type: Sprite
- drawdepth: SmallMobs
- sprite: Mobs/Animals/mouse.rsi
- layers:
- - map: ["enum.DamageStateVisualLayers.Base"]
- state: mouse-0
- color: greenyellow
- - type: DamageStateVisuals
- rotate: true
- states:
- Alive:
- Base: mouse-0
- Critical:
- Base: dead-0
- Dead:
- Base: splat-0
- - type: PointLight
- color: greenyellow
- - type: RadiationSource
- intensity: 5
- slope: 0.5
- - type: Damageable
- damageContainer: Biological
- damageModifierSet: CancerMouse
- - type: GhostRole
- makeSentient: true
- name: ghost-role-information-cancer-mouse-name
- description: ghost-role-information-cancer-mouse-description
- requirements:
- - !type:OverallPlaytimeRequirement
- time: 54000 # 15h # Corvax-RoleTime
- - type: GhostTakeoverAvailable
- - type: CombatMode
- - type: MovementSpeedModifier
- baseWalkSpeed : 3.5
- baseSprintSpeed : 3.5
- - type: InputMover
- - type: MobMover
- - type: Reactive
- groups:
- Flammable: [Touch]
- Extinguish: [Touch]
- - type: Physics
- bodyType: KinematicController
- - type: Fixtures
- fixtures:
- fix1:
- shape:
- !type:PhysShapeCircle
- radius: 0.2
- density: 30 #Bulky by mouse standards...
- mask:
- - SmallMobMask
- layer:
- - SmallMobLayer
- - type: MobState
- - type: MobThresholds
- thresholds:
- 0: Alive
- 40: Critical
- 80: Dead
- - type: Item
- size: Huge
- - type: Stamina
- critThreshold: 80
- - type: MeleeWeapon
- hidden: true
- soundHit:
- path: /Audio/Weapons/bladeslice.ogg
- angle: 0
- animation: WeaponArcClaw
- damage:
- types:
- Slash: 5
- Piercing: 3
- - type: Body
- prototype: Rat
- requiredLegs: 1 # TODO: More than 1 leg
- - type: Hunger # probably should be prototyped
- thresholds:
- Overfed: 200
- Okay: 150
- Peckish: 100
- Starving: 50
- Dead: 0
- baseDecayRate: 0.01666666666
- - type: Thirst
- thresholds:
- OverHydrated: 600
- Okay: 450
- Thirsty: 300
- Parched: 150
- Dead: 0
- baseDecayRate: 0.1
- - type: Appearance
- - type: Puller
- needsHands: false
- - type: Vocal
- # mice are gender neutral who cares
- sounds:
- unsexed: Mouse
- wilhelmProbability: 0.001
- - type: Tag
- tags:
- - CannotSuicide
- - DoorBumpOpener
- - FootstepSound
- - Recyclable
- - type: NoSlip
- - type: MobPrice
- price: 100 # rat wealth
- - type: FelinidFood
- - type: CanEscapeInventory
- - type: Extractable
- grindableSolutionName: food
- - type: Bloodstream
- bloodReagent: Radium
- bloodMaxVolume: 70
- - type: SolutionContainerManager
- solutions:
- food:
- reagents:
- - ReagentId: Nutriment
- Quantity: 2
- - ReagentId: Radium
- Quantity: 70
- - type: Butcherable
- spawned:
- - id: FoodMeatRat
- amount: 1
- - type: Grammar
- attributes:
- proper: true
- gender: male
- - type: IntrinsicRadioReceiver
- - type: IntrinsicRadioTransmitter
- channels:
- - Common
- - type: ActiveRadio
- channels:
- - Common
-
- type: entity
name: Чёрная вдова
parent: MobGiantSpiderVampire
diff --git a/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA.yml b/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA.yml
index 4aa7140339f..db293edf5fe 100644
--- a/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA.yml
+++ b/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA.yml
@@ -142,8 +142,8 @@
autoRot: true
- type: Tag
tags:
- - ShoesRequiredStepTriggerImmune
- CannotSuicide
- type: SpecForce
-
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
diff --git a/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA_MED.yml b/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA_MED.yml
index 1c711c73902..a278747466b 100644
--- a/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA_MED.yml
+++ b/Resources/Prototypes/Backmen/Entities/Mobs/Player/Silicons/BPLA_MED.yml
@@ -179,6 +179,7 @@
autoRot: true
- type: Tag
tags:
- - ShoesRequiredStepTriggerImmune
- CannotSuicide
- type: SpecForce
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
diff --git a/Resources/Prototypes/Backmen/Entities/Mobs/Species/arachne.yml b/Resources/Prototypes/Backmen/Entities/Mobs/Species/arachne.yml
index e3346cf360c..25e2cfa6a1d 100644
--- a/Resources/Prototypes/Backmen/Entities/Mobs/Species/arachne.yml
+++ b/Resources/Prototypes/Backmen/Entities/Mobs/Species/arachne.yml
@@ -115,8 +115,9 @@
- type: Tag
tags:
- CanPilot
- - ShoesRequiredStepTriggerImmune
- DoorBumpOpener
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: Bloodstream
bloodReagent: DemonsBlood
- type: BloodSucker
diff --git a/Resources/Prototypes/Backmen/Entities/Mobs/Species/golem.yml b/Resources/Prototypes/Backmen/Entities/Mobs/Species/golem.yml
index 30288a87d82..942b017eb8f 100644
--- a/Resources/Prototypes/Backmen/Entities/Mobs/Species/golem.yml
+++ b/Resources/Prototypes/Backmen/Entities/Mobs/Species/golem.yml
@@ -83,9 +83,10 @@
tags:
- CanPilot
- DoorBumpOpener
- - ShoesRequiredStepTriggerImmune
# TODO: https://github.com/Backmen/Backmen/issues/1628
# - GunsDisabled
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: Reactive
groups:
Acidic: [Touch]
diff --git a/Resources/Prototypes/Body/Parts/terminator.yml b/Resources/Prototypes/Body/Parts/terminator.yml
deleted file mode 100644
index 58530da959c..00000000000
--- a/Resources/Prototypes/Body/Parts/terminator.yml
+++ /dev/null
@@ -1,158 +0,0 @@
-- type: entity
- abstract: true
- parent: BaseItem
- id: PartTerminator
- name: nt-800 body part
- components:
- - type: Sprite
- sprite: Mobs/Species/Terminator/parts.rsi
- - type: Icon
- sprite: Mobs/Species/Terminator/parts.rsi
- - type: Damageable
- damageContainer: Inorganic
- damageModifierSet: Cybernetic
- - type: BodyPart
- - type: ContainerContainer
- containers:
- bodypart: !type:Container
- ents: []
- - type: Gibbable
- - type: StaticPrice
- price: 200
-
-- type: entity
- parent: PartTerminator
- id: TorsoTerminator
- name: nt-800 torso
- components:
- - type: Sprite
- state: torso_m
- - type: Icon
- state: torso_m
- - type: BodyPart
- partType: Torso
-
-- type: entity
- parent: PartTerminator
- id: HeadTerminator
- name: nt-800 skull
- description: Its red eyes have powered down... for now.
- components:
- - type: Sprite
- state: skull_icon
- - type: Icon
- state: skull_icon
- - type: BodyPart
- partType: Head
- # killing a terminators worth big bucks
- - type: StaticPrice
- price: 2000
- - type: Tag
- tags:
- - Head
-
-- type: entity
- parent: PartTerminator
- id: LeftArmTerminator
- name: left nt-800 arm
- components:
- - type: Sprite
- state: l_arm
- - type: Icon
- state: l_arm
- - type: BodyPart
- partType: Arm
- symmetry: Left
-
-- type: entity
- parent: PartTerminator
- id: RightArmTerminator
- name: right nt-800 arm
- components:
- - type: Sprite
- state: r_arm
- - type: Icon
- state: r_arm
- - type: BodyPart
- partType: Arm
- symmetry: Right
-
-- type: entity
- parent: PartTerminator
- id: LeftHandTerminator
- name: left nt-800 hand
- components:
- - type: Sprite
- state: l_hand
- - type: Icon
- state: l_hand
- - type: BodyPart
- partType: Hand
- symmetry: Left
-
-- type: entity
- parent: PartTerminator
- id: RightHandTerminator
- name: right nt-800 hand
- components:
- - type: Sprite
- state: r_hand
- - type: Icon
- state: r_hand
- - type: BodyPart
- partType: Hand
- symmetry: Right
-
-- type: entity
- parent: PartTerminator
- id: LeftLegTerminator
- name: left nt-800 leg
- components:
- - type: Sprite
- state: l_leg
- - type: Icon
- state: l_leg
- - type: BodyPart
- partType: Leg
- symmetry: Left
- - type: MovementBodyPart
-
-- type: entity
- parent: PartTerminator
- id: RightLegTerminator
- name: right nt-800 leg
- components:
- - type: Sprite
- state: r_leg
- - type: Icon
- state: r_leg
- - type: BodyPart
- partType: Leg
- symmetry: Right
- - type: MovementBodyPart
-
-- type: entity
- parent: PartTerminator
- id: LeftFootTerminator
- name: left nt-800 foot
- components:
- - type: Sprite
- state: l_foot
- - type: Icon
- state: l_foot
- - type: BodyPart
- partType: Foot
- symmetry: Left
-
-- type: entity
- parent: PartTerminator
- id: RightFootTerminator
- name: right nt-800 foot
- components:
- - type: Sprite
- state: r_foot
- - type: Icon
- state: r_foot
- - type: BodyPart
- partType: Foot
- symmetry: Right
diff --git a/Resources/Prototypes/Body/Parts/vox.yml b/Resources/Prototypes/Body/Parts/vox.yml
index b163ed0864f..9f89a0c583d 100644
--- a/Resources/Prototypes/Body/Parts/vox.yml
+++ b/Resources/Prototypes/Body/Parts/vox.yml
@@ -33,10 +33,10 @@
components:
- type: Sprite
sprite: Mobs/Species/Vox/parts.rsi
- state: "torso_m"
+ state: "torso"
- type: Icon
sprite: Mobs/Species/Vox/parts.rsi
- state: "torso_m"
+ state: "torso"
- type: BodyPart
partType: Torso
- type: Extractable
@@ -54,10 +54,10 @@
components:
- type: Sprite
sprite: Mobs/Species/Vox/parts.rsi
- state: "head_m"
+ state: "head"
- type: Icon
sprite: Mobs/Species/Vox/parts.rsi
- state: "head_m"
+ state: "head"
- type: BodyPart
partType: Head
vital: true
diff --git a/Resources/Prototypes/Body/Prototypes/terminator.yml b/Resources/Prototypes/Body/Prototypes/terminator.yml
deleted file mode 100644
index c271a89d869..00000000000
--- a/Resources/Prototypes/Body/Prototypes/terminator.yml
+++ /dev/null
@@ -1,85 +0,0 @@
-# not quite human...
-- type: body
- id: TerminatorFlesh
- name: exterminator
- root: torso
- slots:
- head:
- part: HeadHuman
- connections:
- - torso
- organs:
- brain: MobTerminatorEndoskeleton
- torso:
- part: TorsoHuman
- connections:
- - left arm
- - right arm
- - left leg
- - right leg
- right arm:
- part: RightArmHuman
- connections:
- - right hand
- left arm:
- part: LeftArmHuman
- connections:
- - left hand
- right hand:
- part: RightHandHuman
- left hand:
- part: LeftHandHuman
- right leg:
- part: RightLegHuman
- connections:
- - right foot
- left leg:
- part: LeftLegHuman
- connections:
- - left foot
- right foot:
- part: RightFootHuman
- left foot:
- part: LeftFootHuman
-
-# TODO: terminator body parts
-- type: body
- id: TerminatorEndoskeleton
- name: terminatorEndoskeleton
- root: torso
- slots:
- head:
- part: HeadTerminator
- connections:
- - torso
- torso:
- part: TorsoTerminator
- connections:
- - left arm
- - right arm
- - left leg
- - right leg
- right arm:
- part: RightArmTerminator
- connections:
- - right hand
- left arm:
- part: LeftArmTerminator
- connections:
- - left hand
- right hand:
- part: RightHandTerminator
- left hand:
- part: LeftHandTerminator
- right leg:
- part: RightLegTerminator
- connections:
- - right foot
- left leg:
- part: LeftLegTerminator
- connections:
- - left foot
- right foot:
- part: RightFootTerminator
- left foot:
- part: LeftFootTerminator
diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml
index ba01169c1d0..62df57407de 100644
--- a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml
+++ b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml
@@ -34,7 +34,7 @@
sprite: Clothing/OuterClothing/Armor/riot.rsi
state: icon
product: CrateSecurityRiot
- cost: 5500
+ cost: 7500
category: cargoproduct-category-name-security
group: market
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml
index fd26aa6126c..a57023def94 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml
@@ -7,6 +7,9 @@
DrinkVacuumFlask: 5
DrinkFlaskBar: 5
DrinkShaker: 5
+ DrinkJigger: 5
+ DrinkIceBucket: 2
+ BarSpoon: 3
CustomDrinkJug: 2 #to allow for custom drinks in the soda/booze dispensers
DrinkCampariBottleFull: 5 # Corvax
DrinkAbsintheBottleFull: 2
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml
index 17674338b43..43fbf14eb35 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml
@@ -4,6 +4,7 @@
BooksBag: 2
BriefcaseBrown: 2
HandLabeler: 2
+ Cane: 3
ClothingEyesGlasses: 2
ClothingEyesGlassesJamjar: 2
ClothingNeckScarfStripedGreen: 2
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml
index b54c2cdbcfa..afbeff6b080 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/sec.yml
@@ -19,6 +19,7 @@
RiotShield: 2
RiotLaserShield: 2
RiotBulletShield: 2
+ RadioHandheldSecurity: 5
# security officers need to follow a diet regimen!
contrabandInventory:
FoodDonutHomer: 12
diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml
index 73f31c02f36..44bd41b9275 100644
--- a/Resources/Prototypes/Catalog/uplink_catalog.yml
+++ b/Resources/Prototypes/Catalog/uplink_catalog.yml
@@ -1686,3 +1686,22 @@
- Scientist
- ResearchDirector
- Chef
+
+- type: listing
+ id: UplinkCaneBlade
+ name: uplink-cane-blade-name
+ description: uplink-cane-blade-desc
+ icon: { sprite: Objects/Weapons/Melee/cane.rsi, state: cane}
+ productEntity: CaneSheathFilled
+ cost:
+ Telecrystal: 5
+ categories:
+ - UplinkJob
+ conditions:
+ - !type:BuyerJobCondition
+ whitelist:
+ - Librarian
+ - !type:BuyerWhitelistCondition
+ blacklist:
+ components:
+ - SurplusBundle
\ No newline at end of file
diff --git a/Resources/Prototypes/Chemistry/metabolism_groups.yml b/Resources/Prototypes/Chemistry/metabolism_groups.yml
index fc59edd81fe..b2035671af0 100644
--- a/Resources/Prototypes/Chemistry/metabolism_groups.yml
+++ b/Resources/Prototypes/Chemistry/metabolism_groups.yml
@@ -1,22 +1,29 @@
-# Default human metabolism groups.
+# Default human metabolism groups.
- type: metabolismGroup
id: Poison
+ name: metabolism-group-poison
- type: metabolismGroup
id: Medicine
+ name: metabolism-group-medicine
- type: metabolismGroup
id: Narcotic
+ name: metabolism-group-narcotic
- type: metabolismGroup
id: Alcohol
+ name: metabolism-group-alcohol
- type: metabolismGroup
id: Food
+ name: metabolism-group-food
- type: metabolismGroup
id: Drink
+ name: metabolism-group-drink
# Used for gases that have effects on being inhaled
- type: metabolismGroup
id: Gas
+ name: metabolism-group-gas
diff --git a/Resources/Prototypes/Chemistry/metabolizer_types.yml b/Resources/Prototypes/Chemistry/metabolizer_types.yml
index 259387b6d5c..3f7bf05b35e 100644
--- a/Resources/Prototypes/Chemistry/metabolizer_types.yml
+++ b/Resources/Prototypes/Chemistry/metabolizer_types.yml
@@ -1,46 +1,46 @@
-# If your species wants to metabolize stuff differently,
+# If your species wants to metabolize stuff differently,
# you'll likely have to tag its metabolizers with something other than Human.
- type: metabolizerType
id: Animal
- name: animal
+ name: metabolizer-type-animal
- type: metabolizerType
id: Bloodsucker
- name: bloodsucker
+ name: metabolizer-type-bloodsucker
- type: metabolizerType
id: Dragon
- name: dragon
+ name: metabolizer-type-dragon
- type: metabolizerType
id: Human
- name: human
+ name: metabolizer-type-human
- type: metabolizerType
id: Slime
- name: slime
+ name: metabolizer-type-slime
- type: metabolizerType
id: Vox
- name: vox
+ name: metabolizer-type-vox
- type: metabolizerType
id: Rat
- name: rat
+ name: metabolizer-type-rat
- type: metabolizerType
id: Plant
- name: plant
+ name: metabolizer-type-plant
- type: metabolizerType
id: Dwarf
- name: dwarf
+ name: metabolizer-type-dwarf
- type: metabolizerType
id: Moth
- name: moth
+ name: metabolizer-type-moth
- type: metabolizerType
id: Arachnid
- name: arachnid
+ name: metabolizer-type-arachnid
diff --git a/Resources/Prototypes/Damage/groups.yml b/Resources/Prototypes/Damage/groups.yml
index 07bfe2edcdd..71e4acdaeaa 100644
--- a/Resources/Prototypes/Damage/groups.yml
+++ b/Resources/Prototypes/Damage/groups.yml
@@ -1,5 +1,6 @@
- type: damageGroup
id: Brute
+ name: damage-group-brute
damageTypes:
- Blunt
- Slash
@@ -7,6 +8,7 @@
- type: damageGroup
id: Burn
+ name: damage-group-burn
damageTypes:
- Heat
- Shock
@@ -19,6 +21,7 @@
# bloodloss, not this whole group, unless you have a wonder drug that affects both.
- type: damageGroup
id: Airloss
+ name: damage-group-airloss
damageTypes:
- Asphyxiation
- Bloodloss
@@ -27,11 +30,13 @@
# Though there are probably some radioactive poisons.
- type: damageGroup
id: Toxin
+ name: damage-group-toxin
damageTypes:
- Poison
- Radiation
- type: damageGroup
id: Genetic
+ name: damage-group-genetic
damageTypes:
- Cellular
diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml
index 02c7add334e..c76e0501097 100644
--- a/Resources/Prototypes/Damage/modifier_sets.yml
+++ b/Resources/Prototypes/Damage/modifier_sets.yml
@@ -347,41 +347,3 @@
Cellular: 0.0
Heat: 2.5
Caustic: 0.0
-
-# terminator's flesh damage set
-- type: damageModifierSet
- id: CyberneticFlesh
- coefficients:
- Blunt: 0.2
- Slash: 0.2
- Piercing: 0.1
- # fire and lasers burn it good
- Heat: 1.0
- # zap
- Shock: 1.5
- Cold: 0.25
- Caustic: 0.25
- # doesnt have organs to poison
- Poison: 0.0
- Cellular: 0.0
-
-# terminator's endoskeleton damage set
-- type: damageModifierSet
- id: Cybernetic
- coefficients:
- # bonk
- Blunt: 1.0
- # alloy too hard to cut or shoot
- Slash: 0.0
- Piercing: 0.0
- # no burning anymore
- Heat: 0.0
- # zap zap
- Shock: 2.5
- Cold: 0.0
- Caustic: 0.0
- Poison: 0.0
- Cellular: 0.0
- flatReductions:
- # can't punch the endoskeleton to death
- Blunt: 5
diff --git a/Resources/Prototypes/Damage/types.yml b/Resources/Prototypes/Damage/types.yml
index 998c7f9f46b..b3af11a73a2 100644
--- a/Resources/Prototypes/Damage/types.yml
+++ b/Resources/Prototypes/Damage/types.yml
@@ -3,6 +3,7 @@
# Usually healed automatically if entity can breathe
- type: damageType
id: Asphyxiation
+ name: damage-type-asphyxiation
armorCoefficientPrice: 5
armorFlatPrice: 50
@@ -11,57 +12,68 @@
# Represents there not enough blood to supply oxygen (or equivalent).
- type: damageType
id: Bloodloss
+ name: damage-type-bloodloss
armorCoefficientPrice: 5
armorFlatPrice: 50
- type: damageType
id: Blunt
+ name: damage-type-blunt
armorCoefficientPrice: 2
armorFlatPrice: 10
- type: damageType
id: Cellular
+ name: damage-type-cellular
armorCoefficientPrice: 5
armorFlatPrice: 30
- type: damageType
id: Caustic
+ name: damage-type-caustic
armorCoefficientPrice: 5
armorFlatPrice: 30
- type: damageType
id: Cold
+ name: damage-type-cold
armorCoefficientPrice: 2.5
armorFlatPrice: 20
- type: damageType
id: Heat
+ name: damage-type-heat
armorCoefficientPrice: 2.5
armorFlatPrice: 20
- type: damageType
id: Piercing
+ name: damage-type-piercing
armorCoefficientPrice: 2
armorFlatPrice: 10
# Poison damage. Generally caused by various reagents being metabolised.
- type: damageType
id: Poison
+ name: damage-type-poison
armorCoefficientPrice: 10
armorFlatPrice: 60
- type: damageType
id: Radiation
+ name: damage-type-radiation
armorCoefficientPrice: 2.5
armorFlatPrice: 16
- type: damageType
id: Shock
+ name: damage-type-shock
armorCoefficientPrice: 2.5
armorFlatPrice: 20
- type: damageType
id: Slash
+ name: damage-type-slash
armorCoefficientPrice: 2
armorFlatPrice: 10
@@ -69,6 +81,7 @@
# Exclusive for structures such as walls, airlocks and others.
- type: damageType
id: Structural
+ name: damage-type-structural
armorCoefficientPrice: 1
armorFlatPrice: 1
@@ -76,5 +89,6 @@
# Used by certain armor to counter stun weaponry.
- type: damageType
id: Stun
+ name: damage-type-stun
armorCoefficientPrice: 5
armorFlatPrice: 20
diff --git a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml
index 79691cac978..8ca326643e8 100644
--- a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml
+++ b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml
@@ -74,3 +74,32 @@
- type: HideLayerClothing
slots:
- Snout
+
+- type: entity
+ parent: ClothingMaskBase
+ id: ClothingMaskWeldingGas
+ name: welding gas mask
+ description: A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd.
+ components:
+ - type: Sprite
+ sprite: Clothing/Mask/welding-gas.rsi
+ state: icon
+ - type: Clothing
+ sprite: Clothing/Mask/welding-gas.rsi
+ - type: BreathMask
+ - type: IngestionBlocker
+ - type: IdentityBlocker
+ - type: FlashImmunity
+ - type: EyeProtection
+ - type: PhysicalComposition
+ materialComposition:
+ Steel: 200
+ Glass: 100
+ - type: StaticPrice
+ price: 100
+ - type: Tag
+ tags:
+ - WhitelistChameleon
+ - type: HideLayerClothing
+ slots:
+ - Snout
diff --git a/Resources/Prototypes/Entities/Clothing/Neck/medals.yml b/Resources/Prototypes/Entities/Clothing/Neck/medals.yml
index 4d3746aad3f..031fcb99881 100644
--- a/Resources/Prototypes/Entities/Clothing/Neck/medals.yml
+++ b/Resources/Prototypes/Entities/Clothing/Neck/medals.yml
@@ -9,6 +9,9 @@
sprite: Clothing/Neck/Medals/bronzeheart.rsi
- type: Clothing
sprite: Clothing/Neck/Medals/bronzeheart.rsi
+ - type: Tag
+ tags:
+ - Medal
- type: entity
parent: ClothingNeckBase
@@ -22,6 +25,9 @@
sprite: Clothing/Neck/Medals/gold.rsi
- type: StealTarget
stealGroup: ClothingNeckGoldmedal
+ - type: Tag
+ tags:
+ - Medal
- type: entity
parent: ClothingNeckBase
@@ -33,6 +39,9 @@
sprite: Clothing/Neck/Medals/cargomedal.rsi
- type: Clothing
sprite: Clothing/Neck/Medals/cargomedal.rsi
+ - type: Tag
+ tags:
+ - Medal
- type: entity
parent: ClothingNeckBase
@@ -44,6 +53,9 @@
sprite: Clothing/Neck/Medals/engineermedal.rsi
- type: Clothing
sprite: Clothing/Neck/Medals/engineermedal.rsi
+ - type: Tag
+ tags:
+ - Medal
- type: entity
parent: ClothingNeckBase
@@ -55,6 +67,9 @@
sprite: Clothing/Neck/Medals/medicalmedal.rsi
- type: Clothing
sprite: Clothing/Neck/Medals/medicalmedal.rsi
+ - type: Tag
+ tags:
+ - Medal
- type: entity
parent: ClothingNeckBase
@@ -66,6 +81,9 @@
sprite: Clothing/Neck/Medals/sciencemedal.rsi
- type: Clothing
sprite: Clothing/Neck/Medals/sciencemedal.rsi
+ - type: Tag
+ tags:
+ - Medal
- type: entity
parent: ClothingNeckBase
@@ -77,6 +95,9 @@
sprite: Clothing/Neck/Medals/securitymedal.rsi
- type: Clothing
sprite: Clothing/Neck/Medals/securitymedal.rsi
+ - type: Tag
+ tags:
+ - Medal
- type: entity
parent: ClothingNeckBase
@@ -90,3 +111,6 @@
sprite: Clothing/Neck/Medals/clownmedal.rsi
- type: StealTarget
stealGroup: ClothingNeckClownmedal
+ - type: Tag
+ tags:
+ - Medal
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml
index 429f122f08b..87b2cf505f5 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml
@@ -141,6 +141,8 @@
tags:
- FullBodyOuter
- type: GroupExamine
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterArmorHeavy
@@ -240,6 +242,8 @@
tags:
- FullBodyOuter
- type: GroupExamine
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBaseLarge
@@ -295,6 +299,8 @@
- type: Construction
graph: BoneArmor
node: armor
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBaseLarge
@@ -314,3 +320,6 @@
Piercing: 0.6
Heat: 0.5
- type: GroupExamine
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
+
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
index b0cd5572f69..7a72e5f7614 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
@@ -135,6 +135,8 @@
- FullBodyOuter
- Hardsuit
- WhitelistChameleon
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
abstract: true
@@ -156,6 +158,8 @@
- type: Tag
tags:
- FullBodyOuter
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBase
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml
index ad6e4bf6ffc..de358d6b818 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml
@@ -26,6 +26,8 @@
- FullBodyOuter
- Hardsuit
- WhitelistChameleon
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterSuitBomb
@@ -67,6 +69,8 @@
- type: Tag
tags:
- FullBodyOuter
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBaseLarge
@@ -74,29 +78,31 @@
name: atmos fire suit
description: An expensive firesuit that protects against even the most deadly of station fires. Designed to protect even if the wearer is set aflame.
components:
- - type: Sprite
- sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
- - type: Clothing
- sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
- - type: PressureProtection
- highPressureMultiplier: 0.02
- lowPressureMultiplier: 1000
- - type: TemperatureProtection
- coefficient: 0.001
- - type: Armor
- modifiers:
- coefficients:
- Slash: 0.9
- Heat: 0.3
- Cold: 0.2
- - type: ClothingSpeedModifier
- walkModifier: 0.8
- sprintModifier: 0.8
- - type: HeldSpeedModifier
- - type: GroupExamine
- - type: Tag
- tags:
- - FullBodyOuter
+ - type: Sprite
+ sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
+ - type: Clothing
+ sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
+ - type: PressureProtection
+ highPressureMultiplier: 0.02
+ lowPressureMultiplier: 1000
+ - type: TemperatureProtection
+ coefficient: 0.001
+ - type: Armor
+ modifiers:
+ coefficients:
+ Slash: 0.9
+ Heat: 0.3
+ Cold: 0.2
+ - type: ClothingSpeedModifier
+ walkModifier: 0.8
+ sprintModifier: 0.8
+ - type: HeldSpeedModifier
+ - type: GroupExamine
+ - type: Tag
+ tags:
+ - FullBodyOuter
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: [ClothingOuterBaseLarge, GeigerCounterClothing]
@@ -123,6 +129,8 @@
- type: ContainerContainer
containers:
toggleable-clothing: !type:ContainerSlot {}
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBaseLarge
@@ -177,6 +185,8 @@
- type: Tag
tags:
- FullBodyOuter
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBase
@@ -208,6 +218,8 @@
- type: ContainerContainer
containers:
toggleable-clothing: !type:ContainerSlot {}
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBase
@@ -229,6 +241,8 @@
- type: Construction
graph: ClothingOuterSuitIan
node: suit
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
parent: ClothingOuterBase
diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
index 1119d5cda74..a0f56966bb5 100644
--- a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
+++ b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
@@ -23,6 +23,7 @@
tags:
- ClothMade
- WhitelistChameleon
+ - type: ClothingRequiredStepTriggerImmune
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Effects/mobspawn.yml b/Resources/Prototypes/Entities/Effects/mobspawn.yml
index 4529497021e..fb59aa3fc46 100644
--- a/Resources/Prototypes/Entities/Effects/mobspawn.yml
+++ b/Resources/Prototypes/Entities/Effects/mobspawn.yml
@@ -107,6 +107,7 @@
- FoodOnionRed
- FoodWatermelon
- FoodGatfruit
+ - MobTomatoKiller
rarePrototypes:
- MobLuminousEntity
- - MobLuminousObject
\ No newline at end of file
+ - MobLuminousObject
diff --git a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml
index 727b55eb4ef..eb32b48e79c 100644
--- a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml
+++ b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml
@@ -129,20 +129,3 @@
- state: green
- sprite: Objects/Weapons/Melee/energykatana.rsi
state: icon
-
-- type: entity
- parent: MarkerBase
- id: SpawnPointGhostTerminator
- name: terminator spawn point
- components:
- - type: GhostRole
- name: ghost-role-information-exterminator-name
- description: ghost-role-information-exterminator-description
- rules: ghost-role-information-exterminator-rules
- - type: GhostRoleMobSpawner
- prototype: MobHumanTerminator
- - type: Sprite
- layers:
- - state: green
- - sprite: Mobs/Species/Terminator/parts.rsi
- state: full
diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml
index c2a7ac4ebf7..aa983583c5a 100644
--- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml
+++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml
@@ -397,13 +397,6 @@
sprites:
- sprite: Mobs/Customization/human_hair.rsi
state: cornrowtail
-- type: marking
- id: HumanHairSpookyLong
- bodyPart: Hair
- markingCategory: Hair
- sprites:
- - sprite: Mobs/Customization/human_hair.rsi
- state: spookylong
- type: marking
id: HumanHairCrewcut
bodyPart: Hair
@@ -1167,6 +1160,13 @@
sprites:
- sprite: Mobs/Customization/human_hair.rsi
state: spiky2
+- type: marking
+ id: HumanHairSpookyLong
+ bodyPart: Hair
+ markingCategory: Hair
+ sprites:
+ - sprite: Mobs/Customization/human_hair.rsi
+ state: spookylong
- type: marking
id: HumanHairSwept
bodyPart: Hair
diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml
new file mode 100644
index 00000000000..cd3588bf546
--- /dev/null
+++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml
@@ -0,0 +1,145 @@
+- type: marking
+ id: VoxBeak
+ bodyPart: Snout
+ markingCategory: Snout
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: beak
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxLArmScales
+ bodyPart: LArm
+ markingCategory: Arms
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: l_arm
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxLLegScales
+ bodyPart: LLeg
+ markingCategory: Legs
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: l_leg
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxRArmScales
+ bodyPart: RArm
+ markingCategory: Arms
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: r_arm
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxRLegScales
+ bodyPart: RLeg
+ markingCategory: Legs
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: r_leg
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxRHandScales
+ bodyPart: RHand
+ markingCategory: Arms
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: r_hand
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxLHandScales
+ bodyPart: LHand
+ markingCategory: Arms
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: l_hand
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxLFootScales
+ bodyPart: LFoot
+ markingCategory: Legs
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: l_foot
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxRFootScales
+ bodyPart: RFoot
+ markingCategory: Legs
+ forcedColoring: true
+ speciesRestriction: [Vox]
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ state: r_foot
+ coloring:
+ default:
+ type:
+ !type:SimpleColoring
+ color: "#937e3d"
+
+- type: marking
+ id: VoxTail
+ bodyPart: Tail
+ markingCategory: Tail
+ speciesRestriction: [Vox]
+ forcedColoring: true
+ sprites:
+ - sprite: Mobs/Customization/vox_parts.rsi
+ # Ideally this should use the normal tail sprite and apply an actual mask over it, not just use a butchered sprite
+ state: tail_stenciled
diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
index 085526c303d..4baf18e58e7 100644
--- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
+++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml
@@ -205,7 +205,6 @@
- type: StandingState
- type: Tag
tags:
- - ShoesRequiredStepTriggerImmune
- DoorBumpOpener
- CanPilot
- type: Emoting
@@ -214,6 +213,7 @@
- type: GuideHelp
guides:
- Cyborgs
+ - type: StepTriggerImmune
- type: entity
id: BaseBorgChassisNT
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
index d08ca54af72..7cfdf568a3d 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
@@ -432,6 +432,8 @@
- type: Speech
speechVerb: Moth
speechSounds: Squeak
+ - type: FaxableObject
+ insertingState: inserting_mothroach
- type: MothAccent
- type: Sprite
sprite: Mobs/Animals/mothroach.rsi
@@ -1550,6 +1552,8 @@
rootTask:
task: MouseCompound
- type: Physics
+ - type: FaxableObject
+ insertingState: inserting_mouse
- type: Fixtures
fixtures:
fix1:
@@ -1735,6 +1739,50 @@
Dead:
Base: splat-2
+- type: entity
+ name: cancer mouse
+ description: Toxic. Squeak!
+ parent: MobMouse
+ id: MobMouseCancer
+ components:
+ - type: GhostTakeoverAvailable
+ - type: GhostRole
+ makeSentient: true
+ name: ghost-role-information-cancer-mouse-name
+ description: ghost-role-information-cancer-mouse-description
+ requirements:
+ - !type:OverallPlaytimeRequirement
+ time: 54000 # 15h # Corvax-RoleTime
+ - type: BlobCarrier # backmen: blob
+ - type: Sprite
+ color: LightGreen
+ - type: PointLight
+ color: LightGreen
+ radius: 5
+ energy: 5
+ netsync: false
+ - type: RadiationSource
+ intensity: 0.3
+ - type: Bloodstream
+ bloodReagent: UnstableMutagen
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: UncookedAnimalProteins
+ Quantity: 3
+ - ReagentId: Uranium
+ Quantity: 10
+ - type: Butcherable
+ spawned:
+ - id: FoodMeatRat
+ amount: 1
+ - id: SheetUranium1
+ amount: 1
+ - type: Damageable
+ damageContainer: Biological
+ damageModifierSet: Zombie
+
- type: entity
name: lizard #Weh
parent: SimpleMobBase
@@ -3038,6 +3086,8 @@
- type: Item
size: Tiny
- type: Physics
+ - type: FaxableObject
+ insertingState: inserting_hamster
- type: Fixtures
fixtures:
fix1:
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml b/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml
index c2380c40278..58d30ccfc06 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/elemental.yml
@@ -44,7 +44,6 @@
- type: Tag
tags:
- DoorBumpOpener
- - ShoesRequiredStepTriggerImmune
- type: MobState
allowedStates:
- Alive
@@ -73,6 +72,8 @@
- type: InputMover
- type: MobMover
- type: ZombieImmune
+ - type: ClothingRequiredStepTriggerImmune
+ slots: All
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
index d4cee568917..fb9807a08ed 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
@@ -69,7 +69,7 @@
- type: entity
id: MobTomatoKiller
- parent:
+ parent:
- BaseSimpleMob
- MobDamageable
- MobBloodstream
@@ -78,8 +78,7 @@
name: tomato killer
description: it seems today it's not you eating tomatoes, it's the tomatoes eating you.
components:
-# - type: Item
-# size: Huge
+# - type: Item
- type: NpcFactionMember
factions:
- SimpleHostile
@@ -91,7 +90,7 @@
components:
- HumanoidAppearance
- type: Sprite
- sprite: Mobs/Demons/tomatokiller.rsi
+ sprite: Mobs/Demons/tomatokiller.rsi
noRot: true
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
@@ -142,10 +141,6 @@
- type: Climbing
- type: NameIdentifier
group: GenericNumber
- - type: SlowOnDamage
- speedModifierThresholds:
- 60: 0.7
- 80: 0.5
- type: FootstepModifier
footstepSoundCollection:
path: /Audio/Effects/Footsteps/slime1.ogg
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml
index c808ed2d210..7a36046a0fd 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml
@@ -66,7 +66,6 @@
- type: Tag
tags:
- DoorBumpOpener
- - ShoesRequiredStepTriggerImmune
- type: MobState
allowedStates:
- Alive
@@ -107,6 +106,7 @@
- type: TypingIndicator
proto: robot
- type: ZombieImmune
+ - type: StepTriggerImmune
- type: entity
parent: MobSiliconBase
diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml
index 1fe549bae4e..d3f5463f4b0 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml
@@ -66,9 +66,8 @@
- type: Puller
- type: StandingState
- type: Alerts
- - type: Tag
- tags:
- - ShoesRequiredStepTriggerImmune
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: entity
name: drone
@@ -182,9 +181,10 @@
softness: 1
mask: /Textures/Effects/LightMasks/cone.png
autoRot: true
+ - type: ClothingRequiredStepTriggerImmune
+ slots: WITHOUT_POCKET
- type: Tag
tags:
- - ShoesRequiredStepTriggerImmune
- CannotSuicide
- type: entity
diff --git a/Resources/Prototypes/Entities/Mobs/Player/terminator.yml b/Resources/Prototypes/Entities/Mobs/Player/terminator.yml
deleted file mode 100644
index 663838e01ac..00000000000
--- a/Resources/Prototypes/Entities/Mobs/Player/terminator.yml
+++ /dev/null
@@ -1,203 +0,0 @@
-# stuff common to flesh and endoskeleton
-- type: entity
- abstract: true
- id: MobTerminatorBase
- components:
- - type: ZombieImmune # yeah no
- - type: FlashImmunity # no brain to brainwash, eyes are robotic
-
-- type: entity
- parent: [MobHuman, MobTerminatorBase]
- id: MobHumanTerminator
- # uses random name generator dont worry
- name: exterminator
- components:
- - type: Terminator
- - type: GenericAntag
- rule: Exterminator
- # reduced barotrauma damage
- - type: Barotrauma
- damage:
- types:
- Blunt: 0.1
- # 4x stamina, faster recovery
- - type: Stamina
- decay: 6
- cooldown: 1
- critThreshold: 400
- # immune to space drugs, pax, temporary blindness
- - type: StatusEffects
- allowed:
- - Stun
- - KnockedDown
- - SlowedDown
- - Stutter
- - Electrocution
- - Drunk
- - SlurredSpeech
- - RatvarianLanguage
- - PressureImmunity
- - Muted
- - ForcedSleep
- - StaminaModifier
- - type: MobState
- allowedStates:
- - Alive
- - Dead
- # endoskeleton need it
- - type: TransferMindOnGib
- - type: MobThresholds
- thresholds:
- 0: Alive
- # used for health display its not possible to actually fall into crit
- 200: Dead
- # fire!!!!
- - type: Flammable
- damage:
- types:
- Heat: 6.0
- # slightly wider thresholds
- - type: Temperature
- heatDamageThreshold: 390
- coldDamageThreshold: 240
- # take terminator flesh damage
- - type: Damageable
- damageModifierSet: CyberneticFlesh
- # only organ is an endoskeleton, which is transferred when flesh dies
- - type: Body
- prototype: TerminatorFlesh
- # endoskeleton transformation when either you would get burned to crit or killed by any damage
- # you will become an endoskeleton as your last chance to kill the target
- - type: Destructible
- thresholds:
- # the burn trigger is first incase of a bombing or nuking, it might well do over 200 damage but 100 heat is more important
- - trigger:
- !type:DamageTypeTrigger
- damageType: Heat
- damage: 100
- behaviors:
- - !type:PopupBehavior
- popup: terminator-endoskeleton-burn-popup
- popupType: LargeCaution
- - !type:GibBehavior
- - trigger:
- !type:DamageTrigger
- damage: 200
- behaviors:
- - !type:PopupBehavior
- popup: terminator-endoskeleton-gib-popup
- popupType: LargeCaution
- - !type:GibBehavior
- # faster than humans when damaged
- - type: SlowOnDamage
- speedModifierThresholds:
- 70: 0.8
- 90: 0.6
- # arnold is very strong
- - type: MeleeWeapon
- damage:
- types:
- Blunt: 10
- Structural: 10
- - type: RandomHumanoidAppearance
- - type: Tag
- tags:
- - CanPilot
- - FootstepSound
- - DoorBumpOpener
- - Unimplantable # no brain to mindshield, no organic body to implant into
-
-- type: entity
- parent:
- - BaseMob
- - MobCombat
- - MobDamageable
- - MobSiliconBase
- - MobTerminatorBase
- id: MobTerminatorEndoskeleton
- # you are now valid
- name: nt-800 "exterminator" endoskeleton
- description: The inner powerhouse of Susnet's infiltrator androids. Ridiculously hard alloy on the inside, unassuming flesh on the outside.
- components:
- - type: HumanoidAppearance
- species: Terminator
- - type: MovementSpeedModifier
- baseWalkSpeed: 1.5
- baseSprintSpeed: 3.0
- - type: Sprite
- sprite: Mobs/Species/Terminator/parts.rsi
- - type: Fixtures
- fixtures:
- fix1:
- shape:
- !type:PhysShapeCircle
- radius: 0.35
- # he heavy
- density: 500
- mask:
- - MobMask
- layer:
- - MobLayer
- - type: MobThresholds
- thresholds:
- 0: Alive
- # gibbed at 200 so cant go crit
- 200: Dead
- # incase some weird stuff happens and the crew adopts a terminator
- - type: Repairable
- doAfterDelay: 15
- allowSelfRepair: false
- - type: Body
- prototype: TerminatorEndoskeleton
- # lets it sit in the terminator flesh's brain slot
- - type: Organ
- - type: Brain
- - type: TypingIndicator
- proto: robot # beep boop borp
- - type: Speech
- speechSounds: Pai
- - type: Damageable
- damageModifierSet: Cybernetic
- - type: Destructible
- thresholds:
- - trigger:
- !type:DamageTrigger
- damage: 200
- behaviors:
- - !type:PlaySoundBehavior
- # endoSKELETON
- sound: /Audio/Effects/bone_rattle.ogg
- # a keepsake or a gift for cargo
- - !type:SpawnEntitiesBehavior
- spawn:
- HeadTerminator:
- min: 1
- max: 1
- - !type:DoActsBehavior
- acts: [ "Destruction" ]
- # for fire spreading around, the endoskeleton cannot burn
- - type: Flammable
- fireSpread: true
- canResistFire: true
- damage:
- types:
- Heat: 0
- # now his only weapon, but it is stronger
- - type: MeleeWeapon
- damage:
- types:
- Blunt: 15
- Structural: 5
- - type: Puller
- needsHands: false
- - type: Prying
- pryPowered: true
- force: true
- - type: Tag
- tags:
- - DoorBumpOpener
- - ShoesRequiredStepTriggerImmune
- # let mind transfer on gib work
- - MindTransferTarget
- # its just metal so no implants
- - Unimplantable
diff --git a/Resources/Prototypes/Entities/Mobs/Player/vox.yml b/Resources/Prototypes/Entities/Mobs/Player/vox.yml
index 81e50755157..8d710c9098d 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/vox.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/vox.yml
@@ -1,6 +1,6 @@
- type: entity
save: false
- name: Vox
+ name: Urist McVox
parent: BaseMobVox
id: MobVox
components:
diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml
index a271e9d0846..ec8035563b7 100644
--- a/Resources/Prototypes/Entities/Mobs/Species/vox.yml
+++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml
@@ -16,6 +16,16 @@
#- type: VoxAccent # Not yet coded
- type: Inventory
speciesId: vox
+ displacements:
+ jumpsuit:
+ layer:
+ sprite: Mobs/Species/Vox/displacement.rsi
+ state: jumpsuit
+ copyToShaderParameters:
+ # Value required, provide a dummy. Gets overridden when applied.
+ layerKey: dummy
+ parameterTexture: displacementMap
+ parameterUV: displacementUV
- type: Speech
speechVerb: Vox
speechSounds: Vox
@@ -49,6 +59,49 @@
damage:
types:
Slash: 5 # Reduce?
+ - type: Sprite # Need to redefine the whole order to draw the tail over their gas tank
+ layers:
+ - map: [ "enum.HumanoidVisualLayers.Chest" ]
+ - map: [ "enum.HumanoidVisualLayers.Head" ]
+ - map: [ "enum.HumanoidVisualLayers.Snout" ]
+ - map: [ "enum.HumanoidVisualLayers.Eyes" ]
+ - map: [ "enum.HumanoidVisualLayers.RArm" ]
+ - map: [ "enum.HumanoidVisualLayers.LArm" ]
+ - map: [ "enum.HumanoidVisualLayers.RLeg" ]
+ - map: [ "enum.HumanoidVisualLayers.LLeg" ]
+ - map: [ "jumpsuit" ]
+ - map: [ "enum.HumanoidVisualLayers.LFoot" ]
+ - map: [ "enum.HumanoidVisualLayers.RFoot" ]
+ - map: [ "enum.HumanoidVisualLayers.LHand" ]
+ - map: [ "enum.HumanoidVisualLayers.RHand" ]
+ - map: [ "gloves" ]
+ - map: [ "shoes" ]
+ - map: [ "ears" ]
+ - map: [ "outerClothing" ]
+ - map: [ "eyes" ]
+ - map: [ "belt" ]
+ - map: [ "id" ]
+ - map: [ "neck" ]
+ - map: [ "back" ]
+ - map: [ "enum.HumanoidVisualLayers.FacialHair" ]
+ - map: [ "enum.HumanoidVisualLayers.Hair" ]
+ - map: [ "enum.HumanoidVisualLayers.HeadSide" ]
+ - map: [ "enum.HumanoidVisualLayers.HeadTop" ]
+ - map: [ "suitstorage" ] # This is not in the default order
+ - map: [ "enum.HumanoidVisualLayers.Tail" ]
+ - map: [ "mask" ]
+ - map: [ "head" ]
+ - map: [ "pocket1" ]
+ - map: [ "pocket2" ]
+ - map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
+ color: "#ffffff"
+ sprite: Objects/Misc/handcuffs.rsi
+ state: body-overlay-2
+ visible: false
+ - map: [ "clownedon" ]
+ sprite: "Effects/creampie.rsi"
+ state: "creampie_vox" # Not default
+ visible: false
- type: entity
parent: BaseSpeciesDummy
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml
index ad2e7601414..d2c1249740e 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml
@@ -104,3 +104,63 @@
- type: Drink
- type: Sprite
sprite: Objects/Consumable/Drinks/jar_what.rsi
+
+- type: entity
+ id: BartenderMixer
+ abstract: true
+ components:
+ - type: DrainableSolution
+ solution: drink
+ - type: Drink
+ - type: DrawableSolution
+ solution: drink
+ - type: RefillableSolution
+ solution: drink
+ - type: SolutionTransfer
+ canChangeTransferAmount: true
+ - type: Spillable
+ solution: drink
+ - type: UserInterface
+ interfaces:
+ enum.TransferAmountUiKey.Key:
+ type: TransferAmountBoundUserInterface
+
+- type: entity
+ parent: [BaseItem, BartenderMixer]
+ id: DrinkJigger
+ name: jigger
+ description: Like a shaker, but smaller. Used to control the amount of ingredients.
+ components:
+ - type: SolutionContainerManager
+ solutions:
+ drink:
+ maxVol: 20
+ - type: MixableSolution
+ solution: drink
+ - type: FitsInDispenser
+ solution: drink
+ - type: Sprite
+ sprite: Objects/Consumable/Drinks/jigger.rsi
+ state: icon
+ - type: PhysicalComposition
+ materialComposition:
+ Steel: 20
+
+- type: entity
+ parent: [BaseItem, BartenderMixer]
+ id: DrinkIceBucket
+ name: ice bucket
+ description: A special bucket of refreshy ice. Prohibited use for challenge with the same name!
+ components:
+ - type: SolutionContainerManager
+ solutions:
+ drink:
+ reagents:
+ - ReagentId: Ice
+ Quantity: 200
+ - type: Sprite
+ sprite: Objects/Consumable/Drinks/icebucket.rsi
+ state: icon
+ - type: PhysicalComposition
+ materialComposition:
+ Steel: 75
diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
index 9d9bb37273c..e96ef8bfa55 100644
--- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
+++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
@@ -1882,3 +1882,36 @@
tags:
- ClothMade
- CottonBoll
+
+- type: entity
+ name: pyrotton boll
+ description: This will probably set you on fire.
+ id: PyrottonBol
+ parent: FoodProduceBase
+ components:
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/pyrotton.rsi
+ - type: FlavorProfile
+ flavors:
+ - pyrotton
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 5
+ - ReagentId: Phlogiston
+ Quantity: 5
+ - type: Log
+ spawnedPrototype: MaterialPyrotton1
+ spawnCount: 2
+ - type: Produce
+ seedId: pyrotton
+ - type: Tag
+ tags:
+ - ClothMade
+ - CottonBoll
+ - type: Extractable
+ grindableSolutionName: food
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml
index 164777284fa..360fc5ffaa3 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml
@@ -15,7 +15,7 @@
price: 100
- type: PhysicalComposition
materialComposition:
- Glass: 400
+ Glass: 230
chemicalComposition:
Silicon: 20
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
index 63c7908432c..b3fc840aaf5 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
@@ -152,6 +152,28 @@
DefaultPrototype: Beaker
ExamineName: Glass Beaker
+- type: entity
+ parent: BaseMachineCircuitboard
+ id: CircuitImprinterHyperConvectionMachineCircuitboard
+ name: hyper convection circuit imprinter machine board
+ description: A machine printed circuit board for a hyper convection circuit imprinter.
+ components:
+ - type: Sprite
+ state: science
+ - type: MachineBoard
+ prototype: CircuitImprinterHyperConvection
+ requirements:
+ MatterBin: 2
+ tagRequirements:
+ GlassBeaker:
+ Amount: 2
+ DefaultPrototype: Beaker
+ ExamineName: Glass Beaker
+ Igniter:
+ Amount: 1
+ DefaultPrototype: Igniter
+ ExamineName: Igniter
+
- type: entity
id: ExosuitFabricatorMachineCircuitboard
parent: BaseMachineCircuitboard
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
index afbfdadf911..ba91f6bc535 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
@@ -14,7 +14,7 @@
price: 100
- type: PhysicalComposition
materialComposition:
- Glass: 400
+ Glass: 230
chemicalComposition:
Silicon: 20
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml
index 43ed20c694c..2cb9b5233d0 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml
@@ -18,6 +18,8 @@
state: timer
- type: Item
size: Small
+ - type: StaticPrice
+ price: 40
- type: PayloadTrigger
components:
- type: OnUseTimerTrigger
@@ -28,8 +30,6 @@
path: /Audio/Machines/Nuke/general_beep.ogg
params:
volume: -2
- - type: StaticPrice
- price: 40
- type: entity
parent: TimerTrigger
@@ -40,6 +40,11 @@
- type: Sprite
sprite: Objects/Devices/signaltrigger.rsi
state: signaltrigger
+ - type: StaticPrice
+ price: 40
+ - type: Tag
+ tags:
+ - SignalTrigger
- type: PayloadTrigger
components:
- type: TriggerOnSignal
@@ -49,8 +54,6 @@
- type: WirelessNetworkConnection
range: 200
- type: DeviceLinkSink
- - type: StaticPrice
- price: 40
- type: entity
parent: BaseItem
@@ -61,11 +64,11 @@
- type: Sprite
sprite: Objects/Devices/voice.rsi
state: voice
- - type: PayloadTrigger
- components:
- - type: TriggerOnVoice
- type: StaticPrice
price: 40
- type: Tag
tags:
- VoiceTrigger
+ - type: PayloadTrigger
+ components:
+ - type: TriggerOnVoice
diff --git a/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml b/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml
index c3bd74dd751..d97cae2e6d6 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml
@@ -15,7 +15,7 @@
requiredTriggeredSpeed: 0
- type: Mousetrap
- type: TriggerOnStepTrigger
- - type: ShoesRequiredStepTrigger
+ - type: ClothingRequiredStepTrigger
- type: DamageUserOnTrigger
damage:
types:
diff --git a/Resources/Prototypes/Entities/Objects/Devices/radio.yml b/Resources/Prototypes/Entities/Objects/Devices/radio.yml
index 74c2865d07d..43f84fe404e 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/radio.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/radio.yml
@@ -23,3 +23,20 @@
- type: Tag
tags:
- Radio
+
+- type: entity
+ name: security radio
+ description: A handy security radio.
+ parent: RadioHandheld
+ id: RadioHandheldSecurity
+ components:
+ - type: RadioMicrophone
+ broadcastChannel: Security
+ - type: RadioSpeaker
+ channels:
+ - Security
+ - type: Sprite
+ sprite: Objects/Devices/securityhandy.rsi
+ - type: Item
+ sprite: Objects/Devices/securityhandy.rsi
+ heldPrefix: walkietalkie
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice.yml b/Resources/Prototypes/Entities/Objects/Fun/dice.yml
index 852a1c2699c..0b534f08798 100644
--- a/Resources/Prototypes/Entities/Objects/Fun/dice.yml
+++ b/Resources/Prototypes/Entities/Objects/Fun/dice.yml
@@ -121,7 +121,7 @@
- type: StepTrigger
intersectRatio: 0.2
- type: TriggerOnStepTrigger
- - type: ShoesRequiredStepTrigger
+ - type: ClothingRequiredStepTrigger
- type: Slippery
slipSound:
path: /Audio/Effects/glass_step.ogg
diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml
index d11df5d94e8..f4ac9e7ee14 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml
@@ -419,6 +419,58 @@
- type: Stack
count: 1
+- type: entity
+ parent: MaterialBase
+ id: MaterialPyrotton
+ name: pyrotton
+ suffix: Full
+ components:
+ - type: Stack
+ stackType: Pyrotton
+ baseLayer: base
+ layerStates:
+ - pyrotton
+ - pyrotton_2
+ - pyrotton_3
+ - type: Sprite
+ state: pyrotton_3
+ layers:
+ - state: pyrotton_3
+ map: ["base"]
+ - type: Appearance
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 10
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 5
+ - ReagentId: Phlogiston
+ Quantity: 5
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 3
+ - ReagentId: Phlogiston
+ Quantity: 3
+ - type: Tag
+ tags:
+ - ClothMade
+ - RawMaterial
+
+- type: entity
+ parent: MaterialPyrotton
+ id: MaterialPyrotton1
+ suffix: Single
+ components:
+ - type: Sprite
+ state: pyrotton
+ - type: Stack
+ count: 1
+
- type: entity
parent: MaterialBase
id: MaterialBananium
@@ -589,4 +641,4 @@
materialComposition:
Gunpowder: 100
- type: Item
- size: Tiny
\ No newline at end of file
+ size: Tiny
diff --git a/Resources/Prototypes/Entities/Objects/Materials/shards.yml b/Resources/Prototypes/Entities/Objects/Materials/shards.yml
index 834a2e7ff0a..dfd02b6fccf 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/shards.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/shards.yml
@@ -63,7 +63,7 @@
acts: [ "Destruction" ]
- type: StepTrigger
intersectRatio: 0.2
- - type: ShoesRequiredStepTrigger
+ - type: ClothingRequiredStepTrigger
- type: Slippery
slipSound:
path: /Audio/Effects/glass_step.ogg
diff --git a/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml b/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml
index a421c1e9e99..35000b3fba1 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml
@@ -17,6 +17,9 @@
- type: Storage
grid:
- 0,0,7,1
+ whitelist:
+ tags:
+ - Medal
- type: StorageFill
contents:
- id: ClothingNeckGoldmedal
diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml
index da62c03705f..099d179b724 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml
@@ -32,6 +32,7 @@
- Trash
- Paper
- type: Appearance
+ - type: FaxableObject
- type: PaperVisuals
- type: Flammable
fireSpread: true
diff --git a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml
index 4250669581f..86667f094fd 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/utensils.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/utensils.yml
@@ -120,3 +120,28 @@
- Plastic
- Trash
- Knife
+
+- type: entity
+ parent: UtensilBase
+ id: BarSpoon
+ name: bar spoon
+ description: Your personal helper to mix drinks and changes lives.
+ components:
+ - type: Tag
+ tags:
+ - Metal
+ - type: Sprite
+ state: bar_spoon
+ - type: Item
+ heldPrefix: spoon
+ - type: Utensil
+ types:
+ - Spoon
+ - type: MeleeWeapon
+ wideAnimationRotation: 180
+ attackRate: 2
+ damage:
+ types:
+ Blunt: 2
+ - type: Shovel
+ speedModifier: 0.05 # nah
diff --git a/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml
new file mode 100644
index 00000000000..e3213ac8c9e
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml
@@ -0,0 +1,38 @@
+- type: entity
+ parent: Clothing
+ id: PortableRecharger
+ name: portable recharger
+ description: High-tech recharger adapted for portability
+ components:
+ - type: Item
+ size: Huge
+ - type: Sprite
+ sprite: Objects/Power/portable_recharger.rsi
+ state: charging
+ - type: Clothing
+ equippedPrefix: charging
+ quickEquip: false
+ slots:
+ - back
+ - type: Charger
+ slotId: charger_slot
+ portable: true
+ - type: PowerChargerVisuals
+ - type: ApcPowerReceiver
+ needsPower: false
+ powerLoad: 0
+ - type: StaticPrice
+ price: 500
+ - type: Tag
+ tags: [] # ignore "WhitelistChameleon" tag
+ - type: ContainerContainer
+ containers:
+ charger_slot: !type:ContainerSlot
+ - type: ItemSlots
+ slots:
+ charger_slot:
+ ejectOnInteract: true
+ whitelist:
+ components:
+ - HitscanBatteryAmmoProvider
+ - ProjectileBatteryAmmoProvider
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
index 45f597e9937..37819127fe7 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml
@@ -594,3 +594,13 @@
seedId: cotton
- type: Sprite
sprite: Objects/Specific/Hydroponics/cotton.rsi
+
+- type: entity
+ parent: SeedBase
+ name: packet of pyrotton seeds
+ id: PyrottonSeeds
+ components:
+ - type: Seed
+ seedId: pyrotton
+ - type: Sprite
+ sprite: Objects/Specific/Hydroponics/pyrotton.rsi
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml
index 5b2ec794918..d5fb4360a82 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml
@@ -10,7 +10,7 @@
tags:
- CartridgeLightRifle
proto: CartridgeLightRifle
- capacity: 50
+ capacity: 60
- type: Item
size: Small
- type: ContainerContainer
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml
index f5b2955e086..018d812e3f5 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml
@@ -9,7 +9,7 @@
tags:
- CartridgeMagnum
proto: CartridgeMagnum
- capacity: 60
+ capacity: 12
- type: Item
size: Small
- type: ContainerContainer
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml
index 54d5327dda9..7a5f5d27ca6 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml
@@ -9,7 +9,7 @@
tags:
- CartridgeRifle
proto: CartridgeRifle
- capacity: 60
+ capacity: 50
- type: Item
size: Small
- type: ContainerContainer
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml
index 831c3c33525..63ad52c0320 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml
@@ -21,7 +21,7 @@
whitelist:
tags:
- ShellShotgun
- capacity: 12
+ capacity: 16
# Shotgun Shells
- type: entity
@@ -89,6 +89,19 @@
- state: boxwide
- state: shellincendiary
+- type: entity
+ name: shotgun uranium cartridges dispenser
+ parent: AmmoProviderShotgunShell
+ id: BoxShotgunUranium
+ description: A dispenser box full of uranium cartridges, designed for riot shotguns.
+ components:
+ - type: BallisticAmmoProvider
+ proto: ShellShotgunUranium
+ - type: Sprite
+ layers:
+ - state: boxwide
+ - state: shelluranium
+
- type: entity
name: shotgun practice cartridges dispenser
parent: AmmoProviderShotgunShell
@@ -113,4 +126,4 @@
- type: Sprite
layers:
- state: boxwide
- - state: shellslug
\ No newline at end of file
+ - state: shellslug
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml
index ebb98b879c6..495bcd37d15 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml
@@ -68,6 +68,19 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
+- type: entity
+ id: MagazineLightRifleEmpty
+ name: "magazine (.30 rifle any)"
+ suffix: empty
+ parent: MagazineLightRifle
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+
- type: entity
id: MagazineLightRiflePractice
name: "magazine (.30 rifle practice)"
@@ -96,6 +109,14 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
+- type: entity
+ id: MagazineLightRifleIncendiary
+ name: "magazine (.30 rifle incendiary)"
+ parent: MagazineLightRifle
+ components:
+ - type: BallisticAmmoProvider
+ proto: CartridgeLightRifleIncendiary
+
- type: entity
id: MagazineLightRifleMaxim
name: "pan magazine (.30 rifle)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml
index 1d8437a884d..304014d11b4 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml
@@ -47,6 +47,19 @@
zeroVisible: false
- type: Appearance
+- type: entity
+ id: MagazineMagnumEmpty
+ name: pistol magazine (.45 magnum any)
+ suffix: empty
+ parent: BaseMagazineMagnum
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+
- type: entity
id: MagazineMagnum
name: pistol magazine (.45 magnum)
@@ -103,6 +116,19 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
+- type: entity
+ id: MagazineMagnumSubMachineGunEmpty
+ name: "Vector magazine (.45 magnum any)"
+ suffix: empty
+ parent: BaseMagazineMagnumSubMachineGun
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+
- type: entity
id: MagazineMagnumSubMachineGun
name: "Vector magazine (.45 magnum)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml
index 35262819074..b55961a87f6 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml
@@ -128,6 +128,14 @@
containers:
ballistic-ammo: !type:Container
+- type: entity
+ id: MagazinePistolSubMachineGunTopMountedEmpty
+ name: WT550 magazine (.35 auto top-mounted any)
+ parent: MagazinePistolSubMachineGunTopMounted
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+
- type: entity
id: MagazinePistol
name: pistol magazine (.35 auto)
@@ -142,6 +150,28 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
+- type: entity
+ id: MagazinePistolEmpty
+ name: pistol magazine (.35 auto any)
+ suffix: empty
+ parent: MagazinePistol
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+
+
+- type: entity
+ id: MagazinePistolIncendiary
+ name: pistol magazine (.35 auto incendiary)
+ parent: MagazinePistol
+ components:
+ - type: BallisticAmmoProvider
+ proto: CartridgePistolIncendiary
+
- type: entity
id: MagazinePistolPractice
name: pistol magazine (.35 auto practice)
@@ -156,6 +186,33 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
+- type: entity
+ id: MagazinePistolUranium
+ name: pistol magazine (.35 auto uranium)
+ parent: BaseMagazinePistol
+ components:
+ - type: BallisticAmmoProvider
+ proto: CartridgePistolUranium
+ - type: Sprite
+ layers:
+ - state: uranium
+ map: ["enum.GunVisualLayers.Base"]
+ - state: mag-1
+ map: ["enum.GunVisualLayers.Mag"]
+
+- type: entity
+ id: MagazinePistolHighCapacityEmpty
+ name: machine pistol magazine (.35 auto any)
+ suffix: empty
+ parent: BaseMagazinePistolHighCapacity
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+
- type: entity
id: MagazinePistolHighCapacity
name: machine pistol magazine (.35 auto)
@@ -218,6 +275,19 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
+- type: entity
+ id: MagazinePistolSubMachineGunEmpty
+ name: SMG magazine (.35 auto any)
+ suffix: empty
+ parent: BaseMagazinePistolSubMachineGun
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+
- type: entity
id: MagazinePistolSubMachineGunPractice
name: SMG magazine (.35 auto practice)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml
index d060af2c21c..b2148ba1b2d 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml
@@ -47,6 +47,27 @@
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
+- type: entity
+ id: MagazineRifleEmpty
+ name: "magazine (.20 rifle any)"
+ suffix: empty
+ parent: MagazineRifle
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+
+- type: entity
+ id: MagazineRifleIncendiary
+ name: "magazine (.20 rifle incendiary)"
+ parent: MagazineRifle
+ components:
+ - type: BallisticAmmoProvider
+ proto: CartridgeRifleIncendiary
+
- type: entity
id: MagazineRiflePractice
name: "magazine (.20 rifle practice)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml
index 92d94cabf31..a6deb4f65ac 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml
@@ -33,6 +33,15 @@
zeroVisible: false
- type: Appearance
+- type: entity
+ id: MagazineShotgunEmpty
+ name: ammo drum (.50 shells any)
+ suffix: empty
+ parent: BaseMagazineShotgun
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+
- type: entity
id: MagazineShotgun
name: ammo drum (.50 pellet)
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml
index fda8046cc68..08d50db9b2c 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml
@@ -39,6 +39,27 @@
zeroVisible: false
- type: Appearance
+- type: entity
+ id: SpeedLoaderMagnumEmpty
+ name: "speed loader (.45 magnum any)"
+ parent: SpeedLoaderMagnum
+ components:
+ - type: BallisticAmmoProvider
+ proto: null
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi
+ layers:
+ - state: base
+ map: [ "enum.GunVisualLayers.Base" ]
+
+- type: entity
+ id: SpeedLoaderMagnumIncendiary
+ name: "speed loader (.45 magnum incendiary)"
+ parent: SpeedLoaderMagnum
+ components:
+ - type: BallisticAmmoProvider
+ proto: CartridgeMagnumIncendiary
+
- type: entity
id: SpeedLoaderMagnumPractice
name: "speed loader (.45 magnum practice)"
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml
index db98c6eabe9..32b4fc6075a 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml
@@ -12,7 +12,8 @@
- type: Clothing
quickEquip: false
slots:
- - Back
+ - Back
+ - suitStorage
- type: Wieldable
wieldSound:
path: /Audio/Items/bow_pull.ogg
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml
new file mode 100644
index 00000000000..5c26020d72c
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml
@@ -0,0 +1,98 @@
+- type: entity
+ parent: BaseItem
+ id: Cane
+ name: cane
+ description: A wooden cane.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Melee/cane.rsi
+ state: cane
+ - type: Item
+ size: Normal
+ sprite: Objects/Weapons/Melee/cane.rsi
+ - type: Appearance
+ - type: MeleeWeapon
+ wideAnimationRotation: 45
+ damage:
+ types:
+ Blunt: 5
+ - type: StaminaDamageOnHit
+ damage: 5
+ - type: Wieldable
+ - type: IncreaseDamageOnWield
+ damage:
+ types:
+ Blunt: 3
+ - type: UseDelay
+ delay: 1
+
+- type: entity
+ name: cane blade
+ parent: BaseItem
+ id: CaneBlade
+ description: A sharp blade with a cane shaped hilt.
+ components:
+ - type: Sharp
+ - type: Sprite
+ sprite: Objects/Weapons/Melee/cane_blade.rsi
+ state: icon
+ - type: MeleeWeapon
+ wideAnimationRotation: 65
+ attackRate: 1.5
+ damage:
+ types:
+ Slash: 14
+ soundHit:
+ path: /Audio/Weapons/bladeslice.ogg
+ - type: Item
+ size: Normal
+ sprite: Objects/Weapons/Melee/cane_blade.rsi
+ - type: Tag
+ tags:
+ - CaneBlade
+ - type: DisarmMalus
+
+- type: entity
+ parent: Cane
+ id: CaneSheath
+ suffix: Empty
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Melee/cane.rsi
+ state: cane-empty
+ - type: ContainerContainer
+ containers:
+ storagebase: !type:Container
+ ents: []
+ item: !type:ContainerSlot
+ - type: UserInterface
+ interfaces:
+ enum.StorageUiKey.Key:
+ type: StorageBoundUserInterface
+ - type: ItemSlots
+ slots:
+ item:
+ name: CaneBlade
+ insertVerbText: sheath-insert-verb
+ ejectVerbText: sheath-eject-verb
+ whitelist:
+ tags:
+ - CaneBlade
+ insertSound: /Audio/Items/sheath.ogg
+ ejectSound: /Audio/Items/unsheath.ogg
+ - type: ItemMapper
+ mapLayers:
+ cane:
+ whitelist:
+ tags:
+ - CaneBlade
+
+- type: entity
+ id: CaneSheathFilled
+ parent: CaneSheath
+ suffix: Filled
+ components:
+ - type: ContainerFill
+ containers:
+ item:
+ - CaneBlade
diff --git a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml
index 28068e22817..85b274224d7 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml
@@ -1,4 +1,4 @@
-- type: entity
+- type: entity
parent: BaseMachinePowered
id: FaxMachineBase
name: long range fax machine
@@ -9,7 +9,7 @@
drawdepth: SmallObjects
layers:
- state: icon
- map: ["base"]
+ map: [ "enum.FaxMachineVisuals.VisualState" ]
- type: Icon
sprite: Structures/Machines/fax_machine.rsi
state: icon
@@ -36,23 +36,27 @@
type: FaxBoundUi
- type: ApcPowerReceiver
powerLoad: 250
+ - type: Faxecute
+ damage:
+ types:
+ Blunt: 100
- type: FaxMachine
paperSlot:
insertSound: /Audio/Machines/scanning.ogg
ejectSound: /Audio/Machines/tray_eject.ogg
whitelist:
components:
- - Paper
+ - FaxableObject #used to be PaperComponent - brainfood1183
- type: GenericVisualizer
visuals:
enum.PowerDeviceVisuals.Powered:
- base:
+ enum.FaxMachineVisuals.VisualState:
True: { state: idle }
False: { state: icon }
enum.FaxMachineVisuals.VisualState:
- base:
- Inserting: { state: inserting }
+ enum.FaxMachineVisuals.VisualState:
Printing: { state: printing }
+ Normal: {state: idle}
- type: ItemSlots
- type: ContainerContainer
containers:
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index 40c18088b1f..27a768f3356 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -166,46 +166,55 @@
- ClothingHeadHatWelding
- type: EmagLatheRecipes
emagStaticRecipes:
- - CartridgePistol
- - CartridgeMagnum
- - ShellShotgun
- - ShellShotgunFlare
- - ShellTranquilizer
- - CartridgeLightRifle
- - CartridgeRifle
- - MagazineBoxPistol
- - MagazineBoxMagnum
- - MagazineBoxRifle
- - MagazineBoxLightRifle
- - GrenadeBlast
+ - BoxLethalshot
+ - BoxShotgunFlare
+ - GrenadeBlast
+ - MagazineBoxLightRifle
+ - MagazineBoxMagnum
+ - MagazineBoxPistol
+ - MagazineBoxRifle
+ - MagazineLightRifle
+ - MagazineLightRifleEmpty
+ - MagazinePistol
+ - MagazinePistolEmpty
+ - MagazinePistolSubMachineGun
+ - MagazinePistolSubMachineGunEmpty
+ - MagazineRifle
+ - MagazineRifleEmpty
+ - MagazineShotgun
+ - MagazineShotgunEmpty
+ - ShellTranquilizer
+ - SpeedLoaderMagnum
+ - SpeedLoaderMagnumEmpty
emagDynamicRecipes:
- - ShellShotgunBeanbag
- - GrenadeTearGas
- - GrenadeNonletal
- - ShellShotgunIncendiary
- - CartridgePistolIncendiary
- - CartridgeMagnumIncendiary
- - CartridgeLightRifleIncendiary
- - CartridgeRifleIncendiary
- - MagazineBoxPistolIncendiary
- - MagazineBoxMagnumIncendiary
+ - BoxBeanbag
+ - BoxShotgunIncendiary
+ - BoxShotgunUranium
+ - GrenadeEMP
+ - GrenadeFlash
- MagazineBoxLightRifleIncendiary
- - MagazineBoxRifleIncendiary
- - ShellShotgunUranium
- - CartridgePistolUranium
- - CartridgeMagnumUranium
- - CartridgeLightRifleUranium
- - CartridgeRifleUranium
- - MagazineBoxPistolUranium
- - MagazineBoxMagnumUranium
- MagazineBoxLightRifleUranium
+ - MagazineBoxMagnumIncendiary
+ - MagazineBoxMagnumUranium
+ - MagazineBoxPistolIncendiary
+ - MagazineBoxPistolUranium
+ - MagazineBoxRifleIncendiary
- MagazineBoxRifleUranium
- - PowerCageSmall
- - PowerCageMedium
- - PowerCageHigh
- MagazineGrenadeEmpty
- - GrenadeEMP
- - GrenadeFlash
+ - MagazineLightRifleIncendiary
+ - MagazineLightRifleUranium
+ - MagazinePistolIncendiary
+ - MagazinePistolUranium
+ - MagazineRifleIncendiary
+ - MagazineRifleUranium
+ - MagazineShotgunBeanbag
+ - MagazineShotgunIncendiary
+ - MagazineShotgunIncendiary
+ - PowerCageHigh
+ - PowerCageMedium
+ - PowerCageSmall
+ - SpeedLoaderMagnumIncendiary
+ - SpeedLoaderMagnumUranium
- type: entity
id: AutolatheHyperConvection
@@ -292,6 +301,7 @@
- PowerCellMicroreactor
- PowerCellHigh
- WeaponPistolCHIMP
+ - ClothingMaskWeldingGas
- WeaponGauntletGorilla
- SynthesizerInstrument
- ClothingShoesBootsMagSci
@@ -420,6 +430,7 @@
- PowerComputerCircuitboard
- AutolatheHyperConvectionMachineCircuitboard
- ProtolatheHyperConvectionMachineCircuitboard
+ - CircuitImprinterHyperConvectionMachineCircuitboard
- FatExtractorMachineCircuitboard
- FlatpackerMachineCircuitboard
- SheetifierMachineCircuitboard
@@ -472,6 +483,21 @@
- RawMaterial
- Ingot
+- type: entity
+ id: CircuitImprinterHyperConvection
+ parent: CircuitImprinter
+ name: hyper convection circuit imprinter
+ description: A highly-experimental circuit imprinter that harnesses the power of extreme heat to slowly create objects more cost-effectively.
+ components:
+ - type: Sprite
+ sprite: Structures/Machines/circuit_imprinter_hypercon.rsi
+ - type: Lathe
+ materialUseMultiplier: 0.5
+ timeMultiplier: 1.5
+ - type: LatheHeatProducing
+ - type: Machine
+ board: CircuitImprinterHyperConvectionMachineCircuitboard
+
- type: entity
id: ExosuitFabricator
parent: BaseLathe
@@ -655,74 +681,89 @@
idleState: icon
runningState: icon
staticRecipes:
+ - BoxLethalshot
+ - BoxShotgunFlare
+ - BoxShotgunPractice
+ - BoxShotgunSlug
- ClothingEyesHudSecurity
- Flash
- - Handcuffs
- - Zipties
- - Stunbaton
- ForensicPad
- - RiotShield
- - ShellShotgun
- - ShellShotgunBeanbag
- - ShellShotgunSlug
- - ShellShotgunFlare
- - ShellTranquilizer
+ - Handcuffs
+ - MagazineBoxLightRifle
+ - MagazineBoxLightRiflePractice
+ - MagazineBoxMagnum
+ - MagazineBoxMagnumPractice
+ - MagazineBoxPistol
+ - MagazineBoxPistolPractice
+ - MagazineBoxRifle
+ - MagazineBoxRiflePractice
+ - MagazineLightRifle
+ - MagazineLightRifleEmpty
- MagazinePistol
+ - MagazinePistolEmpty
- MagazinePistolSubMachineGun
+ - MagazinePistolSubMachineGunEmpty
- MagazinePistolSubMachineGunTopMounted
+ - MagazinePistolSubMachineGunTopMountedEmpty
- MagazineRifle
- - MagazineLightRifle
- - MagazineBoxPistol
- - MagazineBoxMagnum
- - MagazineBoxRifle
- - MagazineBoxLightRifle
+ - MagazineRifleEmpty
+ - MagazineShotgun
+ - MagazineShotgunEmpty
+ - MagazineShotgunSlug
+ - RiotShield
- SpeedLoaderMagnum
+ - SpeedLoaderMagnumEmpty
+ - Stunbaton
+ - TargetClown
- TargetHuman
- TargetSyndicate
- - TargetClown
- - MagazineBoxLightRiflePractice
- - MagazineBoxMagnumPractice
- - MagazineBoxPistolPractice
- - MagazineBoxRiflePractice
- - ShellShotgunPractice
- - WeaponLaserCarbinePractice
- WeaponDisablerPractice
+ - WeaponLaserCarbinePractice
+ - Zipties
dynamicRecipes:
- - CartridgeLightRifleIncendiary
- - CartridgeMagnumIncendiary
- - CartridgePistolIncendiary
- - CartridgeRifleIncendiary
- - CartridgeLightRifleUranium
- - CartridgeMagnumUranium
- - CartridgePistolUranium
- - CartridgeRifleUranium
+ - BoxBeanbag
+ - BoxShotgunIncendiary
+ - BoxShotgunUranium
- ExplosivePayload
- FlashPayload
+ - GrenadeEMP
+ - GrenadeFlash
- HoloprojectorSecurity
- MagazineBoxLightRifleIncendiary
- - MagazineBoxMagnumIncendiary
- - MagazineBoxPistolIncendiary
- - MagazineBoxRifleIncendiary
- MagazineBoxLightRifleUranium
+ - MagazineBoxMagnumIncendiary
- MagazineBoxMagnumUranium
+ - MagazineBoxPistolIncendiary
- MagazineBoxPistolUranium
+ - MagazineBoxRifleIncendiary
- MagazineBoxRifleUranium
- MagazineGrenadeEmpty
- - GrenadeEMP
- - GrenadeFlash
- - ShellShotgunBeanbag
- - GrenadeTearGas
- - GrenadeNonletal
- - ShellShotgunIncendiary
- - ShellShotgunUranium
+ - MagazineLightRifleIncendiary
+ - MagazineLightRifleUranium
+ - MagazinePistolIncendiary
+ - MagazinePistolUranium
+ - MagazineRifleIncendiary
+ - MagazineRifleUranium
+ - MagazineShotgunBeanbag
+ - MagazineShotgunIncendiary
+ - PowerCageHigh
+ - PowerCageMedium
+ - PowerCageSmall
+ - ShellTranquilizer
+ - ShuttleGunDusterCircuitboard
+ - ShuttleGunFriendshipCircuitboard
+ - ShuttleGunPerforatorCircuitboard
+ - ShuttleGunSvalinnMachineGunCircuitboard
- Signaller
- SignalTrigger
+ - SpeedLoaderMagnumIncendiary
+ - SpeedLoaderMagnumUranium
- TelescopicShield
- TimerTrigger
- Truncheon
- VoiceTrigger
- - WeaponDisablerPractice
- WeaponAdvancedLaser
+ - WeaponDisabler
- WeaponDisablerSMG
- WeaponLaserCannon
- WeaponLaserCarbine
@@ -739,6 +780,7 @@
- ShuttleGunPerforatorCircuitboard
- ShuttleGunFriendshipCircuitboard
- ShuttleGunDusterCircuitboard
+ - PortableRecharger
- type: MaterialStorage
whitelist:
tags:
@@ -771,18 +813,25 @@
idleState: icon
runningState: icon
staticRecipes:
- - CartridgePistol
- - CartridgeMagnum
- - ShellShotgun
- - ShellShotgunSlug
- - ShellShotgunFlare
- - ShellTranquilizer
- - CartridgeLightRifle
- - CartridgeRifle
- - MagazineBoxPistol
+ - BoxLethalshot
+ - BoxShotgunFlare
+ - BoxShotgunSlug
+ - MagazineBoxLightRifle
- MagazineBoxMagnum
+ - MagazineBoxPistol
- MagazineBoxRifle
- - MagazineBoxLightRifle
+ - MagazineLightRifle
+ - MagazineLightRifleEmpty
+ - MagazinePistol
+ - MagazinePistolEmpty
+ - MagazineRifle
+ - MagazineRifleEmpty
+ - MagazineShotgun
+ - MagazineShotgunEmpty
+ - MagazineShotgunSlug
+ - ShellTranquilizer
+ - SpeedLoaderMagnum
+ - SpeedLoaderMagnumEmpty
- type: MaterialStorage
whitelist:
tags:
diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml
index 783bec3ba0d..7d7bc94bb32 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/base_structurelockers.yml
@@ -45,7 +45,7 @@
min: 1
max: 2
- type: Construction
- graph: ClosetSteel
+ graph: ClosetSteelSecure
node: done
containers:
- entity_storage
@@ -66,8 +66,3 @@
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- - type: Construction
- graph: ClosetSteelSecure
- node: done
- containers:
- - entity_storage
diff --git a/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml b/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml
index bdb02d2bc35..8177b6b6f0d 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml
@@ -1,97 +1,148 @@
- type: entity
- id: GlassBoxLaser
- name: glass box
- description: A sturdy showcase for an expensive exhibit.
+ id: BaseGlassBox
parent: BaseStructureDynamic
+ abstract: true
placement:
mode: SnapgridCenter
components:
- - type: Anchorable
- delay: 4
- type: Transform
anchored: true
- - type: Damageable
- damageContainer: Inorganic
- damageModifierSet: Glass
- - type: MeleeSound
- soundGroups:
- Brute:
- collection: GlassSmash
- type: Physics
bodyType: Static
- type: Clickable
- type: InteractionOutline
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.45,-0.45,0.45,0.45"
+ density: 1000
+ mask:
+ - MachineMask
+ layer:
+ - MidImpassable
+ - LowImpassable
+ - type: ItemSlots
+ - type: ContainerContainer
+ containers:
+ ItemCabinet: !type:ContainerSlot
+ - type: Anchorable
+ delay: 4
+ - type: Appearance
+
+- type: entity
+ id: GlassBox
+ name: glass box
+ description: A sturdy showcase for an expensive exhibit.
+ parent: BaseGlassBox
+ abstract: true # TODO: Temporarily abstract. Remove it after item scaling in cabinets is implemented.
+ components:
- type: Sprite
+ noRot: true
sprite: Structures/Storage/glassbox.rsi
layers:
- - state: glassbox
- - state: caplaser
+ - state: base
+ - state: caplaser # TODO: Remove it after item scaling in cabinets is implemented.
map: ["enum.ItemCabinetVisualLayers.ContainsItem"]
visible: true
- state: glass
map: ["enum.ItemCabinetVisualLayers.Door"]
- - type: ItemCabinet
- cabinetSlot:
- ejectOnInteract: true
- whitelist:
- tags:
- - WeaponAntiqueLaser
- doorSound:
- path: /Audio/Machines/machine_switch.ogg
- openState: glass-up
- closedState: glass
- - type: Lock
+ - state: locked
+ shader: unshaded
+ map: ["enum.LockVisualLayers.Lock"]
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.45,-0.45,0.45,0.45"
+ density: 1000
+ mask:
+ - MachineMask
+ layer:
+ - LowImpassable
+ - MidImpassable
+ - BulletImpassable
- type: AccessReader
- access: [["Captain"]]
- - type: ItemSlots
- - type: ContainerContainer
- containers:
- ItemCabinet: !type:ContainerSlot
- type: Repairable
- - type: Appearance
+ fuelCost: 15
+ doAfterDelay: 5
+ - type: Lock
+ - type: LockVisuals
- type: DamageVisuals
- thresholds: [4, 8, 12]
+ thresholds: [4, 8, 12] # TODO: Fix damage visuals on open state.
damageDivisor: 7.555
trackAllDamage: true
damageOverlay:
sprite: Structures/Storage/glassbox.rsi
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Glass
+ - type: MeleeSound
+ soundGroups:
+ Brute:
+ collection: GlassSmash
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 150
behaviors:
- - !type:EmptyAllContainersBehaviour
- - !type:PlaySoundBehavior
- sound:
- collection: WindowShatter
- - !type:SpawnEntitiesBehavior
- spawn:
- ShardGlassReinforced:
- min: 1
- max: 1
- GlassBoxLaserBroken:
- min: 1
- max: 1
- - !type:DoActsBehavior
- acts: [ "Destruction" ]
+ - !type:EmptyAllContainersBehaviour
+ - !type:PlaySoundBehavior
+ sound:
+ collection: WindowShatter
+ - !type:PlaySoundBehavior
+ sound:
+ path: /Audio/Machines/warning_buzzer.ogg
+ params:
+ volume: 10
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ ShardGlassReinforced:
+ min: 1
+ max: 2
+ - !type:ChangeConstructionNodeBehavior
+ node: brokenGlassBox
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
- type: entity
- id: GlassBoxLaserOpen
- parent: GlassBoxLaser
- suffix: Open
+ id: GlassBoxLaser
+ parent: GlassBox
+ suffix: AntiqueLaser
components:
+ - type: AccessReader
+ access: [["Captain"]]
+ - type: Construction
+ graph: GlassBox
+ node: glassBox
- type: ItemCabinet
- opened: true
+ cabinetSlot:
+ ejectOnInteract: true
+ whitelist:
+ tags:
+ - WeaponAntiqueLaser
doorSound:
path: /Audio/Machines/machine_switch.ogg
openState: glass-up
closedState: glass
+- type: entity
+ id: GlassBoxLaserOpen
+ parent: GlassBoxLaser
+ suffix: AntiqueLaser, Open
+ components:
+ - type: Lock
+ locked: false
+ - type: ItemCabinet
+ opened: true
+
- type: entity
id: GlassBoxLaserFilled
parent: GlassBoxLaser
- suffix: Filled
+ suffix: AntiqueLaser, Filled
components:
- type: ItemCabinet
cabinetSlot:
@@ -100,40 +151,83 @@
whitelist:
tags:
- WeaponAntiqueLaser
- doorSound:
- path: /Audio/Machines/machine_switch.ogg
- openState: glass-up
- closedState: glass
- type: entity
id: GlassBoxLaserFilledOpen
parent: GlassBoxLaserFilled
- suffix: Filled, Open
+ suffix: AntiqueLaser, Filled, Open
components:
+ - type: Lock
+ locked: false
- type: ItemCabinet
opened: true
- doorSound:
- path: /Audio/Machines/machine_switch.ogg
- openState: glass-up
- closedState: glass
- type: entity
- id: GlassBoxLaserBroken
+ id: GlassBoxFrame
+ name: glass box frame
+ description: A glassless sturdy showcase for an expensive exhibit.
+ parent: BaseGlassBox
+ suffix: Frame
+ components:
+ - type: Sprite
+ noRot: true
+ sprite: Structures/Storage/glassbox.rsi
+ layers:
+ - state: base
+ - type: Construction
+ graph: GlassBox
+ node: boxMissingWires
+ - type: Climbable
+ - type: Damageable
+ damageModifierSet: Wood
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 100
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: WoodDestroy
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ MaterialWoodPlank1:
+ min: 2
+ max: 5
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+
+- type: entity
+ id: GlassBoxBroken
name: broken glass box
description: A broken showcase for a stolen expensive exhibit.
- parent: BaseStructureDynamic
+ parent: GlassBoxFrame
suffix: Broken
- placement:
- mode: SnapgridCenter
components:
- - type: Transform
- anchored: true
- - type: Physics
- bodyType: Static
- type: Sprite
sprite: Structures/Storage/glassbox.rsi
layers:
- - state: glassbox
- - state: glass-4
- - type: Clickable
- - type: InteractionOutline
+ - state: base
+ - state: glass-broken
+ - type: Construction
+ graph: GlassBox
+ node: brokenGlassBox
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 100
+ behaviors:
+ - !type:PlaySoundBehavior
+ sound:
+ collection: WoodDestroy
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ ShardGlassReinforced:
+ min: 1
+ max: 1
+ MaterialWoodPlank1:
+ min: 2
+ max: 5
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
diff --git a/Resources/Prototypes/Flavors/flavors.yml b/Resources/Prototypes/Flavors/flavors.yml
index 25ed9d33720..47a1bc71aa6 100644
--- a/Resources/Prototypes/Flavors/flavors.yml
+++ b/Resources/Prototypes/Flavors/flavors.yml
@@ -1059,6 +1059,11 @@
flavorType: Complex
description: flavor-complex-violets
+- type: flavor
+ id: pyrotton
+ flavorType: Complex
+ description: flavor-complex-pyrotton
+
- type: flavor
id: mothballs
flavorType: Complex
@@ -1067,4 +1072,4 @@
- type: flavor
id: paintthinner
flavorType: Complex
- description: flavor-complex-paint-thinner
+ description: flavor-complex-paint-thinner
\ No newline at end of file
diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml
index c3b68cdf875..dca4f1e1a89 100644
--- a/Resources/Prototypes/GameRules/events.yml
+++ b/Resources/Prototypes/GameRules/events.yml
@@ -231,6 +231,8 @@
prob: 0.02
- id: MobMouse2
prob: 0.02
+ - id: MobMouseCancer
+ prob: 0.001
specialEntries:
- id: SpawnPointGhostRatKing
prob: 0.005
@@ -317,19 +319,6 @@
lightBreakChancePerSecond: 0.0003
doorToggleChancePerSecond: 0.001
-- type: entity
- parent: BaseGameRule
- id: TerminatorSpawn
- noSpawn: true
- components:
- - type: StationEvent
- weight: 8
- duration: 1
- earliestStart: 30
- minimumPlayers: 20
- - type: RandomSpawnRule
- prototype: SpawnPointGhostTerminator
-
- type: entity
id: VentClog
parent: BaseGameRule
@@ -370,6 +359,8 @@
prob: 0.02
- id: MobMouse2
prob: 0.02
+ - id: MobMouseCancer
+ prob: 0.001
- type: entity
id: SlimesSpawn
diff --git a/Resources/Prototypes/GameRules/midround.yml b/Resources/Prototypes/GameRules/midround.yml
index 18f7f0945b1..2c2ad3ed04d 100644
--- a/Resources/Prototypes/GameRules/midround.yml
+++ b/Resources/Prototypes/GameRules/midround.yml
@@ -52,13 +52,13 @@
briefing:
sound: "/Audio/Misc/thief_greeting.ogg"
-- type: entity
- noSpawn: true
- parent: BaseGameRule
- id: Exterminator
- components:
- - type: GenericAntagRule
- agentName: terminator-round-end-agent-name
- objectives:
- - TerminateObjective
- - ShutDownObjective
+#- type: entity
+# noSpawn: true
+# parent: BaseGameRule
+# id: Exterminator
+# components:
+# - type: GenericAntagRule
+# agentName: terminator-round-end-agent-name
+# objectives:
+# - TerminateObjective
+# - ShutDownObjective
diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml
index 1bfbb0ee538..17e4145b325 100644
--- a/Resources/Prototypes/GameRules/roundstart.yml
+++ b/Resources/Prototypes/GameRules/roundstart.yml
@@ -154,7 +154,7 @@
- type: AntagSelection
definitions:
- prefRoles: [ Traitor ]
- max: 12
+ max: 8
playerRatio: 10
lateJoinAdditional: true
mindComponents:
diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml
index c5278a0dfa3..a9818daf0e9 100644
--- a/Resources/Prototypes/Hydroponics/seeds.yml
+++ b/Resources/Prototypes/Hydroponics/seeds.yml
@@ -1520,6 +1520,8 @@
packetPrototype: CottonSeeds
productPrototypes:
- CottonBol
+ mutationPrototypes:
+ - pyrotton
lifespan: 25
maturation: 8
production: 3
@@ -1534,3 +1536,29 @@
Max: 10
PotencyDivisor: 20
+- type: seed
+ id: pyrotton
+ name: seeds-pyrotton-name
+ noun: seeds-noun-seeds
+ displayName: seeds-pyrotton-display-name
+ plantRsi: Objects/Specific/Hydroponics/pyrotton.rsi
+ packetPrototype: PyrottonSeeds
+ productPrototypes:
+ - PyrottonBol
+ lifespan: 25
+ maturation: 8
+ production: 3
+ yield: 2
+ potency: 5
+ idealLight: 8
+ growthStages: 3
+ waterConsumption: 0.80
+ chemicals:
+ Fiber:
+ Min: 5
+ Max: 10
+ PotencyDivisor: 20
+ Phlogiston:
+ Min: 4
+ Max: 8
+ PotencyDivisor: 30
diff --git a/Resources/Prototypes/NPCs/Combat/melee.yml b/Resources/Prototypes/NPCs/Combat/melee.yml
index 122875ed97a..b0746e56793 100644
--- a/Resources/Prototypes/NPCs/Combat/melee.yml
+++ b/Resources/Prototypes/NPCs/Combat/melee.yml
@@ -17,6 +17,29 @@
- !type:HTNCompoundTask
task: PickupMeleeCompound
+ - preconditions:
+ - !type:BuckledPrecondition
+ isBuckled: true
+ tasks:
+ - !type:HTNPrimitiveTask
+ operator: !type:UnbuckleOperator
+ shutdownState: TaskFinished
+
+ - preconditions:
+ - !type:InContainerPrecondition
+ isInContainer: true
+ tasks:
+ - !type:HTNCompoundTask
+ task: EscapeCompound
+
+ - preconditions:
+ - !type:PulledPrecondition
+ isPulled: true
+ tasks:
+ - !type:HTNPrimitiveTask
+ operator: !type:UnPullOperator
+ shutdownState: TaskFinished
+
# Melee combat (unarmed or otherwise)
- tasks:
- !type:HTNPrimitiveTask
@@ -101,6 +124,21 @@
proto: NearbyMeleeTargets
key: Target
+- type: htnCompound
+ id: EscapeCompound
+ branches:
+ - tasks:
+ - !type:HTNPrimitiveTask
+ operator: !type:ContainerOperator
+ targetKey: Target
+ shutdownState: TaskFinished
+ - !type:HTNPrimitiveTask
+ operator: !type:EscapeOperator
+ targetKey: Target
+ preconditions:
+ - !type:InContainerPrecondition
+ isInContainer: true
+
- type: htnCompound
id: MeleeAttackOrderedTargetCompound
branches:
diff --git a/Resources/Prototypes/Objectives/terminator.yml b/Resources/Prototypes/Objectives/terminator.yml
deleted file mode 100644
index 1b569599a7f..00000000000
--- a/Resources/Prototypes/Objectives/terminator.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-- type: entity
- abstract: true
- parent: BaseObjective
- id: BaseTerminatorObjective
- components:
- - type: Objective
- difficulty: 1
- issuer: susnet
- - type: RoleRequirement
- roles:
- components:
- - TerminatorRole
-
-- type: entity
- noSpawn: true
- parent: [BaseTerminatorObjective, BaseKillObjective]
- id: TerminateObjective
- description: Follow your programming and terminate the target.
- components:
- - type: Objective
- unique: false
- - type: TargetObjective
- title: objective-terminate-title
- - type: PickRandomPerson
- - type: TerminatorTargetOverride
- - type: KillPersonCondition
- requireDead: true
-
-- type: entity
- noSpawn: true
- parent: BaseTerminatorObjective
- id: ShutDownObjective
- name: Shut down
- description: Once the mission is complete die to prevent our technology from being stolen.
- components:
- - type: Objective
- icon:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: skull_icon
- - type: DieCondition
diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
index 01b83845d07..ad22c72ff17 100644
--- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
+++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
@@ -345,7 +345,7 @@
metamorphicSprite:
sprite: Objects/Consumable/Drinks/tequillaglass.rsi
state: icon_empty
- metamorphicMaxFillLevels: 4
+ metamorphicMaxFillLevels: 3
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
metabolisms:
@@ -1290,6 +1290,12 @@
physicalDesc: reagent-physical-desc-strong-smelling
flavor: moonshine
color: "#d1d7d155"
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/moonshineglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 6
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
metabolisms:
Drink:
effects:
diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml
index a41178fd353..34712ce5ba5 100644
--- a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml
+++ b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml
@@ -10,11 +10,17 @@
metabolisms:
Drink:
effects:
- - !type:SatiateThirst
- factor: 2
- - !type:AdjustReagent
- reagent: Theobromine
- amount: 0.05
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Theobromine
+ amount: 0.05
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/coffeeglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 4
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: HotCocoa
@@ -100,9 +106,9 @@
flavor: tea
color: "#7EB626"
metamorphicSprite:
- sprite: Objects/Consumable/Drinks/glass_green.rsi
+ sprite: Objects/Consumable/Drinks/greenteaglass.rsi
state: icon_empty
- metamorphicMaxFillLevels: 5
+ metamorphicMaxFillLevels: 4
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
@@ -149,7 +155,7 @@
flavor: icedtea
color: "#5B821B"
metamorphicSprite:
- sprite: Objects/Consumable/Drinks/glass_green.rsi
+ sprite: Objects/Consumable/Drinks/icedgreenteaglass.rsi
state: icon_empty
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
@@ -361,11 +367,17 @@
metabolisms:
Drink:
effects:
- - !type:SatiateThirst
- factor: 2
- - !type:AdjustReagent
- reagent: Theobromine
- amount: 0.05
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Theobromine
+ amount: 0.05
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/teaglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 4
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: TonicWater
@@ -376,6 +388,12 @@
flavor: tonicwater
color: "#0064C8"
fizziness: 0.4
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/tonicglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 5
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: Water
@@ -406,8 +424,14 @@
meltingPoint: 0.0
boilingPoint: 100.0
plantMetabolism:
- - !type:PlantAdjustWater
- amount: 1
+ - !type:PlantAdjustWater
+ amount: 1
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/iceglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 3
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: DryRamen
diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml
index ee1492b45e2..c42791fa8fe 100644
--- a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml
+++ b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml
@@ -63,6 +63,12 @@
physicalDesc: reagent-physical-desc-citric
flavor: sour
color: "#fff690"
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/lemonjuiceglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 5
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: JuiceLime
@@ -89,6 +95,12 @@
physicalDesc: reagent-physical-desc-citric
flavor: orange
color: "#E78108"
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/orangejuiceglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 5
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: JuicePineapple
@@ -125,3 +137,9 @@
physicalDesc: reagent-physical-desc-sweet
flavor: watermelon
color: "#EF3520"
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/watermelonglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 4
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml
index 3dda5b5329a..f8d3f41af9b 100644
--- a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml
+++ b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml
@@ -7,6 +7,12 @@
flavor: soda
color: "#6c2828"
recognizable: true
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/colaglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 5
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: RoyRogers
@@ -42,6 +48,12 @@
physicalDesc: reagent-physical-desc-fizzy
flavor: drgibb
color: "#102000"
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/dr_gibb_glass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 5
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: EnergyDrink
@@ -174,6 +186,12 @@
physicalDesc: reagent-physical-desc-fizzy
flavor: sodacitrus
color: "#a6fa5a"
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/space_mountain_wind_glass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 5
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: SpaceUp
@@ -183,6 +201,12 @@
physicalDesc: reagent-physical-desc-fizzy
flavor: spaceup
color: "#e3e3e37d"
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/space-up_glass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 6
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
- type: reagent
id: Starkist
diff --git a/Resources/Prototypes/Reagents/Consumable/Food/food.yml b/Resources/Prototypes/Reagents/Consumable/Food/food.yml
index 7a0c43b181e..ba4bcb5dc2a 100644
--- a/Resources/Prototypes/Reagents/Consumable/Food/food.yml
+++ b/Resources/Prototypes/Reagents/Consumable/Food/food.yml
@@ -111,6 +111,12 @@
amount: 2
- !type:PlantAdjustPests
amount: 2
+ metamorphicSprite:
+ sprite: Objects/Consumable/Drinks/sugarglass.rsi
+ state: icon_empty
+ metamorphicMaxFillLevels: 7
+ metamorphicFillBaseName: fill-
+ metamorphicChangeColor: false
diff --git a/Resources/Prototypes/Reagents/botany.yml b/Resources/Prototypes/Reagents/botany.yml
index af51ef9b061..ed1ca41e20b 100644
--- a/Resources/Prototypes/Reagents/botany.yml
+++ b/Resources/Prototypes/Reagents/botany.yml
@@ -230,6 +230,9 @@
- !type:OrganType
type: Rat
shouldHave: false
+ - !type:OrganType
+ type: Vox
+ shouldHave: false
- !type:ReagentThreshold
reagent: Ammonia
min: 0.8
@@ -257,6 +260,11 @@
Burn: -5
types:
Bloodloss: -5
+ - !type:Oxygenate # ammonia displaces nitrogen in vox blood
+ conditions:
+ - !type:OrganType
+ type: Vox
+ factor: -4
- type: reagent
diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml
index 9cb73fffb85..06fb2b269b6 100644
--- a/Resources/Prototypes/Reagents/gases.yml
+++ b/Resources/Prototypes/Reagents/gases.yml
@@ -35,6 +35,25 @@
ratios:
CarbonDioxide: 1.0
Oxygen: -1.0
+ - !type:HealthChange
+ conditions:
+ - !type:OrganType
+ type: Vox
+ scaleByQuantity: true
+ ignoreResistances: true
+ damage:
+ types:
+ Poison:
+ 7
+ - !type:AdjustAlert
+ alertType: Toxins
+ conditions:
+ - !type:ReagentThreshold
+ min: 0.5
+ - !type:OrganType
+ type: Vox
+ clear: true
+ time: 5
- type: reagent
id: Plasma
@@ -142,6 +161,9 @@
- !type:OrganType
type: Plant
shouldHave: false
+ - !type:OrganType
+ type: Vox
+ shouldHave: false
# Don't want people to get toxin damage from the gas they just
# exhaled, right?
- !type:ReagentThreshold
@@ -194,7 +216,7 @@
- !type:OrganType
type: Vox
ratios:
- CarbonDioxide: 1.0
+ Ammonia: 1.0
Nitrogen: -1.0
- !type:ModifyLungGas
conditions:
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/glassbox.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/glassbox.yml
new file mode 100644
index 00000000000..081f22ea8dd
--- /dev/null
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/glassbox.yml
@@ -0,0 +1,160 @@
+- type: constructionGraph
+ id: GlassBox
+ start: start
+ graph:
+ - node: start
+ actions:
+ - !type:DeleteEntity
+ edges:
+ - to: boxMissingWires
+ completed:
+ - !type:SetAnchor
+ value: false
+ steps:
+ - material: WoodPlank
+ amount: 10
+ doAfter: 5
+
+ - node: boxMissingWires
+ entity: GlassBoxFrame
+ edges:
+ - to: boxMissingTrigger
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - material: Cable
+ amount: 2
+ doAfter: 0.5
+
+ - to: start
+ steps:
+ - tool: Prying
+ doAfter: 5
+ completed:
+ - !type:SpawnPrototype
+ prototype: MaterialWoodPlank1
+ amount: 10
+
+ - node: boxMissingTrigger
+ edges:
+ - to: boxTriggerUnsecured
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tag: SignalTrigger
+ name: a Signal Trigger
+ icon:
+ sprite: Objects/Devices/signaltrigger.rsi
+ state: signaltrigger
+ doAfter: 0.5
+
+ - to: boxMissingWires
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tool: Cutting
+ doAfter: 0.25
+ completed:
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 2
+
+ - node: boxTriggerUnsecured
+ edges:
+ - to: boxMissingRGlass
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tool: Screwing
+ doAfter: 0.5
+
+ - to: boxMissingTrigger
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tool: Prying
+ doAfter: 0.5
+ completed:
+ - !type:SpawnPrototype
+ prototype: SignalTrigger
+ amount: 1
+
+ - node: boxMissingRGlass
+ edges:
+ - to: boxRGlassUnsecured
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - material: ReinforcedGlass
+ amount: 5
+ doAfter: 2.5
+
+ - to: boxTriggerUnsecured
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tool: Screwing
+ doAfter: 0.5
+
+ - node: boxRGlassUnsecured
+ edges:
+ - to: glassBox
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tool: Screwing
+ doAfter: 0.5
+
+ - to: boxMissingRGlass
+ conditions:
+ - !type:EntityAnchored
+ steps:
+ - tool: Prying
+ doAfter: 2
+ completed:
+ - !type:SpawnPrototype
+ prototype: SheetRGlass1
+ amount: 5
+
+ - node: brokenGlassBox
+ entity: GlassBoxBroken
+ edges:
+ - to: boxMissingWires
+ steps:
+ - tool: Prying
+ doAfter: 2
+ completed:
+ - !type:SpawnPrototype
+ prototype: ShardGlassReinforced
+ amount: 1
+
+ - node: glassBox
+ entity: GlassBoxLaser
+ edges:
+ - to: boxMissingWires
+ steps:
+ - tool: Screwing
+ doAfter: 4
+ - tool: Pulsing
+ doAfter: 2
+ - tool: Cutting
+ doAfter: 2
+ - tool: Screwing
+ doAfter: 2
+ - tool: Welding
+ doAfter: 10
+ - tool: Anchoring
+ doAfter: 2
+ - tool: Prying
+ doAfter: 2
+ completed:
+ - !type:EmptyAllContainers
+ - !type:SpawnPrototype
+ prototype: CableApcStack1
+ amount: 2
+ - !type:SpawnPrototype
+ prototype: SignalTrigger
+ amount: 1
+ - !type:SpawnPrototype
+ prototype: SheetRGlass1
+ amount: 5
diff --git a/Resources/Prototypes/Recipes/Construction/storage.yml b/Resources/Prototypes/Recipes/Construction/storage.yml
index 41abf881b65..c8edebc5096 100644
--- a/Resources/Prototypes/Recipes/Construction/storage.yml
+++ b/Resources/Prototypes/Recipes/Construction/storage.yml
@@ -49,3 +49,21 @@
canBuildInImpassable: false
conditions:
- !type:TileNotBlocked
+
+# ItemCabinets
+- type: construction
+ id: ShowCase
+ name: showcase
+ description: A sturdy showcase for an expensive exhibit.
+ graph: GlassBox
+ startNode: start
+ targetNode: glassBox
+ category: construction-category-storage
+ icon:
+ sprite: Structures/Storage/glassbox.rsi
+ state: icon
+ objectType: Structure
+ placementMode: SnapgridCenter
+ canBuildInImpassable: false
+ conditions:
+ - !type:TileNotBlocked
diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml
index 7e450513afe..e72c56ff44c 100644
--- a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml
+++ b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml
@@ -19,8 +19,6 @@
conditions:
- !type:StorageWelded
welded: false
- - !type:Locked
- locked: false
completed:
- !type:SpawnPrototype
prototype: SheetSteel1
diff --git a/Resources/Prototypes/Recipes/Lathes/devices.yml b/Resources/Prototypes/Recipes/Lathes/devices.yml
index 8b748f3fe5b..6a786f2b244 100644
--- a/Resources/Prototypes/Recipes/Lathes/devices.yml
+++ b/Resources/Prototypes/Recipes/Lathes/devices.yml
@@ -76,7 +76,7 @@
Steel: 100
Plastic: 200
Glass: 100
-
+
- type: latheRecipe
id: SignallerAdvanced
result: RemoteSignallerAdvanced
@@ -175,6 +175,14 @@
Plasma: 1500
Uranium: 150
+- type: latheRecipe
+ id: ClothingMaskWeldingGas
+ result: ClothingMaskWeldingGas
+ completetime: 3
+ materials:
+ Steel: 600
+ Glass: 200
+
- type: latheRecipe
id: WeaponForceGun
result: WeaponForceGun
diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml
index a6f3e6cece6..b78703942e1 100644
--- a/Resources/Prototypes/Recipes/Lathes/electronics.yml
+++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml
@@ -114,7 +114,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -124,7 +124,7 @@
completetime: 4
materials:
Steel: 150
- Glass: 900
+ Glass: 500
Gold: 50
- type: latheRecipe
@@ -134,7 +134,7 @@
completetime: 4
materials:
Steel: 150
- Glass: 900
+ Glass: 500
Gold: 50
- type: latheRecipe
@@ -144,7 +144,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: PortableScrubberMachineCircuitBoard
@@ -153,7 +153,7 @@
completetime: 4
materials:
Steel: 150
- Glass: 900
+ Glass: 500
Gold: 50
- type: latheRecipe
@@ -163,7 +163,7 @@
completetime: 4
materials:
Steel: 150
- Glass: 900
+ Glass: 500
Gold: 50
- type: latheRecipe
@@ -173,7 +173,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: CryoPodMachineCircuitboard
@@ -182,7 +182,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -192,7 +192,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ChemDispenserMachineCircuitboard
@@ -201,7 +201,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -211,7 +211,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -221,7 +221,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -231,7 +231,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: AutolatheMachineCircuitboard
@@ -240,7 +240,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ProtolatheMachineCircuitboard
@@ -249,7 +249,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: AutolatheHyperConvectionMachineCircuitboard
@@ -258,7 +258,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -268,7 +268,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -277,8 +277,19 @@
category: Circuitry
completetime: 4
materials:
- Steel: 100
- Glass: 900
+ Steel: 100
+ Glass: 500
+
+- type: latheRecipe
+ id: CircuitImprinterHyperConvectionMachineCircuitboard
+ result: CircuitImprinterHyperConvectionMachineCircuitboard
+ category: Circuitry
+ completetime: 4
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 100
+
- type: latheRecipe
id: ExosuitFabricatorMachineCircuitboard
@@ -287,7 +298,7 @@
completetime: 5
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: UniformPrinterMachineCircuitboard
@@ -296,7 +307,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: VaccinatorMachineCircuitboard
@@ -305,7 +316,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -315,7 +326,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -325,7 +336,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -335,7 +346,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -345,7 +356,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: AnomalyVesselExperimentalCircuitboard
@@ -354,7 +365,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -374,7 +385,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ReagentGrinderMachineCircuitboard
@@ -383,7 +394,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: HotplateMachineCircuitboard
@@ -392,7 +403,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: AnalysisComputerCircuitboard
@@ -401,7 +412,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -411,7 +422,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -421,7 +432,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -431,7 +442,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: DawInstrumentMachineCircuitboard
@@ -440,7 +451,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: StasisBedMachineCircuitboard
@@ -449,7 +460,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -459,7 +470,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: CentrifugeMachineCircuitboard
@@ -468,7 +479,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: MaterialReclaimerMachineCircuitboard
@@ -477,7 +488,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: OreProcessorMachineCircuitboard
@@ -486,7 +497,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: OreProcessorIndustrialMachineCircuitboard
@@ -495,7 +506,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -505,7 +516,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -515,7 +526,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -525,7 +536,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Bananium: 100
- type: latheRecipe
@@ -535,7 +546,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Bananium: 100
- type: latheRecipe
@@ -545,7 +556,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Bananium: 100
- type: latheRecipe
@@ -555,7 +566,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -565,7 +576,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
# Power
@@ -603,7 +614,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: PortableGeneratorPacmanMachineCircuitboard
@@ -657,7 +668,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SolarTrackerElectronics
@@ -675,7 +686,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: CloningConsoleComputerCircuitboard
@@ -684,7 +695,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: MicrowaveMachineCircuitboard
@@ -693,7 +704,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ElectricGrillMachineCircuitboard
@@ -702,7 +713,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: FatExtractorMachineCircuitboard
@@ -711,7 +722,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: FlatpackerMachineCircuitboard
@@ -720,7 +731,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -730,7 +741,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SurveillanceCameraRouterCircuitboard
@@ -739,7 +750,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SurveillanceCameraWirelessRouterCircuitboard
@@ -748,7 +759,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SurveillanceWirelessCameraAnchoredCircuitboard
@@ -757,7 +768,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SurveillanceWirelessCameraMovableCircuitboard
@@ -766,7 +777,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SurveillanceCameraMonitorCircuitboard
@@ -775,7 +786,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SurveillanceWirelessCameraMonitorCircuitboard
@@ -784,7 +795,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ComputerTelevisionCircuitboard
@@ -793,7 +804,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: EmitterCircuitboard
@@ -802,7 +813,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ThrusterMachineCircuitboard
@@ -811,7 +822,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: GyroscopeMachineCircuitboard
@@ -820,7 +831,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: GasRecyclerMachineCircuitboard
@@ -829,7 +840,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: SeedExtractorMachineCircuitboard
@@ -838,7 +849,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: BoozeDispenserMachineCircuitboard
@@ -847,7 +858,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: CargoTelepadMachineCircuitboard
@@ -856,7 +867,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -866,7 +877,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: TelecomServerCircuitboard
@@ -875,7 +886,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: MassMediaCircuitboard
@@ -884,7 +895,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: MiniGravityGeneratorCircuitboard
@@ -893,7 +904,7 @@
completetime: 6
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -902,7 +913,7 @@
completetime: 6
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ShuttleGunSvalinnMachineGunCircuitboard
@@ -910,7 +921,8 @@
completetime: 6
materials:
Steel: 100
- Glass: 900
+
+ Glass: 500
- type: latheRecipe
id: ShuttleGunPerforatorCircuitboard
@@ -918,7 +930,7 @@
completetime: 10
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -927,7 +939,7 @@
completetime: 6
materials:
Steel: 100
- Glass: 900
+ Glass: 500
- type: latheRecipe
id: ShuttleGunFriendshipCircuitboard
@@ -935,7 +947,7 @@
completetime: 8
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 50
- type: latheRecipe
@@ -944,7 +956,7 @@
completetime: 12
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -953,7 +965,7 @@
completetime: 5
materials:
Steel: 100
- Glass: 900
+ Glass: 500
Gold: 100
- type: latheRecipe
@@ -962,4 +974,4 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 500
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml
index a3bbf647348..075bb48f1e1 100644
--- a/Resources/Prototypes/Recipes/Lathes/security.yml
+++ b/Resources/Prototypes/Recipes/Lathes/security.yml
@@ -38,7 +38,7 @@
materials:
Steel: 250
Plastic: 100
-
+
- type: latheRecipe
id: WeaponLaserCarbine
result: WeaponEarthGovLaserCarbine
@@ -149,171 +149,183 @@
Steel: 100
- type: latheRecipe
- id: GrenadeTearGas
- result: GrenadeTearGas
+ id: ShellTranquilizer
+ result: ShellTranquilizer
category: Ammo
- completetime: 5
+ completetime: 4
materials:
Plastic: 15
Steel: 10
+ Glass: 5
+ Plasma: 10
+ Silver: 5
- type: latheRecipe
- id: GrenadeNonletal
- result: GrenadeNonletal
- category: Ammo
+ id: TargetHuman
+ result: TargetHuman
completetime: 5
+ applyMaterialDiscount: false # ingredients dropped when destroyed
materials:
- Plastic: 20
- Steel: 10
+ Steel: 500
- type: latheRecipe
- id: ShellShotgunBeanbag
- result: ShellShotgunBeanbag
- category: Ammo
- completetime: 2
+ id: TargetClown
+ result: TargetClown
+ completetime: 5
+ applyMaterialDiscount: false # ingredients dropped when destroyed
materials:
- Plastic: 15
- Steel: 10
+ Steel: 500
+
+- type: latheRecipe
+ id: TargetSyndicate
+ result: TargetSyndicate
+ completetime: 5
+ applyMaterialDiscount: false # ingredients dropped when destroyed
+ materials:
+ Steel: 500
- type: latheRecipe
- id: CartridgeRifle
- result: CartridgeRifle
+ id: MagazinePistolEmpty
+ result: MagazinePistolEmpty
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Steel: 15
+ Steel: 25
- type: latheRecipe
- id: CartridgePistol
- result: CartridgePistol
+ id: MagazinePistol
+ result: MagazinePistol
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Steel: 10
+ Steel: 145
- type: latheRecipe
- id: ShellShotgun
- result: ShellShotgun
+ id: MagazinePistolPractice
+ result: MagazinePistolPractice
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Steel: 20
+ Steel: 85
- type: latheRecipe
- id: ShellShotgunSlug
- result: ShellShotgunSlug
- completetime: 2
+ id: MagazinePistolUranium
+ result: MagazinePistolUranium
+ category: Ammo
+ completetime: 5
materials:
Steel: 25
+ Plastic: 65
+ Uranium: 120
- type: latheRecipe
- id: CartridgeMagnum
- result: CartridgeMagnum
+ id: MagazinePistolIncendiary
+ result: MagazinePistolIncendiary
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Steel: 20
+ Steel: 25
+ Plastic: 120
- type: latheRecipe
- id: CartridgeLightRifle
- result: CartridgeLightRifle
+ id: MagazinePistolSubMachineGunEmpty
+ result: MagazinePistolSubMachineGunEmpty
category: Ammo
- completetime: 2
+ completetime: 5
materials:
Steel: 30
- type: latheRecipe
- id: ShellShotgunFlare
- result: ShellShotgunFlare
+ id: MagazinePistolSubMachineGun
+ result: MagazinePistolSubMachineGun
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 20
- Steel: 5
+ Steel: 300
- type: latheRecipe
- id: ShellTranquilizer
- result: ShellTranquilizer
+ id: MagazinePistolSubMachineGunTopMountedEmpty
+ result: MagazinePistolSubMachineGunTopMountedEmpty
category: Ammo
- completetime: 4
+ completetime: 5
materials:
- Plastic: 15
- Steel: 10
- Glass: 5
- Plasma: 10
- Silver: 5
+ Steel: 30
- type: latheRecipe
- id: TargetHuman
- result: TargetHuman
+ id: MagazinePistolSubMachineGunTopMounted
+ result: MagazinePistolTopSubMachineGun
+ category: Ammo
completetime: 5
- applyMaterialDiscount: false # ingredients dropped when destroyed
materials:
- Steel: 500
+ Steel: 300
- type: latheRecipe
- id: TargetClown
- result: TargetClown
+ id: MagazineBoxPistol
+ result: MagazineBoxPistol
+ category: Ammo
completetime: 5
- applyMaterialDiscount: false # ingredients dropped when destroyed
materials:
- Steel: 500
+ Steel: 600
- type: latheRecipe
- id: TargetSyndicate
- result: TargetSyndicate
+ id: MagazineBoxMagnum
+ result: MagazineBoxMagnum
+ category: Ammo
completetime: 5
- applyMaterialDiscount: false # ingredients dropped when destroyed
materials:
- Steel: 500
+ Steel: 240
- type: latheRecipe
- id: MagazinePistol
- result: MagazinePistol
+ id: MagazineRifleEmpty
+ result: MagazineRifleEmpty
category: Ammo
completetime: 5
materials:
- Steel: 100
+ Steel: 25
- type: latheRecipe
- id: MagazinePistolSubMachineGun
- result: MagazinePistolSubMachineGun
+ id: MagazineRifle
+ result: MagazineRifle
category: Ammo
completetime: 5
materials:
- Steel: 300
+ Steel: 475
+
- type: latheRecipe
- id: MagazinePistolSubMachineGunTopMounted
- result: MagazinePistolTopSubMachineGun
+ id: MagazineRiflePractice
+ result: MagazineRiflePractice
category: Ammo
completetime: 5
materials:
- Steel: 300
+ Steel: 175
- type: latheRecipe
- id: MagazineBoxPistol
- result: MagazineBoxPistol
+ id: MagazineRifleUranium
+ result: MagazineRifleUranium
category: Ammo
completetime: 5
materials:
- Steel: 650
+ Steel: 25
+ Plastic: 300
+ Uranium: 300
- type: latheRecipe
- id: MagazineBoxMagnum
- result: MagazineBoxMagnum
+ id: MagazineRifleIncendiary
+ result: MagazineRifleIncendiary
category: Ammo
completetime: 5
materials:
- Steel: 1250
+ Steel: 25
+ Plastic: 450
- type: latheRecipe
- id: MagazineRifle
- result: MagazineRifle
+ id: MagazineLightRifleEmpty
+ result: MagazineLightRifleEmpty
category: Ammo
completetime: 5
materials:
- Steel: 375
+ Steel: 25
- type: latheRecipe
id: MagazineLightRifle
@@ -321,7 +333,35 @@
category: Ammo
completetime: 5
materials:
- Steel: 375
+ Steel: 565
+
+- type: latheRecipe
+ id: MagazineLightRiflePractice
+ result: MagazineLightRiflePractice
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 205
+
+
+- type: latheRecipe
+ id: MagazineLightRifleUranium
+ result: MagazineLightRifleUranium
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 25
+ Plastic: 360
+ Uranium: 360
+
+- type: latheRecipe
+ id: MagazineLightRifleIncendiary
+ result: MagazineLightRifleIncendiary
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 25
+ Plastic: 540
- type: latheRecipe
id: MagazineBoxRifle
@@ -329,7 +369,7 @@
category: Ammo
completetime: 5
materials:
- Steel: 950
+ Steel: 750
- type: latheRecipe
id: MagazineBoxLightRifle
@@ -337,7 +377,41 @@
category: Ammo
completetime: 5
materials:
- Steel: 1800
+ Steel: 900
+
+- type: latheRecipe
+ id: BoxLethalshot
+ result: BoxLethalshot
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 320
+
+- type: latheRecipe
+ id: BoxBeanbag
+ result: BoxBeanbag
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 160
+ Plastic: 240
+
+- type: latheRecipe
+ id: BoxShotgunSlug
+ result: BoxShotgunSlug
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 240
+ Plastic: 160
+
+- type: latheRecipe
+ id: SpeedLoaderMagnumEmpty
+ result: SpeedLoaderMagnumEmpty
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 50
- type: latheRecipe
id: SpeedLoaderMagnum
@@ -345,47 +419,77 @@
category: Ammo
completetime: 5
materials:
- Steel: 200
+ Steel: 190
- type: latheRecipe
- id: ShellShotgunIncendiary
- result: ShellShotgunIncendiary
+ id: SpeedLoaderMagnumPractice
+ result: SpeedLoaderMagnumPractice
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 20
+ Steel: 90
- type: latheRecipe
- id: CartridgePistolIncendiary
- result: CartridgePistolIncendiary
+ id: SpeedLoaderMagnumUranium
+ result: SpeedLoaderMagnumUranium
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 10
+ Steel: 50
+ Plastic: 150
+ Uranium: 110
- type: latheRecipe
- id: CartridgeMagnumIncendiary
- result: CartridgeMagnumIncendiary
+ id: SpeedLoaderMagnumIncendiary
+ result: SpeedLoaderMagnumIncendiary
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 20
+ Steel: 50
+ Plastic: 150
- type: latheRecipe
- id: CartridgeLightRifleIncendiary
- result: CartridgeLightRifleIncendiary
+ id: MagazineShotgunEmpty
+ result: MagazineShotgunEmpty
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 20
+ Steel: 50
- type: latheRecipe
- id: CartridgeRifleIncendiary
- result: CartridgeRifleIncendiary
+ id: MagazineShotgun
+ result: MagazineShotgun
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 15
+ Steel: 240
+
+- type: latheRecipe
+ id: MagazineShotgunBeanbag
+ result: MagazineShotgunBeanbag
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 150
+ Plastic: 140
+
+- type: latheRecipe
+ id: MagazineShotgunSlug
+ result: MagazineShotgunSlug
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 190
+ Plastic: 100
+
+- type: latheRecipe
+ id: MagazineShotgunIncendiary
+ result: MagazineShotgunIncendiary
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 100
+ Plastic: 190
- type: latheRecipe
id: MagazineBoxPistolIncendiary
@@ -393,7 +497,7 @@
category: Ammo
completetime: 5
materials:
- Plastic: 650
+ Plastic: 600
- type: latheRecipe
id: MagazineBoxMagnumIncendiary
@@ -401,7 +505,7 @@
category: Ammo
completetime: 5
materials:
- Plastic: 1250
+ Plastic: 240
- type: latheRecipe
id: MagazineBoxLightRifleIncendiary
@@ -409,7 +513,7 @@
category: Ammo
completetime: 5
materials:
- Plastic: 1800
+ Plastic: 900
- type: latheRecipe
id: MagazineBoxRifleIncendiary
@@ -417,15 +521,25 @@
category: Ammo
completetime: 5
materials:
- Plastic: 950
+ Plastic: 750
- type: latheRecipe
- id: ShellShotgunPractice
- result: ShellShotgunPractice
+ id: BoxShotgunFlare
+ result: BoxShotgunFlare
category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 20
+ Steel: 80
+ Plastic: 80
+
+- type: latheRecipe
+ id: BoxShotgunIncendiary
+ result: BoxShotgunIncendiary
+ category: Ammo
+ completetime: 5
+ materials:
+ Steel: 80
+ Plastic: 320
- type: latheRecipe
id: MagazineBoxPistolPractice
@@ -433,7 +547,7 @@
category: Ammo
completetime: 5
materials:
- Plastic: 600
+ Steel: 300
- type: latheRecipe
id: MagazineBoxMagnumPractice
@@ -441,7 +555,7 @@
category: Ammo
completetime: 5
materials:
- Plastic: 1200
+ Steel: 60
- type: latheRecipe
id: MagazineBoxLightRiflePractice
@@ -449,7 +563,7 @@
category: Ammo
completetime: 5
materials:
- Plastic: 1000
+ Steel: 300
- type: latheRecipe
id: MagazineBoxRiflePractice
@@ -457,7 +571,7 @@
category: Ammo
completetime: 5
materials:
- Plastic: 900
+ Steel: 250
- type: latheRecipe
id: WeaponLaserCarbinePractice
@@ -480,49 +594,12 @@
Plastic: 200
- type: latheRecipe
- id: ShellShotgunUranium
- result: ShellShotgunUranium
- category: Ammo
- completetime: 2
- materials:
- Plastic: 15
- Uranium: 10
-
-- type: latheRecipe
- id: CartridgePistolUranium
- result: CartridgePistolUranium
- category: Ammo
- completetime: 2
- materials:
- Plastic: 5
- Uranium: 10
-
-- type: latheRecipe
- id: CartridgeMagnumUranium
- result: CartridgeMagnumUranium
- category: Ammo
- completetime: 2
- materials:
- Plastic: 20
- Uranium: 10
-
-- type: latheRecipe
- id: CartridgeLightRifleUranium
- result: CartridgeLightRifleUranium
+ id: BoxShotgunPractice
+ result: BoxShotgunPractice
category: Ammo
- completetime: 2
- materials:
- Plastic: 20
- Uranium: 10
-
-- type: latheRecipe
- id: CartridgeRifleUranium
- result: CartridgeRifleUranium
- category: Ammo
- completetime: 2
+ completetime: 5
materials:
- Plastic: 15
- Uranium: 10
+ Steel: 80
- type: latheRecipe
id: MagazineBoxPistolUranium
@@ -530,8 +607,8 @@
category: Ammo
completetime: 5
materials:
- Plastic: 650
- Uranium: 65
+ Plastic: 300
+ Uranium: 600
- type: latheRecipe
id: MagazineBoxMagnumUranium
@@ -539,8 +616,8 @@
category: Ammo
completetime: 5
materials:
- Plastic: 1250
- Uranium: 125
+ Plastic: 240
+ Uranium: 180
- type: latheRecipe
id: MagazineBoxLightRifleUranium
@@ -548,8 +625,8 @@
category: Ammo
completetime: 5
materials:
- Plastic: 1800
- Uranium: 180
+ Plastic: 600
+ Uranium: 600
- type: latheRecipe
id: MagazineBoxRifleUranium
@@ -557,8 +634,27 @@
category: Ammo
completetime: 5
materials:
- Plastic: 950
- Uranium: 95
+ Plastic: 500
+ Uranium: 500
+
+- type: latheRecipe
+ id: BoxShotgunUranium
+ result: BoxShotgunUranium
+ category: Ammo
+ completetime: 5
+ materials:
+ Plastic: 320
+ Uranium: 240
+
+- type: latheRecipe
+ id: WeaponDisabler
+ result: WeaponDisabler
+ category: Weapons
+ completetime: 6
+ materials:
+ Steel: 300
+ Glass: 200
+ Plastic: 200
- type: latheRecipe
id: WeaponDisablerSMG
@@ -604,3 +700,14 @@
Steel: 150
Plastic: 100
Glass: 20
+
+- type: latheRecipe
+ id: PortableRecharger
+ result: PortableRecharger
+ completetime: 15
+ materials:
+ Steel: 2000
+ Uranium: 2000
+ Plastic: 1000
+ Plasma: 500
+ Glass: 500
diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml
index f901ed457f3..95f2804a109 100644
--- a/Resources/Prototypes/Research/arsenal.yml
+++ b/Resources/Prototypes/Research/arsenal.yml
@@ -24,11 +24,12 @@
tier: 1
cost: 10000
recipeUnlocks:
- - ShellShotgunIncendiary
- - CartridgePistolIncendiary
- - CartridgeMagnumIncendiary
- - CartridgeLightRifleIncendiary
- - CartridgeRifleIncendiary
+ - BoxShotgunIncendiary
+ - MagazineRifleIncendiary
+ - MagazinePistolIncendiary
+ - MagazineLightRifleIncendiary
+ - SpeedLoaderMagnumIncendiary
+ - MagazineShotgunIncendiary
- MagazineBoxPistolIncendiary
- MagazineBoxMagnumIncendiary
- MagazineBoxLightRifleIncendiary
@@ -57,9 +58,10 @@
tier: 1
cost: 5000
recipeUnlocks:
- - ShellShotgunBeanbag
- - GrenadeTearGas
- - GrenadeNonletal
+ - MagazineShotgunBeanbag
+ - ShellTranquilizer
+ - BoxBeanbag
+ - WeaponDisabler
- type: technology
id: UraniumMunitions
@@ -71,15 +73,15 @@
tier: 1
cost: 7500
recipeUnlocks:
- - ShellShotgunUranium
- - CartridgePistolUranium
- - CartridgeMagnumUranium
- - CartridgeLightRifleUranium
- - CartridgeRifleUranium
+ - MagazineRifleUranium
+ - MagazinePistolUranium
+ - MagazineLightRifleUranium
+ - SpeedLoaderMagnumUranium
- MagazineBoxPistolUranium
- MagazineBoxMagnumUranium
- MagazineBoxLightRifleUranium
- MagazineBoxRifleUranium
+ - BoxShotgunUranium
- type: technology
id: AdvancedRiotControl
@@ -174,6 +176,7 @@
cost: 15000
recipeUnlocks:
- WeaponAdvancedLaser
+ - PortableRecharger
- type: technology
id: ExperimentalBatteryAmmo
diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml
index 30345a5dfc8..4dc60314c47 100644
--- a/Resources/Prototypes/Research/industrial.yml
+++ b/Resources/Prototypes/Research/industrial.yml
@@ -14,6 +14,7 @@
- BorgModuleMining
- OreProcessorIndustrialMachineCircuitboard
- OreBagOfHolding
+ - ClothingMaskWeldingGas
- type: technology
id: AdvancedPowercells
@@ -52,6 +53,7 @@
recipeUnlocks:
- AutolatheHyperConvectionMachineCircuitboard
- ProtolatheHyperConvectionMachineCircuitboard
+ - CircuitImprinterHyperConvectionMachineCircuitboard
- SheetifierMachineCircuitboard
- type: technology
diff --git a/Resources/Prototypes/Roles/Antags/terminator.yml b/Resources/Prototypes/Roles/Antags/terminator.yml
deleted file mode 100644
index ef1f176b8de..00000000000
--- a/Resources/Prototypes/Roles/Antags/terminator.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-- type: antag
- id: Terminator
- name: roles-antag-terminator-name
- antagonist: true
- setPreference: false
- objective: roles-antag-terminator-objective
diff --git a/Resources/Prototypes/Shaders/displacement.yml b/Resources/Prototypes/Shaders/displacement.yml
new file mode 100644
index 00000000000..5c907380083
--- /dev/null
+++ b/Resources/Prototypes/Shaders/displacement.yml
@@ -0,0 +1,10 @@
+- type: shader
+ id: DisplacedStencilDraw
+ kind: source
+ path: "/Textures/Shaders/displacement.swsl"
+ stencil:
+ ref: 1
+ op: Keep
+ func: NotEqual
+ params:
+ displacementSize: 127
diff --git a/Resources/Prototypes/Species/terminator.yml b/Resources/Prototypes/Species/terminator.yml
deleted file mode 100644
index cfc5a7107ce..00000000000
--- a/Resources/Prototypes/Species/terminator.yml
+++ /dev/null
@@ -1,110 +0,0 @@
-- type: species
- id: Terminator
- name: Terminator
- roundStart: false
- prototype: MobTerminatorEndoskeleton
- sprites: MobTerminatorSprites
- defaultSkinTone: "#fff9e2"
- markingLimits: MobHumanMarkingLimits
- maleFirstNames: skeletonNamesFirst
- femaleFirstNames: skeletonNamesFirst
- dollPrototype: MobSkeletonPersonDummy
- skinColoration: TintedHues
-
-- type: speciesBaseSprites
- id: MobTerminatorSprites
- sprites:
- Head: MobTerminatorHead
- Chest: MobTerminatorTorso
- LArm: MobTerminatorLArm
- RArm: MobTerminatorRArm
- LHand: MobTerminatorLHand
- RHand: MobTerminatorRHand
- LLeg: MobTerminatorLLeg
- RLeg: MobTerminatorRLeg
- LFoot: MobTerminatorLFoot
- RFoot: MobTerminatorRFoot
-
-- type: humanoidBaseSprite
- id: MobTerminatorHead
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: head_m
-
-- type: humanoidBaseSprite
- id: MobTerminatorHeadMale
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: head_m
-
-- type: humanoidBaseSprite
- id: MobTerminatorHeadFemale
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: head_f
-
-- type: humanoidBaseSprite
- id: MobTerminatorTorso
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: torso_m
-
-- type: humanoidBaseSprite
- id: MobTerminatorTorsoMale
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: torso_m
-
-- type: humanoidBaseSprite
- id: MobTerminatorTorsoFemale
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: torso_f
-
-- type: humanoidBaseSprite
- id: MobTerminatorLLeg
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: l_leg
-
-- type: humanoidBaseSprite
- id: MobTerminatorLArm
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: l_arm
-
-- type: humanoidBaseSprite
- id: MobTerminatorLHand
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: l_hand
-
-- type: humanoidBaseSprite
- id: MobTerminatorLFoot
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: l_foot
-
-- type: humanoidBaseSprite
- id: MobTerminatorRLeg
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: r_leg
-
-- type: humanoidBaseSprite
- id: MobTerminatorRArm
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: r_arm
-
-- type: humanoidBaseSprite
- id: MobTerminatorRHand
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: r_hand
-
-- type: humanoidBaseSprite
- id: MobTerminatorRFoot
- baseSprite:
- sprite: Mobs/Species/Terminator/parts.rsi
- state: r_foot
diff --git a/Resources/Prototypes/Species/vox.yml b/Resources/Prototypes/Species/vox.yml
index 605087a687b..53ac4258bc2 100644
--- a/Resources/Prototypes/Species/vox.yml
+++ b/Resources/Prototypes/Species/vox.yml
@@ -6,18 +6,19 @@
sprites: MobVoxSprites
markingLimits: MobVoxMarkingLimits
dollPrototype: MobVoxDummy
- skinColoration: Hues
+ skinColoration: VoxFeathers
+ defaultSkinTone: "#6c741d"
maleFirstNames: names_vox
femaleFirstNames: names_vox
naming: First
sexes:
- - Unsexed
-
+ - Unsexed
- type: speciesBaseSprites
id: MobVoxSprites
sprites:
Head: MobVoxHead
+ Snout: MobHumanoidAnyMarking
Hair: MobHumanoidAnyMarking
FacialHair: MobHumanoidAnyMarking
Chest: MobVoxTorso
@@ -30,6 +31,7 @@
RLeg: MobVoxRLeg
LFoot: MobVoxLFoot
RFoot: MobVoxRFoot
+ Tail: MobHumanoidAnyMarking
- type: markingPoints
id: MobVoxMarkingLimits
@@ -41,57 +43,70 @@
FacialHair:
points: 1
required: false
- Chest:
+ Head:
points: 1
- required: false
- Legs:
- points: 2
- required: false
+ required: true
+ Snout:
+ points: 1
+ required: true
+ defaultMarkings: [ VoxBeak ]
Arms:
- points: 2
+ points: 4
+ required: true
+ defaultMarkings: [ VoxLArmScales, VoxRArmScales, VoxRHandScales, VoxLHandScales ]
+ Legs:
+ points: 4
+ required: true
+ defaultMarkings: [ VoxLLegScales, VoxRLegScales, VoxRFootScales, VoxLFootScales ]
+ Chest:
+ points: 1
required: false
+ Tail:
+ points: 1
+ required: true
+ defaultMarkings: [ VoxTail ]
- type: humanoidBaseSprite
id: MobVoxEyes
baseSprite:
- sprite: Mobs/Customization/eyes.rsi
- state: vox_eyes_s
+ sprite: Mobs/Species/Vox/parts.rsi
+ state: eyes
- type: humanoidBaseSprite
id: MobVoxHead
baseSprite:
sprite: Mobs/Species/Vox/parts.rsi
- state: head_m
+ state: head
- type: humanoidBaseSprite
id: MobVoxHeadMale
baseSprite:
sprite: Mobs/Species/Vox/parts.rsi
- state: head_m
+ state: head
- type: humanoidBaseSprite
id: MobVoxHeadFemale
baseSprite:
sprite: Mobs/Species/Vox/parts.rsi
- state: head_f
+ state: head
- type: humanoidBaseSprite
id: MobVoxTorso
baseSprite:
sprite: Mobs/Species/Vox/parts.rsi
- state: torso_m
+ state: torso
- type: humanoidBaseSprite
id: MobVoxTorsoMale
baseSprite:
sprite: Mobs/Species/Vox/parts.rsi
- state: torso_m
+ state: torso
- type: humanoidBaseSprite
id: MobVoxTorsoFemale
baseSprite:
sprite: Mobs/Species/Vox/parts.rsi
- state: torso_f
+ state: torso
- type: humanoidBaseSprite
id: MobVoxLLeg
@@ -140,5 +155,3 @@
baseSprite:
sprite: Mobs/Species/Vox/parts.rsi
state: r_foot
-
-#
diff --git a/Resources/Prototypes/Stacks/Materials/materials.yml b/Resources/Prototypes/Stacks/Materials/materials.yml
index d20bb2f3473..cc963dde59a 100644
--- a/Resources/Prototypes/Stacks/Materials/materials.yml
+++ b/Resources/Prototypes/Stacks/Materials/materials.yml
@@ -54,6 +54,14 @@
maxCount: 30
itemSize: 1
+- type: stack
+ id: Pyrotton
+ name: pyrotton
+ icon: { sprite: /Textures/Objects/Materials/materials.rsi, state: pyrotton }
+ spawn: MaterialPyrotton1
+ maxCount: 30
+ itemSize: 1
+
- type: stack
id: Bananium
name: bananium
@@ -92,4 +100,4 @@
icon: { sprite: /Textures/Objects/Misc/reagent_fillings.rsi, state: powderpile }
spawn: MaterialGunpowder
maxCount: 60
- itemSize: 1
\ No newline at end of file
+ itemSize: 1
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 56ea2717439..f24c0d4cb5c 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -261,6 +261,9 @@
- type: Tag
id: CableCoil
+- type: Tag
+ id: CaneBlade
+
- type: Tag
id: CannonBall
@@ -872,6 +875,9 @@
- type: Tag
id: Meat
+- type: Tag
+ id: Medal
+
- type: Tag
id: Medkit
@@ -1110,15 +1116,15 @@
- type: Tag
id: Shiv
-- type: Tag
- id: ShoesRequiredStepTriggerImmune
-
- type: Tag
id: Shovel
- type: Tag
id: Sidearm
+- type: Tag
+ id: SignalTrigger
+
- type: Tag
id: SkeletonMotorcycleKeys
@@ -1330,3 +1336,5 @@
- type: Tag
id: WriteIgnoreStamps
+
+# ALPHABETICAL
diff --git a/Resources/ServerInfo/Guidebook/Service/Bartender.xml b/Resources/ServerInfo/Guidebook/Service/Bartender.xml
index ec8261b1f1e..af166a33d13 100644
--- a/Resources/ServerInfo/Guidebook/Service/Bartender.xml
+++ b/Resources/ServerInfo/Guidebook/Service/Bartender.xml
@@ -18,6 +18,7 @@
+
## Напитки
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK-vox.png
new file mode 100644
index 00000000000..e6028f3a4c1
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK-vox.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK.png
new file mode 100644
index 00000000000..5d0a7ea70d1
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/equipped-MASK.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon-up.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon-up.png
new file mode 100644
index 00000000000..352e536ca91
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon-up.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon.png
new file mode 100644
index 00000000000..cdb8d4b7c7e
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/icon.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-left.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-left.png
new file mode 100644
index 00000000000..c5111a66a9b
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-right.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-right.png
new file mode 100644
index 00000000000..5841f0b8460
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/meta.json b/Resources/Textures/Clothing/Mask/welding-gas.rsi/meta.json
new file mode 100644
index 00000000000..8e9b8573250
--- /dev/null
+++ b/Resources/Textures/Clothing/Mask/welding-gas.rsi/meta.json
@@ -0,0 +1,49 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/6f5ca45e3ac06b30fb1957042214a888d8c01722. Inhands, worn sprites, and vox sprites created by EmoGarbage404 (github)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon-up"
+ },
+ {
+ "name": "equipped-MASK",
+ "directions": 4
+ },
+ {
+ "name": "up-equipped-MASK",
+ "directions": 4
+ },
+ {
+ "name": "equipped-MASK-vox",
+ "directions": 4
+ },
+ {
+ "name": "up-equipped-MASK-vox",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "up-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "up-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK-vox.png
new file mode 100644
index 00000000000..90871d7d006
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK-vox.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK.png
new file mode 100644
index 00000000000..449c8624c9a
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-equipped-MASK.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-left.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-left.png
new file mode 100644
index 00000000000..2868ab8317e
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-left.png differ
diff --git a/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-right.png b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-right.png
new file mode 100644
index 00000000000..1362d990110
Binary files /dev/null and b/Resources/Textures/Clothing/Mask/welding-gas.rsi/up-inhand-right.png differ
diff --git a/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/equipped-INNERCLOTHING.png
index a300332899c..145cf97b2e5 100644
Binary files a/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/equipped-INNERCLOTHING.png and b/Resources/Textures/Clothing/Uniforms/Jumpskirt/olddress.rsi/equipped-INNERCLOTHING.png differ
diff --git a/Resources/Textures/Effects/creampie.rsi/creampie_vox.png b/Resources/Textures/Effects/creampie.rsi/creampie_vox.png
new file mode 100644
index 00000000000..dfe199b0c86
Binary files /dev/null and b/Resources/Textures/Effects/creampie.rsi/creampie_vox.png differ
diff --git a/Resources/Textures/Effects/creampie.rsi/meta.json b/Resources/Textures/Effects/creampie.rsi/meta.json
index 54e0cc73c2b..8db8a77945c 100644
--- a/Resources/Textures/Effects/creampie.rsi/meta.json
+++ b/Resources/Textures/Effects/creampie.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0. creampie_moth by MilenVolf, creampie_arachnid by PixelTheKermit (Github)",
+ "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0. creampie_moth by MilenVolf, creampie_arachnid by PixelTheKermit (Github), creampie_vox by Errant",
"size": {
"x": 32,
"y": 32
@@ -66,6 +66,10 @@
"name": "creampie_standborg",
"directions": 4
},
+ {
+ "name": "creampie_vox",
+ "directions": 4
+ },
{
"name": "creampie_xeno_crit"
},
diff --git a/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json b/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json
index cb94dfab3e1..78339d7b76d 100644
--- a/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json
+++ b/Resources/Textures/Mobs/Customization/eyes.rsi/meta.json
@@ -1 +1 @@
-{"version": 1, "license": "CC-BY-SA-3.0","copyright": "Vox_eyes Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb and human_eyes taken from https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf", "size": {"x": 32, "y": 32}, "states": [{"name": "diona", "directions": 4}, {"name": "eyes", "directions": 4}, {"name":"no_eyes"},{"name": "vox_eyes_s", "directions": 4}]}
+{"version": 1, "license": "CC-BY-SA-3.0","copyright": "human_eyes taken from https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf", "size": {"x": 32, "y": 32}, "states": [{"name": "diona", "directions": 4}, {"name": "eyes", "directions": 4}, {"name":"no_eyes"}]}
diff --git a/Resources/Textures/Mobs/Customization/eyes.rsi/vox_eyes_s.png b/Resources/Textures/Mobs/Customization/eyes.rsi/vox_eyes_s.png
deleted file mode 100644
index 807e9374c45..00000000000
Binary files a/Resources/Textures/Mobs/Customization/eyes.rsi/vox_eyes_s.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json b/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json
index a6dc03eda83..8fd4f5e1b91 100644
--- a/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json
+++ b/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json
@@ -231,10 +231,6 @@
"name": "country",
"directions": 4
},
- {
- "name": "spookylong",
- "directions": 4
- },
{
"name": "crewcut",
"directions": 4
@@ -671,6 +667,10 @@
"name": "spikyponytail",
"directions": 4
},
+ {
+ "name": "spookylong",
+ "directions": 4
+ },
{
"name": "stail",
"directions": 4
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png
new file mode 100644
index 00000000000..23744679b68
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_arm.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_arm.png
new file mode 100644
index 00000000000..e35fb3c6bfb
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_arm.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_foot.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_foot.png
new file mode 100644
index 00000000000..5ab81e36168
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_foot.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_hand.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_hand.png
new file mode 100644
index 00000000000..660da8a5d11
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_hand.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_leg.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_leg.png
new file mode 100644
index 00000000000..1a81369838c
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/l_leg.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/meta.json b/Resources/Textures/Mobs/Customization/vox_parts.rsi/meta.json
new file mode 100644
index 00000000000..fd5c14b6a35
--- /dev/null
+++ b/Resources/Textures/Mobs/Customization/vox_parts.rsi/meta.json
@@ -0,0 +1,55 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb, modified by Bhijn, Errant and Flareguy",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "beak",
+ "directions": 4
+ },
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "tail",
+ "directions": 4
+ },
+ {
+ "name": "tail_stenciled",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_arm.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_arm.png
new file mode 100644
index 00000000000..c8c70752f44
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_arm.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_foot.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_foot.png
new file mode 100644
index 00000000000..58dbe90b090
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_foot.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_hand.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_hand.png
new file mode 100644
index 00000000000..e433456bf22
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_hand.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_leg.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_leg.png
new file mode 100644
index 00000000000..d6167531291
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/r_leg.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail.png
new file mode 100644
index 00000000000..0e63d3327bd
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail.png differ
diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png
new file mode 100644
index 00000000000..50627ac5220
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/vox_parts.rsi/tail_stenciled.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/jumpsuit.png b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/jumpsuit.png
new file mode 100644
index 00000000000..2c938634eb6
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/jumpsuit.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json
new file mode 100644
index 00000000000..6ea6c552b97
--- /dev/null
+++ b/Resources/Textures/Mobs/Species/Vox/displacement.rsi/meta.json
@@ -0,0 +1,18 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by PJB3005",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "load": {
+ "srgb": false
+ },
+ "states": [
+ {
+ "name": "jumpsuit",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/eyes.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/eyes.png
new file mode 100644
index 00000000000..5069e90b535
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/eyes.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/full.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/full.png
new file mode 100644
index 00000000000..864a6f00376
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/full.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin.png
new file mode 100644
index 00000000000..ec0dd8402e5
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_f.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_f.png
deleted file mode 100644
index 15c0ed8d66f..00000000000
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_f.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_m.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_m.png
deleted file mode 100644
index 15c0ed8d66f..00000000000
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/groin_m.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head.png
new file mode 100644
index 00000000000..8e140ea7873
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_f.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_f.png
deleted file mode 100644
index 6d92de1b903..00000000000
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_f.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_m.png
deleted file mode 100644
index 6d92de1b903..00000000000
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/head_m.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png
index bdd61871c5f..258127dbae2 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_arm.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png
index d12c19cf0cb..3b81ae70595 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_foot.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png
index 0d1048e090b..d321880c7b8 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_hand.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png
index 20eebad8606..918b343f98c 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json b/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json
index 1070da1203d..4ab06e21727 100644
--- a/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json
+++ b/Resources/Textures/Mobs/Species/Vox/parts.rsi/meta.json
@@ -1,26 +1,25 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb",
+ "copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb, by Bhijn, Errant and Flareguy",
"size": {
"x": 32,
"y": 32
},
"states": [
{
- "name": "groin_f",
+ "name": "eyes",
"directions": 4
},
{
- "name": "groin_m",
- "directions": 4
+ "name": "full"
},
{
- "name": "head_f",
+ "name": "groin",
"directions": 4
},
{
- "name": "head_m",
+ "name": "head",
"directions": 4
},
{
@@ -60,11 +59,7 @@
"directions": 4
},
{
- "name": "torso_f",
- "directions": 4
- },
- {
- "name": "torso_m",
+ "name": "torso",
"directions": 4
},
{
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png
index 0c1f703efdf..766cd378ea8 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_arm.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png
index 80d3a787598..2511bc5252c 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_foot.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png
index d794c608bda..98f8b376a81 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_hand.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png
index 37417e28157..45b1ae82e78 100644
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/r_leg.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png
new file mode 100644
index 00000000000..841d4097351
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_f.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_f.png
deleted file mode 100644
index 75bb51ed378..00000000000
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_f.png and /dev/null differ
diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_m.png
deleted file mode 100644
index 75bb51ed378..00000000000
Binary files a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso_m.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-1.png
new file mode 100644
index 00000000000..e4e832ce8db
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-2.png
new file mode 100644
index 00000000000..c778f3c428e
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-3.png
new file mode 100644
index 00000000000..480528bc96a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-4.png
new file mode 100644
index 00000000000..da13e681397
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon.png
new file mode 100644
index 00000000000..08de3090393
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..d46a00edd04
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/meta.json
new file mode 100644
index 00000000000..32c5e0342d1
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/coffeeglass.rsi/meta.json
@@ -0,0 +1,29 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by borkroman. Fill levels by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-1.png
new file mode 100644
index 00000000000..a36d304a4dd
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-2.png
new file mode 100644
index 00000000000..6351e9f3dd4
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-3.png
new file mode 100644
index 00000000000..bb7bee49d05
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-4.png
new file mode 100644
index 00000000000..1808bdbd041
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-5.png
new file mode 100644
index 00000000000..734126d8668
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon.png
new file mode 100644
index 00000000000..2894625a2e5
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..b20279f8f1b
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/meta.json
new file mode 100644
index 00000000000..ec55ebfa1f1
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/colaglass.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-1.png
new file mode 100644
index 00000000000..68731e8fcb0
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-2.png
new file mode 100644
index 00000000000..716aebbb83a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-3.png
new file mode 100644
index 00000000000..74f54a4c832
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-4.png
new file mode 100644
index 00000000000..da440839643
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-5.png
new file mode 100644
index 00000000000..db2b9315bfa
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png
index 620cf5ea01e..6a68486662a 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon_empty.png
new file mode 100644
index 00000000000..af2dcb404ce
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json
index db0ac608ed0..ec55ebfa1f1 100644
--- a/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json
+++ b/Resources/Textures/Objects/Consumable/Drinks/dr_gibb_glass.rsi/meta.json
@@ -1 +1,32 @@
-{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]}
\ No newline at end of file
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-1.png
new file mode 100644
index 00000000000..613efd11712
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-2.png
new file mode 100644
index 00000000000..785703f4df7
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-3.png
new file mode 100644
index 00000000000..1f482c8df9b
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-4.png
new file mode 100644
index 00000000000..99c7dffa36f
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon.png
new file mode 100644
index 00000000000..9c77c673ffb
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..71eb4351836
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/meta.json
new file mode 100644
index 00000000000..32c5e0342d1
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/greenteaglass.rsi/meta.json
@@ -0,0 +1,29 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by borkroman. Fill levels by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/icon.png
new file mode 100644
index 00000000000..228d098060c
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/meta.json
new file mode 100644
index 00000000000..f55a85dc265
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/icebucket.rsi/meta.json
@@ -0,0 +1,14 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by Dezzzix; Discord: dezzzix",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ }
+ ]
+ }
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-1.png
new file mode 100644
index 00000000000..2d217ef1477
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-2.png
new file mode 100644
index 00000000000..d8ca5b63af8
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-3.png
new file mode 100644
index 00000000000..a65df2aaed0
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-4.png
new file mode 100644
index 00000000000..3ae28ff68fe
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-5.png
new file mode 100644
index 00000000000..72c2f4cecf0
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon.png
new file mode 100644
index 00000000000..999834b1421
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..e10df8d1724
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/meta.json
new file mode 100644
index 00000000000..ec55ebfa1f1
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/icedgreenteaglass.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-1.png
new file mode 100644
index 00000000000..04c8198fc97
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-2.png
new file mode 100644
index 00000000000..367a9e178bd
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-3.png
new file mode 100644
index 00000000000..02022cd03b9
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png
index 61f63fd057b..96807c9a5d8 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..5d1f677b89b
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json
index db0ac608ed0..bdfdb18a0d0 100644
--- a/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json
+++ b/Resources/Textures/Objects/Consumable/Drinks/iceglass.rsi/meta.json
@@ -1 +1,26 @@
-{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]}
\ No newline at end of file
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by borkroman. Fill levels by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/icon.png
new file mode 100644
index 00000000000..6c65ca02025
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/meta.json
new file mode 100644
index 00000000000..f55a85dc265
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/jigger.rsi/meta.json
@@ -0,0 +1,14 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by Dezzzix; Discord: dezzzix",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ }
+ ]
+ }
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-1.png
new file mode 100644
index 00000000000..48881271871
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-2.png
new file mode 100644
index 00000000000..081ad92014b
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-3.png
new file mode 100644
index 00000000000..97a8f2c29b6
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-4.png
new file mode 100644
index 00000000000..5b8af69ec86
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-5.png
new file mode 100644
index 00000000000..9b2bc6a3f7a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon.png
new file mode 100644
index 00000000000..9ee1bdd5176
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..abbdd77b271
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/meta.json
new file mode 100644
index 00000000000..ec55ebfa1f1
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/lemonjuiceglass.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-1.png
new file mode 100644
index 00000000000..824ffcf3d65
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-2.png
new file mode 100644
index 00000000000..5159ff36712
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-3.png
new file mode 100644
index 00000000000..6d2115a95af
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-4.png
new file mode 100644
index 00000000000..90ca019493a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-5.png
new file mode 100644
index 00000000000..c50860e4d03
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-6.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-6.png
new file mode 100644
index 00000000000..1488e2b6297
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/fill-6.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon.png
new file mode 100644
index 00000000000..5fa26544fda
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..673679cb4ab
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/meta.json
new file mode 100644
index 00000000000..5fe156daaae
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/moonshineglass.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ },
+ {
+ "name": "fill-6"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-1.png
new file mode 100644
index 00000000000..6a56b31eeed
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-2.png
new file mode 100644
index 00000000000..0a853551c53
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-3.png
new file mode 100644
index 00000000000..92293d8cf22
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-4.png
new file mode 100644
index 00000000000..85f6dea9b6a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-5.png
new file mode 100644
index 00000000000..598d0be5b6d
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon.png
new file mode 100644
index 00000000000..64e185065a5
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..fc940737b24
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/meta.json
new file mode 100644
index 00000000000..ec55ebfa1f1
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/orangejuiceglass.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-1.png
new file mode 100644
index 00000000000..077d84804eb
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-2.png
new file mode 100644
index 00000000000..763d02e7b8b
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-3.png
new file mode 100644
index 00000000000..ba76b0c22ba
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-4.png
new file mode 100644
index 00000000000..ce9f636dbc5
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-5.png
new file mode 100644
index 00000000000..b79be483635
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-6.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-6.png
new file mode 100644
index 00000000000..9abb7c672bc
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/fill-6.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png
index 5930cd7536c..e5eeaba2642 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon_empty.png
new file mode 100644
index 00000000000..9e12bbbe4d7
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json
index db0ac608ed0..5fe156daaae 100644
--- a/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json
+++ b/Resources/Textures/Objects/Consumable/Drinks/space-up_glass.rsi/meta.json
@@ -1 +1,35 @@
-{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]}
\ No newline at end of file
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ },
+ {
+ "name": "fill-6"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-1.png
new file mode 100644
index 00000000000..53db03fd96b
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-2.png
new file mode 100644
index 00000000000..601efddc0d9
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-3.png
new file mode 100644
index 00000000000..4c50ee9fd7a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-4.png
new file mode 100644
index 00000000000..38cf3fdbfc8
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-5.png
new file mode 100644
index 00000000000..06be04566cd
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png
index 812d7fd4887..6303745c500 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon_empty.png
new file mode 100644
index 00000000000..d576502499c
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json
index db0ac608ed0..ec55ebfa1f1 100644
--- a/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json
+++ b/Resources/Textures/Objects/Consumable/Drinks/space_mountain_wind_glass.rsi/meta.json
@@ -1 +1,32 @@
-{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]}
\ No newline at end of file
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-1.png
new file mode 100644
index 00000000000..6dce3834eee
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-2.png
new file mode 100644
index 00000000000..64dfddb473a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-3.png
new file mode 100644
index 00000000000..2d281d5189a
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-4.png
new file mode 100644
index 00000000000..18ee0e42802
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-5.png
new file mode 100644
index 00000000000..fe4fdead762
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-6.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-6.png
new file mode 100644
index 00000000000..9a023cdb01e
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-6.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-7.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-7.png
new file mode 100644
index 00000000000..d7cd6ca7be5
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/fill-7.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon.png
new file mode 100644
index 00000000000..cf2066eb378
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..5f3bc4f4c7f
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/meta.json
new file mode 100644
index 00000000000..55fdf441638
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/sugarglass.rsi/meta.json
@@ -0,0 +1,38 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ },
+ {
+ "name": "fill-6"
+ },
+ {
+ "name": "fill-7"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-1.png
new file mode 100644
index 00000000000..05e6af71a78
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-2.png
new file mode 100644
index 00000000000..cdf98da4a6b
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-3.png
new file mode 100644
index 00000000000..1f514088a29
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-4.png
new file mode 100644
index 00000000000..1a8ed41fde2
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png
index 727bc3f2fbd..b31ed22db53 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..abad93afb35
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json
index db0ac608ed0..019c918be99 100644
--- a/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json
+++ b/Resources/Textures/Objects/Consumable/Drinks/teaglass.rsi/meta.json
@@ -1 +1,29 @@
-{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", "states": [{"name": "icon"}]}
\ No newline at end of file
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png
index 202cfe304cf..30399627af6 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png
index 8cb7a51424e..ed17e566935 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png
index b17d5ec6b6f..a240f84f261 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-4.png
deleted file mode 100644
index 642c08ff685..00000000000
Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/fill-4.png and /dev/null differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png
index 4cac2a3aa48..b1510211cfe 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png
index 72476b77c00..dd4fd594d57 100644
Binary files a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png and b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json
index 20e933bb577..a2e79dfea11 100644
--- a/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json
+++ b/Resources/Textures/Objects/Consumable/Drinks/tequillaglass.rsi/meta.json
@@ -1,31 +1,26 @@
{
- "version": 1,
- "size":
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
{
- "x": 32,
- "y": 32
+ "name": "icon"
},
- "license": "CC-BY-SA-3.0",
- "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi. Fill levels by Tayrtahn on GitHub.",
- "states":
- [
- {
- "name": "icon"
- },
- {
- "name": "icon_empty"
- },
- {
- "name": "fill-1"
- },
- {
- "name": "fill-2"
- },
- {
- "name": "fill-3"
- },
- {
- "name": "fill-4"
- }
- ]
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ }
+ ]
}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-1.png
new file mode 100644
index 00000000000..0082f2b8143
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-2.png
new file mode 100644
index 00000000000..cd667bfb334
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-3.png
new file mode 100644
index 00000000000..0edd69b4dbd
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-4.png
new file mode 100644
index 00000000000..f3cf6be999d
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-5.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-5.png
new file mode 100644
index 00000000000..3e1c0d68c12
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/fill-5.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon.png
new file mode 100644
index 00000000000..438ed21e517
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..1a306745d94
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/meta.json
new file mode 100644
index 00000000000..ec55ebfa1f1
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/tonicglass.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ },
+ {
+ "name": "fill-5"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-1.png
new file mode 100644
index 00000000000..533f3b81770
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-1.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-2.png
new file mode 100644
index 00000000000..7563af563a7
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-2.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-3.png
new file mode 100644
index 00000000000..38c729ef387
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-3.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-4.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-4.png
new file mode 100644
index 00000000000..010224c48eb
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/fill-4.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon.png
new file mode 100644
index 00000000000..e551fdb07ba
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon_empty.png
new file mode 100644
index 00000000000..ab9ba53863e
Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/icon_empty.png differ
diff --git a/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/meta.json
new file mode 100644
index 00000000000..019c918be99
--- /dev/null
+++ b/Resources/Textures/Objects/Consumable/Drinks/watermelonglass.rsi/meta.json
@@ -0,0 +1,29 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by RumiTiger",
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "icon_empty"
+ },
+ {
+ "name": "fill-1"
+ },
+ {
+ "name": "fill-2"
+ },
+ {
+ "name": "fill-3"
+ },
+ {
+ "name": "fill-4"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/meta.json b/Resources/Textures/Objects/Devices/securityhandy.rsi/meta.json
new file mode 100644
index 00000000000..18a2d932724
--- /dev/null
+++ b/Resources/Textures/Objects/Devices/securityhandy.rsi/meta.json
@@ -0,0 +1,28 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from cev-eris and modified by Swept at https://github.com/discordia-space/CEV-Eris/commit/efce5b6c3be75458ce238dcc01510e8f8a653ca6",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "walkietalkie"
+ },
+ {
+ "name": "walkietalkie-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "walkietalkie-inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "walkietalkie-off"
+ },
+ {
+ "name": "walkietalkie-on"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-left.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-left.png
new file mode 100644
index 00000000000..5815169abfb
Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-right.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-right.png
new file mode 100644
index 00000000000..ed1e606cfb7
Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-inhand-right.png differ
diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-off.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-off.png
new file mode 100644
index 00000000000..2afdf8d962f
Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-off.png differ
diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-on.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-on.png
new file mode 100644
index 00000000000..dfd79a64416
Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie-on.png differ
diff --git a/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie.png b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie.png
new file mode 100644
index 00000000000..12aaa3f2f09
Binary files /dev/null and b/Resources/Textures/Objects/Devices/securityhandy.rsi/walkietalkie.png differ
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/meta.json b/Resources/Textures/Objects/Materials/materials.rsi/meta.json
index f0307208e92..78f497c0cda 100644
--- a/Resources/Textures/Objects/Materials/materials.rsi/meta.json
+++ b/Resources/Textures/Objects/Materials/materials.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 , bear pelt remade by Alekshhh, wood sprite modified by MisterMecky, wood_2 and wood_3 made by MisterMecky based on wood sprite, cardboard sprites made by MisterMecky, bananium, bananium_1 and peel made by brainfood1183 (github) for ss14",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 , bear pelt remade by Alekshhh, wood sprite modified by MisterMecky, wood_2 and wood_3 made by MisterMecky based on wood sprite, cardboard sprites made by MisterMecky, bananium, bananium_1 and peel made by brainfood1183 (github) for ss14. Pyrotton sprites are drawn by Ubaser, using the cotton material sprites as a base.",
"size": {
"x": 32,
"y": 32
@@ -66,6 +66,15 @@
{
"name": "cotton_3"
},
+ {
+ "name": "pyrotton"
+ },
+ {
+ "name": "pyrotton_2"
+ },
+ {
+ "name": "pyrotton_3"
+ },
{
"name": "diamond"
},
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png
new file mode 100644
index 00000000000..daa6701c39d
Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton.png differ
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png
new file mode 100644
index 00000000000..fcd26895575
Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_2.png differ
diff --git a/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png
new file mode 100644
index 00000000000..072ba2c6d14
Binary files /dev/null and b/Resources/Textures/Objects/Materials/materials.rsi/pyrotton_3.png differ
diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-left.png b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-left.png
new file mode 100644
index 00000000000..fba15fa255f
Binary files /dev/null and b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-right.png b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-right.png
new file mode 100644
index 00000000000..d2b32fd8b8a
Binary files /dev/null and b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon-inhand-right.png differ
diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon.png b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon.png
new file mode 100644
index 00000000000..f24ded7e6b8
Binary files /dev/null and b/Resources/Textures/Objects/Misc/utensils.rsi/bar_spoon.png differ
diff --git a/Resources/Textures/Objects/Misc/utensils.rsi/meta.json b/Resources/Textures/Objects/Misc/utensils.rsi/meta.json
index 30dd4e85643..77aeb5e3c13 100644
--- a/Resources/Textures/Objects/Misc/utensils.rsi/meta.json
+++ b/Resources/Textures/Objects/Misc/utensils.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432 and modified by Swept",
+ "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432 and modified by Swept; Bar spoon by Dezzzix",
"size": {
"x": 32,
"y": 32
@@ -40,6 +40,17 @@
},
{
"name": "plastic_knife"
+ },
+ {
+ "name": "bar_spoon"
+ },
+ {
+ "name": "bar_spoon-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "bar_spoon-inhand-right",
+ "directions": 4
}
]
}
diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png
new file mode 100644
index 00000000000..500ad05704c
Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png differ
diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-unlit.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-unlit.png
new file mode 100644
index 00000000000..6c902b7d7ef
Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-unlit.png differ
diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/charging.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging.png
new file mode 100644
index 00000000000..6105bb4ad3b
Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging.png differ
diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png
new file mode 100644
index 00000000000..e3bc6d82993
Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png
new file mode 100644
index 00000000000..8c651922317
Binary files /dev/null and b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json b/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json
new file mode 100644
index 00000000000..794f491bdb9
--- /dev/null
+++ b/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json
@@ -0,0 +1,92 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by Lomovar",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "charging",
+ "delays": [
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "charging-equipped-BACKPACK",
+ "directions": 4,
+ "delays": [
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ],
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "charging-unlit",
+ "delays": [
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
+
diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/icon.png
new file mode 100644
index 00000000000..0c710e8850c
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-left.png
new file mode 100644
index 00000000000..f5c0eca3159
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-right.png
new file mode 100644
index 00000000000..bc8b034185e
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Specific/Chapel/quran.rsi/meta.json b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/meta.json
new file mode 100644
index 00000000000..64d37670f1c
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Chapel/quran.rsi/meta.json
@@ -0,0 +1,22 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a, modified by Terraspark4941",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png
new file mode 100644
index 00000000000..39d4b40f4c2
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/dead.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png
new file mode 100644
index 00000000000..1012ccfe03b
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/harvest.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json
new file mode 100644
index 00000000000..4a6e3c94fca
--- /dev/null
+++ b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/meta.json
@@ -0,0 +1,32 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Drawn by Ubaser, using the cotton sprites as a base.",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "dead"
+ },
+ {
+ "name": "harvest"
+ },
+ {
+ "name": "produce"
+ },
+ {
+ "name": "seed"
+ },
+ {
+ "name": "stage-1"
+ },
+ {
+ "name": "stage-2"
+ },
+ {
+ "name": "stage-3"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png
new file mode 100644
index 00000000000..72a98653c8f
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/produce.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png
new file mode 100644
index 00000000000..6528f4f326a
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/seed.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png
new file mode 100644
index 00000000000..c86f85f0d25
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-1.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png
new file mode 100644
index 00000000000..7bc634ce83a
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-2.png differ
diff --git a/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png
new file mode 100644
index 00000000000..31aa7399f58
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Hydroponics/pyrotton.rsi/stage-3.png differ
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
index 81174992b01..5bf41129876 100644
--- a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
+++ b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
@@ -200,6 +200,9 @@
{
"name": "shellslug"
},
+ {
+ "name": "shelluranium"
+ },
{
"name": "shelltoy"
},
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/shelluranium.png b/Resources/Textures/Objects/Storage/boxes.rsi/shelluranium.png
new file mode 100644
index 00000000000..2a4e1dee152
Binary files /dev/null and b/Resources/Textures/Objects/Storage/boxes.rsi/shelluranium.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png
index 398032cf36c..003858cf9d9 100644
Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png
index 5aa2e21ce18..88be89b3780 100644
Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png
index 262cc20fed6..042d52f5d74 100644
Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-0.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png
index c73a59a863b..5e64562bdc3 100644
Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png
index d0f1fbfec69..df4767bff9f 100644
Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png
index ecf2375729d..fcbbc48af1a 100644
Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png
index 9ae2c3610a1..40e557d736c 100644
Binary files a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png and b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json
index 3f3d4bc1dcf..86ecf2bff1a 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/484fcb08e8e2058b81059424fb5aa77034a3fcf1",
+ "copyright": "icon by RiceMar1244 based on icon taken from tg station at commit https://github.com/tgstation/tgstation/commit/8b7f8ba6a3327c7381967c550f185dffafd11a57",
"size": {
"x": 32,
"y": 32
@@ -14,15 +14,7 @@
"name": "base"
},
{
- "name": "mag-unshaded-0",
- "delays": [
- [
- 0.1,
- 0.1,
- 0.1,
- 0.1
- ]
- ]
+ "name": "mag-unshaded-0"
},
{
"name": "mag-unshaded-1"
@@ -38,47 +30,11 @@
},
{
"name": "inhand-left-0",
- "directions": 4,
- "delays": [
- [
- 0.3,
- 0.3
- ],
- [
- 0.3,
- 0.3
- ],
- [
- 0.3,
- 0.3
- ],
- [
- 0.3,
- 0.3
- ]
- ]
+ "directions": 4
},
{
"name": "inhand-right-0",
- "directions": 4,
- "delays": [
- [
- 0.3,
- 0.3
- ],
- [
- 0.3,
- 0.3
- ],
- [
- 0.3,
- 0.3
- ],
- [
- 0.3,
- 0.3
- ]
- ]
+ "directions": 4
},
{
"name": "inhand-left-1",
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane-empty.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane-empty.png
new file mode 100644
index 00000000000..64cb9ef3aa2
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane-empty.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane.png
new file mode 100644
index 00000000000..721847ff284
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/cane.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-left.png
new file mode 100644
index 00000000000..caa2f232703
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-right.png
new file mode 100644
index 00000000000..8f12a08afd6
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/meta.json
new file mode 100644
index 00000000000..913fcb524bf
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/meta.json
@@ -0,0 +1,33 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by ps3moira#9488 on discord",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "cane-empty"
+ },
+ {
+ "name": "cane"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "wielded-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "wielded-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-left.png
new file mode 100644
index 00000000000..f6f87a4a90e
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-right.png
new file mode 100644
index 00000000000..e1f0449b4c2
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane.rsi/wielded-inhand-right.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/icon.png
new file mode 100644
index 00000000000..6581dc96e8c
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-left.png
new file mode 100644
index 00000000000..f8e57880cb1
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-right.png
new file mode 100644
index 00000000000..5fa04f7f87c
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/meta.json
new file mode 100644
index 00000000000..a48335cc0d7
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Melee/cane_blade.rsi/meta.json
@@ -0,0 +1,22 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprited by ps3moira#9488 on discord",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "icon"
+ }
+ ]
+}
diff --git a/Resources/Textures/Shaders/displacement.swsl b/Resources/Textures/Shaders/displacement.swsl
new file mode 100644
index 00000000000..ba5ca57852e
--- /dev/null
+++ b/Resources/Textures/Shaders/displacement.swsl
@@ -0,0 +1,18 @@
+uniform sampler2D displacementMap;
+uniform highp float displacementSize;
+uniform highp vec4 displacementUV;
+
+varying highp vec2 displacementUVOut;
+
+void vertex() {
+ displacementUVOut = mix(displacementUV.xy, displacementUV.zw, tCoord2);
+}
+
+void fragment() {
+ highp vec4 displacementSample = texture2D(displacementMap, displacementUVOut);
+ highp vec2 displacementValue = (displacementSample.xy - vec2(128.0 / 255.0)) / (1.0 - 128.0 / 255.0);
+ COLOR = zTexture(UV + displacementValue * TEXTURE_PIXEL_SIZE * displacementSize * vec2(1.0, -1.0));
+ COLOR.a *= displacementSample.a;
+}
+
+
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/building.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/building.png
new file mode 100644
index 00000000000..7987532f393
Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/building.png differ
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/icon.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/icon.png
new file mode 100644
index 00000000000..e56878a7adc
Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/icon.png differ
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/meta.json b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/meta.json
new file mode 100644
index 00000000000..faa9a362b4a
--- /dev/null
+++ b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/meta.json
@@ -0,0 +1,52 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by Piksqu for ss14, based on the circuit imprinter sprite taken from tgstation at https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "panel"
+ },
+ {
+ "name": "unlit"
+ },
+ {
+ "name": "building",
+ "delays": [
+ [
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.16,
+ 0.18
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/panel.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/panel.png
new file mode 100644
index 00000000000..e9c369c734f
Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/panel.png differ
diff --git a/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/unlit.png b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/unlit.png
new file mode 100644
index 00000000000..9a9e240fbc1
Binary files /dev/null and b/Resources/Textures/Structures/Machines/circuit_imprinter_hypercon.rsi/unlit.png differ
diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_hamster.png b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_hamster.png
new file mode 100644
index 00000000000..5f14e3013fe
Binary files /dev/null and b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_hamster.png differ
diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mothroach.png b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mothroach.png
new file mode 100644
index 00000000000..d034322697e
Binary files /dev/null and b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mothroach.png differ
diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mouse.png b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mouse.png
new file mode 100644
index 00000000000..7fb87053f3f
Binary files /dev/null and b/Resources/Textures/Structures/Machines/fax_machine.rsi/inserting_mouse.png differ
diff --git a/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json b/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json
index 1a8856301d5..00681ca6da1 100644
--- a/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json
+++ b/Resources/Textures/Structures/Machines/fax_machine.rsi/meta.json
@@ -40,6 +40,63 @@
]
]
},
+ {
+ "name": "inserting_hamster",
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "inserting_mothroach",
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "inserting_mouse",
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
{
"name": "printing",
"delays": [
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png
index cce6fe0ba3c..a82bb8b2338 100644
Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png and b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_12.png differ
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png
index 08b6f664490..054f1f520c9 100644
Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png and b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_4.png differ
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png
index 6d980d1c67c..e1c22974684 100644
Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png and b/Resources/Textures/Structures/Storage/glassbox.rsi/DamageOverlay_8.png differ
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-empty-open.png b/Resources/Textures/Structures/Storage/glassbox.rsi/base.png
similarity index 100%
rename from Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-empty-open.png
rename to Resources/Textures/Structures/Storage/glassbox.rsi/base.png
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glass-4.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glass-broken.png
similarity index 100%
rename from Resources/Textures/Structures/Storage/glassbox.rsi/glass-4.png
rename to Resources/Textures/Structures/Storage/glassbox.rsi/glass-broken.png
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-closed.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-closed.png
deleted file mode 100644
index b558cf5212c..00000000000
Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-closed.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-open.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-open.png
deleted file mode 100644
index 48db8e88e59..00000000000
Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox-filled-open.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox.png b/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox.png
deleted file mode 100644
index 3a3bf591ca5..00000000000
Binary files a/Resources/Textures/Structures/Storage/glassbox.rsi/glassbox.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/icon.png b/Resources/Textures/Structures/Storage/glassbox.rsi/icon.png
new file mode 100644
index 00000000000..9d1c8c8685e
Binary files /dev/null and b/Resources/Textures/Structures/Storage/glassbox.rsi/icon.png differ
diff --git a/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json b/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json
index 5ce653f37b1..33decc40092 100644
--- a/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json
+++ b/Resources/Textures/Structures/Storage/glassbox.rsi/meta.json
@@ -1,50 +1,44 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from tgstation https://github.com/tgstation/tgstation/commit/0129a094635aac51e00fdc7aa3b4248affc1f49d Sprite modified and updated by Nimfar11 (Github), Shatter resprite by KREKS",
+ "copyright": "Taken from tgstation https://github.com/tgstation/tgstation/commit/0129a094635aac51e00fdc7aa3b4248affc1f49d Sprite modified and updated by Nimfar11 (Github), Shatter resprite by KREKS and modified by MilenVolf (GitHub)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
- "name": "glass"
- },
- {
- "name": "DamageOverlay_4"
+ "name": "base"
},
{
- "name": "DamageOverlay_8"
+ "name": "glass"
},
{
- "name": "DamageOverlay_12"
+ "name": "glass-up"
},
{
- "name": "glass-4"
+ "name": "glass-broken"
},
{
- "name": "glass-up"
+ "name": "caplaser"
},
{
"name": "locked"
},
- {
- "name": "caplaser"
- },
{
"name": "unlocked"
},
{
- "name": "glassbox"
+ "name": "icon"
},
{
- "name": "glassbox-empty-open"
+ "name": "DamageOverlay_4"
},
{
- "name": "glassbox-filled-closed"
+ "name": "DamageOverlay_8"
},
{
- "name": "glassbox-filled-open"
+ "name": "DamageOverlay_12"
}
]
}
\ No newline at end of file
diff --git a/Resources/migration.yml b/Resources/migration.yml
index bd14c51f1d2..607f629ab3b 100644
--- a/Resources/migration.yml
+++ b/Resources/migration.yml
@@ -470,5 +470,8 @@ WeaponPistolN1984Nonlethal: WeaponPistolN1984
WeaponSubMachineGunVectorRubber: WeaponSubMachineGunVector
WeaponSubMachineGunDrozdRubber: WeaponSubMachineGunDrozd
WeaponRifleLecterRubber: WeaponRifleLecter
+
+# 2024-04-26
+GlassBoxLaserBroken: GlassBoxBroken
ReinforcementRadioSyndicateMonkey: ReinforcementRadioSyndicateAncestor
ReinforcementRadioSyndicateMonkeyNukeops: ReinforcementRadioSyndicateAncestorNukeops
diff --git a/RobustToolbox b/RobustToolbox
index 123d0ae6acf..3330d961772 160000
--- a/RobustToolbox
+++ b/RobustToolbox
@@ -1 +1 @@
-Subproject commit 123d0ae6acf397654c135fe2b8f5268ff80c9bcf
+Subproject commit 3330d9617728534bfef313201de0327c4e7f0627
diff --git a/Tools/SS14 Aseprite Plugins/Displacement Map Flip.lua b/Tools/SS14 Aseprite Plugins/Displacement Map Flip.lua
new file mode 100644
index 00000000000..3291685071d
--- /dev/null
+++ b/Tools/SS14 Aseprite Plugins/Displacement Map Flip.lua
@@ -0,0 +1,78 @@
+local sprite = app.editor.sprite
+local cel = app.cel
+
+if sprite.selection.isEmpty then
+ print("You need to select something sorry")
+ return
+end
+
+local diag = Dialog{
+ title = "Flip Displacement Map"
+}
+
+diag:check{
+ id = "horizontal",
+ label = "flip horizontal?"
+}
+
+diag:check{
+ id = "vertical",
+ label = "flip vertical?"
+}
+
+diag:button{
+ text = "ok",
+ focus = true,
+ onclick = function(ev)
+ local horizontal = diag.data["horizontal"]
+ local vertical = diag.data["vertical"]
+
+ local selection = sprite.selection
+ local image = cel.image:clone()
+
+ for x = 0, selection.bounds.width do
+ for y = 0, selection.bounds.height do
+ local xSel = x + selection.origin.x
+ local ySel = y + selection.origin.y
+
+ local xImg = xSel - cel.position.x
+ local yImg = ySel - cel.position.y
+
+ if xImg < 0 or xImg >= image.width or yImg < 0 or yImg >= image.height then
+ goto continue
+ end
+
+ local imgValue = image:getPixel(xImg, yImg)
+ local color = Color(imgValue)
+
+ if horizontal then
+ color.red = 128 + -(color.red - 128)
+ end
+
+ if vertical then
+ color.green = 128 + -(color.green - 128)
+ end
+
+ image:drawPixel(
+ xImg,
+ yImg,
+ app.pixelColor.rgba(color.red, color.green, color.blue, color.alpha))
+
+ ::continue::
+ end
+ end
+
+ cel.image = image
+
+ diag:close()
+ end
+}
+
+diag:button{
+ text = "cancel",
+ onclick = function(ev)
+ diag:close()
+ end
+}
+
+diag:show()
diff --git a/Tools/SS14 Aseprite Plugins/Displacement Map Visualizer.lua b/Tools/SS14 Aseprite Plugins/Displacement Map Visualizer.lua
new file mode 100644
index 00000000000..468636c07d8
--- /dev/null
+++ b/Tools/SS14 Aseprite Plugins/Displacement Map Visualizer.lua
@@ -0,0 +1,171 @@
+-- Displacement Map Visualizer
+--
+-- This script will create a little preview window that will test a displacement map.
+--
+-- TODO: Handling of sizes != 127 doesn't work properly and rounds differently from the real shader. Ah well.
+
+local scale = 4
+
+-- This script requires UI
+if not app.isUIAvailable then
+ return
+end
+
+local getOffsetPixel = function(x, y, image, rect)
+ local posX = x - rect.x
+ local posY = y - rect.y
+
+ if posX < 0 or posX >= image.width or posY < 0 or posY >= image.height then
+ return image.spec.transparentColor
+ end
+
+ return image:getPixel(posX, posY)
+end
+
+local pixelValueToColor = function(sprite, value)
+ return Color(value)
+end
+
+local applyDisplacementMap = function(width, height, size, displacement, displacementRect, target, targetRect)
+ -- print(Color(displacement:getPixel(17, 15)).red)
+ local image = target:clone()
+ image:resize(width, height)
+ image:clear()
+
+ for x = 0, width - 1 do
+ for y = 0, height - 1 do
+ local value = getOffsetPixel(x, y, displacement, displacementRect)
+ local color = pixelValueToColor(sprite, value)
+
+ if color.alpha ~= 0 then
+ local offset_x = (color.red - 128) / 127 * size
+ local offset_y = (color.green - 128) / 127 * size
+
+ local colorValue = getOffsetPixel(x + offset_x, y + offset_y, target, targetRect)
+ image:drawPixel(x, y, colorValue)
+ end
+ end
+ end
+
+ return image
+end
+
+local dialog = nil
+
+local sprite = app.editor.sprite
+local spriteChanged = sprite.events:on("change",
+ function(ev)
+ dialog:repaint()
+ end)
+
+local layers = {}
+for i,layer in ipairs(sprite.layers) do
+ table.insert(layers, 1, layer.name)
+end
+
+local findLayer = function(sprite, name)
+ for i, layer in ipairs(sprite.layers) do
+ if layer.name == name then
+ return layer
+ end
+ end
+
+ return nil
+end
+
+dialog = Dialog{
+ title = "Displacement map preview",
+ onclose = function(ev)
+ sprite.events:off(spriteChanged)
+ end}
+
+dialog:canvas{
+ id = "canvas",
+ width = sprite.width * scale,
+ height = sprite.height * scale,
+ onpaint = function(ev)
+ local context = ev.context
+
+ local layerDisplacement = findLayer(sprite, dialog.data["displacement-select"])
+ local layerTarget = findLayer(sprite, dialog.data["reference-select"])
+ local layerBackground = findLayer(sprite, dialog.data["background-select"])
+ -- print(layerDisplacement.name)
+ -- print(layerTarget.name)
+
+ local celDisplacement = layerDisplacement:cel(1)
+ local celTarget = layerTarget:cel(1)
+ local celBackground = layerBackground:cel(1)
+
+ -- Draw background
+ context:drawImage(
+ -- srcImage
+ celBackground.image,
+ -- srcPos
+ 0, 0,
+ -- srcSize
+ celBackground.image.width, celBackground.image.height,
+ -- dstPos
+ celBackground.position.x * scale, celBackground.position.y * scale,
+ -- dstSize
+ celBackground.image.width * scale, celBackground.image.height * scale)
+
+ -- Apply displacement map and draw
+ local image = applyDisplacementMap(
+ sprite.width, sprite.height,
+ dialog.data["size"],
+ celDisplacement.image, celDisplacement.bounds,
+ celTarget.image, celTarget.bounds)
+
+ context:drawImage(
+ -- srcImage
+ image,
+ -- srcPos
+ 0, 0,
+ -- srcSize
+ image.width, image.height,
+ -- dstPos
+ 0, 0,
+ -- dstSize
+ image.width * scale, image.height * scale)
+ end
+}
+
+dialog:combobox{
+ id = "displacement-select",
+ label = "displacement layer",
+ options = layers,
+ onchange = function(ev)
+ dialog:repaint()
+ end
+}
+
+dialog:combobox{
+ id = "reference-select",
+ label = "reference layer",
+ options = layers,
+ onchange = function(ev)
+ dialog:repaint()
+ end
+}
+
+dialog:combobox{
+ id = "background-select",
+ label = "background layer",
+ options = layers,
+ onchange = function(ev)
+ dialog:repaint()
+ end
+}
+
+dialog:slider{
+ id = "size",
+ label = "displacement size",
+ min = 1,
+ max = 127,
+ value = 127,
+ onchange = function(ev)
+ dialog:repaint()
+ end
+}
+
+dialog:show{wait = false}
diff --git a/Tools/SS14 Aseprite Plugins/Displacement Map.png b/Tools/SS14 Aseprite Plugins/Displacement Map.png
new file mode 100644
index 00000000000..50744cef601
Binary files /dev/null and b/Tools/SS14 Aseprite Plugins/Displacement Map.png differ