From 5ade6688e78548175c86d60ea5211137d252b87e Mon Sep 17 00:00:00 2001 From: Perry Fraser Date: Sat, 11 Oct 2025 15:42:10 -0400 Subject: [PATCH 01/10] HOTFIX Fix pickup effects occurring with verb creation (#38705) * fix: don't run pickup effects on verb creation * review * redundant --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Server/Lube/LubedSystem.cs | 45 +++++++++++++----- .../ActionBlocker/ActionBlockerSystem.cs | 12 +++-- .../Containers/ItemSlot/ItemSlotsSystem.cs | 2 +- .../SharedHandsSystem.Interactions.cs | 2 +- .../EntitySystems/SharedHandsSystem.Pickup.cs | 47 ++++++++++++++++--- Content.Shared/Hands/HandEvents.cs | 27 +++++++++++ Content.Shared/Item/MultiHandedItemSystem.cs | 11 +++-- Content.Shared/Item/PickupAttemptEvent.cs | 27 +++++++++-- .../Strip/SharedStrippableSystem.cs | 2 +- 9 files changed, 141 insertions(+), 34 deletions(-) diff --git a/Content.Server/Lube/LubedSystem.cs b/Content.Server/Lube/LubedSystem.cs index 3c536dcceb..01a2fa8dde 100644 --- a/Content.Server/Lube/LubedSystem.cs +++ b/Content.Server/Lube/LubedSystem.cs @@ -1,9 +1,11 @@ +using Content.Shared.Hands; +using Content.Shared.Hands.EntitySystems; using Content.Shared.IdentityManagement; +using Content.Shared.Item; using Content.Shared.Lube; using Content.Shared.NameModifier.EntitySystems; using Content.Shared.Popups; using Content.Shared.Throwing; -using Robust.Shared.Containers; using Robust.Shared.Random; namespace Content.Server.Lube; @@ -21,7 +23,7 @@ public sealed class LubedSystem : EntitySystem base.Initialize(); SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnHandPickUp); + SubscribeLocalEvent(OnHandPickUp); SubscribeLocalEvent(OnRefreshNameModifiers); } @@ -30,21 +32,38 @@ public sealed class LubedSystem : EntitySystem _nameMod.RefreshNameModifiers(uid); } - private void OnHandPickUp(EntityUid uid, LubedComponent component, ContainerGettingInsertedAttemptEvent args) + /// + /// Note to whoever makes this predicted—there is a mispredict here that + /// would be nice to keep! If this is in shared, the client will predict + /// this and not run the pickup animation in + /// which would (probably) make this effect look less funny. You will + /// probably want to either tweak + /// to be able to cancel but still run the animation or something—we do want + /// the event to run before the animation for stuff like + /// . + /// + private void OnHandPickUp(Entity ent, ref BeforeGettingEquippedHandEvent args) { - if (component.SlipsLeft <= 0) + if (args.Cancelled) + return; + + if (ent.Comp.SlipsLeft <= 0) { - RemComp(uid); - _nameMod.RefreshNameModifiers(uid); + RemComp(ent); + _nameMod.RefreshNameModifiers(ent.Owner); return; } - component.SlipsLeft--; - args.Cancel(); - var user = args.Container.Owner; - _transform.SetCoordinates(uid, Transform(user).Coordinates); - _transform.AttachToGridOrMap(uid); - _throwing.TryThrow(uid, _random.NextVector2(), baseThrowSpeed: component.SlipStrength); - _popup.PopupEntity(Loc.GetString("lube-slip", ("target", Identity.Entity(uid, EntityManager))), user, user, PopupType.MediumCaution); + + ent.Comp.SlipsLeft--; + args.Cancelled = true; + + _transform.SetCoordinates(ent, Transform(args.User).Coordinates); + _transform.AttachToGridOrMap(ent); + _throwing.TryThrow(ent, _random.NextVector2(), ent.Comp.SlipStrength); + _popup.PopupEntity(Loc.GetString("lube-slip", ("target", Identity.Entity(ent, EntityManager))), + args.User, + args.User, + PopupType.MediumCaution); } private void OnRefreshNameModifiers(Entity entity, ref RefreshNameModifiersEvent args) diff --git a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs index 08eac657c0..c256872cc7 100644 --- a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs +++ b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs @@ -167,15 +167,21 @@ namespace Content.Shared.ActionBlocker return !ev.Cancelled; } - public bool CanPickup(EntityUid user, EntityUid item) + /// + /// Whether a user can pickup the given item. + /// + /// The mob trying to pick up the item. + /// The item being picked up. + /// Whether or not to show a popup to the player telling them why the attempt failed. + public bool CanPickup(EntityUid user, EntityUid item, bool showPopup = false) { - var userEv = new PickupAttemptEvent(user, item); + var userEv = new PickupAttemptEvent(user, item, showPopup); RaiseLocalEvent(user, userEv); if (userEv.Cancelled) return false; - var itemEv = new GettingPickedUpAttemptEvent(user, item); + var itemEv = new GettingPickedUpAttemptEvent(user, item, showPopup); RaiseLocalEvent(item, itemEv); return !itemEv.Cancelled; diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index 88e6ca44dc..718d2a0524 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -573,7 +573,7 @@ namespace Content.Shared.Containers.ItemSlots item = slot.Item; // This handles user logic - if (user != null && item != null && !_actionBlockerSystem.CanPickup(user.Value, item.Value)) + if (user != null && item != null && !_actionBlockerSystem.CanPickup(user.Value, item.Value, showPopup: true)) return false; Eject(uid, slot, item!.Value, user, excludeUserAudio); diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs index 0e8d7a7556..cd6085535a 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs @@ -181,7 +181,7 @@ public abstract partial class SharedHandsSystem : EntitySystem if (!CanDropHeld(uid, handName, checkActionBlocker)) return false; - if (!CanPickupToHand(uid, entity.Value, handsComp.ActiveHandId, checkActionBlocker, handsComp)) + if (!CanPickupToHand(uid, entity.Value, handsComp.ActiveHandId, checkActionBlocker: checkActionBlocker, handsComp: handsComp)) return false; DoDrop(uid, handName, false, log: false); diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs index ea13004313..c19de9629a 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs @@ -1,4 +1,3 @@ -using System.Diagnostics; using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Item; @@ -84,7 +83,10 @@ public abstract partial class SharedHandsSystem if (!Resolve(entity, ref item, false)) return false; - if (!CanPickupToHand(uid, entity, handId, checkActionBlocker, handsComp, item)) + if (!CanPickupToHand(uid, entity, handId, checkActionBlocker: checkActionBlocker, showPopup: true, handsComp: handsComp, item: item)) + return false; + + if (!BeforeDoPickup((uid, handsComp), entity)) return false; if (animate) @@ -151,7 +153,11 @@ public abstract partial class SharedHandsSystem return false; } - public bool CanPickupAnyHand(EntityUid uid, EntityUid entity, bool checkActionBlocker = true, HandsComponent? handsComp = null, ItemComponent? item = null) + /// + /// Checks whether a given item will fit into the user's first free hand. + /// Unless otherwise specified, this will also check the general CanPickup action blocker. + /// + public bool CanPickupAnyHand(EntityUid uid, EntityUid entity, bool checkActionBlocker = true, bool showPopup = false, HandsComponent? handsComp = null, ItemComponent? item = null) { if (!Resolve(uid, ref handsComp, false)) return false; @@ -159,13 +165,14 @@ public abstract partial class SharedHandsSystem if (!TryGetEmptyHand((uid, handsComp), out var hand)) return false; - return CanPickupToHand(uid, entity, hand, checkActionBlocker, handsComp, item); + return CanPickupToHand(uid, entity, hand, checkActionBlocker, showPopup, handsComp, item); } /// - /// Checks whether a given item will fit into a specific user's hand. Unless otherwise specified, this will also check the general CanPickup action blocker. + /// Checks whether a given item will fit into a specific user's hand. + /// Unless otherwise specified, this will also check the general CanPickup action blocker. /// - public bool CanPickupToHand(EntityUid uid, EntityUid entity, string handId, bool checkActionBlocker = true, HandsComponent? handsComp = null, ItemComponent? item = null) + public bool CanPickupToHand(EntityUid uid, EntityUid entity, string handId, bool checkActionBlocker = true, bool showPopup = false, HandsComponent? handsComp = null, ItemComponent? item = null) { if (!Resolve(uid, ref handsComp, false)) return false; @@ -176,13 +183,17 @@ public abstract partial class SharedHandsSystem if (handContainer.ContainedEntities.FirstOrNull() != null) return false; + // Huh, seems kinda weird that this system passes item comp around + // everywhere but it's never actually used besides being resolved. + // I wouldn't be surprised if there's some API simplifications that + // could be made with respect to that. if (!Resolve(entity, ref item, false)) return false; if (TryComp(entity, out PhysicsComponent? physics) && physics.BodyType == BodyType.Static) return false; - if (checkActionBlocker && !_actionBlocker.CanPickup(uid, entity)) + if (checkActionBlocker && !_actionBlocker.CanPickup(uid, entity, showPopup)) return false; if (!CheckWhitelists((uid, handsComp), handId, entity)) @@ -232,6 +243,28 @@ public abstract partial class SharedHandsSystem } } + /// + /// Small helper function meant as a last step before + /// is called. Used to run a cancelable before pickup event that can have + /// side effects, unlike the side effect free . + /// + private bool BeforeDoPickup(Entity user, EntityUid item) + { + if (!Resolve(user, ref user.Comp)) + return false; + + var userEv = new BeforeEquippingHandEvent(item); + RaiseLocalEvent(user, ref userEv); + + if (userEv.Cancelled) + return false; + + var itemEv = new BeforeGettingEquippedHandEvent(user); + RaiseLocalEvent(item, ref itemEv); + + return !itemEv.Cancelled; + } + /// /// Puts an entity into the player's hand, assumes that the insertion is allowed. In general, you should not be calling this function directly. /// diff --git a/Content.Shared/Hands/HandEvents.cs b/Content.Shared/Hands/HandEvents.cs index 0499c05f42..3d3cb9a322 100644 --- a/Content.Shared/Hands/HandEvents.cs +++ b/Content.Shared/Hands/HandEvents.cs @@ -1,5 +1,6 @@ using System.Numerics; using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; using JetBrains.Annotations; using Robust.Shared.Map; using Robust.Shared.Serialization; @@ -156,6 +157,32 @@ namespace Content.Shared.Hands } } + /// + /// Raised against an item being picked up before it is actually inserted + /// into the pick-up-ers hand container. This can be handled with side + /// effects, and may be canceled preventing the pickup in a way that + /// and similar don't see. + /// + /// The user picking up the item. + /// + /// If true, the item will not be equipped into the user's hand. + /// + [ByRefEvent] + public record struct BeforeGettingEquippedHandEvent(EntityUid User, bool Cancelled = false); + + /// + /// Raised against a mob picking up and item before it is actually inserted + /// into the pick-up-ers hand container. This can be handled with side + /// effects, and may be canceled preventing the pickup in a way that + /// and similar don't see. + /// + /// The item being picked up. + /// + /// If true, the item will not be equipped into the user's hand. + /// + [ByRefEvent] + public record struct BeforeEquippingHandEvent(EntityUid Item, bool Cancelled = false); + /// /// Raised when putting an entity into a hand slot /// diff --git a/Content.Shared/Item/MultiHandedItemSystem.cs b/Content.Shared/Item/MultiHandedItemSystem.cs index db64610eae..9d30d57a91 100644 --- a/Content.Shared/Item/MultiHandedItemSystem.cs +++ b/Content.Shared/Item/MultiHandedItemSystem.cs @@ -37,12 +37,17 @@ public sealed class MultiHandedItemSystem : EntitySystem private void OnAttemptPickup(Entity ent, ref GettingPickedUpAttemptEvent args) { - if (_hands.CountFreeHands(args.User) >= ent.Comp.HandsNeeded) + if (args.Cancelled || _hands.CountFreeHands(args.User) >= ent.Comp.HandsNeeded) return; args.Cancel(); - _popup.PopupPredictedCursor(Loc.GetString("multi-handed-item-pick-up-fail", - ("number", ent.Comp.HandsNeeded - 1), ("item", ent.Owner)), args.User); + + if (args.ShowPopup) + _popup.PopupPredictedCursor( + Loc.GetString("multi-handed-item-pick-up-fail", + ("number", ent.Comp.HandsNeeded - 1), + ("item", ent.Owner)), + args.User); } private void OnVirtualItemDeleted(Entity ent, ref VirtualItemDeletedEvent args) diff --git a/Content.Shared/Item/PickupAttemptEvent.cs b/Content.Shared/Item/PickupAttemptEvent.cs index eb0b4c8dcc..c8382fa08f 100644 --- a/Content.Shared/Item/PickupAttemptEvent.cs +++ b/Content.Shared/Item/PickupAttemptEvent.cs @@ -1,30 +1,47 @@ namespace Content.Shared.Item; /// -/// Raised on a *mob* when it tries to pickup something +/// Raised on a *mob* when it tries to pickup something. +/// IMPORTANT: Attempt event subscriptions should not be doing any state changes like throwing items, opening UIs, playing sounds etc! /// public sealed class PickupAttemptEvent : BasePickupAttemptEvent { - public PickupAttemptEvent(EntityUid user, EntityUid item) : base(user, item) { } + public PickupAttemptEvent(EntityUid user, EntityUid item, bool showPopup) : base(user, item, showPopup) { } } /// -/// Raised directed at entity being picked up when someone tries to pick it up +/// Raised directed at entity being picked up when someone tries to pick it up. +/// IMPORTANT: Attempt event subscriptions should not be doing any state changes like throwing items, opening UIs, playing sounds etc! /// public sealed class GettingPickedUpAttemptEvent : BasePickupAttemptEvent { - public GettingPickedUpAttemptEvent(EntityUid user, EntityUid item) : base(user, item) { } + public GettingPickedUpAttemptEvent(EntityUid user, EntityUid item, bool showPopup) : base(user, item, showPopup) { } } [Virtual] public class BasePickupAttemptEvent : CancellableEntityEventArgs { + /// + /// The mob that is picking up the item. + /// public readonly EntityUid User; + /// + /// The item being picked up. + /// + public readonly EntityUid Item; - public BasePickupAttemptEvent(EntityUid user, EntityUid item) + /// + /// Whether or not to show a popup message to the player telling them why the attempt was cancelled. + /// This should be true when this event is raised during interactions, and false when it is raised + /// for disabling verbs or similar that do not do the actual pickup. + /// + public bool ShowPopup; + + public BasePickupAttemptEvent(EntityUid user, EntityUid item, bool showPopup) { User = user; Item = item; + ShowPopup = showPopup; } } diff --git a/Content.Shared/Strip/SharedStrippableSystem.cs b/Content.Shared/Strip/SharedStrippableSystem.cs index 49be180503..aca0e42945 100644 --- a/Content.Shared/Strip/SharedStrippableSystem.cs +++ b/Content.Shared/Strip/SharedStrippableSystem.cs @@ -379,7 +379,7 @@ public abstract class SharedStrippableSystem : EntitySystem return false; } - if (!_handsSystem.CanPickupToHand(target, activeItem.Value, handName, checkActionBlocker: false, target.Comp)) + if (!_handsSystem.CanPickupToHand(target, activeItem.Value, handName, checkActionBlocker: false, handsComp: target.Comp)) { _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-put-message", ("owner", Identity.Entity(target, EntityManager)))); return false; From 294cae8de157cebb6dfc65acf7e1d5f3a326c21f Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 15:27:32 +0200 Subject: [PATCH 02/10] Super Synth Removal from rng It was decided during the maintainer meeting to remove these. --- .../Entities/Markers/Spawners/Random/instruments.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml index 93e7e58e88..6131844472 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml @@ -119,10 +119,6 @@ weight: 0.1 children: - id: DawInstrumentMachineCircuitboard - - !type:GroupSelector - weight: 0.05 - children: - - id: SuperSynthesizerInstrument - type: entityTable id: SalvageInstrumentTable @@ -140,8 +136,6 @@ tableId: WoodwindInstrumentTable - !type:NestedSelector tableId: SpecialInstrumentTable - - id: SuperSynthesizerInstrument - weight: 0.3 - type: entity id: RandomInstruments From 90b438635d8f9ba2abdb2c78bedeaf4236db5057 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 15:29:01 +0200 Subject: [PATCH 03/10] Revert "Readds Tasers to Security (#39087)" This reverts commit 398c8df343e2b41ebdf03fe6d3714a1e894434c0. This will be pushed into vulture testing for another release cycle due to potencial influence with newmed, we dont have a better way of doing something like this sooo i will just unrevert the revert Taser changelog removal --- Content.Server/Stunnable/Systems/StunOnCollideSystem.cs | 1 - Resources/Changelog/Changelog.yml | 8 -------- Resources/Prototypes/Catalog/Fills/Lockers/heads.yml | 1 - Resources/Prototypes/Catalog/Fills/Lockers/security.yml | 3 --- .../Objects/Weapons/Guns/Battery/battery_guns.yml | 1 - .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 4 +--- 6 files changed, 1 insertion(+), 17 deletions(-) diff --git a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs index 09e42966c7..c1757b1c2d 100644 --- a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs +++ b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs @@ -27,7 +27,6 @@ internal sealed class StunOnCollideSystem : EntitySystem if (ent.Comp.Refresh) { _stunSystem.TryUpdateStunDuration(target, ent.Comp.StunAmount); - _movementMod.TryUpdateMovementSpeedModDuration( target, MovementModStatusSystem.TaserSlowdown, diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index de112f2b02..e5de0b2e3d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3561,14 +3561,6 @@ id: 9012 time: '2025-09-27T20:51:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40572 -- author: keronshb - changes: - - message: 'EXPERIMENTAL: Tasers, a short-ranged gun capable of causing targets - to become prone, are now added into Warden, HoS, and Security locker fills.' - type: Add - id: 9013 - time: '2025-09-27T21:21:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/39087 - author: SurrealShibe changes: - message: Vulpkanin now audibly gasp. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 2b4c5c9b36..2db34c0459 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -324,7 +324,6 @@ - id: RubberStampHos - id: BoxHoSCircuitboards - id: WeaponDisabler - - id: WeaponTaser - id: WantedListCartridge - id: DrinkHosFlask diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 48bed23bc9..1111058871 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -28,7 +28,6 @@ children: - id: FlashlightSeclite - id: WeaponDisabler - - id: WeaponTaser - id: ClothingBeltSecurityFilled - id: Flash - id: ClothingEyesGlassesSecurity @@ -73,7 +72,6 @@ - id: FlashlightSeclite prob: 0.8 - id: WeaponDisabler - - id: WeaponTaser - id: ClothingUniformJumpsuitSecGrey prob: 0.3 - id: ClothingHeadHelmetBasic @@ -107,7 +105,6 @@ table: !type:AllSelector children: - id: ClothingEyesGlassesSecurity - - id: WeaponTaser - id: WeaponDisabler - id: TrackingImplanter amount: 2 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 2f2ebfa5fd..bd532ce709 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -611,7 +611,6 @@ slots: - Belt - type: Gun - fireRate: 0.5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser.ogg - type: ProjectileBatteryAmmoProvider diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index bc9f40f85a..74f546c61d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -227,8 +227,7 @@ lifetime: 0.170 # Very short range - type: StunOnCollide stunAmount: 0 - knockdownAmount: 2.5 # Enough to subdue and follow up with a stun baton - drop: false #Ranged KD and item drop are too strong in one package + knockdownAmount: 2.5 # Enough to subdue and follow up with a stun batong slowdownAmount: 2.5 walkSpeedModifier: 0.5 sprintSpeedModifier: 0.5 @@ -256,7 +255,6 @@ lifetime: 1.0 # Not so short range - type: StunOnCollide stunAmount: 5 - drop: true # this is the evil taser knockdownAmount: 10 slowdownAmount: 10 walkSpeedModifier: 0.5 From f3ade672602f2815b6485151253f848e4696001d Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 15:46:15 +0200 Subject: [PATCH 04/10] Add missing changelog --- Resources/Changelog/Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e5de0b2e3d..deabf58db0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,4 +1,15 @@ Entries: +- author: CoconutThunder + changes: + - message: Fixed lubed items being thrown when looking at the pickup verb. + type: Fix + - message: Fixed multihanded items showing a popup when looking at the pickup verb. + type: Fix + - message: Fixed a bug with lubed handcuffs. + type: Fix + id: 8561 + time: '2025-05-25T05:10:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38705 - author: CoconutThunder changes: - message: The Chief Medical Officer should now appear with the correct precedence From 7837a5cc72fabcfc8255d614b3ac781bfd7fa1ca Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 16:07:56 +0200 Subject: [PATCH 05/10] Mark supersynth as admin --- .../Entities/Objects/Fun/Instruments/instrument_keyed.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml index 46af54f86f..cda539e4fb 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml @@ -26,6 +26,7 @@ - type: entity parent: BaseKeyedInstrument id: SuperSynthesizerInstrument + suffix: Admin name: super synthesizer description: Blasting the ghetto with Touhou MIDIs since 2020. components: @@ -41,7 +42,7 @@ - type: entity parent: SuperSynthesizerInstrument id: SuperSynthesizerNoLimitInstrument - suffix: NoLimits + suffix: NoLimits Admin components: - type: Instrument respectMidiLimits: false From 02b623b16ef2525aa29937aa61309ea339bdecaf Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:09:08 +0200 Subject: [PATCH 06/10] Revert "Add slowdown to nocturine, buff duration and minor delay reduction (#40797)" This reverts commit 33c0c46b5da5a462d05e267a887b8254e95096ce. --- Resources/Prototypes/Reagents/narcotics.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index 92236d746c..a1b1033a4b 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -289,19 +289,16 @@ meltingPoint: 128.0 metabolisms: Narcotic: - effects: # It would be nice to have speech slurred or mumbly, but accents are a bit iffy atm. Same for distortion effects. - - !type:MovespeedModifier - walkSpeedModifier: 0.65 - sprintSpeedModifier: 0.65 + effects: - !type:ModifyStatusEffect conditions: - !type:ReagentThreshold reagent: Nocturine min: 8 effectProto: StatusEffectForcedSleeping - time: 6 - delay: 5 - type: Update + time: 3 + delay: 6 + type: Add - type: reagent id: MuteToxin From 2a261d3bc0f542156f2517453c68199673f9ae19 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:33:18 +0200 Subject: [PATCH 07/10] Reapply "Readds Tasers to Security (#39087)" This reverts commit 90b438635d8f9ba2abdb2c78bedeaf4236db5057. --- Content.Server/Stunnable/Systems/StunOnCollideSystem.cs | 1 + Resources/Changelog/Changelog.yml | 8 ++++++++ Resources/Prototypes/Catalog/Fills/Lockers/heads.yml | 1 + Resources/Prototypes/Catalog/Fills/Lockers/security.yml | 3 +++ .../Objects/Weapons/Guns/Battery/battery_guns.yml | 1 + .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 4 +++- 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs index c1757b1c2d..09e42966c7 100644 --- a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs +++ b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs @@ -27,6 +27,7 @@ internal sealed class StunOnCollideSystem : EntitySystem if (ent.Comp.Refresh) { _stunSystem.TryUpdateStunDuration(target, ent.Comp.StunAmount); + _movementMod.TryUpdateMovementSpeedModDuration( target, MovementModStatusSystem.TaserSlowdown, diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index deabf58db0..b60c29e299 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3572,6 +3572,14 @@ id: 9012 time: '2025-09-27T20:51:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40572 +- author: keronshb + changes: + - message: 'EXPERIMENTAL: Tasers, a short-ranged gun capable of causing targets + to become prone, are now added into Warden, HoS, and Security locker fills.' + type: Add + id: 9013 + time: '2025-09-27T21:21:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39087 - author: SurrealShibe changes: - message: Vulpkanin now audibly gasp. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 2db34c0459..2b4c5c9b36 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -324,6 +324,7 @@ - id: RubberStampHos - id: BoxHoSCircuitboards - id: WeaponDisabler + - id: WeaponTaser - id: WantedListCartridge - id: DrinkHosFlask diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 1111058871..48bed23bc9 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -28,6 +28,7 @@ children: - id: FlashlightSeclite - id: WeaponDisabler + - id: WeaponTaser - id: ClothingBeltSecurityFilled - id: Flash - id: ClothingEyesGlassesSecurity @@ -72,6 +73,7 @@ - id: FlashlightSeclite prob: 0.8 - id: WeaponDisabler + - id: WeaponTaser - id: ClothingUniformJumpsuitSecGrey prob: 0.3 - id: ClothingHeadHelmetBasic @@ -105,6 +107,7 @@ table: !type:AllSelector children: - id: ClothingEyesGlassesSecurity + - id: WeaponTaser - id: WeaponDisabler - id: TrackingImplanter amount: 2 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 bd532ce709..2f2ebfa5fd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -611,6 +611,7 @@ slots: - Belt - type: Gun + fireRate: 0.5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser.ogg - type: ProjectileBatteryAmmoProvider diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 74f546c61d..bc9f40f85a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -227,7 +227,8 @@ lifetime: 0.170 # Very short range - type: StunOnCollide stunAmount: 0 - knockdownAmount: 2.5 # Enough to subdue and follow up with a stun batong + knockdownAmount: 2.5 # Enough to subdue and follow up with a stun baton + drop: false #Ranged KD and item drop are too strong in one package slowdownAmount: 2.5 walkSpeedModifier: 0.5 sprintSpeedModifier: 0.5 @@ -255,6 +256,7 @@ lifetime: 1.0 # Not so short range - type: StunOnCollide stunAmount: 5 + drop: true # this is the evil taser knockdownAmount: 10 slowdownAmount: 10 walkSpeedModifier: 0.5 From 8de64ca2bb6f25939d7ebfe7af0d16c78d18774e Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:33:22 +0200 Subject: [PATCH 08/10] Reapply "Add slowdown to nocturine, buff duration and minor delay reduction (#40797)" This reverts commit 02b623b16ef2525aa29937aa61309ea339bdecaf. --- Resources/Prototypes/Reagents/narcotics.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index a1b1033a4b..92236d746c 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -289,16 +289,19 @@ meltingPoint: 128.0 metabolisms: Narcotic: - effects: + effects: # It would be nice to have speech slurred or mumbly, but accents are a bit iffy atm. Same for distortion effects. + - !type:MovespeedModifier + walkSpeedModifier: 0.65 + sprintSpeedModifier: 0.65 - !type:ModifyStatusEffect conditions: - !type:ReagentThreshold reagent: Nocturine min: 8 effectProto: StatusEffectForcedSleeping - time: 3 - delay: 6 - type: Add + time: 6 + delay: 5 + type: Update - type: reagent id: MuteToxin From 632243ad0138feba7f66b5e3858556ddd6bd458e Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:41:27 +0200 Subject: [PATCH 09/10] Now the changelog is fine --- Resources/Changelog/Changelog.yml | 175 ------------------------------ 1 file changed, 175 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d4e49c44b1..6b64a31d64 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,179 +1,4 @@ Entries: -- author: CoconutThunder - changes: - - message: The Chief Medical Officer should now appear with the correct precedence - in the crew manifest. - type: Fix - id: 8560 - time: '2025-05-24T05:10:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37774 -- author: TiniestShark - changes: - - message: Added inhand sprites for the bartender utensils and mugs. - type: Add - id: 8561 - time: '2025-05-24T17:32:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37771 -- author: K-Dynamic - changes: - - message: Shutters and blast doors now appear welded when welded. - type: Fix - id: 8562 - time: '2025-05-25T15:57:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37807 -- author: Stop-Signs - changes: - - message: Meals now better reflect the amount of ingredients put into them. - type: Tweak - id: 8563 - time: '2025-05-25T18:02:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/34138 -- author: brainfood1183 - changes: - - message: Kangaroos can now be equipped with northstars and knuckle dusters. - type: Tweak - id: 8564 - time: '2025-05-25T18:03:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37789 -- author: Moomoobeef - changes: - - message: Added new variants to dirty tiles. - type: Tweak - id: 8565 - time: '2025-05-25T18:11:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37800 -- author: AsnDen - changes: - - message: Tile-aligned bar sign version was added. - type: Add - - message: Bar signs now have proper collision. - type: Fix - id: 8566 - time: '2025-05-25T18:36:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37756 -- author: Fildrance - changes: - - message: Spray nozzle now can consume liquids from puddles and put it right into - backpacked tank. - type: Add - id: 8567 - time: '2025-05-26T03:36:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30600 -- author: Southbridge - changes: - - message: On Amber, gave security its missing beacon and barriers. - type: Fix - id: 8568 - time: '2025-05-26T07:29:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37700 -- author: jessicamaybe - changes: - - message: NPC Gorillas can now pry open doors and vault/smash tables! - type: Tweak - id: 8569 - time: '2025-05-26T10:49:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37822 -- author: ArtisticRoomba - changes: - - message: The TEG's efficiency in extracting power from gasses has been tweaked - to promote dual-loop designs that recycle the waste heat of gasses, and punish - "meta" single loop designs. - type: Tweak - id: 8570 - time: '2025-05-26T11:53:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37728 -- author: ArtisticRoomba - changes: - - message: The TEG now outputs smoother power when pressure across the circulators - flutter. (This was causing epilepsy in extreme circumstances). - type: Fix - id: 8571 - time: '2025-05-26T12:07:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37658 -- author: chromiumboy - changes: - - message: Sentry turret control panels can now be found adjacent to rooms containing - sentry turrets. Authorized personnel can use these panels to remotely monitor - and alter the settings of any linked sentry turrets. - type: Add - id: 8572 - time: '2025-05-26T13:00:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35235 -- author: metalgearsloth - changes: - - message: You no longer face items for a single frame when clicking while moving. - type: Tweak - id: 8573 - time: '2025-05-27T11:34:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37874 -- author: Simyon - changes: - - message: Capacitors and Matter bins have been combined into the Manipulator. - type: Remove - id: 8574 - time: '2025-05-27T11:47:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37725 -- author: PicklOH - changes: - - message: Gas Pipes are now named as such in the construction menu. - type: Tweak - id: 8575 - time: '2025-05-27T16:26:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37881 -- author: ProfRenderer - changes: - - message: Cluwne ID cards now have a job icon. - type: Tweak - id: 8576 - time: '2025-05-27T16:39:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37834 -- author: Moomoobeef - changes: - - message: Bookshelves now contain a more reasonable amount of books. - type: Tweak - id: 8577 - time: '2025-05-27T21:21:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37866 -- author: SlamBamActionman - changes: - - message: Seismic Charges now trigger the timer when sent a signal, instead of - detonating instantly. - type: Tweak - - message: Signal Triggers for modular grenades now detonate after a 3 second delay. - type: Tweak - id: 8578 - time: '2025-05-28T07:31:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/34465 -- author: Minemoder5000 - changes: - - message: Grape juice cups now contain grape juice. - type: Fix - id: 8579 - time: '2025-05-28T09:32:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37895 -- author: Moomoobeef - changes: - - message: Made high-viz vest less visible. - type: Tweak - id: 8580 - time: '2025-05-28T09:39:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37869 -- author: deltanedas - changes: - - message: Diona "Gib yourself!" action now has a suicide warning like microbombs. - type: Tweak - id: 8581 - time: '2025-05-28T19:52:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27422 -- author: sowelipililimute - changes: - - message: Plants can process nutrition again - type: Fix - - message: Plants can process robust harvest again - type: Fix - id: 8582 - time: '2025-05-28T22:51:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37912 - author: mhamster changes: - message: Chameleon clothes are now affected by any kind of EMP explosion, which From 36b59bddc4108a00978aa7cd719330a8ddf59493 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:46:54 +0200 Subject: [PATCH 10/10] Add experimental to noc changelog --- Resources/Changelog/Changelog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6b64a31d64..903930e634 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3754,7 +3754,7 @@ url: https://github.com/space-wizards/space-station-14/pull/40786 - author: SlamBamActionman changes: - - message: Nocturine now slows the target down, with a longer duration and shorter + - message: EXPERIMENTAL Nocturine now slows the target down, with a longer duration and shorter delay before activating. type: Tweak id: 9060