From ef02f8c18cb1c5423c9d7bae3aea5b1fa6ac2b86 Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Thu, 18 Jul 2024 00:04:51 +0200 Subject: [PATCH 01/22] Temporarily remove Vox from space ninja and Unknown Shuttle ghostroles (#30099) * no vox ninjas * blacklist vox from UnknownShuttleEvent --- Resources/Prototypes/Entities/Mobs/Player/humanoid.yml | 10 ++++++++++ Resources/Prototypes/GameRules/events.yml | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml index 5bcc33b5f6..47baca6134 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml @@ -607,6 +607,8 @@ - type: randomHumanoidSettings id: LostCargoTechnician parent: EventHumanoid + speciesBlacklist: + - Vox components: - type: GhostRole name: ghost-role-information-lost-cargo-technical-name @@ -658,6 +660,8 @@ id: ClownTroupe parent: EventHumanoid randomizeName: false + speciesBlacklist: + - Vox components: - type: GhostRole name: ghost-role-information-clown-troupe-name @@ -708,6 +712,8 @@ - type: randomHumanoidSettings id: TravelingChef parent: EventHumanoid + speciesBlacklist: + - Vox components: - type: GhostRole name: ghost-role-information-traveling-chef-name @@ -768,6 +774,8 @@ - type: randomHumanoidSettings id: DisasterVictimHead parent: EventHumanoidMindShielded + speciesBlacklist: + - Vox components: - type: GhostRole name: ghost-role-information-disaster-victim-name @@ -826,6 +834,8 @@ - type: randomHumanoidSettings id: SyndieDisasterVictim parent: EventHumanoid + speciesBlacklist: + - Vox components: - type: NpcFactionMember factions: diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 0b183039a9..7784b72556 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -151,6 +151,10 @@ minimumPlayers: 30 - type: SpaceSpawnRule - type: AntagLoadProfileRule + # Vox disabled until loadouts work on AntagSelection-based spawns + speciesOverride: Human + speciesOverrideBlacklist: + - Vox - type: AntagObjectives objectives: - StealResearchObjective From 2d5bb92f463d964c096904af64c7e442be4aaeed Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 17 Jul 2024 22:05:58 +0000 Subject: [PATCH 02/22] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fd909d6b12..99fa3976e3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Fixed cargo telepads not teleporting in orders from linked consoles. - type: Fix - id: 6429 - time: '2024-04-23T12:07:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27255 - author: Plykiya changes: - message: Do-after bars of other players are now shaded and harder to see in the @@ -3804,3 +3797,11 @@ id: 6928 time: '2024-07-17T13:50:25.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30033 +- author: Errant + changes: + - message: Vox are temporarily removed from Space Ninjas and all Unknown Shuttle + ghostroles, until code supports giving them species-specific gear. + type: Tweak + id: 6929 + time: '2024-07-17T22:04:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30099 From e1f429b6b3a7759587d26a99e741d66e37a32add Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Thu, 18 Jul 2024 01:37:03 +0300 Subject: [PATCH 03/22] DungeonSystem.Rooms bugfix (#30125) Update DungeonSystem.Rooms.cs --- Content.Server/Procedural/DungeonSystem.Rooms.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Procedural/DungeonSystem.Rooms.cs b/Content.Server/Procedural/DungeonSystem.Rooms.cs index 8a1606c488..20d64acff1 100644 --- a/Content.Server/Procedural/DungeonSystem.Rooms.cs +++ b/Content.Server/Procedural/DungeonSystem.Rooms.cs @@ -118,7 +118,7 @@ public sealed partial class DungeonSystem // go BRRNNTTT on existing stuff if (clearExisting) { - var gridBounds = new Box2(Vector2.Transform(Vector2.Zero, roomTransform), Vector2.Transform(room.Size, roomTransform)); + var gridBounds = new Box2(Vector2.Transform(-room.Size/2, roomTransform), Vector2.Transform(room.Size/2, roomTransform)); _entitySet.Clear(); // Polygon skin moment gridBounds = gridBounds.Enlarged(-0.05f); From c7ea0490a67ec503f36e2ddeedb93a45dc914ce9 Mon Sep 17 00:00:00 2001 From: kbailey-git <84491830+kbailey-git@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:54:08 -0700 Subject: [PATCH 04/22] Updated slime storage capacity text in guidebook (#30121) --- Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml b/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml index 0374d4cb95..2c11508749 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/SlimePerson.xml @@ -18,7 +18,7 @@ - Slimepeople have an [bold]internal 2x2 storage inventory[/bold] inside of their slime membrane. Anyone can see what's inside and take it out of you without asking, + Slimepeople have an [bold]internal 2x3 storage inventory[/bold] inside of their slime membrane. Anyone can see what's inside and take it out of you without asking, so be careful. They [bold]don't drop their internal storage when they morph into a geras, however![/bold] Slimepeople have slight accelerated regeneration compared to other humanoids. They're also capable of hardening their fists, and as such have stronger punches, From 95b56ad4ce8cd9f1be995c5d9a02a612e5434316 Mon Sep 17 00:00:00 2001 From: Cojoke <83733158+Cojoke-dot@users.noreply.github.com> Date: Wed, 17 Jul 2024 19:40:54 -0500 Subject: [PATCH 05/22] Prevent Quantum Spin Inverter from Teleporting Things into Microwaves (#29200) * Prevent Quantum Spin Inverter from Teleporting Things into Microwaves * Simplifies code, GetTeleportingEntity instead of TryGet, adds failed teleport message * remove using Linguini.Syntax.Ast; * capital... * re-add CanInsert and Fixes microwave issue * beb * beeb --- .../Kitchen/EntitySystems/MicrowaveSystem.cs | 27 +++++++++++++++++++ .../Systems/SwapTeleporterSystem.cs | 23 +++++++++++----- .../Locale/en-US/portal/swap-teleporter.ftl | 1 + 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index eefa539149..71986ae859 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -79,6 +79,7 @@ namespace Content.Server.Kitchen.EntitySystems SubscribeLocalEvent(OnContentUpdate); SubscribeLocalEvent(OnContentUpdate); SubscribeLocalEvent(OnInteractUsing, after: new[] { typeof(AnchorableSystem) }); + SubscribeLocalEvent(OnInsertAttempt); SubscribeLocalEvent(OnBreak); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnAnchorChanged); @@ -309,6 +310,32 @@ namespace Content.Server.Kitchen.EntitySystems UpdateUserInterfaceState(uid, component); } + private void OnInsertAttempt(Entity ent, ref ContainerIsInsertingAttemptEvent args) + { + if (ent.Comp.Broken) + { + args.Cancel(); + return; + } + + if (TryComp(args.EntityUid, out var item)) + { + if (_item.GetSizePrototype(item.Size) > _item.GetSizePrototype(ent.Comp.MaxItemSize)) + { + args.Cancel(); + return; + } + } + else + { + args.Cancel(); + return; + } + + if (ent.Comp.Storage.Count >= ent.Comp.Capacity) + args.Cancel(); + } + private void OnInteractUsing(Entity ent, ref InteractUsingEvent args) { if (args.Handled) diff --git a/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs b/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs index 58c249fec5..a5ad77d43b 100644 --- a/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs +++ b/Content.Shared/Teleportation/Systems/SwapTeleporterSystem.cs @@ -150,8 +150,19 @@ public sealed class SwapTeleporterSystem : EntitySystem return; } - var teleEnt = GetTeleportingEntity((uid, xform)); - var otherTeleEnt = GetTeleportingEntity((linkedEnt, Transform(linkedEnt))); + var (teleEnt, cont) = GetTeleportingEntity((uid, xform)); + var (otherTeleEnt, otherCont) = GetTeleportingEntity((linkedEnt, Transform(linkedEnt))); + + if (otherCont != null && !_container.CanInsert(teleEnt, otherCont) || + cont != null && !_container.CanInsert(otherTeleEnt, cont)) + { + _popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-fail", + ("entity", Identity.Entity(linkedEnt, EntityManager))), + teleEnt, + teleEnt, + PopupType.MediumCaution); + return; + } _popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-other", ("entity", Identity.Entity(linkedEnt, EntityManager))), @@ -184,20 +195,20 @@ public sealed class SwapTeleporterSystem : EntitySystem DestroyLink(linked, user); // the linked one is shown globally } - private EntityUid GetTeleportingEntity(Entity ent) + private (EntityUid, BaseContainer?) GetTeleportingEntity(Entity ent) { var parent = ent.Comp.ParentUid; if (_container.TryGetOuterContainer(ent, ent, out var container)) parent = container.Owner; if (HasComp(parent) || HasComp(parent)) - return ent; + return (ent, container); if (!_xformQuery.TryGetComponent(parent, out var parentXform) || parentXform.Anchored) - return ent; + return (ent, container); if (!TryComp(parent, out var body) || body.BodyType == BodyType.Static) - return ent; + return (ent, container); return GetTeleportingEntity((parent, parentXform)); } diff --git a/Resources/Locale/en-US/portal/swap-teleporter.ftl b/Resources/Locale/en-US/portal/swap-teleporter.ftl index f13fa9be42..0040ad0a88 100644 --- a/Resources/Locale/en-US/portal/swap-teleporter.ftl +++ b/Resources/Locale/en-US/portal/swap-teleporter.ftl @@ -5,6 +5,7 @@ swap-teleporter-popup-link-destroyed = Quantum link destroyed! swap-teleporter-popup-teleport-cancel-time = It's still recharging! swap-teleporter-popup-teleport-cancel-link = It's not linked with another device! swap-teleporter-popup-teleport-other = {CAPITALIZE(THE($entity))} activates, and you find yourself somewhere else. +swap-teleporter-popup-teleport-fail = {CAPITALIZE(THE($entity))} activates and fails to transport you anywhere. swap-teleporter-verb-destroy-link = Destroy Quantum Link From 3f014e84ebf3dd860ec3595ad59f580fcff3b852 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Thu, 18 Jul 2024 02:41:15 +0200 Subject: [PATCH 06/22] minor SharedInteractionSystem cleanup (#30139) cleanup SharedInteractionSystem --- Content.Shared/Interaction/SharedInteractionSystem.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 48076ca360..c32b4bcf78 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -38,8 +38,6 @@ using Robust.Shared.Serialization; using Robust.Shared.Timing; using Robust.Shared.Utility; -#pragma warning disable 618 - namespace Content.Shared.Interaction { /// @@ -522,11 +520,11 @@ namespace Content.Shared.Interaction protected bool ValidateInteractAndFace(EntityUid user, EntityCoordinates coordinates) { // Verify user is on the same map as the entity they clicked on - if (coordinates.GetMapId(EntityManager) != Transform(user).MapID) + if (_transform.GetMapId(coordinates) != Transform(user).MapID) return false; if (!HasComp(user)) - _rotateToFaceSystem.TryFaceCoordinates(user, coordinates.ToMapPos(EntityManager, _transform)); + _rotateToFaceSystem.TryFaceCoordinates(user, _transform.ToMapCoordinates(coordinates).Position); return true; } @@ -859,7 +857,7 @@ namespace Content.Shared.Interaction Ignored? predicate = null, bool popup = false) { - return InRangeUnobstructed(origin, other.ToMap(EntityManager, _transform), range, collisionMask, predicate, popup); + return InRangeUnobstructed(origin, _transform.ToMapCoordinates(other), range, collisionMask, predicate, popup); } /// @@ -966,7 +964,7 @@ namespace Content.Shared.Interaction /// public void InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool canReach) { - if (target is {Valid: false}) + if (target is { Valid: false }) target = null; var afterInteractEvent = new AfterInteractEvent(user, used, target, clickLocation, canReach); From d7b2e728821697210a8d67ec0464dba642c0ff3c Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Jul 2024 00:42:02 +0000 Subject: [PATCH 07/22] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 99fa3976e3..c768ac40e7 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Do-after bars of other players are now shaded and harder to see in the - dark. - type: Tweak - id: 6430 - time: '2024-04-24T02:42:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27273 - author: Blackern5000 changes: - message: The cargo telepad is now tier 2 technology rather than tier 3. @@ -3805,3 +3797,11 @@ id: 6929 time: '2024-07-17T22:04:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30099 +- author: Cojoke-dot + changes: + - message: You can no longer teleport objects that should not be in other objects + into other objects with the Quantum Spin Inverter + type: Fix + id: 6930 + time: '2024-07-18T00:40:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29200 From 961a553fa2e335bfb7edbf7c4dd2214aa68c2014 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:48:08 -0700 Subject: [PATCH 08/22] Fix stun batons using excess charges when thrown (#30136) Fix stun batons Co-authored-by: plykiya --- Content.Shared/Damage/Systems/StaminaSystem.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Content.Shared/Damage/Systems/StaminaSystem.cs b/Content.Shared/Damage/Systems/StaminaSystem.cs index 1f9a7f1dd8..a5c8a4b38d 100644 --- a/Content.Shared/Damage/Systems/StaminaSystem.cs +++ b/Content.Shared/Damage/Systems/StaminaSystem.cs @@ -192,6 +192,11 @@ public sealed partial class StaminaSystem : EntitySystem private void OnCollide(EntityUid uid, StaminaDamageOnCollideComponent component, EntityUid target) { + // you can't inflict stamina damage on things with no stamina component + // this prevents stun batons from using up charges when throwing it at lockers or lights + if (!HasComp(target)) + return; + var ev = new StaminaDamageOnHitAttemptEvent(); RaiseLocalEvent(uid, ref ev); if (ev.Cancelled) From 58a2a4c932dfa5593221de1d315470fc4ffa8976 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Jul 2024 00:49:15 +0000 Subject: [PATCH 09/22] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c768ac40e7..2ba6a098e0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: The cargo telepad is now tier 2 technology rather than tier 3. - type: Tweak - id: 6431 - time: '2024-04-24T13:21:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26270 - author: FungiFellow changes: - message: Truncheon now fits in SecBelt @@ -3805,3 +3798,10 @@ id: 6930 time: '2024-07-18T00:40:54.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/29200 +- author: Plykiya + changes: + - message: Stun batons no longer use up charges when hitting objects without stamina. + type: Fix + id: 6931 + time: '2024-07-18T00:48:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30136 From 73111b5170d76cfe2df0e5c21e1b6e923ec214ec Mon Sep 17 00:00:00 2001 From: Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com> Date: Thu, 18 Jul 2024 07:17:57 +0000 Subject: [PATCH 10/22] fix(dev_map): resave dev map (#30098) fix(dev_map): Resave devmap Co-authored-by: 4llv07e --- Resources/Maps/Test/dev_map.yml | 121 +++----------------------------- 1 file changed, 10 insertions(+), 111 deletions(-) diff --git a/Resources/Maps/Test/dev_map.yml b/Resources/Maps/Test/dev_map.yml index ca885d584b..520a4da5ae 100644 --- a/Resources/Maps/Test/dev_map.yml +++ b/Resources/Maps/Test/dev_map.yml @@ -385,11 +385,11 @@ entities: - type: Transform - type: Map - type: PhysicsMap + - type: GridTree + - type: MovedGrids - type: Broadphase - type: OccluderTree - type: LoadedMap - - type: GridTree - - type: MovedGrids - proto: AirAlarm entities: - uid: 800 @@ -401,8 +401,6 @@ entities: - type: DeviceList devices: - 801 - - type: AtmosDevice - joinedGrid: 179 - proto: AirCanister entities: - uid: 458 @@ -410,8 +408,6 @@ entities: - type: Transform pos: 7.5,-0.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: Airlock entities: - uid: 48 @@ -901,33 +897,21 @@ entities: - type: Transform pos: -2.5,-14.5 parent: 179 - - type: DeviceLinkSink - links: - - 1013 - uid: 697 components: - type: Transform pos: 1.5,-14.5 parent: 179 - - type: DeviceLinkSink - links: - - 1014 - uid: 698 components: - type: Transform pos: 1.5,-16.5 parent: 179 - - type: DeviceLinkSink - links: - - 1014 - uid: 984 components: - type: Transform pos: -2.5,-16.5 parent: 179 - - type: DeviceLinkSink - links: - - 1013 - proto: BoozeDispenser entities: - uid: 752 @@ -2660,13 +2644,6 @@ entities: - type: Transform pos: 24.5,5.5 parent: 179 -- proto: chem_master - entities: - - uid: 311 - components: - - type: Transform - pos: 8.5,11.5 - parent: 179 - proto: ChemDispenser entities: - uid: 583 @@ -2704,6 +2681,13 @@ entities: - type: Transform pos: 6.4651074,9.828774 parent: 179 +- proto: ChemMaster + entities: + - uid: 311 + components: + - type: Transform + pos: 8.5,11.5 + parent: 179 - proto: ChemMasterMachineCircuitboard entities: - uid: 718 @@ -3031,27 +3015,18 @@ entities: - type: Transform pos: -2.5,-15.5 parent: 179 - - type: DeviceLinkSink - links: - - 699 - uid: 259 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-14.5 parent: 179 - - type: DeviceLinkSink - links: - - 983 - uid: 463 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-16.5 parent: 179 - - type: DeviceLinkSink - links: - - 983 - uid: 677 components: - type: Transform @@ -3063,61 +3038,40 @@ entities: rot: -1.5707963267948966 rad pos: -1.5,11.5 parent: 179 - - type: DeviceLinkSink - links: - - 722 - uid: 720 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,11.5 parent: 179 - - type: DeviceLinkSink - links: - - 722 - uid: 721 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,11.5 parent: 179 - - type: DeviceLinkSink - links: - - 722 - uid: 985 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-13.5 parent: 179 - - type: DeviceLinkSink - links: - - 983 - uid: 989 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-15.5 parent: 179 - - type: DeviceLinkSink - links: - - 983 - uid: 990 components: - type: Transform pos: -2.5,-13.5 parent: 179 - - type: DeviceLinkSink - links: - - 699 - uid: 991 components: - type: Transform pos: -2.5,-16.5 parent: 179 - - type: DeviceLinkSink - links: - - 699 - proto: CrateEngineeringToolbox entities: - uid: 692 @@ -3575,8 +3529,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-3.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasMixer entities: - uid: 747 @@ -3585,8 +3537,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-2.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasOutletInjector entities: - uid: 429 @@ -3595,8 +3545,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-1.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasPipeBend entities: - uid: 727 @@ -3635,8 +3583,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-0.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasPressurePump entities: - uid: 171 @@ -3645,8 +3591,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-3.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasValve entities: - uid: 168 @@ -3655,8 +3599,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-2.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasVentPump entities: - uid: 729 @@ -3665,8 +3607,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-3.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasVentScrubber entities: - uid: 452 @@ -3675,8 +3615,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-2.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GasVolumePump entities: - uid: 160 @@ -3685,8 +3623,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-1.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: GeigerCounter entities: - uid: 759 @@ -4223,9 +4159,6 @@ entities: - type: Transform pos: 12.5,24.5 parent: 179 - - type: DeviceLinkSink - links: - - 1083 - proto: MachineFrame entities: - uid: 533 @@ -4379,8 +4312,6 @@ entities: - type: Transform pos: 7.5,-1.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: Ointment entities: - uid: 148 @@ -4400,8 +4331,6 @@ entities: - type: Transform pos: 7.5,-3.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: PaperBin10 entities: - uid: 977 @@ -4435,8 +4364,6 @@ entities: - type: Transform pos: 7.5,-2.5 parent: 179 - - type: AtmosDevice - joinedGrid: 179 - proto: PlasticFlapsAirtightClear entities: - uid: 997 @@ -5112,7 +5039,7 @@ entities: - type: Transform pos: -6.5,-12.5 parent: 179 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 751 components: @@ -5164,20 +5091,6 @@ entities: - type: Transform pos: -3.5,4.5 parent: 179 -- proto: SpawnVehicleATV - entities: - - uid: 1176 - components: - - type: Transform - pos: -7.5,1.5 - parent: 179 -- proto: SpawnVehicleJanicart - entities: - - uid: 904 - components: - - type: Transform - pos: 5.5,16.5 - parent: 179 - proto: Spear entities: - uid: 185 @@ -5809,20 +5722,6 @@ entities: - type: Transform pos: -7.5,4.5 parent: 179 -- proto: VehicleKeyATV - entities: - - uid: 1187 - components: - - type: Transform - pos: -6.8905525,1.5128828 - parent: 179 -- proto: VehicleKeyJanicart - entities: - - uid: 14 - components: - - type: Transform - pos: 6.5,16.5 - parent: 179 - proto: VendingMachineCigs entities: - uid: 870 From a94f1f0fe0b985236b508da25311d21aa92130b5 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Thu, 18 Jul 2024 20:43:20 +0200 Subject: [PATCH 11/22] Correct .editorconfig to use no space after casting (#30132) --- .editorconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index a5dfab07a5..1583c600aa 100644 --- a/.editorconfig +++ b/.editorconfig @@ -129,7 +129,7 @@ csharp_indent_braces = false csharp_indent_switch_labels = true # Space preferences -csharp_space_after_cast = true +csharp_space_after_cast = false csharp_space_after_colon_in_inheritance_clause = true csharp_space_after_comma = true csharp_space_after_dot = false From 437fc936a2faacd409c56b164fd4cb1974d2f454 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Thu, 18 Jul 2024 22:29:20 +0300 Subject: [PATCH 12/22] LatheSystem independently of energy (#30148) * Update LatheSystem.cs * Emo --- Content.Server/Power/EntitySystems/StaticPowerSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Power/EntitySystems/StaticPowerSystem.cs b/Content.Server/Power/EntitySystems/StaticPowerSystem.cs index 9e11d9311a..61a23e501d 100644 --- a/Content.Server/Power/EntitySystems/StaticPowerSystem.cs +++ b/Content.Server/Power/EntitySystems/StaticPowerSystem.cs @@ -9,7 +9,7 @@ public static class StaticPowerSystem public static bool IsPowered(this EntitySystem system, EntityUid uid, IEntityManager entManager, ApcPowerReceiverComponent? receiver = null) { if (receiver == null && !entManager.TryGetComponent(uid, out receiver)) - return false; + return true; return receiver.Powered; } From 2fb2cde1253f08488df14cb3c6bc6735903cc0fc Mon Sep 17 00:00:00 2001 From: Smirnov Peter <131467813+Sh18RW@users.noreply.github.com> Date: Fri, 19 Jul 2024 01:34:18 +0300 Subject: [PATCH 13/22] Add item checking for moth food (#30019) * Add ContainerContainer component checking for moth food * Use ItemSlotsComponent checking on food item --- Content.Server/Nutrition/EntitySystems/FoodSystem.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index fc9d228b05..d609f737e7 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -10,7 +10,6 @@ using Content.Shared.Administration.Logs; using Content.Shared.Body.Components; using Content.Shared.Body.Organ; using Content.Shared.Chemistry; -using Content.Shared.Chemistry.Reagent; using Content.Shared.Database; using Content.Shared.DoAfter; using Content.Shared.FixedPoint; @@ -31,6 +30,7 @@ using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Utility; using System.Linq; +using Content.Shared.Containers.ItemSlots; using Robust.Server.GameObjects; using Content.Shared.Whitelist; @@ -138,6 +138,16 @@ public sealed class FoodSystem : EntitySystem return (false, true); } + // Checks for used item slots + if (TryComp(food, out var itemSlots)) + { + if (itemSlots.Slots.Any(slot => slot.Value.HasItem)) + { + _popup.PopupEntity(Loc.GetString("food-has-used-storage", ("food", food)), user, user); + return (false, true); + } + } + var flavors = _flavorProfile.GetLocalizedFlavorsMessage(food, user, foodSolution); if (GetUsesRemaining(food, foodComp) <= 0) From 0c2b56962267d006965b4b3b3ee20fbbbfdb0280 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Jul 2024 22:35:26 +0000 Subject: [PATCH 14/22] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2ba6a098e0..e2ceb5193a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: FungiFellow - changes: - - message: Truncheon now fits in SecBelt - type: Tweak - id: 6432 - time: '2024-04-24T13:43:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27281 - author: pigeonpeas changes: - message: Adds a trash bag to the advanced cleaning module. @@ -3805,3 +3798,10 @@ id: 6931 time: '2024-07-18T00:48:09.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30136 +- author: Sh18RW + changes: + - message: Moth can't eat boots with an item more + type: Fix + id: 6932 + time: '2024-07-18T22:34:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30019 From 3ef5f521e2e162b2372b563cc0879313deddcd7b Mon Sep 17 00:00:00 2001 From: portfiend <109661617+portfiend@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:36:53 -0400 Subject: [PATCH 15/22] fix: give reptilians species mask sprites in lobby (#30095) --- Resources/Prototypes/Entities/Mobs/Species/reptilian.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index ad543620cf..0d93e6fe51 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -71,5 +71,11 @@ components: - type: HumanoidAppearance species: Reptilian + hideLayersOnEquip: + - Snout + - HeadTop + - HeadSide + - type: Inventory + speciesId: reptilian #Weh From d30b45f23f17d396c7c55ce33806939d9af66c94 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Jul 2024 22:37:59 +0000 Subject: [PATCH 16/22] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e2ceb5193a..6f0ba27d30 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: pigeonpeas - changes: - - message: Adds a trash bag to the advanced cleaning module. - type: Add - id: 6433 - time: '2024-04-24T21:27:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27226 - author: Beck Thompson changes: - message: Radio jammer now has 3 selectable power operating levels and a battery @@ -3805,3 +3798,10 @@ id: 6932 time: '2024-07-18T22:34:18.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30019 +- author: portfiend + changes: + - message: Reptilians display correct mask sprites in character customization screen. + type: Fix + id: 6933 + time: '2024-07-18T22:36:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30095 From 84fe6bcde4acc7334523c46c9564dcc8d79015de Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Thu, 18 Jul 2024 17:21:01 -0700 Subject: [PATCH 17/22] Fix arrow pointing animation (#30134) Fixa the arrows Co-authored-by: plykiya --- Content.Server/Pointing/EntitySystems/PointingSystem.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Content.Server/Pointing/EntitySystems/PointingSystem.cs b/Content.Server/Pointing/EntitySystems/PointingSystem.cs index 4b7f50fb86..f2f60f3063 100644 --- a/Content.Server/Pointing/EntitySystems/PointingSystem.cs +++ b/Content.Server/Pointing/EntitySystems/PointingSystem.cs @@ -152,9 +152,7 @@ namespace Content.Server.Pointing.EntitySystems if (TryComp(arrow, out var pointing)) { - if (TryComp(player, out TransformComponent? xformPlayer)) - pointing.StartPosition = _transform.ToCoordinates((player, xformPlayer), _transform.ToMapCoordinates(xformPlayer.Coordinates)).Position; - + pointing.StartPosition = _transform.ToCoordinates((arrow, Transform(arrow)), _transform.ToMapCoordinates(Transform(player).Coordinates)).Position; pointing.EndTime = _gameTiming.CurTime + PointDuration; Dirty(arrow, pointing); From b57174007c8d455d10cfa6a2e8563993e935838e Mon Sep 17 00:00:00 2001 From: Cojoke <83733158+Cojoke-dot@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:22:23 -0500 Subject: [PATCH 18/22] Remove all Assigned Values that are Never Used (#30110) Remove all Assigned Values that are never used --- .../Administration/UI/Tabs/ObjectsTab/ObjectsTab.xaml.cs | 1 - Content.Client/Construction/ConstructionSystem.cs | 1 - Content.Client/Lathe/UI/LatheMenu.xaml.cs | 1 - Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs | 1 - Content.Server/Ame/EntitySystems/AmeControllerSystem.cs | 2 -- Content.Server/Chat/Systems/ChatSystem.cs | 1 - Content.Server/Cluwne/CluwneSystem.cs | 1 - Content.Server/Doors/Systems/FirelockSystem.cs | 1 - Content.Server/Dragon/DragonSystem.cs | 1 - Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs | 1 - Content.Server/GameTicking/Rules/SecretRuleSystem.cs | 1 - Content.Server/GameTicking/Rules/ThiefRuleSystem.cs | 2 -- Content.Server/GameTicking/Rules/TraitorRuleSystem.cs | 1 - Content.Server/Instruments/InstrumentSystem.cs | 1 - Content.Server/Medical/DefibrillatorSystem.cs | 1 - Content.Server/Ninja/Systems/SpaceNinjaSystem.cs | 3 --- Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs | 1 - .../Players/PlayTimeTracking/PlayTimeTrackingSystem.cs | 1 - Content.Server/Power/EntitySystems/PowerNetSystem.cs | 1 - Content.Server/Power/EntitySystems/PowerReceiverSystem.cs | 1 - Content.Server/Procedural/DungeonSystem.cs | 1 - Content.Server/Silicons/Borgs/BorgSystem.cs | 1 - Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs | 1 - Content.Server/Station/Systems/StationSystem.cs | 2 -- Content.Server/Traits/TraitSystem.cs | 1 - Content.Shared/Actions/SharedActionsSystem.cs | 1 - Content.Shared/Beeper/Systems/ProximityBeeperSystem.cs | 2 -- Content.Shared/Clothing/ClothingSpeedModifierSystem.cs | 3 --- Content.Shared/Movement/Pulling/Systems/PullingSystem.cs | 1 - Content.Shared/Ninja/Systems/DashAbilitySystem.cs | 1 - 30 files changed, 38 deletions(-) diff --git a/Content.Client/Administration/UI/Tabs/ObjectsTab/ObjectsTab.xaml.cs b/Content.Client/Administration/UI/Tabs/ObjectsTab/ObjectsTab.xaml.cs index 78eefa3462..7082617c94 100644 --- a/Content.Client/Administration/UI/Tabs/ObjectsTab/ObjectsTab.xaml.cs +++ b/Content.Client/Administration/UI/Tabs/ObjectsTab/ObjectsTab.xaml.cs @@ -14,7 +14,6 @@ namespace Content.Client.Administration.UI.Tabs.ObjectsTab; public sealed partial class ObjectsTab : Control { [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IGameTiming _timing = default!; private readonly Color _altColor = Color.FromHex("#292B38"); private readonly Color _defaultColor = Color.FromHex("#2F2F3B"); diff --git a/Content.Client/Construction/ConstructionSystem.cs b/Content.Client/Construction/ConstructionSystem.cs index 889c992f7f..f909b23423 100644 --- a/Content.Client/Construction/ConstructionSystem.cs +++ b/Content.Client/Construction/ConstructionSystem.cs @@ -26,7 +26,6 @@ namespace Content.Client.Construction { [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly ExamineSystemShared _examineSystem = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; diff --git a/Content.Client/Lathe/UI/LatheMenu.xaml.cs b/Content.Client/Lathe/UI/LatheMenu.xaml.cs index 265130d15d..f2f52b67b5 100644 --- a/Content.Client/Lathe/UI/LatheMenu.xaml.cs +++ b/Content.Client/Lathe/UI/LatheMenu.xaml.cs @@ -21,7 +21,6 @@ public sealed partial class LatheMenu : DefaultWindow { [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IResourceCache _resources = default!; private EntityUid _owner; private readonly SpriteSystem _spriteSystem; diff --git a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs index 2c71fa8c40..ac51cdbac5 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs @@ -17,7 +17,6 @@ namespace Content.Client.VendingMachines.UI { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IGameTiming _timing = default!; private readonly Dictionary _dummies = []; diff --git a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs index eda9158273..bac2648307 100644 --- a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs +++ b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs @@ -22,8 +22,6 @@ namespace Content.Server.Ame.EntitySystems; public sealed class AmeControllerSystem : EntitySystem { [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly IAdminManager _adminManager = default!; - [Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 5358cdb442..88b306c6ad 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -60,7 +60,6 @@ public sealed partial class ChatSystem : SharedChatSystem [Dependency] private readonly StationSystem _stationSystem = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly ReplacementAccentSystem _wordreplacement = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; [Dependency] private readonly ExamineSystemShared _examineSystem = default!; diff --git a/Content.Server/Cluwne/CluwneSystem.cs b/Content.Server/Cluwne/CluwneSystem.cs index 18d82659de..f24f0143f3 100644 --- a/Content.Server/Cluwne/CluwneSystem.cs +++ b/Content.Server/Cluwne/CluwneSystem.cs @@ -29,7 +29,6 @@ public sealed class CluwneSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly AutoEmoteSystem _autoEmote = default!; - [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly NameModifierSystem _nameMod = default!; public override void Initialize() diff --git a/Content.Server/Doors/Systems/FirelockSystem.cs b/Content.Server/Doors/Systems/FirelockSystem.cs index 93ee18f683..87e5887c42 100644 --- a/Content.Server/Doors/Systems/FirelockSystem.cs +++ b/Content.Server/Doors/Systems/FirelockSystem.cs @@ -16,7 +16,6 @@ namespace Content.Server.Doors.Systems public sealed class FirelockSystem : SharedFirelockSystem { [Dependency] private readonly SharedDoorSystem _doorSystem = default!; - [Dependency] private readonly AtmosAlarmableSystem _atmosAlarmable = default!; [Dependency] private readonly AtmosphereSystem _atmosSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedMapSystem _mapping = default!; diff --git a/Content.Server/Dragon/DragonSystem.cs b/Content.Server/Dragon/DragonSystem.cs index e626edeb26..1f15def5ce 100644 --- a/Content.Server/Dragon/DragonSystem.cs +++ b/Content.Server/Dragon/DragonSystem.cs @@ -24,7 +24,6 @@ public sealed partial class DragonSystem : EntitySystem [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; [Dependency] private readonly NpcFactionSystem _faction = default!; [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly RoleSystem _role = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; diff --git a/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs b/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs index 3594242bcd..d2686ecdcd 100644 --- a/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/LoadMapRuleSystem.cs @@ -13,7 +13,6 @@ public sealed class LoadMapRuleSystem : GameRuleSystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly MapSystem _map = default!; [Dependency] private readonly MapLoaderSystem _mapLoader = default!; - [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly GridPreloaderSystem _gridPreloader = default!; diff --git a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs index 8608f250d4..e82cecde36 100644 --- a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs @@ -21,7 +21,6 @@ public sealed class SecretRuleSystem : GameRuleSystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IConfigurationManager _configurationManager = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IComponentFactory _compFact = default!; private string _ruleCompName = default!; diff --git a/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs b/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs index faec4a9e9c..074b4c0df7 100644 --- a/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs @@ -12,10 +12,8 @@ namespace Content.Server.GameTicking.Rules; public sealed class ThiefRuleSystem : GameRuleSystem { - [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; - [Dependency] private readonly ObjectivesSystem _objectives = default!; public override void Initialize() { diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 17442da857..a96020d0e3 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -29,7 +29,6 @@ public sealed class TraitorRuleSystem : GameRuleSystem [Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly SharedRoleSystem _roleSystem = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; - [Dependency] private readonly ObjectivesSystem _objectives = default!; public override void Initialize() { diff --git a/Content.Server/Instruments/InstrumentSystem.cs b/Content.Server/Instruments/InstrumentSystem.cs index 6814b596dc..f74dd7fb13 100644 --- a/Content.Server/Instruments/InstrumentSystem.cs +++ b/Content.Server/Instruments/InstrumentSystem.cs @@ -30,7 +30,6 @@ public sealed partial class InstrumentSystem : SharedInstrumentSystem [Dependency] private readonly UserInterfaceSystem _bui = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly TransformSystem _transform = default!; - [Dependency] private readonly InteractionSystem _interactions = default!; [Dependency] private readonly ExamineSystemShared _examineSystem = default!; private const float MaxInstrumentBandRange = 10f; diff --git a/Content.Server/Medical/DefibrillatorSystem.cs b/Content.Server/Medical/DefibrillatorSystem.cs index 1896f51edd..b6b50d4215 100644 --- a/Content.Server/Medical/DefibrillatorSystem.cs +++ b/Content.Server/Medical/DefibrillatorSystem.cs @@ -46,7 +46,6 @@ public sealed class DefibrillatorSystem : EntitySystem [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly SharedMindSystem _mind = default!; /// diff --git a/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs b/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs index 28ab633227..1ece045774 100644 --- a/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs +++ b/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs @@ -32,10 +32,7 @@ public sealed class SpaceNinjaSystem : SharedSpaceNinjaSystem [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly BatterySystem _battery = default!; [Dependency] private readonly CodeConditionSystem _codeCondition = default!; - [Dependency] private readonly IChatManager _chatMan = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; - [Dependency] private readonly RoleSystem _role = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedMindSystem _mind = default!; public override void Initialize() diff --git a/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs b/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs index f5d434090e..ac3df5868f 100644 --- a/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/SliceableFoodSystem.cs @@ -17,7 +17,6 @@ namespace Content.Server.Nutrition.EntitySystems { [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly TransformSystem _xformSystem = default!; public override void Initialize() diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index 09956e313f..ea6f0ad3f4 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -35,7 +35,6 @@ public sealed class PlayTimeTrackingSystem : EntitySystem [Dependency] private readonly MindSystem _minds = default!; [Dependency] private readonly PlayTimeTrackingManager _tracking = default!; [Dependency] private readonly IAdminManager _adminManager = default!; - [Dependency] private readonly SharedRoleSystem _role = default!; public override void Initialize() { diff --git a/Content.Server/Power/EntitySystems/PowerNetSystem.cs b/Content.Server/Power/EntitySystems/PowerNetSystem.cs index 6c35ba2008..a7098649ce 100644 --- a/Content.Server/Power/EntitySystems/PowerNetSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerNetSystem.cs @@ -22,7 +22,6 @@ namespace Content.Server.Power.EntitySystems [Dependency] private readonly PowerNetConnectorSystem _powerNetConnector = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IParallelManager _parMan = default!; - [Dependency] private readonly PowerReceiverSystem _powerReceiver = default!; private readonly PowerState _powerState = new(); private readonly HashSet _powerNetReconnectQueue = new(); diff --git a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs index 51520f0464..191d3fc4bd 100644 --- a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs @@ -21,7 +21,6 @@ namespace Content.Server.Power.EntitySystems { [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminManager _adminManager = default!; - [Dependency] private readonly AppearanceSystem _appearance = default!; [Dependency] private readonly AudioSystem _audio = default!; private EntityQuery _recQuery; private EntityQuery _provQuery; diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index b73e843fff..9a7abb7e33 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -33,7 +33,6 @@ public sealed partial class DungeonSystem : SharedDungeonSystem [Dependency] private readonly AnchorableSystem _anchorable = default!; [Dependency] private readonly DecalSystem _decals = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; - [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly TileSystem _tile = default!; [Dependency] private readonly MapLoaderSystem _loader = default!; [Dependency] private readonly SharedMapSystem _maps = default!; diff --git a/Content.Server/Silicons/Borgs/BorgSystem.cs b/Content.Server/Silicons/Borgs/BorgSystem.cs index 1c40e9489e..3f32afbffb 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.cs @@ -40,7 +40,6 @@ public sealed partial class BorgSystem : SharedBorgSystem [Dependency] private readonly IBanManager _banManager = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly SharedAccessSystem _access = default!; [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; diff --git a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs index e145e233e9..8a918bd2fd 100644 --- a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs +++ b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs @@ -17,7 +17,6 @@ public sealed partial class StationJobsSystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IBanManager _banManager = default!; - [Dependency] private readonly PlayTimeTrackingSystem _playTime = default!; private Dictionary> _jobsByWeight = default!; private List _orderedWeights = default!; diff --git a/Content.Server/Station/Systems/StationSystem.cs b/Content.Server/Station/Systems/StationSystem.cs index 84e44b6469..5930eef39b 100644 --- a/Content.Server/Station/Systems/StationSystem.cs +++ b/Content.Server/Station/Systems/StationSystem.cs @@ -27,10 +27,8 @@ namespace Content.Server.Station.Systems; [PublicAPI] public sealed class StationSystem : EntitySystem { - [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IPlayerManager _player = default!; - [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs index f41512b6ac..3bd540a304 100644 --- a/Content.Server/Traits/TraitSystem.cs +++ b/Content.Server/Traits/TraitSystem.cs @@ -11,7 +11,6 @@ namespace Content.Server.Traits; public sealed class TraitSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly ISerializationManager _serializationManager = default!; [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index 013348eb4f..ca6bd1dcc2 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -25,7 +25,6 @@ public abstract class SharedActionsSystem : EntitySystem [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly RotateToFaceSystem _rotateToFaceSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!; diff --git a/Content.Shared/Beeper/Systems/ProximityBeeperSystem.cs b/Content.Shared/Beeper/Systems/ProximityBeeperSystem.cs index ed3c6366c1..9830e165e5 100644 --- a/Content.Shared/Beeper/Systems/ProximityBeeperSystem.cs +++ b/Content.Shared/Beeper/Systems/ProximityBeeperSystem.cs @@ -12,8 +12,6 @@ namespace Content.Shared.Beeper.Systems; /// public sealed class ProximityBeeperSystem : EntitySystem { - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly ProximityDetectionSystem _proximity = default!; [Dependency] private readonly BeeperSystem _beeper = default!; /// diff --git a/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs b/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs index c1efe0b3dd..897f379156 100644 --- a/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs +++ b/Content.Shared/Clothing/ClothingSpeedModifierSystem.cs @@ -14,13 +14,10 @@ namespace Content.Shared.Clothing; public sealed class ClothingSpeedModifierSystem : EntitySystem { - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly ClothingSpeedModifierSystem _clothingSpeedModifier = default!; [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly ExamineSystemShared _examine = default!; [Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!; [Dependency] private readonly ItemToggleSystem _toggle = default!; - [Dependency] private readonly SharedPowerCellSystem _powerCell = default!; public override void Initialize() { diff --git a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs index f563440af0..557c316e26 100644 --- a/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs +++ b/Content.Shared/Movement/Pulling/Systems/PullingSystem.cs @@ -43,7 +43,6 @@ public sealed class PullingSystem : EntitySystem [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly HeldSpeedModifierSystem _clothingMoveSpeed = default!; public override void Initialize() diff --git a/Content.Shared/Ninja/Systems/DashAbilitySystem.cs b/Content.Shared/Ninja/Systems/DashAbilitySystem.cs index 1385219e47..09be108505 100644 --- a/Content.Shared/Ninja/Systems/DashAbilitySystem.cs +++ b/Content.Shared/Ninja/Systems/DashAbilitySystem.cs @@ -18,7 +18,6 @@ public sealed class DashAbilitySystem : EntitySystem { [Dependency] private readonly ActionContainerSystem _actionContainer = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly ExamineSystemShared _examine = default!; From 6d18dff33de3e94ebcfaa00a7b89243bf5110f84 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:08:52 -0700 Subject: [PATCH 19/22] Fix for thrown items dealing damage twice to first target (#30115) * FUCK YOU * fine --------- Co-authored-by: plykiya --- .../Damage/Systems/DamageOtherOnHitSystem.cs | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs index ff4d1cabe9..8a7b3df0b2 100644 --- a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs +++ b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs @@ -32,31 +32,25 @@ namespace Content.Server.Damage.Systems private void OnDoHit(EntityUid uid, DamageOtherOnHitComponent component, ThrowDoHitEvent args) { - if (!TerminatingOrDeleted(args.Target)) + if (TerminatingOrDeleted(args.Target)) + return; + + var dmg = _damageable.TryChangeDamage(args.Target, component.Damage, component.IgnoreResistances, origin: args.Component.Thrower); + + // Log damage only for mobs. Useful for when people throw spears at each other, but also avoids log-spam when explosions send glass shards flying. + if (dmg != null && HasComp(args.Target)) + _adminLogger.Add(LogType.ThrowHit, $"{ToPrettyString(args.Target):target} received {dmg.GetTotal():damage} damage from collision"); + + if (dmg is { Empty: false }) { - var dmg = _damageable.TryChangeDamage(args.Target, component.Damage, component.IgnoreResistances, origin: args.Component.Thrower); - - // Log damage only for mobs. Useful for when people throw spears at each other, but also avoids log-spam when explosions send glass shards flying. - if (dmg != null && HasComp(args.Target)) - _adminLogger.Add(LogType.ThrowHit, $"{ToPrettyString(args.Target):target} received {dmg.GetTotal():damage} damage from collision"); - - if (dmg is { Empty: false }) - { - _color.RaiseEffect(Color.Red, new List() { args.Target }, Filter.Pvs(args.Target, entityManager: EntityManager)); - } - - _guns.PlayImpactSound(args.Target, dmg, null, false); - if (TryComp(uid, out var body) && body.LinearVelocity.LengthSquared() > 0f) - { - var direction = body.LinearVelocity.Normalized(); - _sharedCameraRecoil.KickCamera(args.Target, direction); - } + _color.RaiseEffect(Color.Red, new List() { args.Target }, Filter.Pvs(args.Target, entityManager: EntityManager)); } - // TODO: If more stuff touches this then handle it after. - if (TryComp(uid, out var physics)) + _guns.PlayImpactSound(args.Target, dmg, null, false); + if (TryComp(uid, out var body) && body.LinearVelocity.LengthSquared() > 0f) { - _thrownItem.LandComponent(args.Thrown, args.Component, physics, false); + var direction = body.LinearVelocity.Normalized(); + _sharedCameraRecoil.KickCamera(args.Target, direction); } } From 56ee4da5352d94e45bfe45977a2ac05a16785430 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 19 Jul 2024 01:10:01 +0000 Subject: [PATCH 20/22] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6f0ba27d30..74a116880f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Beck Thompson - changes: - - message: Radio jammer now has 3 selectable power operating levels and a battery - level led indicator! - type: Tweak - id: 6434 - time: '2024-04-25T02:19:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/25912 - author: cooldolphin changes: - message: Three variants of glasses are now available in the loadout menu. @@ -3805,3 +3797,11 @@ id: 6933 time: '2024-07-18T22:36:53.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30095 +- author: Plykiya + changes: + - message: You no longer deal double damage to your first target when throwing an + item. + type: Fix + id: 6934 + time: '2024-07-19T01:08:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30115 From 6005a9f4cb9604a6c8cb5621746df7e078c12fbd Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:19:15 +1000 Subject: [PATCH 21/22] Fix door access in mapping mode (#30030) Fix shouldn't break anythingTM. --- .../DeviceNetwork/Systems/NetworkConfiguratorSystem.cs | 4 ++-- Content.Shared/Access/Systems/AccessReaderSystem.cs | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs b/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs index 402d005dd4..59b58c6933 100644 --- a/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs +++ b/Content.Server/DeviceNetwork/Systems/NetworkConfiguratorSystem.cs @@ -423,11 +423,11 @@ public sealed class NetworkConfiguratorSystem : SharedNetworkConfiguratorSystem if (Delay(configurator)) return; - if (!targetUid.HasValue || !configurator.ActiveDeviceLink.HasValue || !TryComp(userUid, out ActorComponent? actor) || !AccessCheck(targetUid.Value, userUid, configurator)) + if (!targetUid.HasValue || !configurator.ActiveDeviceLink.HasValue || !AccessCheck(targetUid.Value, userUid, configurator)) return; - _uiSystem.OpenUi(configuratorUid, NetworkConfiguratorUiKey.Link, actor.PlayerSession); + _uiSystem.OpenUi(configuratorUid, NetworkConfiguratorUiKey.Link, userUid); configurator.DeviceLinkTarget = targetUid; diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 5d1932a959..2e0737c6ab 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -155,7 +155,12 @@ public sealed class AccessReaderSystem : EntitySystem return IsAllowedInternal(access, stationKeys, reader); if (!_containerSystem.TryGetContainer(target, reader.ContainerAccessProvider, out var container)) - return Paused(target); // when mapping, containers with electronics arent spawned + return false; + + // If entity is paused then always allow it at this point. + // Door electronics is kind of a mess but yeah, it should only be an unpaused ent interacting with it + if (Paused(target)) + return true; foreach (var entity in container.ContainedEntities) { From d6e0114126f778c298763d05fa59ee62c28f595a Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:13:35 +0300 Subject: [PATCH 22/22] randomize iconSmoothing (#28158) * randomize iconSmoothing * Revert "randomize iconSmoothing" This reverts commit 094356f975737c0af24ce39d849aec7852b9af6e. * try 2 * trying work with client-server communication * still dont work * Tayrtahn good suggestion * remove outdated code * Fix! * move data to Appearance * Update RandomIconSmoothComponent.cs --- .../ClientRandomIconSmoothSystem.cs | 29 ++++++++ .../IconSmoothing/IconSmoothComponent.cs | 2 +- .../IconSmoothing/IconSmoothSystem.cs | 35 +++++++--- .../IconSmoothing/RandomIconSmoothSystem.cs | 26 +++++++ .../RandomIconSmoothComponent.cs | 16 +++++ .../SharedRandomIconSmoothSystem.cs | 12 ++++ .../Entities/Structures/Walls/walls.yml | 5 ++ .../Structures/Walls/mining.rsi/meta.json | 66 +++++++++++++----- .../Structures/Walls/mining.rsi/miningB0.png | Bin 0 -> 1192 bytes .../Structures/Walls/mining.rsi/miningB1.png | Bin 0 -> 1470 bytes .../Structures/Walls/mining.rsi/miningB2.png | Bin 0 -> 1192 bytes .../Structures/Walls/mining.rsi/miningB3.png | Bin 0 -> 1470 bytes .../Structures/Walls/mining.rsi/miningB4.png | Bin 0 -> 1446 bytes .../Structures/Walls/mining.rsi/miningB5.png | Bin 0 -> 1451 bytes .../Structures/Walls/mining.rsi/miningB6.png | Bin 0 -> 1446 bytes .../Structures/Walls/mining.rsi/miningB7.png | Bin 0 -> 962 bytes 16 files changed, 165 insertions(+), 26 deletions(-) create mode 100644 Content.Client/IconSmoothing/ClientRandomIconSmoothSystem.cs create mode 100644 Content.Server/IconSmoothing/RandomIconSmoothSystem.cs create mode 100644 Content.Shared/IconSmoothing/RandomIconSmoothComponent.cs create mode 100644 Content.Shared/IconSmoothing/SharedRandomIconSmoothSystem.cs create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB0.png create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB1.png create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB2.png create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB3.png create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB4.png create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB5.png create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB6.png create mode 100644 Resources/Textures/Structures/Walls/mining.rsi/miningB7.png diff --git a/Content.Client/IconSmoothing/ClientRandomIconSmoothSystem.cs b/Content.Client/IconSmoothing/ClientRandomIconSmoothSystem.cs new file mode 100644 index 0000000000..73db9e1ab9 --- /dev/null +++ b/Content.Client/IconSmoothing/ClientRandomIconSmoothSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared.IconSmoothing; +using Robust.Client.GameObjects; + +namespace Content.Client.IconSmoothing; + +public sealed class ClientRandomIconSmoothSystem : SharedRandomIconSmoothSystem +{ + [Dependency] private readonly IconSmoothSystem _iconSmooth = default!; + [Dependency] private readonly AppearanceSystem _appearance = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAppearanceChange); + } + + private void OnAppearanceChange(Entity ent, ref AppearanceChangeEvent args) + { + if (!TryComp(ent, out var smooth)) + return; + + if (!_appearance.TryGetData(ent, RandomIconSmoothState.State, out var state, args.Component)) + return; + + smooth.StateBase = state; + _iconSmooth.SetStateBase(ent, smooth, state); + } +} diff --git a/Content.Client/IconSmoothing/IconSmoothComponent.cs b/Content.Client/IconSmoothing/IconSmoothComponent.cs index 88b1f613cb..040198529c 100644 --- a/Content.Client/IconSmoothing/IconSmoothComponent.cs +++ b/Content.Client/IconSmoothing/IconSmoothComponent.cs @@ -30,7 +30,7 @@ namespace Content.Client.IconSmoothing /// Prepended to the RSI state. /// [ViewVariables(VVAccess.ReadWrite), DataField("base")] - public string StateBase { get; private set; } = string.Empty; + public string StateBase { get; set; } = string.Empty; [DataField("shader", customTypeSerializer:typeof(PrototypeIdSerializer))] public string? Shader; diff --git a/Content.Client/IconSmoothing/IconSmoothSystem.cs b/Content.Client/IconSmoothing/IconSmoothSystem.cs index 4b02560846..11ca75bc82 100644 --- a/Content.Client/IconSmoothing/IconSmoothSystem.cs +++ b/Content.Client/IconSmoothing/IconSmoothSystem.cs @@ -55,6 +55,33 @@ namespace Content.Client.IconSmoothing if (component.Mode != IconSmoothingMode.Corners || !TryComp(uid, out SpriteComponent? sprite)) return; + SetCornerLayers(sprite, component); + + if (component.Shader != null) + { + sprite.LayerSetShader(CornerLayers.SE, component.Shader); + sprite.LayerSetShader(CornerLayers.NE, component.Shader); + sprite.LayerSetShader(CornerLayers.NW, component.Shader); + sprite.LayerSetShader(CornerLayers.SW, component.Shader); + } + } + + public void SetStateBase(EntityUid uid, IconSmoothComponent component, string newState) + { + if (!TryComp(uid, out var sprite)) + return; + + component.StateBase = newState; + SetCornerLayers(sprite, component); + } + + private void SetCornerLayers(SpriteComponent sprite, IconSmoothComponent component) + { + sprite.LayerMapRemove(CornerLayers.SE); + sprite.LayerMapRemove(CornerLayers.NE); + sprite.LayerMapRemove(CornerLayers.NW); + sprite.LayerMapRemove(CornerLayers.SW); + var state0 = $"{component.StateBase}0"; sprite.LayerMapSet(CornerLayers.SE, sprite.AddLayerState(state0)); sprite.LayerSetDirOffset(CornerLayers.SE, DirectionOffset.None); @@ -64,14 +91,6 @@ namespace Content.Client.IconSmoothing sprite.LayerSetDirOffset(CornerLayers.NW, DirectionOffset.Flip); sprite.LayerMapSet(CornerLayers.SW, sprite.AddLayerState(state0)); sprite.LayerSetDirOffset(CornerLayers.SW, DirectionOffset.Clockwise); - - if (component.Shader != null) - { - sprite.LayerSetShader(CornerLayers.SE, component.Shader); - sprite.LayerSetShader(CornerLayers.NE, component.Shader); - sprite.LayerSetShader(CornerLayers.NW, component.Shader); - sprite.LayerSetShader(CornerLayers.SW, component.Shader); - } } private void OnShutdown(EntityUid uid, IconSmoothComponent component, ComponentShutdown args) diff --git a/Content.Server/IconSmoothing/RandomIconSmoothSystem.cs b/Content.Server/IconSmoothing/RandomIconSmoothSystem.cs new file mode 100644 index 0000000000..4ddfb17ac8 --- /dev/null +++ b/Content.Server/IconSmoothing/RandomIconSmoothSystem.cs @@ -0,0 +1,26 @@ +using Content.Shared.IconSmoothing; +using Robust.Shared.Random; + +namespace Content.Server.IconSmoothing; + +public sealed partial class RandomIconSmoothSystem : SharedRandomIconSmoothSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + if (ent.Comp.RandomStates.Count == 0) + return; + + var state = _random.Pick(ent.Comp.RandomStates); + _appearance.SetData(ent, RandomIconSmoothState.State, state); + } +} diff --git a/Content.Shared/IconSmoothing/RandomIconSmoothComponent.cs b/Content.Shared/IconSmoothing/RandomIconSmoothComponent.cs new file mode 100644 index 0000000000..6cdf167b29 --- /dev/null +++ b/Content.Shared/IconSmoothing/RandomIconSmoothComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.IconSmoothing; + +/// +/// Allow randomize StateBase of IconSmoothComponent for random visual variation +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class RandomIconSmoothComponent : Component +{ + /// + /// StateBase will be randomly selected from this list. Allows to randomize the visual. + /// + [DataField(required: true)] + public List RandomStates = new(); +} diff --git a/Content.Shared/IconSmoothing/SharedRandomIconSmoothSystem.cs b/Content.Shared/IconSmoothing/SharedRandomIconSmoothSystem.cs new file mode 100644 index 0000000000..5cb5299858 --- /dev/null +++ b/Content.Shared/IconSmoothing/SharedRandomIconSmoothSystem.cs @@ -0,0 +1,12 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.IconSmoothing; + +public abstract class SharedRandomIconSmoothSystem : EntitySystem +{ +} +[Serializable, NetSerializable] +public enum RandomIconSmoothState : byte +{ + State +} diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 7af9981255..1ab770812a 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -1109,6 +1109,11 @@ - type: IconSmooth key: walls base: mining + - type: RandomIconSmooth + randomStates: + - mining + - miningB + - type: Appearance - type: entity parent: WallShuttleDiagonal diff --git a/Resources/Textures/Structures/Walls/mining.rsi/meta.json b/Resources/Textures/Structures/Walls/mining.rsi/meta.json index 4ce4691c51..77f4322998 100644 --- a/Resources/Textures/Structures/Walls/mining.rsi/meta.json +++ b/Resources/Textures/Structures/Walls/mining.rsi/meta.json @@ -7,40 +7,72 @@ "y": 32 }, "states": [ - { + { "name": "full" }, - { + { "name": "mining0", - "directions": 4 + "directions": 4 }, - { + { "name": "mining1", - "directions": 4 + "directions": 4 }, - { + { "name": "mining2", - "directions": 4 + "directions": 4 }, - { + { "name": "mining3", - "directions": 4 + "directions": 4 }, - { + { "name": "mining4", - "directions": 4 + "directions": 4 }, - { + { "name": "mining5", - "directions": 4 + "directions": 4 }, - { + { "name": "mining6", - "directions": 4 + "directions": 4 }, - { + { "name": "mining7", - "directions": 4 + "directions": 4 + }, + { + "name": "miningB0", + "directions": 4 + }, + { + "name": "miningB1", + "directions": 4 + }, + { + "name": "miningB2", + "directions": 4 + }, + { + "name": "miningB3", + "directions": 4 + }, + { + "name": "miningB4", + "directions": 4 + }, + { + "name": "miningB5", + "directions": 4 + }, + { + "name": "miningB6", + "directions": 4 + }, + { + "name": "miningB7", + "directions": 4 } ] } diff --git a/Resources/Textures/Structures/Walls/mining.rsi/miningB0.png b/Resources/Textures/Structures/Walls/mining.rsi/miningB0.png new file mode 100644 index 0000000000000000000000000000000000000000..f65f066b65aa26487dec4d03b79e560239294cff GIT binary patch literal 1192 zcmV;Z1XufsP)Px(Vo5|nRCt`-TTN=*Fckh$x|&^(jAj$M8cd<|08@jHP>L^CdWRfB;P?Qg5X7uX zH+C(P-E5}|^=V{{JxMFI7XBbiMwa8~`RTpy{pbb@W3$!d*BC z!dKcZV$TFG|f7^z#N*UnHe{#&seq& zFW`ba0)6KBTa;yquIua^Aq1q9Q0g)GdC3UCRc|tM08o}C?(gqMTcYnflw}F6^*S_Q ziue$^u0@{jFbq#tC^Wtr9^m?ar4A^H0!kf5a~QiFu|+esLLOi+9UizEa5}Aw3DOqG z^BwB?!R~n>wv+R>+iesLNWuoVZ#K)sNd2Xhzr8?f$As8IO1T~;2$=mm4E-N}h7zG* z0T7k_n|~e%kLN=XWeaf5QB~Efn&$ZqN&!Vtpzn#$>}HwX|3t6=7|T$WCBA+8IvVf$ zpD4?6#Mb)0yKrSoBiIWJLyxv?C$Eu47~lQ@N*yi|9ZMrv0E}h0adz?i8#a^X7~fKe zq5&?Z7@P6!^@z`>q6twnz$Ysd)BEET(_iEM{~N(Za2R@rteivEckkXqO8I+^(Fm9D zq=G13K&i*8u{q`QT%@uEqG-T=zXt$IVW+}ZADr_jR5ldBEbQ*?jSbzVl9uOdCei68 zKVwkYP(-1^A3uIV-*+Po05H-5r4ARx4W%9z7eEvnKn#x-=2m(LsaSm<(RsjgNKFt? zcz_SLyhXqJRzDS&7{vyJ+`qI9NG2t=6r$t2>|B>5)pDOJrSYQ5G^SR5EZ_esqL?n3g6wmInf(`jtWzdL|6qC z9){l5>k0mMiWXg@Vhf_!0M7Yr^~TK;xLqEpgu_uZpsK2iw0K=VpsFe;^_X-t>@Llz+-1}CEc0000Px)cu7P-RCt`-ThD9bMil#?ycD7+LJ$O?lx_wOm`o<{{dS2AmHRA&XKV)F zZzD;P&Eo-lwpaa@En#DLKqf43QNZQC<+hEn0MGNJXR~7FW%K9oJWq=S)b0ccaq-#q z89v;%@%&ka(+dlLjiZx!Ve*GJZNOGBF8XJ(ITmns`RGPK6xYLjyYK-=Cv%)$SU1Ya zaX{u;EI^qEwOYH`k6(O@>+6330H+rgj!x!F{T8#B|#T#Z9 zzn?$L@cQKz4)<*w?k}G6Sp;$=?QOr)GJ~p6_5p;r`1@%S-~Kkav#)3woz4p|_KWK4 zm7&D~l4Lc7T}5t^Br(DQlocQgu}WaM&9W>lUR)JgEMRdzTOunWn_Fgj8)5;T=OK>A zD@jYae;&+iHk(FRfbte(+ji#rA7L;UlzaiDQ@HL903b~l_W;mr=Eqq|sq%SV6#4=D;aXTj<~)mv{(SYuL@dwAs9>H`)$N=z73}7^k!rm zqtQt9^~z9IK`Ar^Py;WeJF(E?|+o;Hj=S9;4sy z6+FNsXi>oFg(d9m%SU1nJjZVew1vg_F}I2Z`hFY3VN^&%l#bN=o(EfW!UzRapjya|l3QQ6`t* z0eV;g>&7VlCulL5J3=NGRbR^vn+$>dGNQ-aCZ4f`Q65RH%N#J#?l90RqG4> Y0~R0y=v@s6*Z=?k07*qoM6N<$f>*Mv2><{9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/mining.rsi/miningB2.png b/Resources/Textures/Structures/Walls/mining.rsi/miningB2.png new file mode 100644 index 0000000000000000000000000000000000000000..f65f066b65aa26487dec4d03b79e560239294cff GIT binary patch literal 1192 zcmV;Z1XufsP)Px(Vo5|nRCt`-TTN=*Fckh$x|&^(jAj$M8cd<|08@jHP>L^CdWRfB;P?Qg5X7uX zH+C(P-E5}|^=V{{JxMFI7XBbiMwa8~`RTpy{pbb@W3$!d*BC z!dKcZV$TFG|f7^z#N*UnHe{#&seq& zFW`ba0)6KBTa;yquIua^Aq1q9Q0g)GdC3UCRc|tM08o}C?(gqMTcYnflw}F6^*S_Q ziue$^u0@{jFbq#tC^Wtr9^m?ar4A^H0!kf5a~QiFu|+esLLOi+9UizEa5}Aw3DOqG z^BwB?!R~n>wv+R>+iesLNWuoVZ#K)sNd2Xhzr8?f$As8IO1T~;2$=mm4E-N}h7zG* z0T7k_n|~e%kLN=XWeaf5QB~Efn&$ZqN&!Vtpzn#$>}HwX|3t6=7|T$WCBA+8IvVf$ zpD4?6#Mb)0yKrSoBiIWJLyxv?C$Eu47~lQ@N*yi|9ZMrv0E}h0adz?i8#a^X7~fKe zq5&?Z7@P6!^@z`>q6twnz$Ysd)BEET(_iEM{~N(Za2R@rteivEckkXqO8I+^(Fm9D zq=G13K&i*8u{q`QT%@uEqG-T=zXt$IVW+}ZADr_jR5ldBEbQ*?jSbzVl9uOdCei68 zKVwkYP(-1^A3uIV-*+Po05H-5r4ARx4W%9z7eEvnKn#x-=2m(LsaSm<(RsjgNKFt? zcz_SLyhXqJRzDS&7{vyJ+`qI9NG2t=6r$t2>|B>5)pDOJrSYQ5G^SR5EZ_esqL?n3g6wmInf(`jtWzdL|6qC z9){l5>k0mMiWXg@Vhf_!0M7Yr^~TK;xLqEpgu_uZpsK2iw0K=VpsFe;^_X-t>@Llz+-1}CEc0000Px)cu7P-RCt`-ThD9bMil#?ycD7+LJ$O?lx_wOm`o<{{dS2AmHRA&XKV)F zZzD;P&Eo-lwpaa@En#DLKqf43QNZQC<+hEn0MGNJXR~7FW%K9oJWq=S)b0ccaq-#q z89v;%@%&ka(+dlLjiZx!Ve*GJZNOGBF8XJ(ITmns`RGPK6xYLjyYK-=Cv%)$SU1Ya zaX{u;EI^qEwOYH`k6(O@>+6330H+rgj!x!F{T8#B|#T#Z9 zzn?$L@cQKz4)<*w?k}G6Sp;$=?QOr)GJ~p6_5p;r`1@%S-~Kkav#)3woz4p|_KWK4 zm7&D~l4Lc7T}5t^Br(DQlocQgu}WaM&9W>lUR)JgEMRdzTOunWn_Fgj8)5;T=OK>A zD@jYae;&+iHk(FRfbte(+ji#rA7L;UlzaiDQ@HL903b~l_W;mr=Eqq|sq%SV6#4=D;aXTj<~)mv{(SYuL@dwAs9>H`)$N=z73}7^k!rm zqtQt9^~z9IK`Ar^Py;WeJF(E?|+o;Hj=S9;4sy z6+FNsXi>oFg(d9m%SU1nJjZVew1vg_F}I2Z`hFY3VN^&%l#bN=o(EfW!UzRapjya|l3QQ6`t* z0eV;g>&7VlCulL5J3=NGRbR^vn+$>dGNQ-aCZ4f`Q65RH%N#J#?l90RqG4> Y0~R0y=v@s6*Z=?k07*qoM6N<$f>*Mv2><{9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/mining.rsi/miningB4.png b/Resources/Textures/Structures/Walls/mining.rsi/miningB4.png new file mode 100644 index 0000000000000000000000000000000000000000..1412f0026964552f50657b6c65ef5cb0c17fe7dc GIT binary patch literal 1446 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 kxjW2r1Vp#ksp