From 5c0753b1362728a99c256cbe31fefaefcb7569d9 Mon Sep 17 00:00:00 2001 From: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Date: Sun, 25 Aug 2024 10:09:51 -0700 Subject: [PATCH 01/54] Add a bool to disable buckling on InteractHand (#30001) --- Content.Shared/Buckle/Components/StrapComponent.cs | 6 ++++++ Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs | 2 +- .../Prototypes/Entities/Structures/Furniture/rollerbeds.yml | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index b8186e2b79..101c388a8b 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -90,6 +90,12 @@ public sealed partial class StrapComponent : Component /// [DataField] public float BuckleDoafterTime = 2f; + + /// + /// Whether InteractHand will buckle the user to the strap. + /// + [DataField] + public bool BuckleOnInteractHand = true; } public enum StrapPosition diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs index 381789f32d..7677e800fe 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Interaction.cs @@ -84,7 +84,7 @@ private void OnStrapInteractHand(EntityUid uid, StrapComponent component, Intera if (!TryComp(args.User, out BuckleComponent? buckle)) return; - if (buckle.BuckledTo == null) + if (buckle.BuckledTo == null && component.BuckleOnInteractHand) TryBuckle(args.User, args.User, uid, buckle, popup: true); else if (buckle.BuckledTo == uid) TryUnbuckle(args.User, args.User, buckle, popup: true); diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index f7b1be8ecd..965c8261cc 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -55,6 +55,7 @@ rotation: -90 buckleOffset: "0,0.15" unbuckleOffset: "0,0.15" + buckleOnInteractHand: False - type: Appearance - type: GenericVisualizer visuals: From d067e8010038b301b86577515e09dd8279d97c66 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 25 Aug 2024 17:10:58 +0000 Subject: [PATCH 02/54] 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 7994756119..d3682dc07c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Boaz1111 - changes: - - message: Refactors Cluster's Armoury - type: Tweak - id: 6712 - time: '2024-06-12T01:07:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28854 - author: Deserty0 changes: - message: '"no materials loaded" messege now appears in lathes!' @@ -3866,3 +3859,10 @@ id: 7211 time: '2024-08-25T16:47:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31321 +- author: ShadowCommander + changes: + - message: Rollerbeds no longer buckle yourself when clicked on. + type: Remove + id: 7212 + time: '2024-08-25T17:09:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30001 From cf6f7830aa23006f2e5766c145eb9eea70a5b8e4 Mon Sep 17 00:00:00 2001 From: Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com> Date: Sun, 25 Aug 2024 18:21:32 +0000 Subject: [PATCH 03/54] fix(FieldGenerators): Don't show nonsense popup (#30469) * . --- .../EntitySystems/ContainmentFieldGeneratorSystem.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs index ca32beb8db..05262f2999 100644 --- a/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs +++ b/Content.Server/Singularity/EntitySystems/ContainmentFieldGeneratorSystem.cs @@ -166,11 +166,12 @@ private void RemoveConnections(Entity genera ChangeFieldVisualizer(value.Item1); } component.Connections.Clear(); + if (component.IsConnected) + _popupSystem.PopupEntity(Loc.GetString("comp-containment-disconnected"), uid, PopupType.LargeCaution); component.IsConnected = false; ChangeOnLightVisualizer(generator); ChangeFieldVisualizer(generator); _adminLogger.Add(LogType.FieldGeneration, LogImpact.Medium, $"{ToPrettyString(uid)} lost field connections"); // Ideally LogImpact would depend on if there is a singulo nearby - _popupSystem.PopupEntity(Loc.GetString("comp-containment-disconnected"), uid, PopupType.LargeCaution); } #endregion From 2d87d65debedbc47238ff3d1dccbe084814587e1 Mon Sep 17 00:00:00 2001 From: Emisse <99158783+Emisse@users.noreply.github.com> Date: Sun, 25 Aug 2024 13:22:29 -0600 Subject: [PATCH 04/54] bagel update (#31440) * bagel update * fixgridatmos * qm office * sci cam fix * jesus christ so many routers * remove invalids --- Resources/Maps/bagel.yml | 462 +++++++++++++++++++++++---------------- 1 file changed, 276 insertions(+), 186 deletions(-) diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index a25472c0a9..0e8cf62a27 100644 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -266,7 +266,7 @@ entities: version: 6 2,1: ind: 2,1 - tiles: fgAAAAAAfgAAAAAAJgAAAAABJgAAAAAAJgAAAAAAJgAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACbAAAAAAAfgAAAAAAJgAAAAABLwAAAAABLwAAAAADLwAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAJgAAAAACLwAAAAABLwAAAAADLwAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADTQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAABfgAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAAATQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAACTQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fgAAAAAAfgAAAAAAJgAAAAABJgAAAAAAJgAAAAAAJgAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAABfgAAAAAAegAAAAAAegAAAAAAegAAAAAAXQAAAAABXQAAAAACbAAAAAAAfgAAAAAAJgAAAAABLwAAAAABLwAAAAADLwAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAJgAAAAACLwAAAAABLwAAAAADLwAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAADTQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAABfgAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAAATQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAACTQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 4,-2: ind: 4,-2 @@ -6400,18 +6400,21 @@ entities: 1: 136 2,-4: 1: 4369 - 0: 52228 + 0: 4 + 2: 52224 2,-5: 1: 4352 0: 58379 2,-3: 1: 33825 - 0: 140 + 2: 140 3,-4: - 0: 65419 + 0: 52363 + 2: 13056 3,-3: - 0: 35007 + 2: 51 1: 12288 + 0: 34956 3,-1: 1: 8739 0: 34952 @@ -6739,10 +6742,10 @@ entities: 0: 56797 5,-8: 0: 15359 - 2: 32768 + 3: 32768 5,-7: 0: 61491 - 2: 136 + 3: 136 5,-6: 0: 65535 5,-5: @@ -6753,9 +6756,9 @@ entities: 0: 65311 6,-8: 0: 255 - 2: 28672 + 3: 28672 6,-7: - 2: 119 + 3: 119 0: 61952 6,-6: 0: 61695 @@ -7979,8 +7982,7 @@ entities: 9,3: 0: 49080 10,4: - 0: 13107 - 1: 128 + 0: 13115 10,5: 0: 65535 10,6: @@ -7991,8 +7993,8 @@ entities: 10,3: 0: 48059 11,4: - 1: 560 - 0: 2184 + 0: 2187 + 1: 512 11,5: 0: 32767 11,6: @@ -8007,7 +8009,7 @@ entities: 0: 112 1: 28672 17,-7: - 3: 1 + 4: 1 1: 4104 17,-6: 1: 4593 @@ -8106,17 +8108,17 @@ entities: -13,7: 1: 39312 -12,8: - 4: 12 - 5: 3072 + 5: 12 + 7: 3072 -11,5: 0: 63351 -11,6: 0: 4607 1: 49152 -11,8: - 4: 1 + 5: 1 1: 17476 - 5: 256 + 7: 256 -11,7: 1: 17484 -10,5: @@ -8228,7 +8230,7 @@ entities: -7,11: 0: 20206 -7,12: - 1: 16385 + 1: 49153 0: 1228 -6,9: 0: 65518 @@ -8344,7 +8346,7 @@ entities: 1: 35033 0: 12544 -12,10: - 3: 12 + 4: 12 6: 3072 -12,11: 6: 12 @@ -8352,7 +8354,7 @@ entities: 6: 257 1: 17476 -11,10: - 3: 1 + 4: 1 6: 256 1: 17476 -11,11: @@ -8410,8 +8412,8 @@ entities: 1: 15 -13,12: 1: 34952 - 5: 48 - 4: 12288 + 7: 48 + 5: 12288 -12,13: 1: 61455 -13,13: @@ -8507,8 +8509,8 @@ entities: -14,12: 0: 1 1: 8738 - 5: 128 - 4: 32768 + 7: 128 + 5: 32768 -17,12: 0: 52232 -16,13: @@ -8985,6 +8987,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 0 + - 103.92799 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 235 moles: @@ -9033,7 +9050,7 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 6666.982 + - 0 - 0 - 0 - 0 @@ -9048,7 +9065,7 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 0 + - 6666.982 - 0 - 0 - 0 @@ -9367,8 +9384,8 @@ entities: id: docking43669 localAnchorB: -47.5,-40 localAnchorA: 0.5,0 - damping: 1560.1493 - stiffness: 14003.869 + damping: 1560.1505 + stiffness: 14003.88 - proto: AcousticGuitarInstrument entities: - uid: 2133 @@ -10505,18 +10522,6 @@ entities: - 24361 - 24358 - 9016 - - uid: 24662 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 11.5,-14.5 - parent: 60 - - type: DeviceList - devices: - - 24659 - - 24661 - - 24665 - - 24657 - proto: AirAlarmElectronics entities: - uid: 13488 @@ -10536,6 +10541,20 @@ entities: rot: -1.5707963267948966 rad pos: -1.5599055,29.41489 parent: 60 +- proto: AirAlarmVox + entities: + - uid: 930 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,-14.5 + parent: 60 + - type: DeviceList + devices: + - 24661 + - 24665 + - 24657 + - 24659 - proto: AirCanister entities: - uid: 1679 @@ -12972,19 +12991,19 @@ entities: rot: -1.5707963267948966 rad pos: 48.5,-15.5 parent: 60 -- proto: AirlockQuartermasterGlassLocked +- proto: AirlockQuartermasterLocked entities: - - uid: 13086 + - uid: 1622 components: - type: MetaData - name: Quartermaster's Office + name: QM Room - type: Transform pos: 44.5,11.5 parent: 60 -- proto: AirlockQuartermasterLocked - entities: - uid: 13039 components: + - type: MetaData + name: QM Room - type: Transform pos: 46.5,13.5 parent: 60 @@ -13752,7 +13771,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: AltarSpawner entities: - uid: 14509 @@ -15000,6 +15019,83 @@ entities: - type: Transform pos: -45.5,40.5 parent: 60 +- proto: AtmosFixVoxMarker + entities: + - uid: 2925 + components: + - type: Transform + pos: 10.5,-12.5 + parent: 60 + - uid: 21758 + components: + - type: Transform + pos: 10.5,-13.5 + parent: 60 + - uid: 21762 + components: + - type: Transform + pos: 10.5,-11.5 + parent: 60 + - uid: 24768 + components: + - type: Transform + pos: 11.5,-13.5 + parent: 60 + - uid: 24769 + components: + - type: Transform + pos: 11.5,-12.5 + parent: 60 + - uid: 24770 + components: + - type: Transform + pos: 11.5,-11.5 + parent: 60 + - uid: 24771 + components: + - type: Transform + pos: 12.5,-13.5 + parent: 60 + - uid: 24772 + components: + - type: Transform + pos: 12.5,-12.5 + parent: 60 + - uid: 24773 + components: + - type: Transform + pos: 12.5,-11.5 + parent: 60 + - uid: 24774 + components: + - type: Transform + pos: 13.5,-13.5 + parent: 60 + - uid: 24775 + components: + - type: Transform + pos: 13.5,-12.5 + parent: 60 + - uid: 24776 + components: + - type: Transform + pos: 13.5,-11.5 + parent: 60 + - uid: 24777 + components: + - type: Transform + pos: 11.5,-10.5 + parent: 60 + - uid: 24778 + components: + - type: Transform + pos: 12.5,-10.5 + parent: 60 + - uid: 24779 + components: + - type: Transform + pos: 13.5,-10.5 + parent: 60 - proto: Autolathe entities: - uid: 5288 @@ -15252,6 +15348,11 @@ entities: - type: Transform pos: 30.5,-14.5 parent: 60 + - uid: 2923 + components: + - type: Transform + pos: 45.5,16.5 + parent: 60 - uid: 3230 components: - type: Transform @@ -15262,11 +15363,6 @@ entities: - type: Transform pos: -63.5,3.5 parent: 60 - - uid: 4515 - components: - - type: Transform - pos: 44.5,15.5 - parent: 60 - uid: 4529 components: - type: Transform @@ -15541,10 +15637,10 @@ entities: parent: 60 - proto: BedsheetQM entities: - - uid: 2923 + - uid: 5932 components: - type: Transform - pos: 44.5,15.5 + pos: 45.5,16.5 parent: 60 - proto: BedsheetRD entities: @@ -55937,12 +56033,6 @@ entities: - type: Transform pos: -19.5,-16.5 parent: 60 - - uid: 2419 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.577686,12.682198 - parent: 60 - uid: 2590 components: - type: Transform @@ -55982,6 +56072,12 @@ entities: rot: -1.5707963267948966 rad pos: -66.5,12.5 parent: 60 + - uid: 4515 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.634438,14.652265 + parent: 60 - uid: 4627 components: - type: Transform @@ -56120,11 +56216,6 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,9.5 parent: 60 - - uid: 13094 - components: - - type: Transform - pos: 44.5,14.5 - parent: 60 - uid: 13255 components: - type: Transform @@ -56282,6 +56373,12 @@ entities: - type: Transform pos: -44.5,-9.5 parent: 60 + - uid: 24780 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.431313,14.60539 + parent: 60 - proto: ChairOfficeLight entities: - uid: 128 @@ -67326,15 +67423,15 @@ entities: - type: Transform pos: -44.5,2.5 parent: 60 - - uid: 5535 + - uid: 2419 components: - type: Transform - pos: -63.5,2.5 + pos: 43.5,15.5 parent: 60 - - uid: 5932 + - uid: 5535 components: - type: Transform - pos: 43.5,14.5 + pos: -63.5,2.5 parent: 60 - uid: 6352 components: @@ -67481,10 +67578,10 @@ entities: parent: 60 - proto: DresserQuarterMasterFilled entities: - - uid: 1622 + - uid: 12640 components: - type: Transform - pos: 45.5,15.5 + pos: 44.5,16.5 parent: 60 - proto: DresserResearchDirectorFilled entities: @@ -68611,11 +68708,6 @@ entities: - type: Transform pos: -53.5,8.5 parent: 60 - - uid: 15570 - components: - - type: Transform - pos: 10.5,17.5 - parent: 60 - uid: 16408 components: - type: Transform @@ -96513,7 +96605,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: GasVentScrubber entities: - uid: 61 @@ -97868,7 +97960,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - uid: 24665 components: - type: Transform @@ -97877,7 +97969,7 @@ entities: parent: 60 - type: DeviceNetwork deviceLists: - - 24662 + - 930 - proto: GasVolumePump entities: - uid: 14850 @@ -101566,6 +101658,11 @@ entities: - type: Transform pos: -79.5,12.5 parent: 60 + - uid: 13086 + components: + - type: Transform + pos: 44.5,17.5 + parent: 60 - uid: 13110 components: - type: Transform @@ -101616,26 +101713,6 @@ entities: - type: Transform pos: 58.5,10.5 parent: 60 - - uid: 13193 - components: - - type: Transform - pos: 45.5,16.5 - parent: 60 - - uid: 13194 - components: - - type: Transform - pos: 44.5,16.5 - parent: 60 - - uid: 13195 - components: - - type: Transform - pos: 43.5,16.5 - parent: 60 - - uid: 13196 - components: - - type: Transform - pos: 42.5,17.5 - parent: 60 - uid: 13197 components: - type: Transform @@ -101664,7 +101741,7 @@ entities: - uid: 13202 components: - type: Transform - pos: 46.5,17.5 + pos: 43.5,17.5 parent: 60 - uid: 13251 components: @@ -103232,6 +103309,11 @@ entities: - type: Transform pos: 22.5,10.5 parent: 60 + - uid: 19408 + components: + - type: Transform + pos: 45.5,17.5 + parent: 60 - uid: 19409 components: - type: Transform @@ -108042,10 +108124,10 @@ entities: parent: 60 - proto: LockerQuarterMasterFilled entities: - - uid: 6038 + - uid: 15570 components: - type: Transform - pos: 43.5,15.5 + pos: 43.5,16.5 parent: 60 - proto: LockerResearchDirectorFilledHardsuit entities: @@ -111911,6 +111993,11 @@ entities: - type: Transform pos: -41.5,25.5 parent: 60 + - uid: 13193 + components: + - type: Transform + pos: -11.5,-26.5 + parent: 60 - uid: 17268 components: - type: Transform @@ -112028,14 +112115,6 @@ entities: - type: Transform pos: 34.5,9.5 parent: 60 - - uid: 21187 - components: - - type: Transform - pos: -10.5,-26.5 - parent: 60 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - uid: 21363 components: - type: Transform @@ -115019,6 +115098,12 @@ entities: rot: -1.5707963267948966 rad pos: 61.5,-27.5 parent: 60 + - uid: 13194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,15.5 + parent: 60 - uid: 13484 components: - type: Transform @@ -115309,14 +115394,6 @@ entities: parent: 60 - type: ApcPowerReceiver powerLoad: 0 - - uid: 19408 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,14.5 - parent: 60 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 19410 components: - type: Transform @@ -120187,11 +120264,6 @@ entities: - type: Transform pos: 21.5,27.5 parent: 60 - - uid: 11746 - components: - - type: Transform - pos: 43.5,16.5 - parent: 60 - uid: 11749 components: - type: Transform @@ -120281,7 +120353,7 @@ entities: - uid: 11972 components: - type: Transform - pos: 45.5,16.5 + pos: 45.5,17.5 parent: 60 - uid: 11973 components: @@ -120384,21 +120456,11 @@ entities: - type: Transform pos: 51.5,30.5 parent: 60 - - uid: 12640 - components: - - type: Transform - pos: 42.5,17.5 - parent: 60 - uid: 12644 components: - type: Transform pos: 25.5,27.5 parent: 60 - - uid: 12653 - components: - - type: Transform - pos: 44.5,16.5 - parent: 60 - uid: 12656 components: - type: Transform @@ -120525,6 +120587,11 @@ entities: - type: Transform pos: 45.5,19.5 parent: 60 + - uid: 13094 + components: + - type: Transform + pos: 43.5,17.5 + parent: 60 - uid: 13097 components: - type: Transform @@ -120540,10 +120607,10 @@ entities: - type: Transform pos: 42.5,18.5 parent: 60 - - uid: 13192 + - uid: 13196 components: - type: Transform - pos: 46.5,17.5 + pos: 44.5,17.5 parent: 60 - uid: 13207 components: @@ -122580,6 +122647,18 @@ entities: - type: Transform pos: -33.5,-21.5 parent: 60 + - uid: 21085 + components: + - type: Transform + pos: 44.5,17.5 + parent: 60 + - uid: 21186 + components: + - type: Transform + pos: 43.5,17.5 + parent: 60 + - type: DeviceLinkSink + invokeCounter: 1 - uid: 21334 components: - type: Transform @@ -122603,33 +122682,18 @@ entities: - uid: 21753 components: - type: Transform - pos: 43.5,16.5 + pos: 43.5,11.5 parent: 60 - uid: 21754 components: - type: Transform - pos: 44.5,16.5 + pos: 45.5,17.5 parent: 60 - uid: 21755 - components: - - type: Transform - pos: 45.5,16.5 - parent: 60 - - uid: 21758 components: - type: Transform pos: 45.5,11.5 parent: 60 - - uid: 21759 - components: - - type: Transform - pos: 43.5,11.5 - parent: 60 - - uid: 21760 - components: - - type: Transform - pos: 44.5,11.5 - parent: 60 - uid: 22463 components: - type: Transform @@ -123180,25 +123244,6 @@ entities: linkedPorts: 11697: - Pressed: Toggle - - uid: 21762 - components: - - type: Transform - pos: 46.5,15.5 - parent: 60 - - type: DeviceLinkSource - linkedPorts: - 21753: - - Pressed: Toggle - 21754: - - Pressed: Toggle - 21755: - - Pressed: Toggle - 21759: - - Pressed: Toggle - 21760: - - Pressed: Toggle - 21758: - - Pressed: Toggle - proto: SignalButtonDirectional entities: - uid: 1240 @@ -123814,6 +123859,29 @@ entities: 24352: - On: On - Off: Off + - uid: 21187 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,15.5 + parent: 60 + - type: DeviceLinkSource + linkedPorts: + 21186: + - On: Open + - Off: Close + 21085: + - On: Open + - Off: Close + 21754: + - On: Open + - Off: Close + 21753: + - On: Open + - Off: Close + 21755: + - On: Open + - Off: Close - proto: SignAnomaly entities: - uid: 9496 @@ -130916,17 +130984,19 @@ entities: - type: Transform pos: 4.5,-7.5 parent: 60 -- proto: SurveillanceCameraRouterGeneral +- proto: SurveillanceCameraRouterEngineering entities: - - uid: 21085 + - uid: 11746 components: - type: Transform - pos: 24.5,18.5 + pos: 10.5,17.5 parent: 60 - - uid: 21186 +- proto: SurveillanceCameraRouterGeneral + entities: + - uid: 24662 components: - type: Transform - pos: -49.5,7.5 + pos: 8.5,-29.5 parent: 60 - proto: SurveillanceCameraRouterMedical entities: @@ -130949,19 +131019,12 @@ entities: - type: Transform pos: -22.5,2.5 parent: 60 -- proto: SurveillanceCameraRouterService - entities: - - uid: 930 - components: - - type: Transform - pos: -11.5,-26.5 - parent: 60 - proto: SurveillanceCameraRouterSupply entities: - - uid: 2925 + - uid: 6038 components: - type: Transform - pos: 8.5,-29.5 + pos: 43.5,12.5 parent: 60 - proto: SurveillanceCameraScience entities: @@ -131652,6 +131715,13 @@ entities: - SurveillanceCameraSupply nameSet: True id: Salvage Airlock 1 +- proto: SurveillanceCameraWirelessRouterConstructed + entities: + - uid: 21760 + components: + - type: Transform + pos: -49.5,7.5 + parent: 60 - proto: SurveillanceCameraWirelessRouterEntertainment entities: - uid: 17205 @@ -132326,6 +132396,11 @@ entities: - type: Transform pos: 36.5,-1.5 parent: 60 + - uid: 13192 + components: + - type: Transform + pos: 44.5,14.5 + parent: 60 - uid: 13204 components: - type: Transform @@ -134324,6 +134399,11 @@ entities: - type: Transform pos: -51.5,8.5 parent: 60 + - uid: 21759 + components: + - type: Transform + pos: 24.5,18.5 + parent: 60 - proto: TelecomServerCircuitboard entities: - uid: 18879 @@ -141574,6 +141654,11 @@ entities: - type: Transform pos: 22.5,27.5 parent: 60 + - uid: 12653 + components: + - type: Transform + pos: 42.5,17.5 + parent: 60 - uid: 12674 components: - type: Transform @@ -141845,6 +141930,11 @@ entities: rot: -1.5707963267948966 rad pos: 57.5,16.5 parent: 60 + - uid: 13195 + components: + - type: Transform + pos: 46.5,17.5 + parent: 60 - uid: 13224 components: - type: Transform From ff3d79797d4e373dc145b4cf9dbba505e04e2039 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Mon, 26 Aug 2024 04:20:58 +0200 Subject: [PATCH 05/54] Fix-Resprite emote icons (#31447) * Fix-Resprite emote icons * change scream --- Resources/Prototypes/Voice/speech_emotes.yml | 2 +- .../Textures/Interface/Emotes/attributions.yml | 7 ++++++- Resources/Textures/Interface/Emotes/scream.png | Bin 0 -> 506 bytes Resources/Textures/Interface/Emotes/vocal.png | Bin 358 -> 336 bytes 4 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Interface/Emotes/scream.png diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index a249218d71..c39bf1f379 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -3,7 +3,7 @@ id: Scream name: chat-emote-name-scream category: Vocal - icon: Interface/Actions/scream.png + icon: Interface/Emotes/scream.png whitelist: components: - Vocal diff --git a/Resources/Textures/Interface/Emotes/attributions.yml b/Resources/Textures/Interface/Emotes/attributions.yml index c65eeb25da..4cb2faa076 100644 --- a/Resources/Textures/Interface/Emotes/attributions.yml +++ b/Resources/Textures/Interface/Emotes/attributions.yml @@ -76,6 +76,11 @@ copyright: "Created by Sarahon" source: "https://github.com/Sarahon" +- files: ["scream.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by lzk228(discord 455630609641897984), based on sprite by Sarahon" + source: "https://github.com/lzk228" + - files: ["sigh.png"] license: "CC-BY-SA-3.0" copyright: "Created by Sarahon" @@ -98,7 +103,7 @@ - files: ["vocal.png"] license: "CC-BY-SA-3.0" - copyright: "Created by Sarahon" + copyright: "Created by Sarahon, modified by lzk228(discord 455630609641897984)" source: "https://github.com/Sarahon" - files: ["weh.png"] diff --git a/Resources/Textures/Interface/Emotes/scream.png b/Resources/Textures/Interface/Emotes/scream.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e36ed3a4adb1d7d6d54b440dac30511b7e4ffd GIT binary patch literal 506 zcmVUw)A?QiJzBM0WXyD6~) zh%x)bhUFx{>NyCB0f5n2Un=F|Ih6!9p?t1WgLSV1s(Q&O+j@u#RsyDa7x>A~IpL9p z&jqIgruv0eLN6bG1s2{aFn$k}HIEbS6yL9GS?pDven;v4-DVtfz)Gtxtt}a z%LSi$@g@ZGc}js;$w~3=7QUCw| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Emotes/vocal.png b/Resources/Textures/Interface/Emotes/vocal.png index 55cddaa02e4b66c0b95507fc17460d6a1e4d9e90..73c5042b22ea853e9ca71523cc20943d46e3a002 100644 GIT binary patch delta 309 zcmV-50m}a70?-1GB!3BTNLh0L01FZT01FZU(%pXi00033NklonJ%o)UhfPE@SbLnnZ-v|Szs6;2uMCqpaJ2mFNOlBqlh>H4m3F^SA>CD>u*W*T> zBM876i{kT~WH|r;Xe9vvzzq99ygyY4h(fL33+osb%Zsh8{nX;B4h zZCES0S(fg1Uqt55h0wrlE)0Tu_WLSga}pOK^x}buG?9fk+MK13 d%SKcbMQ^Upe@MH+uZ#cy002ovPDHLkV1n|Om^}ah From 2871e692684f164460a217b79a637ee5616906df Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Mon, 26 Aug 2024 04:46:16 +0200 Subject: [PATCH 06/54] Moff cooking. Part one. (#30668) * yml part * guidebook * commit * some fixes * a little * change --- .../Objects/Consumable/Food/Baked/bread.yml | 61 +++++++++++++++++ .../Objects/Consumable/Food/Baked/pizza.yml | 63 ++++++++++++++++++ .../Objects/Consumable/Food/ingredients.yml | 44 ++++++++++++ .../Construction/Graphs/food/cottonpizza.yml | 13 ++++ .../Recipes/Cooking/meal_recipes.yml | 17 +++++ .../Prototypes/Recipes/Reactions/food.yml | 16 +++++ .../Guidebook/Service/FoodRecipes.xml | 6 ++ .../Food/Baked/bread.rsi/cotton-slice.png | Bin 0 -> 721 bytes .../Food/Baked/bread.rsi/cotton.png | Bin 0 -> 1187 bytes .../Consumable/Food/Baked/bread.rsi/meta.json | 8 ++- .../Food/Baked/pizza.rsi/cotton-pizza.png | Bin 0 -> 672 bytes .../Food/Baked/pizza.rsi/cotton-slice.png | Bin 0 -> 501 bytes .../Consumable/Food/Baked/pizza.rsi/meta.json | 8 ++- .../ingredients.rsi/cotton-dough-flat.png | Bin 0 -> 765 bytes .../Food/ingredients.rsi/cotton-dough.png | Bin 0 -> 904 bytes .../Consumable/Food/ingredients.rsi/meta.json | 8 ++- 16 files changed, 241 insertions(+), 3 deletions(-) create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice.png create mode 100644 Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough-flat.png create mode 100644 Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cotton-dough.png diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 31e92931db..0fb3df4d27 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -121,6 +121,67 @@ - Bread - Slice +- type: entity + name: cotton bread + parent: FoodBreadBase + id: FoodBreadCotton + description: Bread, but for moff. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Food + requiresSpecialDigestion: true + - type: Sprite + layers: + - state: cotton + - type: SliceableFood + slice: FoodBreadCottonSlice + - type: Tag + tags: + - ClothMade + - Bread + - type: SolutionContainerManager + solutions: + food: + maxVol: 26 + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Fiber + Quantity: 10 + +- type: entity + name: cotton bread slice + parent: FoodBreadSliceBase + id: FoodBreadCottonSlice + description: A slice of (maybe) delicious cotton bread. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Food + requiresSpecialDigestion: true + - type: Sprite + layers: + - state: cotton-slice + - type: Tag + tags: + - ClothMade + - Bread + - Slice + - type: SolutionContainerManager + solutions: + food: + maxVol: 8 + reagents: + - ReagentId: Nutriment + Quantity: 2 + - ReagentId: Fiber + Quantity: 2 + - type: entity name: cornbread parent: FoodBreadBase diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml index 652c60722d..ff38363c9e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml @@ -618,3 +618,66 @@ Quantity: 2 # Tastes like crust, tomato, cheese, radiation. + +- type: entity + name: cotton pizza + parent: FoodPizzaBase + id: FoodPizzaCotton + description: Flat fabric cotton dough with cotton topping. Incredible. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Sprite + layers: + - state: cotton-pizza + - type: Food + requiresSpecialDigestion: true + - type: SliceableFood + slice: FoodPizzaCottonSlice + - type: Tag + tags: + - ClothMade + - Pizza + - type: SolutionContainerManager + solutions: + food: + maxVol: 40 + reagents: + - ReagentId: Nutriment + Quantity: 20 + - ReagentId: Vitamin + Quantity: 5 + - ReagentId: Fiber + Quantity: 10 + +- type: entity + name: slice of cotton pizza + parent: FoodPizzaSliceBase + id: FoodPizzaCottonSlice + description: A slice of cotton pizza. Cotton included. + components: + - type: FlavorProfile + flavors: + - cotton + - bread + - type: Sprite + layers: + - state: cotton-slice + - type: Tag + tags: + - ClothMade + - Pizza + - Slice + - type: SolutionContainerManager + solutions: + food: + maxVol: 6 + reagents: + - ReagentId: Nutriment + Quantity: 3.5 + - ReagentId: Vitamin + Quantity: 0.8 + - ReagentId: Fiber + Quantity: 1.5 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml index 6e481bb961..1a80a5fe53 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml @@ -414,6 +414,38 @@ graph: Tortilla node: flat +- type: entity + name: cotton dough + parent: FoodBakingBase + id: FoodDoughCotton + description: A piece of fabric dough. + components: + - type: FlavorProfile + flavors: + - dough + - cotton + - type: Sprite + state: cotton-dough + # - type: SliceableFood # TODO add it + # count: 3 + # slice: FoodDoughCottonSlice + - type: Construction + graph: CottonPizza + node: start + - type: Tag + tags: + - Ingredient + - ClothMade + - type: SolutionContainerManager + solutions: + food: + maxVol: 18 + reagents: + - ReagentId: Nutriment + Quantity: 5 + - ReagentId: Fiber + Quantity: 10 + - type: entity name: raw pastry base parent: FoodBakingBase @@ -456,6 +488,18 @@ count: 3 slice: FoodCroissantRaw +- type: entity + name: flat cotton dough + parent: FoodBakingBase + id: FoodDoughCottonFlat + description: A flattened cotton dough. + components: + - type: Sprite + state: cotton-dough-flat + - type: Construction + graph: CottonPizza + node: flat + - type: entity name: pizza bread parent: FoodBakingBase diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml b/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml new file mode 100644 index 0000000000..2292d4d299 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/food/cottonpizza.yml @@ -0,0 +1,13 @@ +- type: constructionGraph + id: CottonPizza + start: start + graph: + - node: start + entity: FoodDoughCotton + edges: + - to: flat + steps: + - tool: Rolling + doAfter: 1 + - node: flat + entity: FoodDoughCottonFlat diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index 9a59ab5023..ce38125627 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -399,6 +399,14 @@ solids: FoodDough: 1 +- type: microwaveMealRecipe + id: RecipeBreadCotton + name: cotton bread recipe + result: FoodBreadCotton + time: 10 + solids: + FoodDoughCotton: 1 + - type: microwaveMealRecipe id: RecipeSausageBread name: sausage bread recipe @@ -602,6 +610,15 @@ FoodTomato: 2 SheetUranium1: 2 +- type: microwaveMealRecipe + id: RecipeCottonPizza + name: cotton pizza recipe + result: FoodPizzaCotton + time: 30 + solids: + FoodDoughCottonFlat: 1 + CottonBol: 4 + #Italian - type: microwaveMealRecipe id: RecipeBoiledSpaghetti diff --git a/Resources/Prototypes/Recipes/Reactions/food.yml b/Resources/Prototypes/Recipes/Reactions/food.yml index 24dca890ed..7d524a9c7a 100644 --- a/Resources/Prototypes/Recipes/Reactions/food.yml +++ b/Resources/Prototypes/Recipes/Reactions/food.yml @@ -72,6 +72,22 @@ - !type:CreateEntityReactionEffect entity: FoodDoughTortilla +- type: reaction + id: CreateDoughCotton + impact: Low + quantized: true + conserveEnergy: false + reactants: + Fiber: + amount: 10 + Flour: + amount: 5 + Water: + amount: 10 + effects: + - !type:CreateEntityReactionEffect + entity: FoodDoughCotton + - type: reaction id: CreateCakeBatter impact: Low diff --git a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml index 450f5f088b..3eb9c2ca2f 100644 --- a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml +++ b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml @@ -22,9 +22,15 @@ WARNING: This is not an automatically generated list, things here may become out - Chocolate = 6 Cocoa Powder, 2 Milk, 2 Sugar - Uncooked Animal Protein: Grind Raw Meat +Buzz! Don't forget about Moth diet! +- Cotton Dough = 5 Flour, 10 Fabric, 10 Water +- Cotton bread baked the same as default but with cotton dough instead +- Cotton Pizza: Microwave 1 Flat Cotton Dough and 4 Cotton Bolls for 30 Seconds + + diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton-slice.png new file mode 100644 index 0000000000000000000000000000000000000000..0b92e30ae1403dd0b4f78c7e24245cc849ee34ed GIT binary patch literal 721 zcmV;?0xtcDP)7h3fO2K+*#e<;5 zQwv4V90WxVT0x6o@lri%6||sukRo^x^&k;N!BE5&D@CZ6h&C}+JKTC1Mqo2Sp%4^B!A#*W&yU@H+mMik1-v>vz=a7yFoJs}AM`*gk114D zMc>Iu=w%mXFy4@mx+-r*2aTO_0pXFeaJ$M_HM$rUiA0b}ETSXQgG3_1IX`mz)X>WF z6dx`fMBkNIO-{`T0#kwh=qUzE!EVcD%DYQBXqs99`(?CuY-K?d9=Rg2q^#w&22U@i_=WE>y$C8rn-y)^d3N<~fF=m;d6~_Q1lD zf}Vx@P`me|#a)JujA?V_v=sEMWm#rXDN_LTg*drrMq1-XksVMz%^}?8xAs@RxNNg# zvQQ`@zx)WrQl1?MN-L%q71Gad*x*}Z5d@~wv(>*XCntnJ0jFA-ADS(yW)Hl6Fll^E z=aHR%#~Y~^JT2S!)Zf1>ajvNAf1I4ICPi#&0_5VBZ~(hU4>8=%ep*}i7F^udYjlSF zW)oI^HhXro0Rv56pn&{)l4`_K@2 z2Txd6Fn;}vHJ8k2n0P#2_i#-Ks20*casWP`ms8Jf&BAMx5ZWX|Nvk;bWU(QzsMpkD zv5B6u)8htp_RG5u+3ss|%j>RHUDtVc9B>@?{~Y)Q3Yrfabj#tx00000NkvXXu0mjf D_B}(r literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/cotton.png new file mode 100644 index 0000000000000000000000000000000000000000..baa9dc777f23cac67e1f24c7d2b324248459ea55 GIT binary patch literal 1187 zcmV;U1YG-xP)a$T@PBu}bd&+t#$&r255&e%sZ`*8a05P<6I<;b zq%#`2gI;;Iug=39jLH~sKT|jaB2*@W-F>~ zeQ;I(#@tE`;c!@lB<}uzmFwTa**8)*FXA*IU(!*uI7CRm>&CH%Gj&(8f6mF=S3dr} ziLar92`eBwHxS z?u#>bLPSp>>5HBbV%pC4U2Ptnj)F{m`s7P!bGp%c>0P9gX>|0D zHjq;UL2`qb&JbJSA$;@c2a;C?tVUxkwSdtJQA|%y3z^GqSG#s#c6Js~zlybbCpkr} zZ3Pf&&jL!s^3^X8c;ihJN@Xms>h*)?(_NNdwoR-*aMSLU%Cg|zLhho9aPmpV&+7DvC*ieQ>Y{{L#?AQXr^$xIZxCR)H-RK#^5L$QMaU2Qq1=c@AB*Dd{eIP{ zO4GoF%Wq-n?kxmW$If~lH?H3nqI7Y8u9?y8t~Kqx$pLmS=EY(WZtn@K<>uvSkaPDD z&j$3(CyC@+jRViWi1KP0wYH=x%_q@d2#CzX41!@LQ9Tc$F(7KxRNKLE&!*VSTp)~7 zkmLroYBnjsI~%=Ha;$Ts=2>oR2ixrO^Nfx)5gQ#10$7T~t(kSH0-l0&gJMW-Qf^Qb z%aPz=!wh#1ossu2Qc~;e=TS^>jC1;wOT90gJK6!pP%Cd>U|>Kdl8hn@P>gXeu#cHd zGM;<}wzqer$tPVfPR0Fm_N!^y1=da<%)eg4bnaETexLE`kf`fZu=)qMKqjzO`e*j!4khJ?fZMR&k|#z z@jn2;ofed^gLv<|+yDCipy{JlN6Ueh1OK%H{{Whh5shRn#{2*P002ovPDHLkV1l$A BHDmw) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json index 2761d79f98..f35aa5f4ce 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955", + "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380)", "size": { "x": 32, "y": 32 @@ -70,6 +70,12 @@ { "name": "crostini" }, + { + "name": "cotton" + }, + { + "name": "cotton-slice" + }, { "name": "french-toast" }, diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-pizza.png new file mode 100644 index 0000000000000000000000000000000000000000..e047c757fcd952d27343daa0072ae2e1179cf47a GIT binary patch literal 672 zcmV;R0$=@!P)+f4kN(l%?IIO;)c6@4hs(g(ob1*e);jt{8Ixy zy;@_?;z@(Xo=?)5)tEyN1XQcl$n!jEwOaAHZQH!Zx38NINintf+cYvqvMK{Os*o3N zlY8tc?b|CHRxX#>VE{KxlXP9@J;1RS-xii1QBb3R)Dx=Ye^K?2Lj+LF)6KzQm5a5Pka6$kInMI|RWpP5ZAz697UXKaM zvYbgei^S1n3ot~w@`lJ*CD(P?VW>pdU@(ZP`3)jSioIwPR#7zyXf~UKqJr(`6w&@; zsTug`?DF7*-(L`by4^0js;b;$c#;qZ0st<+p_*tFNWjqsfMc$Jk+g{!`1W)u94=hp z!I{5wpJS0ESuJKj3?uq2B*$E!MIe@(3lRG9_8vKIkFMQ)nZnGxh9F@qE>XufNmA1n z<;1x)CRD9fnH;LezTc1D0Bi3(uY(aKVn;aV8jcSduy6pgnN0*H7m><$;1er_*KA#VvPzbUtL(?=i zf&}TE>WZSUS~8hr#uEF>m|r_~G}3Ze8Mr-(82*7Eg8g$S7K;dn!^q`ws8*{?jA~A& z6WMH*)#xsl%WUlX-8K^OgQnut&wBtSy-q@pN7*L9Q3$KwtPR~tyD zu3L)RGN5V|$jLJFLJawvEmMR9^Z7g^Nn)nxNd})!SD5hmix}_m_1Ob7G8Ms_7M#k~A z6O_2wqP67|g&Rc+T(gD48bM%LKxbhFW|wi!9UmEBW_GD8oSVG7 zdEayHx%a*y^2}4fQ@~T;A1kmhFMg?1(w)wHFTbNpR|<38d7#Z!&{!-+!{Lyk(dYz^ zU-fT1?li01*Ecul@{K$D-tW5M#pC;WcI5(PG8w*9Q4|V=LXO{J9etzGASkleYr7J0 zBwz(^Hk%CE@AoMj4s#Du0D|orAlp0Im?-8dl?ny*9xLLehAja|4xmwQiva?Gpdq_T zk!Xy^+CZh>+94*BOeRTgnX-dKDwP_mWF@iw=>uKA{a^;~uw6poV#K&%czVpgM~h3R z83e%oBSAibdD3L+b^|mr=FK@%jdok*GgdP3lPxAOcSzbu_-j-ymVN zQEz)lEgS-c|UB6isAg{D*++aanHAtJP+1ZQ&A74MC z^4sSG5@2ujYPG1-F&(qo3;`qxHX;Ez&W4F9 z=*e9Im;gYJ22dE15DohPE>y&Ml%rh|&Je(%YV{|rudVVWcwqWXVz>dHioMmw|2$RByj(BhkT-?8KTL=09V%v80%tV3i3umB@thlW#{xv#~ZO245Gr> zfTInqu7A?sRJ%oSsK8w8Z}DZal?CQ)y2#l@veZVggMC z63K*Wte7+j1DDElPrw~jO_22#_Iv*4SLO@q2^z|RvRE?jwL(*YmFYf!IJ);^FKS&D zB$;Pr)}^?^`3wF*$OSxfkvZZInJp-~2WZ%AHcbMW3iyKw41IZxG7AAD-KA4WR*d?9 zu3n{6v$d3b4Q4ifnT#hK7-b7;WnmHnpWp6X0fFanz|{o%_PPb?5co9$yH!L~A7`D? zu)B_6-1iP3Dufn8%zV@bbWJ;}otj^orUI9*UFYbgqd>G<-@pfWnoff=SA)}K>MEDf zVec72q!F<#QT2f`1}zEn*-X;?th>`&@4S&raUgpJ(f9`ZGkzGw5>S&yA`v(%ofsV( zWlw6n_ivtq=I3%3WZi^22|l>fDOc4uBep!xj*G07Y}S+ry_jgsP7Hx6m#wk<`@8~q e1@a0g3j785Fk8L?fLE*l0000 Date: Mon, 26 Aug 2024 02:47:24 +0000 Subject: [PATCH 07/54] 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 d3682dc07c..747f148443 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Deserty0 - changes: - - message: '"no materials loaded" messege now appears in lathes!' - type: Fix - id: 6713 - time: '2024-06-12T10:32:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28885 - author: robertGN changes: - message: Syndicate communications consoles can no longer recall the emergency @@ -3866,3 +3859,10 @@ id: 7212 time: '2024-08-25T17:09:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30001 +- author: lzk228 + changes: + - message: Cotton dough added to the game! Check the guidebook for new recipes. + type: Add + id: 7213 + time: '2024-08-26T02:46:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30668 From dd7c395fb7cf5ffa56f943e00e35f7ae24cc95c8 Mon Sep 17 00:00:00 2001 From: Spessmann <156740760+Spessmann@users.noreply.github.com> Date: Sun, 25 Aug 2024 22:45:16 -0700 Subject: [PATCH 08/54] Cog update (#31458) made disposals less bad --- Resources/Maps/cog.yml | 4553 ++++++++++++++++++++++------------------ 1 file changed, 2497 insertions(+), 2056 deletions(-) diff --git a/Resources/Maps/cog.yml b/Resources/Maps/cog.yml index 5f4fb44022..53aac9f5b7 100644 --- a/Resources/Maps/cog.yml +++ b/Resources/Maps/cog.yml @@ -99,7 +99,7 @@ entities: version: 6 -2,-2: ind: -2,-2 - tiles: gQAAAAAAYAAAAAABYAAAAAABYAAAAAABgQAAAAAAYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAYAAAAAADYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAABgQAAAAAAYAAAAAABYAAAAAABYAAAAAADgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAACYAAAAAABYAAAAAADcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAABYAAAAAAAYAAAAAABcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAAAYAAAAAADYAAAAAACYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAADcwAAAAABYAAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAADcwAAAAABcwAAAAABcwAAAAACcwAAAAABcwAAAAABYAAAAAADYAAAAAACUQAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAABcwAAAAACYAAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAABgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAADcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAB + tiles: gQAAAAAAYAAAAAABYAAAAAABYAAAAAABgQAAAAAAYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAYAAAAAADYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAABgQAAAAAAYAAAAAABYAAAAAABYAAAAAADgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAACYAAAAAABYAAAAAADcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAADYAAAAAABYAAAAAAAYAAAAAABcwAAAAAAcwAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAABYAAAAAACgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAAAYAAAAAADYAAAAAACYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAADcwAAAAABYAAAAAAAYAAAAAAAYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAADcwAAAAABcwAAAAABcwAAAAACcwAAAAABcwAAAAABYAAAAAADYAAAAAACUQAAAAAAYAAAAAACYAAAAAADYAAAAAAAYAAAAAADYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAcwAAAAABcwAAAAADcwAAAAABcwAAAAABcwAAAAACYAAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAABYAAAAAABYAAAAAABgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAADcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAB version: 6 -2,0: ind: -2,0 @@ -127,7 +127,7 @@ entities: version: 6 -3,-3: ind: -3,-3 - tiles: gQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAACcwAAAAABcwAAAAADgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAAAcwAAAAADcwAAAAADgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAACYAAAAAACYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAABYAAAAAABYAAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAABcwAAAAACcwAAAAADcwAAAAADgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADcwAAAAACcwAAAAABcwAAAAADcwAAAAABcwAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAABYAAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAACcwAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAABYAAAAAABgQAAAAAAYAAAAAABYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAA + tiles: gQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAACcwAAAAABcwAAAAADgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAAAcwAAAAADcwAAAAADgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAACcwAAAAAAcwAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAcwAAAAADcwAAAAADcwAAAAACYAAAAAACYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAACYAAAAAAAYAAAAAABYAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADgQAAAAAAYAAAAAABYAAAAAABYAAAAAAAYAAAAAACYAAAAAABgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACcwAAAAABcwAAAAACcwAAAAADcwAAAAADgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAADcwAAAAACcwAAAAABcwAAAAADcwAAAAABcwAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAACcwAAAAABgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAADYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAABYAAAAAACcwAAAAADcwAAAAACcwAAAAACcwAAAAACcwAAAAABYAAAAAACYAAAAAABYAAAAAACYAAAAAADYAAAAAABYAAAAAABYAAAAAADYAAAAAABgQAAAAAAYAAAAAACYAAAAAADYAAAAAABYAAAAAACYAAAAAACYAAAAAABYAAAAAABgQAAAAAAYAAAAAABYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAACYAAAAAADYAAAAAADYAAAAAADgQAAAAAAYAAAAAACYAAAAAAAYAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAA version: 6 -4,-2: ind: -4,-2 @@ -179,7 +179,7 @@ entities: version: 6 2,0: ind: 2,0 - tiles: gQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAABwAAAAAAAwAAAAABBwAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAgAAAAABBwAAAAAAAgAAAAABBwAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAABwAAAAAAgQAAAAAAYAAAAAADBwAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAgAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA + tiles: gQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABgQAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAAwAAAAABBwAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgQAAAAAAAgAAAAAAAwAAAAAAgQAAAAAAAgAAAAABBwAAAAAAAgAAAAABBwAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAABwAAAAAAgQAAAAAABwAAAAAAAwAAAAAAYAAAAAADBwAAAAAAYAAAAAABYAAAAAABYAAAAAACYAAAAAABYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAA version: 6 2,-2: ind: 2,-2 @@ -283,15 +283,15 @@ entities: version: 6 2,1: ind: 2,1 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAACgQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAYAAAAAABYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAADQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAIAAAAAACIAAAAAACIAAAAAADIAAAAAAAgQAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAABgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAIAAAAAADIAAAAAABIAAAAAADIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAADgQAAAAAAgQAAAAAAQgAAAAAAQgAAAAAAgQAAAAAAYAAAAAABgQAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAAAIAAAAAABIAAAAAABIAAAAAAAgQAAAAAAIAAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAIAAAAAAAIAAAAAADIAAAAAABIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAAAIAAAAAACIAAAAAACQgAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAIAAAAAADIAAAAAABIAAAAAACIAAAAAAAgQAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAABgQAAAAAAgQAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAYAAAAAADCwAAAAAAYAAAAAACYAAAAAACgQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAYAAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAACYAAAAAABgQAAAAAAYAAAAAADYAAAAAACYAAAAAADYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAAAYAAAAAABYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAADQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAYAAAAAAAYAAAAAABYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAABYAAAAAADYAAAAAADYAAAAAAAYAAAAAABYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABYAAAAAABYAAAAAABYAAAAAACYAAAAAAAYAAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABYAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAADYAAAAAADYAAAAAAAYAAAAAADYAAAAAADYAAAAAAAgQAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAACYAAAAAABgQAAAAAAIAAAAAACIAAAAAACIAAAAAADIAAAAAAAgQAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAABgQAAAAAAgQAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAABgQAAAAAAIAAAAAADIAAAAAABIAAAAAADIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAADgQAAAAAAgQAAAAAAQgAAAAAAQgAAAAAAgQAAAAAAYAAAAAABgQAAAAAAIAAAAAADIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAAAIAAAAAABIAAAAAABIAAAAAAAgQAAAAAAIAAAAAAAQgAAAAAAgQAAAAAAYAAAAAADYAAAAAADgQAAAAAAIAAAAAAAIAAAAAADIAAAAAABIAAAAAACgQAAAAAAIAAAAAADIAAAAAACIAAAAAACIAAAAAAAIAAAAAACIAAAAAACQgAAAAAAgQAAAAAAYAAAAAABYAAAAAADgQAAAAAAIAAAAAADIAAAAAABIAAAAAACIAAAAAAAgQAAAAAAIAAAAAABIAAAAAADIAAAAAAAIAAAAAABgQAAAAAAgQAAAAAA version: 6 3,0: ind: 3,0 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,1: ind: 3,1 - tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABYAAAAAADYAAAAAABAgAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAwAAAAACBwAAAAAAAgAAAAABAgAAAAABgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABgQAAAAAAIAAAAAACIAAAAAADgQAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAgQAAAAAAYAAAAAABYAAAAAACYAAAAAACYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAADgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAABgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: gQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAACwAAAAAACwAAAAAACwAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAABYAAAAAADYAAAAAABAgAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAwAAAAACBwAAAAAAAgAAAAABAgAAAAABgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAABwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAADgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAADYAAAAAABgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAACYAAAAAAAYAAAAAADYAAAAAADgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAYAAAAAADYAAAAAAAYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABgQAAAAAAIAAAAAACIAAAAAADgQAAAAAAYAAAAAABYAAAAAACYAAAAAABYAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAgQAAAAAAYAAAAAABYAAAAAACYAAAAAACYAAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAIAAAAAADgQAAAAAAYAAAAAAAYAAAAAACYAAAAAACYAAAAAABgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,2: ind: 3,2 @@ -387,7 +387,7 @@ entities: version: 6 -4,3: ind: -4,3 - tiles: gAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAA + tiles: gAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAYAAAAAAA version: 6 -3,3: ind: -3,3 @@ -687,11 +687,6 @@ entities: 2847: 31,47 2848: 30,47 2849: 29,47 - 2850: 29,45 - 2851: 30,45 - 2852: 33,45 - 2853: 34,45 - 2854: 35,45 2855: 35,46 2856: 35,47 2948: 59,42 @@ -1167,8 +1162,6 @@ entities: 1276: 54,-37 1277: 54,-20 1355: 19,3 - 1716: 41,13 - 1717: 41,11 1781: 33,35 1782: 33,36 1783: 33,37 @@ -1360,18 +1353,11 @@ entities: 1575: 39,8 1576: 38,7 1577: 37,6 - 1578: 36,7 1579: 35,7 1580: 34,7 1581: 34,7 1582: 34,8 1583: 35,8 - 1584: 37,8 - 1585: 37,8 - 1586: 36,6 - 1587: 36,6 - 1588: 37,7 - 1589: 36,7 1590: 38,8 1591: 39,7 1592: 34,10 @@ -1379,9 +1365,6 @@ entities: 1594: 36,10 1595: 36,10 1596: 35,10 - 1597: 41,12 - 1598: 41,12 - 1599: 41,12 1679: 52,22 1680: 52,23 1681: 53,24 @@ -1578,9 +1561,7 @@ entities: 4412: -34,-27 4413: -33,-29 4414: -37,-28 - 4415: -33,-26 4416: -30,-26 - 4417: -32,-25 4418: -36,-25 4419: -39,-23 4420: -41,-24 @@ -1593,7 +1574,6 @@ entities: 4427: -33,-21 4428: -25,-31 4429: -22,-29 - 4430: -23,-31 4431: -36,-48 4432: -32,-47 4433: -31,-48 @@ -1678,7 +1658,6 @@ entities: 4906: -15,-31 4907: -17,-30 4908: -13,-28 - 4909: -22,-31 4910: -22,-29 4911: -25,-29 4912: 13,-11 @@ -1956,6 +1935,73 @@ entities: 5728: -24,65 5729: -22,65 5730: -23,64 + 5970: 37,10 + 5971: 34,11 + 5972: 33,11 + 5973: 33,12 + 5974: 32,12 + 5975: 37,14 + 5976: 36,14 + 5977: 35,14 + 5978: 35,15 + 5979: 35,15 + 5980: 35,17 + 5981: 35,17 + 5982: 35,18 + 5983: 38,16 + 5984: 37,17 + 5985: 37,18 + 5986: 39,18 + 5987: 39,19 + 5988: 44,14 + 5989: 46,14 + 5990: 48,14 + 5991: 50,14 + 5992: 48,14 + 5993: 47,14 + 5994: 46,14 + 5995: 45,14 + 5996: 44,14 + 5997: 46,14 + 5998: 46,14 + 5999: 47,14 + 6000: 48,14 + 6001: 49,14 + 6002: 49,14 + 6003: 51,14 + 6004: 51,14 + 6005: 52,15 + 6006: 51,15 + 6007: 51,16 + 6008: 51,16 + 6009: 52,16 + 6010: 52,17 + 6011: 53,17 + 6012: 53,17 + 6013: 54,17 + 6014: 54,17 + 6015: 48,10 + 6016: 47,11 + 6017: 45,11 + 6018: 44,10 + 6019: 44,11 + 6020: 45,11 + 6021: 47,10 + 6022: 48,10 + 6023: 48,11 + 6024: 48,11 + 6025: 47,12 + 6026: 49,12 + 6027: 50,12 + 6028: 51,12 + 6029: 52,13 + 6030: 52,13 + 6031: 52,12 + 6032: 40,11 + 6033: 38,12 + 6034: 38,11 + 6035: 36,11 + 6036: 37,10 - node: cleanable: True color: '#FFFFFFFF' @@ -2305,7 +2351,6 @@ entities: 3282: 40,48 3283: 40,49 3284: 40,47 - 3285: 34,45 3286: 32,46 3287: 31,45 3288: 29,46 @@ -2665,7 +2710,6 @@ entities: 3661: -22,-47 3662: -21,-45 3663: -23,-45 - 3664: -27,-44 3665: -30,-43 3666: -31,-44 3667: -35,-44 @@ -2684,15 +2728,11 @@ entities: 3681: -30,-29 3682: -30,-27 3683: -33,-28 - 3684: -33,-27 - 3685: -29,-25 3686: -27,-25 3687: -26,-25 3688: -25,-25 3689: -26,-31 - 3690: -26,-29 3691: -24,-31 - 3692: -23,-31 3693: -22,-30 3694: -20,-25 3695: -22,-21 @@ -3394,6 +3434,11 @@ entities: id: Grassa4 decals: 2155: -1.7855573,23.949152 + - node: + color: '#FFFFFFFF' + id: Grassb4 + decals: + 6047: 0.3860445,30.988146 - node: color: '#FFFFFFFF' id: Grassb5 @@ -3440,6 +3485,11 @@ entities: 4079: 68.65254,42.701946 4080: 69.952675,44.10507 4081: 74.31514,52.17988 + 6042: 0.5364504,30.177677 + 6043: 1.2951236,30.04314 + 6044: 0.95249677,30.984898 + 6045: -3.5628335,30.935976 + 6046: -3.489414,24.993238 - node: color: '#FFFFFFFF' id: Grassd3 @@ -4077,8 +4127,6 @@ entities: decals: 72: -29,-26 73: -28,-26 - 74: -27,-26 - 75: -26,-26 76: -25,-26 94: -36,-29 95: -35,-29 @@ -4108,7 +4156,6 @@ entities: 3947: -31,-22 3948: -30,-22 4514: -32,-22 - 4515: -22,-32 4516: -26,-32 5602: -32,-40 5603: -31,-40 @@ -4284,6 +4331,9 @@ entities: 2809: 32,45 2810: 31,45 4966: 8,0 + 6038: 30,45 + 6040: 33,45 + 6041: 34,45 - node: color: '#FA750096' id: HalfTileOverlayGreyscale180 @@ -4293,6 +4343,9 @@ entities: 194: -30,-45 195: -31,-45 196: -35,-45 + 6048: -34,-45 + 6049: -32,-45 + 6050: -33,-45 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 @@ -4447,11 +4500,9 @@ entities: 616: -18,-21 617: -18,-20 4506: -27,-31 - 4507: -27,-30 - 4508: -27,-29 - 4509: -27,-28 4728: -18,-24 5607: -46,27 + 6090: -27,-30 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale270 @@ -4786,6 +4837,7 @@ entities: 638: -15,-20 5599: -30,-38 5600: -30,-39 + 6087: -22,-31 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale90 @@ -4958,12 +5010,15 @@ entities: 1357: 22,-1 1358: 20,-1 1359: 21,-1 + 6106: -27,-28 + 6108: -26,-28 - node: - angle: 1.5707963267948966 rad + angle: 3.141592653589793 rad color: '#FFFFFFFF' id: LoadingArea decals: - 1702: 36,6 + 6080: -26,-26 + 6081: -27,-26 - node: color: '#D381C996' id: MiniTileBoxOverlay @@ -5233,6 +5288,20 @@ entities: 2840: 44,49 4980: 12,-7 4981: 13,-7 + - node: + color: '#FA750096' + id: QuarterTileOverlayGreyscale + decals: + 6062: -34,-44 + 6063: -33,-44 + 6064: -32,-44 + 6065: -31,-44 + 6066: -30,-44 + 6067: -29,-44 + 6068: -28,-44 + 6069: -27,-44 + 6070: -26,-44 + 6071: -35,-44 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale180 @@ -5458,7 +5527,15 @@ entities: color: '#FA750096' id: QuarterTileOverlayGreyscale180 decals: - 201: -32,-45 + 6053: -35,-43 + 6054: -34,-43 + 6055: -33,-43 + 6056: -32,-43 + 6057: -31,-43 + 6058: -30,-43 + 6059: -29,-43 + 6060: -28,-43 + 6061: -27,-43 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale270 @@ -5538,6 +5615,7 @@ entities: decals: 122: -31,-29 5606: -32,-36 + 6095: -27,-29 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale270 @@ -5658,11 +5736,6 @@ entities: 5776: 29,-9 5777: 29,-8 5778: 29,-7 - - node: - color: '#FA750096' - id: QuarterTileOverlayGreyscale270 - decals: - 202: -34,-45 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 @@ -5871,11 +5944,6 @@ entities: 2610: 22,69 4955: 13,-12 5046: 28,43 - - node: - color: '#FA750096' - id: QuarterTileOverlayGreyscale90 - decals: - 203: -26,-43 - node: color: '#FFFFFFFF' id: Rock01 @@ -6110,6 +6178,7 @@ entities: 125: -24,-26 234: -43,-31 5601: -30,-40 + 6086: -22,-32 - node: color: '#D4D4D428' id: ThreeQuarterTileOverlayGreyscale180 @@ -6144,6 +6213,7 @@ entities: 1385: -21,-8 1386: -20,-7 2830: 48,47 + 6039: 35,45 - node: color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale180 @@ -6230,6 +6300,7 @@ entities: 1384: -25,-8 2826: 43,47 4963: 7,0 + 6037: 29,45 - node: color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale270 @@ -6301,6 +6372,7 @@ entities: id: ThreeQuarterTileOverlayGreyscale90 decals: 126: -24,-24 + 6084: -24,-28 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale90 @@ -6344,6 +6416,8 @@ entities: decals: 5192: 66,50 5194: -26,-51 + 5966: 37,19 + 5967: 43,14 - node: angle: 3.141592653589793 rad color: '#000000FF' @@ -6376,7 +6450,6 @@ entities: decals: 249: -28,-50 717: 32,-19 - 1703: 37,8 2226: -33,53 2227: -32,48 - node: @@ -6392,6 +6465,12 @@ entities: decals: 5193: 66,50 5195: -26,-51 + - node: + color: '#8C347FFF' + id: WarnBoxGreyscale + decals: + 5968: 37,19 + 5969: 43,14 - node: color: '#52B4E9FF' id: WarnCornerNE @@ -6694,8 +6773,6 @@ entities: 1413: -28,-4 1414: -28,-3 1431: -37,-11 - 1705: 36,7 - 1706: 36,8 1715: 36,17 2060: -13,5 2061: -13,6 @@ -6800,7 +6877,6 @@ entities: 1421: -36,-10 1514: 15,0 1515: 16,0 - 1704: 37,7 2222: -31,49 2223: -30,49 2375: -37,62 @@ -7334,7 +7410,7 @@ entities: -8,-9: 0: 26231 -7,-7: - 0: 65454 + 0: 65422 -7,-6: 0: 65311 -7,-8: @@ -7529,7 +7605,7 @@ entities: -8,-12: 0: 61687 -9,-12: - 0: 61695 + 0: 62719 -8,-11: 0: 4095 -9,-11: @@ -7878,11 +7954,11 @@ entities: 0: 238 8,1: 2: 15 - 0: 60928 + 0: 28160 8,2: - 0: 3886 + 0: 50982 8,3: - 0: 36623 + 0: 40759 9,-4: 0: 65295 9,-3: @@ -7939,30 +8015,30 @@ entities: 2: 15 0: 65280 9,2: - 0: 3887 + 0: 65327 9,3: - 0: 3855 + 0: 36623 9,4: 0: 61182 10,1: 2: 35 0: 59528 10,2: - 0: 44847 + 0: 47919 10,3: - 0: 12207 + 0: 10799 10,4: 0: 48059 11,1: 0: 12288 11,2: - 0: 57103 + 0: 65295 11,3: 0: 4063 11,4: 0: 63487 12,2: - 0: 44815 + 0: 48911 12,3: 0: 44943 8,-9: @@ -9228,10 +9304,14 @@ entities: 2: 4095 -15,13: 2: 4095 + -15,15: + 0: 3212 -14,13: 2: 20309 -14,15: - 0: 3780 + 0: 4079 + -14,14: + 0: 35016 -14,16: 2: 17604 -13,15: @@ -9559,6 +9639,12 @@ entities: parent: 2922 - type: InstantAction container: 2922 + - uid: 12128 + components: + - type: Transform + parent: 23717 + - type: InstantAction + container: 23717 - uid: 27130 components: - type: Transform @@ -9573,6 +9659,18 @@ entities: parent: 8997 - type: InstantAction container: 8997 + - uid: 12036 + components: + - type: Transform + parent: 4313 + - type: InstantAction + container: 4313 + - uid: 12037 + components: + - type: Transform + parent: 12064 + - type: InstantAction + container: 12064 - uid: 18678 components: - type: Transform @@ -10065,6 +10163,20 @@ entities: - 5280 - 10003 - 10026 + - uid: 12032 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -50.5,-24.5 + parent: 12 + - type: DeviceList + devices: + - 9988 + - 801 + - 9987 + - 800 + - 23933 + - 23934 - uid: 13076 components: - type: Transform @@ -10636,6 +10748,7 @@ entities: - 1306 - 2094 - 25373 + - 12725 - uid: 25516 components: - type: Transform @@ -11197,6 +11310,11 @@ entities: - type: Transform pos: -22.5,-7.5 parent: 12 + - uid: 12143 + components: + - type: Transform + pos: 31.5,47.5 + parent: 12 - uid: 13514 components: - type: Transform @@ -11212,11 +11330,6 @@ entities: - type: Transform pos: -4.5,11.5 parent: 12 - - uid: 23700 - components: - - type: Transform - pos: 33.5,45.5 - parent: 12 - uid: 23899 components: - type: Transform @@ -11227,6 +11340,11 @@ entities: - type: Transform pos: -20.5,61.5 parent: 12 + - uid: 26068 + components: + - type: Transform + pos: 38.5,12.5 + parent: 12 - uid: 26913 components: - type: Transform @@ -12334,6 +12452,12 @@ entities: rot: -1.5707963267948966 rad pos: 25.5,71.5 parent: 12 + - uid: 22328 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,59.5 + parent: 12 - proto: AirlockExternalGlassAtmosphericsLocked entities: - uid: 4390 @@ -12454,6 +12578,12 @@ entities: - DoorStatus: DoorBolt 478: - DoorStatus: DoorBolt + - uid: 1061 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,62.5 + parent: 12 - uid: 2041 components: - type: Transform @@ -12532,6 +12662,12 @@ entities: linkedPorts: 19847: - DoorStatus: DoorBolt + - uid: 22277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,60.5 + parent: 12 - uid: 27232 components: - type: Transform @@ -12684,6 +12820,12 @@ entities: - type: Transform pos: -16.5,-62.5 parent: 12 + - uid: 22322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,57.5 + parent: 12 - uid: 24238 components: - type: Transform @@ -12696,11 +12838,6 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-39.5 parent: 12 - - uid: 29395 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - proto: AirlockExternalGlassShuttleLocked entities: - uid: 1968 @@ -12765,17 +12902,23 @@ entities: - type: Transform pos: -36.5,13.5 parent: 12 - - uid: 26256 + - uid: 22320 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,-48.5 + rot: -1.5707963267948966 rad + pos: -57.5,62.5 parent: 12 - - uid: 29394 + - uid: 22321 components: - type: Transform rot: -1.5707963267948966 rad - pos: -54.5,62.5 + pos: -57.5,60.5 + parent: 12 + - uid: 26256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,-48.5 parent: 12 - proto: AirlockExternalLocked entities: @@ -13471,6 +13614,27 @@ entities: rot: 3.141592653589793 rad pos: 31.5,23.5 parent: 12 + - uid: 12011 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 12019 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,12.5 + parent: 12 + - uid: 12028 + components: + - type: Transform + pos: 33.5,9.5 + parent: 12 + - uid: 12122 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 - uid: 14946 components: - type: Transform @@ -13536,6 +13700,11 @@ entities: - type: Transform pos: -12.5,-5.5 parent: 12 + - uid: 22304 + components: + - type: Transform + pos: 37.5,9.5 + parent: 12 - uid: 22340 components: - type: Transform @@ -13908,12 +14077,6 @@ entities: parent: 12 - proto: AirlockMedicalLocked entities: - - uid: 1081 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -36.5,-46.5 - parent: 12 - uid: 2431 components: - type: Transform @@ -13988,6 +14151,13 @@ entities: rot: 3.141592653589793 rad pos: -39.5,-48.5 parent: 12 +- proto: AirlockMedicalScienceLocked + entities: + - uid: 514 + components: + - type: Transform + pos: -36.5,-46.5 + parent: 12 - proto: AirlockQuartermasterLocked entities: - uid: 8437 @@ -14626,12 +14796,18 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,-26.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 9988 components: - type: Transform rot: 1.5707963267948966 rad pos: -53.5,-22.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 9989 components: - type: Transform @@ -15634,11 +15810,6 @@ entities: - type: Transform pos: 5.3721876,30.61469 parent: 12 - - uid: 23716 - components: - - type: Transform - pos: 33.66482,47.484264 - parent: 12 - uid: 26399 components: - type: Transform @@ -15753,6 +15924,11 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,-9.5 parent: 12 + - uid: 2448 + components: + - type: Transform + pos: 31.5,15.5 + parent: 12 - uid: 2543 components: - type: Transform @@ -15909,11 +16085,11 @@ entities: - type: Transform pos: 43.5,26.5 parent: 12 - - uid: 12086 + - uid: 11512 components: - type: Transform rot: 1.5707963267948966 rad - pos: 36.5,19.5 + pos: 36.5,18.5 parent: 12 - uid: 12423 components: @@ -16364,11 +16540,6 @@ entities: rot: 1.5707963267948966 rad pos: 64.5,-13.5 parent: 12 - - uid: 8533 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - uid: 9039 components: - type: Transform @@ -16413,6 +16584,24 @@ entities: rot: -1.5707963267948966 rad pos: 23.5,76.5 parent: 12 + - uid: 12033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,57.5 + parent: 12 + - uid: 12057 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,62.5 + parent: 12 + - uid: 12645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,60.5 + parent: 12 - uid: 13558 components: - type: Transform @@ -16461,12 +16650,6 @@ entities: rot: 3.141592653589793 rad pos: -18.5,74.5 parent: 12 - - uid: 25445 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -54.5,62.5 - parent: 12 - proto: AtmosFixBlockerMarker entities: - uid: 93 @@ -17644,11 +17827,6 @@ entities: parent: 12 - proto: BaseComputer entities: - - uid: 689 - components: - - type: Transform - pos: 36.5,8.5 - parent: 12 - uid: 9825 components: - type: Transform @@ -18362,16 +18540,6 @@ entities: - type: Transform pos: -47.5,51.5 parent: 12 - - uid: 11959 - components: - - type: Transform - pos: 38.5,14.5 - parent: 12 - - uid: 11960 - components: - - type: Transform - pos: 34.5,14.5 - parent: 12 - uid: 16503 components: - type: Transform @@ -18541,6 +18709,13 @@ entities: - type: Transform pos: 6.5,66.5 parent: 12 +- proto: BlockGameArcadeComputerCircuitboard + entities: + - uid: 22318 + components: + - type: Transform + pos: 34.946262,45.383537 + parent: 12 - proto: Bloodpack entities: - uid: 13830 @@ -19126,6 +19301,12 @@ entities: parent: 12 - proto: BoxingBell entities: + - uid: 12634 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,53.5 + parent: 12 - uid: 22635 components: - type: Transform @@ -19621,6 +19802,11 @@ entities: - type: Transform pos: -43.5,-13.5 parent: 12 + - uid: 1087 + components: + - type: Transform + pos: 37.5,6.5 + parent: 12 - uid: 1315 components: - type: Transform @@ -22086,6 +22272,11 @@ entities: - type: Transform pos: 0.5,-34.5 parent: 12 + - uid: 3892 + components: + - type: Transform + pos: 51.5,12.5 + parent: 12 - uid: 4119 components: - type: Transform @@ -22506,6 +22697,11 @@ entities: - type: Transform pos: 63.5,-5.5 parent: 12 + - uid: 5038 + components: + - type: Transform + pos: 52.5,11.5 + parent: 12 - uid: 5052 components: - type: Transform @@ -22576,6 +22772,16 @@ entities: - type: Transform pos: 27.5,-1.5 parent: 12 + - uid: 5554 + components: + - type: Transform + pos: 52.5,10.5 + parent: 12 + - uid: 5555 + components: + - type: Transform + pos: 51.5,10.5 + parent: 12 - uid: 5643 components: - type: Transform @@ -25506,6 +25712,11 @@ entities: - type: Transform pos: -11.5,-8.5 parent: 12 + - uid: 8533 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 8773 components: - type: Transform @@ -25576,6 +25787,11 @@ entities: - type: Transform pos: 85.5,-33.5 parent: 12 + - uid: 8864 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 - uid: 8877 components: - type: Transform @@ -26526,6 +26742,11 @@ entities: - type: Transform pos: 47.5,-0.5 parent: 12 + - uid: 11366 + components: + - type: Transform + pos: -53.5,61.5 + parent: 12 - uid: 11367 components: - type: Transform @@ -26536,6 +26757,11 @@ entities: - type: Transform pos: 43.5,26.5 parent: 12 + - uid: 11400 + components: + - type: Transform + pos: -52.5,61.5 + parent: 12 - uid: 11484 components: - type: Transform @@ -26546,11 +26772,61 @@ entities: - type: Transform pos: 31.5,30.5 parent: 12 + - uid: 11980 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 + - uid: 11981 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 11985 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 11998 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 + - uid: 11999 + components: + - type: Transform + pos: 38.5,18.5 + parent: 12 + - uid: 12010 + components: + - type: Transform + pos: 30.5,17.5 + parent: 12 + - uid: 12012 + components: + - type: Transform + pos: 29.5,17.5 + parent: 12 + - uid: 12013 + components: + - type: Transform + pos: 28.5,17.5 + parent: 12 + - uid: 12029 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 - uid: 12072 components: - type: Transform pos: -42.5,53.5 parent: 12 + - uid: 12077 + components: + - type: Transform + pos: 38.5,16.5 + parent: 12 - uid: 12087 components: - type: Transform @@ -26611,16 +26887,6 @@ entities: - type: Transform pos: 37.5,8.5 parent: 12 - - uid: 12099 - components: - - type: Transform - pos: 36.5,8.5 - parent: 12 - - uid: 12100 - components: - - type: Transform - pos: 35.5,8.5 - parent: 12 - uid: 12101 components: - type: Transform @@ -26656,21 +26922,6 @@ entities: - type: Transform pos: 33.5,9.5 parent: 12 - - uid: 12108 - components: - - type: Transform - pos: 30.5,10.5 - parent: 12 - - uid: 12109 - components: - - type: Transform - pos: 31.5,10.5 - parent: 12 - - uid: 12110 - components: - - type: Transform - pos: 32.5,10.5 - parent: 12 - uid: 12111 components: - type: Transform @@ -26681,85 +26932,20 @@ entities: - type: Transform pos: 34.5,10.5 parent: 12 - - uid: 12113 - components: - - type: Transform - pos: 35.5,10.5 - parent: 12 - - uid: 12114 - components: - - type: Transform - pos: 36.5,10.5 - parent: 12 - uid: 12115 components: - type: Transform pos: 37.5,10.5 parent: 12 - - uid: 12116 - components: - - type: Transform - pos: 38.5,10.5 - parent: 12 - - uid: 12117 - components: - - type: Transform - pos: 39.5,10.5 - parent: 12 - - uid: 12118 - components: - - type: Transform - pos: 40.5,10.5 - parent: 12 - uid: 12119 components: - type: Transform pos: 41.5,10.5 parent: 12 - - uid: 12120 - components: - - type: Transform - pos: 42.5,10.5 - parent: 12 - - uid: 12121 - components: - - type: Transform - pos: 43.5,10.5 - parent: 12 - - uid: 12122 - components: - - type: Transform - pos: 44.5,10.5 - parent: 12 - - uid: 12123 - components: - - type: Transform - pos: 45.5,10.5 - parent: 12 - uid: 12124 components: - type: Transform - pos: 46.5,10.5 - parent: 12 - - uid: 12125 - components: - - type: Transform - pos: 47.5,10.5 - parent: 12 - - uid: 12126 - components: - - type: Transform - pos: 48.5,10.5 - parent: 12 - - uid: 12127 - components: - - type: Transform - pos: 49.5,10.5 - parent: 12 - - uid: 12128 - components: - - type: Transform - pos: 49.5,11.5 + pos: 50.5,12.5 parent: 12 - uid: 12129 components: @@ -26806,36 +26992,6 @@ entities: - type: Transform pos: 41.5,12.5 parent: 12 - - uid: 12138 - components: - - type: Transform - pos: 40.5,12.5 - parent: 12 - - uid: 12139 - components: - - type: Transform - pos: 39.5,12.5 - parent: 12 - - uid: 12140 - components: - - type: Transform - pos: 38.5,12.5 - parent: 12 - - uid: 12141 - components: - - type: Transform - pos: 37.5,12.5 - parent: 12 - - uid: 12142 - components: - - type: Transform - pos: 36.5,12.5 - parent: 12 - - uid: 12143 - components: - - type: Transform - pos: 35.5,12.5 - parent: 12 - uid: 12144 components: - type: Transform @@ -26851,46 +27007,11 @@ entities: - type: Transform pos: 32.5,12.5 parent: 12 - - uid: 12147 - components: - - type: Transform - pos: 31.5,12.5 - parent: 12 - - uid: 12148 - components: - - type: Transform - pos: 30.5,12.5 - parent: 12 - - uid: 12149 - components: - - type: Transform - pos: 30.5,11.5 - parent: 12 - - uid: 12150 - components: - - type: Transform - pos: 30.5,13.5 - parent: 12 - - uid: 12151 - components: - - type: Transform - pos: 30.5,14.5 - parent: 12 - - uid: 12152 - components: - - type: Transform - pos: 31.5,14.5 - parent: 12 - uid: 12153 components: - type: Transform pos: 32.5,14.5 parent: 12 - - uid: 12154 - components: - - type: Transform - pos: 33.5,14.5 - parent: 12 - uid: 12155 components: - type: Transform @@ -26921,11 +27042,6 @@ entities: - type: Transform pos: 39.5,14.5 parent: 12 - - uid: 12161 - components: - - type: Transform - pos: 40.5,14.5 - parent: 12 - uid: 12162 components: - type: Transform @@ -27246,6 +27362,11 @@ entities: - type: Transform pos: 12.5,22.5 parent: 12 + - uid: 12636 + components: + - type: Transform + pos: 52.5,12.5 + parent: 12 - uid: 12714 components: - type: Transform @@ -34811,6 +34932,31 @@ entities: - type: Transform pos: 8.5,5.5 parent: 12 + - uid: 22298 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 + - uid: 22299 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 22300 + components: + - type: Transform + pos: 32.5,17.5 + parent: 12 + - uid: 22305 + components: + - type: Transform + pos: 31.5,17.5 + parent: 12 + - uid: 22313 + components: + - type: Transform + pos: 38.5,17.5 + parent: 12 - uid: 22519 components: - type: Transform @@ -34836,6 +34982,26 @@ entities: - type: Transform pos: 42.5,43.5 parent: 12 + - uid: 24196 + components: + - type: Transform + pos: -54.5,61.5 + parent: 12 + - uid: 24255 + components: + - type: Transform + pos: -55.5,61.5 + parent: 12 + - uid: 24256 + components: + - type: Transform + pos: -56.5,61.5 + parent: 12 + - uid: 24300 + components: + - type: Transform + pos: -52.5,60.5 + parent: 12 - uid: 24332 components: - type: Transform @@ -34846,6 +35012,26 @@ entities: - type: Transform pos: -28.5,10.5 parent: 12 + - uid: 24340 + components: + - type: Transform + pos: -52.5,59.5 + parent: 12 + - uid: 24456 + components: + - type: Transform + pos: -52.5,58.5 + parent: 12 + - uid: 24642 + components: + - type: Transform + pos: -52.5,57.5 + parent: 12 + - uid: 24651 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 - uid: 24803 components: - type: Transform @@ -38671,11 +38857,6 @@ entities: - type: Transform pos: -52.5,62.5 parent: 12 - - uid: 29744 - components: - - type: Transform - pos: -53.5,62.5 - parent: 12 - uid: 29745 components: - type: Transform @@ -38811,21 +38992,6 @@ entities: - type: Transform pos: -41.5,68.5 parent: 12 - - uid: 29819 - components: - - type: Transform - pos: -53.5,61.5 - parent: 12 - - uid: 29821 - components: - - type: Transform - pos: -54.5,62.5 - parent: 12 - - uid: 29823 - components: - - type: Transform - pos: -53.5,60.5 - parent: 12 - uid: 29856 components: - type: Transform @@ -42671,6 +42837,11 @@ entities: - type: Transform pos: 10.5,17.5 parent: 12 + - uid: 11292 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 - uid: 11313 components: - type: Transform @@ -42891,6 +43062,71 @@ entities: - type: Transform pos: -2.5,34.5 parent: 12 + - uid: 11986 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 + - uid: 11987 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 + - uid: 11988 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 + - uid: 11989 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 + - uid: 11990 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - uid: 11991 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 + - uid: 11992 + components: + - type: Transform + pos: 32.5,12.5 + parent: 12 + - uid: 11993 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 11994 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 + - uid: 11995 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 + - uid: 11996 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 + - uid: 12125 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 12140 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 - uid: 13080 components: - type: Transform @@ -51165,6 +51401,11 @@ entities: - type: Transform pos: -60.5,27.5 parent: 12 + - uid: 6281 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 - uid: 6891 components: - type: Transform @@ -52610,6 +52851,11 @@ entities: - type: Transform pos: -47.5,15.5 parent: 12 + - uid: 11359 + components: + - type: Transform + pos: 32.5,15.5 + parent: 12 - uid: 11450 components: - type: Transform @@ -52630,6 +52876,16 @@ entities: - type: Transform pos: -46.5,53.5 parent: 12 + - uid: 11487 + components: + - type: Transform + pos: -52.5,59.5 + parent: 12 + - uid: 11517 + components: + - type: Transform + pos: 36.5,18.5 + parent: 12 - uid: 11525 components: - type: Transform @@ -52640,6 +52896,21 @@ entities: - type: Transform pos: -23.5,-24.5 parent: 12 + - uid: 12014 + components: + - type: Transform + pos: 31.5,15.5 + parent: 12 + - uid: 12142 + components: + - type: Transform + pos: 37.5,18.5 + parent: 12 + - uid: 12292 + components: + - type: Transform + pos: 39.5,17.5 + parent: 12 - uid: 12346 components: - type: Transform @@ -52865,11 +53136,6 @@ entities: - type: Transform pos: 37.5,19.5 parent: 12 - - uid: 12391 - components: - - type: Transform - pos: 36.5,19.5 - parent: 12 - uid: 12412 components: - type: Transform @@ -52935,6 +53201,11 @@ entities: - type: Transform pos: 50.5,25.5 parent: 12 + - uid: 12640 + components: + - type: Transform + pos: -52.5,58.5 + parent: 12 - uid: 12856 components: - type: Transform @@ -57250,21 +57521,56 @@ entities: - type: Transform pos: 40.5,-5.5 parent: 12 + - uid: 22311 + components: + - type: Transform + pos: 39.5,18.5 + parent: 12 + - uid: 22330 + components: + - type: Transform + pos: -53.5,57.5 + parent: 12 - uid: 22336 components: - type: Transform pos: -53.5,52.5 parent: 12 + - uid: 22338 + components: + - type: Transform + pos: -53.5,56.5 + parent: 12 - uid: 22524 components: - type: Transform pos: -2.5,34.5 parent: 12 + - uid: 23122 + components: + - type: Transform + pos: -53.5,58.5 + parent: 12 - uid: 23123 components: - type: Transform pos: -31.5,70.5 parent: 12 + - uid: 23713 + components: + - type: Transform + pos: -55.5,61.5 + parent: 12 + - uid: 23715 + components: + - type: Transform + pos: -57.5,61.5 + parent: 12 + - uid: 23716 + components: + - type: Transform + pos: -56.5,61.5 + parent: 12 - uid: 23897 components: - type: Transform @@ -57880,11 +58186,6 @@ entities: - type: Transform pos: -29.5,-42.5 parent: 12 - - uid: 25387 - components: - - type: Transform - pos: -53.5,55.5 - parent: 12 - uid: 25388 components: - type: Transform @@ -57910,6 +58211,21 @@ entities: - type: Transform pos: -53.5,51.5 parent: 12 + - uid: 25441 + components: + - type: Transform + pos: 40.5,17.5 + parent: 12 + - uid: 25443 + components: + - type: Transform + pos: 41.5,17.5 + parent: 12 + - uid: 25445 + components: + - type: Transform + pos: 41.5,16.5 + parent: 12 - uid: 25446 components: - type: Transform @@ -57940,6 +58256,46 @@ entities: - type: Transform pos: -27.5,64.5 parent: 12 + - uid: 25471 + components: + - type: Transform + pos: 41.5,15.5 + parent: 12 + - uid: 25472 + components: + - type: Transform + pos: 41.5,14.5 + parent: 12 + - uid: 25473 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 + - uid: 25474 + components: + - type: Transform + pos: 41.5,12.5 + parent: 12 + - uid: 25475 + components: + - type: Transform + pos: 41.5,11.5 + parent: 12 + - uid: 25476 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 + - uid: 25477 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 + - uid: 25478 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 - uid: 25479 components: - type: Transform @@ -57955,16 +58311,46 @@ entities: - type: Transform pos: 80.5,-0.5 parent: 12 + - uid: 25482 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 25483 components: - type: Transform pos: 80.5,2.5 parent: 12 + - uid: 25484 + components: + - type: Transform + pos: 36.5,11.5 + parent: 12 - uid: 25539 components: - type: Transform pos: 12.5,-8.5 parent: 12 + - uid: 25542 + components: + - type: Transform + pos: 35.5,11.5 + parent: 12 + - uid: 25543 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 + - uid: 25544 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - uid: 25545 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 - uid: 25633 components: - type: Transform @@ -58095,6 +58481,21 @@ entities: - type: Transform pos: -30.5,12.5 parent: 12 + - uid: 25833 + components: + - type: Transform + pos: 32.5,12.5 + parent: 12 + - uid: 25837 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 + - uid: 25838 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 - uid: 25870 components: - type: Transform @@ -60240,7 +60641,7 @@ entities: - uid: 13243 components: - type: Transform - pos: 47.56619,32.22632 + pos: 47.5362,32.56305 parent: 12 - uid: 13252 components: @@ -60262,6 +60663,18 @@ entities: - type: Transform pos: 50.394928,18.488558 parent: 12 + - uid: 22262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,36.5 + parent: 12 + - uid: 22267 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,38.5 + parent: 12 - uid: 25974 components: - type: Transform @@ -60292,6 +60705,30 @@ entities: rot: -1.5707963267948966 rad pos: 40.87812,39.779 parent: 12 + - uid: 26093 + components: + - type: Transform + pos: 55.5,39.5 + parent: 12 + - uid: 26094 + components: + - type: Transform + pos: 55.5,35.5 + parent: 12 +- proto: CandleSmall + entities: + - uid: 16858 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,39.5 + parent: 12 + - uid: 22266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,35.5 + parent: 12 - proto: CannabisSeeds entities: - uid: 4189 @@ -62359,12 +62796,24 @@ entities: rot: -1.5707963267948966 rad pos: -37.5,-21.5 parent: 12 + - uid: 12116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,39.5 + parent: 12 - uid: 12806 components: - type: Transform rot: 1.5707963267948966 rad pos: 52.5,34.5 parent: 12 + - uid: 12884 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,38.5 + parent: 12 - uid: 13096 components: - type: Transform @@ -62461,12 +62910,6 @@ entities: rot: 1.5707963267948966 rad pos: 48.5,38.5 parent: 12 - - uid: 13188 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 49.5,39.5 - parent: 12 - uid: 13189 components: - type: Transform @@ -62533,12 +62976,6 @@ entities: rot: 1.5707963267948966 rad pos: 51.5,41.5 parent: 12 - - uid: 13210 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 50.5,38.5 - parent: 12 - uid: 13211 components: - type: Transform @@ -63003,6 +63440,26 @@ entities: rot: -1.5707963267948966 rad pos: -39.5,-53.5 parent: 12 + - uid: 2301 + components: + - type: Transform + pos: 33.5,12.5 + parent: 12 + - uid: 2311 + components: + - type: Transform + pos: 38.5,11.5 + parent: 12 + - uid: 2322 + components: + - type: Transform + pos: 40.5,11.5 + parent: 12 + - uid: 2324 + components: + - type: Transform + pos: 39.5,11.5 + parent: 12 - uid: 2487 components: - type: Transform @@ -63365,6 +63822,30 @@ entities: rot: 1.5707963267948966 rad pos: 9.5,10.5 parent: 12 + - uid: 5556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,14.5 + parent: 12 + - uid: 5559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - uid: 5560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 + - uid: 5561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 - uid: 5805 components: - type: Transform @@ -64283,6 +64764,11 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-9.5 parent: 12 + - uid: 9511 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 - uid: 9528 components: - type: Transform @@ -64634,6 +65120,11 @@ entities: rot: 1.5707963267948966 rad pos: -19.5,68.5 parent: 12 + - uid: 11233 + components: + - type: Transform + pos: 34.5,11.5 + parent: 12 - uid: 11285 components: - type: Transform @@ -64705,6 +65196,11 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,26.5 parent: 12 + - uid: 11333 + components: + - type: Transform + pos: 32.5,14.5 + parent: 12 - uid: 11338 components: - type: Transform @@ -64715,6 +65211,11 @@ entities: - type: Transform pos: -3.5,9.5 parent: 12 + - uid: 11356 + components: + - type: Transform + pos: 32.5,13.5 + parent: 12 - uid: 11357 components: - type: Transform @@ -64802,6 +65303,58 @@ entities: rot: 1.5707963267948966 rad pos: 23.5,62.5 parent: 12 + - uid: 12004 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 + - uid: 12052 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,12.5 + parent: 12 + - uid: 12073 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,13.5 + parent: 12 + - uid: 12075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,13.5 + parent: 12 + - uid: 12086 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,12.5 + parent: 12 + - uid: 12108 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,12.5 + parent: 12 + - uid: 12109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,12.5 + parent: 12 + - uid: 12147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 49.5,12.5 + parent: 12 + - uid: 12161 + components: + - type: Transform + pos: 32.5,16.5 + parent: 12 - uid: 12701 components: - type: Transform @@ -65814,6 +66367,23 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-0.5 parent: 12 + - uid: 22286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - uid: 22291 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,12.5 + parent: 12 + - uid: 22317 + components: + - type: Transform + pos: 41.5,10.5 + parent: 12 - uid: 22470 components: - type: Transform @@ -66494,6 +67064,34 @@ entities: - type: Transform pos: 32.5,17.5 parent: 12 + - uid: 24647 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,12.5 + parent: 12 + - uid: 24648 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,12.5 + parent: 12 + - uid: 24649 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,11.5 + parent: 12 + - uid: 24652 + components: + - type: Transform + pos: 41.5,11.5 + parent: 12 + - uid: 24653 + components: + - type: Transform + pos: 41.5,12.5 + parent: 12 - uid: 24670 components: - type: Transform @@ -68226,6 +68824,11 @@ entities: rot: 3.141592653589793 rad pos: 37.48719,-39.759666 parent: 12 + - uid: 22319 + components: + - type: Transform + pos: 35.647026,45.447662 + parent: 12 - proto: CentrifugeMachineCircuitboard entities: - uid: 13003 @@ -68509,6 +69112,12 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,23.5 parent: 12 + - uid: 12020 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,10.5 + parent: 12 - uid: 12281 components: - type: Transform @@ -68575,12 +69184,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,28.5 parent: 12 - - uid: 13481 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,33.5 - parent: 12 - uid: 13482 components: - type: Transform @@ -70083,10 +70686,10 @@ entities: parent: 12 - proto: ChemistryHotplate entities: - - uid: 2301 + - uid: 12644 components: - type: Transform - pos: -32.5,-43.5 + pos: -32.5,-44.5 parent: 12 - uid: 26234 components: @@ -70141,6 +70744,14 @@ entities: rot: 3.141592653589793 rad pos: -14.476033,37.570534 parent: 12 +- proto: ChurchBell + entities: + - uid: 11461 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,33.5 + parent: 12 - proto: ChurchOrganInstrument entities: - uid: 13110 @@ -70307,11 +70918,6 @@ entities: - type: Transform pos: 5.5,-15.5 parent: 12 - - uid: 8884 - components: - - type: Transform - pos: 55.5,-31.5 - parent: 12 - uid: 9567 components: - type: Transform @@ -70327,6 +70933,21 @@ entities: - type: Transform pos: -26.5,-5.5 parent: 12 + - uid: 11467 + components: + - type: Transform + pos: 76.5,-30.5 + parent: 12 + - uid: 12024 + components: + - type: Transform + pos: 49.5,11.5 + parent: 12 + - uid: 12031 + components: + - type: Transform + pos: 29.5,16.5 + parent: 12 - uid: 13940 components: - type: Transform @@ -70594,6 +71215,11 @@ entities: - type: Transform pos: 47.5,-36.5 parent: 12 + - uid: 12023 + components: + - type: Transform + pos: 49.5,10.5 + parent: 12 - uid: 13942 components: - type: Transform @@ -70836,10 +71462,20 @@ entities: - type: Transform pos: 37.5,-23.5 parent: 12 - - uid: 9511 + - uid: 12021 components: - type: Transform - pos: -52.5,61.5 + pos: 43.5,10.5 + parent: 12 + - uid: 12022 + components: + - type: Transform + pos: 36.5,10.5 + parent: 12 + - uid: 12113 + components: + - type: Transform + pos: -52.5,56.5 parent: 12 - uid: 12246 components: @@ -70916,6 +71552,11 @@ entities: - type: Transform pos: 0.5,54.5 parent: 12 + - uid: 24655 + components: + - type: Transform + pos: 30.5,10.5 + parent: 12 - uid: 24994 components: - type: Transform @@ -71176,6 +71817,11 @@ entities: - type: Transform pos: -26.5,52.5 parent: 12 + - uid: 23712 + components: + - type: Transform + pos: -54.5,63.5 + parent: 12 - uid: 25358 components: - type: Transform @@ -71200,6 +71846,11 @@ entities: - type: Transform pos: -27.5,49.5 parent: 12 + - uid: 23760 + components: + - type: Transform + pos: -52.5,63.5 + parent: 12 - uid: 25345 components: - type: Transform @@ -71223,7 +71874,7 @@ entities: - uid: 2043 components: - type: Transform - pos: -21.5,-19.5 + pos: -18.489782,-21.02709 parent: 12 - uid: 9108 components: @@ -71235,6 +71886,11 @@ entities: - type: Transform pos: -19.5,-3.5 parent: 12 + - uid: 12034 + components: + - type: Transform + pos: 29.404346,45.5935 + parent: 12 - uid: 16475 components: - type: Transform @@ -71540,11 +72196,6 @@ entities: - type: Transform pos: -21.489107,31.8025 parent: 12 - - uid: 23720 - components: - - type: Transform - pos: 33.493465,47.80226 - parent: 12 - proto: ClothingHeadHelmetRiot entities: - uid: 20866 @@ -71907,11 +72558,6 @@ entities: - type: Transform pos: -21.760761,31.400925 parent: 12 - - uid: 23721 - components: - - type: Transform - pos: 33.493465,47.484264 - parent: 12 - proto: ClothingOuterSuitMonkey entities: - uid: 2751 @@ -72545,6 +73191,11 @@ entities: rot: -1.5707963267948966 rad pos: 52.5,22.5 parent: 12 + - uid: 22307 + components: + - type: Transform + pos: 36.5,8.5 + parent: 12 - proto: ComputerCargoBounty entities: - uid: 8469 @@ -72850,10 +73501,11 @@ entities: parent: 12 - proto: ComputerRoboticsControl entities: - - uid: 2072 + - uid: 12138 components: - type: Transform - pos: -25.5,-27.5 + rot: 1.5707963267948966 rad + pos: -26.5,-30.5 parent: 12 - proto: ComputerSalvageExpedition entities: @@ -73507,6 +74159,102 @@ entities: rot: -1.5707963267948966 rad pos: 75.5,-37.5 parent: 12 + - uid: 11462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 75.5,-38.5 + parent: 12 + - uid: 11497 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,16.5 + parent: 12 + - uid: 11498 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,14.5 + parent: 12 + - uid: 11499 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 36.5,14.5 + parent: 12 + - uid: 11507 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 39.5,14.5 + parent: 12 + - uid: 11518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,14.5 + parent: 12 + - uid: 11519 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,14.5 + parent: 12 + - uid: 11528 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 49.5,14.5 + parent: 12 + - uid: 11529 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,14.5 + parent: 12 + - uid: 11531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,14.5 + parent: 12 + - uid: 11532 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,14.5 + parent: 12 + - uid: 11533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,14.5 + parent: 12 + - uid: 11534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,14.5 + parent: 12 + - uid: 11958 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,14.5 + parent: 12 + - uid: 11959 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,16.5 + parent: 12 + - uid: 11960 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,15.5 + parent: 12 - uid: 11972 components: - type: Transform @@ -73533,514 +74281,106 @@ entities: pos: 35.5,15.5 parent: 12 - uid: 11977 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,14.5 - parent: 12 - - uid: 11978 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 36.5,14.5 - parent: 12 - - uid: 11979 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,14.5 - parent: 12 - - uid: 11980 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,14.5 - parent: 12 - - uid: 11981 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 34.5,14.5 - parent: 12 - - uid: 11982 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 33.5,14.5 - parent: 12 - - uid: 11983 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 32.5,14.5 - parent: 12 - - uid: 11985 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,8.5 - parent: 12 - - uid: 11986 components: - type: Transform rot: 3.141592653589793 rad - pos: 37.5,9.5 - parent: 12 - - uid: 11987 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,10.5 - parent: 12 - - uid: 11988 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,14.5 - parent: 12 - - uid: 11989 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,14.5 + pos: 52.5,14.5 parent: 12 - - uid: 11990 + - uid: 12030 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,14.5 + pos: 34.5,14.5 parent: 12 - - uid: 11991 + - uid: 12079 components: - type: Transform rot: 1.5707963267948966 rad - pos: 43.5,14.5 + pos: 52.5,17.5 parent: 12 - - uid: 11992 + - uid: 12081 components: - type: Transform rot: 1.5707963267948966 rad - pos: 44.5,14.5 + pos: 53.5,17.5 parent: 12 - - uid: 11993 + - uid: 12082 components: - type: Transform rot: 1.5707963267948966 rad - pos: 45.5,14.5 + pos: 54.5,17.5 parent: 12 - - uid: 11994 + - uid: 12083 components: - type: Transform rot: 1.5707963267948966 rad - pos: 46.5,14.5 + pos: 55.5,17.5 parent: 12 - - uid: 11995 + - uid: 12123 components: - type: Transform rot: 1.5707963267948966 rad - pos: 47.5,14.5 + pos: 35.5,14.5 parent: 12 - - uid: 11996 + - uid: 12290 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,14.5 + pos: 35.5,6.5 parent: 12 - - uid: 11997 + - uid: 12610 components: - type: Transform rot: 1.5707963267948966 rad - pos: 49.5,14.5 + pos: 56.5,40.5 parent: 12 - - uid: 11998 + - uid: 12611 components: - type: Transform rot: 1.5707963267948966 rad - pos: 50.5,14.5 + pos: 57.5,40.5 parent: 12 - - uid: 11999 + - uid: 12612 components: - type: Transform rot: 1.5707963267948966 rad - pos: 51.5,14.5 - parent: 12 - - uid: 12000 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,14.5 - parent: 12 - - uid: 12001 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,15.5 - parent: 12 - - uid: 12002 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,16.5 - parent: 12 - - uid: 12003 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,11.5 - parent: 12 - - uid: 12004 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,12.5 - parent: 12 - - uid: 12005 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,13.5 - parent: 12 - - uid: 12006 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 30.5,14.5 - parent: 12 - - uid: 12007 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,10.5 - parent: 12 - - uid: 12008 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,10.5 - parent: 12 - - uid: 12009 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,10.5 - parent: 12 - - uid: 12010 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,10.5 - parent: 12 - - uid: 12011 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,9.5 - parent: 12 - - uid: 12012 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,8.5 - parent: 12 - - uid: 12013 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,8.5 - parent: 12 - - uid: 12014 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 35.5,8.5 + pos: 58.5,40.5 parent: 12 - - uid: 12015 + - uid: 12613 components: - type: Transform rot: 1.5707963267948966 rad - pos: 35.5,7.5 + pos: 59.5,40.5 parent: 12 - - uid: 12016 + - uid: 12632 components: - type: Transform rot: 1.5707963267948966 rad - pos: 34.5,7.5 - parent: 12 - - uid: 12017 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 33.5,7.5 - parent: 12 - - uid: 12018 - components: - - type: Transform - rot: -1.5707963267948966 rad pos: 33.5,6.5 parent: 12 - - uid: 12019 + - uid: 12633 components: - type: Transform - rot: -1.5707963267948966 rad + rot: 1.5707963267948966 rad pos: 34.5,6.5 parent: 12 - - uid: 12020 + - uid: 12642 components: - type: Transform rot: -1.5707963267948966 rad - pos: 35.5,6.5 - parent: 12 - - uid: 12021 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 38.5,10.5 - parent: 12 - - uid: 12022 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 39.5,10.5 - parent: 12 - - uid: 12023 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 40.5,10.5 - parent: 12 - - uid: 12024 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,10.5 - parent: 12 - - uid: 12025 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,10.5 - parent: 12 - - uid: 12026 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 43.5,10.5 - parent: 12 - - uid: 12027 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,10.5 - parent: 12 - - uid: 12028 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,10.5 - parent: 12 - - uid: 12029 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 46.5,10.5 - parent: 12 - - uid: 12030 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 47.5,10.5 + pos: 77.5,-38.5 parent: 12 - - uid: 12031 + - uid: 22295 components: - type: Transform rot: 1.5707963267948966 rad - pos: 48.5,10.5 - parent: 12 - - uid: 12032 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,10.5 - parent: 12 - - uid: 12033 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,11.5 - parent: 12 - - uid: 12034 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 49.5,12.5 - parent: 12 - - uid: 12035 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 48.5,12.5 - parent: 12 - - uid: 12036 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,12.5 - parent: 12 - - uid: 12037 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,12.5 - parent: 12 - - uid: 12038 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,12.5 - parent: 12 - - uid: 12039 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 44.5,12.5 - parent: 12 - - uid: 12040 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,12.5 - parent: 12 - - uid: 12041 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 42.5,12.5 - parent: 12 - - uid: 12042 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,12.5 - parent: 12 - - uid: 12043 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,12.5 - parent: 12 - - uid: 12044 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,12.5 + pos: 36.5,6.5 parent: 12 - - uid: 12045 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,12.5 - parent: 12 - - uid: 12046 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,12.5 - parent: 12 - - uid: 12047 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,12.5 - parent: 12 - - uid: 12048 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,12.5 - parent: 12 - - uid: 12049 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,12.5 - parent: 12 - - uid: 12050 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 33.5,12.5 - parent: 12 - - uid: 12051 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,12.5 - parent: 12 - - uid: 12052 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,12.5 - parent: 12 - - uid: 12053 + - uid: 22312 components: - type: Transform rot: 3.141592653589793 rad - pos: 31.5,13.5 - parent: 12 - - uid: 12054 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 31.5,14.5 - parent: 12 - - uid: 12079 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 52.5,17.5 - parent: 12 - - uid: 12081 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 53.5,17.5 - parent: 12 - - uid: 12082 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 54.5,17.5 - parent: 12 - - uid: 12083 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 55.5,17.5 - parent: 12 - - uid: 12610 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 56.5,40.5 - parent: 12 - - uid: 12611 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 57.5,40.5 - parent: 12 - - uid: 12612 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 58.5,40.5 - parent: 12 - - uid: 12613 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 59.5,40.5 + pos: 39.5,15.5 parent: 12 - proto: CrateAirlockKit entities: @@ -74746,11 +75086,6 @@ entities: - type: Transform pos: -21.553009,31.481783 parent: 12 - - uid: 23719 - components: - - type: Transform - pos: 33.38331,47.39865 - parent: 12 - proto: CryogenicSleepUnit entities: - uid: 21356 @@ -75166,6 +75501,11 @@ entities: parent: 12 - proto: DefaultStationBeaconEscapePod entities: + - uid: 509 + components: + - type: Transform + pos: -52.5,57.5 + parent: 12 - uid: 627 components: - type: Transform @@ -75181,11 +75521,6 @@ entities: - type: Transform pos: -16.5,-61.5 parent: 12 - - uid: 6281 - components: - - type: Transform - pos: 34.5,-42.5 - parent: 12 - uid: 7275 components: - type: Transform @@ -75201,11 +75536,6 @@ entities: - type: Transform pos: -22.5,65.5 parent: 12 - - uid: 29722 - components: - - type: Transform - pos: -53.5,61.5 - parent: 12 - proto: DefaultStationBeaconEvac entities: - uid: 7264 @@ -76018,6 +76348,28 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,17.5 parent: 12 + - uid: 12006 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 41.5,12.5 + parent: 12 + - uid: 12007 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - uid: 12008 + components: + - type: Transform + pos: 46.5,14.5 + parent: 12 + - uid: 12139 + components: + - type: Transform + pos: 41.5,19.5 + parent: 12 - uid: 12304 components: - type: Transform @@ -77202,6 +77554,12 @@ entities: rot: -1.5707963267948966 rad pos: -31.5,-42.5 parent: 12 + - uid: 789 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 39.5,19.5 + parent: 12 - uid: 886 components: - type: Transform @@ -77220,6 +77578,18 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-10.5 parent: 12 + - uid: 1084 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - uid: 1086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 40.5,19.5 + parent: 12 - uid: 1864 components: - type: Transform @@ -80011,6 +80381,26 @@ entities: rot: 1.5707963267948966 rad pos: 22.5,-17.5 parent: 12 + - uid: 11492 + components: + - type: Transform + pos: 41.5,18.5 + parent: 12 + - uid: 11493 + components: + - type: Transform + pos: 41.5,17.5 + parent: 12 + - uid: 11495 + components: + - type: Transform + pos: 41.5,15.5 + parent: 12 + - uid: 11496 + components: + - type: Transform + pos: 41.5,14.5 + parent: 12 - uid: 11961 components: - type: Transform @@ -80047,6 +80437,24 @@ entities: rot: 3.141592653589793 rad pos: 39.5,20.5 parent: 12 + - uid: 12002 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 + - uid: 12003 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,13.5 + parent: 12 + - uid: 12099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 - uid: 12295 components: - type: Transform @@ -80101,6 +80509,17 @@ entities: rot: 1.5707963267948966 rad pos: 46.5,17.5 parent: 12 + - uid: 12391 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,14.5 + parent: 12 + - uid: 12635 + components: + - type: Transform + pos: 41.5,16.5 + parent: 12 - uid: 12660 components: - type: Transform @@ -80279,6 +80698,12 @@ entities: rot: 1.5707963267948966 rad pos: 33.5,23.5 parent: 12 + - uid: 13188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 42.5,12.5 + parent: 12 - uid: 13597 components: - type: Transform @@ -82321,6 +82746,17 @@ entities: - type: Transform pos: -25.5,27.5 parent: 12 + - uid: 22275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 38.5,19.5 + parent: 12 + - uid: 22308 + components: + - type: Transform + pos: 41.5,13.5 + parent: 12 - uid: 22418 components: - type: Transform @@ -84914,6 +85350,18 @@ entities: rot: -1.5707963267948966 rad pos: 47.5,17.5 parent: 12 + - uid: 12333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,14.5 + parent: 12 + - uid: 12637 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,19.5 + parent: 12 - uid: 12702 components: - type: Transform @@ -85346,6 +85794,13 @@ entities: - type: Transform pos: -8.5,-24.5 parent: 12 + - uid: 11503 + components: + - type: MetaData + name: disposal unit to waste ejection + - type: Transform + pos: 37.5,19.5 + parent: 12 - uid: 12307 components: - type: Transform @@ -86158,6 +86613,13 @@ entities: - type: Transform pos: 77.61463,48.901142 parent: 12 +- proto: ElectricGuitarInstrument + entities: + - uid: 13481 + components: + - type: Transform + pos: -31.423407,7.5807095 + parent: 12 - proto: EmergencyFunnyOxygenTankFilled entities: - uid: 27129 @@ -87809,6 +88271,21 @@ entities: - type: Transform pos: -21.497362,-25.426727 parent: 12 + - uid: 12149 + components: + - type: Transform + pos: 80.2891,-38.43335 + parent: 12 + - uid: 12293 + components: + - type: Transform + pos: 80.56647,-38.438786 + parent: 12 + - uid: 12921 + components: + - type: Transform + pos: 80.773125,-38.438786 + parent: 12 - uid: 13505 components: - type: Transform @@ -87844,16 +88321,6 @@ entities: - type: Transform pos: 49.010647,46.51752 parent: 12 - - uid: 23711 - components: - - type: Transform - pos: 35.217464,45.578423 - parent: 12 - - uid: 23722 - components: - - type: Transform - pos: 33.741333,47.545418 - parent: 12 - proto: FirelockEdge entities: - uid: 2114 @@ -89264,6 +89731,15 @@ entities: rot: 3.141592653589793 rad pos: 36.5,23.5 parent: 12 + - uid: 12725 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-45.5 + parent: 12 + - type: DeviceNetwork + deviceLists: + - 25448 - uid: 13165 components: - type: Transform @@ -90911,6 +91387,7 @@ entities: deviceLists: - 23930 - 1699 + - 12032 - uid: 23934 components: - type: Transform @@ -90920,6 +91397,7 @@ entities: deviceLists: - 23930 - 1699 + - 12032 - uid: 23935 components: - type: Transform @@ -91276,23 +91754,41 @@ entities: - uid: 4313 components: - type: Transform - pos: 78.68511,-38.520813 + pos: 79.504265,-32.459354 parent: 12 + - type: HandheldLight + toggleActionEntity: 12036 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 12036 + - type: ActionsContainer - uid: 12064 components: - type: Transform - pos: 78.33654,-38.539158 - parent: 12 - - uid: 23759 - components: - - type: Transform - pos: 71.5,42.5 - parent: 12 - - uid: 23760 - components: - - type: Transform - pos: 71.5,55.5 + pos: 78.500854,-32.475662 parent: 12 + - type: HandheldLight + toggleActionEntity: 12037 + - type: ContainerContainer + containers: + cell_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + actions: !type:Container + showEnts: False + occludes: True + ents: + - 12037 + - type: ActionsContainer - proto: FloorDrain entities: - uid: 2303 @@ -93457,6 +93953,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' + - uid: 12047 + components: + - type: Transform + pos: 34.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12671 components: - type: Transform @@ -94200,6 +94703,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 22316 + components: + - type: Transform + pos: 48.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 22552 components: - type: Transform @@ -94732,6 +95242,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24645 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 34.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 25092 components: - type: Transform @@ -96610,6 +97128,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 2072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 2110 components: - type: Transform @@ -102966,6 +103492,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 10693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 45.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 10891 components: - type: Transform @@ -103470,6 +104004,22 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' + - uid: 11426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 11427 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 36.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 11863 components: - type: Transform @@ -103598,6 +104148,70 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 11979 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,9.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12040 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,8.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12041 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 47.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12042 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12048 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 46.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12051 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,14.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,10.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12276 components: - type: Transform @@ -112866,14 +113480,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 23122 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 23125 components: - type: Transform @@ -113667,6 +114273,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 23711 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 35.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 23884 components: - type: Transform @@ -114010,6 +114624,22 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24643 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 24644 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 40.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 24804 components: - type: Transform @@ -114041,13 +114671,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 26070 - components: - - type: Transform - pos: 41.5,11.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 26201 components: - type: Transform @@ -115140,14 +115763,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#990000FF' - - uid: 27736 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 27894 components: - type: Transform @@ -115228,22 +115843,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#FFA500FF' - - uid: 27914 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 40.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27915 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 27916 components: - type: Transform @@ -115268,38 +115867,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 27919 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 32.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27920 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 27921 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 34.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 28216 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 28217 components: - type: Transform @@ -116621,6 +117188,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#990000FF' + - uid: 2309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 32.5,13.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 2637 components: - type: Transform @@ -117168,14 +117743,6 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6154 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,12.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 6751 components: - type: Transform @@ -117716,6 +118283,30 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 12043 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12044 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 12045 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,12.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12265 components: - type: Transform @@ -119050,6 +119641,13 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 23720 + components: + - type: Transform + pos: 37.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 23948 components: - type: Transform @@ -119673,6 +120271,11 @@ entities: targetPressure: 4500 - type: AtmosPipeColor color: '#FF0000FF' + - uid: 12050 + components: + - type: Transform + pos: -45.5,-21.5 + parent: 12 - uid: 13521 components: - type: Transform @@ -119835,13 +120438,6 @@ entities: bodyType: Dynamic - proto: GasValve entities: - - uid: 789 - components: - - type: Transform - pos: -45.5,-21.5 - parent: 12 - - type: GasValve - open: False - uid: 4780 components: - type: Transform @@ -120438,6 +121034,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 12049 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,11.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12735 components: - type: Transform @@ -120491,14 +121095,6 @@ entities: - 2611 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 12884 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 32.5,14.5 - parent: 12 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 12998 components: - type: Transform @@ -121107,6 +121703,14 @@ entities: - 22248 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 22310 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,7.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 22331 components: - type: Transform @@ -121331,6 +121935,14 @@ entities: parent: 12 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 24646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 31.5,13.5 + parent: 12 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 26312 components: - type: Transform @@ -121627,12 +122239,18 @@ entities: rot: 1.5707963267948966 rad pos: -52.5,-27.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 801 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,-23.5 parent: 12 + - type: DeviceNetwork + deviceLists: + - 12032 - uid: 993 components: - type: Transform @@ -123150,15 +123768,15 @@ entities: - type: Transform pos: 28.5,13.5 parent: 12 - - uid: 11532 + - uid: 11535 components: - type: Transform - pos: 47.5,11.5 + pos: 47.5,13.5 parent: 12 - - uid: 11535 + - uid: 11983 components: - type: Transform - pos: 47.5,13.5 + pos: 34.5,10.5 parent: 12 - uid: 12065 components: @@ -123183,6 +123801,12 @@ entities: - type: Transform pos: -3.5,16.5 parent: 12 + - uid: 22309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,11.5 + parent: 12 - uid: 23438 components: - type: Transform @@ -123251,11 +123875,6 @@ entities: - type: Transform pos: -44.677162,44.579002 parent: 12 - - uid: 23712 - components: - - type: Transform - pos: 35.731533,45.223732 - parent: 12 - uid: 29613 components: - type: Transform @@ -123806,12 +124425,6 @@ entities: rot: 3.141592653589793 rad pos: -30.5,0.5 parent: 12 - - uid: 508 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-26.5 - parent: 12 - uid: 520 components: - type: Transform @@ -124243,12 +124856,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-45.5 parent: 12 - - uid: 1061 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-45.5 - parent: 12 - uid: 1062 components: - type: Transform @@ -124261,6 +124868,12 @@ entities: rot: 3.141592653589793 rad pos: -30.5,-45.5 parent: 12 + - uid: 1065 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,56.5 + parent: 12 - uid: 1285 components: - type: Transform @@ -124337,6 +124950,11 @@ entities: rot: 1.5707963267948966 rad pos: -38.5,-11.5 parent: 12 + - uid: 2048 + components: + - type: Transform + pos: 35.5,8.5 + parent: 12 - uid: 2090 components: - type: Transform @@ -125341,11 +125959,6 @@ entities: - type: Transform pos: 46.5,0.5 parent: 12 - - uid: 5038 - components: - - type: Transform - pos: 42.5,-2.5 - parent: 12 - uid: 5079 components: - type: Transform @@ -125465,11 +126078,6 @@ entities: rot: 3.141592653589793 rad pos: -53.5,65.5 parent: 12 - - uid: 5858 - components: - - type: Transform - pos: -54.5,61.5 - parent: 12 - uid: 5878 components: - type: Transform @@ -127339,11 +127947,6 @@ entities: rot: 3.141592653589793 rad pos: 12.5,22.5 parent: 12 - - uid: 11233 - components: - - type: Transform - pos: 44.5,-5.5 - parent: 12 - uid: 11242 components: - type: Transform @@ -127398,11 +128001,6 @@ entities: rot: -1.5707963267948966 rad pos: 25.5,27.5 parent: 12 - - uid: 11292 - components: - - type: Transform - pos: 45.5,-1.5 - parent: 12 - uid: 11301 components: - type: Transform @@ -127415,16 +128013,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-2.5 parent: 12 - - uid: 11356 - components: - - type: Transform - pos: 42.5,5.5 - parent: 12 - - uid: 11359 - components: - - type: Transform - pos: 44.5,5.5 - parent: 12 - uid: 11360 components: - type: Transform @@ -127435,16 +128023,6 @@ entities: - type: Transform pos: 53.5,19.5 parent: 12 - - uid: 11428 - components: - - type: Transform - pos: 32.5,15.5 - parent: 12 - - uid: 11429 - components: - - type: Transform - pos: 33.5,15.5 - parent: 12 - uid: 11448 components: - type: Transform @@ -127462,16 +128040,6 @@ entities: - type: Transform pos: 51.5,11.5 parent: 12 - - uid: 11461 - components: - - type: Transform - pos: 51.5,13.5 - parent: 12 - - uid: 11462 - components: - - type: Transform - pos: 52.5,13.5 - parent: 12 - uid: 11468 components: - type: Transform @@ -127499,16 +128067,6 @@ entities: - type: Transform pos: 37.5,15.5 parent: 12 - - uid: 11511 - components: - - type: Transform - pos: 39.5,15.5 - parent: 12 - - uid: 11512 - components: - - type: Transform - pos: 40.5,15.5 - parent: 12 - uid: 11513 components: - type: Transform @@ -127524,36 +128082,11 @@ entities: - type: Transform pos: 49.5,15.5 parent: 12 - - uid: 11528 - components: - - type: Transform - pos: 46.5,11.5 - parent: 12 - - uid: 11529 - components: - - type: Transform - pos: 46.5,13.5 - parent: 12 - uid: 11530 components: - type: Transform pos: 44.5,13.5 parent: 12 - - uid: 11531 - components: - - type: Transform - pos: 43.5,13.5 - parent: 12 - - uid: 11533 - components: - - type: Transform - pos: 44.5,11.5 - parent: 12 - - uid: 11534 - components: - - type: Transform - pos: 43.5,11.5 - parent: 12 - uid: 11536 components: - type: Transform @@ -127920,6 +128453,17 @@ entities: - type: Transform pos: 59.5,38.5 parent: 12 + - uid: 11982 + components: + - type: Transform + pos: 33.5,13.5 + parent: 12 + - uid: 12055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-45.5 + parent: 12 - uid: 12231 components: - type: Transform @@ -130477,6 +131021,38 @@ entities: rot: 3.141592653589793 rad pos: -34.5,75.5 parent: 12 + - uid: 22276 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 + - uid: 22294 + components: + - type: Transform + pos: 35.5,7.5 + parent: 12 + - uid: 22302 + components: + - type: Transform + pos: 45.5,15.5 + parent: 12 + - uid: 22303 + components: + - type: Transform + pos: 46.5,15.5 + parent: 12 + - uid: 22323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,61.5 + parent: 12 + - uid: 22325 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,58.5 + parent: 12 - uid: 22337 components: - type: Transform @@ -130529,11 +131105,22 @@ entities: rot: 3.141592653589793 rad pos: -30.5,75.5 parent: 12 + - uid: 23759 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,61.5 + parent: 12 - uid: 23887 components: - type: Transform pos: 49.5,9.5 parent: 12 + - uid: 24654 + components: + - type: Transform + pos: 30.5,11.5 + parent: 12 - uid: 24664 components: - type: Transform @@ -130573,16 +131160,6 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,51.5 parent: 12 - - uid: 25441 - components: - - type: Transform - pos: 45.5,0.5 - parent: 12 - - uid: 25443 - components: - - type: Transform - pos: -52.5,60.5 - parent: 12 - uid: 25447 components: - type: Transform @@ -131620,11 +132197,6 @@ entities: - type: Transform pos: -32.5,-45.5 parent: 12 - - uid: 27734 - components: - - type: Transform - pos: -33.5,-45.5 - parent: 12 - uid: 27843 components: - type: Transform @@ -131993,11 +132565,6 @@ entities: - type: Transform pos: 74.5,-6.5 parent: 12 - - uid: 29095 - components: - - type: Transform - pos: 42.5,1.5 - parent: 12 - uid: 29096 components: - type: Transform @@ -132016,33 +132583,11 @@ entities: rot: 3.141592653589793 rad pos: 42.5,2.5 parent: 12 - - uid: 29099 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-5.5 - parent: 12 - - uid: 29104 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-6.5 - parent: 12 - - uid: 29113 - components: - - type: Transform - pos: 44.5,1.5 - parent: 12 - uid: 29148 components: - type: Transform pos: 49.5,-1.5 parent: 12 - - uid: 29160 - components: - - type: Transform - pos: 44.5,-2.5 - parent: 12 - uid: 29210 components: - type: Transform @@ -132284,6 +132829,11 @@ entities: - type: Transform pos: 44.5,-16.5 parent: 12 + - uid: 12027 + components: + - type: Transform + pos: 46.5,13.5 + parent: 12 - uid: 12315 components: - type: Transform @@ -132773,6 +133323,18 @@ entities: - type: Transform pos: 66.5,45.5 parent: 12 + - uid: 12038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,42.5 + parent: 12 + - uid: 12039 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 71.5,55.5 + parent: 12 - uid: 21359 components: - type: Transform @@ -132875,6 +133437,13 @@ entities: - type: Transform pos: 66.5,52.5 parent: 12 +- proto: HydroponicsTrayMachineCircuitboard + entities: + - uid: 12053 + components: + - type: Transform + pos: 35.258915,45.758537 + parent: 12 - proto: InflatableDoor entities: - uid: 28196 @@ -134351,6 +134920,11 @@ entities: parent: 12 - proto: LootSpawnerIndustrialFluff entities: + - uid: 2310 + components: + - type: Transform + pos: 34.5,6.5 + parent: 12 - uid: 2514 components: - type: Transform @@ -134396,11 +134970,6 @@ entities: - type: Transform pos: -12.5,68.5 parent: 12 - - uid: 25837 - components: - - type: Transform - pos: 35.5,12.5 - parent: 12 - uid: 27004 components: - type: Transform @@ -134418,11 +134987,6 @@ entities: - type: Transform pos: 39.5,-19.5 parent: 12 - - uid: 25839 - components: - - type: Transform - pos: 31.5,14.5 - parent: 12 - uid: 25951 components: - type: Transform @@ -134435,11 +134999,6 @@ entities: - type: Transform pos: -22.5,14.5 parent: 12 - - uid: 25840 - components: - - type: Transform - pos: 49.5,10.5 - parent: 12 - proto: LootSpawnerMedicalClassy entities: - uid: 26302 @@ -134484,11 +135043,6 @@ entities: - type: Transform pos: -23.5,50.5 parent: 12 - - uid: 25838 - components: - - type: Transform - pos: 33.5,8.5 - parent: 12 - uid: 25952 components: - type: Transform @@ -134565,17 +135119,17 @@ entities: parent: 12 - proto: MachineCentrifuge entities: - - uid: 2324 + - uid: 12069 components: - type: Transform - pos: -30.5,-43.5 + pos: -30.5,-44.5 parent: 12 - proto: MachineElectrolysisUnit entities: - - uid: 2322 + - uid: 26090 components: - type: Transform - pos: -31.5,-43.5 + pos: -31.5,-44.5 parent: 12 - proto: MachineFrame entities: @@ -134691,6 +135245,11 @@ entities: - type: Transform pos: 35.5,-11.5 parent: 12 + - uid: 11490 + components: + - type: Transform + pos: 37.5,21.5 + parent: 12 - uid: 19550 components: - type: Transform @@ -134793,11 +135352,31 @@ entities: - type: Transform pos: 42.5,58.5 parent: 12 + - uid: 24658 + components: + - type: Transform + pos: 33.5,14.5 + parent: 12 + - uid: 24659 + components: + - type: Transform + pos: 40.5,19.5 + parent: 12 + - uid: 24660 + components: + - type: Transform + pos: 39.5,10.5 + parent: 12 - uid: 24684 components: - type: Transform pos: 23.5,61.5 parent: 12 + - uid: 25058 + components: + - type: Transform + pos: 46.5,13.5 + parent: 12 - uid: 25809 components: - type: Transform @@ -134825,6 +135404,11 @@ entities: parent: 12 - proto: MaintenanceToolSpawner entities: + - uid: 689 + components: + - type: Transform + pos: 37.5,25.5 + parent: 12 - uid: 892 components: - type: Transform @@ -134880,6 +135464,11 @@ entities: - type: Transform pos: 2.5,64.5 parent: 12 + - uid: 24657 + components: + - type: Transform + pos: 30.5,14.5 + parent: 12 - uid: 24685 components: - type: Transform @@ -135144,7 +135733,7 @@ entities: - uid: 23435 components: - type: Transform - pos: 30.520699,45.458954 + pos: 30.665386,45.27058 parent: 12 - uid: 26224 components: @@ -135219,6 +135808,13 @@ entities: - type: Transform pos: 13.5,52.5 parent: 12 +- proto: MicrowaveMachineCircuitboard + entities: + - uid: 12035 + components: + - type: Transform + pos: 34.227154,45.685623 + parent: 12 - proto: Mirror entities: - uid: 60 @@ -135516,6 +136112,11 @@ entities: - type: Transform pos: -20.5,63.5 parent: 12 + - uid: 25839 + components: + - type: Transform + pos: 36.5,12.5 + parent: 12 - uid: 26386 components: - type: Transform @@ -135754,6 +136355,16 @@ entities: - type: Transform pos: -20.5,62.5 parent: 12 + - uid: 25840 + components: + - type: Transform + pos: 37.5,12.5 + parent: 12 + - uid: 26089 + components: + - type: Transform + pos: 30.5,16.5 + parent: 12 - uid: 26385 components: - type: Transform @@ -135809,8 +136420,16 @@ entities: - uid: 23717 components: - type: Transform - pos: 29.491083,45.55183 + pos: 30.165138,45.510162 parent: 12 + - type: GasTank + toggleActionEntity: 12128 + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + ents: + - 12128 - proto: PackPaperRollingFilters entities: - uid: 506 @@ -136576,11 +137195,6 @@ entities: parent: 12 - proto: PlasticFlapsClear entities: - - uid: 514 - components: - - type: Transform - pos: -26.5,-26.5 - parent: 12 - uid: 7468 components: - type: Transform @@ -136591,25 +137205,15 @@ entities: - type: Transform pos: 47.5,-21.5 parent: 12 - - uid: 12056 - components: - - type: Transform - pos: 37.5,9.5 - parent: 12 - - uid: 12057 - components: - - type: Transform - pos: 33.5,9.5 - parent: 12 - - uid: 12058 + - uid: 11511 components: - type: Transform - pos: 35.5,16.5 + pos: 39.5,15.5 parent: 12 - - uid: 12059 + - uid: 22293 components: - type: Transform - pos: 40.5,14.5 + pos: 35.5,6.5 parent: 12 - proto: PlasticFlapsOpaque entities: @@ -136633,6 +137237,16 @@ entities: - type: Transform pos: 41.5,-15.5 parent: 12 + - uid: 12001 + components: + - type: Transform + pos: 34.5,14.5 + parent: 12 + - uid: 12141 + components: + - type: Transform + pos: 35.5,16.5 + parent: 12 - proto: Plunger entities: - uid: 22413 @@ -136745,6 +137359,11 @@ entities: - type: Transform pos: -35.5,-9.5 parent: 12 + - uid: 12025 + components: + - type: Transform + pos: 40.5,10.5 + parent: 12 - uid: 15859 components: - type: Transform @@ -136862,6 +137481,11 @@ entities: - type: Transform pos: 34.5,-30.5 parent: 12 + - uid: 12631 + components: + - type: Transform + pos: 33.5,47.5 + parent: 12 - uid: 16570 components: - type: Transform @@ -136877,11 +137501,6 @@ entities: - type: Transform pos: -24.5,20.5 parent: 12 - - uid: 23701 - components: - - type: Transform - pos: 31.5,47.5 - parent: 12 - uid: 23702 components: - type: Transform @@ -136904,12 +137523,6 @@ entities: parent: 12 - proto: PosterBroken entities: - - uid: 12227 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 45.5,11.5 - parent: 12 - uid: 12228 components: - type: Transform @@ -137847,11 +138460,6 @@ entities: - type: Transform pos: -26.5,-41.5 parent: 12 - - uid: 2478 - components: - - type: Transform - pos: -23.5,-41.5 - parent: 12 - uid: 2479 components: - type: Transform @@ -138739,6 +139347,48 @@ entities: rot: -1.5707963267948966 rad pos: -40.5,-33.5 parent: 12 + - uid: 12016 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,18.5 + parent: 12 + - uid: 12148 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-45.5 + parent: 12 + - uid: 12151 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,55.5 + parent: 12 + - uid: 12152 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,42.5 + parent: 12 + - uid: 12154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 74.5,55.5 + parent: 12 + - uid: 12227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,6.5 + parent: 12 + - uid: 12243 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 37.5,29.5 + parent: 12 - uid: 12507 components: - type: Transform @@ -138788,12 +139438,6 @@ entities: - type: Transform pos: 42.5,31.5 parent: 12 - - uid: 12910 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,27.5 - parent: 12 - uid: 12914 components: - type: Transform @@ -139301,24 +139945,12 @@ entities: - type: Transform pos: 65.5,50.5 parent: 12 - - uid: 16852 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 69.5,42.5 - parent: 12 - uid: 16853 components: - type: Transform rot: 1.5707963267948966 rad pos: 66.5,43.5 parent: 12 - - uid: 16854 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 73.5,42.5 - parent: 12 - uid: 16855 components: - type: Transform @@ -139331,16 +139963,6 @@ entities: rot: -1.5707963267948966 rad pos: 77.5,51.5 parent: 12 - - uid: 16857 - components: - - type: Transform - pos: 73.5,55.5 - parent: 12 - - uid: 16858 - components: - - type: Transform - pos: 69.5,55.5 - parent: 12 - uid: 16859 components: - type: Transform @@ -139376,12 +139998,6 @@ entities: - type: Transform pos: 72.5,45.5 parent: 12 - - uid: 16865 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 66.5,54.5 - parent: 12 - uid: 16866 components: - type: Transform @@ -139843,6 +140459,12 @@ entities: rot: 3.141592653589793 rad pos: -38.5,-24.5 parent: 12 + - uid: 22329 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 68.5,42.5 + parent: 12 - uid: 22499 components: - type: Transform @@ -140448,62 +141070,26 @@ entities: - type: Transform pos: 54.5,-18.5 parent: 12 - - uid: 12069 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 37.5,6.5 - parent: 12 - - uid: 12070 - components: - - type: Transform - pos: 34.5,8.5 - parent: 12 - - uid: 12071 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 41.5,11.5 - parent: 12 - - uid: 12073 + - uid: 12005 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.5,17.5 + pos: 40.5,25.5 parent: 12 - uid: 12074 components: - type: Transform pos: 29.5,17.5 parent: 12 - - uid: 12075 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 30.5,13.5 - parent: 12 - - uid: 12076 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 44.5,20.5 - parent: 12 - - uid: 12077 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,16.5 - parent: 12 - uid: 12078 components: - type: Transform pos: 50.5,20.5 parent: 12 - - uid: 12921 + - uid: 12291 components: - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,24.5 + rot: 1.5707963267948966 rad + pos: 37.5,16.5 parent: 12 - uid: 12922 components: @@ -140517,12 +141103,6 @@ entities: rot: 1.5707963267948966 rad pos: 34.5,27.5 parent: 12 - - uid: 12924 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 37.5,22.5 - parent: 12 - uid: 12925 components: - type: Transform @@ -140772,6 +141352,12 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,54.5 parent: 12 + - uid: 22296 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,11.5 + parent: 12 - uid: 22709 components: - type: Transform @@ -140828,6 +141414,12 @@ entities: rot: 1.5707963267948966 rad pos: -52.5,47.5 parent: 12 + - uid: 25413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 30.5,13.5 + parent: 12 - uid: 25586 components: - type: Transform @@ -141257,12 +141849,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,64.5 parent: 12 - - uid: 16374 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,-19.5 - parent: 12 - uid: 16451 components: - type: Transform @@ -141402,28 +141988,16 @@ entities: - type: Transform pos: 48.5,53.5 parent: 12 - - uid: 23704 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,45.5 - parent: 12 - uid: 23705 components: - type: Transform rot: 1.5707963267948966 rad pos: 35.5,46.5 parent: 12 - - uid: 23706 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,47.5 - parent: 12 - - uid: 23715 + - uid: 24656 components: - type: Transform - pos: 33.5,47.5 + pos: 30.5,14.5 parent: 12 - uid: 25008 components: @@ -141879,17 +142453,17 @@ entities: - type: Transform pos: -29.5,-9.5 parent: 12 - - uid: 12290 + - uid: 12017 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,8.5 + rot: 3.141592653589793 rad + pos: 52.5,13.5 parent: 12 - - uid: 12291 + - uid: 12294 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,7.5 + rot: -1.5707963267948966 rad + pos: 40.5,16.5 parent: 12 - uid: 19862 components: @@ -141897,6 +142471,12 @@ entities: rot: 3.141592653589793 rad pos: 7.5,2.5 parent: 12 + - uid: 22287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,13.5 + parent: 12 - uid: 22594 components: - type: Transform @@ -142498,6 +143078,26 @@ entities: rot: 3.141592653589793 rad pos: -2.5,18.5 parent: 12 + - uid: 24665 + components: + - type: Transform + pos: 34.5,13.5 + parent: 12 + - uid: 25387 + components: + - type: Transform + pos: 34.5,9.5 + parent: 12 + - uid: 25394 + components: + - type: Transform + pos: 49.5,13.5 + parent: 12 + - uid: 25395 + components: + - type: Transform + pos: 36.5,19.5 + parent: 12 - uid: 25713 components: - type: Transform @@ -142540,6 +143140,11 @@ entities: - type: Transform pos: 9.5,-28.5 parent: 12 + - uid: 12628 + components: + - type: Transform + pos: 16.5,54.5 + parent: 12 - uid: 18633 components: - type: Transform @@ -142635,12 +143240,6 @@ entities: rot: 3.141592653589793 rad pos: 32.5,52.5 parent: 12 - - uid: 24300 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,53.5 - parent: 12 - uid: 24301 components: - type: Transform @@ -142836,11 +143435,21 @@ entities: - type: Transform pos: 31.5,10.5 parent: 12 + - uid: 5858 + components: + - type: Transform + pos: 36.5,14.5 + parent: 12 - uid: 6153 components: - type: Transform pos: 48.5,25.5 parent: 12 + - uid: 6154 + components: + - type: Transform + pos: 35.5,17.5 + parent: 12 - uid: 6156 components: - type: Transform @@ -142856,25 +143465,30 @@ entities: - type: Transform pos: 30.5,12.5 parent: 12 - - uid: 13969 + - uid: 13971 components: - type: Transform - pos: 36.5,14.5 + pos: 40.5,12.5 parent: 12 - - uid: 13970 + - uid: 21705 components: - type: Transform - pos: 45.5,10.5 + pos: 16.5,7.5 parent: 12 - - uid: 13971 + - uid: 23706 components: - type: Transform - pos: 40.5,12.5 + pos: -44.5,58.5 parent: 12 - - uid: 21705 + - uid: 23721 components: - type: Transform - pos: 16.5,7.5 + pos: -56.5,62.5 + parent: 12 + - uid: 23722 + components: + - type: Transform + pos: -52.5,60.5 parent: 12 - uid: 23982 components: @@ -143749,11 +144363,17 @@ entities: parent: 12 - proto: Recycler entities: - - uid: 28462 + - uid: 12076 components: - type: Transform rot: -1.5707963267948966 rad - pos: 39.5,14.5 + pos: 38.5,14.5 + parent: 12 + - uid: 26092 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 76.5,-38.5 parent: 12 - proto: ReinforcedPlasmaWindow entities: @@ -144155,10 +144775,11 @@ entities: rot: 3.141592653589793 rad pos: -30.5,0.5 parent: 12 - - uid: 509 + - uid: 510 components: - type: Transform - pos: -23.5,-26.5 + rot: -1.5707963267948966 rad + pos: -53.5,56.5 parent: 12 - uid: 519 components: @@ -144511,12 +145132,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-45.5 parent: 12 - - uid: 1065 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -34.5,-45.5 - parent: 12 - uid: 1066 components: - type: Transform @@ -144632,11 +145247,6 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,-62.5 parent: 12 - - uid: 2448 - components: - - type: Transform - pos: -52.5,60.5 - parent: 12 - uid: 2454 components: - type: Transform @@ -144937,11 +145547,6 @@ entities: - type: Transform pos: 20.5,-33.5 parent: 12 - - uid: 3892 - components: - - type: Transform - pos: 45.5,0.5 - parent: 12 - uid: 4110 components: - type: Transform @@ -146944,11 +147549,6 @@ entities: rot: 3.141592653589793 rad pos: 38.5,-2.5 parent: 12 - - uid: 11333 - components: - - type: Transform - pos: 44.5,-2.5 - parent: 12 - uid: 11336 components: - type: Transform @@ -146960,27 +147560,22 @@ entities: - type: Transform pos: 42.5,4.5 parent: 12 - - uid: 11363 - components: - - type: Transform - pos: 42.5,5.5 - parent: 12 - uid: 11365 components: - type: Transform pos: 44.5,4.5 parent: 12 - - uid: 11366 - components: - - type: Transform - pos: 44.5,5.5 - parent: 12 - uid: 11444 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-44.5 parent: 12 + - uid: 11516 + components: + - type: Transform + pos: 45.5,15.5 + parent: 12 - uid: 11584 components: - type: Transform @@ -147264,6 +147859,11 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,-46.5 parent: 12 + - uid: 12015 + components: + - type: Transform + pos: 46.5,15.5 + parent: 12 - uid: 12224 components: - type: Transform @@ -147601,6 +148201,12 @@ entities: - type: Transform pos: 64.5,59.5 parent: 12 + - uid: 12639 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-45.5 + parent: 12 - uid: 13049 components: - type: Transform @@ -149000,11 +149606,6 @@ entities: rot: -1.5707963267948966 rad pos: -8.5,-7.5 parent: 12 - - uid: 22025 - components: - - type: Transform - pos: -54.5,61.5 - parent: 12 - uid: 22074 components: - type: Transform @@ -149055,6 +149656,22 @@ entities: - type: Transform pos: -10.5,-13.5 parent: 12 + - uid: 22314 + components: + - type: Transform + pos: 44.5,15.5 + parent: 12 + - uid: 22315 + components: + - type: Transform + pos: 43.5,15.5 + parent: 12 + - uid: 22326 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,58.5 + parent: 12 - uid: 22856 components: - type: Transform @@ -149073,10 +149690,17 @@ entities: rot: 3.141592653589793 rad pos: 13.5,22.5 parent: 12 - - uid: 23177 + - uid: 23710 components: - type: Transform - pos: 45.5,-1.5 + rot: -1.5707963267948966 rad + pos: -57.5,61.5 + parent: 12 + - uid: 23896 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,61.5 parent: 12 - uid: 24192 components: @@ -149202,11 +149826,6 @@ entities: rot: 1.5707963267948966 rad pos: -59.5,-26.5 parent: 12 - - uid: 25833 - components: - - type: Transform - pos: 42.5,-2.5 - parent: 12 - uid: 25871 components: - type: Transform @@ -149634,11 +150253,6 @@ entities: rot: 1.5707963267948966 rad pos: -59.5,-25.5 parent: 12 - - uid: 27735 - components: - - type: Transform - pos: -33.5,-45.5 - parent: 12 - uid: 27854 components: - type: Transform @@ -149896,17 +150510,6 @@ entities: rot: 3.141592653589793 rad pos: 50.5,-1.5 parent: 12 - - uid: 29094 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 44.5,-5.5 - parent: 12 - - uid: 29101 - components: - - type: Transform - pos: 42.5,1.5 - parent: 12 - uid: 29102 components: - type: Transform @@ -149919,18 +150522,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-4.5 parent: 12 - - uid: 29105 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-6.5 - parent: 12 - - uid: 29106 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 42.5,-5.5 - parent: 12 - uid: 29107 components: - type: Transform @@ -149943,11 +150534,6 @@ entities: rot: 3.141592653589793 rad pos: 42.5,-3.5 parent: 12 - - uid: 29109 - components: - - type: Transform - pos: 44.5,1.5 - parent: 12 - uid: 29114 components: - type: Transform @@ -150826,6 +151412,11 @@ entities: - type: Transform pos: 59.56368,-40.504784 parent: 12 + - uid: 12121 + components: + - type: Transform + pos: 81.46926,-38.476837 + parent: 12 - uid: 22201 components: - type: Transform @@ -150925,11 +151516,23 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-22.5 parent: 12 + - uid: 11491 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-26.5 + parent: 12 - uid: 14198 components: - type: Transform pos: 41.5,62.5 parent: 12 + - uid: 22278 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-26.5 + parent: 12 - uid: 29667 components: - type: Transform @@ -151653,18 +152256,6 @@ entities: - Pressed: Toggle 9718: - Pressed: Toggle - - uid: 11958 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 38.5,15.5 - parent: 12 - - type: DeviceLinkSource - linkedPorts: - 11960: - - Pressed: Toggle - 11959: - - Pressed: Toggle - uid: 13643 components: - type: Transform @@ -152714,10 +153305,11 @@ entities: parent: 12 - proto: SignRobo entities: - - uid: 2048 + - uid: 12638 components: - type: Transform - pos: -25.5,-26.5 + rot: 3.141592653589793 rad + pos: -23.5,-26.5 parent: 12 - proto: SignSalvage entities: @@ -152982,17 +153574,23 @@ entities: parent: 12 - proto: SmallLight entities: - - uid: 25412 + - uid: 13210 components: - type: Transform rot: -1.5707963267948966 rad - pos: -41.5,65.5 + pos: -52.5,57.5 parent: 12 - - uid: 25413 + - uid: 24254 components: - type: Transform - rot: 3.141592653589793 rad - pos: -52.5,61.5 + rot: 1.5707963267948966 rad + pos: -56.5,61.5 + parent: 12 + - uid: 25412 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -41.5,65.5 parent: 12 - uid: 27184 components: @@ -154379,15 +154977,6 @@ entities: parent: 12 - type: Stack count: 110 -- proto: SpaceCash1000 - entities: - - uid: 17437 - components: - - type: Transform - pos: -31.339855,7.33164 - parent: 12 - - type: Stack - count: 2000 - proto: SpaceVillainArcadeFilled entities: - uid: 12223 @@ -155854,6 +156443,12 @@ entities: parent: 12 - proto: Stool entities: + - uid: 1081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 38.443993,16.6724 + parent: 12 - uid: 2240 components: - type: Transform @@ -155886,192 +156481,12 @@ entities: - type: Transform pos: 44.528526,-31.458952 parent: 12 - - uid: 12333 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 36.498535,7.7225566 - parent: 12 - - uid: 12628 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12629 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12630 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,34.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12631 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,33.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12632 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,38.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12633 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12634 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,40.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12635 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 54.5,41.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12636 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,41.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12637 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,40.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12638 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12639 + - uid: 11438 components: - type: Transform - anchored: True rot: 1.5707963267948966 rad pos: 52.5,38.5 parent: 12 - - type: Physics - bodyType: Static - - uid: 12640 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12641 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12642 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,34.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12643 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 52.5,33.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12644 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,35.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12645 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,36.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12646 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,38.5 - parent: 12 - - type: Physics - bodyType: Static - - uid: 12647 - components: - - type: Transform - anchored: True - rot: 1.5707963267948966 rad - pos: 50.5,39.5 - parent: 12 - - type: Physics - bodyType: Static - uid: 12652 components: - type: Transform @@ -156108,6 +156523,12 @@ entities: - type: Transform pos: 43.618725,30.520502 parent: 12 + - uid: 13970 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,38.5 + parent: 12 - uid: 14949 components: - type: Transform @@ -156132,6 +156553,12 @@ entities: rot: 3.141592653589793 rad pos: 9.5,31.5 parent: 12 + - uid: 16374 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,35.5 + parent: 12 - uid: 16513 components: - type: Transform @@ -156155,6 +156582,30 @@ entities: rot: 1.5707963267948966 rad pos: -14.507796,2.708015 parent: 12 + - uid: 16852 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,34.5 + parent: 12 + - uid: 16854 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,33.5 + parent: 12 + - uid: 16857 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,36.5 + parent: 12 + - uid: 16865 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,39.5 + parent: 12 - uid: 17114 components: - type: Transform @@ -156185,6 +156636,12 @@ entities: rot: 3.141592653589793 rad pos: 5.5,52.5 parent: 12 + - uid: 17437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,40.5 + parent: 12 - uid: 21348 components: - type: Transform @@ -156232,6 +156689,66 @@ entities: rot: 3.141592653589793 rad pos: -31.5,55.5 parent: 12 + - uid: 22025 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,39.5 + parent: 12 + - uid: 22255 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,41.5 + parent: 12 + - uid: 22256 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,40.5 + parent: 12 + - uid: 22257 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,39.5 + parent: 12 + - uid: 22258 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,33.5 + parent: 12 + - uid: 22259 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,38.5 + parent: 12 + - uid: 22260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,34.5 + parent: 12 + - uid: 22263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,36.5 + parent: 12 + - uid: 22264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,35.5 + parent: 12 + - uid: 22265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,41.5 + parent: 12 - uid: 22601 components: - type: Transform @@ -156292,6 +156809,29 @@ entities: rot: 3.141592653589793 rad pos: 8.585284,67.665504 parent: 12 + - uid: 26069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 36.5,7.5 + parent: 12 + - uid: 26070 + components: + - type: Transform + pos: 34.5,7.5 + parent: 12 + - uid: 26091 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,36.5 + parent: 12 + - uid: 26095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,35.5 + parent: 12 - proto: StoolBar entities: - uid: 14997 @@ -157608,6 +158148,17 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Ship construction tool room + - uid: 25396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,18.5 + parent: 12 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Disposals - uid: 28426 components: - type: Transform @@ -158565,6 +159116,11 @@ entities: parent: 12 - proto: Table entities: + - uid: 508 + components: + - type: Transform + pos: 33.5,45.5 + parent: 12 - uid: 1196 components: - type: Transform @@ -158721,21 +159277,6 @@ entities: - type: Transform pos: -6.5,-52.5 parent: 12 - - uid: 2309 - components: - - type: Transform - pos: -32.5,-43.5 - parent: 12 - - uid: 2310 - components: - - type: Transform - pos: -31.5,-43.5 - parent: 12 - - uid: 2311 - components: - - type: Transform - pos: -30.5,-43.5 - parent: 12 - uid: 2472 components: - type: Transform @@ -159170,6 +159711,12 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,24.5 parent: 12 + - uid: 11437 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -32.5,-44.5 + parent: 12 - uid: 11524 components: - type: Transform @@ -159182,6 +159729,12 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,7.5 parent: 12 + - uid: 12120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -31.5,-44.5 + parent: 12 - uid: 12271 components: - type: Transform @@ -159192,6 +159745,17 @@ entities: - type: Transform pos: 46.5,18.5 parent: 12 + - uid: 12629 + components: + - type: Transform + pos: 34.5,45.5 + parent: 12 + - uid: 12643 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-44.5 + parent: 12 - uid: 12717 components: - type: Transform @@ -159867,6 +160431,29 @@ entities: rot: 1.5707963267948966 rad pos: -50.5,36.5 parent: 12 + - uid: 22269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,-41.5 + parent: 12 + - uid: 22270 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-44.5 + parent: 12 + - uid: 22271 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-41.5 + parent: 12 + - uid: 22274 + components: + - type: Transform + pos: 35.5,45.5 + parent: 12 - uid: 22364 components: - type: Transform @@ -160344,25 +160931,6 @@ entities: parent: 12 - proto: TableCounterMetal entities: - - uid: 1084 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -35.5,-44.5 - parent: 12 - - uid: 1086 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-41.5 - parent: 12 - - type: Label - - uid: 1087 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,-41.5 - parent: 12 - uid: 1726 components: - type: Transform @@ -160858,6 +161426,12 @@ entities: rot: 1.5707963267948966 rad pos: -28.5,65.5 parent: 12 + - uid: 12114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-45.5 + parent: 12 - uid: 13789 components: - type: Transform @@ -162010,7 +162584,7 @@ entities: - uid: 23708 components: - type: Transform - pos: 35.758244,47.302937 + pos: 33.80236,45.260162 parent: 12 - proto: ThermomachineHeaterMachineCircuitBoard entities: @@ -162022,7 +162596,7 @@ entities: - uid: 23707 components: - type: Transform - pos: 35.45225,47.645393 + pos: 33.333378,45.58308 parent: 12 - proto: Thruster entities: @@ -162246,6 +162820,11 @@ entities: - type: Transform pos: -7.5195446,10.430849 parent: 12 + - uid: 22272 + components: + - type: Transform + pos: 35.611034,46.54325 + parent: 12 - uid: 23672 components: - type: Transform @@ -162261,7 +162840,7 @@ entities: - uid: 8874 components: - type: Transform - pos: 79.6497,-38.50015 + pos: 79.54402,-38.46053 parent: 12 - uid: 9250 components: @@ -162283,11 +162862,6 @@ entities: - type: Transform pos: 17.45795,68.52991 parent: 12 - - uid: 23713 - components: - - type: Transform - pos: 35.611134,46.38351 - parent: 12 - uid: 23714 components: - type: Transform @@ -162337,6 +162911,11 @@ entities: - type: Transform pos: -22.5,-4.5 parent: 12 + - uid: 11488 + components: + - type: Transform + pos: 35.4026,46.314083 + parent: 12 - uid: 16474 components: - type: Transform @@ -163103,15 +163682,11 @@ entities: - Left: Forward - Middle: Off - Right: Forward - 11980: - - Left: Forward - - Right: Reverse - - Middle: Off - 11979: + 11959: - Left: Forward - Right: Reverse - Middle: Off - 11978: + 11960: - Left: Forward - Right: Reverse - Middle: Off @@ -163119,214 +163694,67 @@ entities: - Left: Forward - Right: Reverse - Middle: Off - 11981: - - Left: Forward - - Right: Reverse - - Middle: Off - 11982: - - Left: Forward - - Right: Reverse - - Middle: Off - 11983: - - Left: Forward - - Right: Reverse - - Middle: Off - 28462: - - Left: Forward - - Right: Reverse - - Middle: Off - 11988: - - Left: Forward - - Right: Reverse - - Middle: Off - 11989: - - Left: Forward - - Right: Reverse - - Middle: Off - 11990: - - Left: Forward - - Right: Reverse - - Middle: Off - 11991: - - Left: Forward - - Right: Reverse - - Middle: Off - 11992: - - Left: Forward - - Right: Reverse - - Middle: Off - 11993: - - Left: Forward - - Right: Reverse - - Middle: Off - 11995: - - Left: Forward - - Right: Reverse - - Middle: Off - 11994: - - Left: Forward - - Right: Reverse - - Middle: Off - 11996: - - Left: Forward - - Right: Reverse - - Middle: Off - 11997: - - Left: Forward - - Right: Reverse - - Middle: Off - 11998: - - Left: Forward - - Right: Reverse - - Middle: Off - 11999: + 11518: - Left: Forward - Right: Reverse - Middle: Off - 12006: + 11519: - Left: Forward - Right: Reverse - Middle: Off - 12005: + 11531: - Left: Forward - Right: Reverse - Middle: Off - 12004: + 11529: - Left: Forward - Right: Reverse - Middle: Off - 12003: - - Left: Forward - - Right: Reverse - - Middle: Off - 12007: - - Left: Forward - - Right: Reverse - - Middle: Off - 12008: - - Left: Forward - - Right: Reverse - - Middle: Off - 12009: - - Left: Forward - - Right: Reverse - - Middle: Off - 12010: - - Left: Forward - - Right: Reverse - - Middle: Off - 12011: - - Left: Forward - - Right: Reverse - - Middle: Off - 12012: - - Left: Forward - - Right: Reverse - - Middle: Off - 12013: - - Left: Forward - - Right: Reverse - - Middle: Off - 12014: - - Left: Forward - - Right: Reverse - - Middle: Off - 12017: - - Left: Forward - - Right: Reverse - - Middle: Off - 12016: - - Left: Forward - - Right: Reverse - - Middle: Off - 12015: - - Left: Forward - - Right: Reverse - - Middle: Off - 12018: - - Left: Forward - - Right: Reverse - - Middle: Off - 12019: - - Left: Forward - - Right: Reverse - - Middle: Off - 12020: - - Left: Forward - - Right: Reverse - - Middle: Off - 12054: - - Left: Forward - - Right: Reverse - - Middle: Off - 12000: - - Left: Forward - - Right: Reverse - - Middle: Off - 12001: - - Left: Forward - - Right: Reverse - - Middle: Off - 12002: - - Left: Forward - - Right: Reverse - - Middle: Off - 2489: - - Left: Forward - - Middle: Off - - Right: Forward - - uid: 12055 - components: - - type: Transform - pos: 38.5,8.5 - parent: 12 - - type: DeviceLinkSource - linkedPorts: - 11985: + 11532: - Left: Forward - Right: Reverse - Middle: Off - 11986: + 11533: - Left: Forward - Right: Reverse - Middle: Off - 11987: + 11534: - Left: Forward - Right: Reverse - Middle: Off - 12021: + 11497: - Left: Forward - Right: Reverse - Middle: Off - 12022: + 11958: - Left: Forward - Right: Reverse - Middle: Off - 12023: + 22312: - Left: Forward - Right: Reverse - Middle: Off - 12024: + 11507: - Left: Forward - Right: Reverse - Middle: Off - 12025: + 12076: - Left: Forward - Right: Reverse - Middle: Off - 12026: + 11498: - Left: Forward - Right: Reverse - Middle: Off - 12027: + 11528: - Left: Forward - Right: Reverse - Middle: Off - 12028: + 11499: - Left: Forward - Right: Reverse - Middle: Off - 12029: + 12123: - Left: Forward - Right: Reverse - Middle: Off @@ -163334,145 +163762,114 @@ entities: - Left: Forward - Right: Reverse - Middle: Off - 12031: - - Left: Forward - - Right: Reverse - - Middle: Off - 12032: - - Left: Forward - - Right: Reverse - - Middle: Off - 12033: - - Left: Forward - - Right: Reverse - - Middle: Off - 12034: - - Left: Forward - - Right: Reverse - - Middle: Off - 12035: - - Left: Forward - - Right: Reverse - - Middle: Off - 12036: - - Left: Forward - - Right: Reverse - - Middle: Off - 12037: - - Left: Forward - - Right: Reverse - - Middle: Off - 12038: - - Left: Forward - - Right: Reverse - - Middle: Off - 12039: - - Left: Forward - - Right: Reverse - - Middle: Off - 12040: - - Left: Forward - - Right: Reverse - - Middle: Off - 12041: - - Left: Forward - - Right: Reverse - - Middle: Off - 12042: - - Left: Forward - - Right: Reverse - - Middle: Off - 12043: - - Left: Forward - - Right: Reverse - - Middle: Off - 12044: - - Left: Forward - - Right: Reverse - - Middle: Off - 12045: - - Left: Forward - - Right: Reverse - - Middle: Off - 12046: + 2489: - Left: Forward - - Right: Reverse - Middle: Off - 12047: + - Right: Forward + - uid: 12085 + components: + - type: Transform + pos: 51.5,16.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12083: - Left: Forward - Right: Reverse - Middle: Off - 12049: + 12082: - Left: Forward - Right: Reverse - Middle: Off - 12048: + 12081: - Left: Forward - Right: Reverse - Middle: Off - 12050: + 12079: - Left: Forward - Right: Reverse - Middle: Off - 12051: + - uid: 12127 + components: + - type: Transform + pos: 78.5,-38.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12642: - Left: Forward - Right: Reverse - Middle: Off - 12052: + 26092: - Left: Forward - Right: Reverse - Middle: Off - 12053: + 11462: - Left: Forward - Right: Reverse - Middle: Off - - uid: 12085 + - uid: 12615 components: - type: Transform - pos: 51.5,16.5 + pos: 56.5,39.5 parent: 12 - type: DeviceLinkSource linkedPorts: - 12083: + 12614: + - Left: Open + - Right: Open + - Middle: Close + 12613: - Left: Forward - Right: Reverse - Middle: Off - 12082: + 12612: - Left: Forward - Right: Reverse - Middle: Off - 12081: + 12611: - Left: Forward - Right: Reverse - Middle: Off - 12079: + 12610: - Left: Forward - Right: Reverse - Middle: Off - - uid: 12615 + - uid: 12924 components: - type: Transform - pos: 56.5,39.5 + pos: -25.5,-28.5 parent: 12 - type: DeviceLinkSource linkedPorts: - 12614: + 11491: - Left: Open - Right: Open - Middle: Close - 12613: + 22278: + - Left: Open + - Right: Open + - Middle: Close + - uid: 13969 + components: + - type: Transform + pos: 33.5,7.5 + parent: 12 + - type: DeviceLinkSource + linkedPorts: + 12632: - Left: Forward - Right: Reverse - Middle: Off - 12612: + 12633: - Left: Forward - Right: Reverse - Middle: Off - 12611: + 12290: - Left: Forward - Right: Reverse - Middle: Off - 12610: + 22295: - Left: Forward - Right: Reverse - Middle: Off @@ -164128,10 +164525,10 @@ entities: parent: 12 - proto: VendingMachineTankDispenserEVA entities: - - uid: 8864 + - uid: 12059 components: - type: Transform - pos: 76.5,-30.5 + pos: 55.5,-31.5 parent: 12 - uid: 16412 components: @@ -164182,15 +164579,15 @@ entities: - type: Transform pos: 43.5,-38.5 parent: 12 - - uid: 23651 + - uid: 12630 components: - type: Transform - pos: 48.5,52.5 + pos: 35.5,47.5 parent: 12 - - uid: 23703 + - uid: 23651 components: - type: Transform - pos: 34.5,45.5 + pos: 48.5,52.5 parent: 12 - proto: VendingMachineViroDrobe entities: @@ -170207,15 +170604,21 @@ entities: - type: Transform pos: 27.5,20.5 parent: 12 - - uid: 11435 + - uid: 11428 components: - type: Transform - pos: 36.5,15.5 + rot: 1.5707963267948966 rad + pos: 36.5,19.5 parent: 12 - - uid: 11437 + - uid: 11429 components: - type: Transform - pos: 36.5,19.5 + pos: 42.5,1.5 + parent: 12 + - uid: 11435 + components: + - type: Transform + pos: 36.5,15.5 parent: 12 - uid: 11439 components: @@ -170623,6 +171026,41 @@ entities: - type: Transform pos: 59.5,37.5 parent: 12 + - uid: 12009 + components: + - type: Transform + pos: 42.5,14.5 + parent: 12 + - uid: 12056 + components: + - type: Transform + pos: 44.5,-2.5 + parent: 12 + - uid: 12058 + components: + - type: Transform + pos: 42.5,5.5 + parent: 12 + - uid: 12100 + components: + - type: Transform + pos: 43.5,13.5 + parent: 12 + - uid: 12110 + components: + - type: Transform + pos: 44.5,1.5 + parent: 12 + - uid: 12117 + components: + - type: Transform + pos: 42.5,-5.5 + parent: 12 + - uid: 12118 + components: + - type: Transform + pos: 42.5,-6.5 + parent: 12 - uid: 12392 components: - type: Transform @@ -170713,6 +171151,21 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,28.5 parent: 12 + - uid: 12641 + components: + - type: Transform + pos: 45.5,0.5 + parent: 12 + - uid: 12646 + components: + - type: Transform + pos: 45.5,-1.5 + parent: 12 + - uid: 12647 + components: + - type: Transform + pos: 42.5,-2.5 + parent: 12 - uid: 12724 components: - type: Transform @@ -170729,6 +171182,16 @@ entities: - type: Transform pos: 31.5,26.5 parent: 12 + - uid: 12868 + components: + - type: Transform + pos: 44.5,5.5 + parent: 12 + - uid: 12910 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 12 - uid: 13197 components: - type: Transform @@ -173461,6 +173924,53 @@ entities: rot: -1.5707963267948966 rad pos: 32.5,-5.5 parent: 12 + - uid: 22279 + components: + - type: Transform + pos: 29.5,-19.5 + parent: 12 + - uid: 22280 + components: + - type: Transform + pos: 29.5,-24.5 + parent: 12 + - uid: 22281 + components: + - type: Transform + pos: 32.5,-24.5 + parent: 12 + - uid: 22282 + components: + - type: Transform + pos: 36.5,-23.5 + parent: 12 + - uid: 22283 + components: + - type: Transform + pos: 36.5,-24.5 + parent: 12 + - uid: 22284 + components: + - type: Transform + pos: 35.5,-24.5 + parent: 12 + - uid: 22290 + components: + - type: Transform + pos: 42.5,13.5 + parent: 12 + - uid: 22324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -53.5,59.5 + parent: 12 + - uid: 22327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,55.5 + parent: 12 - uid: 22339 components: - type: Transform @@ -173496,6 +174006,48 @@ entities: rot: 3.141592653589793 rad pos: 14.5,22.5 parent: 12 + - uid: 23177 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,63.5 + parent: 12 + - uid: 23700 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,59.5 + parent: 12 + - uid: 23701 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -54.5,59.5 + parent: 12 + - uid: 23703 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,63.5 + parent: 12 + - uid: 23704 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -55.5,59.5 + parent: 12 + - uid: 23709 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -56.5,59.5 + parent: 12 + - uid: 23719 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -56.5,63.5 + parent: 12 - uid: 23773 components: - type: Transform @@ -175083,12 +175635,6 @@ entities: rot: -1.5707963267948966 rad pos: 31.5,18.5 parent: 12 - - uid: 11438 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 38.5,15.5 - parent: 12 - uid: 11441 components: - type: Transform @@ -175376,11 +175922,6 @@ entities: rot: 1.5707963267948966 rad pos: -11.5,-20.5 parent: 12 - - uid: 25396 - components: - - type: Transform - pos: -54.5,60.5 - parent: 12 - uid: 25403 components: - type: Transform @@ -175687,11 +176228,6 @@ entities: - type: Transform pos: -18.5,-23.5 parent: 12 - - uid: 510 - components: - - type: Transform - pos: -25.5,-26.5 - parent: 12 - uid: 511 components: - type: Transform @@ -176379,6 +176915,12 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-46.5 parent: 12 + - uid: 2478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,10.5 + parent: 12 - uid: 2596 components: - type: Transform @@ -177073,21 +177615,6 @@ entities: rot: -1.5707963267948966 rad pos: -12.5,-32.5 parent: 12 - - uid: 5554 - components: - - type: Transform - pos: 29.5,-19.5 - parent: 12 - - uid: 5555 - components: - - type: Transform - pos: 29.5,-24.5 - parent: 12 - - uid: 5556 - components: - - type: Transform - pos: 32.5,-24.5 - parent: 12 - uid: 5557 components: - type: Transform @@ -177098,21 +177625,6 @@ entities: - type: Transform pos: -22.5,-17.5 parent: 12 - - uid: 5559 - components: - - type: Transform - pos: 35.5,-24.5 - parent: 12 - - uid: 5560 - components: - - type: Transform - pos: 36.5,-24.5 - parent: 12 - - uid: 5561 - components: - - type: Transform - pos: 36.5,-23.5 - parent: 12 - uid: 5577 components: - type: Transform @@ -177897,6 +178409,11 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,26.5 parent: 12 + - uid: 8884 + components: + - type: Transform + pos: 35.5,10.5 + parent: 12 - uid: 9133 components: - type: Transform @@ -178176,12 +178693,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,18.5 parent: 12 - - uid: 10693 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 36.5,16.5 - parent: 12 - uid: 10694 components: - type: Transform @@ -178321,6 +178832,11 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,20.5 parent: 12 + - uid: 11363 + components: + - type: Transform + pos: 40.5,14.5 + parent: 12 - uid: 11390 components: - type: Transform @@ -178368,11 +178884,6 @@ entities: - type: Transform pos: 48.5,13.5 parent: 12 - - uid: 11467 - components: - - type: Transform - pos: 48.5,11.5 - parent: 12 - uid: 11475 components: - type: Transform @@ -178403,66 +178914,6 @@ entities: - type: Transform pos: 39.5,9.5 parent: 12 - - uid: 11487 - components: - - type: Transform - pos: 42.5,11.5 - parent: 12 - - uid: 11488 - components: - - type: Transform - pos: 42.5,13.5 - parent: 12 - - uid: 11490 - components: - - type: Transform - pos: 45.5,11.5 - parent: 12 - - uid: 11491 - components: - - type: Transform - pos: 40.5,11.5 - parent: 12 - - uid: 11492 - components: - - type: Transform - pos: 39.5,11.5 - parent: 12 - - uid: 11493 - components: - - type: Transform - pos: 38.5,11.5 - parent: 12 - - uid: 11495 - components: - - type: Transform - pos: 36.5,11.5 - parent: 12 - - uid: 11496 - components: - - type: Transform - pos: 35.5,11.5 - parent: 12 - - uid: 11497 - components: - - type: Transform - pos: 34.5,11.5 - parent: 12 - - uid: 11498 - components: - - type: Transform - pos: 33.5,11.5 - parent: 12 - - uid: 11499 - components: - - type: Transform - pos: 32.5,11.5 - parent: 12 - - uid: 11503 - components: - - type: Transform - pos: 33.5,13.5 - parent: 12 - uid: 11504 components: - type: Transform @@ -178478,11 +178929,6 @@ entities: - type: Transform pos: 36.5,13.5 parent: 12 - - uid: 11507 - components: - - type: Transform - pos: 37.5,13.5 - parent: 12 - uid: 11508 components: - type: Transform @@ -179135,6 +179581,17 @@ entities: - type: Transform pos: 41.5,33.5 parent: 12 + - uid: 12000 + components: + - type: Transform + pos: 40.5,15.5 + parent: 12 + - uid: 12054 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-26.5 + parent: 12 - uid: 12066 components: - type: Transform @@ -181596,11 +182053,6 @@ entities: - type: Transform pos: 51.5,9.5 parent: 12 - - uid: 25471 - components: - - type: Transform - pos: 46.5,15.5 - parent: 12 - uid: 25492 components: - type: Transform @@ -181738,11 +182190,6 @@ entities: rot: 3.141592653589793 rad pos: -43.5,61.5 parent: 12 - - uid: 26542 - components: - - type: Transform - pos: 45.5,15.5 - parent: 12 - uid: 26939 components: - type: Transform @@ -181910,12 +182357,6 @@ entities: - type: Transform pos: -48.5,66.5 parent: 12 - - uid: 11400 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 37.5,11.5 - parent: 12 - uid: 11520 components: - type: Transform @@ -181928,10 +182369,22 @@ entities: rot: -1.5707963267948966 rad pos: -19.5,34.5 parent: 12 - - uid: 12868 + - uid: 11978 components: - type: Transform - pos: 32.5,13.5 + pos: 33.5,11.5 + parent: 12 + - uid: 12018 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 42.5,11.5 + parent: 12 + - uid: 12071 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 33.5,15.5 parent: 12 - uid: 12953 components: @@ -182194,12 +182647,33 @@ entities: rot: -1.5707963267948966 rad pos: 10.5,64.5 parent: 12 + - uid: 22273 + components: + - type: Transform + pos: 32.5,11.5 + parent: 12 + - uid: 22285 + components: + - type: Transform + pos: 37.5,13.5 + parent: 12 + - uid: 22301 + components: + - type: Transform + pos: 36.5,16.5 + parent: 12 - uid: 23894 components: - type: Transform rot: -1.5707963267948966 rad pos: 41.5,63.5 parent: 12 + - uid: 24650 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 35.5,12.5 + parent: 12 - uid: 25591 components: - type: Transform @@ -182647,11 +183121,6 @@ entities: - type: Transform pos: 53.5,-10.5 parent: 12 - - uid: 12725 - components: - - type: Transform - pos: 49.5,32.5 - parent: 12 - uid: 16645 components: - type: Transform @@ -182677,6 +183146,11 @@ entities: - type: Transform pos: -6.5,58.5 parent: 12 + - uid: 22306 + components: + - type: Transform + pos: 49.5,32.5 + parent: 12 - uid: 24169 components: - type: Transform @@ -183053,15 +183527,15 @@ entities: - type: Transform pos: 43.5,47.5 parent: 12 - - uid: 12243 + - uid: 12026 components: - type: Transform - pos: 50.5,16.5 + pos: 46.5,10.5 parent: 12 - - uid: 12294 + - uid: 12070 components: - type: Transform - pos: 32.5,16.5 + pos: 33.5,17.5 parent: 12 - uid: 16463 components: @@ -183113,11 +183587,6 @@ entities: - type: Transform pos: 48.5,-32.5 parent: 12 - - uid: 25058 - components: - - type: Transform - pos: 52.5,11.5 - parent: 12 - uid: 26803 components: - type: Transform @@ -183443,6 +183912,11 @@ entities: rot: 3.141592653589793 rad pos: 52.5,-30.5 parent: 12 + - uid: 12126 + components: + - type: Transform + pos: -33.5,-45.5 + parent: 12 - uid: 12234 components: - type: Transform @@ -183617,6 +184091,12 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,-43.5 parent: 12 + - uid: 22268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,-45.5 + parent: 12 - proto: WindoorSecureCommandLocked entities: - uid: 6 @@ -184157,16 +184637,6 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,14.5 parent: 12 - - uid: 11426 - components: - - type: Transform - pos: 32.5,15.5 - parent: 12 - - uid: 11427 - components: - - type: Transform - pos: 33.5,15.5 - parent: 12 - uid: 11485 components: - type: Transform @@ -184182,26 +184652,6 @@ entities: - type: Transform pos: 37.5,15.5 parent: 12 - - uid: 11516 - components: - - type: Transform - pos: 39.5,15.5 - parent: 12 - - uid: 11517 - components: - - type: Transform - pos: 40.5,15.5 - parent: 12 - - uid: 11518 - components: - - type: Transform - pos: 43.5,15.5 - parent: 12 - - uid: 11519 - components: - - type: Transform - pos: 44.5,15.5 - parent: 12 - uid: 11538 components: - type: Transform @@ -184282,6 +184732,11 @@ entities: - type: Transform pos: 41.5,35.5 parent: 12 + - uid: 11997 + components: + - type: Transform + pos: 38.5,15.5 + parent: 12 - uid: 12524 components: - type: Transform @@ -184802,6 +185257,16 @@ entities: - type: Transform pos: 53.5,10.5 parent: 12 + - uid: 22292 + components: + - type: Transform + pos: 35.5,7.5 + parent: 12 + - uid: 22297 + components: + - type: Transform + pos: 35.5,8.5 + parent: 12 - uid: 22688 components: - type: Transform @@ -185516,18 +185981,6 @@ entities: - type: Transform pos: 46.5,-12.5 parent: 12 - - uid: 12292 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,12.5 - parent: 12 - - uid: 12293 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 31.5,13.5 - parent: 12 - uid: 12326 components: - type: Transform @@ -186124,18 +186577,6 @@ entities: - type: Transform pos: 44.512337,53.244392 parent: 12 - - uid: 23709 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.45002,45.578423 - parent: 12 - - uid: 23710 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 35.596897,45.394962 - parent: 12 - uid: 27207 components: - type: Transform From 2e1b486e8bb880dd14b563954fb638acf67fc4c8 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:39:48 +1000 Subject: [PATCH 09/54] Add BUI ctor tests (#31463) 5 lines of eaten iocmanager.injectdependencies led to this. --- .../Controls/ProgressTextureRect.cs | 7 ++- .../Tests/UserInterface/UiControlTest.cs | 58 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs diff --git a/Content.Client/UserInterface/Controls/ProgressTextureRect.cs b/Content.Client/UserInterface/Controls/ProgressTextureRect.cs index 2b8d93a5d4..8454ae0892 100644 --- a/Content.Client/UserInterface/Controls/ProgressTextureRect.cs +++ b/Content.Client/UserInterface/Controls/ProgressTextureRect.cs @@ -9,7 +9,12 @@ public sealed class ProgressTextureRect : TextureRect { public float Progress; - private readonly ProgressColorSystem _progressColor = IoCManager.Resolve().System(); + private readonly ProgressColorSystem _progressColor; + + public ProgressTextureRect() + { + _progressColor = IoCManager.Resolve().System(); + } protected override void Draw(DrawingHandleScreen handle) { diff --git a/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs b/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs new file mode 100644 index 0000000000..c8378bb661 --- /dev/null +++ b/Content.IntegrationTests/Tests/UserInterface/UiControlTest.cs @@ -0,0 +1,58 @@ +using System.Linq; +using Content.Client.Chat.UI; +using Content.Client.LateJoin; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.ContentPack; +using Robust.Shared.IoC; +using Robust.Shared.Reflection; + +namespace Content.IntegrationTests.Tests.UserInterface; + +[TestFixture] +public sealed class UiControlTest +{ + // You should not be adding to this. + private Type[] _ignored = new Type[] + { + typeof(EmotesMenu), + typeof(LateJoinGui), + }; + + /// + /// Tests that all windows can be instantiated successfully. + /// + [Test] + public async Task TestWindows() + { + var pair = await PoolManager.GetServerClient(new PoolSettings() + { + Connected = true, + }); + var activator = pair.Client.ResolveDependency(); + var refManager = pair.Client.ResolveDependency(); + var loader = pair.Client.ResolveDependency(); + + await pair.Client.WaitAssertion(() => + { + foreach (var type in refManager.GetAllChildren(typeof(BaseWindow))) + { + if (type.IsAbstract || _ignored.Contains(type)) + continue; + + if (!loader.IsContentType(type)) + continue; + + // If it has no empty ctor then skip it instead of figuring out what args it needs. + var ctor = type.GetConstructor(Type.EmptyTypes); + + if (ctor == null) + continue; + + // Don't inject because the control themselves have to do it. + activator.CreateInstance(type, oneOff: true, inject: false); + } + }); + + await pair.CleanReturnAsync(); + } +} From 83ec96745563e129020adc71942500ba911352ce Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:40:14 +1000 Subject: [PATCH 10/54] Predict EmitSoundOnUIOpen (#31464) * Predict EmitSoundOnUIOpen BUI prediction led to this moment. * unforky --- .../Sound/Components/EmitSoundOnUIOpenComponent.cs | 12 ------------ Content.Server/Sound/EmitSoundSystem.cs | 6 ------ .../Sound/Components/EmitSoundOnUIOpenComponent.cs | 11 +++++++++++ Content.Shared/Sound/SharedEmitSoundSystem.cs | 8 +++++++- 4 files changed, 18 insertions(+), 19 deletions(-) delete mode 100644 Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs create mode 100644 Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs diff --git a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs deleted file mode 100644 index 44e83b0e79..0000000000 --- a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Content.Shared.Sound.Components; - -namespace Content.Server.Sound.Components -{ - /// - /// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent - /// - [RegisterComponent] - public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent - { - } -} diff --git a/Content.Server/Sound/EmitSoundSystem.cs b/Content.Server/Sound/EmitSoundSystem.cs index fc10d951e7..9d7e8496c3 100644 --- a/Content.Server/Sound/EmitSoundSystem.cs +++ b/Content.Server/Sound/EmitSoundSystem.cs @@ -39,15 +39,9 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(HandleEmitSoundOnTrigger); - SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(HandleSpamEmitSoundMapInit); } - private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) - { - TryEmitSound(uid, component, args.User, false); - } - private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args) { TryEmitSound(uid, component, args.User, false); diff --git a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs new file mode 100644 index 0000000000..a979a6ec50 --- /dev/null +++ b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Sound.Components; + +/// +/// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent +{ +} diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index efc18abaa0..8733edf485 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Audio; using Content.Shared.Hands; -using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Maps; @@ -8,6 +7,7 @@ using Content.Shared.Popups; using Content.Shared.Sound.Components; using Content.Shared.Throwing; +using Content.Shared.UserInterface; using Content.Shared.Whitelist; using JetBrains.Annotations; using Robust.Shared.Audio; @@ -48,12 +48,18 @@ public override void Initialize() SubscribeLocalEvent(OnEmitSoundOnPickup); SubscribeLocalEvent(OnEmitSoundOnDrop); SubscribeLocalEvent(OnEmitSoundOnInteractUsing); + SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(OnEmitSoundOnCollide); SubscribeLocalEvent(OnMobState); } + private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) + { + TryEmitSound(uid, component, args.User); + } + private void OnMobState(Entity entity, ref MobStateChangedEvent args) { // Disable this component rather than removing it because it can be brought back to life. From 569b08162cf0d08e439ebb78eb1b122862f93692 Mon Sep 17 00:00:00 2001 From: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com> Date: Mon, 26 Aug 2024 02:09:48 -0700 Subject: [PATCH 11/54] Bots now make sound when they speak (#31471) fixes 31454 --- Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 9ba0fdd873..eae5114883 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -103,6 +103,7 @@ - Robotics - type: Speech speechVerb: Robotic + speechSounds: Pai #couldn't decide if this should be borg or pai sounds so I flipped a coin. - type: TypingIndicator proto: robot - type: ZombieImmune From 93829ec753aa4f21116e5f6693d0aa3d9820f8f8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 26 Aug 2024 09:10:57 +0000 Subject: [PATCH 12/54] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 747f148443..dae9b617ec 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: robertGN - changes: - - message: Syndicate communications consoles can no longer recall the emergency - shuttle. - type: Fix - id: 6714 - time: '2024-06-12T13:32:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28803 - author: deltanedas changes: - message: Fixed opening the PDA UI sometimes breaking. @@ -3866,3 +3858,10 @@ id: 7213 time: '2024-08-26T02:46:16.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30668 +- author: Moomoobeef + changes: + - message: Silicons like medbots, janibots, and honkbots now make sound when speaking. + type: Fix + id: 7214 + time: '2024-08-26T09:09:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31471 From 982a172ad65a88818ebdbf3e6528d7e1145c9a67 Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Mon, 26 Aug 2024 15:02:57 +0300 Subject: [PATCH 13/54] Change the science radio channel color (#31319) * Change the science radio channel color * This one looks better --- Resources/Prototypes/radio_channels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/radio_channels.yml b/Resources/Prototypes/radio_channels.yml index 1c69bbe7e6..9cb8bf4daa 100644 --- a/Resources/Prototypes/radio_channels.yml +++ b/Resources/Prototypes/radio_channels.yml @@ -39,7 +39,7 @@ name: chat-radio-science keycode: 'n' frequency: 1351 - color: "#b05efa" + color: "#cd7ccd" - type: radioChannel id: Security From 84caaec67400a196362c684ac2dff3d93b93b9b0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 26 Aug 2024 12:04:03 +0000 Subject: [PATCH 14/54] 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 dae9b617ec..c0db504d06 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: deltanedas - changes: - - message: Fixed opening the PDA UI sometimes breaking. - type: Fix - id: 6715 - time: '2024-06-12T18:10:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28896 - author: notafet changes: - message: The singularity is now safe to operate up to PA level 3. @@ -3865,3 +3858,10 @@ id: 7214 time: '2024-08-26T09:09:49.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31471 +- author: Winkarst-cpu + changes: + - message: The color of the science radio channel was changed. + type: Tweak + id: 7215 + time: '2024-08-26T12:02:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31319 From 2d85b4e7e9d5d37f4ebd3c4ffd249dc6381efad6 Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Mon, 26 Aug 2024 15:15:33 +0300 Subject: [PATCH 15/54] Move OnGhostAttempt to GhostSystem (#31445) * Move OnGhostAttempt to GhostSystem * Remove unused dependencies and sort them --- .../Bed/Cryostorage/CryostorageSystem.cs | 14 +- Content.Server/Body/Systems/BodySystem.cs | 6 +- Content.Server/Chat/SuicideSystem.cs | 12 +- .../Clothing/Systems/CursedMaskSystem.cs | 6 +- .../GameTicking/GameTicker.GamePreset.cs | 118 +---------------- Content.Server/Ghost/GhostCommand.cs | 3 +- Content.Server/Ghost/GhostSystem.cs | 121 +++++++++++++++++- .../Materials/MaterialReclaimerSystem.cs | 22 ++-- Content.Server/Mind/MindSystem.cs | 4 +- Content.Server/Morgue/CrematoriumSystem.cs | 8 +- 10 files changed, 156 insertions(+), 158 deletions(-) diff --git a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs index 1369fa20f1..dd89ba2f72 100644 --- a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs +++ b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs @@ -1,17 +1,14 @@ -using System.Globalization; -using System.Linq; using Content.Server.Chat.Managers; +using Content.Server.Chat.Systems; using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Hands.Systems; using Content.Server.Inventory; using Content.Server.Popups; -using Content.Server.Chat.Systems; using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Server.StationRecords; using Content.Server.StationRecords.Systems; -using Content.Shared.StationRecords; -using Content.Shared.UserInterface; using Content.Shared.Access.Systems; using Content.Shared.Bed.Cryostorage; using Content.Shared.Chat; @@ -19,6 +16,8 @@ using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Mind.Components; +using Content.Shared.StationRecords; +using Content.Shared.UserInterface; using Robust.Server.Audio; using Robust.Server.Containers; using Robust.Server.GameObjects; @@ -27,6 +26,7 @@ using Robust.Shared.Enums; using Robust.Shared.Network; using Robust.Shared.Player; +using System.Globalization; namespace Content.Server.Bed.Cryostorage; @@ -40,7 +40,7 @@ public sealed class CryostorageSystem : SharedCryostorageSystem [Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly ClimbSystem _climb = default!; [Dependency] private readonly ContainerSystem _container = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly HandsSystem _hands = default!; [Dependency] private readonly ServerInventorySystem _inventory = default!; [Dependency] private readonly PopupSystem _popup = default!; @@ -210,7 +210,7 @@ public void HandleEnterCryostorage(Entity ent, Ne if (userId != null && Mind.TryGetMind(userId.Value, out var mind) && HasComp(mind.Value.Comp.CurrentEntity)) { - _gameTicker.OnGhostAttempt(mind.Value, false); + _ghostSystem.OnGhostAttempt(mind.Value, false); } } diff --git a/Content.Server/Body/Systems/BodySystem.cs b/Content.Server/Body/Systems/BodySystem.cs index bd5edb0ea5..4279f3ed2b 100644 --- a/Content.Server/Body/Systems/BodySystem.cs +++ b/Content.Server/Body/Systems/BodySystem.cs @@ -1,5 +1,5 @@ using Content.Server.Body.Components; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Humanoid; using Content.Shared.Body.Components; using Content.Shared.Body.Part; @@ -17,7 +17,7 @@ namespace Content.Server.Body.Systems; public sealed class BodySystem : SharedBodySystem { - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -43,7 +43,7 @@ private void OnRelayMoveInput(Entity ent, ref MoveInputEvent args if (_mobState.IsDead(ent) && _mindSystem.TryGetMind(ent, out var mindId, out var mind)) { mind.TimeOfDeath ??= _gameTiming.RealTime; - _ticker.OnGhostAttempt(mindId, canReturnGlobal: true, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, canReturnGlobal: true, mind: mind); } } diff --git a/Content.Server/Chat/SuicideSystem.cs b/Content.Server/Chat/SuicideSystem.cs index 884292b0fa..69d87472fb 100644 --- a/Content.Server/Chat/SuicideSystem.cs +++ b/Content.Server/Chat/SuicideSystem.cs @@ -1,18 +1,18 @@ -using Content.Server.GameTicking; +using Content.Server.Ghost; +using Content.Shared.Administration.Logs; +using Content.Shared.Chat; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Interaction.Events; using Content.Shared.Item; using Content.Shared.Mind; +using Content.Shared.Mind.Components; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; using Content.Shared.Tag; using Robust.Shared.Player; -using Content.Shared.Administration.Logs; -using Content.Shared.Chat; -using Content.Shared.Mind.Components; namespace Content.Server.Chat; @@ -23,7 +23,7 @@ public sealed class SuicideSystem : EntitySystem [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly SharedSuicideSystem _suicide = default!; public override void Initialize() @@ -82,7 +82,7 @@ private void OnSuicideGhost(Entity victim, ref SuicideGh if (_tagSystem.HasTag(victim, "CannotSuicide")) args.CanReturnToBody = true; - if (_gameTicker.OnGhostAttempt(victim.Comp.Mind.Value, args.CanReturnToBody, mind: mindComponent)) + if (_ghostSystem.OnGhostAttempt(victim.Comp.Mind.Value, args.CanReturnToBody, mind: mindComponent)) args.Handled = true; } diff --git a/Content.Server/Clothing/Systems/CursedMaskSystem.cs b/Content.Server/Clothing/Systems/CursedMaskSystem.cs index 2045ff5ccd..825e85e2c6 100644 --- a/Content.Server/Clothing/Systems/CursedMaskSystem.cs +++ b/Content.Server/Clothing/Systems/CursedMaskSystem.cs @@ -1,5 +1,5 @@ using Content.Server.Administration.Logs; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Mind; using Content.Server.NPC; using Content.Server.NPC.HTN; @@ -21,7 +21,7 @@ namespace Content.Server.Clothing.Systems; public sealed class CursedMaskSystem : SharedCursedMaskSystem { [Dependency] private readonly IAdminLogManager _adminLog = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly HTNSystem _htn = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly NPCSystem _npc = default!; @@ -39,7 +39,7 @@ protected override void TryTakeover(Entity ent, EntityUid w if (TryComp(wearer, out var actor) && actor.PlayerSession.GetMind() is { } mind) { var session = actor.PlayerSession; - if (!_ticker.OnGhostAttempt(mind, false)) + if (!_ghostSystem.OnGhostAttempt(mind, false)) return; ent.Comp.StolenMind = mind; diff --git a/Content.Server/GameTicking/GameTicker.GamePreset.cs b/Content.Server/GameTicking/GameTicker.GamePreset.cs index 5a2b375dd6..5642e84f90 100644 --- a/Content.Server/GameTicking/GameTicker.GamePreset.cs +++ b/Content.Server/GameTicking/GameTicker.GamePreset.cs @@ -1,27 +1,16 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Threading.Tasks; using Content.Server.GameTicking.Presets; using Content.Server.Maps; using Content.Shared.CCVar; -using Content.Shared.Damage; -using Content.Shared.Damage.Prototypes; -using Content.Shared.Database; -using Content.Shared.FixedPoint; -using Content.Shared.Ghost; -using Content.Shared.Mind; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using JetBrains.Annotations; using Robust.Shared.Player; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading.Tasks; namespace Content.Server.GameTicking { public sealed partial class GameTicker { - [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; - public const float PresetFailedCooldownIncrease = 30f; /// @@ -198,94 +187,6 @@ public void StartGamePresetRules() } } - public bool OnGhostAttempt(EntityUid mindId, bool canReturnGlobal, bool viaCommand = false, MindComponent? mind = null) - { - if (!Resolve(mindId, ref mind)) - return false; - - var playerEntity = mind.CurrentEntity; - - if (playerEntity != null && viaCommand) - _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} is attempting to ghost via command"); - - var handleEv = new GhostAttemptHandleEvent(mind, canReturnGlobal); - RaiseLocalEvent(handleEv); - - // Something else has handled the ghost attempt for us! We return its result. - if (handleEv.Handled) - return handleEv.Result; - - if (mind.PreventGhosting) - { - if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts - { - _chatManager.DispatchServerMessage(mind.Session, Loc.GetString("comp-mind-ghosting-prevented"), - true); - } - - return false; - } - - if (TryComp(playerEntity, out var comp) && !comp.CanGhostInteract) - return false; - - if (mind.VisitingEntity != default) - { - _mind.UnVisit(mindId, mind: mind); - } - - var position = Exists(playerEntity) - ? Transform(playerEntity.Value).Coordinates - : GetObserverSpawnPoint(); - - if (position == default) - return false; - - // Ok, so, this is the master place for the logic for if ghosting is "too cheaty" to allow returning. - // There's no reason at this time to move it to any other place, especially given that the 'side effects required' situations would also have to be moved. - // + If CharacterDeadPhysically applies, we're physically dead. Therefore, ghosting OK, and we can return (this is critical for gibbing) - // Note that we could theoretically be ICly dead and still physically alive and vice versa. - // (For example, a zombie could be dead ICly, but may retain memories and is definitely physically active) - // + If we're in a mob that is critical, and we're supposed to be able to return if possible, - // we're succumbing - the mob is killed. Therefore, character is dead. Ghosting OK. - // (If the mob survives, that's a bug. Ghosting is kept regardless.) - var canReturn = canReturnGlobal && _mind.IsCharacterDeadPhysically(mind); - - if (_configurationManager.GetCVar(CCVars.GhostKillCrit) && - canReturnGlobal && - TryComp(playerEntity, out MobStateComponent? mobState)) - { - if (_mobState.IsCritical(playerEntity.Value, mobState)) - { - canReturn = true; - - //todo: what if they dont breathe lol - //cry deeply - - FixedPoint2 dealtDamage = 200; - if (TryComp(playerEntity, out var damageable) - && TryComp(playerEntity, out var thresholds)) - { - var playerDeadThreshold = _mobThresholdSystem.GetThresholdForState(playerEntity.Value, MobState.Dead, thresholds); - dealtDamage = playerDeadThreshold - damageable.TotalDamage; - } - - DamageSpecifier damage = new(_prototypeManager.Index("Asphyxiation"), dealtDamage); - - _damageable.TryChangeDamage(playerEntity, damage, true); - } - } - - var ghost = _ghost.SpawnGhost((mindId, mind), position, canReturn); - if (ghost == null) - return false; - - if (playerEntity != null) - _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} ghosted{(!canReturn ? " (non-returnable)" : "")}"); - - return true; - } - private void IncrementRoundNumber() { var playerIds = _playerGameStatuses.Keys.Select(player => player.UserId).ToArray(); @@ -304,17 +205,4 @@ private void IncrementRoundNumber() RoundId = task.GetAwaiter().GetResult(); } } - - public sealed class GhostAttemptHandleEvent : HandledEntityEventArgs - { - public MindComponent Mind { get; } - public bool CanReturnGlobal { get; } - public bool Result { get; set; } - - public GhostAttemptHandleEvent(MindComponent mind, bool canReturnGlobal) - { - Mind = mind; - CanReturnGlobal = canReturnGlobal; - } - } } diff --git a/Content.Server/Ghost/GhostCommand.cs b/Content.Server/Ghost/GhostCommand.cs index b553d64201..a2f361d29d 100644 --- a/Content.Server/Ghost/GhostCommand.cs +++ b/Content.Server/Ghost/GhostCommand.cs @@ -1,4 +1,3 @@ -using Content.Server.GameTicking; using Content.Server.Popups; using Content.Shared.Administration; using Content.Shared.Mind; @@ -41,7 +40,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) mind = _entities.GetComponent(mindId); } - if (!_entities.System().OnGhostAttempt(mindId, true, true, mind)) + if (!_entities.System().OnGhostAttempt(mindId, true, true, mind)) { shell.WriteLine(Loc.GetString("ghost-command-denied")); } diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index b68c279b3e..b045214329 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -1,17 +1,23 @@ -using System.Linq; -using System.Numerics; +using Content.Server.Administration.Logs; +using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Ghost.Components; using Content.Server.Mind; using Content.Server.Roles.Jobs; using Content.Server.Warps; using Content.Shared.Actions; +using Content.Shared.CCVar; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Database; using Content.Shared.Examine; using Content.Shared.Eye; +using Content.Shared.FixedPoint; using Content.Shared.Follower; using Content.Shared.Ghost; using Content.Shared.Mind; using Content.Shared.Mind.Components; +using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Events; @@ -19,11 +25,15 @@ using Content.Shared.Storage.Components; using Robust.Server.GameObjects; using Robust.Server.Player; +using Robust.Shared.Configuration; using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using System.Linq; +using System.Numerics; namespace Content.Server.Ghost { @@ -44,6 +54,14 @@ public sealed class GhostSystem : SharedGhostSystem [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; private EntityQuery _ghostQuery; private EntityQuery _physicsQuery; @@ -144,7 +162,7 @@ private void OnRelayMoveInput(EntityUid uid, GhostOnMoveComponent component, ref if (component.MustBeDead && (_mobState.IsAlive(uid) || _mobState.IsCritical(uid))) return; - _ticker.OnGhostAttempt(mindId, component.CanReturn, mind: mind); + OnGhostAttempt(mindId, component.CanReturn, mind: mind); } private void OnGhostStartup(EntityUid uid, GhostComponent component, ComponentStartup args) @@ -473,5 +491,102 @@ private bool IsValidSpawnPosition(EntityCoordinates? spawnPosition) Log.Debug($"Spawned ghost \"{ToPrettyString(ghost)}\" for {mind.Comp.CharacterName}."); return ghost; } + + public bool OnGhostAttempt(EntityUid mindId, bool canReturnGlobal, bool viaCommand = false, MindComponent? mind = null) + { + if (!Resolve(mindId, ref mind)) + return false; + + var playerEntity = mind.CurrentEntity; + + if (playerEntity != null && viaCommand) + _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} is attempting to ghost via command"); + + var handleEv = new GhostAttemptHandleEvent(mind, canReturnGlobal); + RaiseLocalEvent(handleEv); + + // Something else has handled the ghost attempt for us! We return its result. + if (handleEv.Handled) + return handleEv.Result; + + if (mind.PreventGhosting) + { + if (mind.Session != null) // Logging is suppressed to prevent spam from ghost attempts caused by movement attempts + { + _chatManager.DispatchServerMessage(mind.Session, Loc.GetString("comp-mind-ghosting-prevented"), + true); + } + + return false; + } + + if (TryComp(playerEntity, out var comp) && !comp.CanGhostInteract) + return false; + + if (mind.VisitingEntity != default) + { + _mind.UnVisit(mindId, mind: mind); + } + + var position = Exists(playerEntity) + ? Transform(playerEntity.Value).Coordinates + : _gameTicker.GetObserverSpawnPoint(); + + if (position == default) + return false; + + // Ok, so, this is the master place for the logic for if ghosting is "too cheaty" to allow returning. + // There's no reason at this time to move it to any other place, especially given that the 'side effects required' situations would also have to be moved. + // + If CharacterDeadPhysically applies, we're physically dead. Therefore, ghosting OK, and we can return (this is critical for gibbing) + // Note that we could theoretically be ICly dead and still physically alive and vice versa. + // (For example, a zombie could be dead ICly, but may retain memories and is definitely physically active) + // + If we're in a mob that is critical, and we're supposed to be able to return if possible, + // we're succumbing - the mob is killed. Therefore, character is dead. Ghosting OK. + // (If the mob survives, that's a bug. Ghosting is kept regardless.) + var canReturn = canReturnGlobal && _mind.IsCharacterDeadPhysically(mind); + + if (_configurationManager.GetCVar(CCVars.GhostKillCrit) && + canReturnGlobal && + TryComp(playerEntity, out MobStateComponent? mobState)) + { + if (_mobState.IsCritical(playerEntity.Value, mobState)) + { + canReturn = true; + + //todo: what if they dont breathe lol + //cry deeply + + FixedPoint2 dealtDamage = 200; + + if (TryComp(playerEntity, out var damageable) + && TryComp(playerEntity, out var thresholds)) + { + var playerDeadThreshold = _mobThresholdSystem.GetThresholdForState(playerEntity.Value, MobState.Dead, thresholds); + dealtDamage = playerDeadThreshold - damageable.TotalDamage; + } + + DamageSpecifier damage = new(_prototypeManager.Index("Asphyxiation"), dealtDamage); + + _damageable.TryChangeDamage(playerEntity, damage, true); + } + } + + var ghost = SpawnGhost((mindId, mind), position, canReturn); + + if (ghost == null) + return false; + + if (playerEntity != null) + _adminLogger.Add(LogType.Mind, $"{EntityManager.ToPrettyString(playerEntity.Value):player} ghosted{(!canReturn ? " (non-returnable)" : "")}"); + + return true; + } + } + + public sealed class GhostAttemptHandleEvent(MindComponent mind, bool canReturnGlobal) : HandledEntityEventArgs + { + public MindComponent Mind { get; } = mind; + public bool CanReturnGlobal { get; } = canReturnGlobal; + public bool Result { get; set; } } } diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index b02212844b..f6abcad7bc 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -1,31 +1,29 @@ -using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Server.Administration.Logs; using Content.Server.Fluids.EntitySystems; -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Popups; -using Content.Server.Power.Components; +using Content.Server.Repairable; using Content.Server.Stack; using Content.Server.Wires; using Content.Shared.Body.Systems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Database; +using Content.Shared.Destructible; +using Content.Shared.Emag.Components; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Materials; using Content.Shared.Mind; using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; using System.Linq; -using Content.Server.Administration.Logs; -using Content.Server.Repairable; -using Content.Shared.Database; -using Content.Shared.Destructible; -using Content.Shared.Emag.Components; -using Content.Shared.Power; -using Robust.Shared.Prototypes; namespace Content.Server.Materials; @@ -34,7 +32,7 @@ public sealed class MaterialReclaimerSystem : SharedMaterialReclaimerSystem { [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly AppearanceSystem _appearance = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly MaterialStorageSystem _materialStorage = default!; [Dependency] private readonly OpenableSystem _openable = default!; [Dependency] private readonly PopupSystem _popup = default!; @@ -99,7 +97,7 @@ private void OnSuicideByEnvironment(Entity entity, r if (TryComp(victim, out ActorComponent? actor) && _mind.TryGetMind(actor.PlayerSession, out var mindId, out var mind)) { - _ticker.OnGhostAttempt(mindId, false, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, false, mind: mind); if (mind.OwnedEntity is { Valid: true } suicider) { _popup.PopupEntity(Loc.GetString("recycler-component-suicide-message"), suicider); diff --git a/Content.Server/Mind/MindSystem.cs b/Content.Server/Mind/MindSystem.cs index 4271d76b44..c3e29cc363 100644 --- a/Content.Server/Mind/MindSystem.cs +++ b/Content.Server/Mind/MindSystem.cs @@ -1,4 +1,3 @@ -using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.GameTicking; using Content.Server.Ghost; @@ -13,6 +12,7 @@ using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; namespace Content.Server.Mind; @@ -194,7 +194,7 @@ public override void TransferTo(EntityUid mindId, EntityUid? entity, bool ghostC component = EnsureComp(entity.Value); if (component.HasMind) - _gameTicker.OnGhostAttempt(component.Mind.Value, false); + _ghosts.OnGhostAttempt(component.Mind.Value, false); if (TryComp(entity.Value, out var actor)) { diff --git a/Content.Server/Morgue/CrematoriumSystem.cs b/Content.Server/Morgue/CrematoriumSystem.cs index f6859b610a..656457dc98 100644 --- a/Content.Server/Morgue/CrematoriumSystem.cs +++ b/Content.Server/Morgue/CrematoriumSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.GameTicking; +using Content.Server.Ghost; using Content.Server.Morgue.Components; using Content.Server.Storage.Components; using Content.Server.Storage.EntitySystems; @@ -13,8 +13,6 @@ using Content.Shared.Storage; using Content.Shared.Storage.Components; using Content.Shared.Verbs; -using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Player; @@ -25,7 +23,7 @@ public sealed class CrematoriumSystem : EntitySystem { [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly GameTicker _ticker = default!; + [Dependency] private readonly GhostSystem _ghostSystem = default!; [Dependency] private readonly EntityStorageSystem _entityStorage = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly StandingStateSystem _standing = default!; @@ -154,7 +152,7 @@ private void OnSuicideByEnvironment(EntityUid uid, CrematoriumComponent componen var victim = args.Victim; if (TryComp(victim, out ActorComponent? actor) && _minds.TryGetMind(victim, out var mindId, out var mind)) { - _ticker.OnGhostAttempt(mindId, false, mind: mind); + _ghostSystem.OnGhostAttempt(mindId, false, mind: mind); if (mind.OwnedEntity is { Valid: true } entity) { From 082deb9405ef9bb9c6d1a3df72c51a88fc843fd8 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Mon, 26 Aug 2024 15:00:52 +0200 Subject: [PATCH 16/54] Fix energy sword visuals (#31478) --- Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index e364809b50..0b0719e77f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -22,6 +22,7 @@ - type: ItemToggleHot - type: ItemToggleSize activatedSize: Huge + - type: ItemTogglePointLight - type: ItemToggleMeleeWeapon activatedSoundOnHit: path: /Audio/Weapons/eblade1.ogg From 6c66e8fe1fcbc33062e443a0b407a90e23b6c374 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 26 Aug 2024 13:01:59 +0000 Subject: [PATCH 17/54] 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 c0db504d06..9325649c18 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: notafet - changes: - - message: The singularity is now safe to operate up to PA level 3. - type: Fix - id: 6716 - time: '2024-06-12T22:56:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28906 - author: stalengd changes: - message: Players can now correctly toggle internals on pets. @@ -3865,3 +3858,10 @@ id: 7215 time: '2024-08-26T12:02:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31319 +- author: slarticodefast + changes: + - message: Fixed energy sword visuals. + type: Fix + id: 7216 + time: '2024-08-26T13:00:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31478 From c6d291968f71c5dcbbd37875c4bd0fffb38e0a4f Mon Sep 17 00:00:00 2001 From: Mervill Date: Mon, 26 Aug 2024 08:48:37 -0700 Subject: [PATCH 18/54] Replace obsolete code in shuttle systems. (#31408) * Format DockingSystem.Shuttle * arrivals system * docking system * shuttle console system * emergency shuttle system * shuttle system * thruster system * Fix compile error --------- Co-authored-by: Pieter-Jan Briers --- .../Shuttles/Systems/ArrivalsSystem.cs | 14 +- .../Shuttles/Systems/DockingSystem.Shuttle.cs | 567 +++++++++--------- .../Shuttles/Systems/DockingSystem.cs | 3 +- .../Systems/EmergencyShuttleSystem.Console.cs | 2 +- .../Systems/EmergencyShuttleSystem.cs | 15 +- .../Systems/ShuttleConsoleSystem.FTL.cs | 2 +- .../Shuttles/Systems/ShuttleConsoleSystem.cs | 6 +- .../Systems/ShuttleSystem.FasterThanLight.cs | 31 +- .../Systems/ShuttleSystem.GridFill.cs | 2 +- .../Shuttles/Systems/ShuttleSystem.Impact.cs | 4 +- .../Shuttles/Systems/ShuttleSystem.cs | 1 - .../Shuttles/Systems/ThrusterSystem.cs | 24 +- 12 files changed, 336 insertions(+), 335 deletions(-) diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index 0cbbc46a4f..40a2778b93 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -45,10 +45,10 @@ public sealed class ArrivalsSystem : EntitySystem [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IConsoleHost _console = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly BiomeSystem _biomes = default!; [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly MapLoaderSystem _loader = default!; @@ -496,9 +496,7 @@ private void OnRoundStarting(RoundStartingEvent ev) private void SetupArrivalsStation() { - var mapId = _mapManager.CreateMap(); - var mapUid = _mapManager.GetMapEntityId(mapId); - _mapManager.AddUninitializedMap(mapId); + var mapUid = _mapSystem.CreateMap(out var mapId, false); if (!_loader.TryLoad(mapId, _cfgManager.GetCVar(CCVars.ArrivalsMap), out var uids)) { @@ -524,7 +522,7 @@ private void SetupArrivalsStation() AddComp(mapUid, restricted); } - _mapManager.DoMapInitialize(mapId); + _mapSystem.InitializeMap(mapId); // Handle roundstart stations. var query = AllEntityQuery(); @@ -582,10 +580,10 @@ private void SetupShuttle(EntityUid uid, StationArrivalsComponent component) return; // Spawn arrivals on a dummy map then dock it to the source. - var dummyMap = _mapManager.CreateMap(); + var dummpMapEntity = _mapSystem.CreateMap(out var dummyMapId); if (TryGetArrivals(out var arrivals) && - _loader.TryLoad(dummyMap, component.ShuttlePath.ToString(), out var shuttleUids)) + _loader.TryLoad(dummyMapId, component.ShuttlePath.ToString(), out var shuttleUids)) { component.Shuttle = shuttleUids[0]; var shuttleComp = Comp(component.Shuttle); @@ -597,7 +595,7 @@ private void SetupShuttle(EntityUid uid, StationArrivalsComponent component) } // Don't start the arrivals shuttle immediately docked so power has a time to stabilise? - var timer = AddComp(_mapManager.GetMapEntityId(dummyMap)); + var timer = AddComp(dummpMapEntity); timer.Lifetime = 15f; } } diff --git a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs index 1a95ef9cb2..597d74dcc7 100644 --- a/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs +++ b/Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs @@ -18,143 +18,143 @@ public sealed partial class DockingSystem private const int DockRoundingDigits = 2; public Angle GetAngle(EntityUid uid, TransformComponent xform, EntityUid targetUid, TransformComponent targetXform, EntityQuery xformQuery) - { - var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform); - var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform); - - var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), - _physicsQuery.GetComponent(uid).LocalCenter); - var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), - _physicsQuery.GetComponent(targetUid).LocalCenter); - - var mapDiff = shuttleCOM - targetCOM; - var angle = mapDiff.ToWorldAngle(); - angle -= targetRot; - return angle; - } - - /// - /// Checks if 2 docks can be connected by moving the shuttle directly onto docks. - /// - private bool CanDock( - DockingComponent shuttleDock, - TransformComponent shuttleDockXform, - DockingComponent gridDock, - TransformComponent gridDockXform, - Box2 shuttleAABB, - Angle targetGridRotation, - FixturesComponent shuttleFixtures, - MapGridComponent grid, - bool isMap, - out Matrix3x2 matty, - out Box2 shuttleDockedAABB, - out Angle gridRotation) - { - shuttleDockedAABB = Box2.UnitCentered; - gridRotation = Angle.Zero; - matty = Matrix3x2.Identity; - - if (shuttleDock.Docked || - gridDock.Docked || - !shuttleDockXform.Anchored || - !gridDockXform.Anchored) - { - return false; - } - - // First, get the station dock's position relative to the shuttle, this is where we rotate it around - var stationDockPos = shuttleDockXform.LocalPosition + - shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f)); - - // Need to invert the grid's angle. - var shuttleDockAngle = shuttleDockXform.LocalRotation; - var gridDockAngle = gridDockXform.LocalRotation.Opposite(); - var offsetAngle = gridDockAngle - shuttleDockAngle; - - var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle); - var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle); - matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix); - - if (!ValidSpawn(grid, matty, offsetAngle, shuttleFixtures, isMap)) - return false; - - shuttleDockedAABB = matty.TransformBox(shuttleAABB); - gridRotation = (targetGridRotation + offsetAngle).Reduced(); - return true; - } - - /// - /// Gets docking config between 2 specific docks. - /// - public DockingConfig? GetDockingConfig( - EntityUid shuttleUid, - EntityUid targetGrid, - EntityUid shuttleDockUid, - DockingComponent shuttleDock, - EntityUid gridDockUid, - DockingComponent gridDock) - { - var shuttleDocks = new List>(1) + { + var (shuttlePos, shuttleRot) = _transform.GetWorldPositionRotation(xform); + var (targetPos, targetRot) = _transform.GetWorldPositionRotation(targetXform); + + var shuttleCOM = Robust.Shared.Physics.Transform.Mul(new Transform(shuttlePos, shuttleRot), + _physicsQuery.GetComponent(uid).LocalCenter); + var targetCOM = Robust.Shared.Physics.Transform.Mul(new Transform(targetPos, targetRot), + _physicsQuery.GetComponent(targetUid).LocalCenter); + + var mapDiff = shuttleCOM - targetCOM; + var angle = mapDiff.ToWorldAngle(); + angle -= targetRot; + return angle; + } + + /// + /// Checks if 2 docks can be connected by moving the shuttle directly onto docks. + /// + private bool CanDock( + DockingComponent shuttleDock, + TransformComponent shuttleDockXform, + DockingComponent gridDock, + TransformComponent gridDockXform, + Box2 shuttleAABB, + Angle targetGridRotation, + FixturesComponent shuttleFixtures, + Entity gridEntity, + bool isMap, + out Matrix3x2 matty, + out Box2 shuttleDockedAABB, + out Angle gridRotation) + { + shuttleDockedAABB = Box2.UnitCentered; + gridRotation = Angle.Zero; + matty = Matrix3x2.Identity; + + if (shuttleDock.Docked || + gridDock.Docked || + !shuttleDockXform.Anchored || + !gridDockXform.Anchored) + { + return false; + } + + // First, get the station dock's position relative to the shuttle, this is where we rotate it around + var stationDockPos = shuttleDockXform.LocalPosition + + shuttleDockXform.LocalRotation.RotateVec(new Vector2(0f, -1f)); + + // Need to invert the grid's angle. + var shuttleDockAngle = shuttleDockXform.LocalRotation; + var gridDockAngle = gridDockXform.LocalRotation.Opposite(); + var offsetAngle = gridDockAngle - shuttleDockAngle; + + var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle); + var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle); + matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix); + + if (!ValidSpawn(gridEntity, matty, offsetAngle, shuttleFixtures, isMap)) + return false; + + shuttleDockedAABB = matty.TransformBox(shuttleAABB); + gridRotation = (targetGridRotation + offsetAngle).Reduced(); + return true; + } + + /// + /// Gets docking config between 2 specific docks. + /// + public DockingConfig? GetDockingConfig( + EntityUid shuttleUid, + EntityUid targetGrid, + EntityUid shuttleDockUid, + DockingComponent shuttleDock, + EntityUid gridDockUid, + DockingComponent gridDock) + { + var shuttleDocks = new List>(1) { (shuttleDockUid, shuttleDock) }; - var gridDocks = new List>(1) + var gridDocks = new List>(1) { (gridDockUid, gridDock) }; - return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks); - } - - /// - /// Tries to get a valid docking configuration for the shuttle to the target grid. - /// - /// Priority docking tag to prefer, e.g. for emergency shuttle - public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null) - { - var gridDocks = GetDocks(targetGrid); - var shuttleDocks = GetDocks(shuttleUid); - - return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag); - } - - /// - /// Tries to get a docking config at the specified coordinates and angle. - /// - public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid, - EntityUid targetGrid, - EntityCoordinates coordinates, - Angle angle) - { - var gridDocks = GetDocks(targetGrid); - var shuttleDocks = GetDocks(shuttleUid); - - var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); - - foreach (var config in configs) - { - if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15)) - { - return config; - } - } - - return null; - } - - /// - /// Gets all docking configs between the 2 grids. - /// - private List GetDockingConfigs( - EntityUid shuttleUid, - EntityUid targetGrid, - List> shuttleDocks, - List> gridDocks) - { - var validDockConfigs = new List(); - - if (gridDocks.Count <= 0) + return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks); + } + + /// + /// Tries to get a valid docking configuration for the shuttle to the target grid. + /// + /// Priority docking tag to prefer, e.g. for emergency shuttle + public DockingConfig? GetDockingConfig(EntityUid shuttleUid, EntityUid targetGrid, string? priorityTag = null) + { + var gridDocks = GetDocks(targetGrid); + var shuttleDocks = GetDocks(shuttleUid); + + return GetDockingConfigPrivate(shuttleUid, targetGrid, shuttleDocks, gridDocks, priorityTag); + } + + /// + /// Tries to get a docking config at the specified coordinates and angle. + /// + public DockingConfig? GetDockingConfigAt(EntityUid shuttleUid, + EntityUid targetGrid, + EntityCoordinates coordinates, + Angle angle) + { + var gridDocks = GetDocks(targetGrid); + var shuttleDocks = GetDocks(shuttleUid); + + var configs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); + + foreach (var config in configs) + { + if (config.Coordinates.Equals(coordinates) && config.Angle.EqualsApprox(angle, 0.15)) + { + return config; + } + } + + return null; + } + + /// + /// Gets all docking configs between the 2 grids. + /// + private List GetDockingConfigs( + EntityUid shuttleUid, + EntityUid targetGrid, + List> shuttleDocks, + List> gridDocks) + { + var validDockConfigs = new List(); + + if (gridDocks.Count <= 0) return validDockConfigs; var targetGridGrid = _gridQuery.GetComponent(targetGrid); @@ -168,117 +168,118 @@ private List GetDockingConfigs( var grids = new List>(); if (shuttleDocks.Count > 0) { - // We'll try all combinations of shuttle docks and see which one is most suitable - foreach (var (dockUid, shuttleDock) in shuttleDocks) - { - var shuttleDockXform = _xformQuery.GetComponent(dockUid); - - foreach (var (gridDockUid, gridDock) in gridDocks) - { - var gridXform = _xformQuery.GetComponent(gridDockUid); - - if (!CanDock( - shuttleDock, shuttleDockXform, - gridDock, gridXform, - shuttleAABB, - targetGridAngle, - shuttleFixturesComp, - targetGridGrid, - isMap, - out var matty, - out var dockedAABB, - out var targetAngle)) - { - continue; - } - - // Can't just use the AABB as we want to get bounds as tight as possible. - var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty)); - var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, gridPosition.ToMapPos(EntityManager, _transform)); - - // TODO: use tight bounds - var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position); - - // Check if there's no intersecting grids (AKA oh god it's docking at cargo). - grids.Clear(); - _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false); - if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid)) - { - continue; - } - - // Alright well the spawn is valid now to check how many we can connect - // Get the matrix for each shuttle dock and test it against the grid docks to see - // if the connected position / direction matches. - - var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>() + // We'll try all combinations of shuttle docks and see which one is most suitable + foreach (var (dockUid, shuttleDock) in shuttleDocks) + { + var shuttleDockXform = _xformQuery.GetComponent(dockUid); + + foreach (var (gridDockUid, gridDock) in gridDocks) + { + var gridXform = _xformQuery.GetComponent(gridDockUid); + + if (!CanDock( + shuttleDock, shuttleDockXform, + gridDock, gridXform, + shuttleAABB, + targetGridAngle, + shuttleFixturesComp, + (targetGrid, targetGridGrid), + isMap, + out var matty, + out var dockedAABB, + out var targetAngle)) + { + continue; + } + + // Can't just use the AABB as we want to get bounds as tight as possible. + var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty)); + var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, _transform.ToMapCoordinates(gridPosition).Position); + + // TODO: use tight bounds + var dockedBounds = new Box2Rotated(shuttleAABB.Translated(spawnPosition.Position), targetAngle, spawnPosition.Position); + + // Check if there's no intersecting grids (AKA oh god it's docking at cargo). + grids.Clear(); + _mapManager.FindGridsIntersecting(targetGridXform.MapID, dockedBounds, ref grids, includeMap: false); + if (grids.Any(o => o.Owner != targetGrid && o.Owner != targetGridXform.MapUid)) + { + continue; + } + + // Alright well the spawn is valid now to check how many we can connect + // Get the matrix for each shuttle dock and test it against the grid docks to see + // if the connected position / direction matches. + + var dockedPorts = new List<(EntityUid DockAUid, EntityUid DockBUid, DockingComponent DockA, DockingComponent DockB)>() { (dockUid, gridDockUid, shuttleDock, gridDock), }; - dockedAABB = dockedAABB.Rounded(DockRoundingDigits); - - foreach (var (otherUid, other) in shuttleDocks) - { - if (other == shuttleDock) - continue; - - foreach (var (otherGridUid, otherGrid) in gridDocks) - { - if (otherGrid == gridDock) - continue; - - if (!CanDock( - other, - _xformQuery.GetComponent(otherUid), - otherGrid, - _xformQuery.GetComponent(otherGridUid), - shuttleAABB, - targetGridAngle, - shuttleFixturesComp, targetGridGrid, - isMap, - out _, - out var otherdockedAABB, - out var otherTargetAngle)) - { - continue; - } - - otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits); - - // Different setup. - if (!targetAngle.Equals(otherTargetAngle) || - !dockedAABB.Equals(otherdockedAABB)) - { - continue; - } - - dockedPorts.Add((otherUid, otherGridUid, other, otherGrid)); - } - } - - validDockConfigs.Add(new DockingConfig() - { - Docks = dockedPorts, - Coordinates = gridPosition, - Area = dockedAABB, - Angle = targetAngle, - }); - } - } + dockedAABB = dockedAABB.Rounded(DockRoundingDigits); + + foreach (var (otherUid, other) in shuttleDocks) + { + if (other == shuttleDock) + continue; + + foreach (var (otherGridUid, otherGrid) in gridDocks) + { + if (otherGrid == gridDock) + continue; + + if (!CanDock( + other, + _xformQuery.GetComponent(otherUid), + otherGrid, + _xformQuery.GetComponent(otherGridUid), + shuttleAABB, + targetGridAngle, + shuttleFixturesComp, + (targetGrid, targetGridGrid), + isMap, + out _, + out var otherdockedAABB, + out var otherTargetAngle)) + { + continue; + } + + otherdockedAABB = otherdockedAABB.Rounded(DockRoundingDigits); + + // Different setup. + if (!targetAngle.Equals(otherTargetAngle) || + !dockedAABB.Equals(otherdockedAABB)) + { + continue; + } + + dockedPorts.Add((otherUid, otherGridUid, other, otherGrid)); + } + } + + validDockConfigs.Add(new DockingConfig() + { + Docks = dockedPorts, + Coordinates = gridPosition, + Area = dockedAABB, + Angle = targetAngle, + }); + } + } } return validDockConfigs; - } + } - private DockingConfig? GetDockingConfigPrivate( - EntityUid shuttleUid, - EntityUid targetGrid, - List> shuttleDocks, - List> gridDocks, - string? priorityTag = null) - { - var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); + private DockingConfig? GetDockingConfigPrivate( + EntityUid shuttleUid, + EntityUid targetGrid, + List> shuttleDocks, + List> gridDocks, + string? priorityTag = null) + { + var validDockConfigs = GetDockingConfigs(shuttleUid, targetGrid, shuttleDocks, gridDocks); if (validDockConfigs.Count <= 0) return null; @@ -300,56 +301,56 @@ private List GetDockingConfigs( return location; } - /// - /// Checks whether the shuttle can warp to the specified position. - /// - private bool ValidSpawn(MapGridComponent grid, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) - { - var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle); + /// + /// Checks whether the shuttle can warp to the specified position. + /// + private bool ValidSpawn(Entity gridEntity, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap) + { + var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle); - // Because some docking bounds are tight af need to check each chunk individually - foreach (var fix in shuttleFixturesComp.Fixtures.Values) - { - var polyShape = (PolygonShape) fix.Shape; - var aabb = polyShape.ComputeAABB(transform, 0); - aabb = aabb.Enlarged(-0.01f); - - // If it's a map check no hard collidable anchored entities overlap - if (isMap) - { - foreach (var tile in grid.GetLocalTilesIntersecting(aabb)) - { - var anchoredEnumerator = grid.GetAnchoredEntitiesEnumerator(tile.GridIndices); - - while (anchoredEnumerator.MoveNext(out var anc)) - { - if (!_physicsQuery.TryGetComponent(anc, out var physics) || - !physics.CanCollide || - !physics.Hard) - { - continue; - } - - return false; - } - } - } - // If it's not a map check it doesn't overlap the grid. - else - { - if (grid.GetLocalTilesIntersecting(aabb).Any()) - return false; - } - } - - return true; - } - - public List> GetDocks(EntityUid uid) - { - _dockingSet.Clear(); - _lookup.GetChildEntities(uid, _dockingSet); - - return _dockingSet.ToList(); - } + // Because some docking bounds are tight af need to check each chunk individually + foreach (var fix in shuttleFixturesComp.Fixtures.Values) + { + var polyShape = (PolygonShape)fix.Shape; + var aabb = polyShape.ComputeAABB(transform, 0); + aabb = aabb.Enlarged(-0.01f); + + // If it's a map check no hard collidable anchored entities overlap + if (isMap) + { + foreach (var tile in _mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb)) + { + var anchoredEnumerator = _mapSystem.GetAnchoredEntitiesEnumerator(gridEntity.Owner, gridEntity.Comp, tile.GridIndices); + + while (anchoredEnumerator.MoveNext(out var anc)) + { + if (!_physicsQuery.TryGetComponent(anc, out var physics) || + !physics.CanCollide || + !physics.Hard) + { + continue; + } + + return false; + } + } + } + // If it's not a map check it doesn't overlap the grid. + else + { + if (_mapSystem.GetLocalTilesIntersecting(gridEntity.Owner, gridEntity.Comp, aabb).Any()) + return false; + } + } + + return true; + } + + public List> GetDocks(EntityUid uid) + { + _dockingSet.Clear(); + _lookup.GetChildEntities(uid, _dockingSet); + + return _dockingSet.ToList(); + } } diff --git a/Content.Server/Shuttles/Systems/DockingSystem.cs b/Content.Server/Shuttles/Systems/DockingSystem.cs index f46c3980e5..fcdd6c0c1a 100644 --- a/Content.Server/Shuttles/Systems/DockingSystem.cs +++ b/Content.Server/Shuttles/Systems/DockingSystem.cs @@ -23,6 +23,7 @@ namespace Content.Server.Shuttles.Systems public sealed partial class DockingSystem : SharedDockingSystem { [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly DoorSystem _doorSystem = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly PathfindingSystem _pathfinding = default!; @@ -262,7 +263,7 @@ public void Dock(Entity dockA, Entity dockB) joint.LocalAnchorA = anchorA; joint.LocalAnchorB = anchorB; - joint.ReferenceAngle = (float) (_transform.GetWorldRotation(gridBXform) - _transform.GetWorldRotation(gridAXform)); + joint.ReferenceAngle = (float)(_transform.GetWorldRotation(gridBXform) - _transform.GetWorldRotation(gridAXform)); joint.CollideConnected = true; joint.Stiffness = stiffness; joint.Damping = damping; diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs index 887ee11c63..ede0b687fc 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.Console.cs @@ -220,7 +220,7 @@ private void UpdateEmergencyConsole(float frameTime) ShuttlesLeft = true; _chatSystem.DispatchGlobalAnnouncement(Loc.GetString("emergency-shuttle-left", ("transitTime", $"{TransitTime:0}"))); - Timer.Spawn((int) (TransitTime * 1000) + _bufferTime.Milliseconds, () => _roundEnd.EndRound(), _roundEndCancelToken?.Token ?? default); + Timer.Spawn((int)(TransitTime * 1000) + _bufferTime.Milliseconds, () => _roundEnd.EndRound(), _roundEndCancelToken?.Token ?? default); } // All the others. diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index 45397ede08..1f3b4a749b 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -50,8 +50,8 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem [Dependency] private readonly IAdminManager _admin = default!; [Dependency] private readonly IConfigurationManager _configManager = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly AccessReaderSystem _reader = default!; [Dependency] private readonly ChatSystem _chatSystem = default!; [Dependency] private readonly CommunicationsConsoleSystem _commsConsole = default!; @@ -212,7 +212,7 @@ private void OnEmergencyFTL(EntityUid uid, EmergencyShuttleComponent component, { [ShuttleTimerMasks.ShuttleMap] = uid, [ShuttleTimerMasks.SourceMap] = args.FromMapUid, - [ShuttleTimerMasks.DestMap] = args.TargetCoordinates.GetMapUid(_entityManager), + [ShuttleTimerMasks.DestMap] = _transformSystem.GetMap(args.TargetCoordinates), [ShuttleTimerMasks.ShuttleTime] = ftlTime, [ShuttleTimerMasks.SourceTime] = ftlTime, [ShuttleTimerMasks.DestTime] = ftlTime @@ -289,7 +289,7 @@ public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleCo { var angle = _dock.GetAngle(stationShuttle.EmergencyShuttle.Value, xform, targetGrid.Value, targetXform, xformQuery); var direction = ContentLocalizationManager.FormatDirection(angle.GetDir()); - var location = FormattedMessage.RemoveMarkup(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); + var location = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); _chatSystem.DispatchStationAnnouncement(stationUid, Loc.GetString("emergency-shuttle-docked", ("time", $"{_consoleAccumulator:0}"), ("direction", direction), ("location", location)), playDefaultSound: false); } @@ -320,7 +320,7 @@ public void CallEmergencyShuttle(EntityUid stationUid, StationEmergencyShuttleCo { var angle = _dock.GetAngle(stationShuttle.EmergencyShuttle.Value, xform, targetGrid.Value, targetXform, xformQuery); var direction = ContentLocalizationManager.FormatDirection(angle.GetDir()); - var location = FormattedMessage.RemoveMarkup(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); + var location = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString((stationShuttle.EmergencyShuttle.Value, xform))); _chatSystem.DispatchStationAnnouncement(stationUid, Loc.GetString("emergency-shuttle-nearby", ("time", $"{_consoleAccumulator:0}"), ("direction", direction), ("location", location)), playDefaultSound: false); } @@ -401,7 +401,7 @@ private void SetupEmergencyShuttle() private void AddCentcomm(EntityUid station, StationCentcommComponent component) { - DebugTools.Assert(LifeStage(station)>= EntityLifeStage.MapInitialized); + DebugTools.Assert(LifeStage(station) >= EntityLifeStage.MapInitialized); if (component.MapEntity != null || component.Entity != null) { Log.Warning("Attempted to re-add an existing centcomm map."); @@ -434,12 +434,11 @@ private void AddCentcomm(EntityUid station, StationCentcommComponent component) return; } - var mapId = _mapManager.CreateMap(); + var map = _mapSystem.CreateMap(out var mapId); var grid = _map.LoadGrid(mapId, component.Map.ToString(), new MapLoadOptions() { LoadMap = false, }); - var map = _mapManager.GetMapEntityId(mapId); if (!Exists(map)) { @@ -492,7 +491,7 @@ private void AddEmergencyShuttle(Entity ent, ref Shuttle private void OnPositionFTLMessage(Entity entity, ref ShuttleConsoleFTLPositionMessage args) { - var mapUid = _mapManager.GetMapEntityId(args.Coordinates.MapId); + var mapUid = _mapSystem.GetMap(args.Coordinates.MapId); // If it's beacons only block all position messages. if (!Exists(mapUid) || _shuttle.IsBeaconMap(mapUid)) diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs index 81a2b29beb..f02ea945d0 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs @@ -26,7 +26,7 @@ namespace Content.Server.Shuttles.Systems; public sealed partial class ShuttleConsoleSystem : SharedShuttleConsoleSystem { - [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly ActionBlockerSystem _blocker = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; @@ -129,7 +129,7 @@ public void RefreshShuttleConsoles() while (query.MoveNext(out var uid, out _)) { - UpdateState(uid,ref dockState); + UpdateState(uid, ref dockState); } } @@ -138,7 +138,7 @@ public void RefreshShuttleConsoles() /// private void OnConsoleUIClose(EntityUid uid, ShuttleConsoleComponent component, BoundUIClosedEvent args) { - if ((ShuttleConsoleUiKey) args.UiKey != ShuttleConsoleUiKey.Key) + if ((ShuttleConsoleUiKey)args.UiKey != ShuttleConsoleUiKey.Key) { return; } diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index afe7a7b6db..274437aa40 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -134,13 +134,12 @@ private EntityUid EnsureFTLMap() return uid; } - var mapId = _mapManager.CreateMap(); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapUid = _mapSystem.CreateMap(out var mapId); var ftlMap = AddComp(mapUid); _metadata.SetEntityName(mapUid, "FTL"); Log.Debug($"Setup hyperspace map at {mapUid}"); - DebugTools.Assert(!_mapManager.IsMapPaused(mapId)); + DebugTools.Assert(!_mapSystem.IsPaused(mapId)); var parallax = EnsureComp(mapUid); parallax.Parallax = ftlMap.Parallax; @@ -188,7 +187,7 @@ public void SetFTLWhitelist(Entity entity, EntityWhite /// public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] out FTLDestinationComponent? component) { - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapUid = _mapSystem.GetMapOrInvalid(mapId); component = null; if (!Exists(mapUid)) @@ -281,8 +280,8 @@ public void FTLToCoordinates( _console.RefreshShuttleConsoles(shuttleUid); - var mapId = coordinates.GetMapId(EntityManager); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapId = _transform.GetMapId(coordinates); + var mapUid = _mapSystem.GetMap(mapId); var ev = new FTLRequestEvent(mapUid); RaiseLocalEvent(shuttleUid, ref ev, true); } @@ -388,7 +387,7 @@ private void UpdateFTLStarting(Entity entity) if (fromMapUid != null && TryComp(comp.StartupStream, out AudioComponent? startupAudio)) { var clippedAudio = _audio.PlayStatic(_startupSound, Filter.Broadcast(), - new EntityCoordinates(fromMapUid.Value, _maps.GetGridPosition(entity.Owner)), true, startupAudio.Params); + new EntityCoordinates(fromMapUid.Value, _mapSystem.GetGridPosition(entity.Owner)), true, startupAudio.Params); _audio.SetPlaybackPosition(clippedAudio, entity.Comp1.StartupTime); clippedAudio.Value.Component.Flags |= AudioFlags.NoOcclusion; @@ -477,7 +476,7 @@ private void UpdateFTLArriving(Entity entity) var map = maps.Min(o => o.GetHashCode()); mapId = new MapId(map); - TryFTLProximity(uid, _mapManager.GetMapEntityId(mapId)); + TryFTLProximity(uid, _mapSystem.GetMap(mapId)); } // Docking FTL else if (HasComp(target.EntityId) && @@ -502,7 +501,7 @@ private void UpdateFTLArriving(Entity entity) else { // TODO: This should now use tryftlproximity - mapId = target.GetMapId(EntityManager); + mapId = _transform.GetMapId(target); _transform.SetCoordinates(uid, xform, target, rotation: entity.Comp1.TargetAngle); } @@ -540,7 +539,7 @@ private void UpdateFTLArriving(Entity entity) _mapManager.SetMapPaused(mapId, false); Smimsh(uid, xform: xform); - var ftlEvent = new FTLCompletedEvent(uid, _mapManager.GetMapEntityId(mapId)); + var ftlEvent = new FTLCompletedEvent(uid, _mapSystem.GetMap(mapId)); RaiseLocalEvent(uid, ref ftlEvent, true); } @@ -616,7 +615,7 @@ private void DoTheDinosaur(TransformComponent xform) // If the guy we knocked down is on a spaced tile, throw them too if (grid != null) - TossIfSpaced(grid, shuttleBody, child); + TossIfSpaced((xform.GridUid.Value, grid, shuttleBody), child); } } } @@ -637,13 +636,15 @@ private void KnockOverKids(TransformComponent xform, ref ValueList to /// /// Throws people who are standing on a spaced tile, tries to throw them towards a neighbouring space tile /// - private void TossIfSpaced(MapGridComponent shuttleGrid, PhysicsComponent shuttleBody, EntityUid tossed) + private void TossIfSpaced(Entity shuttleEntity, EntityUid tossed) { - if (!_xformQuery.TryGetComponent(tossed, out var childXform) ) + var shuttleGrid = shuttleEntity.Comp1; + var shuttleBody = shuttleEntity.Comp2; + if (!_xformQuery.TryGetComponent(tossed, out var childXform)) return; // only toss if its on lattice/space - var tile = shuttleGrid.GetTileRef(childXform.Coordinates); + var tile = _mapSystem.GetTileRef(shuttleEntity, shuttleGrid, childXform.Coordinates); if (!tile.IsSpace(_tileDefManager)) return; @@ -689,7 +690,7 @@ public void FTLDock(Entity shuttle, DockingConfig config) { // Set position var mapCoordinates = _transform.ToMapCoordinates(config.Coordinates); - var mapUid = _mapManager.GetMapEntityId(mapCoordinates.MapId); + var mapUid = _mapSystem.GetMap(mapCoordinates.MapId); _transform.SetCoordinates(shuttle.Owner, shuttle.Comp, new EntityCoordinates(mapUid, mapCoordinates.Position), rotation: config.Angle); // Connect everything diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs index 4760e92e21..5ad94699be 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs @@ -110,7 +110,7 @@ private bool TryDungeonSpawn(Entity targetGrid, DungeonSpawnG spawnCoords = spawnCoords.Offset(_random.NextVector2(distancePadding + group.MinimumDistance, distancePadding + group.MaximumDistance)); } - _maps.CreateMap(out var mapId); + _mapSystem.CreateMap(out var mapId); var spawnedGrid = _mapManager.CreateGridEntity(mapId); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs index 8a8d2d883d..436b248407 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs @@ -39,8 +39,8 @@ private void OnShuttleCollide(EntityUid uid, ShuttleComponent component, ref Sta var otherXform = Transform(args.OtherEntity); - var ourPoint = Vector2.Transform(args.WorldPoint, ourXform.InvWorldMatrix); - var otherPoint = Vector2.Transform(args.WorldPoint, otherXform.InvWorldMatrix); + var ourPoint = Vector2.Transform(args.WorldPoint, _transform.GetInvWorldMatrix(ourXform)); + var otherPoint = Vector2.Transform(args.WorldPoint, _transform.GetInvWorldMatrix(otherXform)); var ourVelocity = _physics.GetLinearVelocity(uid, ourPoint, ourBody, ourXform); var otherVelocity = _physics.GetLinearVelocity(args.OtherEntity, otherPoint, otherBody, otherXform); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index 6ae4aff2f4..054c42f934 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -49,7 +49,6 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem [Dependency] private readonly MetaDataSystem _metadata = default!; [Dependency] private readonly PvsOverrideSystem _pvs = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedMapSystem _maps = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ShuttleConsoleSystem _console = default!; diff --git a/Content.Server/Shuttles/Systems/ThrusterSystem.cs b/Content.Server/Shuttles/Systems/ThrusterSystem.cs index af780df44a..f5e8f7823e 100644 --- a/Content.Server/Shuttles/Systems/ThrusterSystem.cs +++ b/Content.Server/Shuttles/Systems/ThrusterSystem.cs @@ -27,6 +27,7 @@ public sealed class ThrusterSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly AmbientSoundSystem _ambient = default!; [Dependency] private readonly FixtureSystem _fixtureSystem = default!; [Dependency] private readonly DamageableSystem _damageable = default!; @@ -109,7 +110,7 @@ private void OnShuttleTileChange(EntityUid uid, ShuttleComponent component, ref continue; var checkPos = tilePos + new Vector2i(x, y); - var enumerator = grid.GetAnchoredEntitiesEnumerator(checkPos); + var enumerator = _mapSystem.GetAnchoredEntitiesEnumerator(uid, grid, checkPos); while (enumerator.MoveNext(out var ent)) { @@ -120,7 +121,7 @@ private void OnShuttleTileChange(EntityUid uid, ShuttleComponent component, ref var xform = xformQuery.GetComponent(ent.Value); var direction = xform.LocalRotation.ToWorldVec(); - if (new Vector2i((int) direction.X, (int) direction.Y) != new Vector2i(x, y)) + if (new Vector2i((int)direction.X, (int)direction.Y) != new Vector2i(x, y)) continue; DisableThruster(ent.Value, thruster, xform.GridUid); @@ -183,8 +184,8 @@ private void OnRotate(EntityUid uid, ThrusterComponent component, ref MoveEvent return; } - var oldDirection = (int) args.OldRotation.GetCardinalDir() / 2; - var direction = (int) args.NewRotation.GetCardinalDir() / 2; + var oldDirection = (int)args.OldRotation.GetCardinalDir() / 2; + var direction = (int)args.NewRotation.GetCardinalDir() / 2; var oldShuttleComponent = shuttleComponent; if (args.ParentChanged) @@ -282,7 +283,7 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform switch (component.Type) { case ThrusterType.Linear: - var direction = (int) xform.LocalRotation.GetCardinalDir() / 2; + var direction = (int)xform.LocalRotation.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] += component.Thrust; DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(uid)); @@ -294,7 +295,7 @@ public void EnableThruster(EntityUid uid, ThrusterComponent component, Transform { var shape = new PolygonShape(); shape.Set(component.BurnPoly); - _fixtureSystem.TryCreateFixture(uid, shape, BurnFixture, hard: false, collisionLayer: (int) CollisionGroup.FullTileMask, body: physicsComponent); + _fixtureSystem.TryCreateFixture(uid, shape, BurnFixture, hard: false, collisionLayer: (int)CollisionGroup.FullTileMask, body: physicsComponent); } break; @@ -334,7 +335,7 @@ private void RefreshCenter(EntityUid uid, ShuttleComponent shuttle) foreach (var dir in new[] { Direction.South, Direction.East, Direction.North, Direction.West }) { - var index = (int) dir / 2; + var index = (int)dir / 2; var pop = shuttle.LinearThrusters[index]; var totalThrust = 0f; @@ -380,7 +381,7 @@ public void DisableThruster(EntityUid uid, ThrusterComponent component, EntityUi { case ThrusterType.Linear: angle ??= xform.LocalRotation; - var direction = (int) angle.Value.GetCardinalDir() / 2; + var direction = (int)angle.Value.GetCardinalDir() / 2; shuttleComponent.LinearThrust[direction] -= component.Thrust; DebugTools.Assert(shuttleComponent.LinearThrusters[direction].Contains(uid)); @@ -426,7 +427,7 @@ public bool CanEnable(EntityUid uid, ThrusterComponent component) var xform = Transform(uid); - if (!xform.Anchored ||!this.IsPowered(uid, EntityManager)) + if (!xform.Anchored || !this.IsPowered(uid, EntityManager)) { return false; } @@ -443,7 +444,8 @@ private bool NozzleExposed(TransformComponent xform) return true; var (x, y) = xform.LocalPosition + xform.LocalRotation.Opposite().ToWorldVec(); - var tile = Comp(xform.GridUid.Value).GetTileRef(new Vector2i((int) Math.Floor(x), (int) Math.Floor(y))); + var mapGrid = Comp(xform.GridUid.Value); + var tile = _mapSystem.GetTileRef(xform.GridUid.Value, mapGrid, new Vector2i((int)Math.Floor(x), (int)Math.Floor(y))); return tile.Tile.IsSpace(); } @@ -582,6 +584,6 @@ public void SetAngularThrust(ShuttleComponent component, bool on) private int GetFlagIndex(DirectionFlag flag) { - return (int) Math.Log2((int) flag); + return (int)Math.Log2((int)flag); } } From 4dc750abc9671693ce930a000c633187cd05e997 Mon Sep 17 00:00:00 2001 From: QueerNB <176353696+QueerNB@users.noreply.github.com> Date: Mon, 26 Aug 2024 15:24:22 -0700 Subject: [PATCH 19/54] Replaces small fans on most shuttles with directional fans. (#31495) --- .../ShuttleEvent/disaster_evacpod.yml | 2 +- .../Maps/Shuttles/ShuttleEvent/honki.yml | 2 +- .../Maps/Shuttles/ShuttleEvent/lost_cargo.yml | 62 +- .../Maps/Shuttles/ShuttleEvent/striker.yml | 65 +- .../Shuttles/ShuttleEvent/syndie_evacpod.yml | 2650 ++++++++++++----- .../ShuttleEvent/traveling_china_cuisine.yml | 23 +- Resources/Maps/Shuttles/arrivals.yml | 60 +- Resources/Maps/Shuttles/briggle.yml | 18 +- Resources/Maps/Shuttles/cargo.yml | 68 +- Resources/Maps/Shuttles/cargo_core.yml | 62 +- Resources/Maps/Shuttles/cargo_fland.yml | 66 +- Resources/Maps/Shuttles/dart.yml | 176 +- Resources/Maps/Shuttles/emergency.yml | 46 +- Resources/Maps/Shuttles/emergency_box.yml | 30 +- Resources/Maps/Shuttles/emergency_cluster.yml | 21 +- Resources/Maps/Shuttles/emergency_courser.yml | 26 +- Resources/Maps/Shuttles/emergency_delta.yml | 48 +- Resources/Maps/Shuttles/emergency_lox.yml | 42 +- Resources/Maps/Shuttles/emergency_meta.yml | 31 +- Resources/Maps/Shuttles/emergency_omega.yml | 26 +- Resources/Maps/Shuttles/emergency_raven.yml | 386 +-- Resources/Maps/Shuttles/emergency_rod.yml | 105 +- Resources/Maps/Shuttles/emergency_wode.yml | 52 +- Resources/Maps/Shuttles/escape_pod_small.yml | 2 +- Resources/Maps/Shuttles/mining.yml | 30 +- Resources/Maps/Shuttles/pirate.yml | 82 +- Resources/Maps/Shuttles/trading_outpost.yml | 162 +- Resources/Maps/Shuttles/wizard.yml | 71 +- 28 files changed, 2347 insertions(+), 2067 deletions(-) diff --git a/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml index be1ca4ffde..6649a01ce8 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml @@ -117,7 +117,7 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 4 components: diff --git a/Resources/Maps/Shuttles/ShuttleEvent/honki.yml b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml index 28e4dab515..bd792c425b 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/honki.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/honki.yml @@ -267,7 +267,7 @@ entities: - type: Transform pos: 1.5,-3.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 6 components: diff --git a/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml index 148577363f..413cdfb448 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/lost_cargo.yml @@ -242,27 +242,31 @@ entities: - type: Transform pos: -0.5,6.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 8 components: - type: Transform - pos: -5.5,1.5 + rot: 1.5707963267948966 rad + pos: 0.5,3.5 parent: 1 - uid: 9 components: - type: Transform - pos: -5.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,1.5 parent: 1 - uid: 10 components: - type: Transform - pos: 0.5,3.5 + rot: -1.5707963267948966 rad + pos: -5.5,1.5 parent: 1 - uid: 11 components: - type: Transform - pos: 0.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 1 - proto: BlastDoor entities: @@ -271,33 +275,21 @@ entities: - type: Transform pos: 0.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 135 - uid: 13 components: - type: Transform pos: -5.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 134 - uid: 14 components: - type: Transform pos: 0.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 136 - uid: 15 components: - type: Transform pos: -5.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 133 - proto: BoxMRE entities: - uid: 93 @@ -650,108 +642,72 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 151 - uid: 82 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 151 - uid: 83 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 151 - uid: 84 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 149 - uid: 85 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 149 - uid: 86 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 149 - uid: 87 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 150 - uid: 88 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 152 - uid: 89 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 152 - uid: 90 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 152 - uid: 91 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 150 - uid: 92 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 150 - proto: CrateFilledSpawner entities: - uid: 95 diff --git a/Resources/Maps/Shuttles/ShuttleEvent/striker.yml b/Resources/Maps/Shuttles/ShuttleEvent/striker.yml index 88b113d7fd..ce518370f8 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/striker.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/striker.yml @@ -198,8 +198,6 @@ entities: - type: Transform pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: AirlockExternalShuttleSyndicateLocked entities: - uid: 142 @@ -232,11 +230,12 @@ entities: currentReceiving: 15106.935 currentSupply: 15107 supplyRampPosition: 0.064453125 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 6 components: - type: Transform + rot: 1.5707963267948966 rad pos: -3.5,-1.5 parent: 325 - proto: Bed @@ -267,9 +266,6 @@ entities: occludes: True ents: - 331 - - type: DeviceLinkSink - links: - - 205 - uid: 191 components: - type: Transform @@ -282,9 +278,6 @@ entities: occludes: True ents: - 332 - - type: DeviceLinkSink - links: - - 205 - uid: 192 components: - type: Transform @@ -297,9 +290,6 @@ entities: occludes: True ents: - 333 - - type: DeviceLinkSink - links: - - 205 - uid: 193 components: - type: Transform @@ -312,9 +302,6 @@ entities: occludes: True ents: - 334 - - type: DeviceLinkSink - links: - - 205 - uid: 196 components: - type: Transform @@ -327,9 +314,6 @@ entities: occludes: True ents: - 337 - - type: DeviceLinkSink - links: - - 205 - uid: 198 components: - type: Transform @@ -342,9 +326,6 @@ entities: occludes: True ents: - 339 - - type: DeviceLinkSink - links: - - 205 - uid: 199 components: - type: Transform @@ -357,9 +338,6 @@ entities: occludes: True ents: - 340 - - type: DeviceLinkSink - links: - - 205 - uid: 200 components: - type: Transform @@ -372,9 +350,6 @@ entities: occludes: True ents: - 341 - - type: DeviceLinkSink - links: - - 205 - uid: 201 components: - type: Transform @@ -387,9 +362,6 @@ entities: occludes: True ents: - 342 - - type: DeviceLinkSink - links: - - 205 - uid: 202 components: - type: Transform @@ -402,9 +374,6 @@ entities: occludes: True ents: - 343 - - type: DeviceLinkSink - links: - - 205 - proto: BoxMRE entities: - uid: 320 @@ -825,6 +794,10 @@ entities: occludes: True ents: - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: CyberPen entities: - uid: 77 @@ -1041,8 +1014,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-8.5 parent: 325 - - type: AtmosDevice - joinedGrid: 325 - proto: GasVentPump entities: - uid: 218 @@ -1054,8 +1025,6 @@ entities: address: Vnt-5f41a0ae transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 219 components: - type: Transform @@ -1066,8 +1035,6 @@ entities: address: Vnt-129c27d2 transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 220 components: - type: Transform @@ -1078,8 +1045,6 @@ entities: address: Vnt-11c4609d transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 221 components: - type: Transform @@ -1090,8 +1055,6 @@ entities: address: Vnt-6859729f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - uid: 222 components: - type: Transform @@ -1102,8 +1065,6 @@ entities: address: Vnt-19d24c7f transmitFrequency: 1621 receiveFrequency: 1621 - - type: AtmosDevice - joinedGrid: 325 - proto: GeneratorBasic15kW entities: - uid: 41 @@ -1457,6 +1418,13 @@ entities: - type: Transform pos: 1.561105,-2.5567772 parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 - proto: PinpointerNuclear entities: - uid: 162 @@ -2379,11 +2347,4 @@ entities: occludes: True ents: - 346 -- proto: YellowOxygenTankFilled - entities: - - uid: 167 - components: - - type: Transform - pos: 1.60798,-0.3062118 - parent: 325 ... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml index d90fadba23..04eae18342 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml @@ -5,37 +5,49 @@ tilemap: 0: Space 29: FloorDark 84: FloorShuttleRed - 101: FloorSteelOffset 104: FloorTechMaint + 105: FloorTechMaint2 + 118: FloorWood 120: Lattice 121: Plating entities: - proto: "" entities: - - uid: 1 + - uid: 6 + components: + - type: MetaData + name: Map Entity + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree + - uid: 325 components: - type: MetaData - desc: Evacuation pod - name: Evacuation pod - type: Transform - parent: invalid + pos: 0.5638949,0.47865233 + parent: 6 - type: MapGrid chunks: -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAZQAAAAAA - version: 6 - -1,0: - ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAZQAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAAAdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAdgAAAAADdgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAADHQAAAAADHQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAaQAAAAAAHQAAAAABHQAAAAABHQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAHQAAAAABHQAAAAACHQAAAAAB version: 6 0,-1: ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAaAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAACeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgAAAAABeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAAAHQAAAAABeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAABHQAAAAABHQAAAAABeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAAADHQAAAAACeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,0: ind: 0,0 - tiles: ZQAAAAAAZQAAAAAAZQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAZQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAeQAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: VAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 - type: Broadphase - type: Physics @@ -47,9 +59,7 @@ entities: - type: Fixtures fixtures: {} - type: OccluderTree - - type: SpreaderGrid - type: Shuttle - - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg @@ -58,104 +68,119 @@ entities: version: 2 nodes: - node: - color: '#A91409FF' - id: StandClearGreyscale + color: '#FFFFFFFF' + id: BrickTileDarkCornerNe + decals: + 11: 1,-1 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerNw + decals: + 5: -3,-1 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSe + decals: + 4: 1,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkCornerSw + decals: + 3: -3,-3 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkLineS + decals: + 0: -1,-3 + 1: -2,-3 + 2: 0,-3 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerNe + decals: + 13: 1,-1 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerNw + decals: + 12: -3,-1 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerSe + decals: + 9: 1,-3 + - node: + color: '#7F1C1FFF' + id: BrickTileWhiteCornerSw decals: - 18: 0,-1 + 10: -3,-3 - node: - color: '#A91409FF' - id: WarnCornerSmallGreyscaleNE + color: '#7F1C1FFF' + id: BrickTileWhiteLineS decals: - 15: -2,0 + 6: -2,-3 + 7: -1,-3 + 8: 0,-3 - node: - color: '#A91409FF' - id: WarnCornerSmallGreyscaleNW + color: '#FFFFFFFF' + id: Delivery decals: - 14: 2,0 + 23: 2,-2 + 24: -4,-2 - node: - color: '#A91409FF' - id: WarnEndGreyscaleN + color: '#FFFFFFFF' + id: WarnLineE decals: - 9: -2,1 - 10: 2,1 + 14: 1,-2 - node: - color: '#A91409FF' - id: WarnLineGreyscaleE + color: '#FFFFFFFF' + id: WarnLineS decals: - 0: 2,0 - 8: 2,-1 - 17: 5,0 + 16: -3,-2 - node: - color: '#A91409FF' - id: WarnLineGreyscaleN + color: '#FFFFFFFF' + id: WarnLineW decals: - 11: -1,0 - 12: 0,0 - 13: 1,0 + 15: -1,-1 - node: - color: '#A91409FF' - id: WarnLineGreyscaleS + color: '#FFFFFFFF' + id: WoodTrimThinLineN decals: - 1: 1,-1 - 2: 0,-1 - 3: -1,-1 - 4: -2,-1 - 5: 2,-1 + 17: -1,-5 + 18: 0,-5 + 19: -2,-5 - node: - color: '#A91409FF' - id: WarnLineGreyscaleW + color: '#FFFFFFFF' + id: WoodTrimThinLineS decals: - 6: -2,-1 - 7: -2,0 - 16: -5,0 + 20: -2,-6 + 21: -1,-6 + 22: 0,-6 - type: GridAtmosphere version: 2 data: tiles: - -2,-1: - 0: 18432 - -2,0: - 1: 12 - 0: 64 -1,-1: - 0: 601 - 1: 51200 - -1,0: - 1: 2255 - 0: 16896 + 0: 65535 0,-1: - 0: 2115 - 1: 29440 - -2,1: + 0: 65535 + -2,-1: + 0: 52424 + -1,-3: + 0: 65280 + -1,-2: + 0: 65535 + 0,-3: + 0: 30464 + 0,-2: + 0: 30583 + -2,0: 0: 8 - -1,1: - 0: 4096 + -1,0: + 0: 3839 0,0: - 1: 895 - 0: 18432 - 1,-1: - 0: 16913 - 1,0: - 1: 7 - 0: 64 - 1,1: - 0: 4098 + 0: 895 uniqueMixes: - - volume: 2500 - immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - volume: 2500 temperature: 293.15 moles: @@ -173,1016 +198,2165 @@ entities: - 0 chunkSize: 4 - type: GasTileOverlay - - type: NavMap - type: RadiationGridResistance -- proto: AirlockShuttleSyndicate + - type: GravityShake + shakeTimes: 10 + - type: SpreaderGrid + - type: GridPathfinding +- proto: AirCanister entities: - - uid: 2 + - uid: 91 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,0.5 - parent: 1 - - uid: 3 + pos: -0.5,-8.5 + parent: 325 +- proto: AirlockExternalShuttleSyndicateLocked + entities: + - uid: 142 components: - type: Transform rot: -1.5707963267948966 rad - pos: -5.5,0.5 - parent: 1 -- proto: AirlockSyndicate + pos: -4.5,-1.5 + parent: 325 +- proto: AirlockSyndicateLocked entities: - - uid: 4 + - uid: 20 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 5 + pos: -0.5,-3.5 + parent: 325 + - uid: 88 components: - type: Transform - pos: -2.5,0.5 - parent: 1 + pos: -0.5,-6.5 + parent: 325 - proto: APCBasic entities: - - uid: 6 + - uid: 107 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,1.5 - parent: 1 -- proto: AtmosDeviceFanTiny + pos: 0.5,-6.5 + parent: 325 + - type: PowerNetworkBattery + loadingNetworkDemand: 15107 + currentReceiving: 15106.935 + currentSupply: 15107 + supplyRampPosition: 0.064453125 +- proto: AtmosDeviceFanDirectional entities: - - uid: 7 + - uid: 168 components: - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,0.5 - parent: 1 - - uid: 8 + rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 325 +- proto: Bed + entities: + - uid: 76 components: - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,0.5 - parent: 1 -- proto: BannerSyndicate + pos: 0.5,-5.5 + parent: 325 +- proto: BedsheetSyndie entities: - - uid: 9 + - uid: 164 components: - type: Transform - pos: 1.5,1.5 - parent: 1 -- proto: CableApcExtension + pos: 0.5,-5.5 + parent: 325 +- proto: BlastDoorOpen entities: - - uid: 10 + - uid: 190 components: - type: Transform - pos: -2.5,1.5 - parent: 1 - - uid: 11 + pos: 1.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 331 + - uid: 191 components: - type: Transform - pos: -2.5,0.5 - parent: 1 - - uid: 12 + pos: 1.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 332 + - uid: 192 components: - type: Transform - pos: -3.5,0.5 - parent: 1 - - uid: 13 + pos: -2.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 333 + - uid: 193 components: - type: Transform - pos: -4.5,0.5 - parent: 1 - - uid: 14 + pos: -2.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 334 + - uid: 196 components: - type: Transform - pos: -5.5,0.5 - parent: 1 - - uid: 15 + pos: 3.5,-1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 337 + - uid: 198 components: - type: Transform - pos: -1.5,0.5 - parent: 1 - - uid: 16 + pos: -1.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 339 + - uid: 199 components: - type: Transform - pos: -0.5,0.5 - parent: 1 - - uid: 17 + pos: -1.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 340 + - uid: 200 components: - type: Transform - pos: 0.5,0.5 - parent: 1 - - uid: 18 + pos: -0.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 341 + - uid: 201 components: - type: Transform - pos: 1.5,0.5 - parent: 1 - - uid: 19 + pos: 0.5,2.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 342 + - uid: 202 components: - type: Transform - pos: 2.5,0.5 - parent: 1 - - uid: 20 + pos: 0.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 343 +- proto: BoxMRE + entities: + - uid: 320 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 21 + pos: 0.70504504,-7.29326 + parent: 325 +- proto: CableApcExtension + entities: + - uid: 120 components: - type: Transform - pos: 4.5,0.5 - parent: 1 - - uid: 22 + pos: 0.5,-6.5 + parent: 325 + - uid: 121 components: - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 23 + pos: -0.5,-6.5 + parent: 325 + - uid: 122 components: - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 24 + pos: -0.5,-7.5 + parent: 325 + - uid: 123 components: - type: Transform - pos: 0.5,-1.5 - parent: 1 - - uid: 25 + pos: -0.5,-8.5 + parent: 325 + - uid: 124 components: - type: Transform - pos: 0.5,-2.5 - parent: 1 - - uid: 26 + pos: -1.5,-8.5 + parent: 325 + - uid: 125 components: - type: Transform - pos: -0.5,-2.5 - parent: 1 - - uid: 27 + pos: 0.5,-8.5 + parent: 325 + - uid: 126 components: - type: Transform - pos: 1.5,-2.5 - parent: 1 - - uid: 28 + pos: 1.5,-8.5 + parent: 325 + - uid: 127 components: - type: Transform - pos: -0.5,-1.5 - parent: 1 - - uid: 29 + pos: -2.5,-8.5 + parent: 325 + - uid: 128 components: - type: Transform - pos: -1.5,-1.5 - parent: 1 - - uid: 30 + pos: -3.5,-8.5 + parent: 325 + - uid: 129 components: - type: Transform - pos: 1.5,-1.5 - parent: 1 - - uid: 31 + pos: -3.5,-7.5 + parent: 325 + - uid: 130 components: - type: Transform - pos: 2.5,-1.5 - parent: 1 - - uid: 32 + pos: 2.5,-8.5 + parent: 325 + - uid: 131 components: - type: Transform - pos: 0.5,1.5 - parent: 1 -- proto: CableHV - entities: - - uid: 33 + pos: 2.5,-7.5 + parent: 325 + - uid: 132 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 - - uid: 34 + pos: -0.5,-5.5 + parent: 325 + - uid: 133 components: - type: Transform - pos: -1.5,-0.5 - parent: 1 - - uid: 35 + pos: -0.5,-4.5 + parent: 325 + - uid: 134 components: - type: Transform - pos: -0.5,-0.5 - parent: 1 - - uid: 36 + pos: -0.5,-3.5 + parent: 325 + - uid: 135 components: - type: Transform - pos: 0.5,-0.5 - parent: 1 - - uid: 37 + pos: -0.5,-2.5 + parent: 325 + - uid: 136 components: - type: Transform - pos: 1.5,-0.5 - parent: 1 - - uid: 38 + pos: -0.5,-1.5 + parent: 325 + - uid: 137 components: - type: Transform - pos: 2.5,-0.5 - parent: 1 - - uid: 39 + pos: -0.5,-0.5 + parent: 325 + - uid: 138 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 40 + pos: -0.5,0.5 + parent: 325 + - uid: 139 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 41 + pos: -0.5,1.5 + parent: 325 + - uid: 140 components: - type: Transform - pos: 3.5,0.5 - parent: 1 - - uid: 42 + pos: -0.5,2.5 + parent: 325 + - uid: 141 components: - type: Transform - pos: 3.5,1.5 - parent: 1 -- proto: CableMV - entities: - - uid: 43 + pos: -1.5,1.5 + parent: 325 + - uid: 143 components: - type: Transform - pos: 3.5,1.5 - parent: 1 - - uid: 44 + pos: 0.5,1.5 + parent: 325 + - uid: 145 components: - type: Transform - pos: 2.5,1.5 - parent: 1 - - uid: 45 + pos: -1.5,-1.5 + parent: 325 + - uid: 146 components: - type: Transform - pos: 1.5,1.5 - parent: 1 - - uid: 46 + pos: -2.5,-1.5 + parent: 325 + - uid: 147 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 47 + pos: -3.5,-1.5 + parent: 325 + - uid: 148 components: - type: Transform - pos: -0.5,1.5 - parent: 1 - - uid: 48 - components: + pos: -4.5,-1.5 + parent: 325 + - uid: 149 + components: - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 49 + pos: 0.5,-1.5 + parent: 325 + - uid: 150 components: - type: Transform - pos: -2.5,1.5 - parent: 1 -- proto: ChairPilotSeat - entities: - - uid: 50 + pos: 1.5,-1.5 + parent: 325 + - uid: 151 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,1.5 - parent: 1 - - uid: 51 + pos: 2.5,-1.5 + parent: 325 + - uid: 152 components: - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 52 + pos: 3.5,-1.5 + parent: 325 + - uid: 153 components: - type: Transform - pos: 2.5,1.5 - parent: 1 -- proto: ClosetWallEmergencyFilledRandom - entities: - - uid: 53 + pos: 0.5,-4.5 + parent: 325 + - uid: 154 components: - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,-0.5 - parent: 1 -- proto: ClosetWallFireFilledRandom - entities: - - uid: 54 + pos: 1.5,-4.5 + parent: 325 + - uid: 155 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-0.5 - parent: 1 -- proto: ClothingHeadPyjamaSyndicateRed - entities: - - uid: 98 + pos: 1.5,-5.5 + parent: 325 + - uid: 156 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ClothingNeckScarfStripedSyndieRed - entities: - - uid: 101 + pos: -1.5,-4.5 + parent: 325 + - uid: 157 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 102 + pos: -2.5,-4.5 + parent: 325 + - uid: 158 components: - type: Transform - parent: 92 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ComputerShuttleSyndie + pos: -2.5,-5.5 + parent: 325 +- proto: CableHV entities: - - uid: 55 + - uid: 111 components: - type: Transform - pos: 0.5,2.5 - parent: 1 -- proto: CrateSyndicate - entities: - - uid: 92 + pos: 1.5,-7.5 + parent: 325 + - uid: 112 components: - type: Transform - pos: 1.5,-0.5 - parent: 1 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.14673 - moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 102 - - 101 - - 100 - - 99 - - 98 - - 97 - - 96 - - 95 - - 94 - - 93 - paper_label: !type:ContainerSlot - showEnts: False - occludes: True - ent: null -- proto: CyberPen + pos: 0.5,-7.5 + parent: 325 + - uid: 113 + components: + - type: Transform + pos: -0.5,-7.5 + parent: 325 + - uid: 114 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 325 + - uid: 115 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 325 + - uid: 116 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 325 +- proto: CableHVStack1 entities: - - uid: 93 + - uid: 235 components: - type: Transform - parent: 92 + parent: 41 + - type: Stack + count: 10 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: FaxMachineSyndie - entities: - - uid: 162 + - uid: 239 components: - type: Transform - pos: -0.5,1.5 - parent: 1 -- proto: GeneratorWallmountAPU + parent: 56 + - type: Stack + count: 10 + - type: Physics + canCollide: False +- proto: CableMV entities: - - uid: 56 + - uid: 117 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 -- proto: GeneratorWallmountBasic - entities: - - uid: 57 + pos: -1.5,-6.5 + parent: 325 + - uid: 118 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 -- proto: Grille - entities: - - uid: 58 + pos: -0.5,-6.5 + parent: 325 + - uid: 119 components: - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 59 + pos: 0.5,-6.5 + parent: 325 +- proto: CapacitorStockPart + entities: + - uid: 233 components: - type: Transform - pos: 0.5,3.5 - parent: 1 - - uid: 60 + parent: 41 + - type: Physics + canCollide: False + - uid: 234 components: - type: Transform - pos: -1.5,2.5 - parent: 1 - - uid: 61 + parent: 41 + - type: Physics + canCollide: False + - uid: 237 components: - type: Transform - pos: -0.5,3.5 - parent: 1 - - uid: 62 + parent: 56 + - type: Physics + canCollide: False + - uid: 238 components: - type: Transform - pos: 1.5,3.5 - parent: 1 -- proto: GrilleDiagonal - entities: - - uid: 63 + parent: 56 + - type: Physics + canCollide: False + - uid: 241 components: - type: Transform - pos: -2.5,2.5 - parent: 1 - - uid: 64 + parent: 58 + - type: Physics + canCollide: False + - uid: 242 components: - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 65 + parent: 58 + - type: Physics + canCollide: False + - uid: 243 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,3.5 - parent: 1 - - uid: 66 + parent: 58 + - type: Physics + canCollide: False + - uid: 254 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - uid: 67 + parent: 95 + - type: Physics + canCollide: False + - uid: 261 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 1 - - uid: 68 + parent: 96 + - type: Physics + canCollide: False + - uid: 268 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,2.5 - parent: 1 -- proto: Gyroscope - entities: - - uid: 69 + parent: 97 + - type: Physics + canCollide: False + - uid: 275 components: - type: Transform - pos: 0.5,-1.5 - parent: 1 -- proto: Paper - entities: - - uid: 95 + parent: 98 + - type: Physics + canCollide: False + - uid: 282 components: - type: Transform - parent: 92 + parent: 99 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 97 + - uid: 289 components: - type: Transform - parent: 92 + parent: 100 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 99 + - uid: 296 components: - type: Transform - parent: 92 + parent: 101 - type: Physics canCollide: False - - type: InsideEntityStorage - - uid: 100 + - uid: 303 components: - type: Transform - parent: 92 + parent: 102 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: PlasmaWindowDiagonal +- proto: Carpet entities: - - uid: 70 + - uid: 74 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 1 - - uid: 71 + pos: -0.5,-4.5 + parent: 325 + - uid: 89 components: - type: Transform - pos: -1.5,3.5 - parent: 1 - - uid: 72 + pos: -0.5,-5.5 + parent: 325 +- proto: Catwalk + entities: + - uid: 159 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 1.5,2.5 - parent: 1 - - uid: 73 + pos: -1.5,-7.5 + parent: 325 + - uid: 160 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,2.5 - parent: 1 - - uid: 74 + pos: -0.5,-7.5 + parent: 325 + - uid: 161 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,3.5 - parent: 1 - - uid: 75 + pos: 0.5,-7.5 + parent: 325 +- proto: ChairOfficeDark + entities: + - uid: 93 components: - type: Transform - pos: -2.5,2.5 - parent: 1 -- proto: Poweredlight + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 325 +- proto: ChairPilotSeat entities: - - uid: 76 + - uid: 78 components: - type: Transform rot: 3.141592653589793 rad - pos: 0.5,-1.5 - parent: 1 -- proto: PoweredSmallLight + pos: -0.5,0.5 + parent: 325 +- proto: ComputerIFFSyndicate + entities: + - uid: 40 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 325 +- proto: ComputerShuttleSyndie + entities: + - uid: 64 + components: + - type: Transform + pos: -0.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 245 + disk_slot: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: CyberPen entities: - uid: 77 components: - type: Transform - pos: -4.5,0.5 - parent: 1 - - uid: 78 + pos: -1.1813428,-5.15565 + parent: 325 +- proto: DoorElectronics + entities: + - uid: 331 components: - type: Transform - pos: 5.5,0.5 - parent: 1 - - uid: 79 + parent: 190 + - type: Physics + canCollide: False + - uid: 332 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,1.5 - parent: 1 - - uid: 80 + parent: 191 + - type: Physics + canCollide: False + - uid: 333 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,1.5 - parent: 1 -- proto: RandomPosterContraband - entities: - - uid: 81 + parent: 192 + - type: Physics + canCollide: False + - uid: 334 components: - type: Transform - pos: -3.5,1.5 - parent: 1 - - uid: 82 + parent: 193 + - type: Physics + canCollide: False + - uid: 337 components: - type: Transform - pos: 4.5,1.5 - parent: 1 -- proto: ReinforcedPlasmaWindow - entities: - - uid: 83 + parent: 196 + - type: Physics + canCollide: False + - uid: 339 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,3.5 - parent: 1 - - uid: 84 + parent: 198 + - type: Physics + canCollide: False + - uid: 340 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,3.5 - parent: 1 - - uid: 85 + parent: 199 + - type: Physics + canCollide: False + - uid: 341 components: - type: Transform - pos: 2.5,2.5 - parent: 1 - - uid: 86 + parent: 200 + - type: Physics + canCollide: False + - uid: 342 components: - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,3.5 - parent: 1 - - uid: 87 + parent: 201 + - type: Physics + canCollide: False + - uid: 343 components: - type: Transform - pos: -1.5,2.5 - parent: 1 -- proto: RubberStampSyndicate - entities: - - uid: 94 + parent: 202 + - type: Physics + canCollide: False + - uid: 346 components: - type: Transform - parent: 92 + parent: 206 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: SubstationWallBasic +- proto: DresserFilled entities: - - uid: 88 + - uid: 85 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 325 +- proto: DrinkNukieCan + entities: + - uid: 144 + components: + - type: Transform + pos: -2.6964839,-2.109029 + parent: 325 +- proto: FaxMachineSyndie + entities: + - uid: 46 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 325 + - type: FaxMachine + name: Striker +- proto: filingCabinetRandom + entities: + - uid: 75 + components: + - type: Transform + pos: -1.5,-4.5 + parent: 325 +- proto: Firelock + entities: + - uid: 224 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 350 + - type: DeviceNetwork + address: 44a24659 + receiveFrequency: 1621 + - uid: 225 + components: + - type: Transform + pos: -0.5,-6.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 351 + - type: DeviceNetwork + address: 6fdb75cf + receiveFrequency: 1621 +- proto: FirelockElectronics + entities: + - uid: 350 + components: + - type: Transform + parent: 224 + - type: Physics + canCollide: False + - uid: 351 + components: + - type: Transform + parent: 225 + - type: Physics + canCollide: False +- proto: FoodBoxDonut + entities: + - uid: 87 + components: + - type: Transform + pos: -2.470145,-2.3953476 + parent: 325 +- proto: GasPipeFourway + entities: + - uid: 216 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 325 +- proto: GasPipeStraight + entities: + - uid: 211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-6.5 + parent: 325 + - uid: 213 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 325 + - uid: 214 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 325 + - uid: 215 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 325 + - uid: 217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 325 +- proto: GasPipeTJunction + entities: + - uid: 210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 325 + - uid: 212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 325 +- proto: GasPort + entities: + - uid: 59 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-8.5 + parent: 325 +- proto: GasVentPump + entities: + - uid: 218 + components: + - type: Transform + pos: -0.5,0.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-5f41a0ae + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-129c27d2 + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-11c4609d + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-5.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-6859729f + transmitFrequency: 1621 + receiveFrequency: 1621 + - uid: 222 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 325 + - type: DeviceNetwork + address: Vnt-19d24c7f + transmitFrequency: 1621 + receiveFrequency: 1621 +- proto: GeneratorBasic15kW + entities: + - uid: 41 + components: + - type: Transform + pos: -2.5,-7.5 + parent: 325 + - type: PowerSupplier + supplyRampPosition: 7552.5303 + - type: ContainerContainer + containers: + machine_board: !type:Container + ents: + - 232 + machine_parts: !type:Container + ents: + - 233 + - 234 + - 235 + - uid: 56 + components: + - type: Transform + pos: 1.5,-7.5 + parent: 325 + - type: PowerSupplier + supplyRampPosition: 7552.5303 + - type: ContainerContainer + containers: + machine_board: !type:Container + ents: + - 236 + machine_parts: !type:Container + ents: + - 237 + - 238 + - 239 +- proto: GravityGeneratorMini + entities: + - uid: 57 + components: + - type: Transform + pos: -1.5,-8.5 + parent: 325 +- proto: Grille + entities: + - uid: 1 + components: + - type: Transform + pos: -0.5,2.5 + parent: 325 + - uid: 2 + components: + - type: Transform + pos: -1.5,2.5 + parent: 325 + - uid: 3 + components: + - type: Transform + pos: -1.5,1.5 + parent: 325 + - uid: 4 + components: + - type: Transform + pos: 0.5,2.5 + parent: 325 + - uid: 5 + components: + - type: Transform + pos: 0.5,1.5 + parent: 325 + - uid: 21 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 325 + - uid: 50 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 325 + - uid: 51 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 325 + - uid: 52 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 325 + - uid: 53 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 325 +- proto: Gyroscope + entities: + - uid: 58 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-8.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 240 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 241 + - 242 + - 243 + - 244 +- proto: GyroscopeMachineCircuitboard + entities: + - uid: 240 + components: + - type: Transform + parent: 58 + - type: Physics + canCollide: False +- proto: MedkitCombatFilled + entities: + - uid: 19 + components: + - type: Transform + pos: 1.48298,-0.3211529 + parent: 325 +- proto: MicroManipulatorStockPart + entities: + - uid: 250 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 251 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 252 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 253 + components: + - type: Transform + parent: 95 + - type: Physics + canCollide: False + - uid: 257 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 258 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 259 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 260 + components: + - type: Transform + parent: 96 + - type: Physics + canCollide: False + - uid: 264 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 265 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 266 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 267 + components: + - type: Transform + parent: 97 + - type: Physics + canCollide: False + - uid: 271 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 272 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 273 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 274 + components: + - type: Transform + parent: 98 + - type: Physics + canCollide: False + - uid: 278 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 279 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 280 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 281 + components: + - type: Transform + parent: 99 + - type: Physics + canCollide: False + - uid: 285 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 286 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 287 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 288 + components: + - type: Transform + parent: 100 + - type: Physics + canCollide: False + - uid: 292 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 293 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 294 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 295 + components: + - type: Transform + parent: 101 + - type: Physics + canCollide: False + - uid: 299 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 300 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 301 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False + - uid: 302 + components: + - type: Transform + parent: 102 + - type: Physics + canCollide: False +- proto: Mirror + entities: + - uid: 321 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 325 +- proto: NitrogenTankFilled + entities: + - uid: 105 + components: + - type: Transform + pos: 1.373605,-0.2749618 + parent: 325 +- proto: NukeCodePaper + entities: + - uid: 323 + components: + - type: Transform + pos: 1.561105,-2.5567772 + parent: 325 +- proto: OxygenTankFilled + entities: + - uid: 167 + components: + - type: Transform + pos: 1.60798,-0.3062118 + parent: 325 +- proto: PinpointerNuclear + entities: + - uid: 162 + components: + - type: Transform + pos: 1.3790641,-2.3161128 + parent: 325 + - type: Physics + canCollide: False +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 104 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-0.5 + parent: 325 + - uid: 109 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 325 +- proto: PlushieNuke + entities: + - uid: 47 + components: + - type: Transform + pos: 0.5061571,-5.233775 + parent: 325 +- proto: PortableGeneratorSuperPacmanMachineCircuitboard + entities: + - uid: 232 + components: + - type: Transform + parent: 41 + - type: Physics + canCollide: False + - uid: 236 + components: + - type: Transform + parent: 56 + - type: Physics + canCollide: False +- proto: PosterContrabandC20r + entities: + - uid: 24 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 325 +- proto: PosterContrabandEnergySwords + entities: + - uid: 227 + components: + - type: Transform + pos: -2.5,-6.5 + parent: 325 +- proto: PosterContrabandNuclearDeviceInformational + entities: + - uid: 228 + components: + - type: Transform + pos: -2.5,0.5 + parent: 325 +- proto: PosterContrabandSyndicateRecruitment + entities: + - uid: 229 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 325 +- proto: Poweredlight + entities: + - uid: 94 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,0.5 + parent: 325 + - uid: 110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-2.5 + parent: 325 +- proto: PoweredlightLED + entities: + - uid: 182 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 183 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 + - uid: 184 + components: + - type: Transform + pos: -1.5,-7.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: PoweredSmallLight + entities: + - uid: 204 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 325 + - type: ApcPowerReceiver + powerLoad: 0 +- proto: Rack + entities: + - uid: 83 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 325 + - uid: 84 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 325 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 14 + components: + - type: Transform + pos: -1.5,1.5 + parent: 325 + - uid: 15 + components: + - type: Transform + pos: -1.5,2.5 + parent: 325 + - uid: 16 + components: + - type: Transform + pos: -0.5,2.5 + parent: 325 + - uid: 17 + components: + - type: Transform + pos: 0.5,2.5 + parent: 325 + - uid: 18 + components: + - type: Transform + pos: 0.5,1.5 + parent: 325 + - uid: 26 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 325 + - uid: 42 + components: + - type: Transform + pos: 1.5,-4.5 + parent: 325 + - uid: 70 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 325 + - uid: 71 + components: + - type: Transform + pos: -2.5,-4.5 + parent: 325 + - uid: 72 + components: + - type: Transform + pos: -2.5,-5.5 + parent: 325 +- proto: RemoteSignaller + entities: + - uid: 176 + components: + - type: Transform + pos: 1.3427892,-2.379079 + parent: 325 + - type: Physics + canCollide: False +- proto: SheetGlass1 + entities: + - uid: 244 + components: + - type: Transform + parent: 58 + - type: Stack + count: 2 + - type: Physics + canCollide: False +- proto: SheetSteel1 + entities: + - uid: 255 + components: + - type: Transform + parent: 95 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 262 + components: + - type: Transform + parent: 96 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 269 + components: + - type: Transform + parent: 97 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 276 + components: + - type: Transform + parent: 98 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 283 + components: + - type: Transform + parent: 99 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 290 + components: + - type: Transform + parent: 100 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 297 + components: + - type: Transform + parent: 101 + - type: Stack + count: 5 + - type: Physics + canCollide: False + - uid: 304 + components: + - type: Transform + parent: 102 + - type: Stack + count: 5 + - type: Physics + canCollide: False +- proto: SignalButton + entities: + - uid: 205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 325 + - type: DeviceLinkSource + linkedPorts: + 193: + - Pressed: Toggle + 192: + - Pressed: Toggle + 190: + - Pressed: Toggle + 191: + - Pressed: Toggle + 196: + - Pressed: Toggle + 202: + - Pressed: Toggle + 201: + - Pressed: Toggle + 200: + - Pressed: Toggle + 199: + - Pressed: Toggle + 198: + - Pressed: Toggle +- proto: SignSpace + entities: + - uid: 230 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 325 +- proto: SoapSyndie + entities: + - uid: 90 + components: + - type: Transform + pos: 0.5436061,-7.5129323 + parent: 325 +- proto: SpawnPointNukies + entities: + - uid: 322 + components: + - type: Transform + pos: -0.5,-4.5 + parent: 325 +- proto: StealthBox + entities: + - uid: 106 + components: + - type: Transform + pos: 0.49860507,-2.4513345 + parent: 325 + - type: Stealth + enabled: False + - type: EntityStorage + open: True +- proto: SubstationWallBasic + entities: + - uid: 103 + components: + - type: Transform + pos: -1.5,-6.5 + parent: 325 + - type: PowerNetworkBattery + loadingNetworkDemand: 15106.935 + currentReceiving: 15105.06 + currentSupply: 15106.935 + supplyRampPosition: 1.875 +- proto: SuitStorageSyndie + entities: + - uid: 67 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 325 +- proto: SyndicateCommsComputerCircuitboard + entities: + - uid: 246 + components: + - type: Transform + parent: 65 + - type: Physics + canCollide: False +- proto: SyndicateComputerComms + entities: + - uid: 65 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,0.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 246 +- proto: SyndicateIDCard + entities: + - uid: 324 + components: + - type: Transform + pos: 1.57673,-2.3849022 + parent: 325 +- proto: SyndicateShuttleConsoleCircuitboard + entities: + - uid: 245 + components: + - type: Transform + parent: 64 + - type: Physics + canCollide: False +- proto: Table + entities: + - uid: 165 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 325 +- proto: TableWood + entities: + - uid: 45 + components: + - type: Transform + pos: -1.5,-5.5 + parent: 325 +- proto: Thruster + entities: + - uid: 95 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-9.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 249 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 250 + - 251 + - 252 + - 253 + - 254 + - 255 + - uid: 96 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-9.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 256 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 257 + - 258 + - 259 + - 260 + - 261 + - 262 + - uid: 97 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 263 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 264 + - 265 + - 266 + - 267 + - 268 + - 269 + - uid: 98 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 270 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 271 + - 272 + - 273 + - 274 + - 275 + - 276 + - uid: 99 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 277 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 278 + - 279 + - 280 + - 281 + - 282 + - 283 + - uid: 100 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-5.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 284 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 285 + - 286 + - 287 + - 288 + - 289 + - 290 + - uid: 101 + components: + - type: Transform + pos: -3.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 291 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 292 + - 293 + - 294 + - 295 + - 296 + - 297 + - uid: 102 components: - type: Transform - pos: 3.5,1.5 - parent: 1 -- proto: SyndieDisasterVictimSpawner + pos: 2.5,1.5 + parent: 325 + - type: ContainerContainer + containers: + machine_board: !type:Container + showEnts: False + occludes: True + ents: + - 298 + machine_parts: !type:Container + showEnts: False + occludes: True + ents: + - 299 + - 300 + - 301 + - 302 + - 303 + - 304 +- proto: ThrusterMachineCircuitboard entities: - - uid: 89 - components: - - type: Transform - pos: -1.5,1.5 - parent: 1 - - uid: 90 + - uid: 249 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 91 + parent: 95 + - type: Physics + canCollide: False + - uid: 256 components: - type: Transform - pos: 2.5,1.5 - parent: 1 -- proto: TableGlass - entities: - - uid: 163 + parent: 96 + - type: Physics + canCollide: False + - uid: 263 components: - type: Transform - pos: -0.5,1.5 - parent: 1 -- proto: Thruster - entities: - - uid: 103 + parent: 97 + - type: Physics + canCollide: False + - uid: 270 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.5,-3.5 - parent: 1 - - uid: 104 + parent: 98 + - type: Physics + canCollide: False + - uid: 277 components: - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-3.5 - parent: 1 - - uid: 105 + parent: 99 + - type: Physics + canCollide: False + - uid: 284 components: - type: Transform - rot: 3.141592653589793 rad - pos: 1.5,-3.5 - parent: 1 - - uid: 106 + parent: 100 + - type: Physics + canCollide: False + - uid: 291 components: - type: Transform - rot: 3.141592653589793 rad - pos: -2.5,-1.5 - parent: 1 - - uid: 107 + parent: 101 + - type: Physics + canCollide: False + - uid: 298 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,-1.5 - parent: 1 + parent: 102 + - type: Physics + canCollide: False - proto: ToolboxSyndicateFilled entities: - - uid: 96 + - uid: 177 components: - type: Transform - parent: 92 + pos: 1.5699697,-0.44908836 + parent: 325 - type: Physics canCollide: False - - type: InsideEntityStorage -- proto: VendingMachineTankDispenserEVA +- proto: ToyFigurineNukie entities: - - uid: 108 + - uid: 10 components: - type: Transform - pos: -0.5,-0.5 - parent: 1 + pos: -2.3371089,-2.140279 + parent: 325 +- proto: VendingMachineSyndieDrobe + entities: + - uid: 163 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 325 - proto: WallPlastitanium entities: - - uid: 109 + - uid: 7 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-0.5 - parent: 1 - - uid: 110 + pos: -2.5,0.5 + parent: 325 + - uid: 8 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,1.5 - parent: 1 - - uid: 111 + pos: -3.5,0.5 + parent: 325 + - uid: 9 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,5.5 - parent: 1 - - uid: 112 + pos: -3.5,-0.5 + parent: 325 + - uid: 11 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,6.5 - parent: 1 - - uid: 113 + pos: 1.5,0.5 + parent: 325 + - uid: 12 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,3.5 - parent: 1 - - uid: 114 + pos: 2.5,0.5 + parent: 325 + - uid: 13 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-0.5 - parent: 1 - - uid: 115 + pos: -4.5,-0.5 + parent: 325 + - uid: 22 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,2.5 - parent: 1 - - uid: 116 + pos: 3.5,-0.5 + parent: 325 + - uid: 25 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,2.5 - parent: 1 - - uid: 117 + pos: 3.5,-2.5 + parent: 325 + - uid: 27 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,1.5 - parent: 1 - - uid: 118 + pos: -3.5,-2.5 + parent: 325 + - uid: 28 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-0.5 - parent: 1 - - uid: 119 + pos: -3.5,-6.5 + parent: 325 + - uid: 29 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,3.5 - parent: 1 - - uid: 120 + pos: 2.5,-6.5 + parent: 325 + - uid: 30 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,-0.5 - parent: 1 - - uid: 121 + pos: -2.5,-6.5 + parent: 325 + - uid: 31 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,3.5 - parent: 1 - - uid: 122 + pos: -3.5,-8.5 + parent: 325 + - uid: 32 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,1.5 - parent: 1 - - uid: 123 + pos: -2.5,-8.5 + parent: 325 + - uid: 33 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,4.5 - parent: 1 - - uid: 124 + pos: 1.5,-6.5 + parent: 325 + - uid: 34 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,1.5 - parent: 1 - - uid: 125 + pos: 1.5,-3.5 + parent: 325 + - uid: 35 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,-1.5 - parent: 1 - - uid: 126 + pos: -2.5,-9.5 + parent: 325 + - uid: 36 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,1.5 - parent: 1 - - uid: 127 + pos: 1.5,-8.5 + parent: 325 + - uid: 37 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,5.5 - parent: 1 - - uid: 128 + pos: 1.5,-9.5 + parent: 325 + - uid: 38 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,2.5 - parent: 1 - - uid: 129 + pos: -4.5,-2.5 + parent: 325 + - uid: 39 components: - type: Transform rot: -1.5707963267948966 rad - pos: -3.5,-1.5 - parent: 1 - - uid: 130 + pos: 2.5,-3.5 + parent: 325 + - uid: 44 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,3.5 - parent: 1 - - uid: 131 + pos: 2.5,-8.5 + parent: 325 + - uid: 48 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,4.5 - parent: 1 - - uid: 132 + pos: 2.5,-7.5 + parent: 325 + - uid: 49 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,6.5 - parent: 1 - - uid: 133 + pos: -3.5,-7.5 + parent: 325 + - uid: 54 components: - type: Transform rot: -1.5707963267948966 rad - pos: -4.5,2.5 - parent: 1 - - uid: 134 + pos: -2.5,-3.5 + parent: 325 + - uid: 55 components: - type: Transform rot: -1.5707963267948966 rad - pos: 3.5,1.5 - parent: 1 - - uid: 135 + pos: -3.5,-3.5 + parent: 325 + - uid: 60 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-1.5 - parent: 1 - - uid: 136 + rot: 3.141592653589793 rad + pos: -1.5,-6.5 + parent: 325 + - uid: 61 components: - type: Transform - pos: -0.5,-2.5 - parent: 1 - - uid: 137 + rot: 3.141592653589793 rad + pos: 0.5,-6.5 + parent: 325 + - uid: 62 components: - type: Transform - pos: 0.5,-2.5 - parent: 1 - - uid: 138 + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 325 + - uid: 63 components: - type: Transform - pos: 1.5,-2.5 - parent: 1 - - uid: 139 + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 325 + - uid: 66 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,-1.5 - parent: 1 - - uid: 140 + pos: 0.5,-9.5 + parent: 325 + - uid: 69 components: - type: Transform - pos: 3.5,-0.5 - parent: 1 - - uid: 141 + pos: -2.5,1.5 + parent: 325 + - uid: 73 components: - type: Transform - pos: -2.5,-0.5 - parent: 1 - - uid: 142 + pos: 1.5,1.5 + parent: 325 + - uid: 80 components: - type: Transform - pos: -3.5,-2.5 - parent: 1 - - uid: 143 + pos: 2.5,-2.5 + parent: 325 + - uid: 81 components: - type: Transform - pos: 4.5,-2.5 - parent: 1 -- proto: WallPlastitaniumDiagonal - entities: - - uid: 144 + pos: 2.5,-0.5 + parent: 325 + - uid: 92 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,1.5 - parent: 1 - - uid: 145 + pos: -1.5,-9.5 + parent: 325 + - uid: 108 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,-0.5 - parent: 1 - - uid: 146 + pos: -0.5,-9.5 + parent: 325 +- proto: WallPlastitaniumDiagonal + entities: + - uid: 23 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,-1.5 - parent: 1 - - uid: 147 + pos: -4.5,0.5 + parent: 325 + - uid: 43 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,4.5 - parent: 1 - - uid: 148 - components: - - type: Transform - pos: -3.5,7.5 - parent: 1 - - uid: 149 - components: - - type: Transform - pos: -4.5,4.5 - parent: 1 - - uid: 150 + pos: 3.5,0.5 + parent: 325 + - uid: 68 components: - type: Transform rot: -1.5707963267948966 rad - pos: 4.5,7.5 - parent: 1 - - uid: 151 - components: - - type: Transform - pos: -5.5,1.5 - parent: 1 - - uid: 152 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 6.5,-0.5 - parent: 1 - - uid: 153 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-1.5 - parent: 1 - - uid: 154 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-2.5 - parent: 1 - - uid: 155 + pos: 1.5,2.5 + parent: 325 + - uid: 79 components: - type: Transform rot: 1.5707963267948966 rad - pos: -1.5,-2.5 - parent: 1 - - uid: 156 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,-0.5 - parent: 1 - - uid: 157 - components: - - type: Transform - pos: 2.5,-0.5 - parent: 1 - - uid: 158 + pos: -4.5,-3.5 + parent: 325 + - uid: 82 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-1.5 - parent: 1 - - uid: 159 + rot: 3.141592653589793 rad + pos: 3.5,-3.5 + parent: 325 + - uid: 86 components: - type: Transform - pos: 1.5,-1.5 - parent: 1 - - uid: 160 + pos: -2.5,2.5 + parent: 325 +- proto: WindoorSecure + entities: + - uid: 166 components: - type: Transform rot: 1.5707963267948966 rad - pos: -3.5,-3.5 - parent: 1 - - uid: 161 + pos: -3.5,-1.5 + parent: 325 + - uid: 206 components: - type: Transform rot: 3.141592653589793 rad - pos: 4.5,-3.5 - parent: 1 + pos: -0.5,-0.5 + parent: 325 + - type: ContainerContainer + containers: + board: !type:Container + showEnts: False + occludes: True + ents: + - 346 ... diff --git a/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml index 7b6812c493..eab4520910 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml @@ -169,16 +169,18 @@ entities: - type: Transform pos: 2.5,-1.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 5 components: - type: Transform + rot: -1.5707963267948966 rad pos: -3.5,-4.5 parent: 1 - uid: 6 components: - type: Transform + rot: -1.5707963267948966 rad pos: -3.5,-0.5 parent: 1 - proto: BarSignMaidCafe @@ -196,9 +198,6 @@ entities: - type: Transform pos: -0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 161 - proto: Bucket entities: - uid: 9 @@ -1017,7 +1016,7 @@ entities: - uid: 115 components: - type: Transform - pos: -2.4682944,-0.4437158 + pos: -2.4622643,-0.46992433 parent: 1 - proto: GeneratorWallmountAPU entities: @@ -1349,33 +1348,21 @@ entities: - type: Transform pos: -0.5,-4.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - uid: 150 components: - type: Transform pos: -0.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - uid: 151 components: - type: Transform pos: -0.5,-5.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - uid: 152 components: - type: Transform pos: -3.5,-4.5 parent: 1 - - type: DeviceLinkSink - links: - - 160 - proto: ShuttleWindow entities: - uid: 153 @@ -1459,7 +1446,7 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-6.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 164 components: diff --git a/Resources/Maps/Shuttles/arrivals.yml b/Resources/Maps/Shuttles/arrivals.yml index 2fe16cd303..b4609e1b0a 100644 --- a/Resources/Maps/Shuttles/arrivals.yml +++ b/Resources/Maps/Shuttles/arrivals.yml @@ -199,8 +199,6 @@ entities: - type: Transform pos: -1.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: AirlockCommandGlassLocked entities: - uid: 278 @@ -218,24 +216,48 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-2.5 parent: 292 + - type: Door + secondsUntilStateChange: -336.60016 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 178 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,4.5 parent: 292 + - type: Door + secondsUntilStateChange: -338.3335 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 179 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 292 + - type: Door + secondsUntilStateChange: -332.80017 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - uid: 180 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,-2.5 parent: 292 + - type: Door + secondsUntilStateChange: -334.70016 + state: Opening + - type: DeviceLinkSource + lastSignals: + DoorStatus: True - proto: APCBasic entities: - uid: 116 @@ -256,26 +278,30 @@ entities: - type: Transform pos: 3.5,3.5 parent: 292 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 164 components: - type: Transform - pos: 3.5,-2.5 + rot: -1.5707963267948966 rad + pos: -4.5,4.5 parent: 292 - uid: 165 components: - type: Transform + rot: 1.5707963267948966 rad pos: 3.5,4.5 parent: 292 - uid: 166 components: - type: Transform - pos: -4.5,4.5 + rot: 1.5707963267948966 rad + pos: 3.5,-2.5 parent: 292 - uid: 167 components: - type: Transform + rot: -1.5707963267948966 rad pos: -4.5,-2.5 parent: 292 - proto: BlockGameArcade @@ -997,6 +1023,22 @@ entities: - type: Transform pos: 2.5,5.5 parent: 292 + - type: GroupExamine + group: + - hoverMessage: "" + contextText: verb-examine-group-other + icon: /Textures/Interface/examine-star.png + components: + - Armor + - ClothingSpeedModifier + entries: + - message: >- + It provides the following protection: + + - [color=orange]Explosion[/color] damage [color=white]to contents[/color] reduced by [color=lightblue]10%[/color]. + priority: 0 + component: Armor + title: null - proto: ClothingMaskBreath entities: - uid: 272 @@ -1049,8 +1091,6 @@ entities: - type: Transform pos: -0.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GasPipeBend entities: - uid: 182 @@ -1221,8 +1261,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,7.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GasVentPump entities: - uid: 212 @@ -1230,16 +1268,12 @@ entities: - type: Transform pos: -0.5,-2.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - uid: 213 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,4.5 parent: 292 - - type: AtmosDevice - joinedGrid: 292 - proto: GeneratorBasic15kW entities: - uid: 114 diff --git a/Resources/Maps/Shuttles/briggle.yml b/Resources/Maps/Shuttles/briggle.yml index 4778896e02..0a7646393a 100644 --- a/Resources/Maps/Shuttles/briggle.yml +++ b/Resources/Maps/Shuttles/briggle.yml @@ -143,12 +143,12 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 1 - - type: Door - secondsUntilStateChange: -81.781815 - state: Opening - type: DeviceLinkSource lastSignals: DoorStatus: True + - type: Door + secondsUntilStateChange: -347.64847 + state: Opening - proto: AirlockSecurityGlassLocked entities: - uid: 73 @@ -170,9 +170,9 @@ entities: - type: Transform pos: -0.5,-7.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 83 + - uid: 57 components: - type: Transform pos: 0.5,-10.5 @@ -829,6 +829,14 @@ entities: Glip Glorp, NanoTrasen Motorpool Division +- proto: PlushieRouny + entities: + - uid: 83 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.53599805,-6.526394 + parent: 1 - proto: PortableGeneratorPacman entities: - uid: 41 diff --git a/Resources/Maps/Shuttles/cargo.yml b/Resources/Maps/Shuttles/cargo.yml index d8f3976e81..dab78a0102 100644 --- a/Resources/Maps/Shuttles/cargo.yml +++ b/Resources/Maps/Shuttles/cargo.yml @@ -166,8 +166,6 @@ entities: - type: Transform pos: -3.5,-1.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: AirlockGlassShuttle entities: - uid: 45 @@ -201,27 +199,31 @@ entities: - type: Transform pos: -0.5,6.5 parent: 173 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 168 components: - type: Transform - pos: -5.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 173 - uid: 169 components: - type: Transform - pos: -5.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,3.5 parent: 173 - uid: 170 components: - type: Transform - pos: 0.5,3.5 + rot: 1.5707963267948966 rad + pos: 0.5,1.5 parent: 173 - uid: 171 components: - type: Transform - pos: 0.5,1.5 + rot: -1.5707963267948966 rad + pos: -5.5,1.5 parent: 173 - proto: BlastDoor entities: @@ -230,33 +232,21 @@ entities: - type: Transform pos: 0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 57 - uid: 3 components: - type: Transform pos: -5.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 55 - uid: 54 components: - type: Transform pos: 0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 58 - uid: 56 components: - type: Transform pos: -5.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 2 - proto: CableApcExtension entities: - uid: 100 @@ -606,108 +596,72 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 39 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 40 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 36 - uid: 41 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 42 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 43 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 34 - uid: 46 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - uid: 47 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 48 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 49 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,4.5 parent: 173 - - type: DeviceLinkSink - links: - - 37 - uid: 51 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - uid: 167 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,0.5 parent: 173 - - type: DeviceLinkSink - links: - - 35 - proto: GasPipeBend entities: - uid: 134 @@ -744,8 +698,6 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,-1.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: GasVentPump entities: - uid: 138 @@ -753,8 +705,6 @@ entities: - type: Transform pos: -2.5,2.5 parent: 173 - - type: AtmosDevice - joinedGrid: 173 - proto: GeneratorBasic15kW entities: - uid: 83 diff --git a/Resources/Maps/Shuttles/cargo_core.yml b/Resources/Maps/Shuttles/cargo_core.yml index 0c495835b9..dcbd4a972c 100644 --- a/Resources/Maps/Shuttles/cargo_core.yml +++ b/Resources/Maps/Shuttles/cargo_core.yml @@ -169,8 +169,6 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: AirCanister entities: - uid: 147 @@ -181,8 +179,6 @@ entities: parent: 2 - type: Physics bodyType: Static - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockGlassShuttle entities: - uid: 131 @@ -205,22 +201,26 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-7.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 139 + - uid: 29 components: - type: Transform - pos: -0.5,-2.5 + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 parent: 2 - - uid: 140 + - uid: 141 components: - type: Transform - pos: -0.5,-1.5 + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 parent: 2 - - uid: 141 +- proto: AtmosDeviceFanTiny + entities: + - uid: 140 components: - type: Transform - pos: -0.5,-4.5 + pos: -0.5,-1.5 parent: 2 - uid: 142 components: @@ -234,17 +234,11 @@ entities: - type: Transform pos: -0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 137 - uid: 136 components: - type: Transform pos: -0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 138 - proto: CableApcExtension entities: - uid: 104 @@ -588,36 +582,24 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 152 - uid: 75 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-5.5 parent: 2 - - type: DeviceLinkSink - links: - - 152 - uid: 76 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 151 - uid: 77 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-1.5 parent: 2 - - type: DeviceLinkSink - links: - - 151 - proto: GasPassiveVent entities: - uid: 143 @@ -625,8 +607,6 @@ entities: - type: Transform pos: -0.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 148 @@ -651,8 +631,6 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,-6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPressurePump entities: - uid: 150 @@ -661,8 +639,6 @@ entities: rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 95 @@ -671,8 +647,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentScrubber entities: - uid: 144 @@ -681,8 +655,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorBasic15kW entities: - uid: 96 @@ -838,12 +810,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-3.5 parent: 2 - - uid: 29 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-4.5 - parent: 2 - uid: 30 components: - type: Transform @@ -856,6 +822,12 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-3.5 parent: 2 + - uid: 139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-4.5 + parent: 2 - proto: SignalButton entities: - uid: 137 diff --git a/Resources/Maps/Shuttles/cargo_fland.yml b/Resources/Maps/Shuttles/cargo_fland.yml index e91e228e5c..7a48231abb 100644 --- a/Resources/Maps/Shuttles/cargo_fland.yml +++ b/Resources/Maps/Shuttles/cargo_fland.yml @@ -183,8 +183,6 @@ entities: - type: Transform pos: 4.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: Lock locked: True - proto: AirlockGlassShuttle @@ -196,7 +194,7 @@ entities: pos: 0.5,0.5 parent: 1 - type: Door - secondsUntilStateChange: -4823.494 + secondsUntilStateChange: -4923.5425 state: Opening - uid: 51 components: @@ -205,7 +203,7 @@ entities: pos: 0.5,2.5 parent: 1 - type: Door - secondsUntilStateChange: -4822.5273 + secondsUntilStateChange: -4922.5757 state: Opening - uid: 52 components: @@ -214,7 +212,7 @@ entities: pos: 6.5,2.5 parent: 1 - type: Door - secondsUntilStateChange: -4821.5938 + secondsUntilStateChange: -4921.642 state: Opening - uid: 53 components: @@ -223,7 +221,7 @@ entities: pos: 6.5,0.5 parent: 1 - type: Door - secondsUntilStateChange: -4836.5938 + secondsUntilStateChange: -4936.642 state: Opening - proto: APCBasic entities: @@ -233,27 +231,31 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-3.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 158 components: - type: Transform - pos: 0.5,0.5 + rot: 1.5707963267948966 rad + pos: 6.5,2.5 parent: 1 - uid: 159 components: - type: Transform - pos: 0.5,2.5 + rot: 1.5707963267948966 rad + pos: 6.5,0.5 parent: 1 - uid: 160 components: - type: Transform - pos: 6.5,2.5 + rot: -1.5707963267948966 rad + pos: 0.5,0.5 parent: 1 - uid: 161 components: - type: Transform - pos: 6.5,0.5 + rot: -1.5707963267948966 rad + pos: 0.5,2.5 parent: 1 - proto: BlastDoor entities: @@ -262,33 +264,21 @@ entities: - type: Transform pos: 0.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 145 - uid: 90 components: - type: Transform pos: 0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 145 - uid: 99 components: - type: Transform pos: 6.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 43 - uid: 100 components: - type: Transform pos: 6.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 43 - proto: CableApcExtension entities: - uid: 124 @@ -610,72 +600,48 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 92 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 93 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 94 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,-0.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 95 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 96 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 87 - uid: 97 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - uid: 98 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,3.5 parent: 1 - - type: DeviceLinkSink - links: - - 88 - proto: DisposalPipe entities: - uid: 83 @@ -777,8 +743,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentPump entities: - uid: 115 @@ -787,16 +751,12 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 168 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GeneratorBasic15kW entities: - uid: 106 diff --git a/Resources/Maps/Shuttles/dart.yml b/Resources/Maps/Shuttles/dart.yml index c44dfe890d..a3c552b84a 100644 --- a/Resources/Maps/Shuttles/dart.yml +++ b/Resources/Maps/Shuttles/dart.yml @@ -838,22 +838,16 @@ entities: - type: Transform pos: 2.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 127 components: - type: Transform pos: 2.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 128 components: - type: Transform pos: 2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: AirlockAtmosphericsLocked entities: - uid: 419 @@ -933,12 +927,6 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-1.5 parent: 1 - - uid: 414 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,-0.5 - parent: 1 - uid: 415 components: - type: Transform @@ -957,6 +945,12 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-2.5 parent: 1 + - uid: 813 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-0.5 + parent: 1 - proto: AirlockGlass entities: - uid: 73 @@ -1008,37 +1002,43 @@ entities: rot: 3.141592653589793 rad pos: -1.5,4.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 808 + - uid: 414 components: - type: Transform - pos: -9.5,-0.5 + rot: -1.5707963267948966 rad + pos: -9.5,-2.5 parent: 1 - - uid: 809 + - uid: 808 components: - type: Transform + rot: -1.5707963267948966 rad pos: -9.5,-1.5 parent: 1 - - uid: 810 + - uid: 809 components: - type: Transform - pos: -9.5,-2.5 + rot: -1.5707963267948966 rad + pos: -9.5,-0.5 parent: 1 - - uid: 811 + - uid: 810 components: - type: Transform - pos: 8.5,-0.5 + rot: 1.5707963267948966 rad + pos: 8.5,-2.5 parent: 1 - - uid: 812 + - uid: 811 components: - type: Transform + rot: 1.5707963267948966 rad pos: 8.5,-1.5 parent: 1 - - uid: 813 + - uid: 812 components: - type: Transform - pos: 8.5,-2.5 + rot: 1.5707963267948966 rad + pos: 8.5,-0.5 parent: 1 - proto: AtmosFixNitrogenMarker entities: @@ -1099,89 +1099,56 @@ entities: - type: Transform pos: -5.5,-9.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 807 components: - type: Transform pos: -5.5,-14.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 816 components: - type: Transform pos: -5.5,-8.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - uid: 817 components: - type: Transform pos: -0.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 818 components: - type: Transform pos: 0.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 819 components: - type: Transform pos: 4.5,-14.5 parent: 1 - - type: DeviceLinkSink - links: - - 822 - uid: 820 components: - type: Transform pos: 4.5,-8.5 parent: 1 - - type: DeviceLinkSink - links: - - 769 - uid: 821 components: - type: Transform pos: -1.5,-18.5 parent: 1 - - type: DeviceLinkSink - links: - - 823 - uid: 824 components: - type: Transform pos: 4.5,-9.5 parent: 1 - - type: DeviceLinkSink - links: - - 769 - uid: 825 components: - type: Transform pos: 4.5,-13.5 parent: 1 - - type: DeviceLinkSink - links: - - 822 - uid: 826 components: - type: Transform pos: -5.5,-13.5 parent: 1 - - type: DeviceLinkSink - links: - - 111 - proto: BoozeDispenser entities: - uid: 444 @@ -2700,13 +2667,6 @@ entities: - type: Transform pos: -3.882896,-2.509187 parent: 1 -- proto: chem_master - entities: - - uid: 891 - components: - - type: Transform - pos: -3.5,-4.5 - parent: 1 - proto: ChemDispenser entities: - uid: 783 @@ -2721,6 +2681,13 @@ entities: - type: Transform pos: -4.5,-5.5 parent: 1 +- proto: ChemMaster + entities: + - uid: 891 + components: + - type: Transform + pos: -3.5,-4.5 + parent: 1 - proto: CloningPod entities: - uid: 926 @@ -2728,9 +2695,6 @@ entities: - type: Transform pos: -4.5,2.5 parent: 1 - - type: DeviceLinkSink - links: - - 927 - proto: ClosetFireFilled entities: - uid: 194 @@ -3208,8 +3172,6 @@ entities: - type: Transform pos: -8.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 734 @@ -3217,8 +3179,6 @@ entities: - type: Transform pos: -8.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixerFlipped entities: - uid: 264 @@ -3229,8 +3189,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasPassiveVent @@ -3241,24 +3199,18 @@ entities: rot: 1.5707963267948966 rad pos: -7.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 259 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 407 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasPipeBend @@ -3904,11 +3856,15 @@ entities: - uid: 289 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 0.5,-5.5 parent: 1 - type: AtmosPipeColor color: '#0055CCFF' + - type: Physics + canCollide: True + bodyType: Dynamic - uid: 291 components: - type: Transform @@ -3989,8 +3945,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 146 @@ -3999,8 +3953,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 151 @@ -4009,8 +3961,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 360 @@ -4019,8 +3969,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 367 @@ -4029,8 +3977,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 368 @@ -4039,8 +3985,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasPressurePump @@ -4053,8 +3997,6 @@ entities: parent: 1 - type: GasPressurePump targetPressure: 4500 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 326 @@ -4062,8 +4004,6 @@ entities: - type: Transform pos: 4.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GasVentPump @@ -4074,8 +4014,6 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 282 @@ -4084,8 +4022,6 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-19.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 283 @@ -4094,8 +4030,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 311 @@ -4104,8 +4038,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 312 @@ -4114,8 +4046,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 313 @@ -4124,8 +4054,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 314 @@ -4134,8 +4062,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 315 @@ -4144,8 +4070,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 316 @@ -4154,8 +4078,6 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 317 @@ -4164,8 +4086,6 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 318 @@ -4174,8 +4094,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 319 @@ -4184,8 +4102,6 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasVentScrubber @@ -4196,8 +4112,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 387 @@ -4205,8 +4119,6 @@ entities: - type: Transform pos: 3.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 405 @@ -4215,8 +4127,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 406 @@ -4225,8 +4135,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - uid: 411 @@ -4234,8 +4142,6 @@ entities: - type: Transform pos: -4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#990000FF' - proto: GeneratorBasic15kW @@ -4583,9 +4489,6 @@ entities: - type: Transform pos: -4.5,0.5 parent: 1 - - type: DeviceLinkSink - links: - - 927 - proto: MegaSprayBottle entities: - uid: 903 @@ -5303,7 +5206,7 @@ entities: - type: Transform pos: -1.5,-7.5 parent: 1 -- proto: SignChemistry1 +- proto: SignChem entities: - uid: 893 components: @@ -5377,7 +5280,7 @@ entities: - type: Transform pos: 2.4920845,-8.564493 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 785 components: @@ -5391,13 +5294,6 @@ entities: - type: Transform pos: 3.5,-9.5 parent: 1 -- proto: SpawnMobDrone - entities: - - uid: 987 - components: - - type: Transform - pos: 2.5,-18.5 - parent: 1 - proto: SpawnMobMedibot entities: - uid: 986 diff --git a/Resources/Maps/Shuttles/emergency.yml b/Resources/Maps/Shuttles/emergency.yml index d2b09201b2..e285d4a5ae 100644 --- a/Resources/Maps/Shuttles/emergency.yml +++ b/Resources/Maps/Shuttles/emergency.yml @@ -202,8 +202,6 @@ entities: - type: Transform pos: -1.5,-3.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: AirlockCommandGlassLocked entities: - uid: 353 @@ -292,47 +290,55 @@ entities: - type: Transform pos: -3.5,0.5 parent: 410 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 395 components: - type: Transform - pos: -7.5,5.5 + rot: -1.5707963267948966 rad + pos: -7.5,7.5 parent: 410 - uid: 396 components: - type: Transform - pos: -7.5,7.5 + rot: -1.5707963267948966 rad + pos: -7.5,-0.5 parent: 410 - uid: 397 components: - type: Transform - pos: 2.5,7.5 + rot: -1.5707963267948966 rad + pos: -7.5,5.5 parent: 410 - uid: 398 components: - type: Transform - pos: 2.5,5.5 + rot: -1.5707963267948966 rad + pos: -7.5,-2.5 parent: 410 - uid: 399 components: - type: Transform - pos: 2.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 410 - uid: 400 components: - type: Transform - pos: 2.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 410 - uid: 401 components: - type: Transform - pos: -7.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,5.5 parent: 410 - uid: 402 components: - type: Transform - pos: -7.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,7.5 parent: 410 - proto: BedsheetMedical entities: @@ -1251,8 +1257,6 @@ entities: - type: Transform pos: -1.5,-2.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasPassiveVent entities: - uid: 270 @@ -1261,8 +1265,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasPipeBend entities: - uid: 291 @@ -1459,8 +1461,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-3.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GasVentPump entities: - uid: 242 @@ -1469,45 +1469,33 @@ entities: rot: 3.141592653589793 rad pos: -5.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 243 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-1.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 244 components: - type: Transform pos: 0.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 245 components: - type: Transform pos: -5.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 246 components: - type: Transform pos: -2.5,12.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - uid: 247 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,6.5 parent: 410 - - type: AtmosDevice - joinedGrid: 410 - proto: GeneratorBasic15kW entities: - uid: 239 diff --git a/Resources/Maps/Shuttles/emergency_box.yml b/Resources/Maps/Shuttles/emergency_box.yml index 3aa6a3f7ea..49d082c995 100644 --- a/Resources/Maps/Shuttles/emergency_box.yml +++ b/Resources/Maps/Shuttles/emergency_box.yml @@ -26,7 +26,7 @@ entities: name: NT Evac Box - type: Transform pos: 0.06253052,0.58707 - parent: 484 + parent: invalid - type: MapGrid chunks: 0,0: @@ -492,18 +492,6 @@ entities: - type: GasTileOverlay - type: RadiationGridResistance - type: NavMap - - uid: 484 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - proto: AirCanister entities: - uid: 526 @@ -612,26 +600,30 @@ entities: rot: 3.141592653589793 rad pos: 15.5,-4.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 484 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,1.5 + parent: 1 - uid: 580 components: - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,9.5 parent: 1 - uid: 581 components: - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,7.5 parent: 1 - uid: 582 components: - type: Transform - pos: 0.5,1.5 - parent: 1 - - uid: 583 - components: - - type: Transform + rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 1 - proto: BookHowToSurvive diff --git a/Resources/Maps/Shuttles/emergency_cluster.yml b/Resources/Maps/Shuttles/emergency_cluster.yml index 3cc14505fe..82f178aaca 100644 --- a/Resources/Maps/Shuttles/emergency_cluster.yml +++ b/Resources/Maps/Shuttles/emergency_cluster.yml @@ -553,38 +553,43 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-18.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 472 components: - type: Transform - pos: 2.5,-7.5 + rot: 1.5707963267948966 rad + pos: 16.5,-7.5 parent: 2 - uid: 473 components: - type: Transform - pos: 2.5,-9.5 + rot: 1.5707963267948966 rad + pos: 16.5,-9.5 parent: 2 - uid: 475 components: - type: Transform - pos: 16.5,-9.5 + rot: -1.5707963267948966 rad + pos: 2.5,-7.5 parent: 2 - uid: 476 components: - type: Transform + rot: 1.5707963267948966 rad pos: 16.5,-15.5 parent: 2 - uid: 477 components: - type: Transform - pos: 16.5,-17.5 + rot: -1.5707963267948966 rad + pos: 2.5,-9.5 parent: 2 - - uid: 586 + - uid: 503 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 16.5,-7.5 + rot: 1.5707963267948966 rad + pos: 16.5,-17.5 parent: 2 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_courser.yml b/Resources/Maps/Shuttles/emergency_courser.yml index f9ff40b8fa..426fe055b4 100644 --- a/Resources/Maps/Shuttles/emergency_courser.yml +++ b/Resources/Maps/Shuttles/emergency_courser.yml @@ -598,55 +598,55 @@ entities: - type: Transform pos: 0.5,10.5 parent: 656 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 621 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,4.5 + rot: 1.5707963267948966 rad + pos: 6.5,2.5 parent: 656 - uid: 622 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,2.5 + rot: 1.5707963267948966 rad + pos: 6.5,4.5 parent: 656 - uid: 623 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-5.5 + rot: 1.5707963267948966 rad + pos: 6.5,-3.5 parent: 656 - uid: 624 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,-3.5 + rot: 1.5707963267948966 rad + pos: 6.5,-5.5 parent: 656 - uid: 625 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,-3.5 + pos: -6.5,-5.5 parent: 656 - uid: 626 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,-5.5 + pos: -6.5,-3.5 parent: 656 - uid: 627 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,2.5 + pos: -6.5,2.5 parent: 656 - uid: 628 components: - type: Transform rot: -1.5707963267948966 rad - pos: 6.5,4.5 + pos: -6.5,4.5 parent: 656 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_delta.yml b/Resources/Maps/Shuttles/emergency_delta.yml index 20419b2872..0c092e2363 100644 --- a/Resources/Maps/Shuttles/emergency_delta.yml +++ b/Resources/Maps/Shuttles/emergency_delta.yml @@ -24,7 +24,7 @@ entities: name: NT Evac Delta - type: Transform pos: -0.5625,0.671875 - parent: 761 + parent: invalid - type: MapGrid chunks: 0,0: @@ -395,18 +395,6 @@ entities: chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance - - uid: 761 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - proto: AirCanister entities: - uid: 326 @@ -610,43 +598,45 @@ entities: - type: Transform pos: -4.5,-17.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 583 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-0.5 + rot: 1.5707963267948966 rad + pos: 2.5,-8.5 parent: 1 - - uid: 658 + - uid: 696 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-19.5 + rot: 1.5707963267948966 rad + pos: 2.5,-10.5 parent: 1 - - uid: 659 + - uid: 761 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,-20.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 1 - - uid: 696 + - uid: 763 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 2.5,-2.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 1 - - uid: 763 +- proto: AtmosDeviceFanTiny + entities: + - uid: 658 components: - type: Transform rot: -1.5707963267948966 rad - pos: 2.5,-8.5 + pos: -5.5,-19.5 parent: 1 - - uid: 764 + - uid: 659 components: - type: Transform rot: -1.5707963267948966 rad - pos: 2.5,-10.5 + pos: -5.5,-20.5 parent: 1 - proto: BorgCharger entities: diff --git a/Resources/Maps/Shuttles/emergency_lox.yml b/Resources/Maps/Shuttles/emergency_lox.yml index 0856b97c38..64455757de 100644 --- a/Resources/Maps/Shuttles/emergency_lox.yml +++ b/Resources/Maps/Shuttles/emergency_lox.yml @@ -850,47 +850,55 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,9.5 parent: 670 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 640 + - uid: 231 components: - type: Transform - pos: -7.5,-2.5 + rot: -1.5707963267948966 rad + pos: -7.5,-0.5 parent: 670 - - uid: 641 + - uid: 232 components: - type: Transform - pos: -7.5,-0.5 + rot: -1.5707963267948966 rad + pos: -7.5,-2.5 parent: 670 - - uid: 642 + - uid: 234 components: - type: Transform - pos: 2.5,-2.5 + rot: -1.5707963267948966 rad + pos: -7.5,7.5 parent: 670 - - uid: 643 + - uid: 240 components: - type: Transform - pos: 2.5,-0.5 + rot: -1.5707963267948966 rad + pos: -7.5,5.5 parent: 670 - - uid: 644 + - uid: 241 components: - type: Transform - pos: 2.5,5.5 + rot: 1.5707963267948966 rad + pos: 2.5,7.5 parent: 670 - - uid: 645 + - uid: 242 components: - type: Transform - pos: 2.5,7.5 + rot: 1.5707963267948966 rad + pos: 2.5,5.5 parent: 670 - - uid: 646 + - uid: 264 components: - type: Transform - pos: -7.5,7.5 + rot: 1.5707963267948966 rad + pos: 2.5,-0.5 parent: 670 - - uid: 647 + - uid: 270 components: - type: Transform - pos: -7.5,5.5 + rot: 1.5707963267948966 rad + pos: 2.5,-2.5 parent: 670 - proto: BedsheetMedical entities: diff --git a/Resources/Maps/Shuttles/emergency_meta.yml b/Resources/Maps/Shuttles/emergency_meta.yml index 091fe6a1f8..ba75195df9 100644 --- a/Resources/Maps/Shuttles/emergency_meta.yml +++ b/Resources/Maps/Shuttles/emergency_meta.yml @@ -669,45 +669,46 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-3.5 parent: 1 - - type: Apc - lastExternalState: Low - lastChargeState: Full - type: PowerNetworkBattery loadingNetworkDemand: 18077 currentReceiving: 18076.947 currentSupply: 18077 supplyRampPosition: 0.052734375 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 928 + - uid: 4 components: - type: Transform - pos: 14.5,1.5 + pos: -2.5,-11.5 parent: 1 - - uid: 929 + - uid: 33 components: - type: Transform - pos: 12.5,1.5 + rot: 3.141592653589793 rad + pos: 4.5,1.5 parent: 1 - - uid: 930 + - uid: 42 components: - type: Transform + rot: 3.141592653589793 rad pos: 6.5,1.5 parent: 1 - - uid: 931 + - uid: 43 components: - type: Transform - pos: 4.5,1.5 + pos: -1.5,-11.5 parent: 1 - - uid: 932 + - uid: 51 components: - type: Transform - pos: -1.5,-11.5 + rot: 3.141592653589793 rad + pos: 12.5,1.5 parent: 1 - - uid: 933 + - uid: 54 components: - type: Transform - pos: -2.5,-11.5 + rot: 3.141592653589793 rad + pos: 14.5,1.5 parent: 1 - proto: BedsheetMedical entities: diff --git a/Resources/Maps/Shuttles/emergency_omega.yml b/Resources/Maps/Shuttles/emergency_omega.yml index ad9c8379da..f22e61ce16 100644 --- a/Resources/Maps/Shuttles/emergency_omega.yml +++ b/Resources/Maps/Shuttles/emergency_omega.yml @@ -808,47 +808,55 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,8.5 parent: 603 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 73 components: - type: Transform - pos: 5.5,3.5 + rot: 1.5707963267948966 rad + pos: 5.5,9.5 parent: 603 - uid: 77 components: - type: Transform - pos: -10.5,9.5 + rot: 1.5707963267948966 rad + pos: 5.5,3.5 parent: 603 - uid: 81 components: - type: Transform - pos: -10.5,1.5 + rot: 1.5707963267948966 rad + pos: 5.5,1.5 parent: 603 - uid: 93 components: - type: Transform - pos: -10.5,11.5 + rot: 1.5707963267948966 rad + pos: 5.5,11.5 parent: 603 - uid: 96 components: - type: Transform - pos: 5.5,1.5 + rot: -1.5707963267948966 rad + pos: -10.5,1.5 parent: 603 - uid: 108 components: - type: Transform - pos: 5.5,11.5 + rot: -1.5707963267948966 rad + pos: -10.5,3.5 parent: 603 - uid: 142 components: - type: Transform - pos: -10.5,3.5 + rot: -1.5707963267948966 rad + pos: -10.5,9.5 parent: 603 - uid: 237 components: - type: Transform - pos: 5.5,9.5 + rot: -1.5707963267948966 rad + pos: -10.5,11.5 parent: 603 - proto: Bed entities: diff --git a/Resources/Maps/Shuttles/emergency_raven.yml b/Resources/Maps/Shuttles/emergency_raven.yml index b7989a49cb..0d7948c234 100644 --- a/Resources/Maps/Shuttles/emergency_raven.yml +++ b/Resources/Maps/Shuttles/emergency_raven.yml @@ -1536,47 +1536,55 @@ entities: - type: Transform pos: 16.5,-21.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 2058 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 - uid: 2443 components: - type: Transform - pos: 0.5,-4.5 + rot: -1.5707963267948966 rad + pos: 0.5,5.5 parent: 1 - uid: 2444 components: - type: Transform - pos: 0.5,-2.5 + rot: -1.5707963267948966 rad + pos: 0.5,-4.5 parent: 1 - uid: 2445 components: - type: Transform - pos: 0.5,3.5 + rot: -1.5707963267948966 rad + pos: 0.5,-2.5 parent: 1 - uid: 2446 components: - type: Transform - pos: 0.5,5.5 + rot: 1.5707963267948966 rad + pos: 22.5,-4.5 parent: 1 - uid: 2447 components: - type: Transform - pos: 22.5,5.5 + rot: 1.5707963267948966 rad + pos: 22.5,-2.5 parent: 1 - uid: 2448 components: - type: Transform + rot: 1.5707963267948966 rad pos: 22.5,3.5 parent: 1 - uid: 2449 components: - type: Transform - pos: 22.5,-2.5 - parent: 1 - - uid: 2450 - components: - - type: Transform - pos: 22.5,-4.5 + rot: 1.5707963267948966 rad + pos: 22.5,5.5 parent: 1 - proto: AtmosFixNitrogenMarker entities: @@ -1677,439 +1685,266 @@ entities: - type: Transform pos: 4.5,10.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2232 components: - type: Transform pos: 4.5,11.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2233 components: - type: Transform pos: 4.5,12.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2234 components: - type: Transform pos: 7.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2235 components: - type: Transform pos: 8.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2236 components: - type: Transform pos: 9.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2237 components: - type: Transform pos: 13.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2238 components: - type: Transform pos: 14.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2239 components: - type: Transform pos: 15.5,15.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2240 components: - type: Transform pos: 18.5,12.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2241 components: - type: Transform pos: 18.5,11.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2242 components: - type: Transform pos: 18.5,10.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2243 components: - type: Transform pos: 13.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2244 components: - type: Transform pos: 14.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2245 components: - type: Transform pos: 9.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2246 components: - type: Transform pos: 8.5,18.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2247 components: - type: Transform pos: 7.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2248 components: - type: Transform pos: 15.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2249 components: - type: Transform pos: 19.5,24.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2250 components: - type: Transform pos: 19.5,25.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2251 components: - type: Transform pos: 19.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2252 components: - type: Transform pos: 18.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2253 components: - type: Transform pos: 18.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2254 components: - type: Transform pos: 17.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2255 components: - type: Transform pos: 16.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2256 components: - type: Transform pos: 16.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2257 components: - type: Transform pos: 15.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2258 components: - type: Transform pos: 14.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2259 components: - type: Transform pos: 13.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2260 components: - type: Transform pos: 12.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2261 components: - type: Transform pos: 11.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2262 components: - type: Transform pos: 10.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2263 components: - type: Transform pos: 9.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2264 components: - type: Transform pos: 8.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2265 components: - type: Transform pos: 7.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2266 components: - type: Transform pos: 6.5,28.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2267 components: - type: Transform pos: 6.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2268 components: - type: Transform pos: 5.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2269 components: - type: Transform pos: 4.5,27.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2270 components: - type: Transform pos: 4.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2271 components: - type: Transform pos: 3.5,26.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2272 components: - type: Transform pos: 3.5,25.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2273 components: - type: Transform pos: 3.5,24.5 parent: 1 - - type: DeviceLinkSink - links: - - 2275 - uid: 2283 components: - type: Transform pos: 12.5,-6.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2284 components: - type: Transform pos: 12.5,-4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2285 components: - type: Transform pos: 15.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2286 components: - type: Transform pos: 16.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2287 components: - type: Transform pos: 17.5,-3.5 parent: 1 - - type: DeviceLinkSink - links: - - 2288 - uid: 2290 components: - type: Transform pos: 10.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2291 components: - type: Transform pos: 11.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2292 components: - type: Transform pos: 12.5,22.5 parent: 1 - - type: DeviceLinkSink - links: - - 2274 - uid: 2451 components: - type: Transform pos: 4.5,9.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - uid: 2452 components: - type: Transform pos: 18.5,9.5 parent: 1 - - type: DeviceLinkSink - links: - - 2276 - - 2277 - proto: BoozeDispenser entities: - uid: 2127 @@ -6694,19 +6529,19 @@ entities: rot: 3.141592653589793 rad pos: 16.5,23.5 parent: 1 -- proto: chem_master +- proto: ChemDispenser entities: - - uid: 1904 + - uid: 1905 components: - type: Transform - pos: 11.5,-4.5 + pos: 10.5,-4.5 parent: 1 -- proto: ChemDispenser +- proto: ChemMaster entities: - - uid: 1905 + - uid: 1904 components: - type: Transform - pos: 10.5,-4.5 + pos: 11.5,-4.5 parent: 1 - proto: CigarGoldCase entities: @@ -8107,8 +7942,6 @@ entities: - type: Transform pos: 8.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMinerOxygen entities: - uid: 1323 @@ -8116,8 +7949,6 @@ entities: - type: Transform pos: 14.5,-26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasMixer entities: - uid: 1324 @@ -8129,8 +7960,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GasPassiveVent @@ -8141,16 +7970,12 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 1376 components: - type: Transform rot: -1.5707963267948966 rad pos: 14.5,-27.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 1380 @@ -10449,8 +10274,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1498 @@ -10458,8 +10281,6 @@ entities: - type: Transform pos: 10.5,-21.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1499 @@ -10468,8 +10289,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1500 @@ -10478,8 +10297,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1501 @@ -10488,8 +10305,6 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1502 @@ -10497,8 +10312,6 @@ entities: - type: Transform pos: 14.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1503 @@ -10507,8 +10320,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1504 @@ -10517,8 +10328,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1505 @@ -10527,8 +10336,6 @@ entities: rot: 3.141592653589793 rad pos: 16.5,-25.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1506 @@ -10536,8 +10343,6 @@ entities: - type: Transform pos: 18.5,-15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1507 @@ -10546,8 +10351,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1508 @@ -10556,8 +10359,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-17.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1509 @@ -10565,8 +10366,6 @@ entities: - type: Transform pos: 4.5,-15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1510 @@ -10575,8 +10374,6 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,-14.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1511 @@ -10585,8 +10382,6 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-14.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1512 @@ -10595,8 +10390,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1513 @@ -10605,8 +10398,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1514 @@ -10615,8 +10406,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1515 @@ -10625,8 +10414,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1516 @@ -10634,8 +10421,6 @@ entities: - type: Transform pos: 6.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1517 @@ -10644,8 +10429,6 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1518 @@ -10654,8 +10437,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1519 @@ -10664,8 +10445,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,-12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1520 @@ -10674,8 +10453,6 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1521 @@ -10684,8 +10461,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-13.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1522 @@ -10694,8 +10469,6 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1523 @@ -10703,8 +10476,6 @@ entities: - type: Transform pos: 11.5,-9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1524 @@ -10712,8 +10483,6 @@ entities: - type: Transform pos: 10.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1525 @@ -10722,8 +10491,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1526 @@ -10732,8 +10499,6 @@ entities: rot: -1.5707963267948966 rad pos: 14.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1589 @@ -10742,8 +10507,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1590 @@ -10752,8 +10515,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1591 @@ -10761,8 +10522,6 @@ entities: - type: Transform pos: 6.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1592 @@ -10770,8 +10529,6 @@ entities: - type: Transform pos: 11.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1593 @@ -10779,8 +10536,6 @@ entities: - type: Transform pos: 16.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1594 @@ -10789,8 +10544,6 @@ entities: rot: 3.141592653589793 rad pos: 6.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1595 @@ -10799,8 +10552,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1596 @@ -10809,8 +10560,6 @@ entities: rot: 3.141592653589793 rad pos: 16.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1597 @@ -10819,8 +10568,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1598 @@ -10829,8 +10576,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1599 @@ -10839,8 +10584,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1600 @@ -10848,8 +10591,6 @@ entities: - type: Transform pos: 11.5,8.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1638 @@ -10858,8 +10599,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1639 @@ -10868,8 +10607,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1640 @@ -10878,8 +10615,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1641 @@ -10888,8 +10623,6 @@ entities: rot: 3.141592653589793 rad pos: 9.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1642 @@ -10898,8 +10631,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1644 @@ -10908,8 +10639,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,12.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1645 @@ -10918,8 +10647,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1646 @@ -10928,8 +10655,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1691 @@ -10938,8 +10663,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1692 @@ -10948,8 +10671,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1693 @@ -10958,8 +10679,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1694 @@ -10968,8 +10687,6 @@ entities: rot: 3.141592653589793 rad pos: 4.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1695 @@ -10978,8 +10695,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1696 @@ -10988,8 +10703,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1697 @@ -10998,8 +10711,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1698 @@ -11008,8 +10719,6 @@ entities: rot: 3.141592653589793 rad pos: 18.5,16.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1699 @@ -11018,8 +10727,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,15.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1700 @@ -11028,8 +10735,6 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1701 @@ -11038,8 +10743,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1738 @@ -11048,8 +10751,6 @@ entities: rot: 3.141592653589793 rad pos: 8.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1739 @@ -11058,8 +10759,6 @@ entities: rot: 3.141592653589793 rad pos: 14.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1741 @@ -11067,8 +10766,6 @@ entities: - type: Transform pos: 8.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1742 @@ -11076,8 +10773,6 @@ entities: - type: Transform pos: 11.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1743 @@ -11085,8 +10780,6 @@ entities: - type: Transform pos: 14.5,26.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1744 @@ -11095,8 +10788,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1745 @@ -11105,8 +10796,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1746 @@ -11115,8 +10804,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,23.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 1747 @@ -11125,8 +10812,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,20.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - uid: 2293 @@ -11135,8 +10820,6 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,24.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - type: AtmosPipeColor color: '#0055CCFF' - proto: GeneratorBasic15kW @@ -12897,41 +12580,26 @@ entities: - type: Transform pos: 9.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2279 components: - type: Transform pos: 10.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2280 components: - type: Transform pos: 11.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2281 components: - type: Transform pos: 12.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - uid: 2282 components: - type: Transform pos: 13.5,4.5 parent: 1 - - type: DeviceLinkSink - links: - - 2289 - proto: ShuttleWindow entities: - uid: 2 @@ -13772,7 +13440,7 @@ entities: - type: Transform pos: 8.5,-21.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 2128 components: diff --git a/Resources/Maps/Shuttles/emergency_rod.yml b/Resources/Maps/Shuttles/emergency_rod.yml index 4235e1d57f..cc9623712d 100644 --- a/Resources/Maps/Shuttles/emergency_rod.yml +++ b/Resources/Maps/Shuttles/emergency_rod.yml @@ -771,8 +771,6 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockCommandLocked entities: - uid: 179 @@ -886,47 +884,55 @@ entities: - type: Transform pos: -4.5,17.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 395 + - uid: 236 components: - type: Transform - pos: -7.5,3.5 + rot: 1.5707963267948966 rad + pos: 4.5,3.5 parent: 2 - - uid: 396 + - uid: 237 components: - type: Transform - pos: -7.5,1.5 + rot: 1.5707963267948966 rad + pos: 4.5,-6.5 parent: 2 - - uid: 397 + - uid: 238 components: - type: Transform - pos: 4.5,3.5 + rot: 1.5707963267948966 rad + pos: 4.5,-4.5 parent: 2 - - uid: 398 + - uid: 239 components: - type: Transform + rot: 1.5707963267948966 rad pos: 4.5,1.5 parent: 2 - - uid: 399 + - uid: 240 components: - type: Transform - pos: 4.5,-4.5 + rot: -1.5707963267948966 rad + pos: -7.5,-6.5 parent: 2 - - uid: 400 + - uid: 241 components: - type: Transform - pos: 4.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,-4.5 parent: 2 - - uid: 401 + - uid: 242 components: - type: Transform - pos: -7.5,-6.5 + rot: -1.5707963267948966 rad + pos: -7.5,1.5 parent: 2 - - uid: 402 + - uid: 243 components: - type: Transform - pos: -7.5,-4.5 + rot: -1.5707963267948966 rad + pos: -7.5,3.5 parent: 2 - proto: BedsheetMedical entities: @@ -947,105 +953,66 @@ entities: - type: Transform pos: -6.5,20.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 706 components: - type: Transform pos: -6.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 707 components: - type: Transform pos: -5.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 708 components: - type: Transform pos: -4.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 709 components: - type: Transform pos: -3.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 710 components: - type: Transform pos: -2.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 711 components: - type: Transform pos: -1.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 712 components: - type: Transform pos: -0.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 713 components: - type: Transform pos: 0.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 714 components: - type: Transform pos: 1.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 715 components: - type: Transform pos: 3.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 716 components: - type: Transform pos: 2.5,21.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - uid: 717 components: - type: Transform pos: 3.5,20.5 parent: 2 - - type: DeviceLinkSink - links: - - 718 - proto: BoozeDispenser entities: - uid: 451 @@ -2466,8 +2433,6 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - uid: 325 @@ -2476,8 +2441,6 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 317 @@ -2910,8 +2873,6 @@ entities: - type: Transform pos: 0.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 413 @@ -2920,60 +2881,44 @@ entities: rot: 3.141592653589793 rad pos: 3.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 414 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 415 components: - type: Transform pos: 3.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 416 components: - type: Transform pos: -6.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 417 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 418 components: - type: Transform rot: 1.5707963267948966 rad pos: -6.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 419 components: - type: Transform pos: 3.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 420 components: - type: Transform pos: -6.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorBasic15kW entities: - uid: 344 @@ -3947,7 +3892,7 @@ entities: - type: Transform pos: -0.5,-10.5 parent: 2 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 450 components: diff --git a/Resources/Maps/Shuttles/emergency_wode.yml b/Resources/Maps/Shuttles/emergency_wode.yml index 7dcd4a60eb..96c75d012a 100644 --- a/Resources/Maps/Shuttles/emergency_wode.yml +++ b/Resources/Maps/Shuttles/emergency_wode.yml @@ -18,26 +18,13 @@ tilemap: entities: - proto: "" entities: - - uid: 1 - components: - - type: MetaData - name: Map Entity - - type: Transform - - type: Map - mapPaused: True - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - - type: LoadedMap - uid: 2 components: - type: MetaData name: NT Evac Wode - type: Transform pos: -0.70836353,-1.958334 - parent: 1 + parent: invalid - type: MapGrid chunks: 0,0: @@ -669,55 +656,55 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,17.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: + - uid: 1 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,11.5 + parent: 2 - uid: 215 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,19.5 + pos: -7.5,9.5 parent: 2 - uid: 216 components: - type: Transform rot: -1.5707963267948966 rad - pos: 5.5,17.5 + pos: -7.5,17.5 parent: 2 - uid: 295 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,9.5 + pos: -7.5,19.5 parent: 2 - uid: 296 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,9.5 + rot: 1.5707963267948966 rad + pos: 5.5,19.5 parent: 2 - uid: 342 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,19.5 + rot: 1.5707963267948966 rad + pos: 5.5,17.5 parent: 2 - uid: 374 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,17.5 + rot: 1.5707963267948966 rad + pos: 5.5,11.5 parent: 2 - uid: 385 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,11.5 - parent: 2 - - uid: 386 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,11.5 + rot: 1.5707963267948966 rad + pos: 5.5,9.5 parent: 2 - proto: BedsheetMedical entities: @@ -2271,7 +2258,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,18.5 parent: 2 - - type: DeviceNetwork - uid: 175 components: - type: Transform diff --git a/Resources/Maps/Shuttles/escape_pod_small.yml b/Resources/Maps/Shuttles/escape_pod_small.yml index d0670f3991..4746f0d297 100644 --- a/Resources/Maps/Shuttles/escape_pod_small.yml +++ b/Resources/Maps/Shuttles/escape_pod_small.yml @@ -121,7 +121,7 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,0.5 parent: 29 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 9 components: diff --git a/Resources/Maps/Shuttles/mining.yml b/Resources/Maps/Shuttles/mining.yml index f8a4f040b9..b72d361f77 100644 --- a/Resources/Maps/Shuttles/mining.yml +++ b/Resources/Maps/Shuttles/mining.yml @@ -564,23 +564,38 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,3.5 parent: 181 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 128 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-3.5 parent: 181 - uid: 129 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-2.5 parent: 181 - uid: 130 components: - type: Transform + rot: -1.5707963267948966 rad pos: -5.5,-1.5 parent: 181 + - uid: 131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,2.5 + parent: 181 + - uid: 133 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,1.5 + parent: 181 - proto: BlastDoorExterior1 entities: - uid: 37 @@ -588,25 +603,16 @@ entities: - type: Transform pos: -5.5,-2.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - uid: 47 components: - type: Transform pos: -5.5,-3.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - uid: 69 components: - type: Transform pos: -5.5,-1.5 parent: 181 - - type: DeviceLinkSink - links: - - 100 - proto: BorgModuleMining entities: - uid: 94 @@ -911,8 +917,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-4.5 parent: 181 - - type: AtmosDevice - joinedGrid: 181 - proto: GasVentPump entities: - uid: 26 @@ -921,8 +925,6 @@ entities: rot: -1.5707963267948966 rad pos: -3.5,-4.5 parent: 181 - - type: AtmosDevice - joinedGrid: 181 - proto: GeneratorBasic entities: - uid: 40 diff --git a/Resources/Maps/Shuttles/pirate.yml b/Resources/Maps/Shuttles/pirate.yml index 8d2912dbda..b0b3929054 100644 --- a/Resources/Maps/Shuttles/pirate.yml +++ b/Resources/Maps/Shuttles/pirate.yml @@ -578,23 +578,25 @@ entities: - type: Transform pos: -0.67882204,3.741016 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 27 components: - type: Transform - rot: 3.141592653589793 rad - pos: 3.5,15.5 + rot: -1.5707963267948966 rad + pos: -11.5,2.5 parent: 1 - uid: 28 components: - type: Transform - pos: -11.5,2.5 + rot: 1.5707963267948966 rad + pos: 8.5,2.5 parent: 1 - uid: 772 components: - type: Transform - pos: 8.5,2.5 + rot: 3.141592653589793 rad + pos: 3.5,15.5 parent: 1 - proto: Bed entities: @@ -2255,8 +2257,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPassiveVent entities: - uid: 329 @@ -2265,40 +2265,30 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 330 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 331 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 332 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 333 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPipeBend entities: - uid: 334 @@ -2725,16 +2715,12 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 406 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasPressurePump entities: - uid: 407 @@ -2743,24 +2729,18 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 408 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 409 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentPump entities: - uid: 410 @@ -2768,94 +2748,70 @@ entities: - type: Transform pos: 2.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 411 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 412 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,7.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 413 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 414 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,2.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 415 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 416 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 417 components: - type: Transform pos: -2.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 418 components: - type: Transform pos: 3.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 419 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,8.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 420 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 421 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GasVentScrubber entities: - uid: 422 @@ -2863,31 +2819,23 @@ entities: - type: Transform pos: 2.5,-4.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 423 components: - type: Transform pos: -6.5,-0.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 424 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,10.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 425 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,9.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: GeneratorBasic15kW entities: - uid: 426 @@ -3156,8 +3104,6 @@ entities: - type: Transform pos: 3.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: OxygenCanister entities: - uid: 470 @@ -3165,36 +3111,26 @@ entities: - type: Transform pos: 1.5,-5.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 471 components: - type: Transform pos: -10.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 472 components: - type: Transform pos: -9.5,6.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 473 components: - type: Transform pos: -4.5,-1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - uid: 474 components: - type: Transform pos: 7.5,1.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: PaperBin5 entities: - uid: 475 @@ -3691,7 +3627,7 @@ entities: - type: Transform pos: -3.5,-1.5 parent: 1 -- proto: soda_dispenser +- proto: SodaDispenser entities: - uid: 549 components: @@ -3797,8 +3733,6 @@ entities: - type: Transform pos: 4.5,-3.5 parent: 1 - - type: AtmosDevice - joinedGrid: 1 - proto: SubstationBasic entities: - uid: 564 diff --git a/Resources/Maps/Shuttles/trading_outpost.yml b/Resources/Maps/Shuttles/trading_outpost.yml index f040d58253..1f61d0725d 100644 --- a/Resources/Maps/Shuttles/trading_outpost.yml +++ b/Resources/Maps/Shuttles/trading_outpost.yml @@ -399,8 +399,6 @@ entities: - 402 - 790 - 789 - - type: AtmosDevice - joinedGrid: 2 - uid: 803 components: - type: Transform @@ -416,8 +414,6 @@ entities: - 411 - 789 - 790 - - type: AtmosDevice - joinedGrid: 2 - uid: 805 components: - type: Transform @@ -433,8 +429,6 @@ entities: - 408 - 783 - 782 - - type: AtmosDevice - joinedGrid: 2 - uid: 806 components: - type: Transform @@ -450,8 +444,6 @@ entities: - 409 - 783 - 782 - - type: AtmosDevice - joinedGrid: 2 - proto: AirCanister entities: - uid: 387 @@ -462,8 +454,6 @@ entities: parent: 2 - type: Physics bodyType: Static - - type: AtmosDevice - joinedGrid: 2 - proto: AirlockCargo entities: - uid: 1 @@ -516,17 +506,17 @@ entities: parent: 2 - proto: AirlockExternalGlassShuttleLocked entities: - - uid: 313 + - uid: 20 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-3.5 + rot: 1.5707963267948966 rad + pos: 13.5,-5.5 parent: 2 - - uid: 560 + - uid: 313 components: - type: Transform rot: -1.5707963267948966 rad - pos: -2.5,-5.5 + pos: -2.5,-3.5 parent: 2 - uid: 562 components: @@ -534,11 +524,11 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-3.5 parent: 2 - - uid: 563 + - uid: 950 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,-5.5 + rot: -1.5707963267948966 rad + pos: -2.5,-5.5 parent: 2 - proto: AirSensor entities: @@ -591,46 +581,54 @@ entities: - type: Transform pos: 2.5,-14.5 parent: 2 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - - uid: 947 + - uid: 560 components: - type: Transform - pos: 13.5,-5.5 + rot: 1.5707963267948966 rad + pos: 13.5,-6.5 parent: 2 - - uid: 948 + - uid: 563 components: - type: Transform + rot: 1.5707963267948966 rad pos: 13.5,-3.5 parent: 2 - - uid: 949 + - uid: 947 components: - type: Transform + rot: 1.5707963267948966 rad pos: 13.5,-2.5 parent: 2 - - uid: 950 + - uid: 948 components: - type: Transform - pos: 13.5,-6.5 + rot: 1.5707963267948966 rad + pos: 13.5,-5.5 parent: 2 - - uid: 951 + - uid: 949 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-6.5 parent: 2 - - uid: 952 + - uid: 951 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-5.5 parent: 2 - - uid: 953 + - uid: 952 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-3.5 parent: 2 - - uid: 954 + - uid: 953 components: - type: Transform + rot: -1.5707963267948966 rad pos: -2.5,-2.5 parent: 2 - proto: BoxFolderClipboard @@ -2745,144 +2743,96 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 82 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 108 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 110 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 329 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 330 components: - type: Transform rot: -1.5707963267948966 rad pos: 13.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 331 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 335 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 337 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 338 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - uid: 339 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 340 components: - type: Transform rot: -1.5707963267948966 rad pos: 13.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 359 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 393 - uid: 362 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 404 - uid: 363 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-2.5 parent: 2 - - type: DeviceLinkSink - links: - - 365 - uid: 364 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-6.5 parent: 2 - - type: DeviceLinkSink - links: - - 366 - proto: ExtinguisherCabinetFilled entities: - uid: 360 @@ -2941,8 +2891,6 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - uid: 397 @@ -2951,16 +2899,12 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 414 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 316 @@ -3534,9 +3478,13 @@ entities: - uid: 511 components: - type: Transform + anchored: False rot: -1.5707963267948966 rad pos: 0.5,5.5 parent: 2 + - type: Physics + canCollide: True + bodyType: Dynamic - uid: 513 components: - type: Transform @@ -3648,8 +3596,6 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 398 @@ -3658,46 +3604,34 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 400 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 401 components: - type: Transform pos: 2.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 402 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 403 components: - type: Transform pos: 8.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 412 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentScrubber entities: - uid: 399 @@ -3706,46 +3640,34 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 408 components: - type: Transform pos: 1.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 409 components: - type: Transform pos: 9.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 410 components: - type: Transform rot: -1.5707963267948966 rad pos: 10.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 411 components: - type: Transform rot: 1.5707963267948966 rad pos: 0.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 413 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GeneratorRTG entities: - uid: 367 @@ -4329,8 +4251,6 @@ entities: - type: Transform pos: 5.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: LiquidOxygenCanister entities: - uid: 384 @@ -4338,8 +4258,6 @@ entities: - type: Transform pos: 4.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: Paper entities: - uid: 775 @@ -4909,49 +4827,31 @@ entities: - type: Transform pos: 1.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 809 components: - type: Transform pos: 2.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 810 components: - type: Transform pos: 3.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 811 components: - type: Transform pos: 7.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 812 components: - type: Transform pos: 8.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - uid: 813 components: - type: Transform pos: 9.5,3.5 parent: 2 - - type: DeviceLinkSink - links: - - 807 - proto: SignalButton entities: - uid: 807 diff --git a/Resources/Maps/Shuttles/wizard.yml b/Resources/Maps/Shuttles/wizard.yml index a46944361d..7bdb8ca83d 100644 --- a/Resources/Maps/Shuttles/wizard.yml +++ b/Resources/Maps/Shuttles/wizard.yml @@ -343,7 +343,6 @@ entities: 74: -9,-3 75: -9,-1 76: 8,-1 - 77: 8,-3 - node: color: '#FFFFFFFF' id: WarnLineN @@ -604,7 +603,7 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,5.5 parent: 768 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 338 components: @@ -615,20 +614,20 @@ entities: - uid: 339 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-2.5 + rot: -1.5707963267948966 rad + pos: -10.5,-2.5 parent: 768 - uid: 340 components: - type: Transform rot: 1.5707963267948966 rad - pos: -10.5,-0.5 + pos: 9.5,-2.5 parent: 768 - uid: 341 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,-2.5 + rot: -1.5707963267948966 rad + pos: -10.5,-0.5 parent: 768 - proto: AtmosFixNitrogenMarker entities: @@ -668,13 +667,6 @@ entities: - type: Transform pos: -1.5,-11.5 parent: 768 -- proto: BookFishing - entities: - - uid: 587 - components: - - type: Transform - pos: 3.5160534,-11.342207 - parent: 768 - proto: BookRandom entities: - uid: 217 @@ -687,6 +679,13 @@ entities: - type: Transform pos: -7.700435,2.7283878 parent: 768 +- proto: BookRandomStory + entities: + - uid: 587 + components: + - type: Transform + pos: 3.5160534,-11.342207 + parent: 768 - proto: BooksBag entities: - uid: 219 @@ -2188,8 +2187,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasMinerOxygen entities: - uid: 248 @@ -2198,8 +2195,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasMixerFlipped entities: - uid: 250 @@ -2211,8 +2206,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.22000003 inletOneConcentration: 0.78 - - type: AtmosDevice - joinedGrid: 768 - proto: GasPassiveVent entities: - uid: 251 @@ -2221,16 +2214,12 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 252 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasPipeBend entities: - uid: 253 @@ -2619,8 +2608,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,-13.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GasVentPump entities: - uid: 261 @@ -2629,109 +2616,81 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-9.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 264 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-14.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 292 components: - type: Transform pos: 5.5,-6.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 293 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-10.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 294 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-10.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 303 components: - type: Transform pos: -0.5,-3.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 327 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 328 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,4.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 329 components: - type: Transform pos: -0.5,8.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 330 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,3.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 331 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,4.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 332 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 333 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-2.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - uid: 362 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-6.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: GeneratorBasic15kW entities: - uid: 358 @@ -3079,8 +3038,6 @@ entities: - type: Transform pos: -9.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: OxygenCanister entities: - uid: 602 @@ -3088,8 +3045,6 @@ entities: - type: Transform pos: -8.5,0.5 parent: 768 - - type: AtmosDevice - joinedGrid: 768 - proto: Paper entities: - uid: 622 From f65f57ef92663fc296a4e855eee53dc46365cb5c Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 26 Aug 2024 22:25:29 +0000 Subject: [PATCH 20/54] 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 9325649c18..66080a8b2e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: stalengd - changes: - - message: Players can now correctly toggle internals on pets. - type: Fix - id: 6717 - time: '2024-06-13T02:17:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28904 - author: Cojoke-dot changes: - message: Tranquilizer Shotguns shells now have a unique sprite @@ -3865,3 +3858,10 @@ id: 7216 time: '2024-08-26T13:00:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31478 +- author: CuteBoi + changes: + - message: Replaced small fans on most shuttles with directional fans. + type: Fix + id: 7217 + time: '2024-08-26T22:24:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31495 From e85c25a7468b4daea7a5f1deb85900a9151651cf Mon Sep 17 00:00:00 2001 From: Mervill Date: Mon, 26 Aug 2024 15:29:44 -0700 Subject: [PATCH 21/54] Replace obsolete functions in NPC systems (#31448) --- Content.Server/NPC/Systems/NPCJukeSystem.cs | 7 ++++--- .../NPC/Systems/NPCSteeringSystem.Context.cs | 12 ++++++------ .../NPC/Systems/NPCSteeringSystem.Obstacles.cs | 2 +- Content.Server/NPC/Systems/NPCSteeringSystem.cs | 1 + 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Content.Server/NPC/Systems/NPCJukeSystem.cs b/Content.Server/NPC/Systems/NPCJukeSystem.cs index 94a30feb0c..1b2f4f5357 100644 --- a/Content.Server/NPC/Systems/NPCJukeSystem.cs +++ b/Content.Server/NPC/Systems/NPCJukeSystem.cs @@ -20,6 +20,7 @@ public sealed class NPCJukeSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly MeleeWeaponSystem _melee = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; private EntityQuery _npcMeleeQuery; @@ -59,7 +60,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt return; } - var currentTile = grid.CoordinatesToTile(args.Transform.Coordinates); + var currentTile = _mapSystem.CoordinatesToTile(args.Transform.GridUid.Value, grid, args.Transform.Coordinates); if (component.TargetTile == null) { @@ -72,7 +73,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt for (var i = 0; i < 8; i++) { var index = (startIndex + i) % 8; - var neighbor = ((Direction) index).ToIntVec() + currentTile; + var neighbor = ((Direction)index).ToIntVec() + currentTile; var valid = true; // TODO: Probably make this a helper on engine maybe @@ -116,7 +117,7 @@ private void OnJukeSteering(EntityUid uid, NPCJukeComponent component, ref NPCSt return; } - var targetCoords = grid.GridTileToWorld(component.TargetTile.Value); + var targetCoords = _mapSystem.GridTileToWorld(args.Transform.GridUid.Value, grid, component.TargetTile.Value); var targetDir = (targetCoords.Position - args.WorldPosition); targetDir = args.OffsetRotation.RotateVec(targetDir); const float weight = 1f; diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs index e0bcb97a11..fa43b3e752 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs @@ -22,7 +22,7 @@ private void ApplySeek(Span interest, Vector2 direction, float weight) if (weight == 0f || direction == Vector2.Zero) return; - var directionAngle = (float) direction.ToAngle().Theta; + var directionAngle = (float)direction.ToAngle().Theta; for (var i = 0; i < InterestDirections; i++) { @@ -166,8 +166,8 @@ private bool TrySeek( } // Check if mapids match. - var targetMap = targetCoordinates.ToMap(EntityManager, _transform); - var ourMap = ourCoordinates.ToMap(EntityManager, _transform); + var targetMap = _transform.ToMapCoordinates(targetCoordinates); + var ourMap = _transform.ToMapCoordinates(ourCoordinates); if (targetMap.MapId != ourMap.MapId) { @@ -258,7 +258,7 @@ private bool TrySeek( return false; } - targetMap = targetCoordinates.ToMap(EntityManager, _transform); + targetMap = _transform.ToMapCoordinates(targetCoordinates); // Can't make it again. if (ourMap.MapId != targetMap.MapId) @@ -429,7 +429,7 @@ public void PrunePath(EntityUid uid, MapCoordinates mapCoordinates, Vector2 dire if (TryComp(uid, out var physics)) { - mask = (CollisionGroup) physics.CollisionMask; + mask = (CollisionGroup)physics.CollisionMask; } for (var i = 0; i < nodes.Count; i++) @@ -439,7 +439,7 @@ public void PrunePath(EntityUid uid, MapCoordinates mapCoordinates, Vector2 dire if (!node.Data.IsFreeSpace) break; - var nodeMap = node.Coordinates.ToMap(EntityManager, _transform); + var nodeMap = _transform.ToMapCoordinates(node.Coordinates); // If any nodes are 'behind us' relative to the target we'll prune them. // This isn't perfect but should fix most cases of stutter stepping. diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs index 3bc4eae9e4..a31c7850f3 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs @@ -207,7 +207,7 @@ private void GetObstacleEntities(PathPoly poly, int mask, int layer, List Date: Mon, 26 Aug 2024 16:06:54 -0700 Subject: [PATCH 22/54] Make guidebook remember where you left off (#31375) * Guidebook tracks last read entry * Persistent guidebook fixes * Persistent guidebook requested changes * Update Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs --------- Co-authored-by: Pieter-Jan Briers --- .../Guidebook/Controls/GuidebookWindow.xaml.cs | 4 ++++ .../Systems/Guidebook/GuidebookUIController.cs | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs index 469b0ed222..de06d85bb0 100644 --- a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs +++ b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml.cs @@ -23,6 +23,8 @@ public sealed partial class GuidebookWindow : FancyWindow, ILinkClickHandler private readonly ISawmill _sawmill; + public ProtoId LastEntry; + public GuidebookWindow() { RobustXamlLoader.Load(this); @@ -90,6 +92,8 @@ private void ShowGuide(GuideEntry entry) _sawmill.Error($"Failed to parse contents of guide document {entry.Id}."); } + + LastEntry = entry.Id; } public void UpdateGuides( diff --git a/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs b/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs index 03ea47827f..702b0a52ac 100644 --- a/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs +++ b/Content.Client/UserInterface/Systems/Guidebook/GuidebookUIController.cs @@ -30,6 +30,7 @@ public sealed class GuidebookUIController : UIController, IOnStateEntered UIManager.GetActiveUIWidgetOrNull()?.GuidebookButton; + private ProtoId? _lastEntry; public void OnStateEntered(LobbyState state) { @@ -142,7 +143,10 @@ private void OnWindowClosed() GuidebookButton.Pressed = false; if (_guideWindow != null) + { _guideWindow.ReturnContainer.Visible = false; + _lastEntry = _guideWindow.LastEntry; + } } private void OnWindowOpen() @@ -176,8 +180,6 @@ public void OpenGuidebook( if (GuidebookButton != null) GuidebookButton.SetClickPressed(!_guideWindow.IsOpen); - selected ??= _configuration.GetCVar(CCVars.DefaultGuide); - if (guides == null) { guides = _prototypeManager.EnumeratePrototypes() @@ -193,6 +195,17 @@ public void OpenGuidebook( } } + if (selected == null) + { + if (_lastEntry is { } lastEntry && guides.ContainsKey(lastEntry)) + { + selected = _lastEntry; + } + else + { + selected = _configuration.GetCVar(CCVars.DefaultGuide); + } + } _guideWindow.UpdateGuides(guides, rootEntries, forceRoot, selected); // Expand up to depth-2. From 7789b07bde4e19ffa149513dbca89012020b615a Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 26 Aug 2024 23:08:00 +0000 Subject: [PATCH 23/54] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 66080a8b2e..0e19f60dcc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: Cojoke-dot - changes: - - message: Tranquilizer Shotguns shells now have a unique sprite - type: Tweak - - message: You now print boxes of Tranquilizer Boxes rather than a single shell - type: Tweak - id: 6718 - time: '2024-06-13T02:17:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28903 - author: Plykiya changes: - message: Gauze continues to heal even when you stop someone's bleeding. @@ -3865,3 +3856,10 @@ id: 7217 time: '2024-08-26T22:24:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31495 +- author: 12rabbits + changes: + - message: The guidebook now remembers where you left off when re-opened. + type: Tweak + id: 7218 + time: '2024-08-26T23:06:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31375 From 76223e8e14e35506e479fa38f20bb449e7d29279 Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Tue, 27 Aug 2024 03:18:10 +0300 Subject: [PATCH 24/54] Remove double-iteration from the mime wall code (#31420) * Remove double-iteration from the mime wall code * Update * Update --- Content.Server/Abilities/Mime/MimePowersSystem.cs | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/Content.Server/Abilities/Mime/MimePowersSystem.cs b/Content.Server/Abilities/Mime/MimePowersSystem.cs index 85230faab0..20889f293c 100644 --- a/Content.Server/Abilities/Mime/MimePowersSystem.cs +++ b/Content.Server/Abilities/Mime/MimePowersSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.Alert; using Content.Shared.Coordinates.Helpers; using Content.Shared.Maps; -using Content.Shared.Mobs.Components; using Content.Shared.Physics; using Robust.Shared.Containers; using Robust.Shared.Map; @@ -19,7 +18,6 @@ public sealed class MimePowersSystem : EntitySystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; - [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; [Dependency] private readonly TurfSystem _turf = default!; [Dependency] private readonly IMapManager _mapMan = default!; [Dependency] private readonly SharedContainerSystem _container = default!; @@ -80,22 +78,13 @@ private void OnInvisibleWall(EntityUid uid, MimePowersComponent component, Invis if (tile == null) return; - // Check there are no walls there - if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable)) + // Check if the tile is blocked by a wall or mob, and don't create the wall if so + if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable | CollisionGroup.Opaque)) { _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-failed"), uid, uid); return; } - // Check there are no mobs there - foreach (var entity in _lookupSystem.GetLocalEntitiesIntersecting(tile.Value, 0f)) - { - if (HasComp(entity) && entity != uid) - { - _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-failed"), uid, uid); - return; - } - } _popupSystem.PopupEntity(Loc.GetString("mime-invisible-wall-popup", ("mime", uid)), uid); // Make sure we set the invisible wall to despawn properly Spawn(component.WallPrototype, _turf.GetTileCenter(tile.Value)); From e345aa333365a8f508a7c521bb693c19fd931053 Mon Sep 17 00:00:00 2001 From: Dimastra <65184747+Dimastra@users.noreply.github.com> Date: Tue, 27 Aug 2024 03:30:42 +0300 Subject: [PATCH 25/54] fix method OnEntityEnter in DamageContactsSystem (#31494) fix Co-authored-by: Dimastra --- Content.Shared/Damage/Systems/DamageContactsSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Damage/Systems/DamageContactsSystem.cs b/Content.Shared/Damage/Systems/DamageContactsSystem.cs index b08ef77fed..3cc73a87c5 100644 --- a/Content.Shared/Damage/Systems/DamageContactsSystem.cs +++ b/Content.Shared/Damage/Systems/DamageContactsSystem.cs @@ -65,7 +65,7 @@ private void OnEntityEnter(EntityUid uid, DamageContactsComponent component, ref if (HasComp(otherUid)) return; - if (_whitelistSystem.IsWhitelistFail(component.IgnoreWhitelist, otherUid)) + if (_whitelistSystem.IsWhitelistPass(component.IgnoreWhitelist, otherUid)) return; var damagedByContact = EnsureComp(otherUid); From 43ae1354c277130e420fdbfd3051199e4e6800b8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 00:31:48 +0000 Subject: [PATCH 26/54] 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 0e19f60dcc..6cbe32faea 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Gauze continues to heal even when you stop someone's bleeding. - type: Fix - id: 6719 - time: '2024-06-13T02:19:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28844 - author: Doomsdrayk changes: - message: Fixed guns appearing to cycle their bolt when wielded. @@ -3863,3 +3856,10 @@ id: 7218 time: '2024-08-26T23:06:54.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31375 +- author: Dimastra + changes: + - message: Fixed meat kudzu not dealing damage. + type: Fix + id: 7219 + time: '2024-08-27T00:30:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31494 From e30090567da2678f056ec0c34fd0ba9201689ed9 Mon Sep 17 00:00:00 2001 From: JIPDawg <51352440+JIPDawg@users.noreply.github.com> Date: Mon, 26 Aug 2024 19:48:04 -0500 Subject: [PATCH 27/54] Make Gas Miners indestructable, anchorable, and pullable. (#31370) * Make miner indestructable, and pullable. * Miners can't be unanchored. Only anchored. --------- Co-authored-by: JIPDawg --- .../Structures/Piping/Atmospherics/miners.yml | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml index 64dd38accb..71e171fc50 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml @@ -11,19 +11,20 @@ - type: Physics canCollide: false - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: .4 + density: 190 + mask: + - MachineMask - type: Transform anchored: true - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Metallic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 100 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] + - type: Anchorable + flags: + - Anchorable + - type: Pullable - type: Sprite sprite: Structures/Piping/Atmospherics/miners.rsi state: miner From 54bfaa1fec0f4d02d9f9fb0dea56c9546b380c7b Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 00:49:10 +0000 Subject: [PATCH 28/54] 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 6cbe32faea..e2753cf7dc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Doomsdrayk - changes: - - message: Fixed guns appearing to cycle their bolt when wielded. - type: Fix - id: 6720 - time: '2024-06-13T06:30:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28756 - author: Doomsdrayk changes: - message: The Drozd and C-20r do not unwield on use again. @@ -3863,3 +3856,10 @@ id: 7219 time: '2024-08-27T00:30:42.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31494 +- author: JIPDawg + changes: + - message: Gas miners are now indestructible, can be pulled and only anchored. + type: Tweak + id: 7220 + time: '2024-08-27T00:48:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31370 From 2f4e2977412b0112b7435994344bd1e3e508f5ce Mon Sep 17 00:00:00 2001 From: Emisse <99158783+Emisse@users.noreply.github.com> Date: Tue, 27 Aug 2024 01:32:19 -0600 Subject: [PATCH 29/54] bagel update (#31502) --- Resources/Maps/bagel.yml | 73 ++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index 0e8cf62a27..c4e69cf20e 100644 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -24,6 +24,7 @@ tilemap: 3: FloorGrayConcrete 2: FloorGrayConcreteMono 56: FloorGreenCircuit + 6: FloorHull 59: FloorHullReinforced 60: FloorHydro 63: FloorLaundry @@ -342,7 +343,7 @@ entities: version: 6 -5,1: ind: -5,1 - tiles: AAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -5,0: ind: -5,0 @@ -402,7 +403,7 @@ entities: version: 6 -6,1: ind: -6,1 - tiles: HwAAAAACHwAAAAABHwAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAHwAAAAAAHwAAAAADHwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAHwAAAAAAHwAAAAACHwAAAAADfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: HwAAAAACHwAAAAABHwAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAHwAAAAAAHwAAAAADHwAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAHwAAAAAAHwAAAAACHwAAAAADfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAfgAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -7,1: ind: -7,1 @@ -4060,6 +4061,7 @@ entities: 2814: 44,-15 2837: 48,-19 3484: 44,-25 + 3982: 40,-19 - node: color: '#79150096' id: QuarterTileOverlayGreyscale @@ -4385,6 +4387,7 @@ entities: 2813: 44,-9 2838: 47,-18 3476: 44,-17 + 3983: 33,-19 - node: color: '#79150096' id: QuarterTileOverlayGreyscale180 @@ -8109,7 +8112,7 @@ entities: 1: 39312 -12,8: 5: 12 - 7: 3072 + 6: 3072 -11,5: 0: 63351 -11,6: @@ -8118,7 +8121,7 @@ entities: -11,8: 5: 1 1: 17476 - 7: 256 + 6: 256 -11,7: 1: 17484 -10,5: @@ -8216,10 +8219,10 @@ entities: 0: 255 1: 57344 -8,11: - 6: 816 + 7: 816 1: 34952 -9,11: - 6: 2176 + 7: 2176 1: 8738 -8,12: 1: 34959 @@ -8239,7 +8242,7 @@ entities: -6,11: 0: 4095 -6,12: - 6: 61166 + 7: 61166 -5,9: 0: 65535 -5,10: @@ -8247,7 +8250,7 @@ entities: -5,11: 0: 36863 -5,12: - 6: 30515 + 7: 30515 0: 12 -4,9: 0: 65535 @@ -8257,7 +8260,7 @@ entities: 0: 4095 -4,12: 0: 1 - 6: 65518 + 7: 65518 -4,13: 1: 61680 -5,13: @@ -8271,7 +8274,7 @@ entities: -5,15: 1: 17487 -3,12: - 6: 13107 + 7: 13107 1: 34944 -3,13: 1: 47792 @@ -8337,7 +8340,7 @@ entities: 1: 61713 -12,9: 0: 16 - 6: 3084 + 7: 3084 -13,9: 1: 39305 -13,10: @@ -8347,18 +8350,18 @@ entities: 0: 12544 -12,10: 4: 12 - 6: 3072 + 7: 3072 -12,11: - 6: 12 + 7: 12 -11,9: - 6: 257 + 7: 257 1: 17476 -11,10: 4: 1 - 6: 256 + 7: 256 1: 17476 -11,11: - 6: 1 + 7: 1 1: 17476 -11,12: 1: 17487 @@ -8412,7 +8415,7 @@ entities: 1: 15 -13,12: 1: 34952 - 7: 48 + 6: 48 5: 12288 -12,13: 1: 61455 @@ -8446,11 +8449,11 @@ entities: 1: 62671 -7,14: 1: 244 - 6: 57344 + 7: 57344 0: 1024 -7,15: 1: 61440 - 6: 238 + 7: 238 0: 1024 -7,16: 1: 65524 @@ -8509,7 +8512,7 @@ entities: -14,12: 0: 1 1: 8738 - 7: 128 + 6: 128 5: 32768 -17,12: 0: 52232 @@ -9050,7 +9053,7 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 0 + - 6666.982 - 0 - 0 - 0 @@ -9065,7 +9068,7 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 6666.982 + - 0 - 0 - 0 - 0 @@ -130984,6 +130987,13 @@ entities: - type: Transform pos: 4.5,-7.5 parent: 60 +- proto: SurveillanceCameraRouterConstructed + entities: + - uid: 18878 + components: + - type: Transform + pos: -106.5,26.5 + parent: 60 - proto: SurveillanceCameraRouterEngineering entities: - uid: 11746 @@ -131019,6 +131029,13 @@ entities: - type: Transform pos: -22.5,2.5 parent: 60 +- proto: SurveillanceCameraRouterService + entities: + - uid: 18645 + components: + - type: Transform + pos: -49.5,7.5 + parent: 60 - proto: SurveillanceCameraRouterSupply entities: - uid: 6038 @@ -131720,7 +131737,7 @@ entities: - uid: 21760 components: - type: Transform - pos: -49.5,7.5 + pos: -116.5,26.5 parent: 60 - proto: SurveillanceCameraWirelessRouterEntertainment entities: @@ -134244,16 +134261,6 @@ entities: showEnts: False occludes: True ents: [] - - uid: 18645 - components: - - type: Transform - pos: -106.5,26.5 - parent: 60 - - uid: 18878 - components: - - type: Transform - pos: -116.5,26.5 - parent: 60 - uid: 18890 components: - type: Transform From 55771cab745bf45e4756ded41382ef990b84d505 Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Tue, 27 Aug 2024 11:20:12 +0100 Subject: [PATCH 30/54] Minor fixes to character profile editor save/reset buttons (#31505) Merge SetDirty() with preview reload People were forgetting to SetDirty() when changing a property; move SetDirty() into preview reloading, since if the preview is being reloaded, some property has definitely changed anyway. Co-authored-by: Eoin Mcloughlin --- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index c5f2f311d9..e81f72ba67 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -718,6 +718,9 @@ private void ReloadPreview() PreviewDummy = _controller.LoadProfileEntity(Profile, JobOverride, ShowClothes.Pressed); SpriteView.SetEntity(PreviewDummy); _entManager.System().SetEntityName(PreviewDummy, Profile.Name); + + // Check and set the dirty flag to enable the save/reset buttons as appropriate. + SetDirty(); } /// @@ -778,6 +781,9 @@ private void ReloadProfilePreview() return; _entManager.System().LoadProfile(PreviewDummy, Profile); + + // Check and set the dirty flag to enable the save/reset buttons as appropriate. + SetDirty(); } private void OnSpeciesInfoButtonPressed(BaseButton.ButtonEventArgs args) @@ -1014,7 +1020,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo roleLoadout.AddLoadout(loadoutGroup, loadoutProto, _prototypeManager); _loadoutWindow.RefreshLoadouts(roleLoadout, session, collection); Profile = Profile?.WithLoadout(roleLoadout); - SetDirty(); ReloadPreview(); }; @@ -1023,7 +1028,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo roleLoadout.RemoveLoadout(loadoutGroup, loadoutProto, _prototypeManager); _loadoutWindow.RefreshLoadouts(roleLoadout, session, collection); Profile = Profile?.WithLoadout(roleLoadout); - SetDirty(); ReloadPreview(); }; @@ -1033,7 +1037,6 @@ private void OpenLoadout(JobPrototype? jobProto, RoleLoadout roleLoadout, RoleLo _loadoutWindow.OnClose += () => { JobOverride = null; - SetDirty(); ReloadPreview(); }; @@ -1058,7 +1061,6 @@ private void OnMarkingChange(MarkingSet markings) return; Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithMarkings(markings.GetForwardEnumerator().ToList())); - SetDirty(); ReloadProfilePreview(); } @@ -1126,7 +1128,6 @@ private void OnSkinColorOnValueChanged() } } - SetDirty(); ReloadProfilePreview(); } @@ -1157,7 +1158,6 @@ private void SetAge(int newAge) { Profile = Profile?.WithAge(newAge); ReloadPreview(); - SetDirty(); } private void SetSex(Sex newSex) @@ -1180,14 +1180,12 @@ private void SetSex(Sex newSex) UpdateGenderControls(); Markings.SetSex(newSex); ReloadPreview(); - SetDirty(); } private void SetGender(Gender newGender) { Profile = Profile?.WithGender(newGender); ReloadPreview(); - SetDirty(); } private void SetSpecies(string newSpecies) @@ -1201,7 +1199,6 @@ private void SetSpecies(string newSpecies) RefreshLoadouts(); UpdateSexControls(); // update sex for new species UpdateSpeciesGuidebookIcon(); - SetDirty(); ReloadPreview(); } From af65af836a319e5481929a3a6ef19ca719a5c0eb Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Tue, 27 Aug 2024 07:28:26 -0400 Subject: [PATCH 31/54] Centcom & FTLDestination cleanup (#30226) * centcomm name and ftlcomp * networking microopstimization * go sleep. * map names and arrivals --- Content.Server/Shuttles/Systems/ArrivalsSystem.cs | 2 ++ .../Shuttles/Systems/EmergencyShuttleSystem.cs | 4 +++- .../Shuttles/Systems/ShuttleSystem.FasterThanLight.cs | 10 +++++++++- Resources/Locale/en-US/shuttles/emergency.ftl | 4 ++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index 40a2778b93..e921590e39 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -52,6 +52,7 @@ public sealed class ArrivalsSystem : EntitySystem [Dependency] private readonly BiomeSystem _biomes = default!; [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly MapLoaderSystem _loader = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ShuttleSystem _shuttles = default!; @@ -497,6 +498,7 @@ private void OnRoundStarting(RoundStartingEvent ev) private void SetupArrivalsStation() { var mapUid = _mapSystem.CreateMap(out var mapId, false); + _metaData.SetEntityName(mapUid, Loc.GetString("map-name-terminal")); if (!_loader.TryLoad(mapId, _cfgManager.GetCVar(CCVars.ArrivalsMap), out var uids)) { diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index 1f3b4a749b..52b327ee01 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -61,6 +61,7 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem [Dependency] private readonly IdCardSystem _idSystem = default!; [Dependency] private readonly NavMapSystem _navMap = default!; [Dependency] private readonly MapLoaderSystem _map = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly RoundEndSystem _roundEnd = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -464,8 +465,9 @@ private void AddCentcomm(EntityUid station, StationCentcommComponent component) } component.MapEntity = map; + _metaData.SetEntityName(map, Loc.GetString("map-name-centcomm")); component.Entity = grid; - _shuttle.TryAddFTLDestination(mapId, false, out _); + _shuttle.TryAddFTLDestination(mapId, true, out _); Log.Info($"Created centcomm grid {ToPrettyString(grid)} on map {ToPrettyString(map)} for station {ToPrettyString(station)}"); } diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index 274437aa40..e670445745 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -186,6 +186,11 @@ public void SetFTLWhitelist(Entity entity, EntityWhite /// Adds the target map as available for FTL. /// public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] out FTLDestinationComponent? component) + { + return TryAddFTLDestination(mapId, enabled, true, false, out component); + } + + public bool TryAddFTLDestination(MapId mapId, bool enabled, bool requireDisk, bool beaconsOnly, [NotNullWhen(true)] out FTLDestinationComponent? component) { var mapUid = _mapSystem.GetMapOrInvalid(mapId); component = null; @@ -195,10 +200,13 @@ public bool TryAddFTLDestination(MapId mapId, bool enabled, [NotNullWhen(true)] component = EnsureComp(mapUid); - if (component.Enabled == enabled) + if (component.Enabled == enabled && component.RequireCoordinateDisk == requireDisk && component.BeaconsOnly == beaconsOnly) return true; component.Enabled = enabled; + component.RequireCoordinateDisk = requireDisk; + component.BeaconsOnly = beaconsOnly; + _console.RefreshShuttleConsoles(); Dirty(mapUid, component); return true; diff --git a/Resources/Locale/en-US/shuttles/emergency.ftl b/Resources/Locale/en-US/shuttles/emergency.ftl index b4dcaa3e67..be3f0962fa 100644 --- a/Resources/Locale/en-US/shuttles/emergency.ftl +++ b/Resources/Locale/en-US/shuttles/emergency.ftl @@ -33,3 +33,7 @@ emergency-shuttle-ui-authorize = AUTHORIZE emergency-shuttle-ui-repeal = REPEAL emergency-shuttle-ui-authorizations = Authorizations emergency-shuttle-ui-remaining = Remaining: {$remaining} + +# Map Misc. +map-name-centcomm = Central Command +map-name-terminal = Arrivals Terminal \ No newline at end of file From 517aace38d5fd372e7efc324139209081ff3aa73 Mon Sep 17 00:00:00 2001 From: Saphire Lattice Date: Tue, 27 Aug 2024 17:32:53 +0600 Subject: [PATCH 32/54] Fix swapped around Safety Moth poster graphics (#31507) --- .../Entities/Structures/Wallmounts/Signs/posters.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml index f1db2b71f1..93124b377d 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml @@ -999,9 +999,9 @@ - type: entity parent: PosterBase - id: PosterLegitSafetyMothHardhat - name: "Safety Moth - Hardhats" - description: "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\"" + id: PosterLegitSafetyMothPiping + name: "Safety Moth - Piping" + description: "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\"" components: - type: Sprite state: poster45_legit @@ -1017,9 +1017,9 @@ - type: entity parent: PosterBase - id: PosterLegitSafetyMothPiping - name: "Safety Moth - Piping" - description: "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\"" + id: PosterLegitSafetyMothHardhat + name: "Safety Moth - Hardhats" + description: "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\"" components: - type: Sprite state: poster47_legit From 292eccc7493f3f658c144dffb8c821a19b6fe976 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 11:34:01 +0000 Subject: [PATCH 33/54] 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 e2753cf7dc..3779841d1a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Doomsdrayk - changes: - - message: The Drozd and C-20r do not unwield on use again. - type: Fix - id: 6721 - time: '2024-06-13T18:10:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28728 - author: EmoGarbage404 changes: - message: Fixed constructed items rotating strangely. @@ -3863,3 +3856,11 @@ id: 7220 time: '2024-08-27T00:48:04.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31370 +- author: SaphireLattice + changes: + - message: Safety Moth poster graphics for hardhats and pipes are no longer swapped + around + type: Fix + id: 7221 + time: '2024-08-27T11:32:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31507 From ef18b3144dcc4908dc0ba06b6695c35323443b2e Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:37:20 +0300 Subject: [PATCH 34/54] Mark explosives as a contraband (#31508) --- .../Objects/Weapons/Guns/Ammunition/explosives.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml index 04d405e881..42bd054ac7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml @@ -3,7 +3,7 @@ - type: entity id: CartridgeRocket name: PG-7VL grenade - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] description: A 1.5 warhead designed for the RPG-7 launcher. Has tubular shape. components: - type: Tag @@ -23,7 +23,7 @@ - type: entity id: CartridgeRocketSlow name: PG-7VL grenade "Snail-Rocket" - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] description: A 1.5 warhead designed for the RPG-7 launcher. It's unusually slow. components: - type: Tag @@ -45,7 +45,7 @@ - type: entity id: BaseGrenade name: base grenade - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] abstract: true components: - type: Tag @@ -122,7 +122,7 @@ - type: SpentAmmoVisuals state: frag suffix: false - + - type: entity id: GrenadeEMP name: EMP grenade @@ -145,7 +145,7 @@ - type: entity id: BaseCannonBall name: base cannon ball - parent: BaseItem + parent: [BaseItem, BaseMajorContraband] abstract: true components: - type: Tag @@ -154,7 +154,7 @@ - type: Item size: Small - type: Sprite - + - type: entity id: CannonBall name: cannonball From e689892919e8a280ecf05316c4fb8dfffa89ae7b Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 11:38:27 +0000 Subject: [PATCH 35/54] 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 3779841d1a..a209a03743 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Fixed constructed items rotating strangely. - type: Fix - id: 6722 - time: '2024-06-13T18:21:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28427 - author: lzk228 changes: - message: Added order quantity to cargo invoice label. @@ -3864,3 +3857,10 @@ id: 7221 time: '2024-08-27T11:32:53.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31507 +- author: Winkarst-cpu + changes: + - message: Explosive ammunition is now marked as a contraband. + type: Fix + id: 7222 + time: '2024-08-27T11:37:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31508 From e9cc93c8898030fea916df17e7a47dae7ea7ba1c Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:01:09 +0300 Subject: [PATCH 36/54] Mark the syndicate raid helmet as a Syndicate contraband (#31512) --- Resources/Prototypes/Entities/Clothing/Head/helmets.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 47fb4ad451..a6663b31ec 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -358,7 +358,7 @@ sprite: Clothing/Head/Helmets/ert_janitor.rsi - type: entity - parent: [ ClothingHeadHelmetBasic, BaseSyndicateContraband ] + parent: [ BaseSyndicateContraband, ClothingHeadHelmetBasic ] id: ClothingHeadHelmetRaid name: syndicate raid helmet description: An armored helmet for use with the syndicate raid suit. Very stylish. From c8d30a95bec144582cd48987056ba0b08d53411c Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 13:02:15 +0000 Subject: [PATCH 37/54] 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 a209a03743..969ab2a353 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Added order quantity to cargo invoice label. - type: Tweak - id: 6723 - time: '2024-06-13T18:36:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28821 - author: osjarw changes: - message: Added context menu action for scanning artifacts. @@ -3864,3 +3857,10 @@ id: 7222 time: '2024-08-27T11:37:20.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31508 +- author: Winkarst-cpu + changes: + - message: Now the syndicate raid helmet is marked as a Syndicate contraband. + type: Fix + id: 7223 + time: '2024-08-27T13:01:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31512 From 28d6e6da949c45289ab3f838349158d66647377a Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Tue, 27 Aug 2024 14:10:01 +0100 Subject: [PATCH 38/54] Add title to multitool door-access-configuration window (#31504) Fixes #29923. Co-authored-by: Eoin Mcloughlin --- .../Doors/Electronics/DoorElectronicsConfigurationMenu.xaml | 3 ++- Resources/Locale/en-US/access/ui/door-electronics-window.ftl | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 Resources/Locale/en-US/access/ui/door-electronics-window.ftl diff --git a/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml b/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml index 4cd59f38b2..e832b4ee9f 100644 --- a/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml +++ b/Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml @@ -1,6 +1,7 @@ + xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" + Title="{Loc door-electronics-configuration-title}"> diff --git a/Resources/Locale/en-US/access/ui/door-electronics-window.ftl b/Resources/Locale/en-US/access/ui/door-electronics-window.ftl new file mode 100644 index 0000000000..6a7b1c95c2 --- /dev/null +++ b/Resources/Locale/en-US/access/ui/door-electronics-window.ftl @@ -0,0 +1 @@ +door-electronics-configuration-title = Configure Access From 4f3c2474af2872cc210a3d554c8bb1b717f72970 Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:19:38 +0300 Subject: [PATCH 39/54] Restrict the explorer gas mask to cargo (#31514) --- Resources/Prototypes/Entities/Clothing/Masks/masks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 7d270b8ee7..1a213a7768 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -102,7 +102,7 @@ - type: IngestionBlocker - type: entity - parent: ClothingMaskGas + parent: [ClothingMaskGas, BaseCargoContraband] id: ClothingMaskGasExplorer name: explorer gas mask description: A military-grade gas mask that can be connected to an air supply. From 7a4fc39b9fa906f1025673741eda29694d62c0a6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 13:20:44 +0000 Subject: [PATCH 40/54] 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 969ab2a353..4d7bdf0bd3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: osjarw - changes: - - message: Added context menu action for scanning artifacts. - type: Add - id: 6724 - time: '2024-06-14T02:01:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26873 - author: Cojoke-dot changes: - message: Lasers now pass over things unless clicked like projectiles @@ -3864,3 +3857,10 @@ id: 7223 time: '2024-08-27T13:01:09.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31512 +- author: Winkarst-cpu + changes: + - message: The explorer gas mask is now restricted to the cargo. + type: Fix + id: 7224 + time: '2024-08-27T13:19:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31514 From 3492ca185b0af1f8ab4ce80481724578e903aba2 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:46:53 +0200 Subject: [PATCH 41/54] Fix stray pixel in officer beersky barsign (#31517) --- .../Wallmounts/barsign.rsi/officerbeersky.png | Bin 1129 -> 3160 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png b/Resources/Textures/Structures/Wallmounts/barsign.rsi/officerbeersky.png index ede821777a00d129b30d11661de241017ddffaa1..823bf998c980dd19211ba2d040a8b7f06f1f3220 100644 GIT binary patch literal 3160 zcmZXXXIN9o8po3e1Q86V7;=ys><7lO2$Ahz(yjy@-D5wNNTU>o$-oz#PSP16#kG2L^0!Z zR|vI%;Q1qJvg%6tPP-5hMDn@tBCgRdF7aLg(bFyOvV+A>yT(D``bW;Q$Y#0J{L+v- zzy96sZsTb`z*zgVAT{ik6?CWn(@Fx-c9y$lk40#kd*>hI(o zD`Z-2Kh$1>O@O!fSzZEGaO(vXw>op%mnHU0>6Wm#>vd9~BsfrRcymeB)aRBh&_m^T z(caRK9T7tSosMgET2BubMDSWNSZ93qbGgK`rlI!6*Ii7UW}jNWr>yl@gyNj5*cp-c zB7yO9o=xZ*R?5k*u7RFSqkxDdl{beM!kwjb<22fF;OY%T5!l=rWs@#@`6R*#M3SGI zW;TKzK)^}|qAcal&RjO=ry?Xg8wk4OMRz;F;^RX;b19W)^P>9h*467cSMvE+D)KOh z?9tsq&pu0`6-w?L3DAnrbejs??4AICV6RV&CTz!X)7@L?t&IyWuLiFN9Qw=*l{(U= zpmNF0ou#|mFkbipn&4pgTA0mn0Xlwix~oRw=~wrJ#E8jC+Hx0>{1{tPf?sYM@J)hS zTOno!g?DM|b@}Kwc1=qPSZ`P4TX9od8}O-kpT;gb*}AX1eJr560VKRdGb(XC1~_Mskefgt zWPeZ*lo=kYUGCN6KQa88vE!H+h#nfrHhvMF=X>O5AD+txV)6UdM|GI(^PQb&p zm~`{*>6%8BVnpK?TA6%k7^7*l8Gebl7G6rtrSp>|YrN7)?pVgZXc26wA{2>jDS`D6fVVJBH z#;|CY^GKV5PPTejj`v&$FVT7n@|VdnZ5D<1b5HWiN~E{&(w@st9z8%Ve7!bnu?Abm&Awi~g2PujBz{3eu{6=9cr#SDNgH5qye z6(f05I3aj-+j22w@`cUvYJS7w(v82o#e+l43D?Tr?~951=^mU`QYx>VzdX~)>;?Cs z#L0DlCY-2`fyE$(GU57+9=@%u?IEk#u`$rvo!TNtBtD?#hv#Nt4bdD_9FP zVQxw|mrx#VC9A$ipqYP|& z<)IICv%4-{;va6BwHZdTSOe_{dwb7$gO*Ic*`iV(sui2ld1&Z}J!nk5X3$0lH(b`F zZGzHgZ$3L}-+Q3vE7L*@IR#wS9kuhBdbPwUytcJ$QdioxK3~bMMA2J9aBBfGOOqXH z#xY-t9Qhv}N2l)NxNuJZ-@iUzD0ox&LENq9rHUJpv>qek*@X9a;!lqj{4^0Dz6YzC z6--CpBqQSi>N3&bDN~VP~!UfHcO$*_7W$FC@9kL}&UbPaC&hu&+j^3#()Gn3|CHHwMOQ7ZQ z;{5>3?p~XQ$uhq7IzV0|yX(}F`0k0iv2>?K?u;jw0lI;5^xMEW*_}S#XRL-a_}81? zpH=)&EBc`xcS7^y$L2eGRBDVwdwcVO!q0l`NDN;HM@ymECzq8sBS92^8Q_1CyE%{t z?hCpk0dzx%ia=A zwwG!3CO4h%>n^ia;}?9sVKO15aIg%HxdN~5NW-73(=CO@(QInHJ(_>B9{xTqTO4c z&XASc0XkkjCTrF-j{=cmS+H6H3%V@?dM${R*?HDL%G42i$8zw*MdVx>EQ^d-{+ z!HNk9=HS5>jLdI5V}xr=+nKTHM@Ay8XT=dzH}{b05ZW7?=cZ_rCMduZtQn$?^ zBieuBnvhcJI6Jr6ogneEUVLLEiwhPG56YrI~b0&rQQ* zVHFo2rym@Sntl?Q_wN+rTJTH+>ofD2L{$W%qyvA{F*VcNLz>bk{U%%>ElxWe6k6FM zE-kGA4Eo))oqw&q0dT%X@+;&F#78>@;~p=<4mS6Z4j~R1|EpfZ8NKD)GTu#e0t)!a6sRk zur8W#n(p>xZ;*-{z@!>^R}C2o1Y9yXfgPi;+{DoDHwnN4AJ=RA*};d7riS}DI3Q3~ zZBCxm`q`&aBtLq$&Md%FKVj=!dJ##Kyri_Wg3+`jyI#;v4PX0luIG!IGsYvI5kkY# zLePu{R(O7Kdz#fkI3BOGVJCO~YbOe*-wK6x<;xwJHFE)>~KsIi5PPcH&9YoSf0Ff#I17GukU^jl|MaxFTQJkSpyRk ztv$|d-A#Nrg-B8E+xtnO>Yx=);d4ltl_P=}r+l<4vQXfQcU?5(@lo^4cv+YwlF3J$ zLm&ri()|TrIL;IpQ7^r#h(^%n8ra6sUB~U7?%v^&=3JJmr zkGst2Lxonm5w0jbWUk-~4w>`VXyXl_2w0%%sUTG$hO1qUkpqds1x{bo(09`tG1 z5L!LdsC89ake52<)Aw6;tM8pGdzzyC8B|NsBL zu=DC&pkM15OM?7@862M7NMm4NHt=+D45_&FHkvp5mVwCHrOFb#&1-k9EuO!LKZR*i z*BYZarNvGE{@>sHWU23I#w>3?|AKwdvxBR4ykDw+QhQ%@QY1%Jqx{aV;QYVG-W>xTThdEbx7|NCLNb4Jg(ntBV7=bp>I*Wdkqc!BsgtG#goEs4#! zO!sen?C-aFTlRa!-Iw#`&Fgi0ez4MDrcYgKy+vKSpkDKXPp`V-SrP>}cD-sy+!wk( zPP*6kL3D5SH1^xKxwkK2y!>Ym+potj9$l@H)#&{nA-BMOuAA7Z?9v4`b`k|L>{9Ng zkCcP2ud$zfR*CzxRl@ChGm~vuN8FdKd;j?L4{^35;W8Pi%2DkrC;$JNpKolXuq(q^ zTl(THpSj;^Yjpo>G6zZov0dSnYux>E$F#o;7Y&xkIov(*Ec@qqS;o8uPVP{LkAf#2 zWdHO(>zJC5$LGboIVxqrFY$obO>9?~&#Yzq$#Anq_J8H31G2BLD=@8bk+T! zG*_=D&y52nJA0fsyW6})My5vLN$EtsDJRZLGR`}?EZHmX+qe1lk1Kvoyx=6L)6d_n z5%qvuXB+ z7l$~O2;1|pddIQP1p556@_{QKR8P*77Wkv?$EtH-jbK97FBSdvt3bK#;(&dkGmRE7 z9ng?1V4muA`7_&;by3Wp)}Fb-yn->}SUzdz3rVM=UdPdLCF@aB0z<{u@t7r|cq z>@xN3Q{u(mJ81rKVoQ)*{?{ybUWlmgeQM z$u~MIuxt3m@QQf_KZtRF`8vDLweO{WrPsfI{mVS={`Ift95myhAO+SH>&s0rCzC0uV!CrvGLy_|Nc8{=i>| iWoTT8BW%?EFemTQ$cs53@(q}u7(8A5T-G@yGywov`~j{2 From 8ffae8d313fe7b651db4fd5e0855773463b1d92f Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Tue, 27 Aug 2024 15:43:47 +0100 Subject: [PATCH 42/54] Scale text in admin player overlay (#31503) * Scale text in admin player overlay Fixes #30040 * Feedback from PR - get UI scale through root window --------- Co-authored-by: Eoin Mcloughlin --- .../Administration/AdminNameOverlay.cs | 20 +++++++++++-------- .../Systems/AdminSystem.Overlay.cs | 5 ++++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Content.Client/Administration/AdminNameOverlay.cs b/Content.Client/Administration/AdminNameOverlay.cs index 6a1881a227..e2db7a8d6b 100644 --- a/Content.Client/Administration/AdminNameOverlay.cs +++ b/Content.Client/Administration/AdminNameOverlay.cs @@ -2,10 +2,10 @@ using Content.Client.Administration.Systems; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Shared; using Robust.Shared.Enums; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Maths; +using Robust.Shared.Configuration; namespace Content.Client.Administration; @@ -15,14 +15,16 @@ internal sealed class AdminNameOverlay : Overlay private readonly IEntityManager _entityManager; private readonly IEyeManager _eyeManager; private readonly EntityLookupSystem _entityLookup; + private readonly IUserInterfaceManager _userInterfaceManager; private readonly Font _font; - public AdminNameOverlay(AdminSystem system, IEntityManager entityManager, IEyeManager eyeManager, IResourceCache resourceCache, EntityLookupSystem entityLookup) + public AdminNameOverlay(AdminSystem system, IEntityManager entityManager, IEyeManager eyeManager, IResourceCache resourceCache, EntityLookupSystem entityLookup, IUserInterfaceManager userInterfaceManager) { _system = system; _entityManager = entityManager; _eyeManager = eyeManager; _entityLookup = entityLookup; + _userInterfaceManager = userInterfaceManager; ZIndex = 200; _font = new VectorFont(resourceCache.GetResource("/Fonts/NotoSans/NotoSans-Regular.ttf"), 10); } @@ -57,16 +59,18 @@ protected override void Draw(in OverlayDrawArgs args) continue; } - var lineoffset = new Vector2(0f, 11f); + var uiScale = _userInterfaceManager.RootControl.UIScale; + var lineoffset = new Vector2(0f, 11f) * uiScale; var screenCoordinates = _eyeManager.WorldToScreen(aabb.Center + new Angle(-_eyeManager.CurrentEye.Rotation).RotateVec( aabb.TopRight - aabb.Center)) + new Vector2(1f, 7f); if (playerInfo.Antag) { - args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 2), "ANTAG", Color.OrangeRed); + args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 2), "ANTAG", uiScale, Color.OrangeRed); +; } - args.ScreenHandle.DrawString(_font, screenCoordinates+lineoffset, playerInfo.Username, playerInfo.Connected ? Color.Yellow : Color.White); - args.ScreenHandle.DrawString(_font, screenCoordinates, playerInfo.CharacterName, playerInfo.Connected ? Color.Aquamarine : Color.White); + args.ScreenHandle.DrawString(_font, screenCoordinates+lineoffset, playerInfo.Username, uiScale, playerInfo.Connected ? Color.Yellow : Color.White); + args.ScreenHandle.DrawString(_font, screenCoordinates, playerInfo.CharacterName, uiScale, playerInfo.Connected ? Color.Aquamarine : Color.White); } } } diff --git a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs index 3502faf9e8..ba6ce40ca0 100644 --- a/Content.Client/Administration/Systems/AdminSystem.Overlay.cs +++ b/Content.Client/Administration/Systems/AdminSystem.Overlay.cs @@ -1,6 +1,8 @@ using Content.Client.Administration.Managers; using Robust.Client.Graphics; using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Shared.Configuration; namespace Content.Client.Administration.Systems { @@ -11,6 +13,7 @@ public sealed partial class AdminSystem [Dependency] private readonly IClientAdminManager _adminManager = default!; [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; private AdminNameOverlay _adminNameOverlay = default!; @@ -19,7 +22,7 @@ public sealed partial class AdminSystem private void InitializeOverlay() { - _adminNameOverlay = new AdminNameOverlay(this, EntityManager, _eyeManager, _resourceCache, _entityLookup); + _adminNameOverlay = new AdminNameOverlay(this, EntityManager, _eyeManager, _resourceCache, _entityLookup, _userInterfaceManager); _adminManager.AdminStatusUpdated += OnAdminStatusUpdated; } From 250628f8051b08f1e6b8673d182fa7b6b12eaf91 Mon Sep 17 00:00:00 2001 From: Thomas <87614336+Aeshus@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:57:36 -0500 Subject: [PATCH 43/54] New Health Analyzer UI (#30834) * WIP: first prototype * Change text slightly * Allow names to wrap * Add label for the scan mode * Remove ugly text * Readd bleeding message * Update code * Allow for the Health Analyzer UI to grow vertically --- .../UI/HealthAnalyzerBoundUserInterface.cs | 1 + .../UI/HealthAnalyzerWindow.xaml | 70 +++++--- .../UI/HealthAnalyzerWindow.xaml.cs | 168 +++++++++--------- .../components/health-analyzer-component.ftl | 28 +-- 4 files changed, 149 insertions(+), 118 deletions(-) diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs index 38760f4aa3..baea03c892 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerBoundUserInterface.cs @@ -17,6 +17,7 @@ public HealthAnalyzerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owne protected override void Open() { base.Open(); + _window = this.CreateWindow(); _window.Title = EntMan.GetComponent(Owner).EntityName; diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml index 401f976862..97968c4b99 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml @@ -1,48 +1,64 @@ - + MaxHeight="525" + MinWidth="300"> diff --git a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs index fcf6d4551f..9b96f5d3fe 100644 --- a/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs +++ b/Content.Client/HealthAnalyzer/UI/HealthAnalyzerWindow.xaml.cs @@ -1,12 +1,20 @@ using System.Linq; using System.Numerics; +using Content.Client.Message; using Content.Shared.Atmos; using Content.Client.UserInterface.Controls; +using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; +using Content.Shared.Humanoid; +using Content.Shared.Humanoid.Prototypes; using Content.Shared.IdentityManagement; +using Content.Shared.Inventory; using Content.Shared.MedicalScanner; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition.Components; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; @@ -28,9 +36,6 @@ public sealed partial class HealthAnalyzerWindow : FancyWindow private readonly IPrototypeManager _prototypes; private readonly IResourceCache _cache; - private const int AnalyzerHeight = 430; - private const int AnalyzerWidth = 300; - public HealthAnalyzerWindow() { RobustXamlLoader.Load(this); @@ -44,8 +49,6 @@ public HealthAnalyzerWindow() public void Populate(HealthAnalyzerScannedUserMessage msg) { - GroupsContainer.RemoveAllChildren(); - var target = _entityManager.GetEntity(msg.TargetEntity); if (target == null @@ -57,82 +60,96 @@ public void Populate(HealthAnalyzerScannedUserMessage msg) NoPatientDataText.Visible = false; - string entityName = Loc.GetString("health-analyzer-window-entity-unknown-text"); - if (_entityManager.HasComponent(target.Value)) - { - entityName = Identity.Name(target.Value, _entityManager); - } + // Scan Mode - if (msg.ScanMode.HasValue) - { - ScanModePanel.Visible = true; - ScanModeText.Text = Loc.GetString(msg.ScanMode.Value ? "health-analyzer-window-scan-mode-active" : "health-analyzer-window-scan-mode-inactive"); - ScanModeText.FontColorOverride = msg.ScanMode.Value ? Color.Green : Color.Red; - } - else - { - ScanModePanel.Visible = false; - } + ScanModeLabel.Text = msg.ScanMode.HasValue + ? msg.ScanMode.Value + ? Loc.GetString("health-analyzer-window-scan-mode-active") + : Loc.GetString("health-analyzer-window-scan-mode-inactive") + : Loc.GetString("health-analyzer-window-entity-unknown-text"); + + ScanModeLabel.FontColorOverride = msg.ScanMode.HasValue && msg.ScanMode.Value ? Color.Green : Color.Red; + + // Patient Information + + SpriteView.SetEntity(target.Value); + + var name = new FormattedMessage(); + name.PushColor(Color.White); + name.AddText(_entityManager.HasComponent(target.Value) + ? Identity.Name(target.Value, _entityManager) + : Loc.GetString("health-analyzer-window-entity-unknown-text")); + NameLabel.SetMessage(name); + + SpeciesLabel.Text = + _entityManager.TryGetComponent(target.Value, + out var humanoidAppearanceComponent) + ? Loc.GetString(_prototypes.Index(humanoidAppearanceComponent.Species).Name) + : Loc.GetString("health-analyzer-window-entity-unknown-species-text"); + + // Basic Diagnostic + + TemperatureLabel.Text = !float.IsNaN(msg.Temperature) + ? $"{msg.Temperature - Atmospherics.T0C:F1} °C ({msg.Temperature:F1} K)" + : Loc.GetString("health-analyzer-window-entity-unknown-value-text"); + + BloodLabel.Text = !float.IsNaN(msg.BloodLevel) + ? $"{msg.BloodLevel * 100:F1} %" + : Loc.GetString("health-analyzer-window-entity-unknown-value-text"); - PatientName.Text = Loc.GetString( - "health-analyzer-window-entity-health-text", - ("entityName", entityName) - ); + StatusLabel.Text = + _entityManager.TryGetComponent(target.Value, out var mobStateComponent) + ? GetStatus(mobStateComponent.CurrentState) + : Loc.GetString("health-analyzer-window-entity-unknown-text"); - Temperature.Text = Loc.GetString("health-analyzer-window-entity-temperature-text", - ("temperature", float.IsNaN(msg.Temperature) ? "N/A" : $"{msg.Temperature - Atmospherics.T0C:F1} °C ({msg.Temperature:F1} K)") - ); + // Total Damage - BloodLevel.Text = Loc.GetString("health-analyzer-window-entity-blood-level-text", - ("bloodLevel", float.IsNaN(msg.BloodLevel) ? "N/A" : $"{msg.BloodLevel * 100:F1} %") - ); + DamageLabel.Text = damageable.TotalDamage.ToString(); + + // Alerts + + AlertsDivider.Visible = msg.Bleeding == true; + AlertsContainer.Visible = msg.Bleeding == true; if (msg.Bleeding == true) { - Bleeding.Text = Loc.GetString("health-analyzer-window-entity-bleeding-text"); - Bleeding.FontColorOverride = Color.Red; - } - else - { - Bleeding.Text = string.Empty; // Clear the text + AlertsContainer.DisposeAllChildren(); + AlertsContainer.AddChild(new Label + { + Text = Loc.GetString("health-analyzer-window-entity-bleeding-text"), + FontColorOverride = Color.Red, + }); } - patientDamageAmount.Text = Loc.GetString( - "health-analyzer-window-entity-damage-total-text", - ("amount", damageable.TotalDamage) - ); + // Damage Groups var damageSortedGroups = - damageable.DamagePerGroup.OrderBy(damage => damage.Value) + damageable.DamagePerGroup.OrderByDescending(damage => damage.Value) .ToDictionary(x => x.Key, x => x.Value); + IReadOnlyDictionary damagePerType = damageable.Damage.DamageDict; DrawDiagnosticGroups(damageSortedGroups, damagePerType); + } - if (_entityManager.TryGetComponent(target, out HungerComponent? hunger) - && hunger.StarvationDamage != null - && hunger.CurrentThreshold <= HungerThreshold.Starving) + private static string GetStatus(MobState mobState) + { + return mobState switch { - var box = new Control { Margin = new Thickness(0, 0, 0, 15) }; - - box.AddChild(CreateDiagnosticGroupTitle( - Loc.GetString("health-analyzer-window-malnutrition"), - "malnutrition")); - - GroupsContainer.AddChild(box); - } - - SetHeight = AnalyzerHeight; - SetWidth = AnalyzerWidth; + MobState.Alive => Loc.GetString("health-analyzer-window-entity-alive-text"), + MobState.Critical => Loc.GetString("health-analyzer-window-entity-critical-text"), + MobState.Dead => Loc.GetString("health-analyzer-window-entity-dead-text"), + _ => Loc.GetString("health-analyzer-window-entity-unknown-text"), + }; } private void DrawDiagnosticGroups( - Dictionary groups, IReadOnlyDictionary damageDict) + Dictionary groups, + IReadOnlyDictionary damageDict) { - HashSet shownTypes = new(); + GroupsContainer.RemoveAllChildren(); - // Show the total damage and type breakdown for each damage group. - foreach (var (damageGroupId, damageAmount) in groups.Reverse()) + foreach (var (damageGroupId, damageAmount) in groups) { if (damageAmount == 0) continue; @@ -145,7 +162,6 @@ private void DrawDiagnosticGroups( var groupContainer = new BoxContainer { - Margin = new Thickness(0, 0, 0, 15), Align = BoxContainer.AlignMode.Begin, Orientation = BoxContainer.LayoutOrientation.Vertical, }; @@ -159,23 +175,16 @@ private void DrawDiagnosticGroups( foreach (var type in group.DamageTypes) { - if (damageDict.TryGetValue(type, out var typeAmount) && typeAmount > 0) - { - // If damage types are allowed to belong to more than one damage group, - // they may appear twice here. Mark them as duplicate. - if (shownTypes.Contains(type)) - continue; - - shownTypes.Add(type); - - var damageString = Loc.GetString( - "health-analyzer-window-damage-type-text", - ("damageType", _prototypes.Index(type).LocalizedName), - ("amount", typeAmount) - ); - - groupContainer.AddChild(CreateDiagnosticItemLabel(damageString.Insert(0, "- "))); - } + if (!damageDict.TryGetValue(type, out var typeAmount) || typeAmount <= 0) + continue; + + var damageString = Loc.GetString( + "health-analyzer-window-damage-type-text", + ("damageType", _prototypes.Index(type).LocalizedName), + ("amount", typeAmount) + ); + + groupContainer.AddChild(CreateDiagnosticItemLabel(damageString.Insert(0, " · "))); } } } @@ -198,7 +207,6 @@ private static Label CreateDiagnosticItemLabel(string text) { return new Label { - Margin = new Thickness(2, 2), Text = text, }; } @@ -207,13 +215,13 @@ private BoxContainer CreateDiagnosticGroupTitle(string text, string id) { var rootContainer = new BoxContainer { + Margin = new Thickness(0, 6, 0, 0), VerticalAlignment = VAlignment.Bottom, - Orientation = BoxContainer.LayoutOrientation.Horizontal + Orientation = BoxContainer.LayoutOrientation.Horizontal, }; rootContainer.AddChild(new TextureRect { - Margin = new Thickness(0, 3), SetSize = new Vector2(30, 30), Texture = GetTexture(id.ToLower()) }); diff --git a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl index 121e50b923..fe1f92e914 100644 --- a/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl +++ b/Resources/Locale/en-US/medical/components/health-analyzer-component.ftl @@ -1,18 +1,24 @@ health-analyzer-window-no-patient-data-text = No patient data. -health-analyzer-window-entity-unknown-text = unknown -health-analyzer-window-entity-health-text = {$entityName}'s health: -health-analyzer-window-entity-temperature-text = Temperature: {$temperature} -health-analyzer-window-entity-blood-level-text = Blood Level: {$bloodLevel} -health-analyzer-window-entity-bleeding-text = Patient is bleeding! -health-analyzer-window-entity-damage-total-text = Total Damage: {$amount} +health-analyzer-window-entity-unknown-text = Unknown +health-analyzer-window-entity-unknown-species-text = Non-Humanoid +health-analyzer-window-entity-unknown-value-text = N/A + +health-analyzer-window-entity-alive-text = Alive +health-analyzer-window-entity-dead-text = Dead +health-analyzer-window-entity-critical-text = Critical + +health-analyzer-window-entity-temperature-text = Temperature: +health-analyzer-window-entity-blood-level-text = Blood Level: +health-analyzer-window-entity-status-text = Status: +health-analyzer-window-entity-damage-total-text = Total Damage: + health-analyzer-window-damage-group-text = {$damageGroup}: {$amount} health-analyzer-window-damage-type-text = {$damageType}: {$amount} -health-analyzer-window-damage-type-duplicate-text = {$damageType}: {$amount} (duplicate) -health-analyzer-window-scan-mode-text = Scan Mode: -health-analyzer-window-scan-mode-active = ACTIVE -health-analyzer-window-scan-mode-inactive = INACTIVE +health-analyzer-window-entity-bleeding-text = Patient is bleeding! -health-analyzer-window-malnutrition = Severely malnourished +health-analyzer-window-scan-mode-text = Scan Mode: +health-analyzer-window-scan-mode-active = Active +health-analyzer-window-scan-mode-inactive = Inactive health-analyzer-popup-scan-target = {CAPITALIZE(THE($user))} is trying to scan you! From 4b91f1f50b72c3f1a2084ae5b0f3fb2ee2396abc Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 14:58:42 +0000 Subject: [PATCH 44/54] 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 4d7bdf0bd3..5754613da7 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Cojoke-dot - changes: - - message: Lasers now pass over things unless clicked like projectiles - type: Tweak - id: 6725 - time: '2024-06-14T02:04:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28768 - author: Boaz1111 changes: - message: The PKA can now mine rocks in one hit again. @@ -3864,3 +3857,11 @@ id: 7224 time: '2024-08-27T13:19:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31514 +- author: Aeshus + changes: + - message: The Health Analyzer now displays the patient's picture, species, and + current status. + type: Add + id: 7225 + time: '2024-08-27T14:57:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30834 From d304123ef7ddc96afe96a30c5991f2876992a09c Mon Sep 17 00:00:00 2001 From: Thomas <87614336+Aeshus@users.noreply.github.com> Date: Tue, 27 Aug 2024 10:02:21 -0500 Subject: [PATCH 45/54] Disable Arrivals message for Cryosleep (#30888) * Disable arrivals message for cryosleep late arrivals * Provide silent to PlayerSpawnCompleteEvent * Fix typo * Move message to event and into arrivals system --- .../GameTicking/GameTicker.Spawning.cs | 23 +++++-------------- .../Shuttles/Systems/ArrivalsSystem.cs | 16 +++++++++++++ 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index 5e2ef0c02c..3ca62e561d 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -4,6 +4,7 @@ using Content.Server.Administration.Managers; using Content.Server.GameTicking.Events; using Content.Server.Ghost; +using Content.Server.Shuttles.Components; using Content.Server.Spawners.Components; using Content.Server.Speech.Components; using Content.Server.Station.Components; @@ -274,28 +275,13 @@ private void SpawnPlayer(ICommonSession player, Loc.GetString("job-greet-station-name", ("stationName", metaData.EntityName))); } - // Arrivals is unable to do this during spawning as no actor is attached yet. - // We also want this message last. - if (!silent && lateJoin && _arrivals.Enabled) - { - var arrival = _arrivals.NextShuttleArrival(); - if (arrival == null) - { - _chatManager.DispatchServerMessage(player, Loc.GetString("latejoin-arrivals-direction")); - } - else - { - _chatManager.DispatchServerMessage(player, - Loc.GetString("latejoin-arrivals-direction-time", ("time", $"{arrival:mm\\:ss}"))); - } - } - // We raise this event directed to the mob, but also broadcast it so game rules can do something now. PlayersJoinedRoundNormally++; var aev = new PlayerSpawnCompleteEvent(mob, player, jobId, lateJoin, + silent, PlayersJoinedRoundNormally, station, character); @@ -314,7 +300,7 @@ public void Respawn(ICommonSession player) } /// - /// Makes a player join into the game and spawn on a staiton. + /// Makes a player join into the game and spawn on a station. /// /// The player joining /// The station they're spawning on @@ -494,6 +480,7 @@ public sealed class PlayerSpawnCompleteEvent : EntityEventArgs public ICommonSession Player { get; } public string? JobId { get; } public bool LateJoin { get; } + public bool Silent { get; } public EntityUid Station { get; } public HumanoidCharacterProfile Profile { get; } @@ -504,6 +491,7 @@ public PlayerSpawnCompleteEvent(EntityUid mob, ICommonSession player, string? jobId, bool lateJoin, + bool silent, int joinOrder, EntityUid station, HumanoidCharacterProfile profile) @@ -512,6 +500,7 @@ public PlayerSpawnCompleteEvent(EntityUid mob, Player = player; JobId = jobId; LateJoin = lateJoin; + Silent = silent; Station = station; Profile = profile; JoinOrder = joinOrder; diff --git a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs index e921590e39..0b86383faa 100644 --- a/Content.Server/Shuttles/Systems/ArrivalsSystem.cs +++ b/Content.Server/Shuttles/Systems/ArrivalsSystem.cs @@ -104,6 +104,8 @@ public override void Initialize() SubscribeLocalEvent(OnArrivalsFTL); SubscribeLocalEvent(OnArrivalsDocked); + SubscribeLocalEvent(SendDirections); + _pendingQuery = GetEntityQuery(); _blacklistQuery = GetEntityQuery(); _mobQuery = GetEntityQuery(); @@ -378,6 +380,20 @@ public void HandlePlayerSpawning(PlayerSpawningEvent ev) EnsureComp(ev.SpawnResult.Value); } + private void SendDirections(PlayerSpawnCompleteEvent ev) + { + if (!Enabled || !ev.LateJoin || ev.Silent || !_pendingQuery.HasComp(ev.Mob)) + return; + + var arrival = NextShuttleArrival(); + + var message = arrival is not null + ? Loc.GetString("latejoin-arrivals-direction-time", ("time", $"{arrival:mm\\:ss}")) + : Loc.GetString("latejoin-arrivals-direction"); + + _chat.DispatchServerMessage(ev.Player, message); + } + private bool TryTeleportToMapSpawn(EntityUid player, EntityUid stationId, TransformComponent? transform = null) { if (!Resolve(player, ref transform)) From bf7653eb7a3cee2cc1ba85c466fc3ddb97bc5a17 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 15:03:27 +0000 Subject: [PATCH 46/54] 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 5754613da7..7df53e2a84 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Boaz1111 - changes: - - message: The PKA can now mine rocks in one hit again. - type: Tweak - id: 6726 - time: '2024-06-14T02:40:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27476 - author: KyuPolaris changes: - message: Chickens now make a clucking sound when they speak. @@ -3865,3 +3858,10 @@ id: 7225 time: '2024-08-27T14:57:36.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30834 +- author: Aeshus + changes: + - message: Cryosleep no longer gives arrival shuttle directions. + type: Fix + id: 7226 + time: '2024-08-27T15:02:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30888 From e59b9c5714d0c272c51b48438fce1322e584ddcc Mon Sep 17 00:00:00 2001 From: stellar-novas Date: Tue, 27 Aug 2024 11:04:12 -0400 Subject: [PATCH 47/54] Remove glibc from devshell (#28842) --- shell.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/shell.nix b/shell.nix index da363feda9..9a1b0ca429 100644 --- a/shell.nix +++ b/shell.nix @@ -12,7 +12,6 @@ let SDL2 libGL openal - glibc freetype fluidsynth soundfont-fluid From f92ef41538cc97098cc71048072bcc9a21dbaa0b Mon Sep 17 00:00:00 2001 From: Simon <63975668+Simyon264@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:01:17 +0200 Subject: [PATCH 48/54] Automated whitelists (#23985) * Beginnings of making the breadmemes jobs easier * stuff * stuff pt. 2 * Stuff pt.3 * Stuff I forgot last time * Basic whitelist Only people that are added to the whitelist with the addwhitelist command will be able to join. I call this the "legacy" whitelist * Remove always deny condition in favor of just breaking if playtime check fails * Change default whitelist Default whitelist is now the "legacy" whitelist. * localization * Admin check * minor spelling change * Fix build * Whitelist message * Fix vars not being datafield and spelling mistakes * Minor spelling mistake * Change config for salamander * Reviews and stuff * Add summaries * Fix whitelists * Forgot to add a datafield * Fixing stuff I guess * Reuse admin remarks to reduce load when connecting. * Update log messages to be verbose instead of debug * Reviews * whoops * Explain a bit more how whitelist checking works * Apply CE's review * Append Membership to Blacklist and Whitelist conditions * Fix review comments * Uncapitalize playerConnectionWhitelist, add to ignored client prototypes * Make note count field work * Fix cvar for thingy --------- Co-authored-by: Pieter-Jan Briers --- Content.Client/Entry/EntryPoint.cs | 1 + .../20240112194620_Blacklist.Designer.cs | 1769 +++++++++++++++++ .../Postgres/20240112194620_Blacklist.cs | 33 + .../PostgresServerDbContextModelSnapshot.cs | 14 + .../20240112194612_Blacklist.Designer.cs | 1701 ++++++++++++++++ .../Sqlite/20240112194612_Blacklist.cs | 33 + .../SqliteServerDbContextModelSnapshot.cs | 13 + Content.Server.Database/Model.cs | 10 + .../Connection/ConnectionManager.Whitelist.cs | 221 ++ .../Connection/ConnectionManager.cs | 47 +- .../Connection/Whitelist/BlacklistCommands.cs | 117 ++ .../Conditions/ConditionAlwaysMatch.cs | 12 + .../ConditionManualBlacklistMembership.cs | 12 + .../ConditionManualWhitelistMembership.cs | 12 + .../Conditions/ConditionNotesDateRange.cs | 34 + .../Conditions/ConditionNotesPlaytimeRange.cs | 30 + .../Conditions/ConditionPlayerCount.cs | 16 + .../Whitelist/Conditions/ConditionPlaytime.cs | 15 + .../Whitelist/WhitelistCondition.cs | 41 + .../Whitelist/WhitelistPrototype.cs | 42 + Content.Server/Database/ServerDbBase.cs | 23 + Content.Server/Database/ServerDbManager.cs | 28 + Content.Server/Entry/EntryPoint.cs | 1 + Content.Shared/CCVar/CCVars.cs | 20 +- .../ConfigPresets/WizardsDen/salamander.toml | 5 +- .../Locale/en-US/connection-messages.ftl | 38 +- Resources/Prototypes/whitelists.yml | 7 + Resources/Prototypes/wizardsDenWhitelists.yml | 39 + 28 files changed, 4288 insertions(+), 46 deletions(-) create mode 100644 Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs create mode 100644 Content.Server/Connection/ConnectionManager.Whitelist.cs create mode 100644 Content.Server/Connection/Whitelist/BlacklistCommands.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs create mode 100644 Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs create mode 100644 Content.Server/Connection/Whitelist/WhitelistCondition.cs create mode 100644 Content.Server/Connection/Whitelist/WhitelistPrototype.cs create mode 100644 Resources/Prototypes/whitelists.yml create mode 100644 Resources/Prototypes/wizardsDenWhitelists.yml diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 6caefb9a7e..c4c18f154a 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -108,6 +108,7 @@ public override void Init() _prototypeManager.RegisterIgnore("lobbyBackground"); _prototypeManager.RegisterIgnore("gamePreset"); _prototypeManager.RegisterIgnore("noiseChannel"); + _prototypeManager.RegisterIgnore("playerConnectionWhitelist"); _prototypeManager.RegisterIgnore("spaceBiome"); _prototypeManager.RegisterIgnore("worldgenConfig"); _prototypeManager.RegisterIgnore("gameRule"); diff --git a/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs new file mode 100644 index 0000000000..61aa1a8c73 --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.Designer.cs @@ -0,0 +1,1769 @@ +// +using System; +using System.Net; +using System.Text.Json; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + [DbContext(typeof(PostgresServerDbContext))] + [Migration("20240112194620_Blacklist")] + partial class Blacklist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("text") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminId") + .HasColumnType("uuid") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("boolean") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("integer") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("smallint") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("text") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("integer") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Message") + .HasAnnotation("Npgsql:TsVectorConfig", "english"); + + NpgsqlIndexBuilderExtensions.HasMethod(b.HasIndex("Message"), "GIN"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("integer") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_messages_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("boolean") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_notes_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("boolean") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_rank_flag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminRankId") + .HasColumnType("integer") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("admin_watchlists_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("uuid") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("boolean") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("uuid") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("antag_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("assigned_user_id_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("connection_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("smallint") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("timestamp with time zone") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("job_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("JobName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("integer") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("play_time_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("PlayerId") + .HasColumnType("uuid") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("interval") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("text") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("player_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FirstSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("inet") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("bytea") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", null, t => + { + t.HasCheckConstraint("LastSeenAddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= last_seen_address"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("preference_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("integer") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("profile_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("text") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("text") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("text") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("text") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("hair_name"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("integer") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("integer") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("text") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("text") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("integer") + .HasColumnName("slot"); + + b.Property("Species") + .IsRequired() + .HasColumnType("text") + .HasColumnName("species"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("round_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ServerId") + .HasColumnType("integer") + .HasColumnName("server_id"); + + b.Property("StartDate") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValue(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property?>("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("boolean") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("integer") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("integer") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_ban_hit_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("integer") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("server_role_ban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property?>("Address") + .HasColumnType("inet") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("uuid") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("bytea") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("boolean") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("uuid") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("uuid") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("interval") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("integer") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("integer") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("AddressNotIPv6MappedIPv4", "NOT inet '::ffff:0.0.0.0/96' >>= address"); + + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("role_unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("unban_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BanId") + .HasColumnType("integer") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("uuid") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("trait_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ProfileId") + .HasColumnType("integer") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("text") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasColumnName("uploaded_resource_log_id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Data") + .IsRequired() + .HasColumnType("bytea") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("timestamp with time zone") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("text") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("integer") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("integer") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs new file mode 100644 index 0000000000..a6a34626ed --- /dev/null +++ b/Content.Server.Database/Migrations/Postgres/20240112194620_Blacklist.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Postgres +{ + /// + public partial class Blacklist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "blacklist", + columns: table => new + { + user_id = table.Column(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_blacklist", x => x.user_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "blacklist"); + } + } +} diff --git a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs index cb9fdde4d5..1f64f6e51a 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresServerDbContextModelSnapshot.cs @@ -512,6 +512,20 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.Blacklist", + b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("uuid") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string) null); + }); + modelBuilder.Entity("Content.Server.Database.BanTemplate", b => { b.Property("Id") diff --git a/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs new file mode 100644 index 0000000000..049901bc7d --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.Designer.cs @@ -0,0 +1,1701 @@ +// +using System; +using Content.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + [DbContext(typeof(SqliteServerDbContext))] + [Migration("20240112194612_Blacklist")] + partial class Blacklist + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.4"); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Title") + .HasColumnType("TEXT") + .HasColumnName("title"); + + b.HasKey("UserId") + .HasName("PK_admin"); + + b.HasIndex("AdminRankId") + .HasDatabaseName("IX_admin_admin_rank_id"); + + b.ToTable("admin", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_flag_id"); + + b.Property("AdminId") + .HasColumnType("TEXT") + .HasColumnName("admin_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.Property("Negative") + .HasColumnType("INTEGER") + .HasColumnName("negative"); + + b.HasKey("Id") + .HasName("PK_admin_flag"); + + b.HasIndex("AdminId") + .HasDatabaseName("IX_admin_flag_admin_id"); + + b.HasIndex("Flag", "AdminId") + .IsUnique(); + + b.ToTable("admin_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Id") + .HasColumnType("INTEGER") + .HasColumnName("admin_log_id"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Impact") + .HasColumnType("INTEGER") + .HasColumnName("impact"); + + b.Property("Json") + .IsRequired() + .HasColumnType("jsonb") + .HasColumnName("json"); + + b.Property("Message") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("Type") + .HasColumnType("INTEGER") + .HasColumnName("type"); + + b.HasKey("RoundId", "Id") + .HasName("PK_admin_log"); + + b.HasIndex("Date"); + + b.HasIndex("Type") + .HasDatabaseName("IX_admin_log_type"); + + b.ToTable("admin_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("LogId") + .HasColumnType("INTEGER") + .HasColumnName("log_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.HasKey("RoundId", "LogId", "PlayerUserId") + .HasName("PK_admin_log_player"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_log_player_player_user_id"); + + b.ToTable("admin_log_player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_messages_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Seen") + .HasColumnType("INTEGER") + .HasColumnName("seen"); + + b.HasKey("Id") + .HasName("PK_admin_messages"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_messages_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_messages_round_id"); + + b.ToTable("admin_messages", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_notes_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Secret") + .HasColumnType("INTEGER") + .HasColumnName("secret"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_admin_notes"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_notes_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_notes_round_id"); + + b.ToTable("admin_notes", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_admin_rank"); + + b.ToTable("admin_rank", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_flag_id"); + + b.Property("AdminRankId") + .HasColumnType("INTEGER") + .HasColumnName("admin_rank_id"); + + b.Property("Flag") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flag"); + + b.HasKey("Id") + .HasName("PK_admin_rank_flag"); + + b.HasIndex("AdminRankId"); + + b.HasIndex("Flag", "AdminRankId") + .IsUnique(); + + b.ToTable("admin_rank_flag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("admin_watchlists_id"); + + b.Property("CreatedAt") + .HasColumnType("TEXT") + .HasColumnName("created_at"); + + b.Property("CreatedById") + .HasColumnType("TEXT") + .HasColumnName("created_by_id"); + + b.Property("Deleted") + .HasColumnType("INTEGER") + .HasColumnName("deleted"); + + b.Property("DeletedAt") + .HasColumnType("TEXT") + .HasColumnName("deleted_at"); + + b.Property("DeletedById") + .HasColumnType("TEXT") + .HasColumnName("deleted_by_id"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("LastEditedAt") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("TEXT") + .HasColumnName("message"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.HasKey("Id") + .HasName("PK_admin_watchlists"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_admin_watchlists_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_admin_watchlists_round_id"); + + b.ToTable("admin_watchlists", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("antag_id"); + + b.Property("AntagName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("antag_name"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_antag"); + + b.HasIndex("ProfileId", "AntagName") + .IsUnique(); + + b.ToTable("antag", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.AssignedUserId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("assigned_user_id_id"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_assigned_user_id"); + + b.HasIndex("UserId") + .IsUnique(); + + b.HasIndex("UserName") + .IsUnique(); + + b.ToTable("assigned_user_id", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Blacklist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("connection_log_id"); + + b.Property("Address") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("Denied") + .HasColumnType("INTEGER") + .HasColumnName("denied"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("ServerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(0) + .HasColumnName("server_id"); + + b.Property("Time") + .HasColumnType("TEXT") + .HasColumnName("time"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("user_name"); + + b.HasKey("Id") + .HasName("PK_connection_log"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_connection_log_server_id"); + + b.HasIndex("UserId"); + + b.ToTable("connection_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("job_id"); + + b.Property("JobName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("job_name"); + + b.Property("Priority") + .HasColumnType("INTEGER") + .HasColumnName("priority"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.HasKey("Id") + .HasName("PK_job"); + + b.HasIndex("ProfileId"); + + b.HasIndex("ProfileId", "JobName") + .IsUnique(); + + b.HasIndex(new[] { "ProfileId" }, "IX_job_one_high_priority") + .IsUnique() + .HasFilter("priority = 3"); + + b.ToTable("job", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.PlayTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("play_time_id"); + + b.Property("PlayerId") + .HasColumnType("TEXT") + .HasColumnName("player_id"); + + b.Property("TimeSpent") + .HasColumnType("TEXT") + .HasColumnName("time_spent"); + + b.Property("Tracker") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("tracker"); + + b.HasKey("Id") + .HasName("PK_play_time"); + + b.HasIndex("PlayerId", "Tracker") + .IsUnique(); + + b.ToTable("play_time", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("player_id"); + + b.Property("FirstSeenTime") + .HasColumnType("TEXT") + .HasColumnName("first_seen_time"); + + b.Property("LastReadRules") + .HasColumnType("TEXT") + .HasColumnName("last_read_rules"); + + b.Property("LastSeenAddress") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_address"); + + b.Property("LastSeenHWId") + .HasColumnType("BLOB") + .HasColumnName("last_seen_hwid"); + + b.Property("LastSeenTime") + .HasColumnType("TEXT") + .HasColumnName("last_seen_time"); + + b.Property("LastSeenUserName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("last_seen_user_name"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_player"); + + b.HasAlternateKey("UserId") + .HasName("ak_player_user_id"); + + b.HasIndex("LastSeenUserName"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("player", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("AdminOOCColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("admin_ooc_color"); + + b.Property("SelectedCharacterSlot") + .HasColumnType("INTEGER") + .HasColumnName("selected_character_slot"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_preference"); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("preference", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("Age") + .HasColumnType("INTEGER") + .HasColumnName("age"); + + b.Property("Backpack") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("backpack"); + + b.Property("CharacterName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("char_name"); + + b.Property("Clothing") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("clothing"); + + b.Property("EyeColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("eye_color"); + + b.Property("FacialHairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_color"); + + b.Property("FacialHairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("facial_hair_name"); + + b.Property("FlavorText") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("flavor_text"); + + b.Property("Gender") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("gender"); + + b.Property("HairColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_color"); + + b.Property("HairName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("hair_name"); + + b.Property("Markings") + .HasColumnType("jsonb") + .HasColumnName("markings"); + + b.Property("PreferenceId") + .HasColumnType("INTEGER") + .HasColumnName("preference_id"); + + b.Property("PreferenceUnavailable") + .HasColumnType("INTEGER") + .HasColumnName("pref_unavailable"); + + b.Property("Sex") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("sex"); + + b.Property("SkinColor") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("skin_color"); + + b.Property("Slot") + .HasColumnType("INTEGER") + .HasColumnName("slot"); + + b.Property("Species") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("species"); + + b.HasKey("Id") + .HasName("PK_profile"); + + b.HasIndex("PreferenceId") + .HasDatabaseName("IX_profile_preference_id"); + + b.HasIndex("Slot", "PreferenceId") + .IsUnique(); + + b.ToTable("profile", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("ServerId") + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("StartDate") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)) + .HasColumnName("start_date"); + + b.HasKey("Id") + .HasName("PK_round"); + + b.HasIndex("ServerId") + .HasDatabaseName("IX_round_server_id"); + + b.HasIndex("StartDate"); + + b.ToTable("round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("PK_server"); + + b.ToTable("server", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("AutoDelete") + .HasColumnType("INTEGER") + .HasColumnName("auto_delete"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExemptFlags") + .HasColumnType("INTEGER") + .HasColumnName("exempt_flags"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_ban_round_id"); + + b.ToTable("server_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanExemption", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.Property("Flags") + .HasColumnType("INTEGER") + .HasColumnName("flags"); + + b.HasKey("UserId") + .HasName("PK_server_ban_exemption"); + + b.ToTable("server_ban_exemption", null, t => + { + t.HasCheckConstraint("FlagsNotZero", "flags != 0"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_ban_hit_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("ConnectionId") + .HasColumnType("INTEGER") + .HasColumnName("connection_id"); + + b.HasKey("Id") + .HasName("PK_server_ban_hit"); + + b.HasIndex("BanId") + .HasDatabaseName("IX_server_ban_hit_ban_id"); + + b.HasIndex("ConnectionId") + .HasDatabaseName("IX_server_ban_hit_connection_id"); + + b.ToTable("server_ban_hit", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("server_role_ban_id"); + + b.Property("Address") + .HasColumnType("TEXT") + .HasColumnName("address"); + + b.Property("BanTime") + .HasColumnType("TEXT") + .HasColumnName("ban_time"); + + b.Property("BanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("banning_admin"); + + b.Property("ExpirationTime") + .HasColumnType("TEXT") + .HasColumnName("expiration_time"); + + b.Property("HWId") + .HasColumnType("BLOB") + .HasColumnName("hwid"); + + b.Property("Hidden") + .HasColumnType("INTEGER") + .HasColumnName("hidden"); + + b.Property("LastEditedAt") + .HasColumnType("TEXT") + .HasColumnName("last_edited_at"); + + b.Property("LastEditedById") + .HasColumnType("TEXT") + .HasColumnName("last_edited_by_id"); + + b.Property("PlayerUserId") + .HasColumnType("TEXT") + .HasColumnName("player_user_id"); + + b.Property("PlaytimeAtNote") + .HasColumnType("TEXT") + .HasColumnName("playtime_at_note"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("reason"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("role_id"); + + b.Property("RoundId") + .HasColumnType("INTEGER") + .HasColumnName("round_id"); + + b.Property("Severity") + .HasColumnType("INTEGER") + .HasColumnName("severity"); + + b.HasKey("Id") + .HasName("PK_server_role_ban"); + + b.HasIndex("Address"); + + b.HasIndex("BanningAdmin"); + + b.HasIndex("LastEditedById"); + + b.HasIndex("PlayerUserId") + .HasDatabaseName("IX_server_role_ban_player_user_id"); + + b.HasIndex("RoundId") + .HasDatabaseName("IX_server_role_ban_round_id"); + + b.ToTable("server_role_ban", null, t => + { + t.HasCheckConstraint("HaveEitherAddressOrUserIdOrHWId", "address IS NOT NULL OR player_user_id IS NOT NULL OR hwid IS NOT NULL"); + }); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("role_unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_role_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_role_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("unban_id"); + + b.Property("BanId") + .HasColumnType("INTEGER") + .HasColumnName("ban_id"); + + b.Property("UnbanTime") + .HasColumnType("TEXT") + .HasColumnName("unban_time"); + + b.Property("UnbanningAdmin") + .HasColumnType("TEXT") + .HasColumnName("unbanning_admin"); + + b.HasKey("Id") + .HasName("PK_server_unban"); + + b.HasIndex("BanId") + .IsUnique(); + + b.ToTable("server_unban", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("trait_id"); + + b.Property("ProfileId") + .HasColumnType("INTEGER") + .HasColumnName("profile_id"); + + b.Property("TraitName") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("trait_name"); + + b.HasKey("Id") + .HasName("PK_trait"); + + b.HasIndex("ProfileId", "TraitName") + .IsUnique(); + + b.ToTable("trait", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.UploadedResourceLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasColumnName("uploaded_resource_log_id"); + + b.Property("Data") + .IsRequired() + .HasColumnType("BLOB") + .HasColumnName("data"); + + b.Property("Date") + .HasColumnType("TEXT") + .HasColumnName("date"); + + b.Property("Path") + .IsRequired() + .HasColumnType("TEXT") + .HasColumnName("path"); + + b.Property("UserId") + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("Id") + .HasName("PK_uploaded_resource_log"); + + b.ToTable("uploaded_resource_log", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Whitelist", b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_whitelist"); + + b.ToTable("whitelist", (string)null); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.Property("PlayersId") + .HasColumnType("INTEGER") + .HasColumnName("players_id"); + + b.Property("RoundsId") + .HasColumnType("INTEGER") + .HasColumnName("rounds_id"); + + b.HasKey("PlayersId", "RoundsId") + .HasName("PK_player_round"); + + b.HasIndex("RoundsId") + .HasDatabaseName("IX_player_round_rounds_id"); + + b.ToTable("player_round", (string)null); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.HasOne("Content.Server.Database.AdminRank", "AdminRank") + .WithMany("Admins") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_admin_rank_admin_rank_id"); + + b.Navigation("AdminRank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminFlag", b => + { + b.HasOne("Content.Server.Database.Admin", "Admin") + .WithMany("Flags") + .HasForeignKey("AdminId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_flag_admin_admin_id"); + + b.Navigation("Admin"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany("AdminLogs") + .HasForeignKey("RoundId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_round_round_id"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLogPlayer", b => + { + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminLogs") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_player_player_user_id"); + + b.HasOne("Content.Server.Database.AdminLog", "Log") + .WithMany("Players") + .HasForeignKey("RoundId", "LogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_log_player_admin_log_round_id_log_id"); + + b.Navigation("Log"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminMessage", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminMessagesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminMessagesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminMessagesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_messages_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminMessagesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_messages_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_messages_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminNote", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminNotesCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminNotesDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminNotesLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_notes_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminNotesReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_notes_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_notes_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRankFlag", b => + { + b.HasOne("Content.Server.Database.AdminRank", "Rank") + .WithMany("Flags") + .HasForeignKey("AdminRankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_admin_rank_flag_admin_rank_admin_rank_id"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminWatchlist", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminWatchlistsCreated") + .HasForeignKey("CreatedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_created_by_id"); + + b.HasOne("Content.Server.Database.Player", "DeletedBy") + .WithMany("AdminWatchlistsDeleted") + .HasForeignKey("DeletedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_deleted_by_id"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminWatchlistsLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_admin_watchlists_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Player", "Player") + .WithMany("AdminWatchlistsReceived") + .HasForeignKey("PlayerUserId") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_admin_watchlists_player_player_user_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_admin_watchlists_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Player"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.Antag", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Antags") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_antag_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("ConnectionLogs") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired() + .HasConstraintName("FK_connection_log_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.Job", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Jobs") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_job_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.HasOne("Content.Server.Database.Preference", "Preference") + .WithMany("Profiles") + .HasForeignKey("PreferenceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_profile_preference_preference_id"); + + b.Navigation("Preference"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.HasOne("Content.Server.Database.Server", "Server") + .WithMany("Rounds") + .HasForeignKey("ServerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_round_server_server_id"); + + b.Navigation("Server"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBanHit", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithMany("BanHits") + .HasForeignKey("BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_server_ban_ban_id"); + + b.HasOne("Content.Server.Database.ConnectionLog", "Connection") + .WithMany("BanHits") + .HasForeignKey("ConnectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_ban_hit_connection_log_connection_id"); + + b.Navigation("Ban"); + + b.Navigation("Connection"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.HasOne("Content.Server.Database.Player", "CreatedBy") + .WithMany("AdminServerRoleBansCreated") + .HasForeignKey("BanningAdmin") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_banning_admin"); + + b.HasOne("Content.Server.Database.Player", "LastEditedBy") + .WithMany("AdminServerRoleBansLastEdited") + .HasForeignKey("LastEditedById") + .HasPrincipalKey("UserId") + .OnDelete(DeleteBehavior.SetNull) + .HasConstraintName("FK_server_role_ban_player_last_edited_by_id"); + + b.HasOne("Content.Server.Database.Round", "Round") + .WithMany() + .HasForeignKey("RoundId") + .HasConstraintName("FK_server_role_ban_round_round_id"); + + b.Navigation("CreatedBy"); + + b.Navigation("LastEditedBy"); + + b.Navigation("Round"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleUnban", b => + { + b.HasOne("Content.Server.Database.ServerRoleBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerRoleUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_role_unban_server_role_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerUnban", b => + { + b.HasOne("Content.Server.Database.ServerBan", "Ban") + .WithOne("Unban") + .HasForeignKey("Content.Server.Database.ServerUnban", "BanId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_server_unban_server_ban_ban_id"); + + b.Navigation("Ban"); + }); + + modelBuilder.Entity("Content.Server.Database.Trait", b => + { + b.HasOne("Content.Server.Database.Profile", "Profile") + .WithMany("Traits") + .HasForeignKey("ProfileId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_trait_profile_profile_id"); + + b.Navigation("Profile"); + }); + + modelBuilder.Entity("PlayerRound", b => + { + b.HasOne("Content.Server.Database.Player", null) + .WithMany() + .HasForeignKey("PlayersId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_player_players_id"); + + b.HasOne("Content.Server.Database.Round", null) + .WithMany() + .HasForeignKey("RoundsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("FK_player_round_round_rounds_id"); + }); + + modelBuilder.Entity("Content.Server.Database.Admin", b => + { + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminLog", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Content.Server.Database.AdminRank", b => + { + b.Navigation("Admins"); + + b.Navigation("Flags"); + }); + + modelBuilder.Entity("Content.Server.Database.ConnectionLog", b => + { + b.Navigation("BanHits"); + }); + + modelBuilder.Entity("Content.Server.Database.Player", b => + { + b.Navigation("AdminLogs"); + + b.Navigation("AdminMessagesCreated"); + + b.Navigation("AdminMessagesDeleted"); + + b.Navigation("AdminMessagesLastEdited"); + + b.Navigation("AdminMessagesReceived"); + + b.Navigation("AdminNotesCreated"); + + b.Navigation("AdminNotesDeleted"); + + b.Navigation("AdminNotesLastEdited"); + + b.Navigation("AdminNotesReceived"); + + b.Navigation("AdminServerBansCreated"); + + b.Navigation("AdminServerBansLastEdited"); + + b.Navigation("AdminServerRoleBansCreated"); + + b.Navigation("AdminServerRoleBansLastEdited"); + + b.Navigation("AdminWatchlistsCreated"); + + b.Navigation("AdminWatchlistsDeleted"); + + b.Navigation("AdminWatchlistsLastEdited"); + + b.Navigation("AdminWatchlistsReceived"); + }); + + modelBuilder.Entity("Content.Server.Database.Preference", b => + { + b.Navigation("Profiles"); + }); + + modelBuilder.Entity("Content.Server.Database.Profile", b => + { + b.Navigation("Antags"); + + b.Navigation("Jobs"); + + b.Navigation("Traits"); + }); + + modelBuilder.Entity("Content.Server.Database.Round", b => + { + b.Navigation("AdminLogs"); + }); + + modelBuilder.Entity("Content.Server.Database.Server", b => + { + b.Navigation("ConnectionLogs"); + + b.Navigation("Rounds"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerBan", b => + { + b.Navigation("BanHits"); + + b.Navigation("Unban"); + }); + + modelBuilder.Entity("Content.Server.Database.ServerRoleBan", b => + { + b.Navigation("Unban"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs new file mode 100644 index 0000000000..4988a3c336 --- /dev/null +++ b/Content.Server.Database/Migrations/Sqlite/20240112194612_Blacklist.cs @@ -0,0 +1,33 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Content.Server.Database.Migrations.Sqlite +{ + /// + public partial class Blacklist : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "blacklist", + columns: table => new + { + user_id = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_blacklist", x => x.user_id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "blacklist"); + } + } +} diff --git a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs index efc6682191..02d4416302 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqliteServerDbContextModelSnapshot.cs @@ -483,6 +483,19 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("assigned_user_id", (string)null); }); + modelBuilder.Entity("Content.Server.Database.Blacklist", + b => + { + b.Property("UserId") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasColumnName("user_id"); + + b.HasKey("UserId") + .HasName("PK_blacklist"); + + b.ToTable("blacklist", (string) null); + }); modelBuilder.Entity("Content.Server.Database.BanTemplate", b => { b.Property("Id") diff --git a/Content.Server.Database/Model.cs b/Content.Server.Database/Model.cs index ea63c41fc2..00b3cfea03 100644 --- a/Content.Server.Database/Model.cs +++ b/Content.Server.Database/Model.cs @@ -28,6 +28,7 @@ protected ServerDbContext(DbContextOptions options) : base(options) public DbSet AdminLog { get; set; } = null!; public DbSet AdminLogPlayer { get; set; } = null!; public DbSet Whitelist { get; set; } = null!; + public DbSet Blacklist { get; set; } = null!; public DbSet Ban { get; set; } = default!; public DbSet Unban { get; set; } = default!; public DbSet BanExemption { get; set; } = default!; @@ -551,6 +552,15 @@ public class Whitelist [Required, Key] public Guid UserId { get; set; } } + /// + /// List of users who are on the "blacklist". This is a list that may be used by Whitelist implementations to deny access to certain users. + /// + [Table("blacklist")] + public class Blacklist + { + [Required, Key] public Guid UserId { get; set; } + } + public class Admin { [Key] public Guid UserId { get; set; } diff --git a/Content.Server/Connection/ConnectionManager.Whitelist.cs b/Content.Server/Connection/ConnectionManager.Whitelist.cs new file mode 100644 index 0000000000..212c87e17a --- /dev/null +++ b/Content.Server/Connection/ConnectionManager.Whitelist.cs @@ -0,0 +1,221 @@ +using System.Linq; +using System.Threading.Tasks; +using Content.Server.Connection.Whitelist; +using Content.Server.Connection.Whitelist.Conditions; +using Content.Server.Database; +using Content.Shared.CCVar; +using Content.Shared.Database; +using Content.Shared.Players.PlayTimeTracking; +using Robust.Shared.Network; + +namespace Content.Server.Connection; + +/// +/// Handles whitelist conditions for incoming connections. +/// +public sealed partial class ConnectionManager +{ + private PlayerConnectionWhitelistPrototype[]? _whitelists; + + public void PostInit() + { + _cfg.OnValueChanged(CCVars.WhitelistPrototypeList, UpdateWhitelists, true); + } + + private void UpdateWhitelists(string s) + { + var list = new List(); + foreach (var id in s.Split(',')) + { + if (_prototypeManager.TryIndex(id, out PlayerConnectionWhitelistPrototype? prototype)) + { + list.Add(prototype); + } + else + { + _sawmill.Fatal($"Whitelist prototype {id} does not exist. Denying all connections."); + _whitelists = null; // Invalidate the list, causes deny on all connections. + return; + } + } + + _whitelists = list.ToArray(); + } + + private bool IsValid(PlayerConnectionWhitelistPrototype whitelist, int playerCount) + { + return playerCount >= whitelist.MinimumPlayers && playerCount <= whitelist.MaximumPlayers; + } + + public async Task<(bool isWhitelisted, string? denyMessage)> IsWhitelisted(PlayerConnectionWhitelistPrototype whitelist, NetUserData data, ISawmill sawmill) + { + var cacheRemarks = await _db.GetAllAdminRemarks(data.UserId); + var cachePlaytime = await _db.GetPlayTimes(data.UserId); + + foreach (var condition in whitelist.Conditions) + { + bool matched; + string denyMessage; + switch (condition) + { + case ConditionAlwaysMatch: + matched = true; + denyMessage = Loc.GetString("whitelist-always-deny"); + break; + case ConditionManualWhitelistMembership: + matched = await CheckConditionManualWhitelist(data); + denyMessage = Loc.GetString("whitelist-manual"); + break; + case ConditionManualBlacklistMembership: + matched = await CheckConditionManualBlacklist(data); + denyMessage = Loc.GetString("whitelist-blacklisted"); + break; + case ConditionNotesDateRange conditionNotes: + matched = CheckConditionNotesDateRange(conditionNotes, cacheRemarks); + denyMessage = Loc.GetString("whitelist-notes"); + break; + case ConditionPlayerCount conditionPlayerCount: + matched = CheckConditionPlayerCount(conditionPlayerCount); + denyMessage = Loc.GetString("whitelist-player-count"); + break; + case ConditionPlaytime conditionPlaytime: + matched = CheckConditionPlaytime(conditionPlaytime, cachePlaytime); + denyMessage = Loc.GetString("whitelist-playtime", ("minutes", conditionPlaytime.MinimumPlaytime)); + break; + case ConditionNotesPlaytimeRange conditionNotesPlaytimeRange: + matched = CheckConditionNotesPlaytimeRange(conditionNotesPlaytimeRange, cacheRemarks, cachePlaytime); + denyMessage = Loc.GetString("whitelist-notes"); + break; + default: + throw new NotImplementedException($"Whitelist condition {condition.GetType().Name} not implemented"); + } + + sawmill.Verbose($"User {data.UserName} whitelist condition {condition.GetType().Name} result: {matched}"); + sawmill.Verbose($"Action: {condition.Action.ToString()}"); + switch (condition.Action) + { + case ConditionAction.Allow: + if (matched) + { + sawmill.Verbose($"User {data.UserName} passed whitelist condition {condition.GetType().Name} and it's a breaking condition"); + return (true, denyMessage); + } + break; + case ConditionAction.Deny: + if (matched) + { + sawmill.Verbose($"User {data.UserName} failed whitelist condition {condition.GetType().Name}"); + return (false, denyMessage); + } + break; + default: + sawmill.Verbose($"User {data.UserName} failed whitelist condition {condition.GetType().Name} but it's not a breaking condition"); + break; + } + } + sawmill.Verbose($"User {data.UserName} passed all whitelist conditions"); + return (true, null); + } + + #region Condition Checking + + private async Task CheckConditionManualWhitelist(NetUserData data) + { + return !(await _db.GetWhitelistStatusAsync(data.UserId)); + } + + private async Task CheckConditionManualBlacklist(NetUserData data) + { + return await _db.GetBlacklistStatusAsync(data.UserId); + } + + private bool CheckConditionNotesDateRange(ConditionNotesDateRange conditionNotes, List remarks) + { + var range = DateTime.UtcNow.AddDays(-conditionNotes.Range); + + return CheckRemarks(remarks, + conditionNotes.IncludeExpired, + conditionNotes.IncludeSecret, + conditionNotes.MinimumSeverity, + conditionNotes.MinimumNotes, + adminRemarksRecord => adminRemarksRecord.CreatedAt > range); + } + + private bool CheckConditionPlayerCount(ConditionPlayerCount conditionPlayerCount) + { + var count = _plyMgr.PlayerCount; + return count >= conditionPlayerCount.MinimumPlayers && count <= conditionPlayerCount.MaximumPlayers; + } + + private bool CheckConditionPlaytime(ConditionPlaytime conditionPlaytime, List playtime) + { + var tracker = playtime.Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall); + if (tracker is null) + { + return false; + } + + return tracker.TimeSpent.TotalMinutes >= conditionPlaytime.MinimumPlaytime; + } + + private bool CheckConditionNotesPlaytimeRange( + ConditionNotesPlaytimeRange conditionNotesPlaytimeRange, + List remarks, + List playtime) + { + var overallTracker = playtime.Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall); + if (overallTracker is null) + { + return false; + } + + return CheckRemarks(remarks, + conditionNotesPlaytimeRange.IncludeExpired, + conditionNotesPlaytimeRange.IncludeSecret, + conditionNotesPlaytimeRange.MinimumSeverity, + conditionNotesPlaytimeRange.MinimumNotes, + adminRemarksRecord => adminRemarksRecord.PlaytimeAtNote >= overallTracker.TimeSpent - TimeSpan.FromMinutes(conditionNotesPlaytimeRange.Range)); + } + + private bool CheckRemarks(List remarks, bool includeExpired, bool includeSecret, NoteSeverity minimumSeverity, int MinimumNotes, Func additionalCheck) + { + var utcNow = DateTime.UtcNow; + + var notes = remarks.Count(r => r is AdminNoteRecord note && note.Severity >= minimumSeverity && (includeSecret || !note.Secret) && (includeExpired || note.ExpirationTime == null || note.ExpirationTime > utcNow)); + if (notes < MinimumNotes) + { + return false; + } + + foreach (var adminRemarksRecord in remarks) + { + // If we're not including expired notes, skip them + if (!includeExpired && (adminRemarksRecord.ExpirationTime == null || adminRemarksRecord.ExpirationTime <= utcNow)) + continue; + + // In order to get the severity of the remark, we need to see if it's an AdminNoteRecord. + if (adminRemarksRecord is not AdminNoteRecord adminNoteRecord) + continue; + + // We want to filter out secret notes if we're not including them. + if (!includeSecret && adminNoteRecord.Secret) + continue; + + // At this point, we need to remove the note if it's not within the severity range. + if (adminNoteRecord.Severity < minimumSeverity) + continue; + + // Perform the additional check specific to each method + if (!additionalCheck(adminRemarksRecord)) + continue; + + // If we've made it this far, we have a match + return true; + } + + // No matches + return false; + } + + #endregion +} diff --git a/Content.Server/Connection/ConnectionManager.cs b/Content.Server/Connection/ConnectionManager.cs index d39dd7990e..987c8d06b0 100644 --- a/Content.Server/Connection/ConnectionManager.cs +++ b/Content.Server/Connection/ConnectionManager.cs @@ -1,5 +1,9 @@ using System.Collections.Immutable; using System.Linq; +using System.Text.Json.Nodes; +using System.Threading.Tasks; +using Content.Server.Connection.Whitelist; +using Content.Server.Connection.Whitelist.Conditions; using System.Runtime.InteropServices; using System.Text.Json.Nodes; using System.Threading.Tasks; @@ -14,6 +18,7 @@ using Robust.Shared.Configuration; using Robust.Shared.Enums; using Robust.Shared.Network; +using Robust.Shared.Prototypes; using Robust.Shared.Player; using Robust.Shared.Timing; @@ -26,6 +31,7 @@ namespace Content.Server.Connection public interface IConnectionManager { void Initialize(); + void PostInit(); /// /// Temporarily allow a user to bypass regular connection requirements. @@ -43,7 +49,7 @@ public interface IConnectionManager /// /// Handles various duties like guest username assignment, bans, connection logs, etc... /// - public sealed class ConnectionManager : IConnectionManager + public sealed partial class ConnectionManager : IConnectionManager { [Dependency] private readonly IServerDbManager _dbManager = default!; [Dependency] private readonly IPlayerManager _plyMgr = default!; @@ -52,12 +58,14 @@ public sealed class ConnectionManager : IConnectionManager [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly ILocalizationManager _loc = default!; [Dependency] private readonly ServerDbEntryManager _serverDbEntry = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IChatManager _chatManager = default!; - private readonly Dictionary _temporaryBypasses = []; private ISawmill _sawmill = default!; + private readonly Dictionary _temporaryBypasses = []; + public void Initialize() { @@ -268,20 +276,33 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame return (ConnectionDenyReason.Full, Loc.GetString("soft-player-cap-full"), null); } - if (_cfg.GetCVar(CCVars.WhitelistEnabled)) + // Checks for whitelist IF it's enabled AND the user isn't an admin. Admins are always allowed. + if (_cfg.GetCVar(CCVars.WhitelistEnabled) && adminData is null) { - var min = _cfg.GetCVar(CCVars.WhitelistMinPlayers); - var max = _cfg.GetCVar(CCVars.WhitelistMaxPlayers); - var playerCountValid = _plyMgr.PlayerCount >= min && _plyMgr.PlayerCount < max; + if (_whitelists is null) + { + _sawmill.Error("Whitelist enabled but no whitelists loaded."); + // Misconfigured, deny everyone. + return (ConnectionDenyReason.Whitelist, Loc.GetString("whitelist-misconfigured"), null); + } - if (playerCountValid && await _db.GetWhitelistStatusAsync(userId) == false - && adminData is null) + foreach (var whitelist in _whitelists) { - var msg = Loc.GetString(_cfg.GetCVar(CCVars.WhitelistReason)); - // was the whitelist playercount changed? - if (min > 0 || max < int.MaxValue) - msg += "\n" + Loc.GetString("whitelist-playercount-invalid", ("min", min), ("max", max)); - return (ConnectionDenyReason.Whitelist, msg, null); + if (!IsValid(whitelist, _plyMgr.PlayerCount)) + { + // Not valid for current player count. + continue; + } + + var whitelistStatus = await IsWhitelisted(whitelist, e.UserData, _sawmill); + if (!whitelistStatus.isWhitelisted) + { + // Not whitelisted. + return (ConnectionDenyReason.Whitelist, Loc.GetString("whitelist-fail-prefix", ("msg", whitelistStatus.denyMessage!)), null); + } + + // Whitelisted, don't check any more. + break; } } diff --git a/Content.Server/Connection/Whitelist/BlacklistCommands.cs b/Content.Server/Connection/Whitelist/BlacklistCommands.cs new file mode 100644 index 0000000000..e79fb7ee22 --- /dev/null +++ b/Content.Server/Connection/Whitelist/BlacklistCommands.cs @@ -0,0 +1,117 @@ +using Content.Server.Administration; +using Content.Server.Database; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Connection.Whitelist; + +[AdminCommand(AdminFlags.Ban)] +public sealed class AddBlacklistCommand : LocalizedCommands +{ + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IServerDbManager _db = default!; + + public override string Command => "blacklistadd"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); + return; + } + + if (args.Length > 1) + { + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + shell.WriteLine(Help); + return; + } + + var name = args[0]; + var data = await _playerLocator.LookupIdByNameAsync(name); + + if (data == null) + { + shell.WriteError(Loc.GetString("cmd-blacklistadd-not-found", ("username", args[0]))); + return; + } + var guid = data.UserId; + var isBlacklisted = await _db.GetBlacklistStatusAsync(guid); + if (isBlacklisted) + { + shell.WriteLine(Loc.GetString("cmd-blacklistadd-existing", ("username", data.Username))); + return; + } + + await _db.AddToBlacklistAsync(guid); + shell.WriteLine(Loc.GetString("cmd-blacklistadd-added", ("username", data.Username))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-blacklistadd-arg-player")); + } + + return CompletionResult.Empty; + } +} + +[AdminCommand(AdminFlags.Ban)] +public sealed class RemoveBlacklistCommand : LocalizedCommands +{ + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IServerDbManager _db = default!; + + public override string Command => "blacklistremove"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + shell.WriteLine(Help); + return; + } + + if (args.Length > 1) + { + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + shell.WriteLine(Help); + return; + } + + var name = args[0]; + var data = await _playerLocator.LookupIdByNameAsync(name); + + if (data == null) + { + shell.WriteError(Loc.GetString("cmd-blacklistremove-not-found", ("username", args[0]))); + return; + } + + var guid = data.UserId; + var isBlacklisted = await _db.GetBlacklistStatusAsync(guid); + if (!isBlacklisted) + { + shell.WriteLine(Loc.GetString("cmd-blacklistremove-existing", ("username", data.Username))); + return; + } + + await _db.RemoveFromBlacklistAsync(guid); + shell.WriteLine(Loc.GetString("cmd-blacklistremove-removed", ("username", data.Username))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + { + return CompletionResult.FromHint(Loc.GetString("cmd-blacklistremove-arg-player")); + } + + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs new file mode 100644 index 0000000000..9fe5db4012 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionAlwaysMatch.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that always matches +/// +public sealed partial class ConditionAlwaysMatch : WhitelistCondition +{ + +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs new file mode 100644 index 0000000000..9d67129e71 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionManualBlacklistMembership.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player is in the manual blacklist. +/// +public sealed partial class ConditionManualBlacklistMembership : WhitelistCondition +{ +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs new file mode 100644 index 0000000000..a31835f9c2 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionManualWhitelistMembership.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player is in the manual whitelist. +/// +public sealed partial class ConditionManualWhitelistMembership : WhitelistCondition +{ +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs new file mode 100644 index 0000000000..1e34bc6373 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesDateRange.cs @@ -0,0 +1,34 @@ +using System.Linq; +using System.Threading.Tasks; +using Content.Server.Database; +using Content.Shared.Database; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has notes within a certain date range. +/// +public sealed partial class ConditionNotesDateRange : WhitelistCondition +{ + [DataField] + public bool IncludeExpired = false; + + [DataField] + public NoteSeverity MinimumSeverity = NoteSeverity.Minor; + + /// + /// The minimum number of notes required. + /// + [DataField] + public int MinimumNotes = 1; + + /// + /// Range in days to check for notes. + /// + [DataField] + public int Range = int.MaxValue; + + [DataField] + public bool IncludeSecret = false; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs new file mode 100644 index 0000000000..d2d22a8cd0 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionNotesPlaytimeRange.cs @@ -0,0 +1,30 @@ +using Content.Shared.Database; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has notes within a certain playtime range. +/// +public sealed partial class ConditionNotesPlaytimeRange : WhitelistCondition +{ + [DataField] + public bool IncludeExpired = false; + + [DataField] + public NoteSeverity MinimumSeverity = NoteSeverity.Minor; + + /// + /// The minimum number of notes required. + /// + [DataField] + public int MinimumNotes = 1; + + /// + /// The range in minutes to check for notes. + /// + [DataField] + public int Range = int.MaxValue; + + [DataField] + public bool IncludeSecret = false; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs new file mode 100644 index 0000000000..432ad32c4a --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionPlayerCount.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; +using Robust.Server.Player; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player count is within a certain range. +/// +public sealed partial class ConditionPlayerCount : WhitelistCondition +{ + [DataField] + public int MinimumPlayers = 0; + [DataField] + public int MaximumPlayers = int.MaxValue; +} diff --git a/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs b/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs new file mode 100644 index 0000000000..7b45181e12 --- /dev/null +++ b/Content.Server/Connection/Whitelist/Conditions/ConditionPlaytime.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; +using Content.Server.Database; +using Content.Shared.Players.PlayTimeTracking; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist.Conditions; + +/// +/// Condition that matches if the player has played for a certain amount of time. +/// +public sealed partial class ConditionPlaytime : WhitelistCondition +{ + [DataField] + public int MinimumPlaytime = 0; // In minutes +} diff --git a/Content.Server/Connection/Whitelist/WhitelistCondition.cs b/Content.Server/Connection/Whitelist/WhitelistCondition.cs new file mode 100644 index 0000000000..b68fd52996 --- /dev/null +++ b/Content.Server/Connection/Whitelist/WhitelistCondition.cs @@ -0,0 +1,41 @@ +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Robust.Shared.Network; + +namespace Content.Server.Connection.Whitelist; + +/// +/// This class is used to determine if a player should be allowed to join the server. +/// It is used in +/// +[ImplicitDataDefinitionForInheritors] +[MeansImplicitUse] +public abstract partial class WhitelistCondition +{ + /// + /// What action should be taken if this condition is met? + /// Defaults to . + /// + [DataField] + public ConditionAction Action { get; set; } = ConditionAction.Next; +} + +/// +/// Determines what action should be taken if a condition is met. +/// +public enum ConditionAction +{ + /// + /// The player is allowed to join, and the next conditions will be skipped. + /// + Allow, + /// + /// The player is denied to join, and the next conditions will be skipped. + /// + Deny, + /// + /// The next condition should be checked. + /// + Next +} diff --git a/Content.Server/Connection/Whitelist/WhitelistPrototype.cs b/Content.Server/Connection/Whitelist/WhitelistPrototype.cs new file mode 100644 index 0000000000..2b8b9babbc --- /dev/null +++ b/Content.Server/Connection/Whitelist/WhitelistPrototype.cs @@ -0,0 +1,42 @@ +using System.Threading.Tasks; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; + +namespace Content.Server.Connection.Whitelist; + +/// +/// Used by the to determine if a player should be allowed to join the server. +/// Used in the whitelist.prototype_list CVar. +/// +/// Whitelists are used to determine if a player is allowed to connect. +/// You define a PlayerConnectionWhitelist with a list of conditions. +/// Every condition has a type and a along with other parameters depending on the type. +/// Action must either be Allow, Deny or Next. +/// Allow means the player is instantly allowed to connect if the condition is met. +/// Deny means the player is instantly denied to connect if the condition is met. +/// Next means the next condition in the list is checked. +/// If the condition doesn't match, the next condition is checked. +/// +[Prototype("playerConnectionWhitelist")] +public sealed class PlayerConnectionWhitelistPrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + /// + /// Minimum number of players required for this whitelist to be active. + /// If there are less players than this, the whitelist will be ignored and the next one in the list will be used. + /// + [DataField] + public int MinimumPlayers { get; } = 0; + + /// + /// Maximum number of players allowed for this whitelist to be active. + /// If there are more players than this, the whitelist will be ignored and the next one in the list will be used. + /// + [DataField] + public int MaximumPlayers { get; } = int.MaxValue; + + [DataField] + public WhitelistCondition[] Conditions { get; } = default!; +} diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index 72e3c50daf..2b6ce41e19 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -1066,6 +1066,29 @@ public async Task SetLastReadRules(NetUserId player, DateTimeOffset date) await db.DbContext.SaveChangesAsync(); } + public async Task GetBlacklistStatusAsync(NetUserId player) + { + await using var db = await GetDb(); + + return await db.DbContext.Blacklist.AnyAsync(w => w.UserId == player); + } + + public async Task AddToBlacklistAsync(NetUserId player) + { + await using var db = await GetDb(); + + db.DbContext.Blacklist.Add(new Blacklist() { UserId = player }); + await db.DbContext.SaveChangesAsync(); + } + + public async Task RemoveFromBlacklistAsync(NetUserId player) + { + await using var db = await GetDb(); + var entry = await db.DbContext.Blacklist.SingleAsync(w => w.UserId == player); + db.DbContext.Blacklist.Remove(entry); + await db.DbContext.SaveChangesAsync(); + } + #endregion #region Uploaded Resources Logs diff --git a/Content.Server/Database/ServerDbManager.cs b/Content.Server/Database/ServerDbManager.cs index 8b6ac5fed6..216b1ec159 100644 --- a/Content.Server/Database/ServerDbManager.cs +++ b/Content.Server/Database/ServerDbManager.cs @@ -244,6 +244,16 @@ Task AddConnectionLogAsync( #endregion + #region Blacklist + + Task GetBlacklistStatusAsync(NetUserId player); + + Task AddToBlacklistAsync(NetUserId player); + + Task RemoveFromBlacklistAsync(NetUserId player); + + #endregion + #region Uploaded Resources Logs Task AddUploadedResourceLogAsync(NetUserId user, DateTimeOffset date, string path, byte[] data); @@ -740,6 +750,24 @@ public Task RemoveFromWhitelistAsync(NetUserId player) return RunDbCommand(() => _db.RemoveFromWhitelistAsync(player)); } + public Task GetBlacklistStatusAsync(NetUserId player) + { + DbReadOpsMetric.Inc(); + return RunDbCommand(() => _db.GetBlacklistStatusAsync(player)); + } + + public Task AddToBlacklistAsync(NetUserId player) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.AddToBlacklistAsync(player)); + } + + public Task RemoveFromBlacklistAsync(NetUserId player) + { + DbWriteOpsMetric.Inc(); + return RunDbCommand(() => _db.RemoveFromBlacklistAsync(player)); + } + public Task AddUploadedResourceLogAsync(NetUserId user, DateTimeOffset date, string path, byte[] data) { DbWriteOpsMetric.Inc(); diff --git a/Content.Server/Entry/EntryPoint.cs b/Content.Server/Entry/EntryPoint.cs index 3a9d07126e..76d1b0deda 100644 --- a/Content.Server/Entry/EntryPoint.cs +++ b/Content.Server/Entry/EntryPoint.cs @@ -145,6 +145,7 @@ public override void PostInit() IoCManager.Resolve().Initialize(); IoCManager.Resolve().GetEntitySystem().PostInitialize(); IoCManager.Resolve().Initialize(); + IoCManager.Resolve().PostInit(); } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index c3307c53fb..4d1ba39a3e 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1326,24 +1326,12 @@ public static readonly CVarDef /// public static readonly CVarDef WhitelistEnabled = CVarDef.Create("whitelist.enabled", false, CVar.SERVERONLY); - - /// - /// The loc string to display as a disconnect reason when someone is not whitelisted. - /// - public static readonly CVarDef WhitelistReason = - CVarDef.Create("whitelist.reason", "whitelist-not-whitelisted", CVar.SERVERONLY); - - /// - /// If the playercount is below this number, the whitelist will not apply. - /// - public static readonly CVarDef WhitelistMinPlayers = - CVarDef.Create("whitelist.min_players", 0, CVar.SERVERONLY); - /// - /// If the playercount is above this number, the whitelist will not apply. + /// Specifies the whitelist prototypes to be used by the server. This should be a comma-separated list of prototypes. + /// If a whitelists conditions to be active fail (for example player count), the next whitelist will be used instead. If no whitelist is valid, the player will be allowed to connect. /// - public static readonly CVarDef WhitelistMaxPlayers = - CVarDef.Create("whitelist.max_players", int.MaxValue, CVar.SERVERONLY); + public static readonly CVarDef WhitelistPrototypeList = + CVarDef.Create("whitelist.prototype_list", "basicWhitelist", CVar.SERVERONLY); /* * VOTE diff --git a/Resources/ConfigPresets/WizardsDen/salamander.toml b/Resources/ConfigPresets/WizardsDen/salamander.toml index 632dcae716..43ba4d8d04 100644 --- a/Resources/ConfigPresets/WizardsDen/salamander.toml +++ b/Resources/ConfigPresets/WizardsDen/salamander.toml @@ -1,7 +1,7 @@ # Configuration preset used on Wizard's Den Salamander [game] -desc = "Official English Space Station 14 servers. Medium roleplay ruleset. You must be whitelisted through Discord to play if there are more than 15 online players." +desc = "Official English Space Station 14 servers. Medium roleplay ruleset. you must be whitelisted by playing on other Wizard's Den servers if there are more than 15 online players." hostname = "[EN] Wizard's Den Salamander [US West RP]" soft_max_players = 130 @@ -10,8 +10,7 @@ rules_file = "MRPRuleset" [whitelist] enabled = true -reason = "whitelist-not-whitelisted-rp" -min_players = 15 +prototype_list = "salamanderMrpWhitelist" [shuttle] emergency_early_launch_allowed = true diff --git a/Resources/Locale/en-US/connection-messages.ftl b/Resources/Locale/en-US/connection-messages.ftl index 309e8fc2f8..c8f29cdf84 100644 --- a/Resources/Locale/en-US/connection-messages.ftl +++ b/Resources/Locale/en-US/connection-messages.ftl @@ -1,16 +1,4 @@ -whitelist-not-whitelisted = You are not whitelisted. - -# proper handling for having a min/max or not -whitelist-playercount-invalid = {$min -> - [0] The whitelist for this server only applies below {$max} players. - *[other] The whitelist for this server only applies above {$min} {$max -> - [2147483647] -> players, so you may be able to join later. - *[other] -> players and below {$max} players, so you may be able to join later. - } -} -whitelist-not-whitelisted-rp = You are not whitelisted. To become whitelisted, visit our Discord (which can be found at https://spacestation14.io) and check the #rp-whitelist channel. - -cmd-whitelistadd-desc = Adds the player with the given username to the server whitelist. +cmd-whitelistadd-desc = Adds the player with the given username to the server whitelist. cmd-whitelistadd-help = Usage: whitelistadd cmd-whitelistadd-existing = {$username} is already on the whitelist! cmd-whitelistadd-added = {$username} added to the whitelist @@ -40,8 +28,30 @@ panic-bunker-account-denied-reason = This server is in panic bunker mode, often panic-bunker-account-reason-account = Your Space Station 14 account is too new. It must be older than {$minutes} minutes panic-bunker-account-reason-overall = Your overall playtime on the server must be greater than {$minutes} $minutes +whitelist-playtime = You do not have enough playtime to join this server. You need at least {$minutes} minutes of playtime to join this server. +whitelist-player-count = This server is currently not accepting players. Please try again later. +whitelist-notes = You currently have too many admin notes to join this server. You can check your notes by typing /adminremarks in chat. +whitelist-manual = You are not whitelisted on this server. +whitelist-blacklisted = You are blacklisted from this server. +whitelist-always-deny = You are not allowed to join this server. +whitelist-fail-prefix = Not whitelisted: {$msg} +whitelist-misconfigured = The server is misconfigured and is not accepting players. Please contact the server owner and try again later. + +cmd-blacklistadd-desc = Adds the player with the given username to the server blacklist. +cmd-blacklistadd-help = Usage: blacklistadd +cmd-blacklistadd-existing = {$username} is already on the blacklist! +cmd-blacklistadd-added = {$username} added to the blacklist +cmd-blacklistadd-not-found = Unable to find '{$username}' +cmd-blacklistadd-arg-player = [player] + +cmd-blacklistremove-desc = Removes the player with the given username from the server blacklist. +cmd-blacklistremove-help = Usage: blacklistremove +cmd-blacklistremove-existing = {$username} is not on the blacklist! +cmd-blacklistremove-removed = {$username} removed from the blacklist +cmd-blacklistremove-not-found = Unable to find '{$username}' +cmd-blacklistremove-arg-player = [player] + baby-jail-account-denied = This server is a newbie server, intended for new players and those who want to help them. New connections by accounts that are too old or are not on a whitelist are not accepted. Check out some other servers and see everything Space Station 14 has to offer. Have fun! baby-jail-account-denied-reason = This server is a newbie server, intended for new players and those who want to help them. New connections by accounts that are too old or are not on a whitelist are not accepted. Check out some other servers and see everything Space Station 14 has to offer. Have fun! Reason: "{$reason}" baby-jail-account-reason-account = Your Space Station 14 account is too old. It must be younger than {$minutes} minutes baby-jail-account-reason-overall = Your overall playtime on the server must be younger than {$minutes} $minutes - diff --git a/Resources/Prototypes/whitelists.yml b/Resources/Prototypes/whitelists.yml new file mode 100644 index 0000000000..8a99aa30ea --- /dev/null +++ b/Resources/Prototypes/whitelists.yml @@ -0,0 +1,7 @@ +- type: playerConnectionWhitelist + id: basicWhitelist # Basic whitelist using only the ManualWhitelist condition + conditions: + - !type:ConditionManualWhitelistMembership + action: Allow # Allow connection if matched + - !type:ConditionAlwaysMatch # Condition that always matches + action: Deny # Deny connection if matched diff --git a/Resources/Prototypes/wizardsDenWhitelists.yml b/Resources/Prototypes/wizardsDenWhitelists.yml new file mode 100644 index 0000000000..c21d01e5a8 --- /dev/null +++ b/Resources/Prototypes/wizardsDenWhitelists.yml @@ -0,0 +1,39 @@ +# This is the whitelist used for Wizard's Den Salamander + +- type: playerConnectionWhitelist + id: salamanderMrpWhitelist + conditions: + - !type:ConditionManualBlacklistMembership # Deny blacklisted (MRP ban) + action: Deny + - !type:ConditionNotesPlaytimeRange # Deny for high severity notes in the last 30 days + includeExpired: false + minimumSeverity: 3 # High + minimumNotes: 1 + range: 30 # 30 days + action: Deny + includeSecret: false + - !type:ConditionNotesPlaytimeRange # Deny for >=2 medium severity notes in the last 14 days + includeExpired: false + minimumSeverity: 2 # Medium + minimumNotes: 1 + range: 14 # 14 Days + action: Deny + includeSecret: false + - !type:ConditionNotesPlaytimeRange # Deny for >=3 low severity notes in the last 14 days + includeExpired: false + minimumSeverity: 1 # Low + minimumNotes: 3 + range: 14 # 14 Days + action: Deny + includeSecret: false + - !type:ConditionManualWhitelistMembership # Allow whitelisted players + action: Allow + - !type:ConditionPlayerCount # Allow when <= 15 players are online + minimumPlayers: 0 + maximumPlayers: 15 + action: Allow + #- !type:ConditionPlaytime + # minimumPlaytime: 1200 # 20 hours to be whitelisted + # action: Deny + - !type:ConditionAlwaysMatch + action: Deny From 3adb4bc7a805b9dff4fa57a44465f8d3d6fdf13d Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Tue, 27 Aug 2024 19:49:17 +0300 Subject: [PATCH 49/54] Make nukie plushie a non-contraband item (#31516) Make nukie plushies a non-contraband item --- Resources/Prototypes/Entities/Objects/Fun/toys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 7dfc6ce866..6ac158630f 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -215,7 +215,7 @@ shader: unshaded - type: entity - parent: [ BasePlushie, BaseSyndicateContraband ] + parent: BasePlushie id: PlushieNuke name: nukie plushie description: A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious. From 9b8ed01ea06667e3c0da807a6e3a3ab5e5f58e0d Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 16:50:23 +0000 Subject: [PATCH 50/54] 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 7df53e2a84..3416becbe0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: KyuPolaris - changes: - - message: Chickens now make a clucking sound when they speak. - type: Add - id: 6727 - time: '2024-06-14T02:43:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28948 - author: Killerqu00 changes: - message: Time between uncuff attempts is now 30 seconds instead of 6. @@ -3865,3 +3858,10 @@ id: 7226 time: '2024-08-27T15:02:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30888 +- author: Winkarst-cpu + changes: + - message: Nukie plushie is now not a contraband item. + type: Fix + id: 7227 + time: '2024-08-27T16:49:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31516 From 2aea194065e9f73ba7a8f9a0280d42a0e0ad627d Mon Sep 17 00:00:00 2001 From: saintmuntzer <47153094+saintmuntzer@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:51:28 -0500 Subject: [PATCH 51/54] fix uncapitalized "S" in Salvage Specialist (#31529) "Salvage specialist" to "Salvage Specialist"; all is right with the world --- Resources/Locale/en-US/job/job-names.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/job/job-names.ftl b/Resources/Locale/en-US/job/job-names.ftl index 33e501cb69..a5ff9fffeb 100644 --- a/Resources/Locale/en-US/job/job-names.ftl +++ b/Resources/Locale/en-US/job/job-names.ftl @@ -32,7 +32,7 @@ job-name-chaplain = Chaplain job-name-botanist = Botanist job-name-bartender = Bartender job-name-passenger = Passenger -job-name-salvagespec = Salvage specialist +job-name-salvagespec = Salvage Specialist job-name-qm = Quartermaster job-name-cargotech = Cargo Technician job-name-chef = Chef From ef634a1d5a40469d918fcbe11dba1b23fa951ce2 Mon Sep 17 00:00:00 2001 From: Winkarst <74284083+Winkarst-cpu@users.noreply.github.com> Date: Tue, 27 Aug 2024 19:54:48 +0300 Subject: [PATCH 52/54] Make AKMS security restricted (#31519) --- .../Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 64280542db..e34433cb56 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -53,7 +53,7 @@ - type: entity name: AKMS - parent: [BaseWeaponRifle, BaseMajorContraband] + parent: [BaseWeaponRifle, BaseRestrictedContraband] id: WeaponRifleAk description: An iconic weapon of war. Uses .30 rifle ammo. components: From 6c1027b7a6fe2b1305383dec0756600f42742b79 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 27 Aug 2024 16:55:54 +0000 Subject: [PATCH 53/54] 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 3416becbe0..65f093d437 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Killerqu00 - changes: - - message: Time between uncuff attempts is now 30 seconds instead of 6. - type: Tweak - id: 6728 - time: '2024-06-14T06:19:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28095 - author: Moomoobeef changes: - message: Fax machines can now be purchased at cargo, for when you need more paper @@ -3865,3 +3858,10 @@ id: 7227 time: '2024-08-27T16:49:17.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31516 +- author: Winkarst-cpu + changes: + - message: Now AKMS is restricted to the security department. + type: Fix + id: 7228 + time: '2024-08-27T16:54:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31519 From 0891a2c0e99c69f0b79898c56011975fe5adba25 Mon Sep 17 00:00:00 2001 From: Doublechest Date: Wed, 28 Aug 2024 00:06:00 +0300 Subject: [PATCH 54/54] fix energy shield --- Resources/Prototypes/Entities/Objects/Shields/shields.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml index 929ebac6dd..198fda38af 100644 --- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml +++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml @@ -401,6 +401,7 @@ heldPrefix: eshield - type: UseDelay delay: 0.5 + - type: ItemTogglePointLight - type: ToggleableLightVisuals spriteLayer: shield inhandVisuals: