diff --git a/Content.Client/Labels/EntitySystems/LabelSystem.cs b/Content.Client/Labels/EntitySystems/LabelSystem.cs deleted file mode 100644 index baa9f7fee7..0000000000 --- a/Content.Client/Labels/EntitySystems/LabelSystem.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Content.Shared.Labels.EntitySystems; - -namespace Content.Client.Labels; - -public sealed partial class LabelSystem : SharedLabelSystem -{ -} diff --git a/Content.Client/Silicons/Borgs/BorgSelectTypeUserInterface.cs b/Content.Client/Silicons/Borgs/BorgSelectTypeUserInterface.cs index 8c76fade8c..69a55dd38b 100644 --- a/Content.Client/Silicons/Borgs/BorgSelectTypeUserInterface.cs +++ b/Content.Client/Silicons/Borgs/BorgSelectTypeUserInterface.cs @@ -25,6 +25,6 @@ public sealed class BorgSelectTypeUserInterface : BoundUserInterface base.Open(); _menu = this.CreateWindow(); - _menu.ConfirmedBorgType += prototype => SendMessage(new BorgSelectTypeMessage(prototype)); + _menu.ConfirmedBorgType += prototype => SendPredictedMessage(new BorgSelectTypeMessage(prototype)); } } diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index 5dbafae5af..2661ed479c 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -22,10 +22,10 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; -using Content.Server.Labels.Components; using Content.Shared.Administration.Logs; using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; +using Content.Shared.Labels.Components; namespace Content.Server.Botany.Systems; @@ -45,8 +45,7 @@ public sealed class PlantHolderSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; - - + public const float HydroponicsSpeedMultiplier = 1f; public const float HydroponicsConsumptionMultiplier = 2f; diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs index 7f74fe269d..c938c6fa50 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs @@ -1,7 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Cargo.Components; -using Content.Server.Labels; using Content.Server.NameIdentifier; using Content.Shared.Access.Components; using Content.Shared.Cargo; @@ -9,6 +8,7 @@ using Content.Shared.Cargo.Components; using Content.Shared.Cargo.Prototypes; using Content.Shared.Database; using Content.Shared.IdentityManagement; +using Content.Shared.Labels.EntitySystems; using Content.Shared.NameIdentifier; using Content.Shared.Paper; using Content.Shared.Stacks; diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index 776443425f..97a36599aa 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.Cargo.Components; -using Content.Server.Labels.Components; using Content.Server.Station.Components; using Content.Shared.Cargo; using Content.Shared.Cargo.BUI; @@ -11,6 +10,7 @@ using Content.Shared.Database; using Content.Shared.Emag.Systems; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; +using Content.Shared.Labels.Components; using Content.Shared.Paper; using Robust.Shared.Audio; using Robust.Shared.Map; diff --git a/Content.Server/CartridgeLoader/Cartridges/LogProbeCartridgeSystem.cs b/Content.Server/CartridgeLoader/Cartridges/LogProbeCartridgeSystem.cs index ac5c0baa54..75b6b44636 100644 --- a/Content.Server/CartridgeLoader/Cartridges/LogProbeCartridgeSystem.cs +++ b/Content.Server/CartridgeLoader/Cartridges/LogProbeCartridgeSystem.cs @@ -23,7 +23,7 @@ public sealed class LogProbeCartridgeSystem : EntitySystem [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; - [Dependency] private readonly SharedLabelSystem _label = default!; + [Dependency] private readonly LabelSystem _label = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly PaperSystem _paper = default!; diff --git a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs index dd97bfa8f6..6e2e2a91bc 100644 --- a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs @@ -1,5 +1,4 @@ using Content.Server.Chemistry.Components; -using Content.Server.Labels; using Content.Server.Popups; using Content.Server.Storage.EntitySystems; using Content.Shared.Administration.Logs; @@ -10,6 +9,7 @@ using Content.Shared.Chemistry.Reagent; using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; using Content.Shared.FixedPoint; +using Content.Shared.Labels.EntitySystems; using Content.Shared.Storage; using JetBrains.Annotations; using Robust.Server.Audio; diff --git a/Content.Server/Cloning/CloningSystem.Subscriptions.cs b/Content.Server/Cloning/CloningSystem.Subscriptions.cs index 659d9a1ea1..eba806ceb8 100644 --- a/Content.Server/Cloning/CloningSystem.Subscriptions.cs +++ b/Content.Server/Cloning/CloningSystem.Subscriptions.cs @@ -25,7 +25,7 @@ namespace Content.Server.Cloning; public sealed partial class CloningSystem : EntitySystem { [Dependency] private readonly SharedStackSystem _stack = default!; - [Dependency] private readonly SharedLabelSystem _label = default!; + [Dependency] private readonly LabelSystem _label = default!; [Dependency] private readonly ForensicsSystem _forensics = default!; [Dependency] private readonly PaperSystem _paper = default!; diff --git a/Content.Server/Delivery/DeliverySystem.cs b/Content.Server/Delivery/DeliverySystem.cs index 8ac8722821..8d2052733e 100644 --- a/Content.Server/Delivery/DeliverySystem.cs +++ b/Content.Server/Delivery/DeliverySystem.cs @@ -23,7 +23,7 @@ public sealed partial class DeliverySystem : SharedDeliverySystem [Dependency] private readonly StationRecordsSystem _records = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly FingerprintReaderSystem _fingerprintReader = default!; - [Dependency] private readonly SharedLabelSystem _label = default!; + [Dependency] private readonly LabelSystem _label = default!; [Dependency] private readonly SharedContainerSystem _container = default!; public override void Initialize() diff --git a/Content.Server/Fax/FaxSystem.cs b/Content.Server/Fax/FaxSystem.cs index 180689f892..1ac7bd23ca 100644 --- a/Content.Server/Fax/FaxSystem.cs +++ b/Content.Server/Fax/FaxSystem.cs @@ -4,7 +4,6 @@ using Content.Server.Chat.Managers; using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Systems; -using Content.Server.Labels; using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Tools; @@ -20,6 +19,7 @@ using Content.Shared.Fax.Systems; using Content.Shared.Fax.Components; using Content.Shared.Interaction; using Content.Shared.Labels.Components; +using Content.Shared.Labels.EntitySystems; using Content.Shared.Mobs.Components; using Content.Shared.Paper; using Robust.Server.GameObjects; diff --git a/Content.Server/Forensics/Systems/ForensicPadSystem.cs b/Content.Server/Forensics/Systems/ForensicPadSystem.cs index 846d72a9fa..2841f36b00 100644 --- a/Content.Server/Forensics/Systems/ForensicPadSystem.cs +++ b/Content.Server/Forensics/Systems/ForensicPadSystem.cs @@ -1,4 +1,3 @@ -using Content.Server.Labels; using Content.Server.Popups; using Content.Shared.DoAfter; using Content.Shared.Examine; @@ -7,6 +6,7 @@ using Content.Shared.Forensics.Components; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Inventory; +using Content.Shared.Labels.EntitySystems; namespace Content.Server.Forensics { diff --git a/Content.Server/Labels/Label/Components/PaperLabelComponent.cs b/Content.Server/Labels/Label/Components/PaperLabelComponent.cs deleted file mode 100644 index 5dead98084..0000000000 --- a/Content.Server/Labels/Label/Components/PaperLabelComponent.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Content.Shared.Containers.ItemSlots; - -namespace Content.Server.Labels.Components -{ - /// - /// This component allows you to attach and remove a piece of paper to an entity. - /// - [RegisterComponent] - public sealed partial class PaperLabelComponent : Component - { - [DataField("labelSlot")] - public ItemSlot LabelSlot = new(); - } -} diff --git a/Content.Server/Labels/Label/LabelSystem.cs b/Content.Server/Labels/Label/LabelSystem.cs deleted file mode 100644 index b70c004123..0000000000 --- a/Content.Server/Labels/Label/LabelSystem.cs +++ /dev/null @@ -1,115 +0,0 @@ -using Content.Server.Labels.Components; -using Content.Shared.Containers.ItemSlots; -using Content.Shared.Examine; -using Content.Shared.Labels; -using Content.Shared.Labels.Components; -using Content.Shared.Labels.EntitySystems; -using Content.Shared.Paper; -using JetBrains.Annotations; -using Robust.Shared.Containers; - -namespace Content.Server.Labels -{ - /// - /// A system that lets players see the contents of a label on an object. - /// - [UsedImplicitly] - public sealed class LabelSystem : SharedLabelSystem - { - [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - - public const string ContainerName = "paper_label"; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnComponentInit); - SubscribeLocalEvent(OnComponentRemove); - SubscribeLocalEvent(OnContainerModified); - SubscribeLocalEvent(OnContainerModified); - SubscribeLocalEvent(OnExamined); - } - - /// - /// Apply or remove a label on an entity. - /// - /// EntityUid to change label on - /// intended label text (null to remove) - /// label component for resolve - /// metadata component for resolve - public override void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null) - { - if (!Resolve(uid, ref label, false)) - label = EnsureComp(uid); - - label.CurrentLabel = text; - NameMod.RefreshNameModifiers(uid); - - Dirty(uid, label); - } - - private void OnComponentInit(EntityUid uid, PaperLabelComponent component, ComponentInit args) - { - _itemSlotsSystem.AddItemSlot(uid, ContainerName, component.LabelSlot); - - UpdateAppearance((uid, component)); - } - - private void OnComponentRemove(EntityUid uid, PaperLabelComponent component, ComponentRemove args) - { - _itemSlotsSystem.RemoveItemSlot(uid, component.LabelSlot); - } - - private void OnExamined(EntityUid uid, PaperLabelComponent comp, ExaminedEvent args) - { - if (comp.LabelSlot.Item is not {Valid: true} item) - return; - - using (args.PushGroup(nameof(PaperLabelComponent))) - { - if (!args.IsInDetailsRange) - { - args.PushMarkup(Loc.GetString("comp-paper-label-has-label-cant-read")); - return; - } - - if (!EntityManager.TryGetComponent(item, out PaperComponent? paper)) - // Assuming yaml has the correct entity whitelist, this should not happen. - return; - - if (string.IsNullOrWhiteSpace(paper.Content)) - { - args.PushMarkup(Loc.GetString("comp-paper-label-has-label-blank")); - return; - } - - args.PushMarkup(Loc.GetString("comp-paper-label-has-label")); - var text = paper.Content; - args.PushMarkup(text.TrimEnd()); - } - } - - private void OnContainerModified(EntityUid uid, PaperLabelComponent label, ContainerModifiedMessage args) - { - if (!label.Initialized) return; - - if (args.Container.ID != label.LabelSlot.ID) - return; - - UpdateAppearance((uid, label)); - } - - private void UpdateAppearance(Entity ent) - { - if (!Resolve(ent, ref ent.Comp2, false)) - return; - - var slot = ent.Comp1.LabelSlot; - _appearance.SetData(ent, PaperLabelVisuals.HasLabel, slot.HasItem, ent.Comp2); - if (TryComp(slot.Item, out var type)) - _appearance.SetData(ent, PaperLabelVisuals.LabelType, type.PaperType, ent.Comp2); - } - } -} diff --git a/Content.Server/Salvage/SalvageSystem.cs b/Content.Server/Salvage/SalvageSystem.cs index 9115c60536..53bb0c06b3 100644 --- a/Content.Server/Salvage/SalvageSystem.cs +++ b/Content.Server/Salvage/SalvageSystem.cs @@ -16,7 +16,7 @@ using Content.Shared.Construction.EntitySystems; using Robust.Shared.Audio.Systems; using Robust.Shared.Map.Components; using Robust.Shared.Timing; -using Content.Server.Labels; +using Content.Shared.Labels.EntitySystems; using Robust.Shared.EntitySerialization.Systems; namespace Content.Server.Salvage diff --git a/Content.Server/Shuttles/Commands/FTLDiskCommand.cs b/Content.Server/Shuttles/Commands/FTLDiskCommand.cs index b17c7c11a7..014dbe6d99 100644 --- a/Content.Server/Shuttles/Commands/FTLDiskCommand.cs +++ b/Content.Server/Shuttles/Commands/FTLDiskCommand.cs @@ -1,8 +1,8 @@ using Content.Server.Administration; -using Content.Server.Labels; using Content.Shared.Administration; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; +using Content.Shared.Labels.EntitySystems; using Content.Shared.Shuttles.Components; using Content.Shared.Storage; using Content.Shared.Storage.EntitySystems; diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index a8ee47bd71..5f8d8364af 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -106,7 +106,7 @@ namespace Content.Shared.Interaction _uiQuery = GetEntityQuery(); SubscribeLocalEvent(HandleUserInterfaceRangeCheck); - SubscribeLocalEvent(OnBoundInterfaceInteractAttempt); + SubscribeLocalEvent(OnBoundInterfaceInteractAttempt); SubscribeAllEvent(HandleInteractInventorySlotEvent); @@ -151,13 +151,12 @@ namespace Content.Shared.Interaction /// /// Check that the user that is interacting with the BUI is capable of interacting and can access the entity. /// - private void OnBoundInterfaceInteractAttempt(BoundUserInterfaceMessageAttempt ev) + private void OnBoundInterfaceInteractAttempt(Entity ent, ref BoundUserInterfaceMessageAttempt ev) { - _uiQuery.TryComp(ev.Target, out var uiComp); if (!_actionBlockerSystem.CanInteract(ev.Actor, ev.Target)) { // We permit ghosts to open uis unless explicitly blocked - if (ev.Message is not OpenBoundInterfaceMessage || !HasComp(ev.Actor) || uiComp?.BlockSpectators == true) + if (ev.Message is not OpenBoundInterfaceMessage || !HasComp(ev.Actor) || ent.Comp.BlockSpectators) { ev.Cancel(); return; @@ -175,16 +174,14 @@ namespace Content.Shared.Interaction return; } - if (uiComp == null) - return; - if (uiComp.SingleUser && uiComp.CurrentSingleUser != null && uiComp.CurrentSingleUser != ev.Actor) + if (ent.Comp.SingleUser && ent.Comp.CurrentSingleUser != null && ent.Comp.CurrentSingleUser != ev.Actor) { ev.Cancel(); return; } - if (uiComp.RequiresComplex && !_actionBlockerSystem.CanComplexInteract(ev.Actor)) + if (ent.Comp.RequiresComplex && !_actionBlockerSystem.CanComplexInteract(ev.Actor)) ev.Cancel(); } diff --git a/Content.Shared/Labels/Components/LabelComponent.cs b/Content.Shared/Labels/Components/LabelComponent.cs index ee508797ad..d126e3bd3a 100644 --- a/Content.Shared/Labels/Components/LabelComponent.cs +++ b/Content.Shared/Labels/Components/LabelComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Labels.EntitySystems; using Robust.Shared.GameStates; namespace Content.Shared.Labels.Components; @@ -6,6 +7,7 @@ namespace Content.Shared.Labels.Components; /// Makes entities have a label in their name. Labels are normally given by /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(LabelSystem))] public sealed partial class LabelComponent : Component { /// diff --git a/Content.Shared/Labels/Components/PaperLabelComponent.cs b/Content.Shared/Labels/Components/PaperLabelComponent.cs new file mode 100644 index 0000000000..e8dad61b87 --- /dev/null +++ b/Content.Shared/Labels/Components/PaperLabelComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Labels.EntitySystems; +using Robust.Shared.GameStates; + +namespace Content.Shared.Labels.Components; + +/// +/// This component allows you to attach and remove a piece of paper to an entity. +/// +[RegisterComponent, NetworkedComponent] +[Access(typeof(LabelSystem))] +public sealed partial class PaperLabelComponent : Component +{ + /// + /// The slot where the label is stored. + /// + [DataField] + public ItemSlot LabelSlot = new(); +} diff --git a/Content.Shared/Labels/Components/PaperLabelTypeComponent.cs b/Content.Shared/Labels/Components/PaperLabelTypeComponent.cs index b045a6af3b..12cddad80f 100644 --- a/Content.Shared/Labels/Components/PaperLabelTypeComponent.cs +++ b/Content.Shared/Labels/Components/PaperLabelTypeComponent.cs @@ -1,15 +1,17 @@ +using Content.Shared.Labels.EntitySystems; using Robust.Shared.GameStates; namespace Content.Shared.Labels.Components; -/// -/// Specifies the paper type (see textures/storage/crates/labels.rsi to see currently supported paper types) to show on crates this label is attached to. -/// +/// +/// Specifies the paper type (see textures/storage/crates/labels.rsi to see currently supported paper types) to show on crates this label is attached to. +/// [RegisterComponent, NetworkedComponent] +[Access(typeof(LabelSystem))] public sealed partial class PaperLabelTypeComponent : Component { - /// - /// The type of label to show. + /// + /// The type of label to show. /// [DataField] public string PaperType = "Paper"; diff --git a/Content.Shared/Labels/EntitySystems/LabelSystem.cs b/Content.Shared/Labels/EntitySystems/LabelSystem.cs new file mode 100644 index 0000000000..569acc7bca --- /dev/null +++ b/Content.Shared/Labels/EntitySystems/LabelSystem.cs @@ -0,0 +1,144 @@ +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Examine; +using Content.Shared.Labels.Components; +using Content.Shared.NameModifier.EntitySystems; +using Content.Shared.Paper; +using Robust.Shared.Containers; +using Robust.Shared.Utility; + +namespace Content.Shared.Labels.EntitySystems; + +public sealed partial class LabelSystem : EntitySystem +{ + [Dependency] private readonly NameModifierSystem _nameModifier = default!; + [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + + public const string ContainerName = "paper_label"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnLabelCompMapInit); + SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnRefreshNameModifiers); + + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnComponentRemove); + SubscribeLocalEvent(OnContainerModified); + SubscribeLocalEvent(OnContainerModified); + SubscribeLocalEvent(OnExamined); + } + + private void OnLabelCompMapInit(Entity ent, ref MapInitEvent args) + { + if (!string.IsNullOrEmpty(ent.Comp.CurrentLabel)) + { + ent.Comp.CurrentLabel = Loc.GetString(ent.Comp.CurrentLabel); + Dirty(ent); + } + + _nameModifier.RefreshNameModifiers(ent.Owner); + } + + /// + /// Apply or remove a label on an entity. + /// + /// EntityUid to change label on + /// intended label text (null to remove) + /// label component for resolve + /// metadata component for resolve + public void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null) + { + label ??= EnsureComp(uid); + + label.CurrentLabel = text; + _nameModifier.RefreshNameModifiers(uid); + + Dirty(uid, label); + } + + private void OnExamine(Entity ent, ref ExaminedEvent args) + { + if (!ent.Comp.Examinable) + return; + + if (ent.Comp.CurrentLabel == null) + return; + + var message = new FormattedMessage(); + message.AddText(Loc.GetString("hand-labeler-has-label", ("label", ent.Comp.CurrentLabel))); + args.PushMessage(message); + } + + private void OnRefreshNameModifiers(Entity entity, ref RefreshNameModifiersEvent args) + { + if (!string.IsNullOrEmpty(entity.Comp.CurrentLabel)) + args.AddModifier("comp-label-format", extraArgs: ("label", entity.Comp.CurrentLabel)); + } + + private void OnComponentInit(Entity ent, ref ComponentInit args) + { + _itemSlots.AddItemSlot(ent, ContainerName, ent.Comp.LabelSlot); + + UpdateAppearance(ent); + } + + private void OnComponentRemove(Entity ent, ref ComponentRemove args) + { + _itemSlots.RemoveItemSlot(ent, ent.Comp.LabelSlot); + } + + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + if (ent.Comp.LabelSlot.Item is not {Valid: true} item) + return; + + using (args.PushGroup(nameof(PaperLabelComponent))) + { + if (!args.IsInDetailsRange) + { + args.PushMarkup(Loc.GetString("comp-paper-label-has-label-cant-read")); + return; + } + + // Assuming yaml has the correct entity whitelist, this should not happen. + if (!TryComp(item, out var paper)) + return; + + if (string.IsNullOrWhiteSpace(paper.Content)) + { + args.PushMarkup(Loc.GetString("comp-paper-label-has-label-blank")); + return; + } + + args.PushMarkup(Loc.GetString("comp-paper-label-has-label")); + var text = paper.Content; + args.PushMarkup(text.TrimEnd()); + } + } + + // Not ref-sub due to being used for multiple subscriptions. + private void OnContainerModified(EntityUid uid, PaperLabelComponent label, ContainerModifiedMessage args) + { + if (!label.Initialized) + return; + + if (args.Container.ID != label.LabelSlot.ID) + return; + + UpdateAppearance((uid, label)); + } + + private void UpdateAppearance(Entity ent) + { + if (!Resolve(ent, ref ent.Comp2, false)) + return; + + var slot = ent.Comp1.LabelSlot; + _appearance.SetData(ent, PaperLabelVisuals.HasLabel, slot.HasItem, ent.Comp2); + if (TryComp(slot.Item, out var type)) + _appearance.SetData(ent, PaperLabelVisuals.LabelType, type.PaperType, ent.Comp2); + } +} diff --git a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs index 0763bb101c..14abae70bb 100644 --- a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs +++ b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs @@ -14,7 +14,7 @@ public abstract class SharedHandLabelerSystem : EntitySystem { [Dependency] protected readonly SharedUserInterfaceSystem UserInterfaceSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; - [Dependency] private readonly SharedLabelSystem _labelSystem = default!; + [Dependency] private readonly LabelSystem _labelSystem = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; diff --git a/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs b/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs deleted file mode 100644 index 8d54871563..0000000000 --- a/Content.Shared/Labels/EntitySystems/SharedLabelSystem.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Content.Shared.Examine; -using Content.Shared.Labels.Components; -using Content.Shared.NameModifier.EntitySystems; -using Robust.Shared.Utility; - -namespace Content.Shared.Labels.EntitySystems; - -public abstract partial class SharedLabelSystem : EntitySystem -{ - [Dependency] protected readonly NameModifierSystem NameMod = default!; - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnLabelCompMapInit); - SubscribeLocalEvent(OnExamine); - SubscribeLocalEvent(OnRefreshNameModifiers); - } - - private void OnLabelCompMapInit(EntityUid uid, LabelComponent component, MapInitEvent args) - { - if (!string.IsNullOrEmpty(component.CurrentLabel)) - { - component.CurrentLabel = Loc.GetString(component.CurrentLabel); - Dirty(uid, component); - } - - NameMod.RefreshNameModifiers(uid); - } - - public virtual void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null){} - - private void OnExamine(EntityUid uid, LabelComponent? label, ExaminedEvent args) - { - if (!Resolve(uid, ref label)) - return; - - if (!label.Examinable) - return; - - if (label.CurrentLabel == null) - return; - - var message = new FormattedMessage(); - message.AddText(Loc.GetString("hand-labeler-has-label", ("label", label.CurrentLabel))); - args.PushMessage(message); - } - - private void OnRefreshNameModifiers(Entity entity, ref RefreshNameModifiersEvent args) - { - if (!string.IsNullOrEmpty(entity.Comp.CurrentLabel)) - args.AddModifier("comp-label-format", extraArgs: ("label", entity.Comp.CurrentLabel)); - } -} diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs index 374d9b8cbf..4b0fbdcf4b 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs @@ -20,7 +20,7 @@ public abstract partial class SharedStationAiSystem private void InitializeHeld() { SubscribeLocalEvent(OnRadialMessage); - SubscribeLocalEvent(OnMessageAttempt); + SubscribeLocalEvent(OnMessageAttempt); SubscribeLocalEvent>(OnTargetVerbs); SubscribeLocalEvent(OnHeldInteraction); @@ -116,7 +116,7 @@ public abstract partial class SharedStationAiSystem RaiseLocalEvent(target.Value, (object) ev.Event); } - private void OnMessageAttempt(BoundUserInterfaceMessageAttempt ev) + private void OnMessageAttempt(Entity ent, ref BoundUserInterfaceMessageAttempt ev) { if (ev.Actor == ev.Target) return; diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 9297ea043d..f2a2031743 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -142,7 +142,7 @@ public abstract class SharedStorageSystem : EntitySystem SubscribeLocalEvent(OnImplantActivate); SubscribeLocalEvent(AfterInteract); SubscribeLocalEvent(OnDestroy); - SubscribeLocalEvent(OnBoundUIAttempt); + SubscribeLocalEvent(OnBoundUIAttempt); SubscribeLocalEvent(OnBoundUIOpen); SubscribeLocalEvent(OnLockToggled); SubscribeLocalEvent(OnStackCountChanged); @@ -761,7 +761,7 @@ public abstract class SharedStorageSystem : EntitySystem UpdateAppearance((ent.Owner, ent.Comp, null)); } - private void OnBoundUIAttempt(BoundUserInterfaceMessageAttempt args) + private void OnBoundUIAttempt(Entity ent, ref BoundUserInterfaceMessageAttempt args) { if (args.UiKey is not StorageComponent.StorageUiKey.Key || _openStorageLimit == -1 || diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c23374f764..1d39e71b2f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,35 +1,4 @@ Entries: -- author: red15 - changes: - - message: Vending machine lights turns off when broken. - type: Fix - id: 7653 - time: '2024-11-25T12:35:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/33513 -- author: metalgearsloth - changes: - - message: Adjusted the top menu on the separated game screen. The buttons will - now form multiple rows and no longer overflow into the viewport. - type: Tweak - id: 7654 - time: '2024-11-26T00:59:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/33047 -- author: slarticodefast - changes: - - message: Added the greytide virus station event. It will bolt open all doors in - a few randomly chosen departments and unlock lockers with the corresponding - access. - type: Add - id: 7655 - time: '2024-11-26T13:50:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/33547 -- author: slarticodefast - changes: - - message: Fixed space ambient music not playing. - type: Fix - id: 7656 - time: '2024-11-27T05:32:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/33594 - author: slarticodefast changes: - message: Fixed windoors and high security doors not showing up on the AI's electrocution @@ -3892,3 +3861,33 @@ id: 8152 time: '2025-04-11T01:12:13.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/36453 +- author: YoungThugSS14 + changes: + - message: Wizards now appear roundstart in the "all at once" gamemode. + type: Tweak + id: 8153 + time: '2025-04-11T02:06:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36408 +- author: DinnerCalzone + changes: + - message: Fixed gas mixers and pneumatic valves being hidden by floor tiles. + type: Fix + id: 8154 + time: '2025-04-11T02:10:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36428 +- author: Nox38, BurgerMoth, ArtisticRoomba + changes: + - message: Added descriptions for all .25 caseless cartridges, magazines, and ammo + boxes. + type: Add + id: 8155 + time: '2025-04-11T02:15:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36385 +- author: Nox38, BurgerMoth, ArtisticRoomba + changes: + - message: Added descriptions to all .45 magnum cartridges, magazines, speed loaders, + and ammo boxes. + type: Add + id: 8156 + time: '2025-04-11T04:58:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36383 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml index 89ac57e9f6..bc9cdd68cf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml @@ -29,6 +29,7 @@ parent: BaseMagazineBoxCaselessRifle id: MagazineBoxCaselessRifle name: ammunition box (.25 caseless) + description: A cardboard box of .25 caseless rounds. Intended to hold general-purpose kinetic ammunition. components: - type: BallisticAmmoProvider proto: CartridgeCaselessRifle @@ -43,6 +44,7 @@ parent: BaseMagazineBoxCaselessRifle id: MagazineBoxCaselessRiflePractice name: ammunition box (.25 caseless practice) + description: A cardboard box of .25 caseless rounds. Intended to hold non-harmful chalk ammunition. components: - type: BallisticAmmoProvider proto: CartridgeCaselessRiflePractice diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml index 892abe03b9..bdf2be0390 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml @@ -28,6 +28,7 @@ parent: BaseMagazineBoxMagnum id: MagazineBoxMagnum name: ammunition box (.45 magnum) + description: A cardboard box of .45 magnum rounds. Intended to hold general-purpose kinetic ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnum @@ -42,6 +43,7 @@ parent: BaseMagazineBoxMagnum id: MagazineBoxMagnumPractice name: ammunition box (.45 magnum practice) + description: A cardboard box of .45 magnum rounds. Intended to hold non-harmful chalk ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumPractice @@ -57,6 +59,7 @@ id: MagazineBoxMagnumIncendiary parent: BaseMagazineBoxMagnum name: ammunition box (.45 magnum incendiary) + description: A cardboard box of .45 magnum rounds. Intended to hold self-igniting incendiary ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumIncendiary @@ -72,6 +75,7 @@ id: MagazineBoxMagnumUranium parent: BaseMagazineBoxMagnum name: ammunition box (.45 magnum uranium) + description: A cardboard box of .45 magnum rounds. Intended to hold exotic uranium-core ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumUranium @@ -87,6 +91,7 @@ id: MagazineBoxMagnumAP parent: BaseMagazineBoxMagnum name: ammunition box (.45 magnum armor-piercing) + description: A cardboard box of .45 magnum rounds. Intended to hold rare armor-piercing ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumAP diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml index 1e468d02b1..aabc9b3095 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml @@ -1,6 +1,6 @@ - type: entity id: BaseCartridgeCaselessRifle - name: cartridge (.25 rifle) + name: cartridge (.25 caseless) parent: [ BaseCartridge, BaseSecurityContraband ] abstract: true components: @@ -25,6 +25,7 @@ id: CartridgeCaselessRifle name: cartridge (.25 caseless) parent: BaseCartridgeCaselessRifle + description: A small caliber utilizing caseless technology, omitting conventional brass casing in favor of hardened propellant. Standard kinetic ammunition is common and useful in most situations. components: - type: HitScanCartridgeAmmo proto: BulletCaselessRifle @@ -33,6 +34,7 @@ id: CartridgeCaselessRiflePractice name: cartridge (.25 caseless practice) parent: BaseCartridgeCaselessRifle + description: A small caliber utilizing caseless technology, omitting conventional brass casing in favor of hardened propellant. Chalk ammunition is generally non-harmful, used for practice. components: - type: HitScanCartridgeAmmo proto: BulletCaselessRiflePractice diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml index 71732fd9ee..065e0f19c5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml @@ -22,6 +22,7 @@ id: CartridgeMagnum name: cartridge (.45 magnum) parent: BaseCartridgeMagnum + description: Heavy magnum cartridge mostly used by revolvers. Standard kinetic ammunition is common and useful in most situations. components: - type: HitScanCartridgeAmmo proto: BulletMagnum @@ -30,6 +31,7 @@ id: CartridgeMagnumPractice name: cartridge (.45 magnum practice) parent: BaseCartridgeMagnum + description: Heavy magnum cartridge mostly used by revolvers. Chalk ammunition is generally non-harmful, used for practice. components: - type: HitScanCartridgeAmmo proto: BulletMagnumPractice @@ -45,6 +47,7 @@ id: CartridgeMagnumIncendiary name: cartridge (.45 magnum incendiary) parent: BaseCartridgeMagnum + description: Heavy magnum cartridge mostly used by revolvers. Incendiary ammunition contains a self-igniting compound that sets the target ablaze. components: - type: HitScanCartridgeAmmo proto: BulletMagnumIncendiary @@ -62,6 +65,7 @@ id: CartridgeMagnumAP name: cartridge (.45 magnum armor-piercing) parent: BaseCartridgeMagnum + description: Heavy magnum cartridge mostly used by revolvers. Armor piercing ammunition is renowned for its ability to cut straight through body armor. components: - type: HitScanCartridgeAmmo proto: BulletMagnumAP @@ -77,6 +81,7 @@ id: CartridgeMagnumUranium name: cartridge (.45 magnum uranium) parent: BaseCartridgeMagnum + description: Heavy magnum cartridge mostly used by revolvers. Uranium ammunition replaces the lead core of the bullet with fissile material, irradiating the target from the inside. components: - type: HitScanCartridgeAmmo proto: BulletMagnumUranium @@ -87,4 +92,3 @@ - state: tip map: [ "enum.AmmoVisualLayers.Tip" ] color: "#65fe08" - diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml index 7361bc09c7..c0af2b67e1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml @@ -100,6 +100,7 @@ id: MagazinePistolCaselessRifle name: "pistol magazine (.25 caseless)" parent: BaseMagazinePistolCaselessRifle + description: 10-round magazine for the Cobra pistol. Intended to hold general-purpose kinetic ammunition. components: - type: BallisticAmmoProvider proto: CartridgeCaselessRifle @@ -120,6 +121,7 @@ id: MagazinePistolCaselessRiflePractice name: "pistol magazine (.25 caseless practice)" parent: BaseMagazinePistolCaselessRifle + description: 10-round magazine for the Cobra pistol. Intended to hold non-harmful chalk ammunition. components: - type: BallisticAmmoProvider proto: CartridgeCaselessRiflePractice diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml index 91a3e4f360..d94bc444a7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml @@ -52,6 +52,7 @@ name: pistol magazine (.45 magnum any) suffix: empty parent: BaseMagazineMagnum + description: 7-round single stack pistol magazine. components: - type: BallisticAmmoProvider proto: null @@ -66,6 +67,7 @@ id: MagazineMagnum name: pistol magazine (.45 magnum) parent: BaseMagazineMagnum + description: 7-round single stack pistol magazine. Intended to hold general-purpose kinetic ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnum @@ -80,6 +82,7 @@ id: MagazineMagnumPractice name: pistol magazine (.45 magnum practice) parent: BaseMagazineMagnum + description: 7-round single stack pistol magazine. Intended to hold non-harmful chalk ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumPractice @@ -94,6 +97,7 @@ id: MagazineMagnumUranium name: pistol magazine (.45 magnum uranium) parent: BaseMagazineMagnum + description: 7-round single stack pistol magazine. Intended to hold exotic uranium-core ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumUranium @@ -108,6 +112,7 @@ id: MagazineMagnumAP name: pistol magazine (.45 magnum armor-piercing) parent: BaseMagazineMagnum + description: 7-round single stack pistol magazine. Intended to hold rare armor-piercing ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumAP diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml index 3044b1f9ff..9976c88314 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/SpeedLoaders/magnum.yml @@ -23,6 +23,7 @@ id: SpeedLoaderMagnum name: "speed loader (.45 magnum)" parent: BaseSpeedLoaderMagnum + description: Designed to quickly refill an empty revolver, it fits up to six rounds. Intended to hold general-purpose kinetic ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnum @@ -43,6 +44,7 @@ id: SpeedLoaderMagnumEmpty name: "speed loader (.45 magnum any)" parent: SpeedLoaderMagnum + description: Designed to quickly refill an empty revolver, it fits up to six rounds for the big iron on your hip. #Big Iron reference (duh) components: - type: BallisticAmmoProvider proto: null @@ -61,6 +63,7 @@ id: SpeedLoaderMagnumIncendiary name: "speed loader (.45 magnum incendiary)" parent: SpeedLoaderMagnum + description: Designed to quickly refill an empty revolver, it fits up to six rounds. Intended to hold self-igniting incendiary ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumIncendiary @@ -69,6 +72,7 @@ id: SpeedLoaderMagnumPractice name: "speed loader (.45 magnum practice)" parent: BaseSpeedLoaderMagnum + description: Designed to quickly refill an empty revolver, it fits up to six rounds. Intended to hold non-harmful chalk ammunition, perfect for practicing your quick draw. components: - type: BallisticAmmoProvider proto: CartridgeMagnumPractice @@ -89,6 +93,7 @@ id: SpeedLoaderMagnumAP name: "speed loader (.45 magnum armor-piercing)" parent: BaseSpeedLoaderMagnum + description: Designed to quickly refill an empty revolver, it fits up to six rounds. Intended to hold rare armor-piercing ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumAP @@ -109,6 +114,7 @@ id: SpeedLoaderMagnumUranium name: "speed loader (.45 magnum uranium)" parent: BaseSpeedLoaderMagnum + description: Designed to quickly refill an empty revolver, it fits up to six rounds. Intended to hold exotic uranium-core ammunition. components: - type: BallisticAmmoProvider proto: CartridgeMagnumUranium diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 5a8360a9d3..052b2d8722 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -151,7 +151,7 @@ name: cobra parent: [ BaseWeaponPistol, BaseSyndicateContraband ] id: WeaponPistolCobra - description: A rugged, robust operator handgun with inbuilt silencer. Uses .25 caseless ammo. + description: Integrally suppressed semi-automatic pistol used by the Syndicate, firing caseless subsonic rounds. Favored by any agent who likes to keep things quiet and leave no evidence behind. Feeds from .25 pistol magazines. components: - type: Sprite sprite: Objects/Weapons/Guns/Pistols/cobra.rsi @@ -219,8 +219,8 @@ - type: entity name: N1984 parent: [BaseWeaponPistol, BaseSecurityContraband] - id: WeaponPistolN1984 # the spaces in description are for formatting. - description: The sidearm of any self respecting officer. Comes in .45 magnum, the lord's caliber. + id: WeaponPistolN1984 + description: An exceptionally powerful ‘hand cannon’ designed as part of Nanotrasen's BFG initiative. Chambered in .45, the lord’s caliber, it is generally considered too unwieldy for standard use but has become something of a status symbol among Nanotrasen officials. Feeds from .45 pistol magazines. components: - type: Sprite sprite: Objects/Weapons/Guns/Pistols/N1984.rsi diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 3312fd3750..3c0551f952 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -68,7 +68,7 @@ name: Deckard parent: [BaseWeaponRevolver, BaseSecurityCommandContraband] id: WeaponRevolverDeckard - description: A rare, custom-built revolver. Use when there is no time for Voight-Kampff test. Uses .45 magnum ammo. + description: A beautifully machined, custom-built revolver. Used when there is no time for the Voight-Kampff test. Loads 5 rounds of .45 magnum. components: - type: Sprite sprite: Objects/Weapons/Guns/Revolvers/deckard.rsi @@ -96,7 +96,7 @@ name: Inspector parent: [BaseWeaponRevolver, BaseSecurityContraband] id: WeaponRevolverInspector - description: A detective's best friend. Uses .45 magnum ammo. + description: A single-action revolver manufactured by various companies. It is readily available on the civilian market, making it a popular choice among private investigators. You feel lucky just holding it. Loads 6 rounds of .45 magnum. components: - type: Sprite sprite: Objects/Weapons/Guns/Revolvers/inspector.rsi @@ -114,7 +114,7 @@ name: Mateba parent: [BaseWeaponRevolver, BaseMajorContraband] id: WeaponRevolverMateba - description: The iconic sidearm of the dreaded death squads. Uses .45 magnum ammo. + description: A modern revolver used by Nanotrasen’s elite, near mythical ‘Death Squad’ task force. Its unique trigger action and barrel placement enable a high fire rate with minimal muzzle flip. Many have looked down this barrel, but few have lived to tell of it. Loads 6 rounds of .45 magnum. components: - type: Sprite sprite: Objects/Weapons/Guns/Revolvers/mateba.rsi @@ -137,7 +137,7 @@ name: Python parent: [BaseWeaponRevolver, BaseSyndicateContraband] id: WeaponRevolverPython - description: A robust revolver favoured by Syndicate agents. Uses .45 magnum ammo. + description: A powerful double-action revolver manufactured by the Syndicate. Loud and flashy, perfect for any agent looking to make a statement. Loads 6 rounds of .45 magnum. components: - type: Sprite sprite: Objects/Weapons/Guns/Revolvers/python.rsi @@ -170,7 +170,7 @@ name: pirate revolver parent: [BaseWeaponRevolver, BaseMinorContraband] id: WeaponRevolverPirate - description: An odd, old-looking revolver, favoured by pirate crews. Uses .45 magnum ammo. + description: A crude single-action revolver handmade by a space pirate. Old and covered in rust, it somehow still works. Loads 5 rounds of .45 magnum. components: - type: Sprite sprite: Objects/Weapons/Guns/Revolvers/pirate_revolver.rsi diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml index db0fc13b97..d5cb9f1feb 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/windoor.yml @@ -407,6 +407,15 @@ - type: Wires layoutId: AirlockMedical +- type: entity + parent: WindoorSecureCommandLocked + id: WindoorSecureResearchDirectorLocked + suffix: ResearchDirector, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsResearchDirector ] + - type: entity parent: WindoorSecureCargoLocked id: WindoorSecureSalvageLocked diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml index 6530fbd62e..97d15b0a93 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml @@ -158,6 +158,9 @@ placement: mode: SnapgridCenter components: + - type: SubFloorHide + visibleLayers: + - enum.SubfloorLayers.FirstLayer - type: Sprite sprite: Structures/Piping/Atmospherics/gasmixer.rsi layers: @@ -281,6 +284,8 @@ - type: SubFloorHide blockInteractions: false blockAmbience: false + visibleLayers: + - enum.SubfloorLayers.FirstLayer - type: NodeContainer nodes: inlet: diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index a37f5b2b9f..b756733cc7 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -44,6 +44,7 @@ - Traitor - Revolutionary - Zombie + - Wizard - KesslerSyndromeScheduler - RampingStationEventScheduler - SpaceTrafficControlEventScheduler @@ -66,6 +67,7 @@ - Traitor - Revolutionary - Zombie + - Wizard - BasicStationEventScheduler - KesslerSyndromeScheduler - MeteorSwarmMildScheduler