diff --git a/Content.Client/Access/Commands/ShowAccessReadersCommand.cs b/Content.Client/Access/Commands/ShowAccessReadersCommand.cs index cb6cb6cf6b..e26cca0fc2 100644 --- a/Content.Client/Access/Commands/ShowAccessReadersCommand.cs +++ b/Content.Client/Access/Commands/ShowAccessReadersCommand.cs @@ -4,39 +4,20 @@ using Robust.Shared.Console; namespace Content.Client.Access.Commands; -public sealed class ShowAccessReadersCommand : IConsoleCommand +public sealed class ShowAccessReadersCommand : LocalizedEntityCommands { - public string Command => "showaccessreaders"; + [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IResourceCache _cache = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; - public string Description => "Toggles showing access reader permissions on the map"; - public string Help => """ - Overlay Info: - -Disabled | The access reader is disabled - +Unrestricted | The access reader has no restrictions - +Set [Index]: [Tag Name]| A tag in an access set (accessor needs all tags in the set to be allowed by the set) - +Key [StationUid]: [StationRecordKeyId] | A StationRecordKey that is allowed - -Tag [Tag Name] | A tag that is not allowed (takes priority over other allows) - """; - public void Execute(IConsoleShell shell, string argStr, string[] args) + public override string Command => "showaccessreaders"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - var collection = IoCManager.Instance; + var existing = _overlay.RemoveOverlay(); + if (!existing) + _overlay.AddOverlay(new AccessOverlay(EntityManager, _cache, _xform)); - if (collection == null) - return; - - var overlay = collection.Resolve(); - - if (overlay.RemoveOverlay()) - { - shell.WriteLine($"Set access reader debug overlay to false"); - return; - } - - var entManager = collection.Resolve(); - var cache = collection.Resolve(); - var xform = entManager.System(); - - overlay.AddOverlay(new AccessOverlay(entManager, cache, xform)); - shell.WriteLine($"Set access reader debug overlay to true"); + shell.WriteLine(Loc.GetString($"cmd-showaccessreaders-status", ("status", !existing))); } } diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index 91baa3b1a9..23ff23997f 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -32,7 +32,6 @@ namespace Content.Client.Actions [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IResourceManager _resources = default!; - [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; public event Action? OnActionAdded; diff --git a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs index fc6583e920..ae4264db60 100644 --- a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs @@ -11,8 +11,6 @@ namespace Content.Client.Clothing.Systems; // All valid items for chameleon are calculated on client startup and stored in dictionary. public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem { - [Dependency] private readonly IPrototypeManager _proto = default!; - public override void Initialize() { base.Initialize(); diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 51e731e422..3fd0a9f699 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -136,6 +136,8 @@ namespace Content.Client.Entry _prototypeManager.RegisterIgnore("sponsorLoadout"); // Sunrise-Sponsors _prototypeManager.RegisterIgnore("holidayGiveawayItem"); // Sunrise-Edit _prototypeManager.RegisterIgnore("ghostRoleRaffleDecider"); + _prototypeManager.RegisterIgnore("codewordGenerator"); + _prototypeManager.RegisterIgnore("codewordFaction"); _componentFactory.GenerateNetIds(); _adminManager.Initialize(); diff --git a/Content.Client/Inventory/StrippableBoundUserInterface.cs b/Content.Client/Inventory/StrippableBoundUserInterface.cs index 295d4848e5..a9a937d5d8 100644 --- a/Content.Client/Inventory/StrippableBoundUserInterface.cs +++ b/Content.Client/Inventory/StrippableBoundUserInterface.cs @@ -50,6 +50,18 @@ namespace Content.Client.Inventory [ViewVariables] private readonly EntityUid _virtualHiddenEntity; + /// + /// The current amount of added hand buttons. + /// + [ViewVariables] + private int _handCount; + + /// + /// The current shape of the inventory, needed to calculate the window size. + /// + [ViewVariables] + private Vector2i _inventoryDimensions; + public StrippableBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { _examine = EntMan.System(); @@ -93,6 +105,8 @@ namespace Content.Client.Inventory return; _strippingMenu.ClearButtons(); + _handCount = 0; + _inventoryDimensions = Vector2i.Zero; if (EntMan.TryGetComponent(Owner, out var inv)) { @@ -152,9 +166,15 @@ namespace Content.Client.Inventory // TODO allow windows to resize based on content's desired size // for now: shit-code - // this breaks for drones (too many hands, lots of empty vertical space), and looks shit for monkeys and the like. - // but the window is realizable, so eh. - _strippingMenu.SetSize = new Vector2(220, snare?.IsEnsnared == true ? 550 : 530); + // calculate the window size manually + // +20 horizontally and vertically from the ContentsContainer margin + // +16 vertically from the BoxContainer margin + // +27 vertically from the window header + var horizontalMenuSize = Math.Max(200, Math.Max(_handCount, _inventoryDimensions.X + 1) * (SlotControl.DefaultButtonSize + ButtonSeparation) + 20); + var verticalMenuSize = Math.Max(200, (_inventoryDimensions.Y + (_handCount > 0 ? 2 : 1)) * (SlotControl.DefaultButtonSize + ButtonSeparation) + 53); + if (snare?.IsEnsnared == true) + verticalMenuSize += 20; + _strippingMenu.SetSize = new Vector2(horizontalMenuSize, verticalMenuSize); } private void AddHandButton(Hand hand) @@ -172,6 +192,8 @@ namespace Content.Client.Inventory UpdateEntityIcon(button, hand.HeldEntity); _strippingMenu!.HandsContainer.AddChild(button); + LayoutContainer.SetPosition(button, new Vector2i(_handCount, 0) * (SlotControl.DefaultButtonSize + ButtonSeparation)); + _handCount++; } private void SlotPressed(GUIBoundKeyEventArgs ev, SlotControl slot) @@ -220,6 +242,10 @@ namespace Content.Client.Inventory UpdateEntityIcon(button, entity); LayoutContainer.SetPosition(button, slotDef.StrippingWindowPos * (SlotControl.DefaultButtonSize + ButtonSeparation)); + if (slotDef.StrippingWindowPos.X > _inventoryDimensions.X) + _inventoryDimensions = new Vector2i(slotDef.StrippingWindowPos.X, _inventoryDimensions.Y); + if (slotDef.StrippingWindowPos.Y > _inventoryDimensions.Y) + _inventoryDimensions = new Vector2i(_inventoryDimensions.X, slotDef.StrippingWindowPos.Y); } private void UpdateEntityIcon(SlotControl button, EntityUid? entity) diff --git a/Content.Client/Movement/Systems/JetpackSystem.cs b/Content.Client/Movement/Systems/JetpackSystem.cs index bf80ed4252..c9e759e129 100644 --- a/Content.Client/Movement/Systems/JetpackSystem.cs +++ b/Content.Client/Movement/Systems/JetpackSystem.cs @@ -16,7 +16,6 @@ public sealed class JetpackSystem : SharedJetpackSystem [Dependency] private readonly ClothingSystem _clothing = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedMapSystem _mapSystem = default!; - [Dependency] private readonly SpriteSystem _sprite = default!; public override void Initialize() { diff --git a/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs b/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs index 51430ca315..d14136957f 100644 --- a/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs +++ b/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs @@ -3,15 +3,15 @@ using Robust.Shared.Console; namespace Content.Client.Shuttles.Commands; -public sealed class ShowEmergencyShuttleCommand : IConsoleCommand +public sealed class ShowEmergencyShuttleCommand : LocalizedEntityCommands { - public string Command => "showemergencyshuttle"; - public string Description => "Shows the expected position of the emergency shuttle"; - public string Help => $"{Command}"; - public void Execute(IConsoleShell shell, string argStr, string[] args) + [Dependency] private readonly ShuttleSystem _shuttle = default!; + + public override string Command => "showemergencyshuttle"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - var tstalker = IoCManager.Resolve().GetEntitySystem(); - tstalker.EnableShuttlePosition ^= true; - shell.WriteLine($"Set emergency shuttle debug to {tstalker.EnableShuttlePosition}"); + _shuttle.EnableShuttlePosition ^= true; + shell.WriteLine(Loc.GetString($"cmd-showemergencyshuttle-status", ("status", _shuttle.EnableShuttlePosition))); } } diff --git a/Content.Client/Strip/StrippingMenu.cs b/Content.Client/Strip/StrippingMenu.cs index 1c46b4be35..531e5fb44d 100644 --- a/Content.Client/Strip/StrippingMenu.cs +++ b/Content.Client/Strip/StrippingMenu.cs @@ -8,7 +8,7 @@ namespace Content.Client.Strip public sealed class StrippingMenu : DefaultWindow { public LayoutContainer InventoryContainer = new(); - public BoxContainer HandsContainer = new() { Orientation = LayoutOrientation.Horizontal }; + public LayoutContainer HandsContainer = new(); public BoxContainer SnareContainer = new(); public bool Dirty = true; diff --git a/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs b/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs index eda469deaf..1eb82bde1c 100644 --- a/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs +++ b/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs @@ -3,39 +3,33 @@ using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Client.Player; using Robust.Shared.Console; -using Robust.Shared.Map; namespace Content.Client.Weapons.Melee; - -public sealed class MeleeSpreadCommand : IConsoleCommand +public sealed class MeleeSpreadCommand : LocalizedEntityCommands { - public string Command => "showmeleespread"; - public string Description => "Shows the current weapon's range and arc for debugging"; - public string Help => $"{Command}"; - public void Execute(IConsoleShell shell, string argStr, string[] args) + [Dependency] private readonly IEyeManager _eyeManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly MeleeWeaponSystem _meleeSystem = default!; + [Dependency] private readonly SharedCombatModeSystem _combatSystem = default!; + [Dependency] private readonly SharedTransformSystem _transformSystem = default!; + + public override string Command => "showmeleespread"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - var collection = IoCManager.Instance; - - if (collection == null) + if (_overlay.RemoveOverlay()) return; - var overlayManager = collection.Resolve(); - - if (overlayManager.RemoveOverlay()) - { - return; - } - - var sysManager = collection.Resolve(); - - overlayManager.AddOverlay(new MeleeArcOverlay( - collection.Resolve(), - collection.Resolve(), - collection.Resolve(), - collection.Resolve(), - sysManager.GetEntitySystem(), - sysManager.GetEntitySystem(), - sysManager.GetEntitySystem())); + _overlay.AddOverlay(new MeleeArcOverlay( + EntityManager, + _eyeManager, + _inputManager, + _playerManager, + _meleeSystem, + _combatSystem, + _transformSystem)); } } diff --git a/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs b/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs index 3f703ce774..b98f030b06 100644 --- a/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs +++ b/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; -using System.Linq; using Content.Shared.Access; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Robust.Shared.GameObjects; +using Robust.Shared.Map; using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.Access @@ -12,6 +12,15 @@ namespace Content.IntegrationTests.Tests.Access [TestOf(typeof(AccessReaderComponent))] public sealed class AccessReaderTest { + [TestPrototypes] + private const string Prototypes = @" +- type: entity + id: TestAccessReader + name: access reader + components: + - type: AccessReader +"; + [Test] public async Task TestTags() { @@ -19,13 +28,13 @@ namespace Content.IntegrationTests.Tests.Access var server = pair.Server; var entityManager = server.ResolveDependency(); - await server.WaitAssertion(() => { var system = entityManager.System(); + var ent = entityManager.SpawnEntity("TestAccessReader", MapCoordinates.Nullspace); + var reader = new Entity(ent, entityManager.GetComponent(ent)); // test empty - var reader = new AccessReaderComponent(); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "Foo" }, reader), Is.True); @@ -34,8 +43,7 @@ namespace Content.IntegrationTests.Tests.Access }); // test deny - reader = new AccessReaderComponent(); - reader.DenyTags.Add("A"); + system.AddDenyTag(reader, "A"); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "Foo" }, reader), Is.True); @@ -43,10 +51,10 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "Foo" }, reader), Is.False); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.True); }); + system.ClearDenyTags(reader); // test one list - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A" }); + system.AddAccess(reader, "A"); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -54,10 +62,10 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); // test one list - two items - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A", "B" }); + system.AddAccess(reader, new HashSet> { "A", "B" }); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.False); @@ -65,11 +73,14 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); // test two list - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A" }); - reader.AccessLists.Add(new HashSet> { "B", "C" }); + var accesses = new List>>() { + new HashSet> () { "A" }, + new HashSet> () { "B", "C" } + }; + system.AddAccesses(reader, accesses); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -79,11 +90,11 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "C", "B", "A" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); // test deny list - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A" }); - reader.DenyTags.Add("B"); + system.AddAccess(reader, new HashSet> { "A" }); + system.AddDenyTag(reader, "B"); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -91,6 +102,8 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.False); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); + system.ClearDenyTags(reader); }); await pair.CleanReturnAsync(); } diff --git a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs index 3cb3fdbb32..04d23e3f6d 100644 --- a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs @@ -18,6 +18,7 @@ using Content.Shared.FixedPoint; using Content.Shared.GameTicking; using Content.Shared.Hands.Components; using Content.Shared.Inventory; +using Content.Shared.NPC.Prototypes; using Content.Shared.NPC.Systems; using Content.Shared.NukeOps; using Content.Shared.Pinpointer; @@ -25,12 +26,16 @@ using Content.Shared.Station.Components; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Map.Components; +using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.GameRules; [TestFixture] public sealed class NukeOpsTest { + private static readonly ProtoId SyndicateFaction = "Syndicate"; + private static readonly ProtoId NanotrasenFaction = "NanoTrasen"; + /// /// Check that a nuke ops game mode can start without issue. I.e., that the nuke station and such all get loaded. /// @@ -121,8 +126,8 @@ public sealed class NukeOpsTest Assert.That(entMan.HasComponent(player)); Assert.That(roleSys.MindIsAntagonist(mind)); Assert.That(roleSys.MindHasRole(mind)); - Assert.That(factionSys.IsMember(player, "Syndicate"), Is.True); - Assert.That(factionSys.IsMember(player, "NanoTrasen"), Is.False); + Assert.That(factionSys.IsMember(player, SyndicateFaction), Is.True); + Assert.That(factionSys.IsMember(player, NanotrasenFaction), Is.False); var roles = roleSys.MindGetAllRoleInfo(mind); var cmdRoles = roles.Where(x => x.Prototype == "NukeopsCommander"); Assert.That(cmdRoles.Count(), Is.EqualTo(1)); @@ -132,8 +137,8 @@ public sealed class NukeOpsTest Assert.That(entMan.HasComponent(dummyEnts[1])); Assert.That(roleSys.MindIsAntagonist(dummyMind)); Assert.That(roleSys.MindHasRole(dummyMind)); - Assert.That(factionSys.IsMember(dummyEnts[1], "Syndicate"), Is.True); - Assert.That(factionSys.IsMember(dummyEnts[1], "NanoTrasen"), Is.False); + Assert.That(factionSys.IsMember(dummyEnts[1], SyndicateFaction), Is.True); + Assert.That(factionSys.IsMember(dummyEnts[1], NanotrasenFaction), Is.False); roles = roleSys.MindGetAllRoleInfo(dummyMind); cmdRoles = roles.Where(x => x.Prototype == "NukeopsMedic"); Assert.That(cmdRoles.Count(), Is.EqualTo(1)); @@ -148,8 +153,8 @@ public sealed class NukeOpsTest Assert.That(entMan.HasComponent(ent), Is.False); Assert.That(roleSys.MindIsAntagonist(mindCrew), Is.False); Assert.That(roleSys.MindHasRole(mindCrew), Is.False); - Assert.That(factionSys.IsMember(ent, "Syndicate"), Is.False); - Assert.That(factionSys.IsMember(ent, "NanoTrasen"), Is.True); + Assert.That(factionSys.IsMember(ent, SyndicateFaction), Is.False); + Assert.That(factionSys.IsMember(ent, NanotrasenFaction), Is.True); var nukeroles = new List() { "Nukeops", "NukeopsMedic", "NukeopsCommander" }; Assert.That(roleSys.MindGetAllRoleInfo(mindCrew).Any(x => nukeroles.Contains(x.Prototype)), Is.False); } diff --git a/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs b/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs index d2717521b2..97fe1c8762 100644 --- a/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs @@ -8,6 +8,7 @@ using Content.Server.Roles; using Content.Shared.GameTicking; using Content.Shared.GameTicking.Components; using Content.Shared.Mind; +using Content.Shared.NPC.Prototypes; using Content.Shared.NPC.Systems; using Content.Shared.Objectives.Components; using Robust.Shared.GameObjects; @@ -20,6 +21,8 @@ public sealed class TraitorRuleTest { private const string TraitorGameRuleProtoId = "Traitor"; private const string TraitorAntagRoleName = "Traitor"; + private static readonly ProtoId SyndicateFaction = "Syndicate"; + private static readonly ProtoId NanotrasenFaction = "NanoTrasen"; [Test] public async Task TestTraitorObjectives() @@ -108,8 +111,8 @@ public sealed class TraitorRuleTest // Make sure the player is a traitor. var mind = mindSys.GetMind(player)!.Value; Assert.That(roleSys.MindIsAntagonist(mind)); - Assert.That(factionSys.IsMember(player, "Syndicate"), Is.True); - Assert.That(factionSys.IsMember(player, "NanoTrasen"), Is.False); + Assert.That(factionSys.IsMember(player, SyndicateFaction), Is.True); + Assert.That(factionSys.IsMember(player, NanotrasenFaction), Is.False); Assert.That(traitorRule.TotalTraitors, Is.EqualTo(1)); Assert.That(traitorRule.TraitorMinds[0], Is.EqualTo(mind)); diff --git a/Content.Server/Access/AccessWireAction.cs b/Content.Server/Access/AccessWireAction.cs index b3beb3967b..2682fff286 100644 --- a/Content.Server/Access/AccessWireAction.cs +++ b/Content.Server/Access/AccessWireAction.cs @@ -1,6 +1,7 @@ using Content.Server.Wires; using Content.Shared.Access; using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; using Content.Shared.Wires; namespace Content.Server.Access; @@ -23,23 +24,21 @@ public sealed partial class AccessWireAction : ComponentWireAction().SetActive((wire.Owner, comp), false); + return true; } public override bool Mend(EntityUid user, Wire wire, AccessReaderComponent comp) { - comp.Enabled = true; - EntityManager.Dirty(wire.Owner, comp); + EntityManager.System().SetActive((wire.Owner, comp), true); return true; } public override void Pulse(EntityUid user, Wire wire, AccessReaderComponent comp) { - comp.Enabled = false; - EntityManager.Dirty(wire.Owner, comp); + EntityManager.System().SetActive((wire.Owner, comp), false); WiresSystem.StartWireAction(wire.Owner, _pulseTimeout, PulseTimeoutKey.Key, new TimedWireEvent(AwaitPulseCancel, wire)); } @@ -57,8 +56,7 @@ public sealed partial class AccessWireAction : ComponentWireAction(wire.Owner, out var access)) { - access.Enabled = true; - EntityManager.Dirty(wire.Owner, access); + EntityManager.System().SetActive((wire.Owner, access), true); } } } diff --git a/Content.Server/Access/AddAccessLogCommand.cs b/Content.Server/Access/AddAccessLogCommand.cs index f55a9b8f1e..e68a58d165 100644 --- a/Content.Server/Access/AddAccessLogCommand.cs +++ b/Content.Server/Access/AddAccessLogCommand.cs @@ -1,8 +1,8 @@ using Content.Server.Administration; using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; using Content.Shared.Administration; using Robust.Shared.Toolshed; -using Robust.Shared.Toolshed.Syntax; namespace Content.Server.Access; @@ -19,7 +19,7 @@ public sealed class AddAccessLogCommand : ToolshedCommand ctx.WriteLine($"WARNING: Surpassing the limit of the log by {accessLogCount - accessReader.AccessLogLimit+1} entries!"); var accessTime = TimeSpan.FromSeconds(seconds); - accessReader.AccessLog.Enqueue(new AccessRecord(accessTime, accessor)); + EntityManager.System().LogAccess((input, accessReader), accessor, accessTime, true); ctx.WriteLine($"Successfully added access log to {input} with this information inside:\n " + $"Time of access: {accessTime}\n " + $"Accessed by: {accessor}"); diff --git a/Content.Server/Access/LogWireAction.cs b/Content.Server/Access/LogWireAction.cs index 837cf420d5..d6ba3dbfcd 100644 --- a/Content.Server/Access/LogWireAction.cs +++ b/Content.Server/Access/LogWireAction.cs @@ -37,21 +37,21 @@ public sealed partial class LogWireAction : ComponentWireAction().SetLoggingActive((wire.Owner, comp), false); + return true; } public override bool Mend(EntityUid user, Wire wire, AccessReaderComponent comp) { - comp.LoggingDisabled = false; + EntityManager.System().SetLoggingActive((wire.Owner, comp), true); return true; } public override void Pulse(EntityUid user, Wire wire, AccessReaderComponent comp) { _access.LogAccess((wire.Owner, comp), Loc.GetString(PulseLog)); - comp.LoggingDisabled = true; + EntityManager.System().SetLoggingActive((wire.Owner, comp), false); WiresSystem.StartWireAction(wire.Owner, PulseTimeout, PulseTimeoutKey.Key, new TimedWireEvent(AwaitPulseCancel, wire)); } @@ -64,7 +64,7 @@ public sealed partial class LogWireAction : ComponentWireAction(wire.Owner, out var comp)) - comp.LoggingDisabled = false; + EntityManager.System().SetLoggingActive((wire.Owner, comp), true); } private enum PulseTimeoutKey : byte diff --git a/Content.Server/Access/Systems/AccessOverriderSystem.cs b/Content.Server/Access/Systems/AccessOverriderSystem.cs index 4062909d75..51d35c50a4 100644 --- a/Content.Server/Access/Systems/AccessOverriderSystem.cs +++ b/Content.Server/Access/Systems/AccessOverriderSystem.cs @@ -168,21 +168,6 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem return accessList; } - private List>> ConvertAccessListToHashSet(List> accessList) - { - List>> accessHashsets = new List>>(); - - if (accessList != null && accessList.Any()) - { - foreach (ProtoId access in accessList) - { - accessHashsets.Add(new HashSet>() { access }); - } - } - - return accessHashsets; - } - /// /// Called whenever an access button is pressed, adding or removing that access requirement from the target access reader. /// @@ -244,12 +229,10 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem _adminLogger.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(player):player} has modified {ToPrettyString(accessReaderEnt.Value):entity} with the following allowed access level holders: [{string.Join(", ", addedTags.Union(removedTags))}] [{string.Join(", ", newAccessList)}]"); - accessReaderEnt.Value.Comp.AccessLists = ConvertAccessListToHashSet(newAccessList); + _accessReader.SetAccesses(accessReaderEnt.Value, newAccessList); var ev = new OnAccessOverriderAccessUpdatedEvent(player); RaiseLocalEvent(component.TargetAccessReaderId, ref ev); - - Dirty(accessReaderEnt.Value); } /// diff --git a/Content.Server/Actions/ActionOnInteractSystem.cs b/Content.Server/Actions/ActionOnInteractSystem.cs index 973e1afbcd..a8bb4e5cf7 100644 --- a/Content.Server/Actions/ActionOnInteractSystem.cs +++ b/Content.Server/Actions/ActionOnInteractSystem.cs @@ -15,7 +15,6 @@ namespace Content.Server.Actions; public sealed class ActionOnInteractSystem : EntitySystem { [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly ActionContainerSystem _actionContainer = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; diff --git a/Content.Server/Administration/Commands/PersistenceSaveCommand.cs b/Content.Server/Administration/Commands/PersistenceSaveCommand.cs index 56ad2be260..269e651e81 100644 --- a/Content.Server/Administration/Commands/PersistenceSaveCommand.cs +++ b/Content.Server/Administration/Commands/PersistenceSaveCommand.cs @@ -12,12 +12,10 @@ namespace Content.Server.Administration.Commands; public sealed class PersistenceSave : LocalizedEntityCommands { [Dependency] private readonly IConfigurationManager _config = default!; - [Dependency] private readonly IEntitySystemManager _system = default!; [Dependency] private readonly SharedMapSystem _map = default!; + [Dependency] private readonly MapLoaderSystem _mapLoader = default!; public override string Command => "persistencesave"; - public override string Description => "Saves server data to a persistence file to be loaded later."; - public override string Help => "persistencesave [mapId] [filePath - default: game.map (CCVar) ]"; public override void Execute(IConsoleShell shell, string argStr, string[] args) { @@ -47,8 +45,7 @@ public sealed class PersistenceSave : LocalizedEntityCommands return; } - var mapLoader = _system.GetEntitySystem(); - mapLoader.TrySaveMap(mapId, new ResPath(saveFilePath)); + _mapLoader.TrySaveMap(mapId, new ResPath(saveFilePath)); shell.WriteLine(Loc.GetString("cmd-savemap-success")); } } diff --git a/Content.Server/Administration/Toolshed/SolutionCommand.cs b/Content.Server/Administration/Toolshed/SolutionCommand.cs index c529bcd16d..d184afcb4d 100644 --- a/Content.Server/Administration/Toolshed/SolutionCommand.cs +++ b/Content.Server/Administration/Toolshed/SolutionCommand.cs @@ -38,18 +38,21 @@ public sealed class SolutionCommand : ToolshedCommand public SolutionRef AdjReagent( [PipedArgument] SolutionRef input, ProtoId proto, - FixedPoint2 amount + float amount ) { _solutionContainer ??= GetSys(); - if (amount > 0) + // Convert float to FixedPoint2 + var amountFixed = FixedPoint2.New(amount); + + if (amountFixed > 0) { - _solutionContainer.TryAddReagent(input.Solution, proto, amount, out _); + _solutionContainer.TryAddReagent(input.Solution, proto, amountFixed, out _); } - else if (amount < 0) + else if (amountFixed < 0) { - _solutionContainer.RemoveReagent(input.Solution, proto, -amount); + _solutionContainer.RemoveReagent(input.Solution, proto, -amountFixed); } return input; @@ -59,7 +62,7 @@ public sealed class SolutionCommand : ToolshedCommand public IEnumerable AdjReagent( [PipedArgument] IEnumerable input, ProtoId name, - FixedPoint2 amount + float amount ) => input.Select(x => AdjReagent(x, name, amount)); } diff --git a/Content.Server/Chat/Systems/ChatSystem.Emote.cs b/Content.Server/Chat/Systems/ChatSystem.Emote.cs index 769807853a..72f7bab0a2 100644 --- a/Content.Server/Chat/Systems/ChatSystem.Emote.cs +++ b/Content.Server/Chat/Systems/ChatSystem.Emote.cs @@ -3,6 +3,7 @@ using Content.Shared.Chat; using Content.Shared.Chat.Prototypes; using Content.Shared.Emoting; using Content.Shared.Speech; +using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -146,16 +147,16 @@ public partial class ChatSystem /// Tries to find and play relevant emote sound in emote sounds collection. /// /// True if emote sound was played. - public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, EmotePrototype emote) + public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, EmotePrototype emote, AudioParams? audioParams = null) { - return TryPlayEmoteSound(uid, proto, emote.ID); + return TryPlayEmoteSound(uid, proto, emote.ID, audioParams); } /// /// Tries to find and play relevant emote sound in emote sounds collection. /// /// True if emote sound was played. - public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, string emoteId) + public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, string emoteId, AudioParams? audioParams = null) { if (proto == null) return false; @@ -169,8 +170,8 @@ public partial class ChatSystem return false; } - // if general params for all sounds set - use them - var param = proto.GeneralParams ?? sound.Params; + // optional override params > general params for all sounds in set > individual sound params + var param = audioParams ?? proto.GeneralParams ?? sound.Params; _audio.PlayPvs(sound, uid, param); return true; } diff --git a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs index 92aa99b1e1..50473d5e59 100644 --- a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs @@ -18,7 +18,6 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IdentitySystem _identity = default!; [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IEntityManager _entityManager = default!; public override void Initialize() { diff --git a/Content.Server/Codewords/CodewordComponent.cs b/Content.Server/Codewords/CodewordComponent.cs new file mode 100644 index 0000000000..6ceb3a513a --- /dev/null +++ b/Content.Server/Codewords/CodewordComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Server.Codewords; + +/// +/// Container for generated codewords. +/// +[RegisterComponent, Access(typeof(CodewordSystem))] +public sealed partial class CodewordComponent : Component +{ + /// + /// The codewords that were generated. + /// + [DataField] + public string[] Codewords = []; +} diff --git a/Content.Server/Codewords/CodewordFactionPrototype.cs b/Content.Server/Codewords/CodewordFactionPrototype.cs new file mode 100644 index 0000000000..72d24b1dcd --- /dev/null +++ b/Content.Server/Codewords/CodewordFactionPrototype.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.Codewords; + +/// +/// This is a prototype for easy access to codewords using identifiers instead of magic strings. +/// +[Prototype] +public sealed partial class CodewordFactionPrototype : IPrototype +{ + /// + [IdDataField] + public string ID { get; } = default!; + + /// + /// The generator to use for this faction. + /// + [DataField(required:true)] + public ProtoId Generator { get; } = default!; +} diff --git a/Content.Server/Codewords/CodewordGeneratorPrototype.cs b/Content.Server/Codewords/CodewordGeneratorPrototype.cs new file mode 100644 index 0000000000..15e50ebf73 --- /dev/null +++ b/Content.Server/Codewords/CodewordGeneratorPrototype.cs @@ -0,0 +1,32 @@ +using Content.Shared.Dataset; +using Robust.Shared.Prototypes; + +namespace Content.Server.Codewords; + +/// +/// This is a prototype for specifying codeword generation +/// +[Prototype] +public sealed partial class CodewordGeneratorPrototype : IPrototype +{ + /// + [IdDataField] + public string ID { get; } = default!; + + /// + /// List of datasets to use for word generation. All values will be concatenated into one list and then randomly chosen from + /// + [DataField] + public List> Words { get; } = + [ + "Adjectives", + "Verbs", + ]; + + + /// + /// How many codewords should be generated? + /// + [DataField] + public int Amount = 3; +} diff --git a/Content.Server/Codewords/CodewordManagerComponent.cs b/Content.Server/Codewords/CodewordManagerComponent.cs new file mode 100644 index 0000000000..46ddc357a1 --- /dev/null +++ b/Content.Server/Codewords/CodewordManagerComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.Codewords; + +/// +/// Component that defines to use and keeps track of generated codewords. +/// +[RegisterComponent, Access(typeof(CodewordSystem))] +public sealed partial class CodewordManagerComponent : Component +{ + /// + /// The generated codewords. The value contains the entity that has the + /// + [DataField] + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary, EntityUid> Codewords = new(); +} diff --git a/Content.Server/Codewords/CodewordSystem.cs b/Content.Server/Codewords/CodewordSystem.cs new file mode 100644 index 0000000000..54f0e936b4 --- /dev/null +++ b/Content.Server/Codewords/CodewordSystem.cs @@ -0,0 +1,90 @@ +using System.Linq; +using Content.Server.Administration.Logs; +using Content.Server.GameTicking.Events; +using Content.Shared.Database; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.Codewords; + +/// +/// Gamerule that provides codewords for other gamerules that rely on them. +/// +public sealed class CodewordSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoundStart); + } + + private void OnRoundStart(RoundStartingEvent ev) + { + var manager = Spawn(); + AddComp(manager); + } + + /// + /// Retrieves codewords for the faction specified. + /// + public string[] GetCodewords(ProtoId faction) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out _, out var manager)) + { + if (!manager.Codewords.TryGetValue(faction, out var codewordEntity)) + return GenerateForFaction(faction, ref manager); + + return Comp(codewordEntity).Codewords; + } + + Log.Warning("Codeword system not initialized. Returning empty array."); + // While throwing in this situation would be cool, that causes a test fail (in SpawnAndDeleteEntityCountTest) + // as the traitor codewords paper gets spawned in and calls this method, + // but the "start round" event never gets called in this test case. + return []; + } + + private string[] GenerateForFaction(ProtoId faction, ref CodewordManagerComponent manager) + { + var factionProto = _prototypeManager.Index(faction.Id); + + var codewords = GenerateCodewords(factionProto.Generator); + var codewordsContainer = EntityManager.Spawn(protoName:null, MapCoordinates.Nullspace); + EnsureComp(codewordsContainer) + .Codewords = codewords; + manager.Codewords[faction] = codewordsContainer; + _adminLogger.Add(LogType.EventStarted, LogImpact.Low, $"Codewords generated for faction {faction}: {string.Join(", ", codewords)}"); + + return codewords; + } + + /// + /// Generates codewords as specified by the codeword generator. + /// + public string[] GenerateCodewords(ProtoId generatorId) + { + var generator = _prototypeManager.Index(generatorId); + + var codewordPool = new List(); + foreach (var dataset in generator.Words + .Select(datasetPrototype => _prototypeManager.Index(datasetPrototype))) + { + codewordPool.AddRange(dataset.Values); + } + + var finalCodewordCount = Math.Min(generator.Amount, codewordPool.Count); + var codewords = new string[finalCodewordCount]; + for (var i = 0; i < finalCodewordCount; i++) + { + codewords[i] = Loc.GetString(_random.PickAndTake(codewordPool)); + } + return codewords; + } +} diff --git a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs index af9ccadd91..af2738d105 100644 --- a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs +++ b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs @@ -48,7 +48,7 @@ public sealed class DoorElectronicsSystem : EntitySystem DoorElectronicsUpdateConfigurationMessage args) { var accessReader = EnsureComp(uid); - _accessReader.SetAccesses(uid, accessReader, args.AccessList); + _accessReader.SetAccesses((uid, accessReader), args.AccessList); } private void OnAccessReaderChanged( diff --git a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs index bfaf87e97c..092f4b71c2 100644 --- a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs @@ -1,6 +1,7 @@ +using Content.Server.Codewords; using Content.Shared.Dataset; using Content.Shared.FixedPoint; -using Content.Shared.NPC.Prototypes; +using Content.Shared.NPC.Prototypes; using Content.Shared.Random; using Content.Shared.Roles; using Robust.Shared.Audio; @@ -17,18 +18,15 @@ public sealed partial class TraitorRuleComponent : Component [DataField] public ProtoId TraitorPrototypeId = "Traitor"; + [DataField] + public ProtoId CodewordFactionPrototypeId = "Traitor"; + [DataField] public ProtoId NanoTrasenFaction = "NanoTrasen"; [DataField] public ProtoId SyndicateFaction = "Syndicate"; - [DataField] - public ProtoId CodewordAdjectives = "Adjectives"; - - [DataField] - public ProtoId CodewordVerbs = "Verbs"; - [DataField] public ProtoId ObjectiveIssuers = "TraitorCorporations"; @@ -51,7 +49,6 @@ public sealed partial class TraitorRuleComponent : Component public bool GiveBriefing = true; public int TotalTraitors => TraitorMinds.Count; - public string[] Codewords = new string[3]; public enum SelectionState { @@ -77,12 +74,6 @@ public sealed partial class TraitorRuleComponent : Component [DataField] public SoundSpecifier GreetSoundNotification = new SoundPathSpecifier("/Audio/Ambience/Antag/traitor_start.ogg"); - /// - /// The amount of codewords that are selected. - /// - [DataField] - public int CodewordCount = 4; - /// /// The amount of TC traitors start with. /// diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 790b14579e..bfe98de862 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -20,6 +20,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using System.Linq; using System.Text; +using Content.Server.Codewords; namespace Content.Server.GameTicking.Rules; @@ -27,7 +28,6 @@ public sealed class TraitorRuleSystem : GameRuleSystem { private static readonly Color TraitorCodewordColor = Color.FromHex("#cc3b3b"); - [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; [Dependency] private readonly MindSystem _mindSystem = default!; @@ -37,6 +37,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem [Dependency] private readonly SharedRoleCodewordSystem _roleCodewordSystem = default!; [Dependency] private readonly SharedRoleSystem _roleSystem = default!; [Dependency] private readonly UplinkSystem _uplink = default!; + [Dependency] private readonly CodewordSystem _codewordSystem = default!; public override void Initialize() { @@ -48,41 +49,16 @@ public sealed class TraitorRuleSystem : GameRuleSystem SubscribeLocalEvent(OnObjectivesTextPrepend); } - protected override void Added(EntityUid uid, TraitorRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) - { - base.Added(uid, component, gameRule, args); - SetCodewords(component, args.RuleEntity); - } - private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) { Log.Debug($"AfterAntagEntitySelected {ToPrettyString(ent)}"); MakeTraitor(args.EntityUid, ent); } - private void SetCodewords(TraitorRuleComponent component, EntityUid ruleEntity) - { - component.Codewords = GenerateTraitorCodewords(component); - _adminLogger.Add(LogType.EventStarted, LogImpact.Low, $"Codewords generated for game rule {ToPrettyString(ruleEntity)}: {string.Join(", ", component.Codewords)}"); - } - - public string[] GenerateTraitorCodewords(TraitorRuleComponent component) - { - var adjectives = _prototypeManager.Index(component.CodewordAdjectives).Values; - var verbs = _prototypeManager.Index(component.CodewordVerbs).Values; - var codewordPool = adjectives.Concat(verbs).ToList(); - var finalCodewordCount = Math.Min(component.CodewordCount, codewordPool.Count); - string[] codewords = new string[finalCodewordCount]; - for (var i = 0; i < finalCodewordCount; i++) - { - codewords[i] = Loc.GetString(_random.PickAndTake(codewordPool)); - } - return codewords; - } - public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component) { Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - start"); + var factionCodewords = _codewordSystem.GetCodewords(component.CodewordFactionPrototypeId); //Grab the mind if it wasn't provided if (!_mindSystem.TryGetMind(traitor, out var mindId, out var mind)) @@ -96,7 +72,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem if (component.GiveCodewords) { Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - added codewords flufftext to briefing"); - briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); + briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", factionCodewords))); } var issuer = _random.Pick(_prototypeManager.Index(component.ObjectiveIssuers)); @@ -129,7 +105,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem if (component.GiveCodewords) { Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - set codewords from component"); - codewords = component.Codewords; + codewords = factionCodewords; } if (component.GiveBriefing) @@ -161,7 +137,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem var color = TraitorCodewordColor; // Fall back to a dark red Syndicate color if a prototype is not found RoleCodewordComponent codewordComp = EnsureComp(mindId); - _roleCodewordSystem.SetRoleCodewords(codewordComp, "traitor", component.Codewords.ToList(), color); + _roleCodewordSystem.SetRoleCodewords(codewordComp, "traitor", factionCodewords.ToList(), color); // Change the faction Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - Change faction"); @@ -211,7 +187,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem private void OnObjectivesTextPrepend(EntityUid uid, TraitorRuleComponent comp, ref ObjectivesTextPrependEvent args) { if(comp.GiveCodewords) - args.Text += "\n" + Loc.GetString("traitor-round-end-codewords", ("codewords", string.Join(", ", comp.Codewords))); + args.Text += "\n" + Loc.GetString("traitor-round-end-codewords", ("codewords", string.Join(", ", _codewordSystem.GetCodewords(comp.CodewordFactionPrototypeId)))); } // TODO: figure out how to handle this? add priority to briefing event? diff --git a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs index 4123122111..83471cdbc1 100644 --- a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs +++ b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs @@ -25,7 +25,6 @@ public sealed class GatewayGeneratorSystem : EntitySystem { [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; diff --git a/Content.Server/Mind/Commands/RenameCommand.cs b/Content.Server/Mind/Commands/RenameCommand.cs index b0059ab425..b2d0df7484 100644 --- a/Content.Server/Mind/Commands/RenameCommand.cs +++ b/Content.Server/Mind/Commands/RenameCommand.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.Administration; -using Content.Shared.Access.Components; using Content.Shared.Administration; using Content.Shared.CCVar; using Robust.Server.Player; @@ -60,4 +59,12 @@ public sealed class RenameCommand : LocalizedEntityCommands entityUid = EntityUid.Invalid; return false; } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + return CompletionResult.FromOptions(CompletionHelper.SessionNames()); + + return CompletionResult.Empty; + } } diff --git a/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs b/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs index 9822050f95..2ec97bbb5f 100644 --- a/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs +++ b/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs @@ -7,7 +7,6 @@ namespace Content.Server.NPC.Systems; public sealed class NPCUseActionOnTargetSystem : EntitySystem { - [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; /// diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index f789cb2622..a6c9831cce 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -20,7 +20,6 @@ using Content.Shared.Popups; using Robust.Server.Audio; using Robust.Server.Containers; using Robust.Server.GameObjects; -using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index 521ebed7ec..9cc3fbb158 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -29,7 +29,6 @@ public sealed partial class DungeonSystem : SharedDungeonSystem { [Dependency] private readonly IConfigurationManager _configManager = default!; [Dependency] private readonly IConsoleHost _console = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; diff --git a/Content.Server/Security/GenpopSystem.cs b/Content.Server/Security/GenpopSystem.cs index 0a4233308e..5bff46ad38 100644 --- a/Content.Server/Security/GenpopSystem.cs +++ b/Content.Server/Security/GenpopSystem.cs @@ -1,14 +1,24 @@ using Content.Shared.Security.Components; using Content.Shared.Security.Systems; +using Content.Shared.Wall; namespace Content.Server.Security; public sealed class GenpopSystem : SharedGenpopSystem { + private const float GenpopIDEjectDistanceFromWall = 1f; protected override void CreateId(Entity ent, string name, float sentence, string crime) { + // Default to prisoner locker coordinates for ID spawn var xform = Transform(ent); - var uid = Spawn(ent.Comp.IdCardProto, xform.Coordinates); + var spawnCoordinates = xform.Coordinates; + // Offset prisoner wall locker coordinates in wallmount direction for ID spawn; avoids spawning ID inside wall + if (TryComp(ent, out var wallMountComponent)) + { + var offset = (wallMountComponent.Direction + xform.LocalRotation - Math.PI / 2).ToVec() * GenpopIDEjectDistanceFromWall; + spawnCoordinates = spawnCoordinates.Offset(offset); + } + var uid = Spawn(ent.Comp.IdCardProto, spawnCoordinates); ent.Comp.LinkedId = uid; IdCard.TryChangeFullName(uid, name); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index 721fda82f8..71d51e3187 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -48,7 +48,6 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem [Dependency] private readonly DockingSystem _dockSystem = default!; [Dependency] private readonly DungeonSystem _dungeon = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; - [Dependency] private readonly FixtureSystem _fixtures = default!; [Dependency] private readonly MapLoaderSystem _loader = default!; [Dependency] private readonly MapSystem _mapSystem = default!; [Dependency] private readonly MetaDataSystem _metadata = default!; diff --git a/Content.Server/Speech/Components/MumbleAccentComponent.cs b/Content.Server/Speech/Components/MumbleAccentComponent.cs index 0681ebab2f..2577859b15 100644 --- a/Content.Server/Speech/Components/MumbleAccentComponent.cs +++ b/Content.Server/Speech/Components/MumbleAccentComponent.cs @@ -1,7 +1,14 @@ +using Robust.Shared.Audio; + namespace Content.Server.Speech.Components; [RegisterComponent] public sealed partial class MumbleAccentComponent : Component { - + /// + /// This modifies the audio parameters of emote sounds, screaming, laughing, etc. + /// By default, it reduces the volume and distance of emote sounds. + /// + [DataField] + public AudioParams EmoteAudioParams = AudioParams.Default.WithVolume(-8f).WithMaxDistance(5); } diff --git a/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs b/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs index 757f31ad9e..6b1af5c227 100644 --- a/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs @@ -1,9 +1,13 @@ +using Content.Server.Chat.Systems; using Content.Server.Speech.Components; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Speech.Components; namespace Content.Server.Speech.EntitySystems; public sealed class MumbleAccentSystem : EntitySystem { + [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly ReplacementAccentSystem _replacement = default!; public override void Initialize() @@ -11,6 +15,19 @@ public sealed class MumbleAccentSystem : EntitySystem base.Initialize(); SubscribeLocalEvent(OnAccentGet); + SubscribeLocalEvent(OnEmote, before: [typeof(VocalSystem)]); + } + + private void OnEmote(Entity ent, ref EmoteEvent args) + { + if (args.Handled || !args.Emote.Category.HasFlag(EmoteCategory.Vocal)) + return; + + if (TryComp(ent.Owner, out var vocalComp)) + { + // play a muffled version of the vocal emote + args.Handled = _chat.TryPlayEmoteSound(ent.Owner, vocalComp.EmoteSounds, args.Emote, ent.Comp.EmoteAudioParams); + } } public string Accentuate(string message, MumbleAccentComponent component) @@ -18,8 +35,8 @@ public sealed class MumbleAccentSystem : EntitySystem return _replacement.ApplyReplacements(message, "mumble"); } - private void OnAccentGet(EntityUid uid, MumbleAccentComponent component, AccentGetEvent args) + private void OnAccentGet(Entity ent, ref AccentGetEvent args) { - args.Message = Accentuate(args.Message, component); + args.Message = Accentuate(args.Message, ent.Comp); } } diff --git a/Content.Server/Speech/Muting/MutingSystem.cs b/Content.Server/Speech/Muting/MutingSystem.cs index 238d501e24..edf82bbfb2 100644 --- a/Content.Server/Speech/Muting/MutingSystem.cs +++ b/Content.Server/Speech/Muting/MutingSystem.cs @@ -17,7 +17,7 @@ namespace Content.Server.Speech.Muting { base.Initialize(); SubscribeLocalEvent(OnSpeakAttempt); - SubscribeLocalEvent(OnEmote, before: new[] { typeof(VocalSystem) }); + SubscribeLocalEvent(OnEmote, before: new[] { typeof(VocalSystem), typeof(MumbleAccentSystem) }); SubscribeLocalEvent(OnScreamAction, before: new[] { typeof(VocalSystem) }); } diff --git a/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs b/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs index 7887248f21..d4ce40c066 100644 --- a/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs +++ b/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs @@ -1,3 +1,6 @@ +using Content.Server.Codewords; +using Robust.Shared.Prototypes; + namespace Content.Server.Traitor.Components; /// @@ -6,6 +9,18 @@ namespace Content.Server.Traitor.Components; [RegisterComponent] public sealed partial class TraitorCodePaperComponent : Component { + /// + /// The faction to get codewords for. + /// + [DataField] + public ProtoId CodewordFaction = "Traitor"; + + /// + /// The generator to use for the fake words. + /// + [DataField] + public ProtoId CodewordGenerator = "TraitorCodewordGenerator"; + /// /// The number of codewords that should be generated on this paper. /// Will not extend past the max number of available codewords. diff --git a/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs b/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs index bccbd80bf5..db67a13045 100644 --- a/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs +++ b/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs @@ -7,16 +7,16 @@ using Content.Server.Traitor.Components; using Robust.Shared.Random; using Robust.Shared.Utility; using System.Linq; +using Content.Server.Codewords; using Content.Shared.Paper; namespace Content.Server.Traitor.Systems; public sealed class TraitorCodePaperSystem : EntitySystem { - [Dependency] private readonly GameTicker _gameTicker = default!; - [Dependency] private readonly TraitorRuleSystem _traitorRuleSystem = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly PaperSystem _paper = default!; + [Dependency] private readonly CodewordSystem _codewordSystem = default!; public override void Initialize() { @@ -48,23 +48,12 @@ public sealed class TraitorCodePaperSystem : EntitySystem traitorCode = null; var codesMessage = new FormattedMessage(); - List codeList = new(); - // Find the first nuke that matches the passed location. - if (_gameTicker.IsGameRuleAdded()) - { - var ruleEnts = _gameTicker.GetAddedGameRules(); - foreach (var ruleEnt in ruleEnts) - { - if (TryComp(ruleEnt, out TraitorRuleComponent? traitorComp)) - { - codeList.AddRange(traitorComp.Codewords.ToList()); - } - } - } + var codeList = _codewordSystem.GetCodewords(component.CodewordFaction).ToList(); + if (codeList.Count == 0) { if (component.FakeCodewords) - codeList = _traitorRuleSystem.GenerateTraitorCodewords(new TraitorRuleComponent()).ToList(); + codeList = _codewordSystem.GenerateCodewords(component.CodewordGenerator).ToList(); else codeList = [Loc.GetString("traitor-codes-none")]; } diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 954c5d6ca1..fda8f06820 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -227,14 +227,13 @@ namespace Content.Server.VendingMachines } // Default spawn coordinates - var spawnCoordinates = Transform(uid).Coordinates; + var xform = Transform(uid); + var spawnCoordinates = xform.Coordinates; //Make sure the wallvends spawn outside of the wall. - if (TryComp(uid, out var wallMountComponent)) { - - var offset = wallMountComponent.Direction.ToWorldVec() * WallVendEjectDistanceFromWall; + var offset = (wallMountComponent.Direction + xform.LocalRotation - Math.PI / 2).ToVec() * WallVendEjectDistanceFromWall; spawnCoordinates = spawnCoordinates.Offset(offset); } diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index b156438a1a..530d31c383 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -43,6 +43,7 @@ using Content.Shared.Ghost.Roles.Components; using Content.Shared.Tag; using Robust.Shared.Player; using Robust.Shared.Prototypes; +using Content.Shared.NPC.Prototypes; namespace Content.Server.Zombies; @@ -73,6 +74,8 @@ public sealed partial class ZombieSystem private static readonly ProtoId InvalidForGlobalSpawnSpellTag = "InvalidForGlobalSpawnSpell"; private static readonly ProtoId CannotSuicideTag = "CannotSuicide"; + private static readonly ProtoId ZombieFaction = "Zombie"; + /// /// Handles an entity turning into a zombie when they die or go into crit /// @@ -243,7 +246,7 @@ public sealed partial class ZombieSystem _mobState.ChangeMobState(target, MobState.Alive); _faction.ClearFactions(target, dirty: false); - _faction.AddFaction(target, "Zombie"); + _faction.AddFaction(target, ZombieFaction); //gives it the funny "Zombie ___" name. _nameMod.RefreshNameModifiers(target); diff --git a/Content.Shared/Access/Components/AccessReaderComponent.cs b/Content.Shared/Access/Components/AccessReaderComponent.cs index 54bd0b8d91..060dd3d2ea 100644 --- a/Content.Shared/Access/Components/AccessReaderComponent.cs +++ b/Content.Shared/Access/Components/AccessReaderComponent.cs @@ -1,10 +1,10 @@ +using Content.Shared.Access.Systems; using System.Text.RegularExpressions; using Content.Shared.StationRecords; using Content.Shared.Weapons.Melee; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; using Robust.Shared.Toolshed.Syntax; namespace Content.Shared.Access.Components; @@ -14,6 +14,7 @@ namespace Content.Shared.Access.Components; /// and allows checking if something or somebody is authorized with these access levels. /// [RegisterComponent, NetworkedComponent] +[Access(typeof(AccessReaderSystem))] public sealed partial class AccessReaderComponent : Component { // Sunrise added start @@ -32,7 +33,7 @@ public sealed partial class AccessReaderComponent : Component // Sunrise added end /// - /// Whether or not the accessreader is enabled. + /// Whether or not the access reader is enabled. /// If not, it will always let people through. /// [DataField] @@ -41,7 +42,6 @@ public sealed partial class AccessReaderComponent : Component /// /// The set of tags that will automatically deny an allowed check, if any of them are present. /// - [ViewVariables(VVAccess.ReadWrite)] [DataField] public HashSet> DenyTags = new(); @@ -49,12 +49,11 @@ public sealed partial class AccessReaderComponent : Component /// List of access groups that grant access to this reader. Only a single matching group is required to gain access. /// A group matches if it is a subset of the set being checked against. /// - [DataField("access")] [ViewVariables(VVAccess.ReadWrite)] + [DataField("access")] public List>> AccessLists = new(); /// - /// A list of s that grant access. Only a single matching key is required to gain - /// access. + /// A list of s that grant access. Only a single matching key is required to gain access. /// [DataField] public HashSet AccessKeys = new(); @@ -72,7 +71,7 @@ public sealed partial class AccessReaderComponent : Component public string? ContainerAccessProvider; /// - /// A list of past authentications + /// A list of past authentications. /// [DataField] public Queue AccessLog = new(); @@ -80,7 +79,7 @@ public sealed partial class AccessReaderComponent : Component /// /// A limit on the max size of /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public int AccessLogLimit = 20; /// @@ -113,17 +112,13 @@ public readonly partial record struct AccessRecord( public sealed class AccessReaderComponentState : ComponentState { public bool Enabled; - public HashSet> DenyTags; - public List>> AccessLists; public ProtoId? Group; // Sunrise-alertAccesses, нужно для связывания клиента с сервером public List<(NetEntity, uint)> AccessKeys; - public Queue AccessLog; - public int AccessLogLimit; public AccessReaderComponentState(bool enabled, HashSet> denyTags, @@ -143,9 +138,4 @@ public sealed class AccessReaderComponentState : ComponentState } } -public sealed class AccessReaderConfigurationChangedEvent : EntityEventArgs -{ - public AccessReaderConfigurationChangedEvent() - { - } -} +public sealed class AccessReaderConfigurationChangedEvent : EntityEventArgs; diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 40ae69831e..ae96161d82 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -3,17 +3,17 @@ using System.Linq; using Content.Shared.Access.Components; using Content.Shared.DeviceLinking.Events; using Content.Shared.Emag.Systems; +using Content.Shared.GameTicking; using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; using Content.Shared.Inventory; using Content.Shared.NameIdentifier; using Content.Shared.PDA; using Content.Shared.StationRecords; -using Robust.Shared.Containers; -using Robust.Shared.GameStates; -using Content.Shared.GameTicking; -using Content.Shared.IdentityManagement; using Content.Shared.Tag; +using Robust.Shared.Containers; using Robust.Shared.Collections; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -129,6 +129,11 @@ public sealed class AccessReaderSystem : EntitySystem return true; } + /// + /// Searches an entity for an access reader. This is either the entity itself or an entity in its . + /// + /// The entity being searched for an access reader. + /// The returned access reader entity. public bool GetMainAccessReader(EntityUid uid, [NotNullWhen(true)] out Entity? ent) { ent = null; @@ -158,6 +163,10 @@ public sealed class AccessReaderSystem : EntitySystem /// /// Check whether the given access permissions satisfy an access reader's requirements. /// + /// A collection of access permissions being used on the access reader. + /// A collection of station record keys being used on the access reader. + /// The entity being checked. + /// The access reader being checked. public bool IsAllowed( ICollection> access, ICollection stationKeys, @@ -210,8 +219,8 @@ public sealed class AccessReaderSystem : EntitySystem /// /// Compares the given tags with the readers access list to see if it is allowed. /// - /// A list of access tags - /// An access reader to check against + /// A list of access tags. + /// The access reader to check against. public bool AreAccessTagsAllowed(ICollection> accessTags, AccessReaderComponent reader) { if (reader.DenyTags.Overlaps(accessTags)) @@ -258,6 +267,8 @@ public sealed class AccessReaderSystem : EntitySystem /// /// Compares the given stationrecordkeys with the accessreader to see if it is allowed. /// + /// The collection of station record keys being used against the access reader. + /// The access reader that is being checked. public bool AreStationRecordKeysAllowed(ICollection keys, AccessReaderComponent reader) { foreach (var key in reader.AccessKeys) @@ -270,8 +281,9 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Finds all the items that could potentially give access to a given entity + /// Finds all the items that could potentially give access to an entity. /// + /// The entity that is being searched. public HashSet FindPotentialAccessItems(EntityUid uid) { FindAccessItemsInventory(uid, out var items); @@ -291,7 +303,7 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Finds the access tags on the given entity + /// Finds the access tags on an entity. /// /// The entity that is being searched. /// All of the items to search for access. If none are passed in, will be used. @@ -307,14 +319,14 @@ public sealed class AccessReaderSystem : EntitySystem FindAccessTagsItem(ent, ref tags, ref owned); } - return (ICollection>?) tags ?? Array.Empty>(); + return (ICollection>?)tags ?? Array.Empty>(); } /// - /// Finds the access tags on the given entity + /// Finds any station record keys on an entity. /// /// The entity that is being searched. - /// + /// A collection of the station record keys that were found. /// All of the items to search for access. If none are passed in, will be used. public bool FindStationRecordKeys(EntityUid uid, out ICollection recordKeys, HashSet? items = null) { @@ -332,11 +344,12 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Try to find on this item - /// or inside this item (if it's pda) - /// This version merges into a set or replaces the set. - /// If owned is false, the existing tag-set "isn't ours" and can't be merged with (is read-only). + /// Try to find on this item or inside this item (if it's a PDA). + /// This version merges into a set or replaces the set. /// + /// The entity that is being searched. + /// The access tags being merged or replaced. + /// If true, the tags will be merged. Otherwise they are replaced. private void FindAccessTagsItem(EntityUid uid, ref HashSet>? tags, ref bool owned) { if (!FindAccessTagsItem(uid, out var targetTags)) @@ -363,25 +376,287 @@ public sealed class AccessReaderSystem : EntitySystem } } - public void SetAccesses(EntityUid uid, AccessReaderComponent component, List> accesses) + #region: AccessLists API + + /// + /// Clears the entity's . + /// + /// The access reader entity which is having its access permissions cleared. + public void ClearAccesses(Entity ent) { - component.AccessLists.Clear(); - foreach (var access in accesses) - { - component.AccessLists.Add(new HashSet>(){access}); - } - Dirty(uid, component); - RaiseLocalEvent(uid, new AccessReaderConfigurationChangedEvent()); + ent.Comp.AccessLists.Clear(); + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + /// Replaces the access permissions in an entity's with a supplied list. + /// + /// The access reader entity which is having its list of access permissions replaced. + /// The list of access permissions replacing the original one. + public void SetAccesses(Entity ent, List>> accesses) + { + ent.Comp.AccessLists.Clear(); + + AddAccesses(ent, accesses); + } + + /// + public void SetAccesses(Entity ent, List> accesses) + { + ent.Comp.AccessLists.Clear(); + + AddAccesses(ent, accesses); + } + + /// + /// Adds a collection of access permissions to an access reader entity's + /// + /// The access reader entity to which the new access permissions are being added. + /// The list of access permissions being added. + public void AddAccesses(Entity ent, List>> accesses) + { + foreach (var access in accesses) + { + AddAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void AddAccesses(Entity ent, List> accesses) + { + foreach (var access in accesses) + { + AddAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + /// Adds an access permission to an access reader entity's + /// + /// The access reader entity to which the access permission is being added. + /// The access permission being added. + /// If true, the component will be marked as changed afterward. + public void AddAccess(Entity ent, HashSet> access, bool dirty = true) + { + ent.Comp.AccessLists.Add(access); + + if (!dirty) + return; + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void AddAccess(Entity ent, ProtoId access, bool dirty = true) + { + AddAccess(ent, new HashSet>() { access }, dirty); + } + + /// + /// Removes a collection of access permissions from an access reader entity's + /// + /// The access reader entity from which the access permissions are being removed. + /// The list of access permissions being removed. + public void RemoveAccesses(Entity ent, List>> accesses) + { + foreach (var access in accesses) + { + RemoveAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void RemoveAccesses(Entity ent, List> accesses) + { + foreach (var access in accesses) + { + RemoveAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + /// Removes an access permission from an access reader entity's + /// + /// The access reader entity from which the access permission is being removed. + /// The access permission being removed. + /// If true, the component will be marked as changed afterward. + public void RemoveAccess(Entity ent, HashSet> access, bool dirty = true) + { + for (int i = ent.Comp.AccessLists.Count - 1; i >= 0; i--) + { + if (ent.Comp.AccessLists[i].SetEquals(access)) + { + ent.Comp.AccessLists.RemoveAt(i); + } + } + + if (!dirty) + return; + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void RemoveAccess(Entity ent, ProtoId access, bool dirty = true) + { + RemoveAccess(ent, new HashSet>() { access }, dirty); + } + + #endregion + + #region: AccessKeys API + + /// + /// Clears all access keys from an access reader. + /// + /// The access reader entity. + public void ClearAccessKeys(Entity ent) + { + ent.Comp.AccessKeys.Clear(); + Dirty(ent); + } + + /// + /// Replaces all access keys on an access reader with those from a supplied list. + /// + /// The access reader entity. + /// The new access keys that are replacing the old ones. + public void SetAccessKeys(Entity ent, HashSet keys) + { + ent.Comp.AccessKeys.Clear(); + + foreach (var key in keys) + { + ent.Comp.AccessKeys.Add(key); + } + + Dirty(ent); + } + + /// + /// Adds an access key to an access reader. + /// + /// The access reader entity. + /// The access key being added. + public void AddAccessKey(Entity ent, StationRecordKey key) + { + ent.Comp.AccessKeys.Add(key); + Dirty(ent); + } + + /// + /// Removes an access key from an access reader. + /// + /// The access reader entity. + /// The access key being removed. + public void RemoveAccessKey(Entity ent, StationRecordKey key) + { + ent.Comp.AccessKeys.Remove(key); + Dirty(ent); + } + + #endregion + + #region: DenyTags API + + /// + /// Clears all deny tags from an access reader. + /// + /// The access reader entity. + public void ClearDenyTags(Entity ent) + { + ent.Comp.DenyTags.Clear(); + Dirty(ent); + } + + /// + /// Replaces all deny tags on an access reader with those from a supplied list. + /// + /// The access reader entity. + /// The new tags that are replacing the old. + public void SetDenyTags(Entity ent, HashSet> tags) + { + ent.Comp.DenyTags.Clear(); + + foreach (var tag in tags) + { + ent.Comp.DenyTags.Add(tag); + } + + Dirty(ent); + } + + /// + /// Adds a tag to an access reader that will be used to deny access. + /// + /// The access reader entity. + /// The tag being added. + public void AddDenyTag(Entity ent, ProtoId tag) + { + ent.Comp.DenyTags.Add(tag); + Dirty(ent); + } + + /// + /// Removes a tag from an access reader that denied a user access. + /// + /// The access reader entity. + /// The tag being removed. + public void RemoveDenyTag(Entity ent, ProtoId tag) + { + ent.Comp.DenyTags.Remove(tag); + Dirty(ent); + } + + #endregion + + /// + /// Enables/disables the access reader on an entity. + /// + /// The access reader entity. + /// Enable/disable the access reader. + public void SetActive(Entity ent, bool enabled) + { + ent.Comp.Enabled = enabled; + Dirty(ent); + } + + /// + /// Enables/disables the logging of access attempts on an access reader entity. + /// + /// The access reader entity. + /// Enable/disable logging. + public void SetLoggingActive(Entity ent, bool enabled) + { + ent.Comp.LoggingDisabled = !enabled; + Dirty(ent); + } + + /// + /// Searches an entity's hand and ID slot for any contained items. + /// + /// The entity being searched. + /// The collection of found items. + /// True if one or more items were found. public bool FindAccessItemsInventory(EntityUid uid, out HashSet items) { - items = new(); - - foreach (var item in _handsSystem.EnumerateHeld(uid)) - { - items.Add(item); - } + items = new(_handsSystem.EnumerateHeld(uid)); // maybe its inside an inventory slot? if (_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid)) @@ -393,9 +668,11 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Try to find on this item - /// or inside this item (if it's pda) + /// Try to find on this entity or inside it (if it's a PDA). /// + /// The entity being searched. + /// The access tags that were found. + /// True if one or more access tags were found. private bool FindAccessTagsItem(EntityUid uid, out HashSet> tags) { tags = new(); @@ -406,9 +683,11 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Try to find on this item - /// or inside this item (if it's pda) + /// Try to find on this entity or inside it (if it's a PDA). /// + /// The entity being searched. + /// The station record key that was found. + /// True if a station record key was found. private bool FindStationRecordKeyItem(EntityUid uid, [NotNullWhen(true)] out StationRecordKey? key) { if (TryComp(uid, out StationRecordKeyStorageComponent? storage) && storage.Key != null) @@ -462,15 +741,20 @@ public sealed class AccessReaderSystem : EntitySystem /// /// The reader to log the access on /// The name to log as - public void LogAccess(Entity ent, string name) + public void LogAccess(Entity ent, string name, TimeSpan? accessTime = null, bool force = false) { - if (IsPaused(ent) || ent.Comp.LoggingDisabled) - return; + if (!force) + { + if (IsPaused(ent) || ent.Comp.LoggingDisabled) + return; - if (ent.Comp.AccessLog.Count >= ent.Comp.AccessLogLimit) - ent.Comp.AccessLog.Dequeue(); + if (ent.Comp.AccessLog.Count >= ent.Comp.AccessLogLimit) + ent.Comp.AccessLog.Dequeue(); + } - var stationTime = _gameTiming.CurTime.Subtract(_gameTicker.RoundStartTimeSpan); + var stationTime = accessTime ?? _gameTiming.CurTime.Subtract(_gameTicker.RoundStartTimeSpan); ent.Comp.AccessLog.Enqueue(new AccessRecord(stationTime, name)); + + Dirty(ent); } } diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index 071eb1c303..198f9d127a 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -34,7 +34,6 @@ public abstract partial class SharedBuckleSystem public static ProtoId BuckledAlertCategory = "Buckled"; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; - [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; private void InitializeBuckle() { @@ -557,7 +556,7 @@ public abstract partial class SharedBuckleSystem if (!_interaction.InRangeUnobstructed(user.Value, strap.Owner, buckle.Comp.Range, popup: popup)) return false; - if (user.Value != buckle.Owner && !_actionBlocker.CanComplexInteract(user.Value)) + if (user.Value != buckle.Owner && !ActionBlocker.CanComplexInteract(user.Value)) return false; } diff --git a/Content.Shared/Climbing/Systems/ClimbSystem.cs b/Content.Shared/Climbing/Systems/ClimbSystem.cs index 96427675cb..d536c6d31c 100644 --- a/Content.Shared/Climbing/Systems/ClimbSystem.cs +++ b/Content.Shared/Climbing/Systems/ClimbSystem.cs @@ -170,7 +170,7 @@ public sealed partial class ClimbSystem : VirtualController private void AddClimbableVerb(EntityUid uid, ClimbableComponent component, GetVerbsEvent args) { - if (!args.CanAccess || !args.CanInteract || !_actionBlockerSystem.CanMove(args.User)) + if (!args.CanAccess || !args.CanInteract || !_actionBlockerSystem.CanMove(args.User) || !component.Vaultable) return; if (!TryComp(args.User, out ClimbingComponent? climbingComponent) || climbingComponent.IsClimbing || !climbingComponent.CanClimb) diff --git a/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs b/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs index 96081e5dc6..1ec48dc213 100644 --- a/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs +++ b/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs @@ -17,33 +17,46 @@ namespace Content.Shared.CombatMode.Pacification; [Access(typeof(PacificationSystem))] public sealed partial class PacifiedComponent : Component { + /// + /// If true, this will prevent you from disarming opponents in combat. + /// [DataField] public bool DisallowDisarm = false; /// - /// If true, this will disable combat entirely instead of only disallowing attacking living creatures and harmful things. + /// If true, this will disable combat entirely instead of only disallowing attacking living creatures and harmful things. /// [DataField] public bool DisallowAllCombat = false; /// - /// When attempting attack against the same entity multiple times, - /// don't spam popups every frame and instead have a cooldown. + /// When attempting attack against the same entity multiple times, + /// don't spam popups every frame and instead have a cooldown. /// [DataField] public TimeSpan PopupCooldown = TimeSpan.FromSeconds(3.0); + /// + /// Time at which the next popup can be shown. + /// [DataField] [AutoPausedField] public TimeSpan? NextPopupTime = null; /// - /// The last entity attacked, used for popup purposes (avoid spam) + /// The last entity attacked, used for popup purposes (avoid spam) /// [DataField] public EntityUid? LastAttackedEntity = null; + /// + /// The alert to show to owners of this component. + /// [DataField] public ProtoId PacifiedAlert = "Pacified"; + + // Prevent cheat clients from using this to identify thieves and players that cannot fight back. + // This should not matter for prediction reasons since it only blocks user input. + public override bool SendOnlyToOwner => true; } diff --git a/Content.Shared/Light/Components/SunShadowCycleComponent.cs b/Content.Shared/Light/Components/SunShadowCycleComponent.cs index 0948091ecf..f8d39da850 100644 --- a/Content.Shared/Light/Components/SunShadowCycleComponent.cs +++ b/Content.Shared/Light/Components/SunShadowCycleComponent.cs @@ -1,6 +1,7 @@ using System.Linq; using System.Numerics; using Robust.Shared.GameStates; +using Robust.Shared.Serialization; namespace Content.Shared.Light.Components; @@ -25,11 +26,32 @@ public sealed partial class SunShadowCycleComponent : Component /// Time to have each direction applied. Will lerp from the current value to the next one. /// [DataField, AutoNetworkedField] - public List<(float Ratio, Vector2 Direction, float Alpha)> Directions = new() + public List Directions = new() { - (0f, new Vector2(0f, 3f), 0f), - (0.25f, new Vector2(-3f, -0.1f), 0.5f), - (0.5f, new Vector2(0f, -3f), 0.8f), - (0.75f, new Vector2(3f, -0.1f), 0.5f), + new SunShadowCycleDirection(0f, new Vector2(0f, 3f), 0f), + new SunShadowCycleDirection(0.25f, new Vector2(-3f, -0.1f), 0.5f), + new SunShadowCycleDirection(0.5f, new Vector2(0f, -3f), 0.8f), + new SunShadowCycleDirection(0.75f, new Vector2(3f, -0.1f), 0.5f), }; -} +}; + +[DataDefinition] +[Serializable, NetSerializable] +public partial record struct SunShadowCycleDirection +{ + [DataField] + public float Ratio; + + [DataField] + public Vector2 Direction; + + [DataField] + public float Alpha; + + public SunShadowCycleDirection(float ratio, Vector2 direction, float alpha) + { + Ratio = ratio; + Direction = direction; + Alpha = alpha; + } +}; diff --git a/Content.Shared/NPC/Systems/NpcFactionSystem.cs b/Content.Shared/NPC/Systems/NpcFactionSystem.cs index cf28ede2ca..86e06eb5ee 100644 --- a/Content.Shared/NPC/Systems/NpcFactionSystem.cs +++ b/Content.Shared/NPC/Systems/NpcFactionSystem.cs @@ -75,7 +75,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Returns whether an entity is a member of a faction. /// - public bool IsMember(Entity ent, string faction) + public bool IsMember(Entity ent, [ForbidLiteral] string faction) { if (!Resolve(ent, ref ent.Comp, false)) return false; @@ -104,7 +104,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// Returns whether an entity is a member of any listed faction. /// If the list is empty this returns false. /// - public bool IsMemberOfAny(Entity ent, IEnumerable> factions) + public bool IsMemberOfAny(Entity ent, [ForbidLiteral] IEnumerable> factions) { if (!Resolve(ent, ref ent.Comp, false)) return false; @@ -121,7 +121,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Adds this entity to the particular faction. /// - public void AddFaction(Entity ent, string faction, bool dirty = true) + public void AddFaction(Entity ent, [ForbidLiteral] string faction, bool dirty = true) { if (!_proto.HasIndex(faction)) { @@ -140,7 +140,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Adds this entity to the particular faction. /// - public void AddFactions(Entity ent, HashSet> factions, bool dirty = true) + public void AddFactions(Entity ent, [ForbidLiteral] HashSet> factions, bool dirty = true) { ent.Comp ??= EnsureComp(ent); @@ -162,7 +162,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Removes this entity from the particular faction. /// - public void RemoveFaction(Entity ent, string faction, bool dirty = true) + public void RemoveFaction(Entity ent, [ForbidLiteral] string faction, bool dirty = true) { if (!_proto.HasIndex(faction)) { @@ -221,7 +221,7 @@ public sealed partial class NpcFactionSystem : EntitySystem return GetNearbyFactions(ent, range, ent.Comp.FriendlyFactions); } - private IEnumerable GetNearbyFactions(EntityUid entity, float range, HashSet> factions) + private IEnumerable GetNearbyFactions(EntityUid entity, float range, [ForbidLiteral] HashSet> factions) { var xform = Transform(entity); foreach (var ent in _lookup.GetEntitiesInRange(_xform.GetMapCoordinates((entity, xform)), range)) @@ -247,12 +247,12 @@ public sealed partial class NpcFactionSystem : EntitySystem return ent.Comp.Factions.Overlaps(other.Comp.Factions) || ent.Comp.FriendlyFactions.Overlaps(other.Comp.Factions); } - public bool IsFactionFriendly(string target, string with) + public bool IsFactionFriendly([ForbidLiteral] string target, [ForbidLiteral] string with) { return _factions[target].Friendly.Contains(with) && _factions[with].Friendly.Contains(target); } - public bool IsFactionFriendly(string target, Entity with) + public bool IsFactionFriendly([ForbidLiteral] string target, Entity with) { if (!Resolve(with, ref with.Comp, false)) return false; @@ -261,12 +261,12 @@ public sealed partial class NpcFactionSystem : EntitySystem with.Comp.FriendlyFactions.Contains(target); } - public bool IsFactionHostile(string target, string with) + public bool IsFactionHostile([ForbidLiteral] string target, [ForbidLiteral] string with) { return _factions[target].Hostile.Contains(with) && _factions[with].Hostile.Contains(target); } - public bool IsFactionHostile(string target, Entity with) + public bool IsFactionHostile([ForbidLiteral] string target, Entity with) { if (!Resolve(with, ref with.Comp, false)) return false; @@ -275,7 +275,7 @@ public sealed partial class NpcFactionSystem : EntitySystem with.Comp.HostileFactions.Contains(target); } - public bool IsFactionNeutral(string target, string with) + public bool IsFactionNeutral([ForbidLiteral] string target, [ForbidLiteral] string with) { return !IsFactionFriendly(target, with) && !IsFactionHostile(target, with); } @@ -283,7 +283,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Makes the source faction friendly to the target faction, 1-way. /// - public void MakeFriendly(string source, string target) + public void MakeFriendly([ForbidLiteral] string source, [ForbidLiteral] string target) { if (!_factions.TryGetValue(source, out var sourceFaction)) { @@ -305,7 +305,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Makes the source faction hostile to the target faction, 1-way. /// - public void MakeHostile(string source, string target) + public void MakeHostile([ForbidLiteral] string source, [ForbidLiteral] string target) { if (!_factions.TryGetValue(source, out var sourceFaction)) { diff --git a/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs b/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs index f047fe41e4..3c5f3896b0 100644 --- a/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs +++ b/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs @@ -3,17 +3,38 @@ using Robust.Shared.GameStates; namespace Content.Shared.StationAi; +/// +/// Attached to entities that grant vision to the station AI, such as cameras. +/// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(SharedStationAiSystem))] public sealed partial class StationAiVisionComponent : Component { + /// + /// Determines whether the entity is actively providing vision to the station AI. + /// [DataField, AutoNetworkedField] public bool Enabled = true; + /// + /// Determines whether the entity's vision is blocked by walls. + /// [DataField, AutoNetworkedField] public bool Occluded = true; /// - /// Range in tiles + /// Determines whether the entity needs to be receiving power to provide vision to the station AI. + /// + [DataField, AutoNetworkedField] + public bool NeedsPower = false; + + /// + /// Determines whether the entity needs to be anchored to provide vision to the station AI. + /// + [DataField, AutoNetworkedField] + public bool NeedsAnchoring = false; + + /// + /// Vision range in tiles. /// [DataField, AutoNetworkedField] public float Range = 7.5f; diff --git a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs index d3416949d5..7ae27da497 100644 --- a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs +++ b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs @@ -1,8 +1,8 @@ +using Content.Shared.Power.EntitySystems; using Content.Shared.StationAi; using Robust.Shared.Map.Components; using Robust.Shared.Physics; using Robust.Shared.Threading; -using Robust.Shared.Utility; namespace Content.Shared.Silicons.StationAi; @@ -18,6 +18,7 @@ public sealed class StationAiVisionSystem : EntitySystem [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedMapSystem _maps = default!; [Dependency] private readonly SharedTransformSystem _xforms = default!; + [Dependency] private readonly SharedPowerReceiverSystem _power = default!; private SeedJob _seedJob; private ViewJob _job; @@ -83,6 +84,12 @@ public sealed class StationAiVisionSystem : EntitySystem if (!seed.Comp.Enabled) continue; + if (seed.Comp.NeedsPower && !_power.IsPowered(seed.Owner)) + continue; + + if (seed.Comp.NeedsAnchoring && !Transform(seed.Owner).Anchored) + continue; + _job.Data.Add(seed); } @@ -164,6 +171,12 @@ public sealed class StationAiVisionSystem : EntitySystem if (!seed.Comp.Enabled) continue; + if (seed.Comp.NeedsPower && !_power.IsPowered(seed.Owner)) + continue; + + if (seed.Comp.NeedsAnchoring && !Transform(seed.Owner).Anchored) + continue; + _job.Data.Add(seed); } diff --git a/Content.Shared/Weather/SharedWeatherSystem.cs b/Content.Shared/Weather/SharedWeatherSystem.cs index 382af64565..b537884950 100644 --- a/Content.Shared/Weather/SharedWeatherSystem.cs +++ b/Content.Shared/Weather/SharedWeatherSystem.cs @@ -13,7 +13,6 @@ namespace Content.Shared.Weather; public abstract class SharedWeatherSystem : EntitySystem { [Dependency] protected readonly IGameTiming Timing = default!; - [Dependency] protected readonly IMapManager MapManager = default!; [Dependency] protected readonly IPrototypeManager ProtoMan = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; [Dependency] private readonly MetaDataSystem _metadata = default!; diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index c0e36e369f..4609c0e893 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1163,5 +1163,13 @@ Entries: id: 140 time: '2025-05-27T23:44:15.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37849 +- author: Samuka + changes: + - message: the command solution:adjreagent now actually works and no longer needs + a "FixedPoint2" for the amount + type: Fix + id: 141 + time: '2025-06-08T03:47:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38134 Name: Admin Order: 2 diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8d379607ae..09a916bf14 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,197 +1,4 @@ Entries: -- author: Vortebo - changes: - - message: Relic station revamped - type: Tweak - id: 8105 - time: '2025-03-24T16:36:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35507 -- author: slarticodefast - changes: - - message: Adjusted thermal regulation again so you no longer overheat in hardsuits. - type: Fix - id: 8106 - time: '2025-03-24T23:55:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36062 -- author: Velcroboy, ErhardSteinhauer, whatston3, MilonPL, Beck, ArtisticRoomba, ScarKy0 - changes: - - message: Smuggler stashes! Will get spawned as a round start event and can also - be found in a hacked ClothesMate. Will have loot from a large random pool. - type: Add - - message: Smuggler stashes can now be bought from the syndicate uplink for 2TC. - type: Add - id: 8107 - time: '2025-03-26T15:20:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/19460 -- author: slarticodefast - changes: - - message: Ghosts of paradox clones now have a name modifier so they can be distinguished - by other ghosts. - type: Tweak - id: 8108 - time: '2025-03-26T15:30:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35940 -- author: slarticodefast - changes: - - message: Paradox clones of nuclear operatives and head revolutionaries now have - the corresponding faction icon and need to be killed for a crew major victory. - type: Fix - id: 8109 - time: '2025-03-26T15:34:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35910 -- author: slarticodefast - changes: - - message: Further improved item copying for paradox clones. - type: Tweak - id: 8110 - time: '2025-03-26T16:13:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35993 -- author: Centronias - changes: - - message: Raw meatballs, like steaks, can now be cooked in the microwave or on - a grill. - type: Add - id: 8111 - time: '2025-03-27T06:26:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36003 -- author: SlamBamActionman - changes: - - message: Liltenhead! Thank you for over 2 years of update videos, and congrats - on the 100th video! - type: Add - id: 8112 - time: '2025-03-27T17:19:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36104 -- author: metalgearsloth - changes: - - message: Rewrote how mob movement works to make movement more flexible in code. - While this should largely function the same (apart from conveyors now being - able to launch items) please report any bugs found. - type: Tweak - id: 8113 - time: '2025-03-27T22:29:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35931 -- author: ViceEmargo - changes: - - message: Botanist's leather gloves must now be equipped in order to pick up Death - Nettles. - type: Add - - message: Death Nettles will now pierce hardsuits, injecting 5 units of reagent. - type: Tweak - - message: Death Nettles will now "wilt" after 5 hits. - type: Add - - message: Fly Amanita has been changed to contain less Amatoxin. - type: Tweak - id: 8114 - time: '2025-03-29T09:35:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/25253 -- author: chromiumboy - changes: - - message: Sentry turrets can potentially be found guarding sensitive areas of the - station. When deployed, they will shoot unauthorized personnel on sight with - either stunning or lethal laser bolts. Note that only cyborgs and robots can - safely pass sentry turrets that protect the station AI core - type: Add - id: 8115 - time: '2025-03-29T17:55:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35123 -- author: Killerqu00 - changes: - - message: Uncuffing someone with combat mode on will shove them down. - type: Add - id: 8116 - time: '2025-03-29T20:09:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35193 -- author: metalgearsloth - changes: - - message: Jetpacks emit particles more frequently. - type: Tweak - id: 8117 - time: '2025-03-30T04:06:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36093 -- author: beck-thompson - changes: - - message: Stethoscopes now automatically start doafters and also can tell if a - patient is losing oxygen damage or gaining it. - type: Add - - message: Moths can no longer eat stethoscopes. - type: Fix - - message: Stethoscopes action button now works properly. - type: Fix - id: 8118 - time: '2025-03-31T02:27:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36210 -- author: Tayrtahn - changes: - - message: Items thrown when someone slips now tend to scatter in the direction - they are moving, and respect the item's mass. - type: Tweak - id: 8119 - time: '2025-03-31T22:00:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36232 -- author: ScarKy0 - changes: - - message: Thieves now start with the thieving satchel instead of their toolbox. - The satchel will get all the selected kits spawned inside of it. - type: Add - - message: Thief Chameleon kit now comes with a backpack and a bonus pair of chameleon - gloves. Be careful, they aren't thieving gloves and can be tough to tell apart! - type: Tweak - - message: Updated smuggler stachel's description to reflect what it's used for. - type: Tweak - - message: Thieving satchel and toolbox now correctly play a sound when their kits - are selected. - type: Fix - id: 8120 - time: '2025-03-31T22:32:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36201 -- author: Tayrtahn - changes: - - message: Electric grills no longer appear powered when cycled while disconnected - from power. - type: Fix - - message: Interactions with electric grills are now predicted. - type: Tweak - id: 8121 - time: '2025-04-01T16:43:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36241 -- author: MisterImp - changes: - - message: A new recipe has been added for pizza made with world peas, world peazza. - type: Add - id: 8122 - time: '2025-04-01T23:26:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35191 -- author: Fildrance - changes: - - message: fixed missing deconstruct on RCD - type: Fix - id: 8123 - time: '2025-04-02T16:11:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36255 -- author: qwerltaz - changes: - - message: Dragon rifts now shine a different color depending on charge progress. - type: Add - id: 8124 - time: '2025-04-02T18:37:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36216 -- author: aada - changes: - - message: Diphenhydramine now causes light drowsiness. - type: Tweak - id: 8125 - time: '2025-04-03T06:29:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36212 -- author: sowelipililimute - changes: - - message: You can now more easily interact with objects behind faded ones, and - you can look behind fadeable objects in your FOV by hovering them with your - mouse pointer - type: Add - id: 8126 - time: '2025-04-03T06:58:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35863 - author: whatston3 changes: - message: Fancy tables and curtains now respect carpet stacks. @@ -3928,3 +3735,172 @@ id: 8616 time: '2025-06-05T12:52:39.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38080 +- author: Orsoniks + changes: + - message: Added more in-hand sprites for food items + type: Add + id: 8617 + time: '2025-06-05T21:06:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38024 +- author: chromiumboy + changes: + - message: Holopads now provide less visual coverage to station AIs (1 tile radius, + down from 7.5). Holopads must also be anchored to the floor to provide vision. + type: Tweak + id: 8618 + time: '2025-06-05T23:15:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38059 +- author: Simyon + changes: + - message: Sleeper agents no longer have different codewords than round-start traitors. + type: Fix + id: 8619 + time: '2025-06-05T23:19:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37928 +- author: Gentleman-Bird + changes: + - message: Fixed the "create soap" recipe so it can actually be made + type: Fix + id: 8620 + time: '2025-06-05T23:20:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37923 +- author: Hitlinemoss + changes: + - message: The security mime mask has been added to the SecDrobe's manager inventory. + type: Add + id: 8621 + time: '2025-06-05T23:23:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37890 +- author: ArtisticRoomba + changes: + - message: Most syndicate contraband have been given sell prices (depending on the + "power" of the item) to discourage powergaming and encourage Security's interaction + with Departmental Economy. + type: Add + id: 8622 + time: '2025-06-05T23:26:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37835 +- author: RedBookcase + changes: + - message: The running and walking speed debuffs on equipped gear have been standardized. + type: Tweak + id: 8623 + time: '2025-06-05T23:27:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37828 +- author: august-sun + changes: + - message: Added individual Bulldog drum magazines for sale in the syndicate uplink. + Ammo types available are pellets and slugs. + type: Add + id: 8624 + time: '2025-06-05T23:35:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37917 +- author: Xeri7 + changes: + - message: Added ability to pick up potted plants in two hands, as well as store + them in crates! + type: Add + - message: Added purchasable potted plant crate! + type: Add + id: 8625 + time: '2025-06-05T23:36:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37591 +- author: K-Dynamic + changes: + - message: Rifle crates with two Lecters and four magazines can be ordered from + Cargo for 8000 spesos. + type: Add + - message: Lethal Weapons gift event now includes a Rifle crate. + type: Tweak + - message: SMG crates are properly described and no longer reference 'semiautomatic + rifles.' + type: Tweak + id: 8626 + time: '2025-06-05T23:40:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/35535 +- author: themias + changes: + - message: Wearing a muzzle now reduces the sound of vocal emotes + type: Tweak + id: 8627 + time: '2025-06-05T23:45:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34444 +- author: RedBookcase + changes: + - message: Added Scrap Armor and Scrap Helmets. + type: Add + id: 8628 + time: '2025-06-06T00:13:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37601 +- author: Samuka + changes: + - message: Fire bombs are now minor contra + type: Tweak + - message: Pipe bombs are now minor contra + type: Tweak + id: 8629 + time: '2025-06-06T02:28:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38088 +- author: Minemoder + changes: + - message: Shark plushies now bite. + type: Tweak + id: 8630 + time: '2025-06-06T21:07:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38113 +- author: themias + changes: + - message: Increased the chance of throwing trash into a disposal unit + type: Tweak + id: 8631 + time: '2025-06-06T22:13:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38116 +- author: spanky-spanky + changes: + - message: Landmines now light up in the dark! + type: Tweak + id: 8632 + time: '2025-06-06T23:01:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38092 +- author: slarticodefast + changes: + - message: Fixed wallmount vending machines dispensing in the wrong direction. + type: Fix + id: 8633 + time: '2025-06-06T23:08:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38112 +- author: hoshizora-sayo + changes: + - message: Added proper name to the chameleon controller implanter + type: Add + id: 8634 + time: '2025-06-07T02:29:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38117 +- author: K-Dynamic + changes: + - message: Disablers now hold 16 shots instead of 20 + type: Tweak + id: 8635 + time: '2025-06-07T13:05:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36019 +- author: perryprog + changes: + - message: Diamonds can now be ejected from lathes and material silos. + type: Fix + id: 8636 + time: '2025-06-07T17:36:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38132 +- author: slarticodefast + changes: + - message: Fixed the stripping UI layout when having more than 2 hands. + type: Fix + id: 8637 + time: '2025-06-07T22:23:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37577 +- author: Nox38 + changes: + - message: Space Carp ghost roles no longer have a raffle! + type: Tweak + id: 8638 + time: '2025-06-08T02:49:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38101 diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index c97d76e26b..29420548f6 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 612git, 778b, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, Andre19926, AndrewEyeke, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, archee, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, Awlod, azzyisnothere, AzzyIsNotHere, B-Kirill, baa14453, BackeTako, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, bigfootbravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, crazybrain23, Crazydave91920, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, DieselMohawk, digitalic, Dimastra, DinnerCalzone, DinoWattz, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, Entvari, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Helm4142, Henry, HerCoyote23, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, Hrosts, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, kxvvv, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, liltenhead, linkbro1, LinkUyx, Litraxx, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, Magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, manelnavola, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, NotSoDana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnyxTheBrave, Orange-Winds, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, ProfanedBane, PROG-MohamedDwidar, Prole0, Pronana, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, qrtDaniil, qrwas, Quantum-cross, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, snebl, snicket, sniperchance, Snowni, snowsignal, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, trixxedbit, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, vexerot, viceemargo, VigersRay, violet754, Visne, vlad, vlados1408, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex +0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 612git, 778b, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, Andre19926, AndrewEyeke, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, archee, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, Awlod, AzzyIsNotHere, azzyisnothere, B-Kirill, baa14453, BackeTako, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, bigfootbravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, captainsqrbeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, crazybrain23, Crazydave91920, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, DieselMohawk, digitalic, Dimastra, DinnerCalzone, DinoWattz, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, Entvari, eoineoineoin, ephememory, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, Funce, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, helm4142, Henry, HerCoyote23, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hoshizora, Hreno, Hrosts, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, jerryimmouse, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jkwookee, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, JpegOfAFrog, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, kxvvv, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, liltenhead, linkbro1, linkuyx, Litraxx, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, Magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, manelnavola, Mangohydra, marboww, Markek1, matt, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, Mixelz, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, NotSoDana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnyxTheBrave, Orange-Winds, OrangeMoronage9622, Orsoniks, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, Princess-Cheeseballs, ProfanedBane, PROG-MohamedDwidar, Prole0, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, qrtDaniil, qrwas, Quantum-cross, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, snebl, snicket, sniperchance, Snowni, snowsignal, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheFlyingSentry, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, trixxedbit, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, vexerot, viceemargo, VigersRay, violet754, Visne, vitusveit, vlad, vlados1408, VMSolidus, vmzd, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xeri7, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex diff --git a/Resources/Locale/en-US/_strings/commands/melee-spread-command.ftl b/Resources/Locale/en-US/_strings/commands/melee-spread-command.ftl new file mode 100644 index 0000000000..7e62fb53b9 --- /dev/null +++ b/Resources/Locale/en-US/_strings/commands/melee-spread-command.ftl @@ -0,0 +1 @@ +cmd-showmeleespread-desc = Shows the current weapon's range and arc for debugging. diff --git a/Resources/Locale/en-US/_strings/commands/persistence-save-command.ftl b/Resources/Locale/en-US/_strings/commands/persistence-save-command.ftl new file mode 100644 index 0000000000..d12ff8cbee --- /dev/null +++ b/Resources/Locale/en-US/_strings/commands/persistence-save-command.ftl @@ -0,0 +1,3 @@ +cmd-persistencesave-desc = Saves server data to a persistence file to be loaded later. +cmd-persistencesave-usage = persistencesave [mapId] [filePath - default: game.map (CCVar) ] +cmd-persistencesave-no-path = filePath was not specified and CCVar {$cvar} is not set. Manually set the filePath param in order to save the map. diff --git a/Resources/Locale/en-US/_strings/commands/show-access-readers-command.ftl b/Resources/Locale/en-US/_strings/commands/show-access-readers-command.ftl new file mode 100644 index 0000000000..f74553a066 --- /dev/null +++ b/Resources/Locale/en-US/_strings/commands/show-access-readers-command.ftl @@ -0,0 +1,9 @@ +cmd-showaccessreaders-desc = Toggles showing access reader permissions on the map +cmd-showaccessreaders-help = + Overlay Info: + -Disabled | The access reader is disabled + +Unrestricted | The access reader has no restrictions + +Set [Index]: [Tag Name]| A tag in an access set (accessor needs all tags in the set to be allowed by the set) + +Key [StationUid]: [StationRecordKeyId] | A StationRecordKey that is allowed + -Tag [Tag Name] | A tag that is not allowed (takes priority over other allows) +cmd-showaccessreaders-status = Set access reader debug overlay to {$status}. diff --git a/Resources/Locale/en-US/_strings/commands/show-emergency-shuttle-command.ftl b/Resources/Locale/en-US/_strings/commands/show-emergency-shuttle-command.ftl new file mode 100644 index 0000000000..e51494685c --- /dev/null +++ b/Resources/Locale/en-US/_strings/commands/show-emergency-shuttle-command.ftl @@ -0,0 +1,2 @@ +cmd-showemergencyshuttle-desc = Shows the expected position of the emergency shuttle. +cmd-showemergencyshuttle-status = Set emergency shuttle debug to {$status}. diff --git a/Resources/Locale/en-US/_strings/persistence/command.ftl b/Resources/Locale/en-US/_strings/persistence/command.ftl deleted file mode 100644 index b070aee115..0000000000 --- a/Resources/Locale/en-US/_strings/persistence/command.ftl +++ /dev/null @@ -1 +0,0 @@ -cmd-persistencesave-no-path = filePath was not specified and CCVar {$cvar} is not set. Manually set the filePath param in order to save the map. diff --git a/Resources/Locale/en-US/_strings/store/uplink-catalog.ftl b/Resources/Locale/en-US/_strings/store/uplink-catalog.ftl index d52bf3d86e..493ccad9da 100644 --- a/Resources/Locale/en-US/_strings/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/_strings/store/uplink-catalog.ftl @@ -85,16 +85,22 @@ uplink-shrapnel-grenade-desc = Launches a spray of sharp fragments dealing great # Ammo uplink-pistol-magazine-name = Pistol Magazine (.35 auto) -uplink-pistol-magazine-desc = Pistol magazine with 10 catridges. Compatible with the Viper. +uplink-pistol-magazine-desc = Pistol magazine with 10 cartridges. Compatible with the Viper. uplink-pistol-magazine-c20r-name = SMG magazine (.35 auto) -uplink-pistol-magazine-c20r-desc = Rifle magazine with 30 catridges. Compatible with C-20r. +uplink-pistol-magazine-c20r-desc = Rifle magazine with 30 cartridges. Compatible with C-20r. + +uplink-magazine-bulldog-pellet-name = Drum magazine (.50 pellet) +uplink-magazine-bulldog-pellet-desc = Shotgun magazine with 8 shells filled with buckshot. Compatible with the Bulldog. + +uplink-magazine-bulldog-slug-name = Drum magazine (.50 slug) +uplink-magazine-bulldog-slug-desc = Shotgun magazine with 8 shells filled with slugs. Compatible with the Bulldog. uplink-pistol-magazine-caseless-name = Pistol Magazine (.25 caseless) -uplink-pistol-magazine-caseless-desc = Pistol magazine with 10 catridges. Compatible with the Cobra. +uplink-pistol-magazine-caseless-desc = Pistol magazine with 10 cartridges. Compatible with the Cobra. uplink-speedloader-magnum-name = Speedloader (.45 magnum AP) -uplink-speedloader-magnu-desc = Revolver speedloader with 6 armor-piercing catridges, capable of ignoring armor entirely. Compatible with the Python. +uplink-speedloader-magnu-desc = Revolver speedloader with 6 armor-piercing cartridges, capable of ignoring armor entirely. Compatible with the Python. uplink-mosin-ammo-name = Ammunition box (.30 rifle) uplink-mosin-ammo-desc = A box of 60 cartridges for the surplus rifle. diff --git a/Resources/Locale/en-US/recipes/tags.ftl b/Resources/Locale/en-US/recipes/tags.ftl index 400a2fbb99..540885a9a1 100644 --- a/Resources/Locale/en-US/recipes/tags.ftl +++ b/Resources/Locale/en-US/recipes/tags.ftl @@ -69,6 +69,8 @@ construction-graph-tag-match-stick = match stick construction-graph-tag-potato = a potato construction-graph-tag-wheat-bushel = wheat bushel construction-graph-tag-corgi-hide = corgi hide +construction-graph-tag-apron = an apron +construction-graph-tag-utility-belt = a utility belt soil-construction-graph-any-mushroom = any mushroom # toys diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml b/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml index 6e5b50e87e..9fb8388ea2 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml @@ -67,3 +67,13 @@ cost: 5200 category: cargoproduct-category-name-armory group: market + +- type: cargoProduct + id: ArmoryRifle + icon: + sprite: Objects/Weapons/Guns/Rifles/lecter.rsi + state: icon + product: CrateArmoryRifle + cost: 8000 + category: cargoproduct-category-name-armory + group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml index f4d29705d4..db84ce3b2c 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml @@ -117,7 +117,7 @@ cost: 500 category: cargoproduct-category-name-fun group: market - + - type: cargoProduct id: FunSharkPlushies icon: @@ -347,3 +347,13 @@ cost: 1500 category: cargoproduct-category-name-fun group: market + +- type: cargoProduct + id: FunPlants + icon: + sprite: Structures/Furniture/potted_plants.rsi + state: random + product: CratePlants + cost: 1000 + category: cargoproduct-category-name-fun + group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/armory.yml b/Resources/Prototypes/Catalog/Fills/Crates/armory.yml index ab6c834d00..17824d80a7 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/armory.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/armory.yml @@ -2,7 +2,7 @@ # id: CrateArmorySMG # parent: [ CrateWeaponSecure, BaseSecurityContraband ] # name: SMG crate -# description: Contains two high-powered, semiautomatic rifles with four mags. Requires Armory access to open. +# description: Contains two SMGs with four mags. Requires Armory access to open. # components: # - type: StorageFill # contents: @@ -91,3 +91,16 @@ amount: 2 - id: RiotShield amount: 2 + +- type: entity + id: CrateArmoryRifle + parent: [ CrateWeaponSecure, BaseSecurityContraband ] + name: rifle crate + description: Contains two high-powered assault rifles with four mags. Requires Armory access to open. + components: + - type: StorageFill + contents: + - id: WeaponRifleLecter + amount: 2 + - id: MagazineRifle + amount: 4 diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index ec24b1acbc..0b55a9858b 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -66,6 +66,49 @@ - id: PlushieRedfox # Sunrise-end +- type: entityTable + id: AllPottedPlantsTable + table: !type:GroupSelector + children: + - id: PottedPlant0 + - id: PottedPlant1 + - id: PottedPlant2 + - id: PottedPlant3 + - id: PottedPlant4 + - id: PottedPlant5 + - id: PottedPlant6 + - id: PottedPlant7 + - id: PottedPlant8 + - id: PottedPlant10 + - id: PottedPlant11 + - id: PottedPlant12 + - id: PottedPlant13 + - id: PottedPlant14 + - id: PottedPlant15 + - id: PottedPlant16 + - id: PottedPlant17 + - id: PottedPlant18 + - id: PottedPlant19 + - id: PottedPlant20 + - id: PottedPlant21 + - id: PottedPlant22 + - id: PottedPlant23 + - id: PottedPlant24 + - id: PottedPlant26 + +- type: entity + id: CratePlants + parent: CrateGenericSteel + name: plant crate + description: A variety pack of potted plants to spruce up your station! + components: + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: AllPottedPlantsTable + rolls: !type:ConstantNumberSelector + value: 5 + - type: entity id: CrateFunPlushie parent: CrateGenericSteel diff --git a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml index a874511dac..d60ca0f908 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml @@ -135,6 +135,8 @@ - id: Multitool - id: ClothingHandsGlovesCombat - id: ClothingEyesGlassesWelding #Sunrise-edit: rebalance toolbox + - type: StaticPrice + price: 1000 - type: entity id: ToolboxGoldFilled diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml index fc352fcf73..ee13fa1e67 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml @@ -31,6 +31,7 @@ PepperSprayBottleBlue: 2 # Sunrise-Edit contrabandInventory: ClothingMaskClownSecurity: 1 + ClothingMaskMimeSecurity: 1 ToyFigurineSecurity: 1 ToyFigurineWarden: 1 ToyFigurineHeadOfSecurity: 1 diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 0006f4cf05..48d6c8326a 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -592,6 +592,29 @@ - AssaultOpsUplink #Sunrise-end +# For the Bulldog +- type: listing + id: UplinkMagazineShotgunPellet + name: uplink-magazine-bulldog-pellet-name + description: uplink-magazine-bulldog-pellet-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Shotgun/m12.rsi, state: pellets } + productEntity: MagazineShotgun + cost: + Telecrystal: 2 + categories: + - UplinkAmmo + +- type: listing + id: UplinkMagazineShotgunSlug + name: uplink-magazine-bulldog-slug-name + description: uplink-magazine-bulldog-slug-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Shotgun/m12.rsi, state: slug } + productEntity: MagazineShotgunSlug + cost: + Telecrystal: 3 + categories: + - UplinkAmmo + # For the Cobra - type: listing id: UplinkMagazinePistolCaselessRifle diff --git a/Resources/Prototypes/Codewords/codeword_factions.yml b/Resources/Prototypes/Codewords/codeword_factions.yml new file mode 100644 index 0000000000..9dc7e31eac --- /dev/null +++ b/Resources/Prototypes/Codewords/codeword_factions.yml @@ -0,0 +1,3 @@ +- type: codewordFaction + id: Traitor + generator: TraitorCodewordGenerator diff --git a/Resources/Prototypes/Codewords/codeword_generators.yml b/Resources/Prototypes/Codewords/codeword_generators.yml new file mode 100644 index 0000000000..c66fd37083 --- /dev/null +++ b/Resources/Prototypes/Codewords/codeword_generators.yml @@ -0,0 +1,6 @@ +- type: codewordGenerator + id: TraitorCodewordGenerator + words: + - Adjectives + - Verbs + amount: 4 diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index 52aa2c9ccb..19df1383ed 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -284,6 +284,8 @@ grid: - 0,0,7,3 - 8,1,8,3 + - type: StaticPrice + price: 1000 #Special - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index f6adf3697e..29b5c46543 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -97,11 +97,10 @@ - Multitool sprite: Clothing/Belt/belt_overlay.rsi - type: Appearance - # Sunrise-Start - type: Tag tags: - UtilityBelt - # Sunrise-End + - WhitelistChameleon - type: entity parent: [ClothingBeltStorageBase, BaseClothingBeltSounds] # Sunrise @@ -671,6 +670,8 @@ - Gun - BallisticAmmoProvider - CartridgeAmmo + - type: StaticPrice + price: 500 - type: entity parent: [ ClothingBeltStorageBase, BaseSecurityContraband ] @@ -717,6 +718,8 @@ sprite: Clothing/Belt/militarywebbing.rsi - type: ExplosionResistance damageCoefficient: 0.1 + - type: StaticPrice + price: 500 - type: entity parent: ClothingBeltMilitaryWebbing diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index f57938230c..ced83de14a 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -124,6 +124,8 @@ sprite: Clothing/Eyes/Glasses/outlawglasses.rsi - type: VisionCorrection - type: IdentityBlocker + - type: StaticPrice + price: 500 - type: entity parent: ClothingEyesBase diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index db63833623..bf35629a9c 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -421,7 +421,7 @@ enum.MeleeSpeechUiKey.Key: type: MeleeSpeechBoundUserInterface - type: StaticPrice - price: 0 + price: 2500 - type: Tag tags: - Kangaroo @@ -559,6 +559,8 @@ tags: - WhitelistChameleon - Kangaroo + - type: StaticPrice + price: 2000 - type: entity name: stun knuckle dusters diff --git a/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml index 3920a8a7af..945471fc79 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml @@ -37,6 +37,8 @@ sprite: Clothing/Head/Helmets/eva_syndicate.rsi - type: Clothing sprite: Clothing/Head/Helmets/eva_syndicate.rsi + - type: StaticPrice + price: 500 # Suit is 1000 #Cosmonaut Helmet - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml b/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml index 8809ad4c46..e0c6557c97 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml @@ -66,11 +66,6 @@ - type: Tag tags: - WhitelistChameleon - - type: HideLayerClothing - layers: - Hair: HEAD - HeadTop: HEAD - HeadSide: HEAD - type: entity parent: ClothingHeadHatHardhatBase diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index a97941b389..addf952555 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -41,7 +41,7 @@ - type: Tag tags: - ClothMade - - Recyclable + - Recyclable - WhitelistChameleon - type: entity @@ -383,6 +383,8 @@ sprite: Clothing/Head/Hats/outlawhat.rsi - type: Clothing sprite: Clothing/Head/Hats/outlawhat.rsi + - type: StaticPrice + price: 500 - type: entity parent: ClothingHeadBase @@ -477,8 +479,8 @@ - state: icon-nobeard map: [ "foldedLayer" ] visible: true - - + + - type: entity parent: ClothingHeadBase diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index 711a9b0513..be8727008a 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -218,6 +218,8 @@ sprite: Clothing/Head/Hats/catears.rsi - type: AddAccentClothing accent: OwOAccent + - type: StaticPrice + price: 15000 - type: entity parent: [ClothingHeadHatCatEars, BaseToggleClothing] diff --git a/Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml b/Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml index 9ecbf488c0..b77897d1d8 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml @@ -52,7 +52,7 @@ # The helmet itself - type: entity parent: [ClothingHeadHelmetBase, BaseMajorContraband] - id: ClothingHeadHelmetScrap + id: ClothingHeadHelmetScrap #When we get the tech for it this bad boy needs to be given a vision reduction when equipped. 1-2 tiles less than normal should be good. name: scrap helmet description: A cobbled-together helmet made from cabling, steel, and a bucket. components: @@ -70,8 +70,8 @@ - type: Armor modifiers: coefficients: - Blunt: 0.85 - Slash: 0.8 + Blunt: 0.9 + Slash: 0.9 Piercing: 0.9 Heat: 0.9 Shock: 1.05 diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 2f1d6dff69..dcb042251f 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -582,6 +582,24 @@ - type: Clothing sprite: Clothing/Mask/scaredmime.rsi +- type: entity + parent: [ClothingMaskMime, BaseSecurityContraband] + id: ClothingMaskMimeSecurity + name: security mime mask + description: You have the right to remain silent. + components: + - type: Sprite + sprite: Clothing/Mask/mime_security.rsi + - type: Clothing + sprite: Clothing/Mask/mime_security.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.95 + Slash: 0.95 + Piercing: 0.95 + Heat: 0.95 + - type: entity parent: ClothingMaskBase id: ClothingMaskItalianMoustache diff --git a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml index 22f92c4f21..fe037a888f 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml @@ -96,6 +96,8 @@ sprite: Clothing/Neck/Scarfs/syndiegreen.rsi - type: Clothing sprite: Clothing/Neck/Scarfs/syndiegreen.rsi + - type: StaticPrice + price: 500 - type: entity parent: [ ClothingScarfBase, BaseSyndicateContraband ] @@ -107,6 +109,8 @@ sprite: Clothing/Neck/Scarfs/syndiered.rsi - type: Clothing sprite: Clothing/Neck/Scarfs/syndiered.rsi + - type: StaticPrice + price: 500 - type: entity parent: [ ClothingScarfBase, BaseCentcommContraband ] diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 12fa247d72..8dd2311b88 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -167,6 +167,8 @@ Heat: 0.9 - type: ExplosionResistance damageCoefficient: 0.9 + - type: StaticPrice + price: 1500 #Elite web vest - type: entity @@ -195,6 +197,8 @@ damageCoefficient: 0.5 - type: FireProtection reduction: 0.85 + - type: StaticPrice + price: 2500 #Mercenary web vest - type: entity @@ -468,7 +472,7 @@ Heat: 0.9 Radiation: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.7 + walkModifier: 0.65 sprintModifier: 0.65 - type: HeldSpeedModifier - type: ExplosionResistance @@ -501,6 +505,7 @@ Piercing: 0.4 - type: ClothingSpeedModifier walkModifier: 0.8 + sprintModifier: 0.8 - type: HeldSpeedModifier - type: ExplosionResistance damageCoefficient: 0.4 diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 8e5f01d650..1d03c4440a 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -138,7 +138,7 @@ heatingCoefficient: 0.01 coolingCoefficient: 0.01 - type: ClothingSpeedModifier - walkModifier: 0.4 + walkModifier: 0.6 sprintModifier: 0.6 - type: HeldSpeedModifier - type: Item diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml index 837d71ec52..3a517a7793 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml @@ -19,7 +19,7 @@ zombificationResistanceCoefficient: 0.35 - type: GroupExamine - type: ClothingSpeedModifier - walkModifier: 1 + walkModifier: 0.95 sprintModifier: 0.95 # Sunrise-Start - type: Tag diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index a022866d8e..bfdf3f8356 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -92,7 +92,7 @@ Radiation: 0.3 #salv is supposed to have radiation hazards in the future Caustic: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.9 + walkModifier: 0.8 sprintModifier: 0.8 - type: HeldSpeedModifier - type: ToggleableClothing @@ -375,7 +375,7 @@ Radiation: 0.0 Caustic: 0.7 - type: ClothingSpeedModifier - walkModifier: 0.75 + walkModifier: 0.8 sprintModifier: 0.8 - type: HeldSpeedModifier - type: ToggleableClothing @@ -402,7 +402,7 @@ - type: ZombificationResistance zombificationResistanceCoefficient: 0.4 - type: ClothingSpeedModifier - walkModifier: 0.9 + walkModifier: 0.95 sprintModifier: 0.95 - type: HeldSpeedModifier - type: ToggleableClothing @@ -512,7 +512,7 @@ Radiation: 0.5 Caustic: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.85 + walkModifier: 0.9 sprintModifier: 0.9 - type: HeldSpeedModifier - type: ToggleableClothing @@ -559,6 +559,8 @@ - MonkeyWearable - Hardsuit - WhitelistChameleon + - type: StaticPrice + price: 5000 # Syndicate Medic Hardsuit - type: entity @@ -613,8 +615,8 @@ - type: Item size: Huge - type: ClothingSpeedModifier - walkModifier: 1.0 - sprintModifier: 0.90 + walkModifier: 0.9 + sprintModifier: 0.9 - type: HeldSpeedModifier - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitSyndieElite @@ -681,7 +683,7 @@ Radiation: 0.2 Caustic: 0.2 - type: ClothingSpeedModifier - walkModifier: 0.9 + walkModifier: 0.65 sprintModifier: 0.65 - type: HeldSpeedModifier - type: ToggleableClothing diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml index d57cc64c45..94ab0d6cb9 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml @@ -8,28 +8,26 @@ sprite: Clothing/OuterClothing/Misc/apron.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apron.rsi - #Sunrise-Start #If merge Scrap Armor PR Delete - type: Tag tags: - Apron -#Sunrise-End #If merge Scrap Armor PR Delete + - WhitelistChameleon - type: entity parent: [ClothingOuterStorageBase, BaseClothingOuterSounds] # Sunrise id: ClothingOuterApronBar - name: apron suffix: Bartender + name: apron description: A darker apron designed for bartenders. components: - type: Sprite sprite: Clothing/OuterClothing/Misc/apronbar.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apronbar.rsi - #Sunrise-Start #If merge Scrap Armor PR Delete - type: Tag tags: - Apron -#Sunrise-End #If merge Scrap Armor PR Delete + - WhitelistChameleon - type: entity parent: [ClothingOuterStorageBase, BaseClothingOuterSounds] # Sunrise @@ -42,11 +40,10 @@ sprite: Clothing/OuterClothing/Misc/apronbotanist.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apronbotanist.rsi - #Sunrise-Start #If merge Scrap Armor PR Delete - type: Tag tags: - Apron -#Sunrise-End #If merge Scrap Armor PR Delete + - WhitelistChameleon - type: entity parent: [ClothingOuterStorageBase, BaseClothingOuterSounds] # Sunrise @@ -59,11 +56,10 @@ sprite: Clothing/OuterClothing/Misc/apronchef.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apronchef.rsi - #Sunrise-Start #If merge Scrap Armor PR Delete - type: Tag tags: - Apron -#Sunrise-End #If merge Scrap Armor PR Delete + - WhitelistChameleon - type: entity parent: [ClothingOuterStorageBase, BaseClothingOuterSounds] # Sunrise diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml index 1a030b049d..adf4227595 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml @@ -51,7 +51,7 @@ # The armor itself - type: entity - parent: [ClothingOuterArmorHeavy, BaseMajorContraband] + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseMajorContraband] id: ClothingOuterArmorScrap name: scrap armor description: A tider's gleaming plate mail. Bail up, or you're a dead man. @@ -73,18 +73,13 @@ Slash: 0.5 Piercing: 0.5 #Some nukie tier physical protection... Heat: 0.8 - Shock: 1.8 # #Hey, it's a bunch of solid steel. Bzzzzz Radiation: 0.8 #Hey, it's a bunch of solid steel. - type: ExplosionResistance damageCoefficient: 0.80 - - type: StaminaResistance - damageCoefficient: 1.35 # Тяжело в нем явно - type: ClothingSpeedModifier #But that protection comes at a price. - walkModifier: 0.7 - sprintModifier: 0.7 + walkModifier: 0.6 + sprintModifier: 0.6 - type: GroupExamine - - type: ProtectedFromStepTriggers - slots: WITHOUT_POCKET - type: Construction graph: scraparmor node: scraparmorfinished diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml index f8de438402..caa341ea58 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml @@ -31,6 +31,8 @@ - SuitEVA - MonkeyWearable - WhitelistChameleon + - type: StaticPrice + price: 1000 # Helmet is 500 #Emergency EVA - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index a679a58946..7cc8b8be86 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -65,7 +65,7 @@ Heat: 0.8 Cold: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.8 + walkModifier: 0.7 sprintModifier: 0.7 - type: HeldSpeedModifier - type: GroupExamine @@ -348,3 +348,6 @@ coolingCoefficient: 0.01 - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitCarp + - type: StaticPrice + price: 1500 + diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index 1a8d7fcf40..0e9873780f 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -24,7 +24,7 @@ prefixOn: on - type: Magboots - type: ClothingSpeedModifier - walkModifier: 0.85 + walkModifier: 0.8 sprintModifier: 0.8 - type: Appearance - type: GenericVisualizer @@ -82,8 +82,8 @@ description: These would look fetching on a fetcher like you. components: - type: ClothingSpeedModifier - walkModifier: 1.10 #PVS isn't too much of an issue when you are blind... - sprintModifier: 1.10 + walkModifier: 1.1 #PVS isn't too much of an issue when you are blind... + sprintModifier: 1.1 - type: StaticPrice price: 3000 @@ -99,7 +99,7 @@ - type: Clothing sprite: Clothing/Shoes/Boots/magboots-syndicate.rsi - type: ClothingSpeedModifier - walkModifier: 0.95 + walkModifier: 0.9 sprintModifier: 0.9 - type: GasTank outputPressure: 42.6 @@ -113,6 +113,8 @@ - type: Item sprite: null size: Normal + - type: StaticPrice + price: 1500 - type: entity parent: BaseAction diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index 439545541f..f8faed04bc 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -138,7 +138,7 @@ - type: Magboots # always have gravity because le suction cups - type: ClothingSpeedModifier # ninja are masters of sneaking around relatively quickly, won't break cloak - walkModifier: 1.1 + walkModifier: 1.3 sprintModifier: 1.3 - type: FootstepModifier footstepSoundCollection: null @@ -272,7 +272,7 @@ size: Small sprite: Clothing/Shoes/Specific/large_clown.rsi - type: ClothingSpeedModifier - walkModifier: 0.85 + walkModifier: 0.8 sprintModifier: 0.8 - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml index 33bb03a0e3..3826dd35c4 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml @@ -521,6 +521,8 @@ sprite: Clothing/Uniforms/Jumpskirt/operative_s.rsi - type: Clothing sprite: Clothing/Uniforms/Jumpskirt/operative_s.rsi + - type: StaticPrice + price: 500 - type: entity parent: ClothingUniformSkirtBase diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml index b250b3fbd7..0f1a079320 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml @@ -855,6 +855,8 @@ sprite: Clothing/Uniforms/Jumpsuit/operative.rsi - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/operative.rsi + - type: StaticPrice + price: 500 - type: entity parent: ClothingUniformBase diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 094eb0e6b0..365a24aa56 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -181,8 +181,6 @@ rules: ghost-role-information-space-dragon-summoned-carp-rules mindRoles: - MindRoleGhostRoleTeamAntagonistFlock - raffle: - settings: short - type: GhostTakeoverAvailable - type: HTN rootTask: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml index 9fe96a18a1..5d6b9f9316 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml @@ -96,6 +96,8 @@ - type: Sprite layers: - state: margherita-slice + - type: Item + heldPrefix: margherita-slice - type: entity name: meat pizza @@ -134,6 +136,8 @@ - type: Sprite layers: - state: meat-slice + - type: Item + heldPrefix: meat-slice - type: Tag tags: - Meat @@ -172,6 +176,8 @@ - type: Sprite layers: - state: mushroom-slice + - type: Item + heldPrefix: mushroom-slice # Tastes like crust, tomato, cheese, mushroom. - type: entity @@ -223,6 +229,8 @@ - type: Sprite layers: - state: vegetable-slice + - type: Item + heldPrefix: vegetable-slice - type: SolutionContainerManager solutions: food: @@ -280,6 +288,8 @@ - type: Sprite layers: - state: donkpocket-slice + - type: Item + heldPrefix: donkpocket-slice - type: SolutionContainerManager solutions: food: @@ -340,6 +350,8 @@ - type: Sprite layers: - state: dank-slice + - type: Item + heldPrefix: dank-slice - type: SolutionContainerManager solutions: food: @@ -388,6 +400,8 @@ - type: Sprite layers: - state: sassysage-slice + - type: Item + heldPrefix: sassysage-slice - type: Tag tags: - Meat @@ -434,6 +448,8 @@ - type: Sprite layers: - state: pineapple-slice + - type: Item + heldPrefix: pineapple-slice - type: Tag tags: - Meat @@ -494,6 +510,8 @@ - type: Sprite layers: - state: arnold-slice + - type: Item + heldPrefix: arnold-slice - type: SolutionContainerManager solutions: food: @@ -529,6 +547,8 @@ - type: Sprite layers: - state: moldy-slice + - type: Item + heldPrefix: moldy-slice - type: Tag tags: - Trash @@ -597,6 +617,8 @@ - type: Sprite layers: - state: uranium-slice + - type: Item + heldPrefix: uranium-slice - type: Tag tags: - Meat @@ -665,6 +687,8 @@ - type: Sprite layers: - state: cotton-slice + - type: Item + heldPrefix: cotton-slice - type: Tag tags: - ClothMade @@ -722,6 +746,8 @@ - type: Sprite layers: - state: worldpeas-slice + - type: Item + heldPrefix: worldpeas-slice - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml index c3204ccfd8..091835a0c1 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml @@ -19,6 +19,11 @@ shape: - 0,0,1,0 storedOffset: 0,-6 + inhandVisuals: + left: + - state: plate-inhand-left + right: + - state: plate-inhand-right - type: DamageOnLand damage: types: @@ -86,6 +91,11 @@ state: plate-small - type: Item storedOffset: 0,-3 + inhandVisuals: + left: + - state: plate-inhand-left + right: + - state: plate-inhand-right # Needs the full thing because inherting is dumb sometimes. - type: Destructible thresholds: @@ -145,6 +155,11 @@ shape: - 0,0,1,0 storedOffset: 0,-6 + inhandVisuals: + left: + - state: plate-plastic-inhand-left + right: + - state: plate-plastic-inhand-right - type: Tag tags: - Trash @@ -162,6 +177,11 @@ shape: - 0,0,1,0 storedOffset: 0,-3 + inhandVisuals: + left: + - state: plate-plastic-inhand-left + right: + - state: plate-plastic-inhand-right - type: Tag tags: - Trash diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml index f29d919b0f..344827534b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml @@ -720,6 +720,12 @@ entries: Taco: CheeseTaco Burger: CheeseBurger + - type: Item + inhandVisuals: + left: + - state: cheesewedge-inhand-left + right: + - state: cheesewedge-inhand-right - type: entity name: chèvre log diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 6784538f61..b603ffe011 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -109,6 +109,12 @@ - type: Tag tags: - Meat + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: raw human meat @@ -127,6 +133,12 @@ - type: SliceableFood count: 3 slice: FoodMeatCutlet + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: raw carp fillet @@ -155,6 +167,12 @@ reagents: - ReagentId: CarpoToxin Quantity: 5 + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw bacon @@ -185,6 +203,12 @@ graph: Bacon node: start defaultTarget: bacon + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw bear meat @@ -209,6 +233,14 @@ graph: BearSteak node: start defaultTarget: filet migrawr + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#934C64" + right: + - state: generic-pink-inhand-right + color: "#934C64" - type: entity name: raw penguin meat @@ -233,6 +265,12 @@ graph: PenguinSteak node: start defaultTarget: cooked penguin + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw chicken meat @@ -259,6 +297,12 @@ graph: ChickenSteak node: start defaultTarget: cooked chicken + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw duck meat @@ -283,6 +327,12 @@ graph: DuckSteak node: start defaultTarget: cooked duck + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: prime-cut corgi meat @@ -308,6 +358,12 @@ price: 750 - type: StealTarget stealGroup: FoodMeatCorgi + - type: Item + inhandVisuals: + left: + - state: corgi-inhand-left + right: + - state: corgi-inhand-right - type: entity name: raw crab meat @@ -355,6 +411,12 @@ graph: GoliathSteak node: start defaultTarget: goliath steak + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: dragon flesh @@ -389,6 +451,12 @@ graph: DragonSteak node: start defaultTarget: dragon steak + - type: Item + inhandVisuals: + left: + - state: dragon-inhand-left + right: + - state: dragon-inhand-right - type: entity name: raw rat meat @@ -409,6 +477,12 @@ - type: SliceableFood count: 3 slice: FoodMeatCutlet + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: raw lizard meat @@ -433,6 +507,14 @@ graph: LizardSteak node: start defaultTarget: lizard steak + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + color: "#6EFF41" + right: + - state: plain-inhand-right + color: "#6EFF41" - type: entity name: raw plant meat @@ -467,6 +549,12 @@ Quantity: 4 - ReagentId: Fat Quantity: 4 + - type: Item + inhandVisuals: + left: + - state: rotten-inhand-left + right: + - state: rotten-inhand-right - type: entity name: raw spider meat @@ -487,6 +575,8 @@ - type: SliceableFood count: 3 slice: FoodMeatSpiderCutlet + - type: Item + heldPrefix: spider - type: entity name: raw spider leg @@ -504,6 +594,14 @@ Quantity: 10 - ReagentId: Fat Quantity: 3 + - type: Item + inhandVisuals: + left: + - state: snake-inhand-left + color: "#333333" + right: + - state: snake-inhand-right + color: "#333333" - type: entity name: meatwheat clump @@ -522,6 +620,14 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 1 + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#934C64" + right: + - state: generic-pink-inhand-right + color: "#934C64" - type: entity name: raw snake meat @@ -543,6 +649,12 @@ Quantity: 10 - ReagentId: Toxin Quantity: 2 + - type: Item + inhandVisuals: + left: + - state: snake-inhand-left + right: + - state: snake-inhand-right - type: entity name: raw xeno meat @@ -570,6 +682,14 @@ - type: SliceableFood count: 3 slice: FoodMeatXenoCutlet + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + color: "#6EFF41" + right: + - state: plain-inhand-right + color: "#6EFF41" - type: entity name: raw rouny meat @@ -599,6 +719,12 @@ graph: RounySteak node: start defaultTarget: rouny steak + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: killer tomato meat @@ -613,6 +739,12 @@ slice: FoodMeatTomatoCutlet - type: StaticPrice price: 100 + - type: Item + inhandVisuals: + left: + - state: tomato-inhand-left + right: + - state: tomato-inhand-right - type: entity name: salami @@ -695,6 +827,8 @@ graph: CookedPatty node: start defaultTarget: cooked meat patty + - type: Item + heldPrefix: generic-pink - type: entity name: slimeball @@ -716,6 +850,12 @@ Quantity: 10 - type: Sprite state: slime + - type: Item + inhandVisuals: + left: + - state: slime-inhand-left + right: + - state: slime-inhand-right - type: entity name: raw snail meat @@ -736,6 +876,14 @@ Quantity: 3 - ReagentId: Water Quantity: 4 #It makes saline if you add salt! + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#E2AE7C" + right: + - state: generic-pink-inhand-right + color: "#E2AE7C" - type: entity name: anomalous meat mass @@ -766,6 +914,12 @@ - type: Tag tags: - Meat + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right # Cooked @@ -833,6 +987,12 @@ entries: Burger: MeatSteak Taco: MeatSteak + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: bacon @@ -868,6 +1028,14 @@ entries: Burger: MeatBacon Taco: MeatBacon + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3E2A" + right: + - state: generic-pink-inhand-right + color: "#5B3E2A" - type: entity name: cooked bear @@ -901,6 +1069,8 @@ entries: Burger: MeatBearBurger Taco: MeatBear + - type: Item + heldPrefix: meatball - type: entity name: penguin filet @@ -933,6 +1103,14 @@ entries: Burger: MeatPenguinBurger Taco: MeatPenguin + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: cooked chicken @@ -965,6 +1143,14 @@ entries: Burger: MeatChicken Taco: MeatChicken + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: fried chicken @@ -997,6 +1183,14 @@ entries: Burger: MeatChicken Taco: MeatChicken + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: cooked duck @@ -1029,6 +1223,14 @@ entries: Burger: MeatDuck Taco: MeatDuck + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: cooked crab @@ -1061,6 +1263,12 @@ entries: Burger: MeatCrabBurger Taco: MeatCrab + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: goliath steak @@ -1091,6 +1299,12 @@ entries: Burger: MeatGoliathBurger Taco: MeatGoliath + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: rouny steak @@ -1125,6 +1339,12 @@ entries: Burger: MeatXeno Taco: MeatXeno + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: lizard steak @@ -1158,6 +1378,12 @@ entries: Burger: MeatLizardBurger Taco: MeatLizard + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: boiled spider leg @@ -1184,6 +1410,14 @@ entries: Burger: MeatSpiderBurger Taco: MeatSpider + - type: Item + inhandVisuals: + left: + - state: snake-inhand-left + color: "#44201A" + right: + - state: snake-inhand-right + color: "#44201A" - type: entity name: meatball @@ -1212,6 +1446,8 @@ - type: Construction graph: MeatMeatballCooked node: meatball cooked + - type: Item + heldPrefix: meatball - type: entity name: cooked meat patty @@ -1241,6 +1477,8 @@ entries: Burger: MeatPatty Taco: MeatPatty + - type: Item + heldPrefix: meatball - type: entity name: boiled snail @@ -1270,6 +1508,14 @@ entries: Burger: MeatSnail Taco: MeatSnail + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3E2A" + right: + - state: generic-pink-inhand-right + color: "#5B3E2A" - type: entity name: anomalous steak @@ -1299,6 +1545,12 @@ - type: Construction graph: AnomalyMeatSteak node: anomaly steak + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: dragon steak @@ -1334,6 +1586,12 @@ entries: Burger: DragonSteak Taco: DragonSteak + - type: Item + inhandVisuals: + left: + - state: dragon-cooked-inhand-left + right: + - state: dragon-cooked-inhand-right # Cutlets @@ -1364,6 +1622,12 @@ graph: Cutlet node: start defaultTarget: cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw bear cutlet @@ -1393,6 +1657,14 @@ graph: BearCutlet node: start defaultTarget: bear cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: brown + right: + - state: generic-pink-inhand-right + color: brown - type: entity name: raw penguin cutlet @@ -1420,6 +1692,14 @@ graph: PenguinCutlet node: start defaultTarget: penguin cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: white + right: + - state: generic-pink-inhand-right + color: white - type: entity name: raw chicken cutlet @@ -1447,6 +1727,12 @@ graph: ChickenCutlet node: start defaultTarget: chicken cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw duck cutlet @@ -1474,6 +1760,12 @@ graph: DuckCutlet node: start defaultTarget: duck cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw lizard cutlet @@ -1504,6 +1796,14 @@ graph: LizardCutlet node: start defaultTarget: lizard cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: green + right: + - state: generic-pink-inhand-right + color: green - type: entity name: raw spider cutlet @@ -1530,6 +1830,14 @@ graph: SpiderCutlet node: start defaultTarget: spider cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: green + right: + - state: generic-pink-inhand-right + color: green - type: entity name: raw xeno cutlet @@ -1558,6 +1866,14 @@ graph: XenoCutlet node: start defaultTarget: xeno cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: green + right: + - state: generic-pink-inhand-right + color: green - type: entity name: raw killer tomato cutlet @@ -1623,6 +1939,14 @@ graph: DragonCutlet node: start defaultTarget: dragon cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#D127A7" + right: + - state: generic-pink-inhand-right + color: "#D127A7" # Cooked @@ -1654,6 +1978,14 @@ entries: Burger: MeatCutlet Taco: MeatCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: bear cutlet @@ -1686,6 +2018,14 @@ entries: Burger: BearCutletBurger Taco: BearCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: penguin cutlet @@ -1716,6 +2056,14 @@ entries: Burger: PenguinCutletBurger Taco: PenguinCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: chicken cutlet @@ -1746,6 +2094,14 @@ entries: Burger: ChickenCutlet Taco: ChickenCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: duck cutlet @@ -1776,6 +2132,14 @@ entries: Burger: DuckCutlet Taco: DuckCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: lizard cutlet @@ -1807,6 +2171,14 @@ entries: Burger: LizardCutletBurger Taco: LizardCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#153F06" + right: + - state: generic-pink-inhand-right + color: "#153F06" - type: entity name: spider cutlet @@ -1836,6 +2208,14 @@ entries: Burger: SpiderCutletBurger Taco: SpiderCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#153F06" + right: + - state: generic-pink-inhand-right + color: "#153F06" - type: entity name: xeno cutlet @@ -1865,6 +2245,14 @@ entries: Burger: XenoCutlet Taco: XenoCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#153F06" + right: + - state: generic-pink-inhand-right + color: "#153F06" - type: entity name: dragon cutlet @@ -1896,3 +2284,11 @@ entries: Burger: DragonCutlet Taco: DragonCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#7A1763" + right: + - state: generic-pink-inhand-right + color: "#7A1763" diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml index 9147a79158..3668e173b7 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml @@ -40,6 +40,7 @@ - type: Sprite state: boritos - type: Item + heldPrefix: boritos - type: Food trash: - FoodPacketBoritosTrash @@ -56,6 +57,7 @@ - type: Sprite state: cnds - type: Item + heldPrefix: cnds - type: Food trash: - FoodPacketCnDsTrash @@ -73,6 +75,7 @@ - type: Sprite state: cheesiehonkers - type: Item + heldPrefix: cheesiehonkers - type: Food trash: - FoodPacketCheesieTrash @@ -91,6 +94,7 @@ - type: Sprite state: chips - type: Item + heldPrefix: chips - type: Food trash: - FoodPacketChipsTrash @@ -129,6 +133,7 @@ - type: Sprite state: chocolatebar-open - type: Item + heldPrefix: chocolatebar-open - type: Tag tags: - FoodSnack @@ -154,6 +159,7 @@ - type: Sprite state: energybar - type: Item + heldPrefix: energybar - type: SpawnItemsOnUse items: - id: FoodPacketEnergyTrash @@ -176,6 +182,7 @@ - type: Sprite state: energybar-open - type: Item + heldPrefix: energybar-open - type: entity name: Sweetie's pistachios @@ -190,6 +197,7 @@ - type: Sprite state: pistachio - type: Item + heldPrefix: pistachio - type: Food trash: - FoodPacketPistachioTrash @@ -229,6 +237,7 @@ - type: Sprite state: raisins - type: Item + heldPrefix: raisins - type: Food trash: - FoodPacketRaisinsTrash @@ -248,6 +257,7 @@ - type: Sprite state: semki - type: Item + heldPrefix: semki - type: Food trash: - FoodPacketSemkiTrash @@ -264,6 +274,7 @@ - type: Sprite state: susjerky - type: Item + heldPrefix: susjerky - type: Food trash: - FoodPacketSusTrash @@ -283,6 +294,7 @@ - type: Sprite state: syndicakes - type: Item + heldPrefix: syndicakes - type: Food trash: - FoodPacketSyndiTrash @@ -311,6 +323,8 @@ - type: Food trash: - FoodPacketCupRamenTrash + - type: Item + heldPrefix: ramen - type: entity parent: DrinkRamen @@ -342,6 +356,7 @@ - type: Sprite state: chinese1 - type: Item + heldPrefix: chinese1 - type: SolutionContainerManager solutions: food: @@ -369,6 +384,7 @@ - type: Sprite state: chinese2 - type: Item + heldPrefix: chinese2 - type: SolutionContainerManager solutions: food: @@ -404,7 +420,7 @@ Quantity: 1 - type: Item sprite: Objects/Consumable/Food/snacks.rsi - heldPrefix: packet + heldPrefix: cookie_fortune size: Tiny - type: Food trash: @@ -418,6 +434,7 @@ components: - type: Item size: Small + heldPrefix: nutribrick - type: Tag tags: - FoodSnack @@ -442,6 +459,7 @@ - nutribrick - type: Item size: Small + heldPrefix: nutribrick-open - type: Tag tags: - ReptilianFood @@ -465,6 +483,8 @@ - type: Sprite sprite: Objects/Consumable/Food/snacks.rsi state: mre-brownie + - type: Item + heldPrefix: mre-brownie - type: Tag tags: - FoodSnack @@ -487,6 +507,8 @@ - mrebrownie - type: Sprite state: mre-brownie-open + - type: Item + heldPrefix: mre-brownie-open - type: Food - type: SolutionContainerManager solutions: @@ -511,7 +533,6 @@ sprite: Objects/Consumable/Food/snacks.rsi - type: Item sprite: Objects/Consumable/Food/snacks.rsi - heldPrefix: packet size: Tiny - type: Tag tags: @@ -540,6 +561,14 @@ components: - type: Sprite state: boritos-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#4F54BE" + right: + - state: trash-inhand-right + color: "#4F54BE" - type: entity categories: [ HideSpawnMenu ] @@ -549,6 +578,14 @@ components: - type: Sprite state: cnds-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#915145" + right: + - state: trash-inhand-right + color: "#915145" - type: entity categories: [ HideSpawnMenu ] @@ -558,6 +595,14 @@ components: - type: Sprite state: cheesiehonkers-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#FFCC33" + right: + - state: trash-inhand-right + color: "#FFCC33" - type: entity categories: [ HideSpawnMenu ] @@ -567,6 +612,14 @@ components: - type: Sprite state: chips-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#008000" + right: + - state: trash-inhand-right + color: "#008000" - type: entity categories: [ HideSpawnMenu ] @@ -576,6 +629,14 @@ components: - type: Sprite state: chocolatebar-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#A20000" + right: + - state: trash-inhand-right + color: "#A20000" - type: entity categories: [ HideSpawnMenu ] @@ -585,6 +646,14 @@ components: - type: Sprite state: energybar-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#9AFF1F" + right: + - state: trash-inhand-right + color: "#9AFF1F" - type: entity categories: [ HideSpawnMenu ] @@ -594,6 +663,14 @@ components: - type: Sprite state: pistachio-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#99B334" + right: + - state: trash-inhand-right + color: "#99B334" - type: entity categories: [ HideSpawnMenu ] @@ -603,6 +680,14 @@ components: - type: Sprite state: popcorn-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#5193FF" + right: + - state: trash-inhand-right + color: "#5193FF" - type: entity categories: [ HideSpawnMenu ] @@ -612,6 +697,14 @@ components: - type: Sprite state: raisins-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#FF0033" + right: + - state: trash-inhand-right + color: "#FF0033" - type: entity categories: [ HideSpawnMenu ] @@ -621,6 +714,14 @@ components: - type: Sprite state: semki-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#C2821E" + right: + - state: trash-inhand-right + color: "#C2821E" - type: entity categories: [ HideSpawnMenu ] @@ -630,6 +731,14 @@ components: - type: Sprite state: susjerky-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#990033" + right: + - state: trash-inhand-right + color: "#990033" - type: entity categories: [ HideSpawnMenu ] @@ -639,6 +748,14 @@ components: - type: Sprite state: syndicakes-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#FFFFFF" + right: + - state: trash-inhand-right + color: "#FFFFFF" - type: entity categories: [ HideSpawnMenu ] @@ -648,6 +765,8 @@ components: - type: Sprite state: ramen + - type: Item + heldPrefix: ramen - type: entity categories: [ HideSpawnMenu ] @@ -657,6 +776,8 @@ components: - type: Sprite state: chinese1 + - type: Item + heldPrefix: chinese1 - type: entity categories: [ HideSpawnMenu ] @@ -666,6 +787,8 @@ components: - type: Sprite state: chinese2 + - type: Item + heldPrefix: chinese2 - type: entity categories: [ HideSpawnMenu ] @@ -702,3 +825,11 @@ - Trash - type: Sprite state: mre-wrapper + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#8B7356" + right: + - state: trash-inhand-right + color: "#8B7356" diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml index 5bbf2bb596..d9d8a848c3 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml @@ -1,6 +1,7 @@ - type: entity - id: WeaponEnergyTurretStationMachineCircuitboard + abstract: true parent: BaseMachineCircuitboard + id: WeaponEnergyTurretStationMachineCircuitboardBase name: sentry turret machine board description: A machine printed circuit board for a sentry turret. components: @@ -13,7 +14,7 @@ TurretCompatibleWeapon: amount: 1 defaultPrototype: WeaponLaserCannon - examineName: construction-insert-info-examine-name-laser-cannon + examineName: construction-insert-info-examine-name-laser-cannon ProximitySensor: amount: 1 defaultPrototype: ProximitySensor @@ -21,16 +22,27 @@ PowerCell: amount: 1 defaultPrototype: PowerCellMedium - examineName: construction-insert-info-examine-name-power-cell - + examineName: construction-insert-info-examine-name-power-cell + - type: entity + parent: WeaponEnergyTurretStationMachineCircuitboardBase id: WeaponEnergyTurretAIMachineCircuitboard - parent: WeaponEnergyTurretStationMachineCircuitboard - name: AI sentry turret machine board - description: A machine printed circuit board for an AI sentry turret. + suffix: AI, Silicon components: - type: Sprite sprite: Objects/Misc/module.rsi state: command - type: MachineBoard - prototype: WeaponEnergyTurretAI \ No newline at end of file + prototype: WeaponEnergyTurretAI + +- type: entity + parent: WeaponEnergyTurretStationMachineCircuitboardBase + id: WeaponEnergyTurretSecurityMachineCircuitboard + suffix: Security + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: security + - type: MachineBoard + prototype: WeaponEnergyTurretSecurity + diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml index 3a0b885a8c..45fa107108 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml @@ -142,6 +142,8 @@ - type: SiliconLawProvider laws: AntimovLawset lawUploadSound: /Audio/Ambience/Antag/silicon_lawboard_antimov.ogg + - type: StaticPrice + price: 10000 - type: entity id: NutimovCircuitBoard diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml index 4d6cc784af..3396ec6934 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml @@ -23,4 +23,6 @@ receiveFrequencyId: SurveillanceCamera transmitFrequencyId: SurveillanceCamera - type: WiredNetworkConnection - - type: SurveillanceCameraMonitor \ No newline at end of file + - type: SurveillanceCameraMonitor + - type: StaticPrice + price: 2000 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml index fd24a1dc1a..28da7331d2 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml @@ -40,4 +40,4 @@ - type: ApcPowerReceiver powerLoad: 15000 - type: StaticPrice - price: 1500 + price: 7500 diff --git a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml index 925bb3e86c..0aaf48020e 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml @@ -20,6 +20,8 @@ - MindContainer # no - Pda # PDAs currently make you invisible /!\ disguiseProto: ChameleonDisguise + - type: StaticPrice + price: 5000 - type: entity categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml index 1dd77a7a78..0ad2417470 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml @@ -237,6 +237,8 @@ layers: - state: crypt_red - state: synd_label + - type: StaticPrice + price: 500 # 1000 for 2 - type: entity parent: [ EncryptionKey, BaseSiliconScienceContraband ] @@ -267,6 +269,8 @@ layers: - state: crypt_red - state: ai_label + - type: StaticPrice + price: 1000 - type: entity parent: EncryptionKey diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index b97d07fed0..c118eb7150 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -145,6 +145,8 @@ Off: { state: syndicate-pai-off-overlay } Searching: { state: syndicate-pai-searching-overlay } On: { state: syndicate-pai-on-overlay } + - type: StaticPrice + price: 500 # Sunrise-Edit - type: StationAiVision enabled: false diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index f9b1e11c0c..1a7a2659c8 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -721,6 +721,7 @@ wideAnimationRotation: 90 soundHit: path: /Audio/Items/Toys/rawr.ogg + animation: WeaponArcBite - type: Item heldPrefix: blue storedRotation: -90 @@ -1576,6 +1577,8 @@ - type: Tag tags: - Balloon + - type: StaticPrice + price: 5000 # Entertainment. - type: entity parent: BaseItem diff --git a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml index bef87ddd5c..e5f26d0d7c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml @@ -248,6 +248,7 @@ - type: entity id: ChameleonControllerImplanter + name: chameleon controller implant suffix: chameleon controller parent: BaseImplantOnlyImplanterSyndi components: diff --git a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml index 1252453019..7ed1b657ea 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml @@ -27,15 +27,17 @@ drawdepth: Items sprite: Objects/Misc/landmine.rsi layers: - - state: landmine-inactive + - state: landmine + - state: landmine-unshaded + shader: unshaded map: [ "enum.ToggleableVisuals.Layer" ] - type: Appearance - type: GenericVisualizer visuals: enum.ToggleableVisuals.Enabled: enum.ToggleableVisuals.Layer: - True: {state: landmine} - False: {state: landmine-inactive} + True: {visible: true} + False: {visible: false} - type: Damageable damageContainer: Inorganic - type: Destructible @@ -74,9 +76,6 @@ activated: true onActivate: false - type: Armable - - type: Sprite - layers: - - state: landmine - type: entity name: modular mine @@ -98,9 +97,6 @@ activated: true onActivate: false - type: Armable - - type: Sprite - layers: - - state: landmine - type: entity name: explosive mine @@ -124,6 +120,3 @@ activated: true onActivate: false - type: Armable - - type: Sprite - layers: - - state: landmine diff --git a/Resources/Prototypes/Entities/Objects/Misc/pen.yml b/Resources/Prototypes/Entities/Objects/Misc/pen.yml index d62a10a663..bead4786b1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pen.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pen.yml @@ -90,6 +90,8 @@ state: overpriced_pen - type: Item heldPrefix: overpriced_pen + - type: StaticPrice + price: 500 - type: entity name: CentComm pen diff --git a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml index 603c94c8e0..65ba52bbd9 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml @@ -221,6 +221,8 @@ stampState: "paper_stamp-syndicate" - type: Sprite state: stamp-syndicate + - type: StaticPrice + price: 1000 - type: entity name: warden's rubber stamp diff --git a/Resources/Prototypes/Entities/Objects/Power/powersink.yml b/Resources/Prototypes/Entities/Objects/Power/powersink.yml index 883483b645..7385b9a825 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powersink.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powersink.yml @@ -8,8 +8,8 @@ size: Huge - type: MultiHandedItem - type: HeldSpeedModifier #verrryy heavy - walkModifier: 0.60 - sprintModifier: 0.60 + walkModifier: 0.6 + sprintModifier: 0.6 - type: NodeContainer examinable: true nodes: @@ -57,3 +57,5 @@ blacklist: tags: - GhostOnlyWarp + - type: StaticPrice + price: 3000 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index 72945a923b..36a70885e0 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -142,6 +142,8 @@ - type: Residue residueAdjective: residue-slippery residueColor: residue-red + - type: StaticPrice + price: 500 - type: entity name: soaplet diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index 83c6389dbf..3b7d0c6dda 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -562,7 +562,7 @@ onlyAffectsMobs: false injectOnly: true - type: StaticPrice - price: 500 + price: 1500 - type: entity name: hyperzine microinjector @@ -601,7 +601,7 @@ changeColor: false emptySpriteName: microstimpen_empty - type: StaticPrice - price: 100 + price: 583 # 3500 for 6 as a freaky fraction - type: entity name: combat medipen @@ -645,7 +645,7 @@ onlyAffectsMobs: false injectOnly: true - type: StaticPrice - price: 500 + price: 1500 - type: entity name: pen diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 243cb37ddf..779d7db85c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -925,6 +925,8 @@ - state: base-part-inhand-right - state: base-stripes-inhand-right color: "#7B0F12" + - type: StaticPrice + price: 2500 - type: entity id: BorgModuleOperative @@ -1012,6 +1014,8 @@ - state: base-part-inhand-right - state: base-stripes-inhand-right color: "#7B0F12" + - type: StaticPrice + price: 2000 # xenoborg modules - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml b/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml index 15c1beba8e..55c7498578 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml @@ -20,3 +20,5 @@ components: - type: LimitedCharges - type: AutoRecharge + - type: StaticPrice + price: 2000 diff --git a/Resources/Prototypes/Entities/Objects/Tools/emag.yml b/Resources/Prototypes/Entities/Objects/Tools/emag.yml index 616772a4fc..f669abe68a 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/emag.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/emag.yml @@ -20,3 +20,5 @@ components: - type: LimitedCharges - type: AutoRecharge + - type: StaticPrice + price: 2500 diff --git a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml index 0066c5826c..1fc42ad41f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml @@ -48,6 +48,8 @@ Low: {state: jammer_low_charge} Medium: {state: jammer_medium_charge} High: {state: jammer_high_charge} + - type: StaticPrice + price: 1500 - type: entity parent: [RadioJammer, BaseXenoborgContraband] diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 202b7948e6..8c925b77ad 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -86,3 +86,5 @@ damage: types: Blunt: 14 + - type: StaticPrice + price: 1000 diff --git a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml index 5376b62bce..571adbc3eb 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml @@ -126,6 +126,8 @@ sprite: Objects/Tanks/Jetpacks/black.rsi slots: - Back + - type: StaticPrice + price: 1000 # Filled black - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml index f3ab27fb60..564f136c0b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml @@ -2,7 +2,7 @@ # ideally it would be dynamic and work by actually sparking the solution but that doesnt exist yet :( # with that you could make napalm ied instead of welding fuel with no additional complexity - type: entity - parent: BaseItem + parent: [ BaseItem, BaseMinorContraband ] id: FireBomb name: fire bomb description: A weak, improvised incendiary device. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml index b60fad9773..70661667cc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml @@ -1,5 +1,5 @@ - type: entity - parent: GrenadeBase + parent: [ GrenadeBase, BaseMinorContraband ] id: PipeBomb name: pipe bomb description: An improvised explosive made from pipes and wire. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml index 5cd3955f0a..65ee79e35d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml @@ -82,6 +82,8 @@ - type: HolidayRsiSwap sprite: festive: Objects/Weapons/Bombs/c4gift.rsi + - type: StaticPrice + price: 625 # 5000 for a bundle of 8 - type: entity name: seismic charge 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 fd4f483e54..5b7a865190 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml @@ -132,7 +132,7 @@ proto: ShellShotgunIncendiary - type: Sprite layers: - - state: slug + - state: base map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index f872579b0b..47e3866a59 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -528,7 +528,7 @@ path: /Audio/Weapons/Guns/Gunshots/taser2.ogg - type: HitscanBatteryAmmoProvider # Sunrise-Edit proto: BulletDisablerPractice - fireCost: 50 + fireCost: 62.5 - type: Tag tags: - Taser @@ -556,7 +556,7 @@ - Belt - type: HitscanBatteryAmmoProvider # Sunrise-Edit proto: BulletDisabler - fireCost: 50 + fireCost: 62.5 - type: GuideHelp guides: - Security diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 3c3bedf3e3..8190c3a183 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -94,7 +94,9 @@ steps: 4 zeroVisible: true - type: Appearance - - type: GunRequiresWield + - type: StaticPrice + price: 10000 + - type: GunRequiresWield # Sunrise add - type: entity name: L6C ROW diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index a65df8fe6e..bbe69db7ed 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -64,6 +64,8 @@ proto: GrenadeFrag soundInsert: path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg + - type: StaticPrice + price: 10000 - type: entity parent: [ BaseWeaponLauncher, BaseGunWieldable, BaseMajorContraband ] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 4cd6a8cbe7..6f798e8f8b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -111,6 +111,8 @@ containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + - type: StaticPrice + price: 1000 - type: entity name: echis @@ -193,6 +195,8 @@ containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + - type: StaticPrice + price: 1500 - type: entity name: mk 58 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 02065cdf2e..dd38ed8861 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -152,6 +152,8 @@ path: /Audio/Weapons/Guns/Gunshots/revolver.ogg params: volume: 2.25 + - type: StaticPrice + price: 1500 # Botany can shit these out like candy, but let's see how it goes - type: entity parent: WeaponRevolverPython @@ -196,4 +198,4 @@ capacity: 5 chambers: [ null, null, null, null, null ] ammoSlots: [ null, null, null, null, null ] - + diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index 1aaef7fad1..74badbf9fb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -129,6 +129,8 @@ steps: 6 zeroVisible: true - type: Appearance + - type: StaticPrice + price: 5000 - type: entity name: Drozd diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index 5f79f90774..22e81c09d9 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -110,7 +110,7 @@ zeroVisible: true - type: Appearance - type: StaticPrice - price: 500 + price: 5000 - type: entity name: double-barreled shotgun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index a9726df013..c71fb8bc92 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -62,6 +62,8 @@ - type: Sprite sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi - type: GunRequiresWield + - type: StaticPrice + price: 500 - type: entity name: Hristov @@ -94,6 +96,8 @@ - type: EyeCursorOffset maxOffset: 3 pvsIncrease: 0.3 + - type: StaticPrice + price: 3500 - type: entity name: musket diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml index a8b3c9a88c..077d5dc5fd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml @@ -1,7 +1,8 @@ - type: entity + abstract: true parent: [BaseWeaponEnergyTurret, ConstructibleMachine] - id: WeaponEnergyTurretStation - name: security turret + id: WeaponEnergyTurretStationBase + name: sentry turret description: A high-tech autonomous weapons system designed to keep unauthorized personnel out of sensitive areas. components: - type: Fixtures @@ -72,8 +73,6 @@ - type: NpcFactionMember factions: - AllHostile - - type: AccessReader - access: [["Security"]] - type: ProjectileBatteryAmmoProvider proto: BulletEnergyTurretDisabler fireCost: 100 @@ -83,11 +82,6 @@ fireCost: 100 - proto: BulletEnergyTurretLaser fireCost: 100 - - type: TurretTargetSettings - exemptAccessLevels: - - Security - - Borg - - BasicSilicon - type: DeployableTurret retractedDamageModifierSetId: Metallic deployedDamageModifierSetId: FlimsyMetallic @@ -140,16 +134,13 @@ locked: true unlockOnClick: false - type: LockedWiresPanel - - type: Machine - board: WeaponEnergyTurretStationMachineCircuitboard - type: UseDelay delay: 1.2 - type: entity - parent: WeaponEnergyTurretStation + parent: WeaponEnergyTurretStationBase id: WeaponEnergyTurretAI - name: AI sentry turret - description: A high-tech autonomous weapons system under the direct control of a local artifical intelligence. + suffix: AI, Silicon components: - type: AccessReader access: [["StationAi"], ["ResearchDirector"]] @@ -163,3 +154,38 @@ receiveFrequencyId: TurretControlAI transmitFrequencyId: TurretAI +- type: entity + parent: WeaponEnergyTurretStationBase + id: WeaponEnergyTurretSecurity + suffix: Security + components: + - type: AccessReader + access: [["StationAi"], ["Security"]] + - type: TurretTargetSettings + exemptAccessLevels: + - Security + - Borg + - BasicSilicon + - type: Machine + board: WeaponEnergyTurretSecurityMachineCircuitboard + - type: DeviceNetwork + receiveFrequencyId: TurretControl + transmitFrequencyId: Turret + +- type: entity + parent: WeaponEnergyTurretStationBase + id: WeaponEnergyTurretCommand + suffix: Command + components: + - type: AccessReader + access: [["StationAi"], ["Command"]] + - type: TurretTargetSettings + exemptAccessLevels: + - Command + - Borg + - BasicSilicon + - type: Machine + board: WeaponEnergyTurretSecurityMachineCircuitboard + - type: DeviceNetwork + receiveFrequencyId: TurretControl + transmitFrequencyId: Turret diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 381423a16d..7927ce28e6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -98,6 +98,8 @@ map: [ "blade" ] - type: Item sprite: Objects/Weapons/Melee/e_sword-inhands.rsi + - type: StaticPrice + price: 2500 - type: entity name: energy dagger diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index 84a66d1836..993c7eb6ce 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -302,3 +302,5 @@ sprite: Objects/Weapons/Melee/throwing_knife.rsi - type: ThrowingAngle angle: 225 + - type: StaticPrice + price: 500 # 2000 for a set of 4 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 997d3f6e24..d034d31933 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -145,6 +145,8 @@ path: /Audio/Effects/minibombcountdown.ogg params: volume: 12 + - type: StaticPrice + price: 2000 - type: entity name: self destruct @@ -227,6 +229,8 @@ params: volume: 5 - type: DeleteOnTrigger + - type: StaticPrice + price: 1000 - type: entity name: whitehole grenade @@ -274,6 +278,8 @@ params: volume: 15 - type: DeleteOnTrigger + - type: StaticPrice + price: 1000 - type: entity name: the nuclear option @@ -369,6 +375,8 @@ - type: TimerTriggerVisuals primingSound: path: /Audio/Effects/countdown.ogg + - type: StaticPrice + price: 666 # 2000 for 3, I love fractions - type: entity name: holy hand grenade @@ -394,6 +402,8 @@ - type: TimerTriggerVisuals primingSound: path: /Audio/Effects/hallelujah.ogg + - type: StaticPrice + price: 10000 - type: entity parent: [ GrenadeBase, BaseSecurityContraband ] @@ -542,3 +552,5 @@ path: /Audio/Effects/minibombcountdown.ogg params: volume: 12 + - type: StaticPrice + price: 1000 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml index 41fad224c4..b6e235292c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml @@ -81,6 +81,8 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg" + - type: StaticPrice + price: 1500 - type: entity parent: [ProjectileGrenadeBase, BaseSyndicateContraband] @@ -107,3 +109,5 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg" + - type: StaticPrice + price: 1500 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml index 0b5f694964..8e3cb12717 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml @@ -98,6 +98,8 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Machines/door_lock_off.ogg" + - type: StaticPrice + price: 2500 - type: entity parent: [ScatteringGrenadeBase, BaseSyndicateContraband] @@ -145,6 +147,8 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Effects/flash_bang.ogg" + - type: StaticPrice + price: 1000 - type: entity parent: ScatteringGrenadeBase diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml index 36d9a41195..5aebde564c 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml @@ -51,7 +51,6 @@ - type: entity id: ChemDispenser - name: chemical dispenser suffix: Filled parent: ChemDispenserEmpty components: diff --git a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml index fce862c2e8..4be9aee0e5 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml @@ -35,6 +35,10 @@ containers: stash: !type:ContainerSlot {} - type: Pullable + - type: MultiHandedItem + - type: Item + sprite: Structures/Furniture/potted_plants.rsi + size: Huge - type: Damageable damageContainer: StructuralInorganic # The pot. Not the plant. Or is it plastic? - type: Destructible diff --git a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml index aac9edc25b..d533edaf32 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml @@ -129,6 +129,8 @@ totalIntensity: 4000.0 intensitySlope: 3 maxIntensity: 400 + - type: StaticPrice + price: 10000 # Good luck! - type: entity parent: SyndicateBomb diff --git a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml index 1a1712991a..95a1fba489 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml @@ -17,6 +17,8 @@ - type: ApcPowerReceiver powerLoad: 300 - type: StationAiVision + range: 1 + needsAnchoring: true - type: Sprite sprite: Structures/Machines/holopad.rsi drawdepth: HighFloorObjects diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index 7388a814f7..dda7d51b69 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -39,9 +39,9 @@ bounds: "-0.45,-0.45,0.45,0.45" density: 55 mask: - - TableMask + - MachineMask layer: - - TableLayer + - MachineLayer - type: Destructible thresholds: - trigger: @@ -92,6 +92,7 @@ - type: DisposalUnit - type: ThrowInsertContainer containerId: disposals + probability: 0.67 - type: UserInterface interfaces: enum.DisposalUnitUiKey.Key: diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index 0dc9ed5d1b..53e31a26c7 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -189,7 +189,8 @@ - type: entity parent: LockerBase id: LockerEvacRepair - name: evac repair locker + name: emergency shuttle emergency locker + description: It's emergencies all the way down. components: - type: Appearance - type: EntityStorageVisuals @@ -475,11 +476,8 @@ # Genpop Storage - type: entity - id: LockerPrisoner - parent: LockerBaseSecure - name: prisoner closet - description: It's a secure locker for an inmate's personal belongings during their time in prison. - suffix: 1 + id: GenpopBase + abstract: true components: - type: GenpopLocker - type: EntityStorageVisuals @@ -495,6 +493,19 @@ - type: Lock locked: false useAccess: false + - type: EntityStorage + open: True + removedMasks: 20 + - type: PlaceableSurface + isPlaceable: True + +- type: entity + parent: [ GenpopBase , LockerBaseSecure ] + id: LockerPrisoner + name: prisoner closet + description: It's a secure locker for an inmate's personal belongings during their time in prison. + suffix: 1 + components: - type: Fixtures fixtures: fix1: @@ -516,63 +527,58 @@ hard: True restitution: 0 friction: 0.4 - - type: EntityStorage - open: True - removedMasks: 20 - - type: PlaceableSurface - isPlaceable: True - type: entity - id: LockerPrisoner2 parent: LockerPrisoner + id: LockerPrisoner2 suffix: 2 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_2 - type: entity - id: LockerPrisoner3 parent: LockerPrisoner + id: LockerPrisoner3 suffix: 3 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_3 - type: entity - id: LockerPrisoner4 parent: LockerPrisoner + id: LockerPrisoner4 suffix: 4 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_4 - type: entity - id: LockerPrisoner5 parent: LockerPrisoner + id: LockerPrisoner5 suffix: 5 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_5 - type: entity - id: LockerPrisoner6 parent: LockerPrisoner + id: LockerPrisoner6 suffix: 6 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_6 - type: entity - id: LockerPrisoner7 parent: LockerPrisoner + id: LockerPrisoner7 suffix: 7 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_7 - type: entity - id: LockerPrisoner8 parent: LockerPrisoner + id: LockerPrisoner8 suffix: 8 components: - type: EntityStorageVisuals diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml index 6348fe4b15..4f245f238e 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml @@ -205,6 +205,11 @@ SheetSteel1: min: 1 max: 1 + - type: Appearance + - type: EntityStorageVisuals + stateBaseClosed: generic + stateDoorOpen: generic_open + stateDoorClosed: generic_door - type: Construction graph: ClosetWall node: done diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml index 2b5f57fd35..dca9fbc883 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml @@ -4,7 +4,6 @@ name: maintenance wall closet description: It's a storage unit. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -16,7 +15,6 @@ parent: BaseWallCloset description: It's a storage unit for emergency breath masks and O2 tanks. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: emergency stateDoorOpen: emergency_open @@ -28,7 +26,6 @@ name: emergency nitrogen wall closet description: It's full of life-saving equipment. Assuming, that is, that you breathe nitrogen. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: n2 stateDoorOpen: n2_open @@ -40,7 +37,6 @@ parent: BaseWallCloset description: It's a storage unit for fire-fighting supplies. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: fire stateDoorOpen: fire_open @@ -52,7 +48,6 @@ name: blue wall closet description: "A wardrobe packed with stylish blue clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -64,7 +59,6 @@ name: pink wall closet description: "A wardrobe packed with fabulous pink clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -76,7 +70,6 @@ name: black wall closet description: "A wardrobe packed with stylish black clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -88,7 +81,6 @@ name: green wall closet description: "A wardrobe packed with stylish green clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -99,7 +91,6 @@ parent: BaseWallCloset name: prison wall closet components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -111,7 +102,6 @@ name: yellow wall closet description: "A wardrobe packed with stylish yellow clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -123,7 +113,6 @@ name: white wall closet description: "A wardrobe packed with stylish white clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -135,7 +124,6 @@ name: grey wall closet description: "A wardrobe packed with a tide of grey clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -147,7 +135,6 @@ name: mixed wall closet description: "A wardrobe packed with a mix of colorful clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -158,7 +145,6 @@ parent: BaseWallCloset name: atmospherics wall closet components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -169,7 +155,6 @@ parent: BaseWallLocker name: medical wall locker components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: med stateDoorOpen: med_open @@ -186,12 +171,75 @@ - type: entity parent: BaseWallLocker id: LockerWallEvacRepair - name: evac repair wall locker + name: emergency shuttle emergency wall locker + description: It's emergencies all the way down. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: eng stateDoorOpen: eng_open stateDoorClosed: eng_evac_door - type: AccessReader access: [["Engineering"]] + +- type: entity + parent: [ GenpopBase , BaseWallLocker ] + id: LockerWallBasePrisoner + name: prisoner wall closet + description: It's a secure locker for an inmate's personal belongings during their time in prison. + suffix: 1 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner2 + suffix: 2 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_2 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner3 + suffix: 3 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_3 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner4 + suffix: 4 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_4 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner5 + suffix: 5 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_5 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner6 + suffix: 6 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_6 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner7 + suffix: 7 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_7 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner8 + suffix: 8 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_8 diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml index 95a3e74b1f..e65530509b 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml @@ -45,10 +45,11 @@ - Wallmount - type: entity + abstract: true parent: WeaponEnergyTurretControlPanelFrame - id: WeaponEnergyTurretStationControlPanel - name: security turret control panel - description: A wall-mounted interface for remotely configuring the operational parameters of linked security turrets. + id: WeaponEnergyTurretStationControlPanelBase + name: sentry turret control panel + description: A wall-mounted interface for remotely configuring the operational parameters of linked sentry turrets. components: - type: Appearance - type: Sprite @@ -79,13 +80,6 @@ 0: { state: stun } 1: { state: lethal } - type: StationAiWhitelist - - type: AccessReader - access: [["Security"]] - - type: TurretTargetSettings - exemptAccessLevels: - - Security - - Borg - - BasicSilicon - type: DeployableTurretController accessGroups: - Cargo @@ -172,10 +166,9 @@ # node: finish - type: entity - parent: WeaponEnergyTurretStationControlPanel + parent: WeaponEnergyTurretStationControlPanelBase id: WeaponEnergyTurretAIControlPanel - name: AI sentry turret control panel - description: A wall-mounted interface that allows a local artifical intelligence to adjust the operational parameters of linked sentry turrets. + suffix: AI, Silicon components: - type: AccessReader access: [["StationAi"], ["ResearchDirector"]] @@ -196,3 +189,37 @@ accessLevels: - BasicSilicon - Borg + +- type: entity + parent: WeaponEnergyTurretStationControlPanelBase + id: WeaponEnergyTurretSecurityControlPanel + suffix: Security + components: + - type: AccessReader + access: [["StationAi"], ["Security"]] + #- type: ContainerFill - Will be added in a later PR + # containers: + # board: + # - WeaponEnergyTurretSecurityControlPanelElectronics + - type: TurretTargetSettings + exemptAccessLevels: + - Security + - BasicSilicon + - Borg + +- type: entity + parent: WeaponEnergyTurretStationControlPanelBase + id: WeaponEnergyTurretCommandControlPanel + suffix: Command + components: + - type: AccessReader + access: [["StationAi"], ["Command"]] + #- type: ContainerFill - Will be added in a later PR + # containers: + # board: + # - WeaponEnergyTurretCommandControlPanelElectronics + - type: TurretTargetSettings + exemptAccessLevels: + - Command + - BasicSilicon + - Borg diff --git a/Resources/Prototypes/GameRules/cargo_gifts.yml b/Resources/Prototypes/GameRules/cargo_gifts.yml index f1af8046f7..090a7cd113 100644 --- a/Resources/Prototypes/GameRules/cargo_gifts.yml +++ b/Resources/Prototypes/GameRules/cargo_gifts.yml @@ -196,6 +196,7 @@ ArmorySmg: 1 ArmoryShotgun: 1 ArmoryLaser: 1 + ArmoryRifle: 1 - type: entity id: GiftsSecurityRiot diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index 9d8484e9f0..42ae9ba4b7 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -105,7 +105,7 @@ name: materials-cotton unit: materials-unit-boll icon: { sprite: Objects/Materials/materials.rsi, state: cotton } - color: "#cccccc" + color: "#cccccc" price: 0.01 #Who knew cotton was infinitely more valuable than silk - type: material @@ -135,6 +135,7 @@ - type: material id: Diamond + stackEntity: MaterialDiamond1 name: materials-diamond unit: materials-unit-piece icon: { sprite: Objects/Materials/materials.rsi, state: diamond } diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index ac39f2d725..2677fc0ed0 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -407,10 +407,10 @@ key: SeeingRainbows component: SeeingRainbows type: Add - time: 100 + time: 15 refresh: false - !type:Drunk - boozePower: 100 + boozePower: 15 - !type:PopupMessage type: Local messages: [ "frezon-lungs-cold" ] diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index fad428e19f..dd4393b77c 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -158,23 +158,18 @@ category: construction-category-clothing objectType: Item - #Sunrise-Start #If merge Scrap Armor PR Delete - type: construction - name: construction-graph-tag-scrap-armor id: scraparmor graph: scraparmor startNode: start targetNode: scraparmorfinished category: construction-category-clothing - description: construction-graph-tag-scrap-armor-desc objectType: Item - type: construction - name: construction-graph-tag-scrap-helmet id: scraphelmet graph: scraphelmet startNode: start targetNode: scraphelmet category: construction-category-clothing - description: construction-graph-tag-scrap-helmet-desc objectType: Item diff --git a/Resources/Prototypes/Recipes/Reactions/fun.yml b/Resources/Prototypes/Recipes/Reactions/fun.yml index 3b5d104b98..e49f4631cd 100644 --- a/Resources/Prototypes/Recipes/Reactions/fun.yml +++ b/Resources/Prototypes/Recipes/Reactions/fun.yml @@ -31,10 +31,8 @@ reactants: Fat: amount: 15 - TableSalt: - amount: 10 - Water: - amount: 10 + Saline: + amount: 25 effects: - !type:CreateEntityReactionEffect entity: Soap diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 8d7d497041..e6e6704f41 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -33,6 +33,9 @@ - type: Tag #Sunrise-Edit id: Apron #Sunrise-Edit +- type: Tag + id: Apron + - type: Tag id: Arrow @@ -1413,6 +1416,9 @@ - type: Tag #Sunrise-Edit id: UtilityBelt #Sunrise-Edit +- type: Tag + id: UtilityBelt + - type: Tag id: Vegetable diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-hamster.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-hamster.png new file mode 100644 index 0000000000..6dd728e8d7 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-hamster.png differ diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-reptilian.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-reptilian.png new file mode 100644 index 0000000000..764412f6f0 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-reptilian.png differ diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-vox.png new file mode 100644 index 0000000000..c46f7d0b4d Binary files /dev/null and b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK.png new file mode 100644 index 0000000000..e099f659f6 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/icon.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/icon.png new file mode 100644 index 0000000000..c78c671758 Binary files /dev/null and b/Resources/Textures/Clothing/Mask/mime_security.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/meta.json b/Resources/Textures/Clothing/Mask/mime_security.rsi/meta.json new file mode 100644 index 0000000000..88c9c1edcf --- /dev/null +++ b/Resources/Textures/Clothing/Mask/mime_security.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Reptilian edit by Nairod(Github). equipped-MASK-vox state taken from /vg/station at commit https://github.com/vgstation-coders/vgstation13/commit/4638130fab5ff0e9faa220688811349d3297a33e. Security edit by Hitlinemoss, based on secglasses.rsi and clown_security.rsi.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + }, + { + "name": "equipped-MASK-hamster", + "directions": 4 + }, + { + "name": "equipped-MASK-reptilian", + "directions": 4 + }, + { + "name": "equipped-MASK-vox", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-left.png new file mode 100644 index 0000000000..2a24461a11 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-right.png new file mode 100644 index 0000000000..c14d1fa694 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-left.png new file mode 100644 index 0000000000..4c60a5d3b5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-right.png new file mode 100644 index 0000000000..29ab0374b9 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-left.png new file mode 100644 index 0000000000..d22c1529a7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-right.png new file mode 100644 index 0000000000..12515705d2 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-left.png new file mode 100644 index 0000000000..7409f2f826 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-right.png new file mode 100644 index 0000000000..ef39ab4dfc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-left.png new file mode 100644 index 0000000000..7409f2f826 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-right.png new file mode 100644 index 0000000000..ef39ab4dfc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-left.png new file mode 100644 index 0000000000..9f45b8f7c1 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-right.png new file mode 100644 index 0000000000..518ac6518f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json index 1d7e8a01a5..001278b0d0 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, Spicy Rock Pizza modified from margherita pizza by mkanke, cotton made by mlexf (discord 1143460554963427380), world peazza modified from margherita by MisterImp (GitHub)", + "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, Spicy Rock Pizza modified from margherita pizza by mkanke, cotton made by mlexf (discord 1143460554963427380), world peazza modified from margherita by MisterImp (GitHub). Inhands ported over from Starlight at https://github.com/ss14Starlight/space-station-14/pull/72 with edits by Orsoniks.", "size": { "x": 32, "y": 32 @@ -19,6 +19,14 @@ { "name": "arnold-slice" }, + { + "name": "arnold-slice-inhand-right", + "directions": 4 + }, + { + "name": "arnold-slice-inhand-left", + "directions": 4 + }, { "name": "base-1" }, @@ -49,39 +57,95 @@ { "name": "cotton-slice" }, + { + "name": "cotton-slice-inhand-right", + "directions": 4 + }, + { + "name": "cotton-slice-inhand-left", + "directions": 4 + }, { "name": "dank" }, { "name": "dank-slice" }, + { + "name": "dank-slice-inhand-right", + "directions": 4 + }, + { + "name": "dank-slice-inhand-left", + "directions": 4 + }, { "name": "donkpocket" }, { "name": "donkpocket-slice" }, + { + "name": "donkpocket-slice-inhand-right", + "directions": 4 + }, + { + "name": "donkpocket-slice-inhand-left", + "directions": 4 + }, { "name": "meat" }, { "name": "meat-slice" }, + { + "name": "meat-slice-inhand-right", + "directions": 4 + }, + { + "name": "meat-slice-inhand-left", + "directions": 4 + }, { "name": "moldy-slice" }, + { + "name": "moldy-slice-inhand-right", + "directions": 4 + }, + { + "name": "moldy-slice-inhand-left", + "directions": 4 + }, { "name": "mushroom" }, { "name": "mushroom-slice" }, + { + "name": "mushroom-slice-inhand-right", + "directions": 4 + }, + { + "name": "mushroom-slice-inhand-left", + "directions": 4 + }, { "name": "pineapple" }, { "name": "pineapple-slice" }, + { + "name": "pineapple-slice-inhand-right", + "directions": 4 + }, + { + "name": "pineapple-slice-inhand-left", + "directions": 4 + }, { "name": "box" }, @@ -124,18 +188,42 @@ { "name": "margherita-slice" }, + { + "name": "margherita-slice-inhand-right", + "directions": 4 + }, + { + "name": "margherita-slice-inhand-left", + "directions": 4 + }, { "name": "sassysage" }, { "name": "sassysage-slice" }, + { + "name": "sassysage-slice-inhand-right", + "directions": 4 + }, + { + "name": "sassysage-slice-inhand-left", + "directions": 4 + }, { "name": "vegetable" }, { "name": "vegetable-slice" }, + { + "name": "vegetable-slice-inhand-right", + "directions": 4 + }, + { + "name": "vegetable-slice-inhand-left", + "directions": 4 + }, { "name": "box-inhand-right", "directions": 4 @@ -150,11 +238,27 @@ { "name": "uranium-slice" }, + { + "name": "uranium-slice-inhand-right", + "directions": 4 + }, + { + "name": "uranium-slice-inhand-left", + "directions": 4 + }, { "name": "worldpeas" }, { "name": "worldpeas-slice" + }, + { + "name": "worldpeas-slice-inhand-right", + "directions": 4 + }, + { + "name": "worldpeas-slice-inhand-left", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-left.png new file mode 100644 index 0000000000..43858c46d7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-right.png new file mode 100644 index 0000000000..94cbc718fa Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-left.png new file mode 100644 index 0000000000..5525da5839 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-right.png new file mode 100644 index 0000000000..3ad3b62258 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-left.png new file mode 100644 index 0000000000..7409f2f826 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-right.png new file mode 100644 index 0000000000..ef39ab4dfc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-left.png new file mode 100644 index 0000000000..9f45b8f7c1 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-right.png new file mode 100644 index 0000000000..518ac6518f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-left.png new file mode 100644 index 0000000000..14d1ea6b7d Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-right.png new file mode 100644 index 0000000000..6d83d341c3 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-left.png new file mode 100644 index 0000000000..739e20b5fc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-right.png new file mode 100644 index 0000000000..e905eb9f9d Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-left.png new file mode 100644 index 0000000000..909f1d4536 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-right.png new file mode 100644 index 0000000000..96b92d8dfc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-left.png new file mode 100644 index 0000000000..4030f859b5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-right.png new file mode 100644 index 0000000000..52f32793af Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json index 2e8d13abd4..e076f72f17 100644 --- a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and baystation and modified by potato1234x at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 and https://github.com/Baystation12/Baystation12/commit/a6067826de7fd8f698793f6d84e6c2f1f9b1f188. Tofu and tofu-slice were created by Discord user rosysyntax#6514. Chevrelog and chevredisk created by Github user deathride58, tortilladough tortillaflat and tortillaslice added by Phunny, butter-slice and croissant-raw taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380). Croissant-raw-cotton, cotton-dough-slice and cotton-dough-rope by JuneSzalkowska, cloth-box by Janet Blackquill 2024", + "copyright": "Taken from tgstation and baystation and modified by potato1234x at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 and https://github.com/Baystation12/Baystation12/commit/a6067826de7fd8f698793f6d84e6c2f1f9b1f188. Tofu and tofu-slice were created by Discord user rosysyntax#6514. Chevrelog and chevredisk created by Github user deathride58, tortilladough tortillaflat and tortillaslice added by Phunny, butter-slice and croissant-raw taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380). Croissant-raw-cotton, cotton-dough-slice and cotton-dough-rope by JuneSzalkowska, cloth-box by Janet Blackquill 2024. Cheese wedge inhand by Orsoniks.", "size": { "x": 32, "y": 32 @@ -19,6 +19,14 @@ { "name": "cheesewedge" }, + { + "name": "cheesewedge-inhand-right", + "directions": 4 + }, + { + "name": "cheesewedge-inhand-left", + "directions": 4 + }, { "name": "cheesewheel" }, diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-left.png new file mode 100644 index 0000000000..646d4493c2 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-right.png new file mode 100644 index 0000000000..fe3598f363 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-left.png new file mode 100644 index 0000000000..f109234494 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-right.png new file mode 100644 index 0000000000..ec9442165b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-left.png new file mode 100644 index 0000000000..cf963cb825 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-right.png new file mode 100644 index 0000000000..47a115bb85 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-left.png new file mode 100644 index 0000000000..753fe230eb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-right.png new file mode 100644 index 0000000000..d03ffcf3d9 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json index 1c3f950180..1707edb5d9 100644 --- a/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by Swept, potato1234x and deltanedas at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, snail by IproduceWidgets (github) and Kezu (discord), anomalymeat/cooked by august-sun, dragoncutlet, dragoncutlet_veins, dragoncutlet-cooked and dragon-cooked by JuneSzalkowska (discord), raw and cooked patty taken from tgstation at https://github.com/tgstation/tgstation/commit/b83c7deee4c91df4de130db242facce20308aa8a", + "copyright": "Taken from tgstation and modified by Swept, potato1234x and deltanedas at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, snail by IproduceWidgets (github) and Kezu (discord), anomalymeat/cooked by august-sun, dragoncutlet, dragoncutlet_veins, dragoncutlet-cooked and dragon-cooked by JuneSzalkowska (discord), raw and cooked patty taken from tgstation at https://github.com/tgstation/tgstation/commit/b83c7deee4c91df4de130db242facce20308aa8a. A lot of inhands by Orsoniks.", "size": { "x": 32, "y": 32 @@ -46,6 +46,14 @@ { "name": "corgi" }, + { + "name": "corgi-inhand-right", + "directions": 4 + }, + { + "name": "corgi-inhand-left", + "directions": 4 + }, { "name": "crab" }, @@ -105,9 +113,33 @@ { "name": "plain" }, + { + "name": "plain-inhand-right", + "directions": 4 + }, + { + "name": "plain-inhand-left", + "directions": 4 + }, { "name": "plain-cooked" }, + { + "name": "plain-cooked-inhand-right", + "directions": 4 + }, + { + "name": "plain-cooked-inhand-left", + "directions": 4 + }, + { + "name": "generic-pink-inhand-right", + "directions": 4 + }, + { + "name": "generic-pink-inhand-left", + "directions": 4 + }, { "name": "plant" }, @@ -144,14 +176,38 @@ ] ] }, + { + "name": "rotten-inhand-right", + "directions": 4 + }, + { + "name": "rotten-inhand-left", + "directions": 4 + }, { "name": "salami-slice" }, { "name": "sausage" }, + { + "name": "sausage-inhand-right", + "directions": 4 + }, + { + "name": "sausage-inhand-left", + "directions": 4 + }, { "name": "slime" + }, + { + "name": "slime-inhand-right", + "directions": 4 + }, + { + "name": "slime-inhand-left", + "directions": 4 }, { "name": "snail" @@ -162,9 +218,25 @@ { "name": "snake" }, + { + "name": "snake-inhand-right", + "directions": 4 + }, + { + "name": "snake-inhand-left", + "directions": 4 + }, { "name": "spider" }, + { + "name": "spider-inhand-right", + "directions": 4 + }, + { + "name": "spider-inhand-left", + "directions": 4 + }, { "name": "spidercutlet" }, @@ -180,6 +252,14 @@ { "name": "tomato" }, + { + "name": "tomato-inhand-right", + "directions": 4 + }, + { + "name": "tomato-inhand-left", + "directions": 4 + }, { "name": "xeno" }, @@ -191,6 +271,14 @@ }, { "name": "dragon" + }, + { + "name": "dragon-inhand-right", + "directions": 4 + }, + { + "name": "dragon-inhand-left", + "directions": 4 }, { "name": "dragon_veins" @@ -210,6 +298,14 @@ { "name": "dragon-cooked" }, + { + "name": "dragon-cooked-inhand-right", + "directions": 4 + }, + { + "name": "dragon-cooked-inhand-left", + "directions": 4 + }, { "name": "dragoncutlet" }, diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-left.png new file mode 100644 index 0000000000..606c4735e3 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-right.png new file mode 100644 index 0000000000..fc5e859b62 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-left.png new file mode 100644 index 0000000000..327166f65f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-right.png new file mode 100644 index 0000000000..a936c47a32 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-left.png new file mode 100644 index 0000000000..d8464b2b0b Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-right.png new file mode 100644 index 0000000000..12aa9bf8f3 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-left.png new file mode 100644 index 0000000000..9dad23a620 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-right.png new file mode 100644 index 0000000000..9033e06b04 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-left.png new file mode 100644 index 0000000000..8e11d16f61 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-right.png new file mode 100644 index 0000000000..75d18f03e0 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-left.png new file mode 100644 index 0000000000..40b036e5f5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-right.png new file mode 100644 index 0000000000..f55721691f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-left.png new file mode 100644 index 0000000000..64765a9887 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-right.png new file mode 100644 index 0000000000..baf1fb1f6f Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-left.png new file mode 100644 index 0000000000..45af53e06e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-right.png new file mode 100644 index 0000000000..86d14f1712 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/plates.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/plates.rsi/meta.json index e1d8337bc9..0ea1e6c4f7 100644 --- a/Resources/Textures/Objects/Consumable/Food/plates.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/plates.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa. Muffin-tin sprite modified from the original tin sprite by RumiTiger", + "copyright": "Taken from tgstation and modified by Swept at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa. Muffin-tin sprite modified from the original tin sprite by RumiTiger. Plate inhand by Orsoniks.", "size": { "x": 32, "y": 32 @@ -10,6 +10,22 @@ { "name": "plate" }, + { + "name": "plate-inhand-right", + "directions": 4 + }, + { + "name": "plate-inhand-left", + "directions": 4 + }, + { + "name": "plate-plastic-inhand-right", + "directions": 4 + }, + { + "name": "plate-plastic-inhand-left", + "directions": 4 + }, { "name": "plate-trash" }, diff --git a/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-left.png new file mode 100644 index 0000000000..c23e89ed33 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-right.png new file mode 100644 index 0000000000..29c37092aa Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-left.png new file mode 100644 index 0000000000..90f7465630 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-right.png new file mode 100644 index 0000000000..dfb6e2ffae Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-left.png new file mode 100644 index 0000000000..a7ae2864ae Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-right.png new file mode 100644 index 0000000000..d6e105e6cb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-left.png new file mode 100644 index 0000000000..601a6b5998 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-right.png new file mode 100644 index 0000000000..4edc0c0d0c Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-left.png new file mode 100644 index 0000000000..b9e2014ecb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-right.png new file mode 100644 index 0000000000..94dcb77cca Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-left.png new file mode 100644 index 0000000000..aa44de696e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-right.png new file mode 100644 index 0000000000..d8f490c222 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-left.png new file mode 100644 index 0000000000..227a4bc3e7 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-right.png new file mode 100644 index 0000000000..5499ed5bcb Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-left.png new file mode 100644 index 0000000000..0c0cb66e64 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-right.png new file mode 100644 index 0000000000..fb18c78ea5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-left.png new file mode 100644 index 0000000000..e608b13df1 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-right.png new file mode 100644 index 0000000000..294dd9a6e9 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-left.png new file mode 100644 index 0000000000..104e306be2 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-right.png new file mode 100644 index 0000000000..6ec077df0d Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-left.png new file mode 100644 index 0000000000..717b7f98f4 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-right.png new file mode 100644 index 0000000000..d7581beb61 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-left.png new file mode 100644 index 0000000000..af3d78b086 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-right.png new file mode 100644 index 0000000000..864a9e04a1 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/meta.json index 4ff3230cae..da7c3e965e 100644 --- a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/snacks.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, chinese from paradise, ticket by peptide, cnds-trash based on boritos-trash and syndicakes modified by potato1234x, ramen from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, chinese from paradise, ticket by peptide, cnds-trash based on boritos-trash and syndicakes modified by potato1234x, ramen from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi. Some inhands by Orsoniks.", "size": { "x": 32, "y": 32 @@ -10,24 +10,72 @@ { "name": "ramen" }, + { + "name": "ramen-inhand-right", + "directions": 4 + }, + { + "name": "ramen-inhand-left", + "directions": 4 + }, + { + "name": "trash-inhand-right", + "directions": 4 + }, + { + "name": "trash-inhand-left", + "directions": 4 + }, { "name": "boritos" }, + { + "name": "boritos-inhand-right", + "directions": 4 + }, + { + "name": "boritos-inhand-left", + "directions": 4 + }, { "name": "boritos-trash" }, { "name": "cheesiehonkers" }, + { + "name": "cheesiehonkers-inhand-right", + "directions": 4 + }, + { + "name": "cheesiehonkers-inhand-left", + "directions": 4 + }, { "name": "cheesiehonkers-trash" }, { "name": "chinese1" }, + { + "name": "chinese1-inhand-right", + "directions": 4 + }, + { + "name": "chinese1-inhand-left", + "directions": 4 + }, { "name": "chinese2" }, + { + "name": "chinese2-inhand-right", + "directions": 4 + }, + { + "name": "chinese2-inhand-left", + "directions": 4 + }, { "name": "chinese3" }, @@ -37,6 +85,14 @@ { "name": "chips" }, + { + "name": "chips-inhand-right", + "directions": 4 + }, + { + "name": "chips-inhand-left", + "directions": 4 + }, { "name": "chips-trash" }, @@ -57,39 +113,111 @@ "name": "chocolatebar-inhand-left", "directions": 4 }, + { + "name": "chocolatebar-open-inhand-right", + "directions": 4 + }, + { + "name": "chocolatebar-open-inhand-left", + "directions": 4 + }, { "name": "cnds" }, + { + "name": "cnds-inhand-right", + "directions": 4 + }, + { + "name": "cnds-inhand-left", + "directions": 4 + }, { "name": "cnds-trash" }, { "name": "cookie_fortune" }, + { + "name": "cookie_fortune-inhand-right", + "directions": 4 + }, + { + "name": "cookie_fortune-inhand-left", + "directions": 4 + }, { "name": "energybar" }, + { + "name": "energybar-inhand-right", + "directions": 4 + }, + { + "name": "energybar-inhand-left", + "directions": 4 + }, { "name": "energybar-open" }, + { + "name": "energybar-open-inhand-right", + "directions": 4 + }, + { + "name": "energybar-open-inhand-left", + "directions": 4 + }, { "name": "energybar-trash" }, { "name": "mre-brownie" }, + { + "name": "mre-brownie-inhand-right", + "directions": 4 + }, + { + "name": "mre-brownie-inhand-left", + "directions": 4 + }, { "name": "mre-brownie-open" }, + { + "name": "mre-brownie-open-inhand-right", + "directions": 4 + }, + { + "name": "mre-brownie-open-inhand-left", + "directions": 4 + }, { "name": "mre-wrapper" }, { "name": "nutribrick" }, + { + "name": "nutribrick-inhand-right", + "directions": 4 + }, + { + "name": "nutribrick-inhand-left", + "directions": 4 + }, { "name": "nutribrick-open" }, + { + "name": "nutribrick-open-inhand-right", + "directions": 4 + }, + { + "name": "nutribrick-open-inhand-left", + "directions": 4 + }, { "name": "packet-inhand-right", "directions": 4 @@ -101,6 +229,14 @@ { "name": "pistachio" }, + { + "name": "pistachio-inhand-right", + "directions": 4 + }, + { + "name": "pistachio-inhand-left", + "directions": 4 + }, { "name": "pistachio-trash" }, @@ -121,24 +257,56 @@ { "name": "raisins" }, + { + "name": "raisins-inhand-right", + "directions": 4 + }, + { + "name": "raisins-inhand-left", + "directions": 4 + }, { "name": "raisins-trash" }, { "name": "semki" }, + { + "name": "semki-inhand-right", + "directions": 4 + }, + { + "name": "semki-inhand-left", + "directions": 4 + }, { "name": "semki-trash" }, { "name": "susjerky" }, + { + "name": "susjerky-inhand-right", + "directions": 4 + }, + { + "name": "susjerky-inhand-left", + "directions": 4 + }, { "name": "susjerky-trash" }, { "name": "syndicakes" }, + { + "name": "syndicakes-inhand-right", + "directions": 4 + }, + { + "name": "syndicakes-inhand-left", + "directions": 4 + }, { "name": "syndicakes-trash" }, diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-left.png new file mode 100644 index 0000000000..acdae87b0e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-right.png new file mode 100644 index 0000000000..ec1361b04e Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-left.png new file mode 100644 index 0000000000..171afe264c Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-right.png new file mode 100644 index 0000000000..4c2d714c1c Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-left.png new file mode 100644 index 0000000000..d9a52b4814 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-right.png new file mode 100644 index 0000000000..514f594f10 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-left.png new file mode 100644 index 0000000000..bc02823c28 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-right.png new file mode 100644 index 0000000000..6ffaa9b172 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-left.png new file mode 100644 index 0000000000..37d18c28e9 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-right.png new file mode 100644 index 0000000000..e075f11d7a Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-left.png new file mode 100644 index 0000000000..aaf75a0834 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-right.png new file mode 100644 index 0000000000..3cc8d5d7cc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-left.png new file mode 100644 index 0000000000..20b21955ce Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-right.png new file mode 100644 index 0000000000..a1a87b9bd4 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-left.png new file mode 100644 index 0000000000..af33c72bfc Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-right.png new file mode 100644 index 0000000000..7524a473ee Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-left.png new file mode 100644 index 0000000000..977064f4f2 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-right.png new file mode 100644 index 0000000000..47da4c77b5 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-left.png new file mode 100644 index 0000000000..1d850892ba Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-right.png new file mode 100644 index 0000000000..1de32666ea Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-right.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-left.png new file mode 100644 index 0000000000..f2437fe612 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-left.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-right.png new file mode 100644 index 0000000000..507d25f031 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-right.png differ diff --git a/Resources/Textures/Objects/Misc/landmine.rsi/landmine-inactive.png b/Resources/Textures/Objects/Misc/landmine.rsi/landmine-inactive.png deleted file mode 100644 index dcc68ec28b..0000000000 Binary files a/Resources/Textures/Objects/Misc/landmine.rsi/landmine-inactive.png and /dev/null differ diff --git a/Resources/Textures/Objects/Misc/landmine.rsi/landmine-unshaded.png b/Resources/Textures/Objects/Misc/landmine.rsi/landmine-unshaded.png new file mode 100644 index 0000000000..25aa1bb1d8 Binary files /dev/null and b/Resources/Textures/Objects/Misc/landmine.rsi/landmine-unshaded.png differ diff --git a/Resources/Textures/Objects/Misc/landmine.rsi/landmine.png b/Resources/Textures/Objects/Misc/landmine.rsi/landmine.png index 1a95e1c373..1889629c51 100644 Binary files a/Resources/Textures/Objects/Misc/landmine.rsi/landmine.png and b/Resources/Textures/Objects/Misc/landmine.rsi/landmine.png differ diff --git a/Resources/Textures/Objects/Misc/landmine.rsi/meta.json b/Resources/Textures/Objects/Misc/landmine.rsi/meta.json index 3e9740d445..12e4a1d696 100644 --- a/Resources/Textures/Objects/Misc/landmine.rsi/meta.json +++ b/Resources/Textures/Objects/Misc/landmine.rsi/meta.json @@ -5,20 +5,20 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/b764f0e8c3004ad5e7726e7ff27a52a0c893beff/icons/obj/weapons/grenade.dmi", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/b764f0e8c3004ad5e7726e7ff27a52a0c893beff/icons/obj/weapons/grenade.dmi, modified by spanky-spanky (GitHub)", "states": [ { - "name": "landmine", + "name": "landmine" + }, + { + "name": "landmine-unshaded", "delays": [ [ - 0.4, + 0.75, 0.15, 0.1 ] ] - }, - { - "name": "landmine-inactive" } ] } diff --git a/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-left.png b/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-left.png new file mode 100644 index 0000000000..cb3b20778c Binary files /dev/null and b/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-left.png differ diff --git a/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-right.png b/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-right.png new file mode 100644 index 0000000000..cb3b20778c Binary files /dev/null and b/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-right.png differ diff --git a/Resources/Textures/Structures/Furniture/potted_plants.rsi/meta.json b/Resources/Textures/Structures/Furniture/potted_plants.rsi/meta.json index 19f57fd672..747117a5d0 100644 --- a/Resources/Textures/Structures/Furniture/potted_plants.rsi/meta.json +++ b/Resources/Textures/Structures/Furniture/potted_plants.rsi/meta.json @@ -1,13 +1,21 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation, plant-26 made by Fazansen(https://github.com/Fazansen)", + "copyright": "Taken from tgstation, plant-26 made by Fazansen(https://github.com/Fazansen), inhand-left and right made by Xeri(https://github.com/Xeri7)", "size": { "x": 32, "y": 32 }, "states": [ - { + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { "name": "random", "delays": [ [ @@ -269,4 +277,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png new file mode 100644 index 0000000000..530eb5f149 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png new file mode 100644 index 0000000000..2de76478ce Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png new file mode 100644 index 0000000000..c2e82b1f42 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png new file mode 100644 index 0000000000..d3b8adf01f Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png new file mode 100644 index 0000000000..a553c10ccd Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png new file mode 100644 index 0000000000..589f524ef0 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png new file mode 100644 index 0000000000..2a0949de4a Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png new file mode 100644 index 0000000000..5d865d58a8 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png new file mode 100644 index 0000000000..da6e8b06a7 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png new file mode 100644 index 0000000000..c74a11bd52 Binary files /dev/null and b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png differ diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json b/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json index 18a7b2065c..f5b67de849 100644 --- a/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json +++ b/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json @@ -1,44 +1,140 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from shiptest at commmit https://github.com/shiptest-ss13/Shiptest/commit/440a15fb476a20d77ba28c1fe315c1b659032ce8, edited by Alekshhh, N2 lockers edited by Lamrr, Evac lockers by EmoGarbage404 (GitHub)", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { "name": "atmos_door" }, - { "name": "black_door" }, - { "name": "blue_door" }, - { "name": "emergency" }, - { "name": "emergency_door" }, - { "name": "emergency_open" }, - { "name": "fire" }, - { "name": "fire_door" }, - { "name": "fire_open" }, - { "name": "generic" }, - { "name": "generic_door" }, - { "name": "generic_icon" }, - { "name": "generic_open" }, - { "name": "gray_door" }, - { "name": "green_door" }, - { "name": "locked" }, - { "name": "med" }, - { "name": "med_door" }, - { "name": "med_open" }, - { "name": "mixed_door" }, - { "name": "n2" }, - { "name": "n2_door" }, - { "name": "n2_open" }, - { "name": "orange_door" }, - { "name": "pink_door" }, - { "name": "red_door" }, - { "name": "unlocked" }, - { "name": "welded" }, - { "name": "white_door" }, - { "name": "yellow_door" }, - { "name": "eng" }, - { "name": "eng_open" }, - { "name": "eng_evac_door" } - ] + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from shiptest at commmit https://github.com/shiptest-ss13/Shiptest/commit/440a15fb476a20d77ba28c1fe315c1b659032ce8, edited by Alekshhh, N2 lockers edited by Lamrr, Evac lockers by EmoGarbage404 (GitHub), genpop* derived from Wizards Den SS14 by K-Dynamic (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "atmos_door" + }, + { + "name": "black_door" + }, + { + "name": "blue_door" + }, + { + "name": "emergency" + }, + { + "name": "emergency_door" + }, + { + "name": "emergency_open" + }, + { + "name": "fire" + }, + { + "name": "fire_door" + }, + { + "name": "fire_open" + }, + { + "name": "generic" + }, + { + "name": "generic_door" + }, + { + "name": "generic_icon" + }, + { + "name": "generic_open" + }, + { + "name": "gray_door" + }, + { + "name": "green_door" + }, + { + "name": "locked" + }, + { + "name": "med" + }, + { + "name": "med_door" + }, + { + "name": "med_open" + }, + { + "name": "mixed_door" + }, + { + "name": "n2" + }, + { + "name": "n2_door" + }, + { + "name": "n2_open" + }, + { + "name": "orange_door" + }, + { + "name": "pink_door" + }, + { + "name": "red_door" + }, + { + "name": "unlocked" + }, + { + "name": "welded" + }, + { + "name": "white_door" + }, + { + "name": "yellow_door" + }, + { + "name": "eng" + }, + { + "name": "eng_open" + }, + { + "name": "eng_evac_door" + }, + { + "name": "genpop" + }, + { + "name": "genpop_open" + }, + { + "name": "genpop_door_1" + }, + { + "name": "genpop_door_2" + }, + { + "name": "genpop_door_3" + }, + { + "name": "genpop_door_4" + }, + { + "name": "genpop_door_5" + }, + { + "name": "genpop_door_6" + }, + { + "name": "genpop_door_7" + }, + { + "name": "genpop_door_8" + } + ] } diff --git a/Resources/migration.yml b/Resources/migration.yml index 3100b1d1a2..5d877e1f91 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -644,6 +644,11 @@ ClothingNeckCloakMiner: null MatterBinStockPart: MicroManipulatorStockPart CapacitorStockPart: MicroManipulatorStockPart +# 2025-05-26 Turrets +WeaponEnergyTurretStation: WeaponEnergyTurretSecurity +WeaponEnergyTurretStationControlPanel: WeaponEnergyTurretSecurityControlPanel +WeaponEnergyTurretStationMachineCircuitboard: WeaponEnergyTurretSecurityMachineCircuitboard + # 2025-05-30 SpawnHonkBot: SpawnMobHonkBot