From 9ddfe38668a263d0d9dc7230727cb55b9ab9e283 Mon Sep 17 00:00:00 2001 From: liltenhead <104418166+liltenhead@users.noreply.github.com> Date: Fri, 29 Mar 2024 21:36:33 -0700 Subject: [PATCH 001/206] Adjust syndicate hardbomb damage (#26548) hardbomb tweaks --- Resources/Prototypes/explosion.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/explosion.yml b/Resources/Prototypes/explosion.yml index a768dead6d..4f72067376 100644 --- a/Resources/Prototypes/explosion.yml +++ b/Resources/Prototypes/explosion.yml @@ -110,9 +110,9 @@ Blunt: 15 Piercing: 6 Structural: 40 - tileBreakChance: [ 0.75, 0.95, 1 ] - tileBreakIntensity: [ 1, 10, 15 ] - tileBreakRerollReduction: 30 + tileBreakChance: [ 0, 0.5, 1 ] + tileBreakIntensity: [ 0, 10, 30 ] + tileBreakRerollReduction: 10 intensityPerState: 20 lightColor: Orange texturePath: /Textures/Effects/fire.rsi From 0f6c7c9d51f81c01dba3a5047ce5e78acdc5bba5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 30 Mar 2024 04:37:39 +0000 Subject: [PATCH 002/206] 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 8c70fdc638..4429f2be05 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Alekshhh - changes: - - message: Cerberus now has a wideswing that works similarly to spears. - type: Tweak - id: 5759 - time: '2024-01-20T23:38:27.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24328 - author: TheShuEd changes: - message: Added new Floral anomaly! @@ -3793,3 +3786,11 @@ id: 6258 time: '2024-03-30T04:00:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25830 +- author: liltenhead + changes: + - message: Changed the syndicate hardbomb to have less of a chance to completely + destroy tiles. + type: Tweak + id: 6259 + time: '2024-03-30T04:36:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26548 From 97b390d35f503dd9bda35e0b3a6192b2a502d120 Mon Sep 17 00:00:00 2001 From: takemysoult <143123247+takemysoult@users.noreply.github.com> Date: Sat, 30 Mar 2024 09:52:27 +0300 Subject: [PATCH 003/206] up stimulants (no sleep) (#25886) * up stimulants (no sleep) * Update SharedSleepingSystem.cs --- Content.Shared/Bed/Sleep/SharedSleepingSystem.cs | 2 +- Resources/Prototypes/Reagents/narcotics.yml | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs b/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs index 4e4bc2c574..c6248c88f7 100644 --- a/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs +++ b/Content.Shared/Bed/Sleep/SharedSleepingSystem.cs @@ -37,7 +37,7 @@ namespace Content.Server.Bed.Sleep _actionsSystem.AddAction(uid, ref component.WakeAction, WakeActionId, uid); // TODO remove hardcoded time. - _actionsSystem.SetCooldown(component.WakeAction, _gameTiming.CurTime, _gameTiming.CurTime + TimeSpan.FromSeconds(15)); + _actionsSystem.SetCooldown(component.WakeAction, _gameTiming.CurTime, _gameTiming.CurTime + TimeSpan.FromSeconds(2f)); } private void OnShutdown(EntityUid uid, SleepingComponent component, ComponentShutdown args) diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index d05cc29ab0..cefc8043b0 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -116,6 +116,13 @@ damage: types: Poison: 1 + - !type:AdjustReagent + conditions: + - !type:ReagentThreshold + reagent: ChloralHydrate + min: 1 + reagent: ChloralHydrate + amount: -10 - !type:GenericStatusEffect key: Stun time: 3 @@ -129,6 +136,10 @@ component: StaminaModifier time: 3 type: Add + - !type:GenericStatusEffect + key: ForcedSleep + time: 3 + type: Remove Medicine: metabolismRate: 1.0 effects: From 1e51febc67fdd010a286f170bf47d6b7e7445a4e Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 30 Mar 2024 06:53:32 +0000 Subject: [PATCH 004/206] 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 4429f2be05..136f7054ef 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: Added new Floral anomaly! - type: Add - id: 5760 - time: '2024-01-21T01:31:12.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24351 - author: Menshin changes: - message: The PA control box should now properly detect the PA parts in all situations @@ -3794,3 +3787,10 @@ id: 6259 time: '2024-03-30T04:36:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26548 +- author: takemysoult + changes: + - message: stimulants removes chloral hydrate from body + type: Tweak + id: 6260 + time: '2024-03-30T06:52:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25886 From 1ffa5c28d8b50368884177abacf1625f6d37b2d1 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sat, 30 Mar 2024 17:38:38 +0100 Subject: [PATCH 005/206] Make BaseMedicalPDA abstract (#26567) --- Resources/Prototypes/Entities/Objects/Devices/pda.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 0056f965a5..73976b48e0 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -108,6 +108,7 @@ - type: entity parent: BasePDA id: BaseMedicalPDA + abstract: true components: - type: HealthAnalyzer scanDelay: 1 From 7638252df3b0c7e958e988fc7e491d81c1e8a656 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Sat, 30 Mar 2024 11:11:44 -0700 Subject: [PATCH 006/206] Fix GasMixers/Filters not working (#26568) * Fix GasMixers/Filters not working * OKAY GAS FILTERS TOO --------- Co-authored-by: Plykiya --- .../Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs | 2 +- .../NodeContainer/EntitySystems/NodeContainerSystem.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs index f856946a92..fbd4260469 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs @@ -53,7 +53,7 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems private void OnFilterUpdated(EntityUid uid, GasFilterComponent filter, ref AtmosDeviceUpdateEvent args) { if (!filter.Enabled - || !_nodeContainer.TryGetNodes(uid, filter.InletName, filter.OutletName, filter.FilterName, out PipeNode? inletNode, out PipeNode? filterNode, out PipeNode? outletNode) + || !_nodeContainer.TryGetNodes(uid, filter.InletName, filter.FilterName, filter.OutletName, out PipeNode? inletNode, out PipeNode? filterNode, out PipeNode? outletNode) || outletNode.Air.Pressure >= Atmospherics.MaxOutputPressure) // No need to transfer if target is full. { _ambientSoundSystem.SetAmbience(uid, false); diff --git a/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs b/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs index 19b811a287..c0603949be 100644 --- a/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs +++ b/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs @@ -106,7 +106,7 @@ namespace Content.Server.NodeContainer.EntitySystems && ent.Comp.Nodes.TryGetValue(id2, out var n2) && n2 is T2 t2 && ent.Comp.Nodes.TryGetValue(id3, out var n3) - && n2 is T3 t3) + && n3 is T3 t3) { node1 = t1; node2 = t2; From c9e19445b49ca60b1096fbd48a9ede022fa8b166 Mon Sep 17 00:00:00 2001 From: Boaz1111 <149967078+Boaz1111@users.noreply.github.com> Date: Sat, 30 Mar 2024 21:25:50 +0100 Subject: [PATCH 007/206] Industrial Reagent Grinder Hotfix (#26571) fixed --- .../Entities/Structures/Machines/reagent_grinder.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml index 3bb1458b8c..773112f6f3 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml @@ -97,4 +97,8 @@ node: machine containers: - machine_parts - - machine_board \ No newline at end of file + - machine_board + - type: DrainableSolution + solution: output + - type: ExaminableSolution + solution: output \ No newline at end of file From b8363cd82a4814bce79d08b258566336d3dac95b Mon Sep 17 00:00:00 2001 From: keronshb <54602815+keronshb@users.noreply.github.com> Date: Sat, 30 Mar 2024 19:25:36 -0400 Subject: [PATCH 008/206] Give stores the ability to check for owner only (#26573) adds a check if the store belongs to the user --- .../Store/Components/StoreComponent.cs | 7 +++++++ Content.Server/Store/Systems/StoreSystem.cs | 17 +++++++++++++++++ Resources/Locale/en-US/store/store.ftl | 2 ++ 3 files changed, 26 insertions(+) diff --git a/Content.Server/Store/Components/StoreComponent.cs b/Content.Server/Store/Components/StoreComponent.cs index 063e25fbf9..0b7dbbea09 100644 --- a/Content.Server/Store/Components/StoreComponent.cs +++ b/Content.Server/Store/Components/StoreComponent.cs @@ -78,6 +78,13 @@ public sealed partial class StoreComponent : Component [ViewVariables, DataField] public bool RefundAllowed; + /// + /// Checks if store can be opened by the account owner only. + /// Not meant to be used with uplinks. + /// + [ViewVariables(VVAccess.ReadWrite), DataField] + public bool OwnerOnly; + /// /// The map the store was originally from, used to block refunds if the map is changed /// diff --git a/Content.Server/Store/Systems/StoreSystem.cs b/Content.Server/Store/Systems/StoreSystem.cs index 8ce1f9bb83..56426e0404 100644 --- a/Content.Server/Store/Systems/StoreSystem.cs +++ b/Content.Server/Store/Systems/StoreSystem.cs @@ -10,6 +10,7 @@ using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Prototypes; using System.Linq; +using Robust.Shared.Utility; namespace Content.Server.Store.Systems; @@ -26,6 +27,7 @@ public sealed partial class StoreSystem : EntitySystem { base.Initialize(); + SubscribeLocalEvent(OnStoreOpenAttempt); SubscribeLocalEvent(OnAfterInteract); SubscribeLocalEvent(BeforeActivatableUiOpen); @@ -65,6 +67,21 @@ public sealed partial class StoreSystem : EntitySystem RaiseLocalEvent(uid, ref ev, true); } + private void OnStoreOpenAttempt(EntityUid uid, StoreComponent component, ActivatableUIOpenAttemptEvent args) + { + if (!component.OwnerOnly) + return; + + component.AccountOwner ??= args.User; + DebugTools.Assert(component.AccountOwner != null); + + if (component.AccountOwner == args.User) + return; + + _popup.PopupEntity(Loc.GetString("store-not-account-owner", ("store", uid)), uid, args.User); + args.Cancel(); + } + private void OnAfterInteract(EntityUid uid, CurrencyComponent component, AfterInteractEvent args) { if (args.Handled || !args.CanReach) diff --git a/Resources/Locale/en-US/store/store.ftl b/Resources/Locale/en-US/store/store.ftl index 7af2b05533..d663cc61f7 100644 --- a/Resources/Locale/en-US/store/store.ftl +++ b/Resources/Locale/en-US/store/store.ftl @@ -6,3 +6,5 @@ store-ui-traitor-flavor = Copyright (C) NT -30643 store-ui-traitor-warning = Operatives must lock their uplinks after use to avoid detection. store-withdraw-button-ui = Withdraw {$currency} + +store-not-account-owner = This {$store} is not bound to you! From a23ff527d450e02ea4ba71e3e49edc65a4d2eb62 Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sat, 30 Mar 2024 16:50:29 -0700 Subject: [PATCH 009/206] Fix round start crash (causing instant restart) (#26579) * Fix round start crash * Make `TryCreateObjective` more error tolerant --- Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs | 5 +++++ Resources/Prototypes/Objectives/objectiveGroups.yml | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs b/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs index 2e1bdc4383..07032a00ce 100644 --- a/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs +++ b/Content.Shared/Objectives/Systems/SharedObjectivesSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Mind; using Content.Shared.Objectives; using Content.Shared.Objectives.Components; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Shared.Objectives.Systems; @@ -11,6 +12,7 @@ namespace Content.Shared.Objectives.Systems; public abstract class SharedObjectivesSystem : EntitySystem { [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; private EntityQuery _metaQuery; @@ -55,6 +57,9 @@ public abstract class SharedObjectivesSystem : EntitySystem /// public EntityUid? TryCreateObjective(EntityUid mindId, MindComponent mind, string proto) { + if (!_protoMan.HasIndex(proto)) + return null; + var uid = Spawn(proto); if (!TryComp(uid, out var comp)) { diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 83921ec983..ff126eb5d1 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -72,7 +72,6 @@ TechnologyDiskStealCollectionObjective: 1 #rnd FigurineStealCollectionObjective: 0.3 #service IDCardsStealCollectionObjective: 1 - CannabisStealCollectionObjective: 1 LAMPStealCollectionObjective: 2 #only for moth - type: weightedRandom From 69cacf6dc8e844bd7e3eb09722dd04c784568fbd Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sun, 31 Mar 2024 14:18:50 +1300 Subject: [PATCH 010/206] Update engine to v217.1.0 (#26588) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 4002cbddb9..b28b5ed09b 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 4002cbddb9c9de9030a81480b45b13d978b87526 +Subproject commit b28b5ed09b361c4f2da5dd9c3e392b79e6b23c51 From 0edd0a74f426f19fc1fb7519656c62f70d02cd1f Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sat, 30 Mar 2024 18:20:45 -0700 Subject: [PATCH 011/206] Fix initial infected icon hiding (#26585) --- Content.Client/Zombies/ZombieSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/Zombies/ZombieSystem.cs b/Content.Client/Zombies/ZombieSystem.cs index 7c1fb38e74..49b5d6aec1 100644 --- a/Content.Client/Zombies/ZombieSystem.cs +++ b/Content.Client/Zombies/ZombieSystem.cs @@ -46,7 +46,7 @@ public sealed class ZombieSystem : EntitySystem args.Cancelled = true; } - private void OnCanDisplayStatusIcons(EntityUid uid, InitialInfectedComponent component, CanDisplayStatusIconsEvent args) + private void OnCanDisplayStatusIcons(EntityUid uid, InitialInfectedComponent component, ref CanDisplayStatusIconsEvent args) { if (HasComp(args.User) && !HasComp(args.User)) return; From 7130d1ca2f7ad3793d7a4304865506a640808369 Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sat, 30 Mar 2024 18:24:26 -0700 Subject: [PATCH 012/206] Fix Meta evac shuttle name (#26587) --- Resources/Maps/Shuttles/emergency_meta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Maps/Shuttles/emergency_meta.yml b/Resources/Maps/Shuttles/emergency_meta.yml index 57e9f98f40..385f5e3bbf 100644 --- a/Resources/Maps/Shuttles/emergency_meta.yml +++ b/Resources/Maps/Shuttles/emergency_meta.yml @@ -21,7 +21,7 @@ entities: - uid: 1 components: - type: MetaData - name: grid + name: NT Evac Meta - type: Transform pos: -2.4375,0.859375 parent: invalid From 8676aad583ad7104151bf22932da86a87cb52c5a Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sat, 30 Mar 2024 18:26:41 -0700 Subject: [PATCH 013/206] Make timer ignore client predict setting (#26554) * Make timer ignore client predict setting * making tests run --------- Co-authored-by: wrexbe --- Content.Client/TextScreen/TextScreenSystem.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Content.Client/TextScreen/TextScreenSystem.cs b/Content.Client/TextScreen/TextScreenSystem.cs index a736933d0f..b4d67f5f21 100644 --- a/Content.Client/TextScreen/TextScreenSystem.cs +++ b/Content.Client/TextScreen/TextScreenSystem.cs @@ -62,6 +62,8 @@ public sealed class TextScreenSystem : VisualizerSystem(OnInit); SubscribeLocalEvent(OnTimerInit); + + UpdatesOutsidePrediction = true; } private void OnInit(EntityUid uid, TextScreenVisualsComponent component, ComponentInit args) From 175f8205c0c43ae12438bc1d9019a72d9fcca341 Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sat, 30 Mar 2024 18:34:31 -0700 Subject: [PATCH 014/206] Make advertise system survive no map inits (#26553) * Make advertise system survive no map inits * Add comment to try prevent future bugs --- Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs b/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs index bb254d11ef..b326321d54 100644 --- a/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs +++ b/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs @@ -23,7 +23,7 @@ public sealed class AdvertiseSystem : EntitySystem /// /// The next time the game will check if advertisements should be displayed /// - private TimeSpan _nextCheckTime = TimeSpan.MaxValue; + private TimeSpan _nextCheckTime = TimeSpan.MinValue; public override void Initialize() { @@ -33,8 +33,8 @@ public sealed class AdvertiseSystem : EntitySystem SubscribeLocalEvent(OnPowerReceiverEnableChangeAttempt); SubscribeLocalEvent(OnVendingEnableChangeAttempt); - // The component inits will lower this. - _nextCheckTime = TimeSpan.MaxValue; + // Force it to check on the next update. + _nextCheckTime = TimeSpan.MinValue; } private void OnMapInit(EntityUid uid, AdvertiseComponent advertise, MapInitEvent args) @@ -110,6 +110,8 @@ public sealed class AdvertiseSystem : EntitySystem if (_nextCheckTime > curTime) return; + // Note that as _nextCheckTime currently starts at TimeSpan.MinValue, so this has to SET the value, not just + // increment it. _nextCheckTime = curTime + _maximumNextCheckDuration; var query = EntityQueryEnumerator(); From 602d30c908e44ea5061842bc8015cf9361a80258 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 31 Mar 2024 12:58:47 +1100 Subject: [PATCH 015/206] Update Credits (#26589) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index f918d9320f..f201c03630 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUmAndXGabriel08X, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, artak10t, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, CaptainSqrBeard, Carbonhell, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, CrafterKolyan, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DmitriyMX, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DoutorWhite, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, Kadeo64, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nails-n-Tape, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, Nylux, OctoRocket, OldDanceJacket, OliverOtter, onoira, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, Phill101, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, Putnam3145, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, Ranger6012, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, renodubois, RiceMar1244, RieBi, RIKELOLDABOSS, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SamV522, SaphireLattice, ScalyChimp, scrato, Scribbles0, ScumbagDog, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stanislav4ix, Stealthbomber16, StrawberryMoses, Subversionary, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, wafehling, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, youarereadingthis, YuriyKiss, zach-hill, Zandario, Zap527, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem +0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUmAndXGabriel08X, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, Callmore, CaptainSqrBeard, Carbonhell, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, CrafterKolyan, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DmitriyMX, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DoutorWhite, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, Kadeo64, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nails-n-Tape, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, Nylux, OctoRocket, OldDanceJacket, OliverOtter, onoira, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, Phill101, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, Putnam3145, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, Ranger6012, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, renodubois, RiceMar1244, RieBi, RIKELOLDABOSS, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, wafehling, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem From e7af28d22a02b356265a147f0a757739a98bda23 Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sat, 30 Mar 2024 18:59:06 -0700 Subject: [PATCH 016/206] Fix fox spawn on reach (#26584) Co-authored-by: wrexbe --- Resources/Maps/reach.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Resources/Maps/reach.yml b/Resources/Maps/reach.yml index cd1389c31b..f84136e9ec 100644 --- a/Resources/Maps/reach.yml +++ b/Resources/Maps/reach.yml @@ -11786,12 +11786,14 @@ entities: - uid: 1030 components: - type: Transform - pos: 21.5,-3.5 + pos: 18.5,-3.5 parent: 407 +- proto: SpawnMobFoxRenault + entities: - uid: 1826 components: - type: Transform - pos: 18.5,-3.5 + pos: 21.5,-3.5 parent: 407 - proto: SpawnPointAtmos entities: From 1f3f1d7d972bfd7671a5023779198e0ab776f813 Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Sat, 30 Mar 2024 21:01:28 -0500 Subject: [PATCH 017/206] Removes SCAF armor (#26566) * removes scaf armor * replace maint loot spawner spot with basic helmet --- .../Entities/Clothing/Head/helmets.yml | 23 ---------------- .../Entities/Clothing/OuterClothing/armor.yml | 26 ------------------ .../Markers/Spawners/Random/maintenance.yml | 2 +- .../Head/Helmets/scaf.rsi/equipped-HELMET.png | Bin 890 -> 0 bytes .../Clothing/Head/Helmets/scaf.rsi/icon.png | Bin 569 -> 0 bytes .../Head/Helmets/scaf.rsi/inhand-left.png | Bin 753 -> 0 bytes .../Head/Helmets/scaf.rsi/inhand-right.png | Bin 774 -> 0 bytes .../Clothing/Head/Helmets/scaf.rsi/meta.json | 26 ------------------ .../Armor/scaf.rsi/equipped-OUTERCLOTHING.png | Bin 1487 -> 0 bytes .../OuterClothing/Armor/scaf.rsi/icon.png | Bin 667 -> 0 bytes .../Armor/scaf.rsi/inhand-left.png | Bin 691 -> 0 bytes .../Armor/scaf.rsi/inhand-right.png | Bin 680 -> 0 bytes .../OuterClothing/Armor/scaf.rsi/meta.json | 26 ------------------ Resources/migration.yml | 5 ++++ 14 files changed, 6 insertions(+), 102 deletions(-) delete mode 100644 Resources/Textures/Clothing/Head/Helmets/scaf.rsi/equipped-HELMET.png delete mode 100644 Resources/Textures/Clothing/Head/Helmets/scaf.rsi/icon.png delete mode 100644 Resources/Textures/Clothing/Head/Helmets/scaf.rsi/inhand-left.png delete mode 100644 Resources/Textures/Clothing/Head/Helmets/scaf.rsi/inhand-right.png delete mode 100644 Resources/Textures/Clothing/Head/Helmets/scaf.rsi/meta.json delete mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/equipped-OUTERCLOTHING.png delete mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/icon.png delete mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/inhand-left.png delete mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/inhand-right.png delete mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 48aa43fa55..2c5cb54094 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -147,29 +147,6 @@ Piercing: 0.9 Heat: 0.9 -#SCAF Helmet -- type: entity - parent: ClothingHeadBase - id: ClothingHeadHelmetScaf - name: scaf helmet - description: A robust, strong helmet. - components: - - type: Sprite - sprite: Clothing/Head/Helmets/scaf.rsi - - type: Clothing - sprite: Clothing/Head/Helmets/scaf.rsi - - type: IngestionBlocker - - type: Armor - modifiers: - coefficients: - Blunt: 0.9 - Slash: 0.9 - Piercing: 0.8 - - type: Tag - tags: - - HidesHair - - WhitelistChameleon - #Space Ninja Helmet - type: entity parent: ClothingHeadEVAHelmetBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index fdaee45ccc..9a1f142740 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -183,32 +183,6 @@ - type: Clothing sprite: Clothing/OuterClothing/Armor/magusred.rsi -- type: entity - parent: ClothingOuterBaseLarge - id: ClothingOuterArmorScaf - name: scaf suit - description: A green and brown tactical suit for combat situations. - components: - - type: Sprite - sprite: Clothing/OuterClothing/Armor/scaf.rsi - - type: Clothing - sprite: Clothing/OuterClothing/Armor/scaf.rsi - - type: Armor - modifiers: - coefficients: - Blunt: 0.7 - Slash: 0.7 - Piercing: 0.4 - Heat: 0.9 - Caustic: 0.9 - - type: ExplosionResistance - damageCoefficient: 0.8 - - type: GroupExamine - - type: Tag - tags: - - Hardsuit - - WhitelistChameleon - - type: entity parent: ClothingOuterBaseLarge id: ClothingOuterArmorCaptainCarapace diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index df61726a99..450b501d1a 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -77,7 +77,7 @@ - ClothingHeadHatCone - ClothingNeckBling - ClothingHeadHelmetCosmonaut - - ClothingHeadHelmetScaf + - ClothingHeadHelmetBasic - ClothingShoeSlippersDuck - ClothingUnderSocksBee - ClothingUnderSocksCoder diff --git a/Resources/Textures/Clothing/Head/Helmets/scaf.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Helmets/scaf.rsi/equipped-HELMET.png deleted file mode 100644 index ec1c408550ddbd67c5dce0f1b60bc6193fd5275a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV0QF$aSW-L^LEzxY+*-{>@u?EHH>ssvg1t2TzL_}|RJFEkJ;*Z@| ztr$FxiyJktpMO8UCw8{43$yt{ozINw(j}(_`t(a!q@JqT$(LQ+bU68X$!hIQQ$%`; zgk2f#u)KB$opOD_ZQKqg)L8#czcVCCsa*1opST; z@{hshXR{l9#Jofu58V9Xnsl@F$#?&P_y4{w-17X4+Mr-E5+ zPZeWCoYay(?ftNQ81tNKf3{xwy)bNN z?G4xSZx)1da&LXP#OT1L-!G7_dUj(yHXcKtlb@XVbkFm zhDWb|d26^r)awG5>Y5|{chpd`QdN$<;Y!Mk>7BP91Eb~ROCE(EmW=Onnj|l(&GQKSOiY-fh5oZk(jSE5KX>Rg T#`x_4<|zhGS3j3^P6=G`P)3`CH9;`SSPy~(>A?;iym;smbn6#Hf1rbS3PFnKAW{h7sXx(Ah#>3|vA0+P zp*C2A4lcVJ3W2q;9dy=l%h_2gjPSiU&Wzvt%=dlH2=#g$lhn*a-KPLkfWH7B@@}lu ziVn}dkRCzlxGeC-75wf2VjN2?a0N6~D-Z;;1eIFRiKP~}%uUsTsagPlH|Yh{y+f{y zjm!WsUtL;c22eD^HKrBPBhWiGPEL=QnPB!n=cbG6nGf+A%3;BH63CEMLbD7=`9bEP--tcB&lxZ7&F=2w>w{n=S&?1^7Qz5wBP zGH_5uGky-B+iG$J;@#&JR}YAC!>zq2H{6D#%@gT1LV5(I+6F-X8@|zm)xAS!dnW;) z3*Z(2pkxi)%YzfYqu2TC8)+z-fk(INd!OIBhyYOC47bBg^$xKteM`pOy3a4a0sx*L z+1<|tpm%J{OM~yGYC-9PkTJbRM9lq8?+fsiOx61IIC;%^jEQ`o<6>doA!#Kd4-GvZ zV ztd}BQN|8{ZS;0#$i@U<2U?WTqn=x+OWYwL;U3?!9f9)IJeCNFx+4lf~AP9mW2!bF8 zf*_WSfYSjaNfO}3{A4m2NA^K6ZkRbaJ!1T|Dr*3M!~N3KVsm?LJFERH2#42vO+0z=7pkmT=5sNZXRqF+EGNzPf_OSMkqVyN1Oa2xv!LihRL?K*`px5!2;-Yz zJRO57YnIXF1YrV%ln9Up5~~;J)PbGtn~?wZeFcft3ji_Wx_idpA^-r^6DBbX+o33z z0SGtDG@ZsfP#y(ry_=k`ZnX2v14$r3mV2IGF^w6sG&~1f|F@nVq70)5jLVD<-H+xcq9x8-}^uH*cf;4D@hhPnYcxa{nMMK+54;Il& zkz6IT2UqB&q%2tjqOeie9yYVx?XESrYhAPN2LrM=KkVQGOxB4LY=S+S~r)$HNBkFRC+S>$^FfTM#lXX%&zBTPTj4oud+VmA5VW(aJ= zlTidC0hF?N*=zx)q1Df{|4aXh+2m%uqZ=aMgFohVya`Od8KdyfRKIQuhEF)s?0 zj3cw4l+DZWWE6lBxHfoJ3(T_Ev;6uhbPmX*b20#g{l>%=`byyCYEh@(a1hF*bMp3+dxrGs)&_>j zfU^vk1;aU@TrG0l+5lJGHFZo1{w`oz1n+9FW*9QSZIA(r7O-esZva6M1VIo4K@bE% z5bk5@%g<%MKQN7nt+Cs}dWFGAKz;V&*{h{_t8B@DQZ_FKV@lxKwluq-unb1bYyfMc zF|^%SX2y*XjyA#a7BK6;HZ{+j&P)bm(m8o!`x^Zgpxpw^dI!IDo`ZY(008iY+u*)@ zO4ufL9$3l%p+Clm9|8c{xM{KPXzmuI9$VEncPwuK!-8ku0Vwwi3YGVcuK_bPM#|M9 z=Mj7e`&V@x(vK82QK;(NkIw*5aKM2{<8aq5W z<~)K=&4g}kurwDdZL0x)U!7SNT;Cie0~Re{(YW4#-)#mij&_gLvH$=807*qoM6N<$ Eg2Gc?oB#j- diff --git a/Resources/Textures/Clothing/Head/Helmets/scaf.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/scaf.rsi/meta.json deleted file mode 100644 index e0ee93d642..0000000000 --- a/Resources/Textures/Clothing/Head/Helmets/scaf.rsi/meta.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/a75dee2e6d236612dbd403dd5f8687ca930c01f1", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "equipped-HELMET", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/equipped-OUTERCLOTHING.png deleted file mode 100644 index e93c024893a80e649601e9a3b17bd37bd7d10537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1487 zcmV;=1u*)FP)1XK-V7#%hG7Rr#J7-Jk5Kq z#t&tD%J_`80K73)0B-?!W2^w)0`SII0lWp^4L5DWZ+`n)1AsSc?_74;*a7L^3as2z z7LXQGS|Yh%oDXUP0Ey(nz&3V3`kanUVLCR2L~_A6$TchZ27$@~T7rtqVF`(?1)QE- zAT6e}gOq4!IxVKOmY^b$TtMcqgqEPP$iReZz6Jm|ZU5SZizXC)<@#RB6)I4&P5755 zP|erik$uMfmY`xfHf7vjip=0U?Z*dmgKqw%$V^Y0?)$X-_qqV_yQRnsT7n8C+r)Hi z3M*T4#z9`bC8&mQH2zA1e*C#YrRNxypUMStg$mU*tLt{a(kCmwr3JkFkkVc(K1T4e ziE6%vy5t?`-z`B!UGk!uuOWEZ#EZqpc=^HJWH<_bs#PE!3v~E=wQB-0|M$o~#A5-P zZmH3aU&%I&!wx@n96(T)yb%0uRMAN)D>tlNF+=dXAxq@EQzmks6_!t|CF1~qe+qvg z9MYSILuhN*q~%56Jl{aEjCMO1fw6R zI4l)FmXu$QuMyptgd#Tqz)%7~(G*Hd$EF}1Un7xhuhllDK@#27rEC3#Wb;V(=MP3d zqAq!jXYT{G(@4kH5d3b#!~uO2&hri9TCuFRdnic9?H7l)J@@pEzAnd|6%cD7s|I$g zIqr=Fcdxd!YQBc(qr2Ia_!vE#% zhKLg*J!*cY$bpP>vCC_^XJx101V6O}?5&Ef`qK&2pH849s7B-`D>r%^-oEFQRXD}Z zWC2Q6j|1w8x8r(U^1{=O5nv3$2Xlz&k$pyt!pcv*3jAO3$?pn}6~J2n-WV%@ zw*b5`Rse4Scw?*p-U9H(SOL5R;0@-DbaVRIoFV23J2Ej@!215C))G|smnX2YHRnhj z04vgBN?X~QgMV57OeTAXv|x4tkL*J=U&HCi1$QNomp?tZ=tn4l$D7HWb_=5Lel-aIkU1hiv2Gn%JGKhES$pUD>F-^AbWJr0@mRo+i#1Edv@4tzQ<{Hy0zl_Tm~(SSXAQ@e z!nByuNFI{BJeh+?I$X&%nfRG4pkK{^IWyzrq}UQvoagm(k{#-!^Lt8*cO#mkh ps#jpaxITcl0K73)0B-?!<3Eg!FlCpy$bS8ZIOuiNO;WaSt7Gc+jOJQy|UKv1_;d6&cz+V5ALau_UC9!4eiGzduzGKT4 zs+OdXt6&!N|Zvb!u(cj@8pS3Hw{3P)D;!?>Pe!3hm{uYLYT@30quBJ+_x}fKVbV%Oq+396 z2>M~@LFD;48hD-7%=>Y>@+Xkh(g6G_{bYT)W4^vjH^ROsQ*cvkQLfUpgQfTyOYt@E z;Wd)L7yUc%C~<%=v#UaXnQJGCkqUftK1&~dymuB7e@MK1oZUCY z))U*b5+SX0>huST>r$QLjT6a_fUg3_8z<6f_RP~!T8Z>zFIRc8>`t?1l8AF50{?=m zz~FllOm!eR+Rh6_ISOMXA~(|Vz+Gl=Rg42+1&+4!lCc@W*bHIIRxk6_%=^wh(5)L+ zm9Z2suR3|aFoT|QLk|+@<_LTe&mg4P-SEFB@D~W0__-qyB^dw!002ovPDHLkV1kcE BHk$wd diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/inhand-left.png b/Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/inhand-left.png deleted file mode 100644 index ce718ad3009dccde289173a2e65180ea65f811c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP)Vr7Mmm`QAe~GQF2&f|-cY*x3J}uW;PFM7w%KGl zH3cbv2oAY<53LD!@p2IWGae$hFhjr`Cb&77Ce8KDZPQJ|PP4&+B+FXRAlWPDjujsoTom^9!i|FhwFoIpc zb}W@!n4##_SxilIub;mE9Oz4KJzr6;UnTyE-^rIb{PsnAf3@!dy@TwXwu5eCy@TwH zAI0Ed1PK7Ir6<_jdh3RC1kMDo@sveD`GBj$oW2yL3gvLP& z;9h430-1o0w%KIzyhX-{c1!TX3SzN0w~=4qH)mjoq#~j0HAyFWb)kq;32>XfIsI5?jx`XXq(Nxa|lBC Z^BcM)3w1J!rL+J5002ovPDHLkV1mIOQ#Akp diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/inhand-right.png b/Resources/Textures/Clothing/OuterClothing/Armor/scaf.rsi/inhand-right.png deleted file mode 100644 index 6bfef738a454fd7a42912bc9b1233628db04c081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmV;Z0$2TsP)ho@Oe_jsthXFm1!2R%dQj-8z3ke5r2jzAz4`|fwnKB+NwD=$ zdU0OXrc69ckQjqdkhWxp5Xmno%d{l;d@do$8+hJ__e}!N0}w(8A%qY@2qA!N)^}SSnIWLs!-ywTuTFl7hQub;;rXpYe7KH@8m!fc^lsgf1zcP;Bb}at zcfY4dC&OKQ^t}Zp?I{Ymb@T^Vy%k^zTi<{e--Ul`-@w^ Date: Sat, 30 Mar 2024 19:01:52 -0700 Subject: [PATCH 018/206] Update Patrons.yml (#26578) --- Resources/Credits/Patrons.yml | 36 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Resources/Credits/Patrons.yml b/Resources/Credits/Patrons.yml index 193caa7350..f7e8df9bc0 100644 --- a/Resources/Credits/Patrons.yml +++ b/Resources/Credits/Patrons.yml @@ -1,13 +1,9 @@ -- Name: "Tomeno" - Tier: Revolutionary - Name: "Daniel Thompson" Tier: Revolutionary - Name: "Farewell Fire" Tier: Syndicate Agent - Name: "CPM311" Tier: Revolutionary -- Name: "Bobberunio" - Tier: Revolutionary - Name: "vifs_vestige" Tier: Syndicate Agent - Name: "Anthony Fleck" @@ -30,8 +26,6 @@ Tier: Revolutionary - Name: "clyf" Tier: Nuclear Operative -- Name: "spinnermaster" - Tier: Syndicate Agent - Name: "Will M." Tier: Revolutionary - Name: "The Hateful Flesh" @@ -78,8 +72,6 @@ Tier: Syndicate Agent - Name: "Saphire" Tier: Revolutionary -- Name: "DubzyVEVO" - Tier: Revolutionary - Name: "Never Solus" Tier: Syndicate Agent - Name: "Gnomo" @@ -100,8 +92,6 @@ Tier: Revolutionary - Name: "tokie" Tier: Nuclear Operative -- Name: "BlueisDumb" - Tier: Nuclear Operative - Name: "Enricoc3l" Tier: Revolutionary - Name: "DadNotTheBelt" @@ -138,14 +128,10 @@ Tier: Revolutionary - Name: "Adam Smedstad" Tier: Revolutionary -- Name: "oBerry" - Tier: Nuclear Operative - Name: "DireBoar" Tier: Revolutionary - Name: "Ignoramis" Tier: Revolutionary -- Name: "Repo" - Tier: Nuclear Operative - Name: "612" Tier: Revolutionary - Name: "Higgtastic" @@ -208,8 +194,6 @@ Tier: Revolutionary - Name: "Georgia Partyka" Tier: Syndicate Agent -- Name: "YuNii" - Tier: Syndicate Agent - Name: "Nojan Niaki" Tier: Revolutionary - Name: "nokko" @@ -284,5 +268,23 @@ Tier: Revolutionary - Name: "Black Rose" Tier: Revolutionary -- Name: "Dourbii" +- Name: "Kim" + Tier: Nuclear Operative +- Name: "Kyu, The Meme Fairy" + Tier: Syndicate Agent +- Name: "Russian TS" + Tier: Nuclear Operative +- Name: "Andrew" + Tier: Revolutionary +- Name: "Jack" + Tier: Syndicate Agent +- Name: "Brandon Roughley" + Tier: Syndicate Agent +- Name: "Sean Lilly" + Tier: Syndicate Agent +- Name: "Dieselmohawk D." + Tier: Revolutionary +- Name: "Hannah Dawson" + Tier: Syndicate Agent +- Name: "Godfiend" Tier: Revolutionary From c1b5576cc2d5c5d74a33ef7cc71eadd9f6a1aea4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 02:02:35 +0000 Subject: [PATCH 019/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 136f7054ef..302aea15ea 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: Menshin - changes: - - message: The PA control box should now properly detect the PA parts in all situations - (notably on Origin) - type: Fix - - message: The PA control box now automatically face the control box on part scanning - type: Tweak - id: 5761 - time: '2024-01-21T09:17:17.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24356 - author: metalgearsloth changes: - message: Fix revolver prediction. @@ -3794,3 +3784,10 @@ id: 6260 time: '2024-03-30T06:52:27.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25886 +- author: Flareguy + changes: + - message: Removed SCAF armor. + type: Remove + id: 6261 + time: '2024-03-31T02:01:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26566 From 87a56b25c3f06ea98661684b8e62f8acb0afee85 Mon Sep 17 00:00:00 2001 From: Simon <63975668+Simyon264@users.noreply.github.com> Date: Sun, 31 Mar 2024 04:05:44 +0200 Subject: [PATCH 020/206] Make aghost command work on other players using optional argument (#26546) * Translations * Make aghost command work on other players using optional argument * Reviews --- .../Administration/Commands/AGhost.cs | 172 +++++++++++------- .../en-US/administration/commands/aghost.ftl | 3 + Resources/Locale/en-US/shell.ftl | 1 + 3 files changed, 115 insertions(+), 61 deletions(-) create mode 100644 Resources/Locale/en-US/administration/commands/aghost.ftl diff --git a/Content.Server/Administration/Commands/AGhost.cs b/Content.Server/Administration/Commands/AGhost.cs index d541b1c884..935114e7a6 100644 --- a/Content.Server/Administration/Commands/AGhost.cs +++ b/Content.Server/Administration/Commands/AGhost.cs @@ -1,72 +1,122 @@ -using Content.Server.GameTicking; +using System.Linq; +using Content.Server.GameTicking; +using Content.Server.Ghost; +using Content.Server.Mind; using Content.Shared.Administration; using Content.Shared.Ghost; using Content.Shared.Mind; +using Robust.Server.GameObjects; +using Robust.Server.Player; using Robust.Shared.Console; -namespace Content.Server.Administration.Commands +namespace Content.Server.Administration.Commands; + +[AdminCommand(AdminFlags.Admin)] +public sealed class AGhost : LocalizedCommands { - [AdminCommand(AdminFlags.Admin)] - public sealed class AGhost : IConsoleCommand + [Dependency] private readonly IEntityManager _entities = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + + public override string Command => "aghost"; + public override string Description => LocalizationManager.GetString("aghost-description"); + public override string Help => "aghost"; + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) { - [Dependency] private readonly IEntityManager _entities = default!; - - public string Command => "aghost"; - public string Description => "Makes you an admin ghost."; - public string Help => "aghost"; - - public void Execute(IConsoleShell shell, string argStr, string[] args) + if (args.Length == 1) { - var player = shell.Player; - if (player == null) - { - shell.WriteLine("Nah"); - return; - } - - var mindSystem = _entities.System(); - if (!mindSystem.TryGetMind(player, out var mindId, out var mind)) - { - shell.WriteLine("You can't ghost here!"); - return; - } - - var metaDataSystem = _entities.System(); - - if (mind.VisitingEntity != default && _entities.TryGetComponent(mind.VisitingEntity, out var oldGhostComponent)) - { - mindSystem.UnVisit(mindId, mind); - // If already an admin ghost, then return to body. - if (oldGhostComponent.CanGhostInteract) - return; - } - - var canReturn = mind.CurrentEntity != null - && !_entities.HasComponent(mind.CurrentEntity); - var coordinates = player.AttachedEntity != null - ? _entities.GetComponent(player.AttachedEntity.Value).Coordinates - : EntitySystem.Get().GetObserverSpawnPoint(); - var ghost = _entities.SpawnEntity(GameTicker.AdminObserverPrototypeName, coordinates); - _entities.GetComponent(ghost).AttachToGridOrMap(); - - if (canReturn) - { - // TODO: Remove duplication between all this and "GamePreset.OnGhostAttempt()"... - if (!string.IsNullOrWhiteSpace(mind.CharacterName)) - metaDataSystem.SetEntityName(ghost, mind.CharacterName); - else if (!string.IsNullOrWhiteSpace(mind.Session?.Name)) - metaDataSystem.SetEntityName(ghost, mind.Session.Name); - - mindSystem.Visit(mindId, ghost, mind); - } - else - { - metaDataSystem.SetEntityName(ghost, player.Name); - mindSystem.TransferTo(mindId, ghost, mind: mind); - } - - var comp = _entities.GetComponent(ghost); - EntitySystem.Get().SetCanReturnToBody(comp, canReturn); + var names = _playerManager.Sessions.OrderBy(c => c.Name).Select(c => c.Name).ToArray(); + return CompletionResult.FromHintOptions(names, LocalizationManager.GetString("shell-argument-username-optional-hint")); } + + return CompletionResult.Empty; + } + + public override void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length > 1) + { + shell.WriteError(LocalizationManager.GetString("shell-wrong-arguments-number")); + return; + } + + var player = shell.Player; + var self = player != null; + if (player == null) + { + // If you are not a player, you require a player argument. + if (args.Length == 0) + { + shell.WriteError(LocalizationManager.GetString("shell-need-exactly-one-argument")); + return; + } + + var didFind = _playerManager.TryGetSessionByUsername(args[0], out player); + if (!didFind) + { + shell.WriteError(LocalizationManager.GetString("shell-target-player-does-not-exist")); + return; + } + } + + // If you are a player and a username is provided, a lookup is done to find the target player. + if (args.Length == 1) + { + var didFind = _playerManager.TryGetSessionByUsername(args[0], out player); + if (!didFind) + { + shell.WriteError(LocalizationManager.GetString("shell-target-player-does-not-exist")); + return; + } + } + + var mindSystem = _entities.System(); + var metaDataSystem = _entities.System(); + var ghostSystem = _entities.System(); + var transformSystem = _entities.System(); + var gameTicker = _entities.System(); + + if (!mindSystem.TryGetMind(player, out var mindId, out var mind)) + { + shell.WriteError(self + ? LocalizationManager.GetString("aghost-no-mind-self") + : LocalizationManager.GetString("aghost-no-mind-other")); + return; + } + + if (mind.VisitingEntity != default && _entities.TryGetComponent(mind.VisitingEntity, out var oldGhostComponent)) + { + mindSystem.UnVisit(mindId, mind); + // If already an admin ghost, then return to body. + if (oldGhostComponent.CanGhostInteract) + return; + } + + var canReturn = mind.CurrentEntity != null + && !_entities.HasComponent(mind.CurrentEntity); + var coordinates = player!.AttachedEntity != null + ? _entities.GetComponent(player.AttachedEntity.Value).Coordinates + : gameTicker.GetObserverSpawnPoint(); + var ghost = _entities.SpawnEntity(GameTicker.AdminObserverPrototypeName, coordinates); + transformSystem.AttachToGridOrMap(ghost, _entities.GetComponent(ghost)); + + if (canReturn) + { + // TODO: Remove duplication between all this and "GamePreset.OnGhostAttempt()"... + if (!string.IsNullOrWhiteSpace(mind.CharacterName)) + metaDataSystem.SetEntityName(ghost, mind.CharacterName); + else if (!string.IsNullOrWhiteSpace(mind.Session?.Name)) + metaDataSystem.SetEntityName(ghost, mind.Session.Name); + + mindSystem.Visit(mindId, ghost, mind); + } + else + { + metaDataSystem.SetEntityName(ghost, player.Name); + mindSystem.TransferTo(mindId, ghost, mind: mind); + } + + var comp = _entities.GetComponent(ghost); + ghostSystem.SetCanReturnToBody(comp, canReturn); } } diff --git a/Resources/Locale/en-US/administration/commands/aghost.ftl b/Resources/Locale/en-US/administration/commands/aghost.ftl new file mode 100644 index 0000000000..4de0639981 --- /dev/null +++ b/Resources/Locale/en-US/administration/commands/aghost.ftl @@ -0,0 +1,3 @@ +aghost-description = Makes you an admin ghost. +aghost-no-mind-self = You can't ghost here! +aghost-no-mind-other = They can't ghost here! diff --git a/Resources/Locale/en-US/shell.ftl b/Resources/Locale/en-US/shell.ftl index 7a66fbc794..34460f001a 100644 --- a/Resources/Locale/en-US/shell.ftl +++ b/Resources/Locale/en-US/shell.ftl @@ -47,3 +47,4 @@ shell-argument-number-invalid = Argument {$index} must be a valid number! # Hints shell-argument-username-hint = +shell-argument-username-optional-hint = [username] From ef8b16af9771fdd785251dc394aa40db30c1c224 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 02:06:49 +0000 Subject: [PATCH 021/206] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index b4b7f699fe..8acf404ad3 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -136,5 +136,13 @@ Entries: id: 18 time: '2024-03-29T05:03:34.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26500 +- author: Simyon + changes: + - message: The aghost command now accepts a optional username argument to aghost + other people. + type: Tweak + id: 19 + time: '2024-03-31T02:05:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26546 Name: Admin Order: 1 From daaa7c6de0d21c5b8d9c0b659eb62878a0410d3d Mon Sep 17 00:00:00 2001 From: blueDev2 <89804215+blueDev2@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:20:44 -0400 Subject: [PATCH 022/206] Add new component to Make sound on interact (#26523) * Adds new Component: EmitSoundOnInteractUsing * Missed an import * File-scoping * Replace ID check with Prototype check * Moved component and system to shared. Set prediction to true. * Removed impoper imports and changed namespace of component to reflect changed folder. * Following function naming theme * All this code is basically deltanedas's, but it was a learning experience for me * Update Content.Shared/Sound/Components/EmitSoundOnInteractUsingComponent.cs * Update Content.Shared/Sound/Components/EmitSoundOnInteractUsingComponent.cs --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- .../EmitSoundOnInteractUsingComponent.cs | 15 +++++++++++++++ Content.Shared/Sound/SharedEmitSoundSystem.cs | 8 ++++++++ 2 files changed, 23 insertions(+) create mode 100644 Content.Shared/Sound/Components/EmitSoundOnInteractUsingComponent.cs diff --git a/Content.Shared/Sound/Components/EmitSoundOnInteractUsingComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnInteractUsingComponent.cs new file mode 100644 index 0000000000..49118d9799 --- /dev/null +++ b/Content.Shared/Sound/Components/EmitSoundOnInteractUsingComponent.cs @@ -0,0 +1,15 @@ +using Content.Shared.Whitelist; +using Robust.Shared.Prototypes; +using Robust.Shared.GameStates; + +namespace Content.Shared.Sound.Components; + +/// +/// Whenever this item is used upon by an entity, with a tag or component within a whitelist, in the hand of a user, play a sound +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class EmitSoundOnInteractUsingComponent : BaseEmitSoundComponent +{ + [DataField(required: true)] + public EntityWhitelist Whitelist = new(); +} diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index cd7828fc6b..329626964e 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -41,6 +41,7 @@ public abstract class SharedEmitSoundSystem : EntitySystem SubscribeLocalEvent(OnEmitSoundOnActivateInWorld); SubscribeLocalEvent(OnEmitSoundOnPickup); SubscribeLocalEvent(OnEmitSoundOnDrop); + SubscribeLocalEvent(OnEmitSoundOnInteractUsing); SubscribeLocalEvent(OnEmitSoundOnCollide); } @@ -102,6 +103,13 @@ public abstract class SharedEmitSoundSystem : EntitySystem TryEmitSound(uid, component, args.User); } + private void OnEmitSoundOnInteractUsing(Entity ent, ref InteractUsingEvent args) + { + if (ent.Comp.Whitelist.IsValid(args.Used, EntityManager)) + { + TryEmitSound(ent, ent.Comp, args.User); + } + } protected void TryEmitSound(EntityUid uid, BaseEmitSoundComponent component, EntityUid? user=null, bool predict=true) { if (component.Sound == null) From b38547df530705741e0ba0789b051ffee9d6d0cf Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sun, 31 Mar 2024 04:21:31 +0200 Subject: [PATCH 023/206] Increase syndi duffelbag storage (#26565) * Increase syndi duffelbag storage * weh --- Resources/Prototypes/Entities/Clothing/Back/duffel.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml index 2ac53effe6..101599d5ad 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml @@ -167,6 +167,9 @@ sprite: Clothing/Back/Duffels/syndicate.rsi - type: ExplosionResistance damageCoefficient: 0.1 + - type: Storage + grid: + - 0,0,8,4 - type: entity parent: ClothingBackpackDuffelSyndicate From 9d1d5de4a7d5440f2ba457348fc560d2415d060d Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 02:22:37 +0000 Subject: [PATCH 024/206] 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 302aea15ea..9adf665842 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Fix revolver prediction. - type: Fix - id: 5762 - time: '2024-01-21T11:16:46.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/19649 - author: metalgearsloth changes: - message: Fix shuttle docking highlights being inaccurate. @@ -3791,3 +3784,10 @@ id: 6261 time: '2024-03-31T02:01:28.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26566 +- author: lzk228 + changes: + - message: Syndicate duffelbag storage increased from 8x5 to 9x5. + type: Tweak + id: 6262 + time: '2024-03-31T02:21:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26565 From 48e5c3cc8de5f830a74de5cd7671fa42c2995edd Mon Sep 17 00:00:00 2001 From: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com> Date: Sat, 30 Mar 2024 21:24:38 -0500 Subject: [PATCH 025/206] Adds construction/decon graphs for plastic flaps (#26341) * Adds construction/decon graphs for plastic flaps * Dang arbitrage * undo conflict --------- Co-authored-by: Velcroboy --- .../Entities/Structures/plastic_flaps.yml | 17 ++++- .../Graphs/structures/plastic_flaps.yml | 71 +++++++++++++++++++ .../Recipes/Construction/structures.yml | 53 +++++++++++++- 3 files changed, 138 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/plastic_flaps.yml b/Resources/Prototypes/Entities/Structures/plastic_flaps.yml index bf49eb1be3..c4ee507395 100644 --- a/Resources/Prototypes/Entities/Structures/plastic_flaps.yml +++ b/Resources/Prototypes/Entities/Structures/plastic_flaps.yml @@ -66,12 +66,15 @@ - Opaque - MidImpassable - type: Occluder + - type: Construction + graph: PlasticFlapsGraph + node: opaqueFlaps - type: entity id: PlasticFlapsAirtightClear parent: PlasticFlapsClear name: airtight plastic flaps - suffix: Airtight Clear + suffix: Airtight, Clear description: Heavy duty, slightly stronger, airtight plastic flaps. Definitely can't get past those. No way. components: - type: Destructible @@ -83,12 +86,17 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: Airtight + - type: Construction + graph: PlasticFlapsGraph + node: airtightFlaps + - type: StaticPrice + price: 100 - type: entity id: PlasticFlapsAirtightOpaque parent: PlasticFlapsOpaque name: airtight plastic flaps - suffix: Airtight Opaque + suffix: Airtight, Opaque description: Heavy duty, slightly stronger, airtight plastic flaps. Definitely can't get past those. No way. components: - type: Destructible @@ -100,3 +108,8 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: Airtight + - type: Construction + graph: PlasticFlapsGraph + node: airtightopaqueFlaps + - type: StaticPrice + price: 100 diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml index 9f8497ac98..776c1491a6 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/plastic_flaps.yml @@ -13,6 +13,7 @@ - material: Plastic amount: 5 doAfter: 10 + - node: plasticFlaps entity: PlasticFlapsClear edges: @@ -24,3 +25,73 @@ steps: - tool: Anchoring doAfter: 10 + + - to: opaqueFlaps + completed: + - !type:SnapToGrid { } + steps: + - tool: Welding + doAfter: 5 + + - to: airtightFlaps + completed: + - !type:SnapToGrid { } + steps: + - material: Plastic + amount: 5 + doAfter: 5 + - tool: Screwing + doAfter: 5 + + - node: opaqueFlaps + entity: PlasticFlapsOpaque + edges: + - to: start + completed: + - !type:SpawnPrototype + prototype: SheetPlastic + amount: 5 + steps: + - tool: Anchoring + doAfter: 10 + + - to: airtightopaqueFlaps + completed: + - !type:SnapToGrid { } + steps: + - material: Plastic + amount: 5 + doAfter: 5 + - tool: Screwing + doAfter: 5 + + - node: airtightFlaps + entity: PlasticFlapsAirtightClear + edges: + - to: plasticFlaps + completed: + - !type:SpawnPrototype + prototype: SheetPlastic + amount: 5 + steps: + - tool: Screwing + doAfter: 10 + + - to: airtightopaqueFlaps #test + completed: + - !type:SnapToGrid { } + steps: + - tool: Welding + doAfter: 5 + + - node: airtightopaqueFlaps + entity: PlasticFlapsAirtightOpaque + edges: + - to: opaqueFlaps + completed: + - !type:SpawnPrototype + prototype: SheetPlastic + amount: 5 + steps: + - tool: Screwing + doAfter: 10 diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index 963a289bab..bea97beaaa 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -86,7 +86,7 @@ canRotate: false canBuildInImpassable: false conditions: - - !type:TileNotBlocked + - !type:TileNotBlocked - type: construction name: clock wall @@ -1590,6 +1590,57 @@ conditions: - !type:TileNotBlocked +- type: construction + name: airtight plastic flaps + id: PlasticFlapsAirtight + graph: PlasticFlapsGraph + startNode: start + targetNode: airtightFlaps + category: construction-category-structures + placementMode: SnapgridCenter + description: An airtight plastic flap to let items through and keep people out. + objectType: Structure + canBuildInImpassable: false + icon: + sprite: Structures/plastic_flaps.rsi + state: plasticflaps + conditions: + - !type:TileNotBlocked + +- type: construction + name: opaque plastic flaps + id: PlasticFlapsOpaque + graph: PlasticFlapsGraph + startNode: start + targetNode: opaqueFlaps + category: construction-category-structures + placementMode: SnapgridCenter + description: An opaque plastic flap to let items through and keep people out. + objectType: Structure + canBuildInImpassable: false + icon: + sprite: Structures/plastic_flaps.rsi + state: plasticflaps + conditions: + - !type:TileNotBlocked + +- type: construction + name: airtight opaque plastic flaps + id: PlasticFlapsAirtightOpaque + graph: PlasticFlapsGraph + startNode: start + targetNode: airtightopaqueFlaps + category: construction-category-structures + placementMode: SnapgridCenter + description: An opaque, airtight plastic flap to let items through and keep people out. + objectType: Structure + canBuildInImpassable: false + icon: + sprite: Structures/plastic_flaps.rsi + state: plasticflaps + conditions: + - !type:TileNotBlocked + - type: construction name: bananium clown statue id: BananiumClownStatue From 950a6448bb0c673076c740609ad68bc6315fd058 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 02:25:44 +0000 Subject: [PATCH 026/206] 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 9adf665842..05854cf2a2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Fix shuttle docking highlights being inaccurate. - type: Fix - id: 5763 - time: '2024-01-21T12:14:47.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24369 - author: icekot8 changes: - message: Increased the size of flatpacks made by the Flatpacker 1001. @@ -3791,3 +3784,10 @@ id: 6262 time: '2024-03-31T02:21:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26565 +- author: Velcroboy + changes: + - message: Changed plastic flaps to be completely constructable/deconstructable + type: Tweak + id: 6263 + time: '2024-03-31T02:24:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26341 From a98d0cfe2e120f90c269e810f1365dad404d645a Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:00:45 -0500 Subject: [PATCH 027/206] Makes secglasses roundstart (#26487) * makes secglasses roundstart * fix epic fail * fix tests questionmark? * Update Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> --------- Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> --- .../Catalog/Fills/Lockers/heads.yml | 6 ++--- .../Catalog/Fills/Lockers/security.yml | 13 ++++------ .../Entities/Clothing/Eyes/glasses.yml | 8 ++++++ .../Entities/Structures/Machines/lathe.yml | 1 - .../Graphs/clothing/glasses_sechud.yml | 25 +++++++++++++++++++ .../Recipes/Construction/clothing.yml | 11 ++++++++ .../Prototypes/Recipes/Lathes/security.yml | 8 ------ Resources/Prototypes/Research/arsenal.yml | 1 - .../Roles/Jobs/Security/detective.yml | 2 +- .../Roles/Jobs/Security/head_of_security.yml | 2 +- .../Roles/Jobs/Security/security_officer.yml | 2 +- .../Prototypes/Roles/Jobs/Security/warden.yml | 2 +- Resources/Prototypes/tags.yml | 3 +++ 13 files changed, 58 insertions(+), 26 deletions(-) create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/clothing/glasses_sechud.yml diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 25c3fde0bd..ae5917bc51 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -255,7 +255,6 @@ components: - type: StorageFill contents: - - id: ClothingEyesHudSecurity - id: WeaponDisabler - id: ClothingOuterCoatHoSTrench - id: ClothingMaskNeckGaiter @@ -263,7 +262,7 @@ - id: ClothingMaskGasSwat - id: ClothingBeltSecurityFilled - id: ClothingHeadsetAltSecurity - - id: ClothingEyesGlassesSunglasses + - id: ClothingEyesGlassesSecurity - id: ClothingShoesBootsJack - id: CigarGoldCase prob: 0.50 @@ -282,13 +281,12 @@ components: - type: StorageFill contents: - - id: ClothingEyesHudSecurity - id: WeaponDisabler - id: ClothingOuterCoatHoSTrench - id: ClothingMaskNeckGaiter - id: ClothingBeltSecurityFilled - id: ClothingHeadsetAltSecurity - - id: ClothingEyesGlassesSunglasses + - id: ClothingEyesGlassesSecurity - id: ClothingShoesBootsJack - id: CigarGoldCase prob: 0.50 diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 4bb300b158..2896494978 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -9,7 +9,7 @@ - id: WeaponDisabler - id: ClothingBeltSecurityFilled - id: Flash - - id: ClothingEyesGlassesSunglasses + - id: ClothingEyesGlassesSecurity - id: ClothingHeadsetAltSecurity - id: ClothingHandsGlovesCombat - id: ClothingShoesBootsJack @@ -19,7 +19,6 @@ - id: DoorRemoteArmory - id: ClothingOuterHardsuitWarden - id: HoloprojectorSecurity - - id: ClothingEyesHudSecurity - type: entity id: LockerWardenFilled @@ -32,7 +31,7 @@ - id: WeaponDisabler - id: ClothingBeltSecurityFilled - id: Flash - - id: ClothingEyesGlassesSunglasses + - id: ClothingEyesGlassesSecurity - id: ClothingHeadsetAltSecurity - id: ClothingHandsGlovesCombat - id: ClothingShoesBootsJack @@ -41,7 +40,6 @@ - id: RubberStampWarden - id: DoorRemoteArmory - id: HoloprojectorSecurity - - id: ClothingEyesHudSecurity - type: entity id: LockerSecurityFilled @@ -60,13 +58,12 @@ - id: ClothingBeltSecurityFilled - id: Flash prob: 0.5 - - id: ClothingEyesGlassesSunglasses + - id: ClothingEyesGlassesSecurity - id: ClothingHeadsetSecurity - id: ClothingHandsGlovesColorBlack - id: ClothingShoesBootsJack - id: WeaponMeleeNeedle prob: 0.1 - - id: ClothingEyesHudSecurity - id: HoloprojectorSecurity prob: 0.6 @@ -77,7 +74,7 @@ components: - type: StorageFill contents: - - id: ClothingEyesHudSecurity + - id: ClothingEyesGlassesSecurity - id: WeaponDisabler - id: TrackingImplanter amount: 2 @@ -112,7 +109,7 @@ components: - type: StorageFill contents: - - id: ClothingEyesHudSecurity + - id: ClothingEyesGlassesSecurity prob: 0.3 - id: ClothingHeadHatFedoraBrown - id: ClothingNeckTieDet diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index e8cf01cb10..24944f02dd 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -149,6 +149,11 @@ - type: FlashImmunity - type: EyeProtection protectionTime: 5 + - type: Tag + tags: + - Sunglasses + - HamsterWearable + - WhitelistChameleon - type: entity parent: ClothingEyesBase @@ -163,6 +168,9 @@ - type: FlashImmunity - type: EyeProtection protectionTime: 5 + - type: Construction + graph: GlassesSecHUD + node: glassesSec - type: Tag tags: - HamsterWearable diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 5fbe84a3fe..5a32839a47 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -683,7 +683,6 @@ - CartridgeMagnumUranium - CartridgePistolUranium - CartridgeRifleUranium - - ClothingEyesGlassesSecurity - ExplosivePayload - FlashPayload - HoloprojectorSecurity diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/glasses_sechud.yml b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/glasses_sechud.yml new file mode 100644 index 0000000000..de264dbd58 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/glasses_sechud.yml @@ -0,0 +1,25 @@ +- type: constructionGraph + id: GlassesSecHUD + start: start + graph: + - node: start + edges: + - to: glassesSec + steps: + - tag: Sunglasses + name: sun glasses + icon: + sprite: Clothing/Eyes/Glasses/sunglasses.rsi + state: icon + doAfter: 5 + - tag: HudSecurity + name: security hud + icon: + sprite: Clothing/Eyes/Hud/sec.rsi + state: icon + doAfter: 5 + - material: Cable + amount: 5 + doAfter: 5 + - node: glassesSec + entity: ClothingEyesGlassesSecurity diff --git a/Resources/Prototypes/Recipes/Construction/clothing.yml b/Resources/Prototypes/Recipes/Construction/clothing.yml index 89f22cdf30..8907a47c6b 100644 --- a/Resources/Prototypes/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/Recipes/Construction/clothing.yml @@ -96,3 +96,14 @@ description: Comfy, yet haunted by the ghosts of ducks you fed bread to as a child. icon: { sprite: Clothing/Shoes/Misc/duck-slippers.rsi, state: icon } objectType: Item + +- type: construction + name: security glasses + id: ClothingEyesGlassesSecurity + graph: GlassesSecHUD + startNode: start + targetNode: glassesSec + category: construction-category-clothing + description: A pair of sunglasses, modified to have a built-in security HUD. + icon: { sprite: Clothing/Eyes/Glasses/secglasses.rsi, state: icon } + objectType: Item \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 432594d4b5..b3100ed70b 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -87,14 +87,6 @@ materials: Plastic: 100 -- type: latheRecipe - id: ClothingEyesGlassesSecurity - result: ClothingEyesGlassesSecurity - completetime: 2 - materials: - Steel: 300 - Glass: 200 - - type: latheRecipe id: ClothingEyesHudSecurity result: ClothingEyesHudSecurity diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index b17fb0ce00..3b7284c749 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -76,7 +76,6 @@ tier: 1 cost: 8000 recipeUnlocks: - - ClothingEyesGlassesSecurity - Truncheon - TelescopicShield - HoloprojectorSecurity diff --git a/Resources/Prototypes/Roles/Jobs/Security/detective.yml b/Resources/Prototypes/Roles/Jobs/Security/detective.yml index 21458779a0..488410949a 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/detective.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/detective.yml @@ -27,7 +27,7 @@ jumpsuit: ClothingUniformJumpsuitDetective back: ClothingBackpackSecurityFilledDetective shoes: ClothingShoesBootsCombatFilled - eyes: ClothingEyesGlassesSunglasses + eyes: ClothingEyesGlassesSecurity head: ClothingHeadHatFedoraBrown outerClothing: ClothingOuterVestDetective id: DetectivePDA diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index 5223357379..ef9a74fcb4 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -46,7 +46,7 @@ back: ClothingBackpackHOSFilled shoes: ClothingShoesBootsCombatFilled outerClothing: ClothingOuterCoatHoSTrench - eyes: ClothingEyesGlassesSunglasses + eyes: ClothingEyesGlassesSecurity head: ClothingHeadHatBeretHoS id: HoSPDA gloves: ClothingHandsGlovesCombat diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml index 686d140447..83b439fcab 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml @@ -28,7 +28,7 @@ jumpsuit: ClothingUniformJumpsuitSec back: ClothingBackpackSecurityFilled shoes: ClothingShoesBootsCombatFilled - eyes: ClothingEyesGlassesSunglasses + eyes: ClothingEyesGlassesSecurity head: ClothingHeadHelmetBasic outerClothing: ClothingOuterArmorBasic id: SecurityPDA diff --git a/Resources/Prototypes/Roles/Jobs/Security/warden.yml b/Resources/Prototypes/Roles/Jobs/Security/warden.yml index 7d509651b6..dbefd46a6f 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/warden.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/warden.yml @@ -31,7 +31,7 @@ jumpsuit: ClothingUniformJumpsuitWarden back: ClothingBackpackSecurityFilled shoes: ClothingShoesBootsCombatFilled - eyes: ClothingEyesGlassesSunglasses + eyes: ClothingEyesGlassesSecurity outerClothing: ClothingOuterCoatWarden id: WardenPDA ears: ClothingHeadsetSecurity diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index ae1f8c0d19..fe8c5a3cc1 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1180,6 +1180,9 @@ - type: Tag id: SuitEVA + +- type: Tag + id: Sunglasses - type: Tag id: SurgeryTool From 80c4d3ea0fd2cd18e4070f7cf714067db591228c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 03:01:52 +0000 Subject: [PATCH 028/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 05854cf2a2..dbfd5c37db 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: icekot8 - changes: - - message: Increased the size of flatpacks made by the Flatpacker 1001. - type: Tweak - id: 5764 - time: '2024-01-21T17:07:59.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24367 - author: Nairodian changes: - message: All vent critter events now have a small delay and alert message before @@ -3791,3 +3784,13 @@ id: 6263 time: '2024-03-31T02:24:39.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26341 +- author: Flareguy + changes: + - message: Security glasses have been moved from research to roundstart gear. All + officers now start with them instead of sunglasses by default. + type: Tweak + - message: You can now craft security glasses. + type: Add + id: 6264 + time: '2024-03-31T03:00:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26487 From 5f063d2d6d2a41702b60d11f779e23c34fa74410 Mon Sep 17 00:00:00 2001 From: brainfood1183 <113240905+brainfood1183@users.noreply.github.com> Date: Sun, 31 Mar 2024 04:21:18 +0100 Subject: [PATCH 029/206] Toilet Upgrade (needs review) (#22133) * Toilet Draft * fixes * toilets now have secret stash to place items in cistern. * fixes * plungers now unblock toilets. * fix sprite * new sprites and fix * fixes * improve seat sprites. * fix * removed visualisersystem changed to genericvisualizers * flush sound for toilets and copyright for toilet sprites. * fix atrributions * fixes * fix datafield flushtime * sprite improvements * fixes * multiple changes * fix * fix * fixes remove vv * moved stash related functions to secret stash system from toilet. * fix * fix * changes for recent review. * fix * fix --- .../Disposal/Systems/DisposalUnitSystem.cs | 24 +- Content.Client/Toilet/ToiletVisualsSystem.cs | 25 -- .../Conditions/ToiletLidClosed.cs | 39 --- .../Unit/EntitySystems/DisposalUnitSystem.cs | 7 +- .../Resist/EscapeInventorySystem.cs | 2 +- .../Components/SecretStashComponent.cs | 39 --- Content.Server/Toilet/ToiletSystem.cs | 197 +-------------- .../Buckle/Components/StrapComponent.cs | 11 +- .../Buckle/SharedBuckleSystem.Buckle.cs | 4 +- .../Components/SharedDisposalUnitComponent.cs | 50 ++-- .../Disposal/SharedDisposalUnitSystem.cs | 19 +- .../Plants}/PottedPlantHideComponent.cs | 5 +- .../Plants}/PottedPlantHideSystem.cs | 13 +- .../Plunger/Components/PlungerComponent.cs | 18 ++ .../Plunger/Components/PlungerUseComponent.cs | 42 ++++ Content.Shared/Plunger/PlungerDoAfterEvent.cs | 10 + .../Plunger/Systems/PlungerSystem.cs | 79 ++++++ .../Components/SecretStashComponent.cs | 90 +++++++ .../EntitySystems/SecretStashSystem.cs | 107 +++++++- .../Toilet/Components/ToiletComponent.cs | 40 +++ .../Toilet/Systems/SharedToiletSystem.cs | 109 ++++++++ Content.Shared/Toilet/ToiletComponent.cs | 32 --- Content.Shared/Toilet/ToiletVisuals.cs | 10 - .../Audio/Effects/Fluids/attributions.yml | 10 + Resources/Audio/Effects/Fluids/flush.ogg | Bin 0 -> 132202 bytes Resources/Audio/Effects/Fluids/splash.ogg | Bin 0 -> 44679 bytes Resources/Audio/Weapons/glug.ogg | Bin 0 -> 27517 bytes .../components/secret-stash-component.ftl | 1 + .../Locale/en-US/toilet/toilet-component.ftl | 2 + .../Objects/Specific/Janitorial/janitor.yml | 9 + .../Entities/Structures/Furniture/toilet.yml | 100 ++++++-- .../Structures/Piping/Disposal/units.yml | 20 +- .../Construction/Graphs/furniture/toilet.yml | 1 - .../Recipes/Construction/furniture.yml | 2 +- .../toilet.rsi/closed_toilet_seat_down.png | Bin 1445 -> 0 bytes .../toilet.rsi/closed_toilet_seat_up.png | Bin 1553 -> 0 bytes .../Furniture/toilet.rsi/condisposal.png | Bin 0 -> 31043 bytes .../toilet.rsi/disposal-charging.png | Bin 0 -> 31052 bytes .../Furniture/toilet.rsi/disposal-closed.png | Bin 0 -> 29675 bytes .../Furniture/toilet.rsi/disposal-down.png | Bin 0 -> 29554 bytes .../Furniture/toilet.rsi/disposal-flush.png | Bin 0 -> 25461 bytes .../Furniture/toilet.rsi/disposal-open.png | Bin 0 -> 28502 bytes .../Furniture/toilet.rsi/disposal-up.png | Bin 0 -> 29203 bytes .../Furniture/toilet.rsi/disposal.png | Bin 0 -> 31095 bytes .../Furniture/toilet.rsi/dispover-charge.png | Bin 0 -> 28316 bytes .../Furniture/toilet.rsi/dispover-full.png | Bin 0 -> 17416 bytes .../Furniture/toilet.rsi/dispover-handle.png | Bin 0 -> 17416 bytes .../Furniture/toilet.rsi/dispover-ready.png | Bin 0 -> 28318 bytes .../Structures/Furniture/toilet.rsi/meta.json | 238 +++++++++++++++++- .../toilet.rsi/open_toilet_seat_down.png | Bin 1437 -> 0 bytes .../toilet.rsi/open_toilet_seat_up.png | Bin 1535 -> 0 bytes 51 files changed, 890 insertions(+), 465 deletions(-) delete mode 100644 Content.Client/Toilet/ToiletVisualsSystem.cs delete mode 100644 Content.Server/Construction/Conditions/ToiletLidClosed.cs delete mode 100644 Content.Server/Storage/Components/SecretStashComponent.cs rename {Content.Server/Plants/Components => Content.Shared/Plants}/PottedPlantHideComponent.cs (80%) rename {Content.Server/Plants/Systems => Content.Shared/Plants}/PottedPlantHideSystem.cs (86%) create mode 100644 Content.Shared/Plunger/Components/PlungerComponent.cs create mode 100644 Content.Shared/Plunger/Components/PlungerUseComponent.cs create mode 100644 Content.Shared/Plunger/PlungerDoAfterEvent.cs create mode 100644 Content.Shared/Plunger/Systems/PlungerSystem.cs create mode 100644 Content.Shared/Storage/Components/SecretStashComponent.cs rename {Content.Server => Content.Shared}/Storage/EntitySystems/SecretStashSystem.cs (55%) create mode 100644 Content.Shared/Toilet/Components/ToiletComponent.cs create mode 100644 Content.Shared/Toilet/Systems/SharedToiletSystem.cs delete mode 100644 Content.Shared/Toilet/ToiletComponent.cs delete mode 100644 Content.Shared/Toilet/ToiletVisuals.cs create mode 100644 Resources/Audio/Effects/Fluids/flush.ogg create mode 100644 Resources/Audio/Effects/Fluids/splash.ogg create mode 100644 Resources/Audio/Weapons/glug.ogg delete mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/closed_toilet_seat_down.png delete mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/closed_toilet_seat_up.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/condisposal.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/disposal-charging.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/disposal-closed.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/disposal-down.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/disposal-flush.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/disposal-open.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/disposal-up.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/disposal.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/dispover-charge.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/dispover-full.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/dispover-handle.png create mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/dispover-ready.png delete mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/open_toilet_seat_down.png delete mode 100644 Resources/Textures/Structures/Furniture/toilet.rsi/open_toilet_seat_up.png diff --git a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs index 8c40c78421..b9e4a38660 100644 --- a/Content.Client/Disposal/Systems/DisposalUnitSystem.cs +++ b/Content.Client/Disposal/Systems/DisposalUnitSystem.cs @@ -96,24 +96,22 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem private void UpdateState(EntityUid uid, SharedDisposalUnitComponent unit, SpriteComponent sprite, AppearanceComponent appearance) { if (!_appearanceSystem.TryGetData(uid, Visuals.VisualState, out var state, appearance)) - { return; - } sprite.LayerSetVisible(DisposalUnitVisualLayers.Unanchored, state == VisualState.UnAnchored); sprite.LayerSetVisible(DisposalUnitVisualLayers.Base, state == VisualState.Anchored); - sprite.LayerSetVisible(DisposalUnitVisualLayers.BaseFlush, state is VisualState.Flushing or VisualState.Charging); + sprite.LayerSetVisible(DisposalUnitVisualLayers.OverlayFlush, state is VisualState.OverlayFlushing or VisualState.OverlayCharging); var chargingState = sprite.LayerMapTryGet(DisposalUnitVisualLayers.BaseCharging, out var chargingLayer) ? sprite.LayerGetState(chargingLayer) : new RSI.StateId(DefaultChargeState); // This is a transient state so not too worried about replaying in range. - if (state == VisualState.Flushing) + if (state == VisualState.OverlayFlushing) { if (!_animationSystem.HasRunningAnimation(uid, AnimationKey)) { - var flushState = sprite.LayerMapTryGet(DisposalUnitVisualLayers.BaseFlush, out var flushLayer) + var flushState = sprite.LayerMapTryGet(DisposalUnitVisualLayers.OverlayFlush, out var flushLayer) ? sprite.LayerGetState(flushLayer) : new RSI.StateId(DefaultFlushState); @@ -125,7 +123,7 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem { new AnimationTrackSpriteFlick { - LayerKey = DisposalUnitVisualLayers.BaseFlush, + LayerKey = DisposalUnitVisualLayers.OverlayFlush, KeyFrames = { // Play the flush animation @@ -154,26 +152,18 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem _animationSystem.Play(uid, anim, AnimationKey); } } - else if (state == VisualState.Charging) - { - sprite.LayerSetState(DisposalUnitVisualLayers.BaseFlush, chargingState); - } + else if (state == VisualState.OverlayCharging) + sprite.LayerSetState(DisposalUnitVisualLayers.OverlayFlush, new RSI.StateId("disposal-charging")); else - { _animationSystem.Stop(uid, AnimationKey); - } if (!_appearanceSystem.TryGetData(uid, Visuals.Handle, out var handleState, appearance)) - { handleState = HandleState.Normal; - } sprite.LayerSetVisible(DisposalUnitVisualLayers.OverlayEngaged, handleState != HandleState.Normal); if (!_appearanceSystem.TryGetData(uid, Visuals.Light, out var lightState, appearance)) - { lightState = LightStates.Off; - } sprite.LayerSetVisible(DisposalUnitVisualLayers.OverlayCharging, (lightState & LightStates.Charging) != 0); @@ -189,7 +179,7 @@ public enum DisposalUnitVisualLayers : byte Unanchored, Base, BaseCharging, - BaseFlush, + OverlayFlush, OverlayCharging, OverlayReady, OverlayFull, diff --git a/Content.Client/Toilet/ToiletVisualsSystem.cs b/Content.Client/Toilet/ToiletVisualsSystem.cs deleted file mode 100644 index 5367772ab0..0000000000 --- a/Content.Client/Toilet/ToiletVisualsSystem.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Content.Shared.Toilet; -using Robust.Client.GameObjects; - -namespace Content.Client.Toilet; - -public sealed class ToiletVisualsSystem : VisualizerSystem -{ - protected override void OnAppearanceChange(EntityUid uid, ToiletComponent component, ref AppearanceChangeEvent args) - { - if (args.Sprite == null) return; - - AppearanceSystem.TryGetData(uid, ToiletVisuals.LidOpen, out var lidOpen, args.Component); - AppearanceSystem.TryGetData(uid, ToiletVisuals.SeatUp, out var seatUp, args.Component); - - var state = (lidOpen, seatUp) switch - { - (false, false) => "closed_toilet_seat_down", - (false, true) => "closed_toilet_seat_up", - (true, false) => "open_toilet_seat_down", - (true, true) => "open_toilet_seat_up" - }; - - args.Sprite.LayerSetState(0, state); - } -} diff --git a/Content.Server/Construction/Conditions/ToiletLidClosed.cs b/Content.Server/Construction/Conditions/ToiletLidClosed.cs deleted file mode 100644 index 40a3be006b..0000000000 --- a/Content.Server/Construction/Conditions/ToiletLidClosed.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Content.Shared.Construction; -using Content.Shared.Examine; -using Content.Shared.Toilet; -using JetBrains.Annotations; - -namespace Content.Server.Construction.Conditions -{ - [UsedImplicitly] - [DataDefinition] - public sealed partial class ToiletLidClosed : IGraphCondition - { - public bool Condition(EntityUid uid, IEntityManager entityManager) - { - if (!entityManager.TryGetComponent(uid, out ToiletComponent? toilet)) - return false; - - return !toilet.LidOpen; - } - - public bool DoExamine(ExaminedEvent args) - { - var entity = args.Examined; - - if (!IoCManager.Resolve().TryGetComponent(entity, out ToiletComponent? toilet)) return false; - if (!toilet.LidOpen) return false; - - args.PushMarkup(Loc.GetString("construction-examine-condition-toilet-lid-closed") + "\n"); - return true; - } - - public IEnumerable GenerateGuideEntry() - { - yield return new ConstructionGuideEntry() - { - Localization = "construction-step-condition-toilet-lid-closed" - }; - } - } -} diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index a03ba5d231..8a7ea438be 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -135,8 +135,7 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem { // This is not an interaction, activation, or alternative verb type because unfortunately most users are // unwilling to accept that this is where they belong and don't want to accidentally climb inside. - if (!component.MobsCanEnter || - !args.CanAccess || + if (!args.CanAccess || !args.CanInteract || component.Container.ContainedEntities.Contains(args.User) || !_actionBlockerSystem.CanMove(args.User)) @@ -630,10 +629,10 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem switch (state) { case DisposalsPressureState.Flushed: - _appearance.SetData(uid, SharedDisposalUnitComponent.Visuals.VisualState, SharedDisposalUnitComponent.VisualState.Flushing, appearance); + _appearance.SetData(uid, SharedDisposalUnitComponent.Visuals.VisualState, SharedDisposalUnitComponent.VisualState.OverlayFlushing, appearance); break; case DisposalsPressureState.Pressurizing: - _appearance.SetData(uid, SharedDisposalUnitComponent.Visuals.VisualState, SharedDisposalUnitComponent.VisualState.Charging, appearance); + _appearance.SetData(uid, SharedDisposalUnitComponent.Visuals.VisualState, SharedDisposalUnitComponent.VisualState.OverlayCharging, appearance); break; case DisposalsPressureState.Ready: _appearance.SetData(uid, SharedDisposalUnitComponent.Visuals.VisualState, SharedDisposalUnitComponent.VisualState.Anchored, appearance); diff --git a/Content.Server/Resist/EscapeInventorySystem.cs b/Content.Server/Resist/EscapeInventorySystem.cs index 6bce38fbac..35c7d0bc65 100644 --- a/Content.Server/Resist/EscapeInventorySystem.cs +++ b/Content.Server/Resist/EscapeInventorySystem.cs @@ -1,5 +1,5 @@ using Content.Server.Popups; -using Content.Server.Storage.Components; +using Content.Shared.Storage.Components; using Content.Shared.ActionBlocker; using Content.Shared.DoAfter; using Content.Shared.Hands.EntitySystems; diff --git a/Content.Server/Storage/Components/SecretStashComponent.cs b/Content.Server/Storage/Components/SecretStashComponent.cs deleted file mode 100644 index a63cb074ad..0000000000 --- a/Content.Server/Storage/Components/SecretStashComponent.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Content.Server.Storage.EntitySystems; -using Content.Shared.Containers.ItemSlots; -using Content.Shared.Item; -using Content.Shared.Toilet; -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; - -namespace Content.Server.Storage.Components -{ - /// - /// Logic for a secret slot stash, like plant pot or toilet cistern. - /// Unlike it doesn't have interaction logic or verbs. - /// Other classes like should implement it. - /// - [RegisterComponent] - [Access(typeof(SecretStashSystem))] - public sealed partial class SecretStashComponent : Component - { - /// - /// Max item size that can be fitted into secret stash. - /// - [DataField("maxItemSize")] - public ProtoId MaxItemSize = "Small"; - - /// - /// IC secret stash name. For example "the toilet cistern". - /// If empty string, will replace it with entity name in init. - /// - [DataField("secretPartName", readOnly: true)] - public string SecretPartName { get; set; } = ""; - - /// - /// Container used to keep secret stash item. - /// - [ViewVariables] - public ContainerSlot ItemContainer = default!; - - } -} diff --git a/Content.Server/Toilet/ToiletSystem.cs b/Content.Server/Toilet/ToiletSystem.cs index 8bf8457e07..e184ddf0d5 100644 --- a/Content.Server/Toilet/ToiletSystem.cs +++ b/Content.Server/Toilet/ToiletSystem.cs @@ -1,197 +1,8 @@ -using Content.Server.Body.Systems; -using Content.Shared.Buckle; -using Content.Server.Popups; -using Content.Server.Storage.Components; -using Content.Server.Storage.EntitySystems; -using Content.Shared.Audio; -using Content.Shared.Body.Components; -using Content.Shared.Body.Part; -using Content.Shared.Buckle.Components; -using Content.Shared.Examine; -using Content.Shared.IdentityManagement; -using Content.Shared.Interaction; -using Content.Shared.Interaction.Events; -using Content.Shared.Popups; -using Content.Shared.Toilet; -using Content.Shared.Tools; -using Content.Shared.Tools.Components; -using Content.Shared.Verbs; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Player; -using Robust.Shared.Random; -using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; +using Content.Shared.Toilet.Systems; -namespace Content.Server.Toilet +namespace Content.Server.Toilet; + +public sealed class ToiletSystem : SharedToiletSystem { - public sealed class ToiletSystem : EntitySystem - { - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly BodySystem _body = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SecretStashSystem _secretStash = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly SharedToolSystem _tool = default!; - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnInteractUsing); - SubscribeLocalEvent(OnInteractHand); - SubscribeLocalEvent(OnExamine); - SubscribeLocalEvent(OnSuicide); - SubscribeLocalEvent(OnToiletPried); - SubscribeLocalEvent>(OnToggleSeatVerb); - } - - private void OnSuicide(EntityUid uid, ToiletComponent component, SuicideEvent args) - { - if (args.Handled) - return; - - // Check that victim has a head - // FIXME: since suiciding turns you into a ghost immediately, both messages are seen, not sure how this can be fixed - if (TryComp(args.Victim, out var body) && - _body.BodyHasPartType(args.Victim, BodyPartType.Head, body)) - { - var othersMessage = Loc.GetString("toilet-component-suicide-head-message-others", - ("victim", Identity.Entity(args.Victim, EntityManager)), ("owner", uid)); - _popup.PopupEntity(othersMessage, uid, Filter.PvsExcept(args.Victim), true, PopupType.MediumCaution); - - var selfMessage = Loc.GetString("toilet-component-suicide-head-message", - ("owner", uid)); - _popup.PopupEntity(selfMessage, uid, args.Victim, PopupType.LargeCaution); - - args.SetHandled(SuicideKind.Asphyxiation); - } - else - { - var othersMessage = Loc.GetString("toilet-component-suicide-message-others", - ("victim", Identity.Entity(args.Victim, EntityManager)), ("owner", uid)); - _popup.PopupEntity(othersMessage, uid, Filter.PvsExcept(uid), true, PopupType.MediumCaution); - - var selfMessage = Loc.GetString("toilet-component-suicide-message", - ("owner", uid)); - _popup.PopupEntity(selfMessage, uid, args.Victim, PopupType.LargeCaution); - - args.SetHandled(SuicideKind.Blunt); - } - } - - private void OnInit(EntityUid uid, ToiletComponent component, ComponentInit args) - { - EnsureComp(uid); - } - - private void OnMapInit(EntityUid uid, ToiletComponent component, MapInitEvent args) - { - // roll is toilet seat will be up or down - component.IsSeatUp = _random.Prob(0.5f); - UpdateSprite(uid, component); - } - - private void OnInteractUsing(EntityUid uid, ToiletComponent component, InteractUsingEvent args) - { - if (args.Handled) - return; - - // are player trying place or lift of cistern lid? - if (_tool.UseTool(args.Used, args.User, uid, component.PryLidTime, component.PryingQuality, new ToiletPryDoAfterEvent())) - { - args.Handled = true; - } - // maybe player trying to hide something inside cistern? - else if (component.LidOpen) - { - args.Handled = true; - _secretStash.TryHideItem(uid, args.User, args.Used); - } - } - - private void OnInteractHand(EntityUid uid, ToiletComponent component, InteractHandEvent args) - { - if (args.Handled) - return; - - // trying get something from stash? - if (component.LidOpen) - { - var gotItem = _secretStash.TryGetItem(uid, args.User); - if (gotItem) - { - args.Handled = true; - return; - } - } - - args.Handled = true; - } - - private void OnToggleSeatVerb(EntityUid uid, ToiletComponent component, GetVerbsEvent args) - { - if (!args.CanInteract || !args.CanAccess || !CanToggle(uid)) - return; - - var alterToiletSeatText = component.IsSeatUp ? Loc.GetString("toilet-seat-close") : Loc.GetString("toilet-seat-open"); - - var verb = new AlternativeVerb() - { - Act = () => { - if (CanToggle(uid)) - ToggleToiletSeat(uid, component); - }, - Text = alterToiletSeatText - }; - - args.Verbs.Add(verb); - } - - private void OnExamine(EntityUid uid, ToiletComponent component, ExaminedEvent args) - { - if (args.IsInDetailsRange && component.LidOpen) - { - if (_secretStash.HasItemInside(uid)) - { - var msg = Loc.GetString("toilet-component-on-examine-found-hidden-item"); - args.PushMarkup(msg); - } - } - } - - private void OnToiletPried(EntityUid uid, ToiletComponent toilet, ToiletPryDoAfterEvent args) - { - if (args.Cancelled) - return; - - toilet.LidOpen = !toilet.LidOpen; - UpdateSprite(uid, toilet); - } - - public bool CanToggle(EntityUid uid) - { - return TryComp(uid, out var strap) && strap.BuckledEntities.Count == 0; - } - - public void ToggleToiletSeat(EntityUid uid, ToiletComponent? component = null) - { - if (!Resolve(uid, ref component)) - return; - - component.IsSeatUp = !component.IsSeatUp; - _audio.PlayPvs(component.ToggleSound, uid, AudioParams.Default.WithVariation(SharedContentAudioSystem.DefaultVariation)); - UpdateSprite(uid, component); - } - - private void UpdateSprite(EntityUid uid, ToiletComponent component) - { - if (!TryComp(uid, out var appearance)) - return; - - _appearance.SetData(uid, ToiletVisuals.LidOpen, component.LidOpen, appearance); - _appearance.SetData(uid, ToiletVisuals.SeatUp, component.IsSeatUp, appearance); - } - } } diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index f25e1b0374..72c92ebf84 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -22,9 +22,14 @@ public sealed partial class StrapComponent : Component /// Entities that this strap accepts and can buckle /// If null it accepts any entity /// - [DataField] - [ViewVariables] - public EntityWhitelist? AllowedEntities; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntityWhitelist? Whitelist; + + /// + /// Entities that this strap does not accept and cannot buckle. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public EntityWhitelist? Blacklist; /// /// The change in position to the strapped mob diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index 3d1fbf2b69..0d67473ffe 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -221,8 +221,8 @@ public abstract partial class SharedBuckleSystem } // Does it pass the Whitelist - if (strapComp.AllowedEntities != null && - !strapComp.AllowedEntities.IsValid(userUid, EntityManager)) + if (strapComp.Whitelist != null && + !strapComp.Whitelist.IsValid(buckleUid, EntityManager) || strapComp.Blacklist?.IsValid(buckleUid, EntityManager) == true) { if (_netManager.IsServer) _popup.PopupEntity(Loc.GetString("buckle-component-cannot-fit-message"), userUid, buckleUid, PopupType.Medium); diff --git a/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs b/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs index 72586be1ec..4948cb6640 100644 --- a/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs +++ b/Content.Shared/Disposal/Components/SharedDisposalUnitComponent.cs @@ -1,4 +1,5 @@ using Robust.Shared.Audio; +using Content.Shared.Whitelist; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Serialization; @@ -17,6 +18,18 @@ public abstract partial class SharedDisposalUnitComponent : Component [ViewVariables(VVAccess.ReadWrite), DataField("soundFlush")] public SoundSpecifier? FlushSound = new SoundPathSpecifier("/Audio/Machines/disposalflush.ogg"); + /// + /// Blacklists (prevents) entities listed from being placed inside. + /// + [DataField] + public EntityWhitelist? Blacklist; + + /// + /// Whitelists (allows) entities listed from being placed inside. + /// + [DataField] + public EntityWhitelist? Whitelist; + /// /// Sound played when an object is inserted into the disposal unit. /// @@ -33,20 +46,20 @@ public abstract partial class SharedDisposalUnitComponent : Component /// /// State for this disposals unit. /// - [DataField("state")] + [DataField] public DisposalsPressureState State; // TODO: Just make this use vaulting. /// /// We'll track whatever just left disposals so we know what collision we need to ignore until they stop intersecting our BB. /// - [ViewVariables, DataField("recentlyEjected")] + [ViewVariables, DataField] public List RecentlyEjected = new(); /// /// Next time the disposal unit will be pressurized. /// - [DataField("nextPressurized", customTypeSerializer:typeof(TimeOffsetSerializer))] + [DataField(customTypeSerializer:typeof(TimeOffsetSerializer))] public TimeSpan NextPressurized = TimeSpan.Zero; /// @@ -58,63 +71,60 @@ public abstract partial class SharedDisposalUnitComponent : Component /// /// How long it takes from the start of a flush animation to return the sprite to normal. /// - [DataField("flushDelay")] + [DataField] public TimeSpan FlushDelay = TimeSpan.FromSeconds(3); - [DataField("mobsCanEnter")] - public bool MobsCanEnter = true; - /// /// Removes the pressure requirement for flushing. /// - [DataField("disablePressure"), ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public bool DisablePressure; /// - /// Last time that an entity tried to exit this disposal unit. + /// Last time that an entity tried to exit this disposal unit. /// [ViewVariables] public TimeSpan LastExitAttempt; - [DataField("autoEngageEnabled")] + [DataField] public bool AutomaticEngage = true; [ViewVariables(VVAccess.ReadWrite)] - [DataField("autoEngageTime")] + [DataField] public TimeSpan AutomaticEngageTime = TimeSpan.FromSeconds(30); /// - /// Delay from trying to enter disposals ourselves. + /// Delay from trying to enter disposals ourselves. /// [ViewVariables(VVAccess.ReadWrite)] - [DataField("entryDelay")] + [DataField] public float EntryDelay = 0.5f; /// - /// Delay from trying to shove someone else into disposals. + /// Delay from trying to shove someone else into disposals. /// [ViewVariables(VVAccess.ReadWrite)] public float DraggedEntryDelay = 2.0f; /// - /// Container of entities inside this disposal unit. + /// Container of entities inside this disposal unit. /// [ViewVariables] public Container Container = default!; // TODO: Network power shit instead fam. - [ViewVariables, DataField("powered")] + [ViewVariables, DataField] public bool Powered; /// /// Was the disposals unit engaged for a manual flush. /// - [ViewVariables(VVAccess.ReadWrite), DataField("engaged")] + [ViewVariables(VVAccess.ReadWrite), DataField] public bool Engaged; /// /// Next time this unit will flush. Is the lesser of and /// - [ViewVariables, DataField("nextFlush", customTypeSerializer:typeof(TimeOffsetSerializer))] + [ViewVariables, DataField(customTypeSerializer:typeof(TimeOffsetSerializer))] public TimeSpan? NextFlush; [Serializable, NetSerializable] @@ -130,8 +140,8 @@ public abstract partial class SharedDisposalUnitComponent : Component { UnAnchored, Anchored, - Flushing, - Charging + OverlayFlushing, + OverlayCharging } [Serializable, NetSerializable] diff --git a/Content.Shared/Disposal/SharedDisposalUnitSystem.cs b/Content.Shared/Disposal/SharedDisposalUnitSystem.cs index 9afd683cbd..c39139f9a5 100644 --- a/Content.Shared/Disposal/SharedDisposalUnitSystem.cs +++ b/Content.Shared/Disposal/SharedDisposalUnitSystem.cs @@ -1,12 +1,10 @@ -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using Content.Shared.Body.Components; using Content.Shared.Disposal.Components; using Content.Shared.DoAfter; using Content.Shared.DragDrop; using Content.Shared.Emag.Systems; using Content.Shared.Item; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using Content.Shared.Throwing; using Robust.Shared.Audio; using Robust.Shared.Physics.Components; @@ -26,7 +24,6 @@ public abstract class SharedDisposalUnitSystem : EntitySystem { [Dependency] protected readonly IGameTiming GameTiming = default!; [Dependency] protected readonly MetaDataSystem Metadata = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] protected readonly SharedJointSystem Joints = default!; protected static TimeSpan ExitAttemptDelay = TimeSpan.FromSeconds(0.5); @@ -112,19 +109,21 @@ public abstract class SharedDisposalUnitSystem : EntitySystem if (!Transform(uid).Anchored) return false; - // TODO: Probably just need a disposable tag. var storable = HasComp(entity); if (!storable && !HasComp(entity)) return false; - //Check if the entity is a mob and if mobs can be inserted - if (TryComp(entity, out var damageState) && !component.MobsCanEnter) + if (component.Blacklist?.IsValid(entity, EntityManager) == true) return false; - if (TryComp(entity, out var physics) && (physics.CanCollide || storable)) - return true; + if (component.Whitelist != null && component.Whitelist?.IsValid(entity, EntityManager) != true) + return false; + + if (TryComp(entity, out var physics) && (physics.CanCollide) || storable) + return true; + else + return false; - return damageState != null && (!component.MobsCanEnter || _mobState.IsDead(entity, damageState)); } public abstract void DoInsertDisposalUnit(EntityUid uid, EntityUid toInsert, EntityUid user, SharedDisposalUnitComponent? disposal = null); diff --git a/Content.Server/Plants/Components/PottedPlantHideComponent.cs b/Content.Shared/Plants/PottedPlantHideComponent.cs similarity index 80% rename from Content.Server/Plants/Components/PottedPlantHideComponent.cs rename to Content.Shared/Plants/PottedPlantHideComponent.cs index bc35bbe44f..2e02272494 100644 --- a/Content.Server/Plants/Components/PottedPlantHideComponent.cs +++ b/Content.Shared/Plants/PottedPlantHideComponent.cs @@ -1,8 +1,7 @@ -using Content.Server.Plants.Systems; -using Content.Server.Storage.Components; +using Content.Shared.Storage.Components; using Robust.Shared.Audio; -namespace Content.Server.Plants.Components +namespace Content.Shared.Plants { /// /// Interaction wrapper for . diff --git a/Content.Server/Plants/Systems/PottedPlantHideSystem.cs b/Content.Shared/Plants/PottedPlantHideSystem.cs similarity index 86% rename from Content.Server/Plants/Systems/PottedPlantHideSystem.cs rename to Content.Shared/Plants/PottedPlantHideSystem.cs index 09571c60a1..fd256fd926 100644 --- a/Content.Server/Plants/Systems/PottedPlantHideSystem.cs +++ b/Content.Shared/Plants/PottedPlantHideSystem.cs @@ -1,18 +1,15 @@ -using Content.Server.Plants.Components; -using Content.Server.Popups; -using Content.Server.Storage.Components; -using Content.Server.Storage.EntitySystems; -using Content.Shared.Audio; +using Content.Shared.Popups; +using Content.Shared.Storage.Components; +using Content.Shared.Storage.EntitySystems; using Content.Shared.Interaction; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; -using Robust.Shared.Player; -namespace Content.Server.Plants.Systems +namespace Content.Shared.Plants { public sealed class PottedPlantHideSystem : EntitySystem { - [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SecretStashSystem _stashSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; diff --git a/Content.Shared/Plunger/Components/PlungerComponent.cs b/Content.Shared/Plunger/Components/PlungerComponent.cs new file mode 100644 index 0000000000..101121fe4c --- /dev/null +++ b/Content.Shared/Plunger/Components/PlungerComponent.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Plunger.Components +{ + /// + /// Allows entity to unblock target entity with PlungerUseComponent. + /// + [RegisterComponent, NetworkedComponent,AutoGenerateComponentState] + public sealed partial class PlungerComponent : Component + { + /// + /// Duration of plunger doafter event. + /// + [DataField] + [AutoNetworkedField] + public float PlungeDuration = 2f; + } +} diff --git a/Content.Shared/Plunger/Components/PlungerUseComponent.cs b/Content.Shared/Plunger/Components/PlungerUseComponent.cs new file mode 100644 index 0000000000..e886a4ef7a --- /dev/null +++ b/Content.Shared/Plunger/Components/PlungerUseComponent.cs @@ -0,0 +1,42 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Content.Shared.Random; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Plunger.Components +{ + /// + /// Entity can interact with plungers. + /// + [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] + public sealed partial class PlungerUseComponent : Component + { + /// + /// If true entity has been plungered. + /// + [DataField] + [AutoNetworkedField] + public bool Plunged; + + /// + /// If true entity can interact with plunger. + /// + [DataField] + [AutoNetworkedField] + public bool NeedsPlunger = false; + + /// + /// A weighted random entity prototype containing the different loot that rummaging can provide. + /// + [DataField] + [AutoNetworkedField] + public ProtoId PlungerLoot = "PlungerLoot"; + + + /// + /// Sound played on rummage completion. + /// + [DataField] + public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Effects/Fluids/glug.ogg"); + } +} diff --git a/Content.Shared/Plunger/PlungerDoAfterEvent.cs b/Content.Shared/Plunger/PlungerDoAfterEvent.cs new file mode 100644 index 0000000000..b803f5136f --- /dev/null +++ b/Content.Shared/Plunger/PlungerDoAfterEvent.cs @@ -0,0 +1,10 @@ + +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Plunger; + +[Serializable, NetSerializable] +public sealed partial class PlungerDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/Plunger/Systems/PlungerSystem.cs b/Content.Shared/Plunger/Systems/PlungerSystem.cs new file mode 100644 index 0000000000..57bd77a7d9 --- /dev/null +++ b/Content.Shared/Plunger/Systems/PlungerSystem.cs @@ -0,0 +1,79 @@ +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Content.Shared.Plunger.Components; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Timing; +using Content.Shared.Random.Helpers; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Content.Shared.Random; + +namespace Content.Shared.Plunger.Systems; + +/// +/// Plungers can be used to unblock entities with PlungerUseComponent. +/// +public sealed class PlungerSystem : EntitySystem +{ + [Dependency] protected readonly IPrototypeManager _proto = default!; + [Dependency] protected readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnInteract); + SubscribeLocalEvent(OnDoAfter); + } + + private void OnInteract(EntityUid uid, PlungerComponent component, AfterInteractEvent args) + { + if (args.Handled) + return; + + if (!args.CanReach || args.Target is not { Valid: true } target) + return; + + if (!TryComp(args.Target, out var plunger)) + return; + + if (plunger.NeedsPlunger) + return; + + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.PlungeDuration, new PlungerDoAfterEvent(), uid, target, uid) + { + BreakOnMove = true, + BreakOnDamage = true, + MovementThreshold = 1.0f, + }); + args.Handled = true; + } + + private void OnDoAfter(EntityUid uid, PlungerComponent component, DoAfterEvent args) + { + if (args.Cancelled || args.Handled || args.Args.Target == null) + return; + + if (args.Target is not { Valid: true } target) + return; + + if (!TryComp(target, out PlungerUseComponent? plunge)) + return; + + _popup.PopupClient(Loc.GetString("plunger-unblock", ("target", target)), args.User, args.User, PopupType.Medium); + plunge.Plunged = true; + + var spawn = _proto.Index(plunge.PlungerLoot).Pick(_random); + + _audio.PlayPredicted(plunge.Sound, uid, uid); + Spawn(spawn, Transform(target).Coordinates); + RemComp(target); + Dirty(target, plunge); + + args.Handled = true; + } +} + diff --git a/Content.Shared/Storage/Components/SecretStashComponent.cs b/Content.Shared/Storage/Components/SecretStashComponent.cs new file mode 100644 index 0000000000..8595f79ca5 --- /dev/null +++ b/Content.Shared/Storage/Components/SecretStashComponent.cs @@ -0,0 +1,90 @@ +using Content.Shared.Storage.EntitySystems; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Item; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Content.Shared.Tools; +using Robust.Shared.GameStates; +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Storage.Components +{ + /// + /// Logic for a secret slot stash, like plant pot or toilet cistern. + /// Unlike it doesn't have interaction logic or verbs. + /// Other classes like should implement it. + /// + [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] + [Access(typeof(SecretStashSystem))] + public sealed partial class SecretStashComponent : Component + { + /// + /// Max item size that can be fitted into secret stash. + /// + [DataField("maxItemSize")] + public ProtoId MaxItemSize = "Small"; + + /// + /// If stash has way to open then this will switch between open and closed. + /// + [DataField, AutoNetworkedField] + public bool ToggleOpen; + + /// + /// Prying the door. + /// + [DataField] + public float PryDoorTime = 1f; + + [DataField] + public ProtoId PryingQuality = "Prying"; + + /// + /// Is stash openable?. + /// + [DataField, AutoNetworkedField] + public bool OpenableStash = false; + + /// + /// IC secret stash name. For example "the toilet cistern". + /// If empty string, will replace it with entity name in init. + /// + [DataField] + public string SecretPartName { get; set; } = ""; + + [DataField, AutoNetworkedField] + public string ExamineStash = "comp-secret-stash-on-examine-found-hidden-item"; + + /// + /// Container used to keep secret stash item. + /// + [ViewVariables] + public ContainerSlot ItemContainer = default!; + + } + + /// + /// Simple pry event for prying open a stash door. + /// + [Serializable, NetSerializable] + public sealed partial class StashPryDoAfterEvent : SimpleDoAfterEvent + { + } + + /// + /// Visualizers for handling stash open closed state if stash has door. + /// + [Serializable, NetSerializable] + public enum StashVisuals : byte + { + DoorVisualState, + } + + [Serializable, NetSerializable] + public enum DoorVisualState : byte + { + DoorOpen, + DoorClosed + } +} diff --git a/Content.Server/Storage/EntitySystems/SecretStashSystem.cs b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs similarity index 55% rename from Content.Server/Storage/EntitySystems/SecretStashSystem.cs rename to Content.Shared/Storage/EntitySystems/SecretStashSystem.cs index 49be0a2f88..9aee1b982e 100644 --- a/Content.Server/Storage/EntitySystems/SecretStashSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs @@ -1,25 +1,37 @@ -using Content.Server.Popups; -using Content.Server.Storage.Components; +using Content.Shared.Popups; +using Content.Shared.Storage.Components; using Content.Shared.Destructible; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Item; using Robust.Shared.Containers; +using Content.Shared.Interaction; +using Content.Shared.Tools.Systems; +using Content.Shared.Examine; -namespace Content.Server.Storage.EntitySystems +namespace Content.Shared.Storage.EntitySystems { + /// + /// Secret Stash allows an item to be hidden within. + /// public sealed class SecretStashSystem : EntitySystem { - [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly SharedItemSystem _item = default!; + [Dependency] private readonly SharedToolSystem _tool = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnDestroyed); + SubscribeLocalEvent(OnSecretStashPried); + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnInteractHand); + SubscribeLocalEvent(OnExamine); } private void OnInit(EntityUid uid, SecretStashComponent component, ComponentInit args) @@ -42,6 +54,73 @@ namespace Content.Server.Storage.EntitySystems return component.ItemContainer.ContainedEntity != null; } + private void OnInteractUsing(EntityUid uid, SecretStashComponent component, InteractUsingEvent args) + { + if (args.Handled) + return; + + if (!component.OpenableStash) + return; + + // is player trying place or lift off cistern lid? + if (_tool.UseTool(args.Used, args.User, uid, component.PryDoorTime, component.PryingQuality, new StashPryDoAfterEvent())) + args.Handled = true; + // maybe player is trying to hide something inside cistern? + else if (component.ToggleOpen) + { + TryHideItem(uid, args.User, args.Used); + args.Handled = true; + } + } + + private void OnInteractHand(EntityUid uid, SecretStashComponent component, InteractHandEvent args) + { + if (args.Handled) + return; + + if (!component.OpenableStash) + return; + + // trying to get something from stash? + if (component.ToggleOpen) + { + var gotItem = TryGetItem(uid, args.User); + if (gotItem) + { + args.Handled = true; + return; + } + } + args.Handled = true; + } + + private void OnSecretStashPried(EntityUid uid, SecretStashComponent component, StashPryDoAfterEvent args) + { + if (args.Cancelled) + return; + + ToggleOpen(uid, component); + } + + public void ToggleOpen(EntityUid uid, SecretStashComponent? component = null, MetaDataComponent? meta = null) + { + if (!Resolve(uid, ref component)) + return; + + component.ToggleOpen = !component.ToggleOpen; + + UpdateAppearance(uid, component); + Dirty(uid, component, meta); + } + + private void UpdateAppearance(EntityUid uid, SecretStashComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + _appearance.SetData(uid, StashVisuals.DoorVisualState, component.ToggleOpen ? DoorVisualState.DoorOpen : DoorVisualState.DoorClosed); + } + /// /// Tries to hide item inside secret stash from hands of user. /// @@ -62,7 +141,7 @@ namespace Content.Server.Storage.EntitySystems if (container.ContainedEntity != null) { var msg = Loc.GetString("comp-secret-stash-action-hide-container-not-empty"); - _popupSystem.PopupEntity(msg, uid, userUid); + _popupSystem.PopupClient(msg, uid, userUid); return false; } @@ -71,7 +150,7 @@ namespace Content.Server.Storage.EntitySystems { var msg = Loc.GetString("comp-secret-stash-action-hide-item-too-big", ("item", itemToHideUid), ("stash", GetSecretPartName(uid, component))); - _popupSystem.PopupEntity(msg, uid, userUid); + _popupSystem.PopupClient(msg, uid, userUid); return false; } @@ -84,7 +163,7 @@ namespace Content.Server.Storage.EntitySystems // all done, show success message var successMsg = Loc.GetString("comp-secret-stash-action-hide-success", ("item", itemToHideUid), ("this", GetSecretPartName(uid, component))); - _popupSystem.PopupEntity(successMsg, uid, userUid); + _popupSystem.PopupClient(successMsg, uid, userUid); return true; } @@ -113,11 +192,23 @@ namespace Content.Server.Storage.EntitySystems // show success message var successMsg = Loc.GetString("comp-secret-stash-action-get-item-found-something", ("stash", GetSecretPartName(uid, component))); - _popupSystem.PopupEntity(successMsg, uid, userUid); + _popupSystem.PopupClient(successMsg, uid, userUid); return true; } + private void OnExamine(EntityUid uid, SecretStashComponent component, ExaminedEvent args) + { + if (args.IsInDetailsRange && component.ToggleOpen) + { + if (HasItemInside(uid)) + { + var msg = Loc.GetString(component.ExamineStash); + args.PushMarkup(msg); + } + } + } + private string GetSecretPartName(EntityUid uid, SecretStashComponent stash) { if (stash.SecretPartName != "") diff --git a/Content.Shared/Toilet/Components/ToiletComponent.cs b/Content.Shared/Toilet/Components/ToiletComponent.cs new file mode 100644 index 0000000000..5de74e08f6 --- /dev/null +++ b/Content.Shared/Toilet/Components/ToiletComponent.cs @@ -0,0 +1,40 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Toilet.Components +{ + /// + /// Toilets that can be flushed, seats toggled up and down, items hidden in cistern. + /// + [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] + public sealed partial class ToiletComponent : Component + { + /// + /// Toggles seat state. + /// + [DataField, AutoNetworkedField] + public bool ToggleSeat; + + + /// + /// Sound to play when toggling toilet seat. + /// + [DataField] + public SoundSpecifier SeatSound = new SoundPathSpecifier("/Audio/Effects/toilet_seat_down.ogg"); + } + + [Serializable, NetSerializable] + public enum ToiletVisuals : byte + { + SeatVisualState, + } + + [Serializable, NetSerializable] + public enum SeatVisualState : byte + { + SeatUp, + SeatDown + } +} + diff --git a/Content.Shared/Toilet/Systems/SharedToiletSystem.cs b/Content.Shared/Toilet/Systems/SharedToiletSystem.cs new file mode 100644 index 0000000000..87df69e88d --- /dev/null +++ b/Content.Shared/Toilet/Systems/SharedToiletSystem.cs @@ -0,0 +1,109 @@ +using Content.Shared.Buckle.Components; +using Content.Shared.Interaction; +using Content.Shared.Verbs; +using Content.Shared.Plunger.Components; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Random; +using Robust.Shared.Utility; +using Content.Shared.Toilet.Components; + +namespace Content.Shared.Toilet.Systems +{ + /// + /// Handles sprite changes for both toilet seat up and down as well as for lid open and closed. Handles interactions with hidden stash + /// + + public abstract class SharedToiletSystem : EntitySystem + { + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent>(OnToggleSeatVerb); + SubscribeLocalEvent(OnActivateInWorld); + } + + private void OnMapInit(EntityUid uid, ToiletComponent component, MapInitEvent args) + { + if (_random.Prob(0.5f)) + component.ToggleSeat = true; + + if (_random.Prob(0.3f)) + { + TryComp(uid, out var plunger); + + if (plunger == null) + return; + + plunger.NeedsPlunger = true; + } + + UpdateAppearance(uid); + Dirty(uid, component); + } + + public bool CanToggle(EntityUid uid) + { + return TryComp(uid, out var strap) && strap.BuckledEntities.Count == 0; + } + + private void OnToggleSeatVerb(EntityUid uid, ToiletComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess || !CanToggle(uid) || args.Hands == null) + return; + + AlternativeVerb toggleVerb = new() + { + Act = () => ToggleToiletSeat(uid, args.User, component) + }; + + if (component.ToggleSeat) + { + toggleVerb.Text = Loc.GetString("toilet-seat-close"); + toggleVerb.Icon = + new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/close.svg.192dpi.png")); + } + else + { + toggleVerb.Text = Loc.GetString("toilet-seat-open"); + toggleVerb.Icon = + new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/open.svg.192dpi.png")); + } + args.Verbs.Add(toggleVerb); + } + + private void OnActivateInWorld(EntityUid uid, ToiletComponent comp, ActivateInWorldEvent args) + { + if (args.Handled) + return; + + args.Handled = true; + ToggleToiletSeat(uid, args.User, comp); + } + + public void ToggleToiletSeat(EntityUid uid, EntityUid? user = null, ToiletComponent? component = null, MetaDataComponent? meta = null) + { + if (!Resolve(uid, ref component)) + return; + + component.ToggleSeat = !component.ToggleSeat; + + _audio.PlayPredicted(component.SeatSound, uid, uid); + UpdateAppearance(uid, component); + Dirty(uid, component, meta); + } + + private void UpdateAppearance(EntityUid uid, ToiletComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + _appearance.SetData(uid, ToiletVisuals.SeatVisualState, component.ToggleSeat ? SeatVisualState.SeatUp : SeatVisualState.SeatDown); + } + } +} diff --git a/Content.Shared/Toilet/ToiletComponent.cs b/Content.Shared/Toilet/ToiletComponent.cs deleted file mode 100644 index 161bf81c99..0000000000 --- a/Content.Shared/Toilet/ToiletComponent.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Content.Shared.DoAfter; -using Content.Shared.Tools; -using Robust.Shared.Audio; -using Robust.Shared.Serialization; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.Toilet -{ - [RegisterComponent] - public sealed partial class ToiletComponent : Component - { - [DataField("pryLidTime")] - public float PryLidTime = 1f; - - [DataField("pryingQuality", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string PryingQuality = "Prying"; - - [DataField("toggleSound")] - public SoundSpecifier ToggleSound = new SoundPathSpecifier("/Audio/Effects/toilet_seat_down.ogg"); - - [DataField("lidOpen")] - public bool LidOpen = false; - - [DataField("isSeatUp")] - public bool IsSeatUp = false; - } - - [Serializable, NetSerializable] - public sealed partial class ToiletPryDoAfterEvent : SimpleDoAfterEvent - { - } -} diff --git a/Content.Shared/Toilet/ToiletVisuals.cs b/Content.Shared/Toilet/ToiletVisuals.cs deleted file mode 100644 index c5992bc0be..0000000000 --- a/Content.Shared/Toilet/ToiletVisuals.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared.Toilet; - -[Serializable, NetSerializable] -public enum ToiletVisuals -{ - LidOpen, - SeatUp -} diff --git a/Resources/Audio/Effects/Fluids/attributions.yml b/Resources/Audio/Effects/Fluids/attributions.yml index 4e28c99252..aebe3e3c3f 100644 --- a/Resources/Audio/Effects/Fluids/attributions.yml +++ b/Resources/Audio/Effects/Fluids/attributions.yml @@ -12,3 +12,13 @@ license: "CC0-1.0" copyright: "Created by brittmosel" source: "https://freesound.org/people/brittmosel/sounds/529300/" + +- files: ["splash.ogg"] + license: "CC0-1.0" + copyright: "Created by deadrobotmusic" + source: "https://freesound.org/people/deadrobotmusic/sounds/609953/" + +- files: ["flush.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Created by the_toilet_guy" + source: "https://freesound.org/people/the_toilet_guy/sounds/98770/" diff --git a/Resources/Audio/Effects/Fluids/flush.ogg b/Resources/Audio/Effects/Fluids/flush.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f4ef31c2ab17c405f90f919d5d2449b4eb6ffc7b GIT binary patch literal 132202 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

Rm;+rLYzNcc+E1pe0C9bit2 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 pT8}>{|7@%mm&ZF literal 0 HcmV?d00001 diff --git a/Resources/Audio/Weapons/glug.ogg b/Resources/Audio/Weapons/glug.ogg new file mode 100644 index 0000000000000000000000000000000000000000..424bedd35169c7adffd61011c23b4b375429d92f GIT binary patch literal 27517 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 P>2DsC+9J2}@%aA-FPz9A literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl index d41933b374..d0dfed2b5d 100644 --- a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl +++ b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl @@ -5,6 +5,7 @@ comp-secret-stash-action-hide-success = You hide { THE($item) } in { $this } comp-secret-stash-action-hide-container-not-empty = There's already something in here?! comp-secret-stash-action-hide-item-too-big = { THE($item) } is too big to fit in {$stash}! comp-secret-stash-action-get-item-found-something = There was something inside {$stash}! +comp-secret-stash-on-examine-found-hidden-item = There is something hidden inside. secret-stash-part-plant = the plant secret-stash-part-toilet = the toilet cistern diff --git a/Resources/Locale/en-US/toilet/toilet-component.ftl b/Resources/Locale/en-US/toilet/toilet-component.ftl index 7807759e42..1129f61b4d 100644 --- a/Resources/Locale/en-US/toilet/toilet-component.ftl +++ b/Resources/Locale/en-US/toilet/toilet-component.ftl @@ -7,3 +7,5 @@ toilet-component-suicide-message-others = {CAPITALIZE(THE($victim))} bashes them toilet-component-suicide-message = You bash yourself with {THE($owner)}! toilet-seat-close = Close Seat toilet-seat-open = Open Seat + +plunger-unblock = You unblock the {THE($target)}! diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index db08481dc5..cad2d9a924 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -622,6 +622,15 @@ damage: types: Blunt: 3 + - type: Plunger + +- type: weightedRandomEntity + id: PlungerLoot + weights: + RandomSpawner100: 56 + SpacemenFigureSpawner: 28 + SpawnMobCockroach: 5 + MaintenanceToolSpawner: 5 - type: entity parent: BaseItem diff --git a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml index a6f14b383c..f02b126248 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml @@ -2,48 +2,100 @@ name: toilet id: ToiletEmpty suffix: Empty - parent: SeatBase + parent: [ DisposalUnitBase, SeatBase ] description: The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean. components: - - type: MeleeSound - soundGroups: - Brute: - path: - "/Audio/Weapons/slash.ogg" - - type: Anchorable - type: Sprite sprite: Structures/Furniture/toilet.rsi - state: closed_toilet_seat_up + layers: + - state: condisposal + map: [ "enum.DisposalUnitVisualLayers.Unanchored" ] + - state: disposal + map: [ "enum.DisposalUnitVisualLayers.Base" ] + - state: disposal-flush + map: [ "enum.DisposalUnitVisualLayers.OverlayFlush" ] + - state: dispover-charge + map: [ "enum.DisposalUnitVisualLayers.OverlayCharging" ] + - state: dispover-ready + map: [ "enum.DisposalUnitVisualLayers.OverlayReady" ] + - state: dispover-full + map: [ "enum.DisposalUnitVisualLayers.OverlayFull" ] + - state: dispover-handle + map: [ "enum.DisposalUnitVisualLayers.OverlayEngaged" ] + - map: [ "DoorVisualState.DoorOpen" ] + - map: [ "SeatVisualState.SeatUp" ] + - type: Rotatable + - type: Transform + noRot: false + - type: Strap + whitelist: + components: + - HumanoidAppearance + - type: DisposalUnit + autoEngageEnabled: false + noUI: true + blacklist: + components: + - HumanoidAppearance + - Plunger + - SolutionTransfer + whitelist: + components: + - Item + soundFlush: /Audio/Effects/Fluids/flush.ogg + soundInsert: /Audio/Effects/Fluids/splash.ogg - type: Toilet - - type: SecretStash - secretPartName: secret-stash-part-toilet - type: ContainerContainer containers: stash: !type:ContainerSlot {} - - type: SolutionContainerManager - solutions: - drainBuffer: - maxVol: 500 - toilet: - maxVol: 250 - - type: Transform - anchored: true + disposals: !type:Container - type: Physics bodyType: Static - type: Construction graph: Toilet node: toilet + - type: PlungerUse - type: Appearance + - type: SecretStash + secretPartName: secret-stash-part-toilet + examineStash: toilet-component-on-examine-found-hidden-item + openableStash: true - type: Drain autoDrain: false - - type: DumpableSolution - solution: drainBuffer - - type: SolutionContainerVisuals - maxFillLevels: 1 - fillBaseName: fill- - solutionName: drainBuffer - type: StaticPrice price: 25 + - type: UserInterface + interfaces: + - key: enum.DisposalUnitUiKey.Key + type: DisposalUnitBoundUserInterface + - type: RatKingRummageable + - type: SolutionContainerManager + solutions: + drainBuffer: + maxVol: 100 + tank: + maxVol: 500 + - type: SolutionRegeneration + solution: tank + generated: + reagents: + - ReagentId: Water + Quantity: 1 + - type: DrainableSolution + solution: tank + - type: ReagentTank + - type: DumpableSolution + solution: drainBuffer + - type: GenericVisualizer + visuals: + enum.ToiletVisuals.SeatVisualState: + SeatVisualState.SeatUp: + SeatUp: { state: disposal-up } + SeatDown: { state: disposal-down } + enum.StashVisuals.DoorVisualState: + DoorVisualState.DoorOpen: + DoorOpen: { state: disposal-open } + DoorClosed: { state: disposal-closed } - type: entity id: ToiletDirtyWater diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index 1193182d09..25047bb575 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -10,7 +10,6 @@ components: - type: Sprite sprite: Structures/Piping/disposal.rsi - snapCardinals: true layers: - state: condisposal map: [ "enum.DisposalUnitVisualLayers.Unanchored" ] @@ -19,7 +18,7 @@ - state: disposal-charging map: [ "enum.DisposalUnitVisualLayers.BaseCharging" ] - state: disposal-flush - map: [ "enum.DisposalUnitVisualLayers.BaseFlush" ] + map: [ "enum.DisposalUnitVisualLayers.OverlayFlush" ] - state: dispover-charge map: [ "enum.DisposalUnitVisualLayers.OverlayCharging" ] - state: dispover-ready @@ -30,17 +29,6 @@ map: [ "enum.DisposalUnitVisualLayers.OverlayEngaged" ] - type: Physics bodyType: Static - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeAabb - bounds: "-0.25,-0.4,0.25,0.4" - density: 75 - mask: - - MachineMask - layer: - - MachineLayer - type: Destructible thresholds: - trigger: @@ -82,6 +70,9 @@ parent: DisposalUnitBase name: disposal unit components: + - type: Sprite + sprite: Structures/Piping/disposal.rsi + snapCardinals: true - type: Construction graph: DisposalMachine node: disposal_unit @@ -100,6 +91,7 @@ components: - type: Sprite sprite: Structures/Piping/disposal.rsi + snapCardinals: true layers: - state: conmailing map: [ "enum.DisposalUnitVisualLayers.Unanchored" ] @@ -108,7 +100,7 @@ - state: mailing-charging map: [ "enum.DisposalUnitVisualLayers.BaseCharging" ] - state: mailing-flush - map: [ "enum.DisposalUnitVisualLayers.BaseFlush" ] + map: [ "enum.DisposalUnitVisualLayers.OverlayFlush" ] - state: dispover-charge map: [ "enum.DisposalUnitVisualLayers.OverlayCharging" ] - state: dispover-ready diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/furniture/toilet.yml b/Resources/Prototypes/Recipes/Construction/Graphs/furniture/toilet.yml index 7daf9ca22d..d9a4cd02fb 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/furniture/toilet.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/furniture/toilet.yml @@ -24,7 +24,6 @@ conditions: - !type:EntityAnchored anchored: false - - !type:ToiletLidClosed {} steps: - tool: Welding doAfter: 2 diff --git a/Resources/Prototypes/Recipes/Construction/furniture.yml b/Resources/Prototypes/Recipes/Construction/furniture.yml index 2597877187..a5cf53107d 100644 --- a/Resources/Prototypes/Recipes/Construction/furniture.yml +++ b/Resources/Prototypes/Recipes/Construction/furniture.yml @@ -606,7 +606,7 @@ description: A human excrement flushing apparatus. icon: sprite: Structures/Furniture/toilet.rsi - state: closed_toilet_seat_up + state: disposal objectType: Structure placementMode: SnapgridCenter canBuildInImpassable: false diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/closed_toilet_seat_down.png b/Resources/Textures/Structures/Furniture/toilet.rsi/closed_toilet_seat_down.png deleted file mode 100644 index 738c92a6d361f4ddb1e3fe611aafc897329d39b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1445 zcmV;W1zP%vP)f? z2|){?XcKPQ1gV>F`N299XSnlxZ{B_X?V2W0+t-n@73x#!)vbMO5P(J?<7j=BC( z9e@x9T)fu1*L?DKboR`-a9CoOP*TF9ZHp-cuy8RzEaqJJz<&t0H?-l^3>0suNZoMCCx0n!KHT1^5lIXRgi zDgmGaBp{=sqqPTs=>tG>Iz@c$?CeY!(S7G;AwB>s^l>_rdFm~I#~>CTAL)(hZ#%$% z@u|i5Qr@uul$Q*20TIeR6#%e4f*(HrVQuqRU0qG$008vk=l5J$003<3+T;jffeHXF zE}fvw0&8n)QAc6~Ji;DI$>7y`fn z=H&z#g1e$l*Z;NQ_>l(y@yEjKqu8)i))t4D*ZKw@t6~uq0Gc>}mWOb8#sLxl(wmN$ z?|8XAcA5$q09n=6o zh|`ywA~3<`co+x3^1nW9s|C(Qrmd=k_k07ylGV6vb{<*^oX z5~kDR_j2+O!2l2h+ZNDxUG1K?jUxa|z;FxzKyv250H{QXO76AA1aiIu*#ea)P|3Ye zetqSIcZ&9|yFpI4tS#V`qJRN#z}jg;wqn%)pjAF}TpfT=#AOW{l)DF8~rLTj4=Y284MO4Te-Yt8vqoKDPqERI{!9l{cW$ip5;@06DR?DjRBT zjMrAFVOZIP$CrXIYa?n|RU5l1s|Yac1pc z-|Mhhd?13R#W{JA#Zce&W3kpWk_1J5wiQmS`GBknj2ROg=5GTS?Gb>ic*RvUawbGf z5X@!-Mv3Lr<9wFYUY8BrP+mU8By+P$W|s0o~#w_&~u-!~R4jTYTcblALZ2@gD^2CMzzac!RN1%)c z@VWFg{RZgrAFhIFJu9sBxV1X2&VX9AtX8kTnW^1a0OLSk00000NkvXXu0mjfobIH7 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/closed_toilet_seat_up.png b/Resources/Textures/Structures/Furniture/toilet.rsi/closed_toilet_seat_up.png deleted file mode 100644 index 204c5ff89df0d7ad1e4bd2abf6df7f9cd4c68576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1553 zcmV+s2JZQZP)Px)%Sl8*RCr$PTTMt+Q4qdD>sA%CX(Mfml4%lFp#%?yBI_=Cd% z#a0(rTjc2-=q-?@!a31bSd)<$0327hgDkG7L>VpfCj&qsbW$QiR89bp12FNTvaTqk z-ytcpBts?ubROV~$55PMGFKiT0g$-{L#{6*X9wWM^;;#iEr}2Sdh+y9mP80y=;G>P z3;Q7lH%83;wNVCo2TYl$i2<11nvbXE;ugmS5GLm)OYr5om$c{i_?#G?Fe#6@%>Y1% z!)Fc@U_z)S2+MzezhxG{0sz{O3DWv zc(yn`Id2jGu)^@faM@pjKxZ^JIhWn~5&&4)7y7J@uQC9nB04-hXVGq_ z`>&ZYz)DddI(v-`e9LaPOR-T)pbmUH0MvnMlg8{Yph?!ML)H!hQcy)KM*GwaN6H+# zXQ7E-<6&ZH`K<9(|e-tA~aLYh(At(sUC5 zU|C$=CZRzI0Be?Avf@hsbiEzbmL>uqx6HC;2t9d%T>|j%!DDBIheb%qfF?LW$pBqQ zl}xyO=VsvrfJ$R9G$cq(0YJ)3U8G;5UO@mzAq@bJ!a1Pj2r7q{*JJ1_b98*tXz0Tw zoCJWRiY!Hg0s4**5Z)^=q|(~S!L!5j%fpgT1-o1VEH#I&zrgb&eqtHmkqYB``5=#| zixE)XH6Q0EAW#f)`0f<(_ztJsCIF~3(e#zXbKefrl!wFSZ8cZOW{AV5D+EebqfH5b z%mYF!@Et|#L35o6x_k!nmDpvikgT-+P97jLLD#vP#d&d1d@^;m^h<5S)Rq9m4r;a2 zWBf_%5ALIoDX>kr-=V54UiSP!gHj)HI{_i?Can=JuCos$jI4MF-yM83a zG@i0(*(89zQzLIdM1!C&Bm51&4RZaK$#st?bYvE+2)VAO(3AeH0O(~CyD$+1fK?(S zAKKf>t!9-|+1UDyz1P2Cl(*LCt8issR)1V$nwNm9GwIfD0HmXK$ysR$SPvulJA%Cm zfifS!|N6?Vk2$`(3+AeDjFL@#-vOYhmdhpgf6sv5>dmib5PItT00000NkvXXu0mjf D0+_@x diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/condisposal.png b/Resources/Textures/Structures/Furniture/toilet.rsi/condisposal.png new file mode 100644 index 0000000000000000000000000000000000000000..c60cabe80b18aa8a578e2225633f58de1b405a5b GIT binary patch literal 31043 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-charging.png b/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-charging.png new file mode 100644 index 0000000000000000000000000000000000000000..cb9ad3a9c75d02d9915666999f56fa89dbcd3d24 GIT binary patch literal 31052 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-down.png b/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-down.png new file mode 100644 index 0000000000000000000000000000000000000000..97712ddc65380c3b71547a3b31bc8e6263080778 GIT binary patch literal 29554 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-open.png b/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-open.png new file mode 100644 index 0000000000000000000000000000000000000000..f48f67bf9a6467f84373d16fdea11b6b28e5d682 GIT binary patch literal 28502 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 hBqqeRluU(tV51%s>3@{|3?0LSz5{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-up.png b/Resources/Textures/Structures/Furniture/toilet.rsi/disposal-up.png new file mode 100644 index 0000000000000000000000000000000000000000..3b37aba4729a861a0a8b57de28bad057864f07b8 GIT binary patch literal 29203 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/disposal.png b/Resources/Textures/Structures/Furniture/toilet.rsi/disposal.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2db2f9d8e9006ef560ad3c6962142e9de840dd GIT binary patch literal 31095 zcmeHQ349bqx^E5(HF(iQ`lNi(hfv}Lsk?QX1Fpy+&Oh^FbMgfK8 zlp6#D1O;Kmh2>V4Qz5X(sR#l=j`cx6K<@X=l{7JNaL9Z6d^`L?Qt7Vxs`_7F{p&lb zGh;h;Qnk18KP}bCU*UVRILpYtPG3aqIwil;_KP`dmjBTsk`sAquLOE68EfE0E*7Qy~br zz*a#s=N)%5mrl8-IvhZ=#N=S)u;(P%?dg$jb?xk(3sX#tOFd1ky4x}}dwy=~aC6xv zrHWH34O@`|M=}({k`xbLNwi=A-KMFRDB40%1|ja6Wn?7SHJd)rD}y5`hNQV9TC_0m z#izKN8!DA;4r@?D4&+OKv6?}Irdo7+P6l#B+A>fYHfLp~g_}z+8fum(r6tCmZqI=c z;Yc>zT;An!TUqUDo^w@1WvVzArXbfaH84T0bsvq=9=z(kk#38maii(m2 zCQkAxfaj>#C@GF(_$b-RL<`nvK8|K6inX#b1u}dJkVQ#?20Y71j8)*HL|L}-bQ~QU zE7P%YVw_I_u>xz2=D0YX;iF??qXe0z*=QQNk7i}T8W-bJfSbBCyK2)cr87qX44S}W zQsQKeq-l&vBe(Nuf0oRvN2Nte`SH?XPG? zP*^9-6eWvptQ8fgLlQ+w&@n6XoZo;jA`)~OMy*P!XVkPVlRC%4T48BL7DRtXjWE(x zRU#Emc43X7#B-#oDS}FK8sOothR`a57@4A-%7@&5RF?8F90v80X_At8$}L*LfDh6o zQC2htDXQWpAS^9NvQBZNsOp|+M65=Uy2vmZL#ez%Y5s~9S&`CZnZ$ysd!|tZ4OclC zON_1w4CD8x5zR1&7Dx)#q!(*goU$x26p$Fp%Kk1H4j!AAXuuk%$Sqn?Xo{2-fnsSE zFu}elx_l1d5Tj8#!lcYG*aL{pG9;)v0=Y2Bl)t0qVOdK8Ly=hIT+FADQYB%{BTd6d z0i%GHB{v|Fq;MpXLEB-1HDD+|HH6m$osn4{l#li9i_OY(YfC+IxwHANdn98oairy2oi@?q|&4gowzkbK@1OD z4T}Xq27Xce)euo*VGjV9v8Z}>83n`QR7FWd45K5K_IDa(pbE?(-pSV<(NZPxwXCTa zQvw4Vf?f1fd3r5ljnx&93NU#0Mhxp-5jB8`VP&27m!1&Evy_UQyNpPCmJDp` zDpM-U>HcnDV9HP&VkJ^yc-A9YKr$#F1(=Iirg(pqPvK!hN3g8`6}hk$K*J>pOdN)m z7){iG{rp_$u(k5MB&gsm5a5?3ZNt4 z;Y$?qa7bk>bX5lmRbtLd?tjdUr-=cX2>}c3_VSpaKuC!6ZS`-Az zX)~b`)4g(hbRC2Fk9pX(IK|^8Rh9>)V?~!Va09^o^z1S~gftkzvchXT(jkQ5lT_1e z5V&*4EL=qzd~if@FjQR^NKOH@P*g0F3a_`Po0+kXFDJm3raz>t6Ev1vPL6C5=0WL zT1;}f09?m_<$)0o?!N|McKY`}zE08Lk3hsjM!*uB#(_Zxb_*%891YwAeLjTUUv{M6 z#9|PvK?FjB$49hEB2fT6(0GiTV!`n8IZ+UT4bvc8MFU_0Cn%)ALrjBVI0?u=LL@^2 zqF`{bj1J*QA2C3$FcxYvK!7A{JD3zW4kBKpAnaEib;_|pei5Y`>Ud|J zl66jDC8vW28?L|rtWKMX1o5n>DvT;1aPZt+lq2R>UB%m+nS_B4hWuTbgswRI!K?osxyZesXDVq7#8ybS4)Rg(lXp#!S?Iv zd^iYx)x6?9^84b<-^xC@MY(EKEF{;iJMvKuj!J_J&BG+d+)^KGR#v>PCHE*3Vb2_Z zbAHcMz=R{nS7XRK={fccQ%SnZJXasOXZyLUNMQHEG%zfWk^>3`?Sru zz}>y8eNko_)*{W`;dn3nktPk|^bjuvQ(2(FdO6y+TF?dlG>rbg01U4xh zSd=ab_87#T#rMce3ck7^OAs)Flp#3n6u9rQ<~-6sLrh*(A>k}Mf+OKP^(X<2TDX8s zIv`+^mLO2^nm6nj|G73PrXYzbG78BGia=@<$3T2gph;1HB#BNzN`MP2%2I>WX>qv2 z%KuKAl&6p+gEIj;pAI=34T8D~1k*`4{wX02DVWEQ8S%rBfODm={qad~0G$Cc4TNMW zlS%(L_F2Ftb^9R|?;QrC(wk{{xIA89QI?YF{{be2#5^1%P~qe?rbWnZa*z!dA!`MZ zZOB(bK9@)SdG~H66`XJ4u(XBe0^WUzMOI>LdAF$F?cM)zVuqE+q<@@eeq=|HQZyE+ zBBbHr%mEzJaeDWHqC@h6!f;%X6?w@&n>4T}OUc)p?y4;B{^1T9__zJRiM0pbY5ac> zCv|7HA3SH^J-hJha|zx<81Ae~oHGOM^g_Uc^>GXVLOAf+tfd@ta@6fs0Lx>^<{t5<00-|$`MoAn|B_prEnWggM>TZDz?D+5;*JN%K1ma zxt3pDGe~pY>)|{nlAh-}2O`2-pA==Lo!>o8jkn7-P5$ks#@l6^mbUDcX>&wEcF8rE zGM5dloUcB+-_Y#}ulwUjf#+G^+On6+w&-jt!0A1#Hh4of*Ll)KfWwZiHf3*=+c3GJ zhK3uShVEr!cro8KG48AI+CTio0dvWp95Bq8f%Yo9So%bjE!iM1(1`&I-^Bo2zA-Y? z2*70k!*?+Nmv4*=H3D!M!0=rRz~vhwLyZ7j1~7aV1917q$WS8ymjMjl#Q809?K?GSmpb zWdOr>F#wluj0`mba2dexT@1kG8zV!F09*zzd=~?7`NqglBLJ5H4By27T)r_f)Cj<3 z0K<1N0GDr!3^f998Nl#e48Y|ZBSVbh}30G9y_-^Bo2zA-Y?2*70k z!*?+Nmv4*=H3D!M!0=rRz~vhwLyZ7j1~7aVe-o~t(hu>&nefSd`S1~aU!MGV9eli> zNsaH4KoEmoAc$cj3F78`_<5cn@+gA1kV+7i83fVTKDp1fIQZniY8|XmNd?FLl`{0T zXAU>L-?P!Qsx521{oFs2njF%fZl}a1e%5()-ob709o7fE5It*6hx0WrQsbvu6E?P* z)xh-nsI88wOTt!dN8{IYm=Y44vf;HaKKo~8sP+m`#g=le>RYF_AIYW~ELt))bLfm4 z>)8AsKfScD!K6<{IX2#o+;Ztg?uq7?HeH(j!@y=2XA0YuRY%ij1^2Vt(+-6a!tC+w z-n_+)xG}QUU1|2-FZ54~2aPn{NUWEfb~=UWzOW!BCMGm>#`Wt1-mG%uc;^upm)?$5 zBaTN9!>&{-T3CE+^7PIph9=|}{q*9$QpblbU%tG>z&RaX95LMVti5dk@opxu>U`+- z+1st^+{SIQx8;qz*Jt3m$&vSe__WZ`ZS%r~BkbvYKiEBckKSSP^5t!$xgC#mI+B=} z_<5hrZ_M2PMEjp+vh-tf=FFK`G+2<6St4%Hq&9tzqOl*(oJ*eCwPA4M_nJ0J>elV^ z{pa4#Rq8I9S|dYvX3NkMy^r4L)$2G+%Hwr*Ub%C6cRL=BSbxlN@AS|&=j{7#`p};l zg37y=cdX~u88csy?|pQk-?o8O?ti?*+^75NJGwVp*|VVYo??p@U!J@&+hkc4)NsO|d$&pb`aKJVB;=b8c?P@jo%lgQtsk!lRq`>J#EB6eZiB( zL7xshaJE~}l(Z`y?X%Xg&&ipq8*EitkLlkrn)u~Tr1W&t%LU;z_q^SiY8+i-_Hc*L z^nAL7Ir2nrE3xgU7~9I5z0kmVFJsxtzQLzm}a? zWl~IY;=Qi5Ke_(SifOZ3>YEzBET+yq(3O~1b=BSuYw8sIv}f(a)diix+Au?hT-wAh zI%4iUv{#qE3|{u9uTR|nWw4E48eJ;BmR30K>5wCiMopVGtyyE_#yxu1Uim{OYo8u1 z=-TnA^Syg-4*p^8%mwO(XI?q= z_^@wIS^CnACKG%2j$F~E^}(Qqy@pMFf6Kbtse7ti-gf-)b*I)xeOtgSjZ*bS z*DrnhQUBGavu6$spVngA=`6?1qcdiXZg0B0;_ijv?T59w-}5?K5OzEEXub9QYJV8s zbL_5N(_YeJ`dwJth**$5WlH^p+gGe3+b2wq4b9*8k+eLo>EgddBokAozF2kA=7`oo zHAbv=j19V7ZQ7y4TTd>Y7u$hQ^0bNlR(E-F-+9Nv1q+4;H8uzD@3kPOd-2v+lJBkE z()O9PVIjnlB}?(`yRhb-PJLrY^I5ZJ+Y0A3s5`vF3RAQG6E6gHOZjTZ?g>*~>@-e$ z?1RD2E?u&88o71ql#!E^MpwNGPpHwY+&6VhF zMTgkgd-`T(ZePL`XRKK@-h6U??EP!^x7TPNzpM4G9zo_GPJUkP+=UB`cxzZ_=)TDX zTv6dIhk5E-XJcmUJl1B@%QsK_7!o`Bul1VNJNEd_{oj4}>>C4broMNh`WK8$6y)X( zU)K6~dsw9>L8qjGK3ub>-mXHtbM)KG=l0I+*68w)Fl)bl6HKB4=6$^DYIw7|OY89b%WL|KvDT-X!hGdbi@r2q<2&N= z6FrWON0!%uSO1{(#eEB6xG|G^D8ZK_=FG0Y3qIYaI`Pe& z4o|#uaP`wq5(iG4C~Wt}FHa8Xk+ObVa!~cZ-w92Mob<}-tf%^Gt%JMtw|>>?>*}NK z9Y6f`Gh$}d#B0%sy@oZ2p0@Wc45M$hqyO1I$G$M;O7kH{X77tkEu6=kIg{S?v!{rj zn{Fk3Jo(vb?UTrQ$?Y%P$d4PbduhzqKrh+Ah4-({zuVx;FW1tH<=rdYU(LREr|qhg zuL$CkjaN?3=tI{n8ohE=TBqdKzW=CuyQ&0m0^Ehw-h4oV*Hc$FIB6bw_n9GAFZN-` z6&XqGl50Cx)w!#ume!r0a>p`yL{{3y<}Ihx>itP$qE&Ftnx69yuW8tFadD4}#QT4J zGk=%nom7cwf*gSV>U+j8g*zz(6Dp0st2P*(F@*xJ!#y}=jxj-ZcBM-P=q|1|Ec;x zu1(FcT$>ilHv$2!S@XAuLz_p9&%V_H*md`ZKh-yl4@%h_Nwl1|x%!0DiV(X~AAT*q j(@QZIn-05QhY0CtZ+o@HYlEF1jocx&qjhC;>WKdaH}1eG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/dispover-charge.png b/Resources/Textures/Structures/Furniture/toilet.rsi/dispover-charge.png new file mode 100644 index 0000000000000000000000000000000000000000..23ecafa9d8245cbbc5ce3a248e644b7c0c775f4f GIT binary patch literal 28316 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 VznP1#7v1jdy)pQ+oiG2^e*?F$;(`DG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/dispover-full.png b/Resources/Textures/Structures/Furniture/toilet.rsi/dispover-full.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb04dfb268413751fab3bdd4a36b96ba49ba594 GIT binary patch literal 17416 zcmeI4KWyAo7{DD`p*B?|BqTtctgDcyz~}$=*}A(n&9x*F7ozm4rY!W?e!f__v#++3 zyF?&WFtNgd5Cbzpj4TXH%rGz@1~vu|QWqAc^8D}FcezVmNC6?esL6eO{{Hy=zVE&F z*~5LXx$*ktujOV8_Dm5XVKr!y@x-ekBg(V`w_!jdOrDGVm|rwC5BnO z;`O%U?d}_<9SrNh2`pHj3`a0$J*QQ>r*?(zXcg{w zYlk7cbGXs74|i?Dsa&Q5RKRSM=9dNf1?Dka=0)B-vC1Q<2#Gr`BFZQZsa1bE|VZ4~PEO zs_n$_$mIF)cw8UL^&sr?qG1@kAn}sKAq_4%@MAFH{OD@tr0~;$ksW%Y*b96%@e8bA zFK*RpNg(`_&ucisf&3_EhbZzBFyh6!z|S*sY-}^y3kT_~IW`Xma0vZ4LU!U@yU|V% z2hmQjASAxLFfhtVw~J%Xz2D(*Zs;h!wT}?wNatEcy@L_tw_p_Pg*LpkkEU{U-t41z z3zpd-aD~+8I*L7afuH2cLI`l;Eig;2WM*kiWvOl=Xy$4NK^%m=AQ-f>a@{O)!LF{R z<;lKs&-0yN99?VjvnFNXl-^(m#IP+1lFSJz`qvXR6VXVEQJOVJYtR8PILSd(t>VJ5O*aUKAZ~j@(1-lU?>G5!u%d~J z(p(J&L5S`Mw&f;2Z+Na%C$RUDRk7mRFhVJaDycyUO4t2O(4QVHE)2YOw(B^7?Kx%{ zR2H>{;R*_;+pdnlLC68w5jaK>Z3Vp)=^8fb2otaCC{WX@0on-ihy080U? z;AX`(ZC*|~cU?qBuIEo20;nmnB5)1C(Xxp*6v^cpy6rSHSyC0fk(MP2RB?7B(3_!$ z4jM41=p=J-&|Cz=RV=yD;4H;;IZaYT4nWJ{Y`G!pwk6pb(2Edr+#CtD<|QR{FrDGF zr0&3n)1zfcrANXDgb_?OyjHE)@$eavRY_he>BeaSJ2_0+cCw8?R9RD_>d4s1$ySBxxiL|u4OtN<^1XVOh{#(e6W z$h|xHbIii_ne34yyVZ)bd9i}CcFym(ecrp2#n^rH+n%+O&w0e2gw6whIdvROJqsc^J^p`J39zUYKimf01G3LT;EXo61Y9G%?vI zdPRob&hhy5TqS4t;p6EG<&2)bZ|soegmow`jDkd3f<&OWNGM?)iVLG45hyMaN?3>D!YD`tii?C2)}gpC z3KD_hBB6wJC@zeGM4-4xC}ACn3!@+rj>WZHe&Gf5(YIWT(brjQ>@HnHUxmTiYg=80 zIeeL69=*>ne?CENgbhIujg@a=DJBi)_#&Ps3c)9>FeEiugbbHX2w z-)a3=`{JV?`ggv&_#AuV5wrBn`3rwvcy#FnhI#Vj9CP=pbMKnJY<-4eGV8ZCI$z#= G@ZMi6)#3gC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/dispover-handle.png b/Resources/Textures/Structures/Furniture/toilet.rsi/dispover-handle.png new file mode 100644 index 0000000000000000000000000000000000000000..4f40192d5bc52eee3a62b5066f434e89ba6d3dde GIT binary patch literal 17416 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 diff --git a/Resources/Textures/Structures/Furniture/toilet.rsi/open_toilet_seat_up.png b/Resources/Textures/Structures/Furniture/toilet.rsi/open_toilet_seat_up.png deleted file mode 100644 index 77995657cf61bffee7e5180374375219108ba40f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1535 zcmVMGzPWMTiAqt3W|WXd{w_xCsn|gf=2+h?~GbP-v9|B@zWf zLeN4e+=QDpLAq)k80W$H+<%)lbLaWq|GxSI@$J8PGxwf*=FXja=eH%1?Z)lvN4{6y zzIxXdIb>72M+pn%H(tK+3OsPO^(%m7gNt*tFD0DXOZNtHk_0U#|806IH6ognP* z?ei;IgUeWVVi7w7|;4FHrM z9UZO7uYJ+f)Kn4+LKFba^Z`&F4%X#>@g0q`yu2I*LKFbaV!)+qLq{`{Lz$MBl!lBj zl$8l)0Q#@qO3|O0UrSb(9ywjX@Yv%7fh9=1I(4xt zRT>Ing5O{E>OjDAKEne%-#yqhjURHXO$Pu@@cg;1lmS^mkctSx`2q=0%sLEdh56^^=F)DQTN*-t7qc6fC`tjK6wd-c zSvFV*4W1hRVuXkRAk-JnW9H5UfL5MD0faIDSXfx7+y6r#U@M%Mm@w&P>ZBO}09;P+ zp9cWQV+r_n0iFh9Xy~)3T>l}<%jeel%?u#5;c!4P?UCVq5vIa9(N|c5kq`hJSNDS~ zu3d>TTIP=ifI{fR2rW;R6txQ=24LVtWnH_FeukjT5)7FD&~boNR$2v0bDJzG4v+xI zSc6+`)|Om20Au$aq|~+qLI7y#`O`uIAw;3;+v|1gha5Z@G4|I+8SEW2MWQAKV0MP1 zmYiTrEN*dZ0AY4zHU(dO9GUKudrI4@0tN13$WMw0Emght;(|>S?KaX+@39tPtF?!0IV=FJ(9k!L7+2Q znO!N|`Vs(GIcw{)I=hFpPRR3SlvcU(rmFw|)8g_r2@OgBn6pf&?W?*X z-;Y*B03dfrw>DUR{>d|EhKET=$$%<2LCFA}NR>>Oe0V>}1b|9oFmxnHRRKWCOkJd3 zqh4MBn03(ruoTV#EhVTTyu2PmUzwxhlSackNSJDW5ClL{MW&*`0DVUY2sa80skBxK zo*kZF7E62?>~sk*)$F_e0?&{A6UzWiDva-CLmW{SBcQx%KF&`-pcv%ftrE=~mhVu& zF#$lOiDp(xyy)9uT5vdQ-d1yM+1%pr>DmG%tI;O~K*j++7G#y8^`J%71YJIZ@k;2j zmQPk%zZM5zB1VF)x|_v$aZr3Rbhf+~+lQeo0SFapwb#f0sbgIvs6mkQ@=YQsSGMw0 zMuXs53R#M?uS}oUod)HZfL7&TK5q)Eqc!T7%wsPOIzG9i?Chs&2Y(%hb@4%7K#&&a z;AIv=LrVm*%9zCEq$NPE!ih5<;H$teCZKTGa+>ucDTeWsMaw1u%&Hn?CPXv{`ZB^v z_-&Buw@j{kM81-lHzVY_ot)id*#JmK?UFOs60jB{`8$F}ZGkc#z~B1HZWeR0?klnx&M0x`~ldPqtxPMGKv5I002ovPDHLkV1jyetCs)( From ce71cde429c7fad648d3b8c164f12b1e9649153c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 03:22:24 +0000 Subject: [PATCH 030/206] 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 dbfd5c37db..f36805bd1d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Nairodian - changes: - - message: All vent critter events now have a small delay and alert message before - they spawn. - type: Add - id: 5765 - time: '2024-01-22T01:33:38.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24383 - author: Flareguy changes: - message: The Research Director's hardsuit now uses its older sprites. @@ -3794,3 +3786,10 @@ id: 6264 time: '2024-03-31T03:00:45.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26487 +- author: brainfood1183 + changes: + - message: Toilets can now be connected to the disposal system. + type: Add + id: 6265 + time: '2024-03-31T03:21:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/22133 From de62ec204b04809175945a2ccfd4dbce6dafd8eb Mon Sep 17 00:00:00 2001 From: "J. Brown" Date: Sun, 31 Mar 2024 05:09:15 +0100 Subject: [PATCH 031/206] Uplink store interface searchable with a searchbar. (#24287) * Can now search the uplink store interface with a searchbar. * Search text updates no longer send server messages. Persists listings locally. * Formatting fixes and tidying. * Added helper method to get localised name and description (or otherwise, entity name and description) of store listing items. * Update Content.Client/Store/Ui/StoreMenu.xaml * Review change; moved localisation helper functions to their own class. * Prevent thread-unsafe behaviour as-per review. * Remove dummy boxcontainer --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: metalgearsloth --- .../Store/Ui/StoreBoundUserInterface.cs | 40 ++++++++++++++---- Content.Client/Store/Ui/StoreMenu.xaml | 3 +- Content.Client/Store/Ui/StoreMenu.xaml.cs | 25 +++++------ .../Store/Systems/StoreSystem.Ui.cs | 4 +- .../Store/ListingLocalisationHelpers.cs | 42 +++++++++++++++++++ 5 files changed, 91 insertions(+), 23 deletions(-) create mode 100644 Content.Shared/Store/ListingLocalisationHelpers.cs diff --git a/Content.Client/Store/Ui/StoreBoundUserInterface.cs b/Content.Client/Store/Ui/StoreBoundUserInterface.cs index b549918d7c..f87b92bc61 100644 --- a/Content.Client/Store/Ui/StoreBoundUserInterface.cs +++ b/Content.Client/Store/Ui/StoreBoundUserInterface.cs @@ -1,22 +1,27 @@ using Content.Shared.Store; using JetBrains.Annotations; -using Robust.Client.GameObjects; using System.Linq; -using System.Threading; -using Serilog; -using Timer = Robust.Shared.Timing.Timer; +using Robust.Shared.Prototypes; namespace Content.Client.Store.Ui; [UsedImplicitly] public sealed class StoreBoundUserInterface : BoundUserInterface { + private IPrototypeManager _prototypeManager = default!; + [ViewVariables] private StoreMenu? _menu; [ViewVariables] private string _windowName = Loc.GetString("store-ui-default-title"); + [ViewVariables] + private string _search = ""; + + [ViewVariables] + private HashSet _listings = new(); + public StoreBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } @@ -49,6 +54,12 @@ public sealed class StoreBoundUserInterface : BoundUserInterface SendMessage(new StoreRequestUpdateInterfaceMessage()); }; + _menu.SearchTextUpdated += (_, search) => + { + _search = search.Trim().ToLowerInvariant(); + UpdateListingsWithSearchFilter(); + }; + _menu.OnRefundAttempt += (_) => { SendMessage(new StoreRequestRefundMessage()); @@ -64,10 +75,10 @@ public sealed class StoreBoundUserInterface : BoundUserInterface switch (state) { case StoreUpdateState msg: - _menu.UpdateBalance(msg.Balance); - _menu.PopulateStoreCategoryButtons(msg.Listings); + _listings = msg.Listings; - _menu.UpdateListing(msg.Listings.ToList()); + _menu.UpdateBalance(msg.Balance); + UpdateListingsWithSearchFilter(); _menu.SetFooterVisibility(msg.ShowFooter); _menu.UpdateRefund(msg.AllowRefund); break; @@ -89,4 +100,19 @@ public sealed class StoreBoundUserInterface : BoundUserInterface _menu?.Close(); _menu?.Dispose(); } + + private void UpdateListingsWithSearchFilter() + { + if (_menu == null) + return; + + var filteredListings = new HashSet(_listings); + if (!string.IsNullOrEmpty(_search)) + { + filteredListings.RemoveWhere(listingData => !ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listingData, _prototypeManager).Trim().ToLowerInvariant().Contains(_search) && + !ListingLocalisationHelpers.GetLocalisedDescriptionOrEntityDescription(listingData, _prototypeManager).Trim().ToLowerInvariant().Contains(_search)); + } + _menu.PopulateStoreCategoryButtons(filteredListings); + _menu.UpdateListing(filteredListings.ToList()); + } } diff --git a/Content.Client/Store/Ui/StoreMenu.xaml b/Content.Client/Store/Ui/StoreMenu.xaml index 4b38352a44..fc4cbe444f 100644 --- a/Content.Client/Store/Ui/StoreMenu.xaml +++ b/Content.Client/Store/Ui/StoreMenu.xaml @@ -28,7 +28,8 @@ HorizontalAlignment="Right" Text="Refund" /> - + + diff --git a/Content.Client/Store/Ui/StoreMenu.xaml.cs b/Content.Client/Store/Ui/StoreMenu.xaml.cs index 5dc1ab246b..67e5d360a3 100644 --- a/Content.Client/Store/Ui/StoreMenu.xaml.cs +++ b/Content.Client/Store/Ui/StoreMenu.xaml.cs @@ -1,5 +1,4 @@ using System.Linq; -using System.Threading; using Content.Client.Actions; using Content.Client.GameTicking.Managers; using Content.Client.Message; @@ -27,6 +26,7 @@ public sealed partial class StoreMenu : DefaultWindow private StoreWithdrawWindow? _withdrawWindow; + public event EventHandler? SearchTextUpdated; public event Action? OnListingButtonPressed; public event Action? OnCategoryButtonPressed; public event Action? OnWithdrawAttempt; @@ -46,6 +46,7 @@ public sealed partial class StoreMenu : DefaultWindow WithdrawButton.OnButtonDown += OnWithdrawButtonDown; RefreshButton.OnButtonDown += OnRefreshButtonDown; RefundButton.OnButtonDown += OnRefundButtonDown; + SearchBar.OnTextChanged += _ => SearchTextUpdated?.Invoke(this, SearchBar.Text); if (Window != null) Window.Title = name; @@ -59,7 +60,7 @@ public sealed partial class StoreMenu : DefaultWindow (type.Key, type.Value), type => _prototypeManager.Index(type.Key)); var balanceStr = string.Empty; - foreach (var ((type, amount),proto) in currency) + foreach (var ((_, amount), proto) in currency) { balanceStr += Loc.GetString("store-ui-balance-display", ("amount", amount), ("currency", Loc.GetString(proto.DisplayName, ("amount", 1)))); @@ -81,7 +82,6 @@ public sealed partial class StoreMenu : DefaultWindow { var sorted = listings.OrderBy(l => l.Priority).ThenBy(l => l.Cost.Values.Sum()); - // should probably chunk these out instead. to-do if this clogs the internet tubes. // maybe read clients prototypes instead? ClearListings(); @@ -129,8 +129,8 @@ public sealed partial class StoreMenu : DefaultWindow if (!listing.Categories.Contains(CurrentCategory)) return; - var listingName = Loc.GetString(listing.Name); - var listingDesc = Loc.GetString(listing.Description); + var listingName = ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listing, _prototypeManager); + var listingDesc = ListingLocalisationHelpers.GetLocalisedDescriptionOrEntityDescription(listing, _prototypeManager); var listingPrice = listing.Cost; var canBuy = CanBuyListing(Balance, listingPrice); @@ -144,12 +144,6 @@ public sealed partial class StoreMenu : DefaultWindow { if (texture == null) texture = spriteSys.GetPrototypeIcon(listing.ProductEntity).Default; - - var proto = _prototypeManager.Index(listing.ProductEntity); - if (listingName == string.Empty) - listingName = proto.Name; - if (listingDesc == string.Empty) - listingDesc = proto.Description; } else if (listing.ProductAction != null) { @@ -243,13 +237,16 @@ public sealed partial class StoreMenu : DefaultWindow allCategories = allCategories.OrderBy(c => c.Priority).ToList(); + // This will reset the Current Category selection if nothing matches the search. + if (allCategories.All(category => category.ID != CurrentCategory)) + CurrentCategory = string.Empty; + if (CurrentCategory == string.Empty && allCategories.Count > 0) CurrentCategory = allCategories.First().ID; - if (allCategories.Count <= 1) - return; - CategoryListContainer.Children.Clear(); + if (allCategories.Count < 1) + return; foreach (var proto in allCategories) { diff --git a/Content.Server/Store/Systems/StoreSystem.Ui.cs b/Content.Server/Store/Systems/StoreSystem.Ui.cs index 49db980451..e6c4eb0cce 100644 --- a/Content.Server/Store/Systems/StoreSystem.Ui.cs +++ b/Content.Server/Store/Systems/StoreSystem.Ui.cs @@ -15,6 +15,7 @@ using Content.Shared.UserInterface; using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; using Robust.Shared.Player; +using Robust.Shared.Prototypes; namespace Content.Server.Store.Systems; @@ -29,6 +30,7 @@ public sealed partial class StoreSystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly StackSystem _stack = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private void InitializeUi() { @@ -259,7 +261,7 @@ public sealed partial class StoreSystem //log dat shit. _admin.Add(LogType.StorePurchase, LogImpact.Low, - $"{ToPrettyString(buyer):player} purchased listing \"{Loc.GetString(listing.Name)}\" from {ToPrettyString(uid)}"); + $"{ToPrettyString(buyer):player} purchased listing \"{ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listing, _prototypeManager)}\" from {ToPrettyString(uid)}"); listing.PurchaseAmount++; //track how many times something has been purchased _audio.PlayEntity(component.BuySuccessSound, msg.Session, uid); //cha-ching! diff --git a/Content.Shared/Store/ListingLocalisationHelpers.cs b/Content.Shared/Store/ListingLocalisationHelpers.cs new file mode 100644 index 0000000000..3ac75cd801 --- /dev/null +++ b/Content.Shared/Store/ListingLocalisationHelpers.cs @@ -0,0 +1,42 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Store; + +public static class ListingLocalisationHelpers +{ + ///

+ /// ListingData's Name field can be either a localisation string or the actual entity's name. + /// This function gets a localised name from the localisation string if it exists, and if not, it gets the entity's name. + /// If neither a localised string exists, or an associated entity name, it will return the value of the "Name" field. + /// + public static string GetLocalisedNameOrEntityName(ListingData listingData, IPrototypeManager prototypeManager) + { + bool wasLocalised = Loc.TryGetString(listingData.Name, out string? listingName); + + if (!wasLocalised && listingData.ProductEntity != null) + { + var proto = prototypeManager.Index(listingData.ProductEntity); + listingName = proto.Name; + } + + return listingName ?? listingData.Name; + } + + /// + /// ListingData's Description field can be either a localisation string or the actual entity's description. + /// This function gets a localised description from the localisation string if it exists, and if not, it gets the entity's description. + /// If neither a localised string exists, or an associated entity description, it will return the value of the "Description" field. + /// + public static string GetLocalisedDescriptionOrEntityDescription(ListingData listingData, IPrototypeManager prototypeManager) + { + bool wasLocalised = Loc.TryGetString(listingData.Description, out string? listingDesc); + + if (!wasLocalised && listingData.ProductEntity != null) + { + var proto = prototypeManager.Index(listingData.ProductEntity); + listingDesc = proto.Description; + } + + return listingDesc ?? listingData.Description; + } +} From 4d2aa1a70a4226cc65399907484c68fdda9e5e5d Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 04:10:21 +0000 Subject: [PATCH 032/206] 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 f36805bd1d..46d239e83f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Flareguy - changes: - - message: The Research Director's hardsuit now uses its older sprites. - type: Tweak - id: 5766 - time: '2024-01-22T01:52:32.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24377 - author: SonicHDC changes: - message: Added reinforced diagonal! @@ -3793,3 +3786,11 @@ id: 6265 time: '2024-03-31T03:21:18.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/22133 +- author: DrMelon + changes: + - message: Syndicate Uplinks now have a searchbar to help those dirty, rotten antagonists + find appropriate equipment more easily! + type: Tweak + id: 6266 + time: '2024-03-31T04:09:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/24287 From 02273ca0e7a4091bac88e585ecca5253dd0e7fd7 Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Sat, 30 Mar 2024 23:29:47 -0500 Subject: [PATCH 033/206] Improved RCDs (#22799) * Initial radial menu prototyping for the RCD * Radial UI buttons can send messages to the server * Beginning to update RCDSystem * RCD building system in progress * Further updates * Added extra effects, RCDSystem now reads RCD prototype data * Replacing tiles is instant, multiple constructions are allowed, deconstruction is broken * Added extra functionality to RadialContainers plus documentation * Fixed localization of RCD UI strings * Menu opens near cursor, added basic RCD * Avoiding merge conflict * Implemented atomized construction / deconstruction rules * Increased RCD ammo base charges * Moved input context definition to content * Removed obsoleted code * Updates to system * Switch machine and computer frames for electrical cabling * Added construction ghosts * Fixed issue with keybind detection code * Fixed RCD construction ghost mispredications * Code clean up * Updated deconstruction effects * RCDs effects don't rotate * Code clean up * Balancing for ammo counts * Code clean up * Added missing localized strings * More clean up * Made directional window handling more robust * Added documentation to radial menus and made them no longer dependent on Content * Made radial containers more robust * Further robustness to the radial menu * The RCD submenu buttons are only shown when the destination layer has at least one children * Expanded upon deconstructing plus construction balance * Fixed line endings * Updated list of RCD deconstructable entities. Now needs a component to deconstruct instead of a tag * Bug fixes * Revert unnecessary change * Updated RCD strings * Fixed bug * More fixes * Deconstructed tiles/subflooring convert to lattice instead * Fixed failed tests (Linux doesn't like invalid spritespecifer paths) * Fixing merge conflict * Updated airlock assembly * Fixing merge conflict * Fixing merge conflict * More fixing... * Removed erroneous project file change * Fixed string handling issue * Trying to fix merge conflict * Still fixing merge conflicts * Balancing * Hidden RCD construction ghosts when in 'build' mode * Fixing merge conflict * Implemented requested changes (Part 1) * Added more requested changes * Fix for failed test. Removed sussy null suppression * Made requested changes - custom construction ghost system was replaced * Fixing merge conflict * Fixed merge conflict * Fixed bug in RCD construction ghost validation * Fixing merge conflict * Merge conflict fixed * Made required update * Removed lingering RCD deconstruct tag * Fixing merge conflict * Merge conflict fixed * Made requested changes * Bug fixes and balancing * Made string names more consistent * Can no longer stack catwalks --- Content.Client/Input/ContentContexts.cs | 3 + Content.Client/RCD/AlignRCDConstruction.cs | 122 +++ .../RCD/RCDConstructionGhostSystem.cs | 78 ++ Content.Client/RCD/RCDMenu.xaml | 47 ++ Content.Client/RCD/RCDMenu.xaml.cs | 137 ++++ .../RCD/RCDMenuBoundUserInterface.cs | 49 ++ Content.Client/Stylesheets/StyleNano.cs | 47 +- .../UserInterface/Controls/RadialContainer.cs | 105 +++ .../UserInterface/Controls/RadialMenu.cs | 255 +++++++ .../Charges/Systems/SharedChargesSystem.cs | 22 + .../Components/ComputerBoardComponent.cs | 4 +- .../RCD/Components/RCDAmmoComponent.cs | 4 +- Content.Shared/RCD/Components/RCDComponent.cs | 75 +- .../Components/RCDDeconstructibleComponent.cs | 34 + Content.Shared/RCD/RCDEvents.cs | 34 + Content.Shared/RCD/RCDPrototype.cs | 144 ++++ Content.Shared/RCD/Systems/RCDSystem.cs | 708 +++++++++++++----- .../en-US/rcd/components/rcd-component.ftl | 68 +- Resources/Locale/en-US/ui/general.ftl | 3 + .../Catalog/Fills/Crates/engineering.yml | 6 +- .../Entities/Effects/chemistry_effects.yml | 7 +- Resources/Prototypes/Entities/Effects/rcd.yml | 107 ++- .../Entities/Markers/construction_ghost.yml | 2 +- .../Entities/Objects/Tools/tools.yml | 71 +- .../Structures/Doors/Airlocks/airlocks.yml | 44 +- .../Doors/Airlocks/base_assembly.yml | 4 + .../Doors/Airlocks/base_structureairlocks.yml | 54 +- .../Structures/Doors/Airlocks/external.yml | 2 +- .../Structures/Doors/Airlocks/shuttle.yml | 2 +- .../Structures/Doors/Firelocks/firelock.yml | 4 + .../Structures/Doors/Firelocks/frame.yml | 4 + .../Doors/MaterialDoors/material_doors.yml | 4 + .../Doors/SecretDoor/secret_door.yml | 8 + .../Structures/Doors/Windoors/assembly.yml | 4 + .../Doors/Windoors/base_structurewindoors.yml | 6 +- .../Structures/Lighting/base_lighting.yml | 6 +- .../Structures/Power/cable_terminal.yml | 4 + .../Entities/Structures/Power/cables.yml | 4 + .../Entities/Structures/Walls/fence_metal.yml | 7 +- .../Entities/Structures/Walls/fence_wood.yml | 5 +- .../Entities/Structures/Walls/grille.yml | 14 +- .../Entities/Structures/Walls/railing.yml | 18 +- .../Entities/Structures/Walls/walls.yml | 58 +- .../Entities/Structures/Windows/mining.yml | 2 +- .../Entities/Structures/Windows/plasma.yml | 4 +- .../Structures/Windows/reinforced.yml | 8 + .../Entities/Structures/Windows/rplasma.yml | 4 +- .../Entities/Structures/Windows/ruranium.yml | 2 +- .../Entities/Structures/Windows/shuttle.yml | 2 +- .../Entities/Structures/Windows/uranium.yml | 2 +- .../Entities/Structures/Windows/window.yml | 25 +- .../Entities/Structures/catwalk.yml | 4 + Resources/Prototypes/RCD/rcd.yml | 294 ++++++++ Resources/Prototypes/tags.yml | 3 - .../Textures/Effects/rcd.rsi/construct.png | Bin 3612 -> 0 bytes .../Textures/Effects/rcd.rsi/construct0.png | Bin 0 -> 1095 bytes .../Textures/Effects/rcd.rsi/construct1.png | Bin 0 -> 3663 bytes .../Textures/Effects/rcd.rsi/construct2.png | Bin 0 -> 3663 bytes .../Textures/Effects/rcd.rsi/construct3.png | Bin 0 -> 3663 bytes .../Textures/Effects/rcd.rsi/construct4.png | Bin 0 -> 6200 bytes .../Textures/Effects/rcd.rsi/deconstruct2.png | Bin 0 -> 4964 bytes .../Textures/Effects/rcd.rsi/deconstruct4.png | Bin 0 -> 8158 bytes .../Textures/Effects/rcd.rsi/deconstruct6.png | Bin 0 -> 8158 bytes .../Textures/Effects/rcd.rsi/deconstruct8.png | Bin 0 -> 7941 bytes .../Effects/rcd.rsi/deconstructPreview.png | Bin 0 -> 47364 bytes Resources/Textures/Effects/rcd.rsi/meta.json | 411 +++++++++- .../Textures/Interface/Radial/RCD/airlock.png | Bin 0 -> 710 bytes .../Interface/Radial/RCD/airlocks.png | Bin 0 -> 776 bytes .../Interface/Radial/RCD/bulb_light.png | Bin 0 -> 283 bytes .../Interface/Radial/RCD/cable_terminal.png | Bin 0 -> 646 bytes .../Textures/Interface/Radial/RCD/catwalk.png | Bin 0 -> 404 bytes .../Interface/Radial/RCD/computer_frame.png | Bin 0 -> 467 bytes .../Radial/RCD/computers_and_frames.png | Bin 0 -> 775 bytes .../Interface/Radial/RCD/deconstruct.png | Bin 0 -> 1200 bytes .../Interface/Radial/RCD/directional.png | Bin 0 -> 312 bytes .../Radial/RCD/directional_reinforced.png | Bin 0 -> 296 bytes .../Interface/Radial/RCD/firelock.png | Bin 0 -> 637 bytes .../Interface/Radial/RCD/glass_airlock.png | Bin 0 -> 698 bytes .../Textures/Interface/Radial/RCD/grille.png | Bin 0 -> 223 bytes .../Textures/Interface/Radial/RCD/hv_coil.png | Bin 0 -> 856 bytes .../Interface/Radial/RCD/lighting.png | Bin 0 -> 901 bytes .../Textures/Interface/Radial/RCD/lv_coil.png | Bin 0 -> 850 bytes .../Interface/Radial/RCD/machine_frame.png | Bin 0 -> 655 bytes .../Interface/Radial/RCD/metal_tile.png | Bin 0 -> 297 bytes .../Interface/Radial/RCD/multicoil.png | Bin 0 -> 976 bytes .../Textures/Interface/Radial/RCD/mv_coil.png | Bin 0 -> 833 bytes .../Textures/Interface/Radial/RCD/plating.png | Bin 0 -> 436 bytes .../Interface/Radial/RCD/reinforced_wall.png | Bin 0 -> 2312 bytes .../Interface/Radial/RCD/solid_wall.png | Bin 0 -> 448 bytes .../Interface/Radial/RCD/tube_light.png | Bin 0 -> 266 bytes .../Radial/RCD/walls_and_flooring.png | Bin 0 -> 431 bytes .../Textures/Interface/Radial/RCD/window.png | Bin 0 -> 739 bytes .../Radial/RCD/window_reinforced.png | Bin 0 -> 1175 bytes .../Radial/RCD/windows_and_grilles.png | Bin 0 -> 1205 bytes .../Textures/Interface/Radial/back_hover.png | Bin 0 -> 495 bytes .../Textures/Interface/Radial/back_normal.png | Bin 0 -> 525 bytes .../Interface/Radial/button_hover.png | Bin 0 -> 211 bytes .../Interface/Radial/button_normal.png | Bin 0 -> 186 bytes .../Textures/Interface/Radial/close_hover.png | Bin 0 -> 389 bytes .../Interface/Radial/close_normal.png | Bin 0 -> 391 bytes 100 files changed, 2765 insertions(+), 380 deletions(-) create mode 100644 Content.Client/RCD/AlignRCDConstruction.cs create mode 100644 Content.Client/RCD/RCDConstructionGhostSystem.cs create mode 100644 Content.Client/RCD/RCDMenu.xaml create mode 100644 Content.Client/RCD/RCDMenu.xaml.cs create mode 100644 Content.Client/RCD/RCDMenuBoundUserInterface.cs create mode 100644 Content.Client/UserInterface/Controls/RadialContainer.cs create mode 100644 Content.Client/UserInterface/Controls/RadialMenu.cs create mode 100644 Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs create mode 100644 Content.Shared/RCD/RCDEvents.cs create mode 100644 Content.Shared/RCD/RCDPrototype.cs create mode 100644 Resources/Locale/en-US/ui/general.ftl create mode 100644 Resources/Prototypes/RCD/rcd.yml delete mode 100644 Resources/Textures/Effects/rcd.rsi/construct.png create mode 100644 Resources/Textures/Effects/rcd.rsi/construct0.png create mode 100644 Resources/Textures/Effects/rcd.rsi/construct1.png create mode 100644 Resources/Textures/Effects/rcd.rsi/construct2.png create mode 100644 Resources/Textures/Effects/rcd.rsi/construct3.png create mode 100644 Resources/Textures/Effects/rcd.rsi/construct4.png create mode 100644 Resources/Textures/Effects/rcd.rsi/deconstruct2.png create mode 100644 Resources/Textures/Effects/rcd.rsi/deconstruct4.png create mode 100644 Resources/Textures/Effects/rcd.rsi/deconstruct6.png create mode 100644 Resources/Textures/Effects/rcd.rsi/deconstruct8.png create mode 100644 Resources/Textures/Effects/rcd.rsi/deconstructPreview.png create mode 100644 Resources/Textures/Interface/Radial/RCD/airlock.png create mode 100644 Resources/Textures/Interface/Radial/RCD/airlocks.png create mode 100644 Resources/Textures/Interface/Radial/RCD/bulb_light.png create mode 100644 Resources/Textures/Interface/Radial/RCD/cable_terminal.png create mode 100644 Resources/Textures/Interface/Radial/RCD/catwalk.png create mode 100644 Resources/Textures/Interface/Radial/RCD/computer_frame.png create mode 100644 Resources/Textures/Interface/Radial/RCD/computers_and_frames.png create mode 100644 Resources/Textures/Interface/Radial/RCD/deconstruct.png create mode 100644 Resources/Textures/Interface/Radial/RCD/directional.png create mode 100644 Resources/Textures/Interface/Radial/RCD/directional_reinforced.png create mode 100644 Resources/Textures/Interface/Radial/RCD/firelock.png create mode 100644 Resources/Textures/Interface/Radial/RCD/glass_airlock.png create mode 100644 Resources/Textures/Interface/Radial/RCD/grille.png create mode 100644 Resources/Textures/Interface/Radial/RCD/hv_coil.png create mode 100644 Resources/Textures/Interface/Radial/RCD/lighting.png create mode 100644 Resources/Textures/Interface/Radial/RCD/lv_coil.png create mode 100644 Resources/Textures/Interface/Radial/RCD/machine_frame.png create mode 100644 Resources/Textures/Interface/Radial/RCD/metal_tile.png create mode 100644 Resources/Textures/Interface/Radial/RCD/multicoil.png create mode 100644 Resources/Textures/Interface/Radial/RCD/mv_coil.png create mode 100644 Resources/Textures/Interface/Radial/RCD/plating.png create mode 100644 Resources/Textures/Interface/Radial/RCD/reinforced_wall.png create mode 100644 Resources/Textures/Interface/Radial/RCD/solid_wall.png create mode 100644 Resources/Textures/Interface/Radial/RCD/tube_light.png create mode 100644 Resources/Textures/Interface/Radial/RCD/walls_and_flooring.png create mode 100644 Resources/Textures/Interface/Radial/RCD/window.png create mode 100644 Resources/Textures/Interface/Radial/RCD/window_reinforced.png create mode 100644 Resources/Textures/Interface/Radial/RCD/windows_and_grilles.png create mode 100644 Resources/Textures/Interface/Radial/back_hover.png create mode 100644 Resources/Textures/Interface/Radial/back_normal.png create mode 100644 Resources/Textures/Interface/Radial/button_hover.png create mode 100644 Resources/Textures/Interface/Radial/button_normal.png create mode 100644 Resources/Textures/Interface/Radial/close_hover.png create mode 100644 Resources/Textures/Interface/Radial/close_normal.png diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 589de6d6a7..2e888b3df9 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -45,6 +45,9 @@ namespace Content.Client.Input // Not in engine because the engine doesn't understand what a flipped object is common.AddFunction(ContentKeyFunctions.EditorFlipObject); + // Not in engine so that the RCD can rotate objects + common.AddFunction(EngineKeyFunctions.EditorRotateObject); + var human = contexts.GetContext("human"); human.AddFunction(EngineKeyFunctions.MoveUp); human.AddFunction(EngineKeyFunctions.MoveDown); diff --git a/Content.Client/RCD/AlignRCDConstruction.cs b/Content.Client/RCD/AlignRCDConstruction.cs new file mode 100644 index 0000000000..da7b22c91a --- /dev/null +++ b/Content.Client/RCD/AlignRCDConstruction.cs @@ -0,0 +1,122 @@ +using System.Numerics; +using Content.Client.Gameplay; +using Content.Shared.Hands.Components; +using Content.Shared.Interaction; +using Content.Shared.RCD.Components; +using Content.Shared.RCD.Systems; +using Robust.Client.Placement; +using Robust.Client.Player; +using Robust.Client.State; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; + +namespace Content.Client.RCD; + +public sealed class AlignRCDConstruction : PlacementMode +{ + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly RCDSystem _rcdSystem = default!; + [Dependency] private readonly SharedTransformSystem _transformSystem = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IStateManager _stateManager = default!; + + private const float SearchBoxSize = 2f; + private const float PlaceColorBaseAlpha = 0.5f; + + private EntityCoordinates _unalignedMouseCoords = default; + + /// + /// This placement mode is not on the engine because it is content specific (i.e., for the RCD) + /// + public AlignRCDConstruction(PlacementManager pMan) : base(pMan) + { + var dependencies = IoCManager.Instance!; + _entityManager = dependencies.Resolve(); + _mapManager = dependencies.Resolve(); + _playerManager = dependencies.Resolve(); + _stateManager = dependencies.Resolve(); + + _mapSystem = _entityManager.System(); + _rcdSystem = _entityManager.System(); + _transformSystem = _entityManager.System(); + + ValidPlaceColor = ValidPlaceColor.WithAlpha(PlaceColorBaseAlpha); + } + + public override void AlignPlacementMode(ScreenCoordinates mouseScreen) + { + _unalignedMouseCoords = ScreenToCursorGrid(mouseScreen); + MouseCoords = _unalignedMouseCoords.AlignWithClosestGridTile(SearchBoxSize, _entityManager, _mapManager); + + var gridId = MouseCoords.GetGridUid(_entityManager); + + if (!_entityManager.TryGetComponent(gridId, out var mapGrid)) + return; + + CurrentTile = _mapSystem.GetTileRef(gridId.Value, mapGrid, MouseCoords); + + float tileSize = mapGrid.TileSize; + GridDistancing = tileSize; + + if (pManager.CurrentPermission!.IsTile) + { + MouseCoords = new EntityCoordinates(MouseCoords.EntityId, new Vector2(CurrentTile.X + tileSize / 2, + CurrentTile.Y + tileSize / 2)); + } + else + { + MouseCoords = new EntityCoordinates(MouseCoords.EntityId, new Vector2(CurrentTile.X + tileSize / 2 + pManager.PlacementOffset.X, + CurrentTile.Y + tileSize / 2 + pManager.PlacementOffset.Y)); + } + } + + public override bool IsValidPosition(EntityCoordinates position) + { + var player = _playerManager.LocalSession?.AttachedEntity; + + // If the destination is out of interaction range, set the placer alpha to zero + if (!_entityManager.TryGetComponent(player, out var xform)) + return false; + + if (!xform.Coordinates.InRange(_entityManager, _transformSystem, position, SharedInteractionSystem.InteractionRange)) + { + InvalidPlaceColor = InvalidPlaceColor.WithAlpha(0); + return false; + } + + // Otherwise restore the alpha value + else + { + InvalidPlaceColor = InvalidPlaceColor.WithAlpha(PlaceColorBaseAlpha); + } + + // Determine if player is carrying an RCD in their active hand + if (!_entityManager.TryGetComponent(player, out var hands)) + return false; + + var heldEntity = hands.ActiveHand?.HeldEntity; + + if (!_entityManager.TryGetComponent(heldEntity, out var rcd)) + return false; + + // Retrieve the map grid data for the position + if (!_rcdSystem.TryGetMapGridData(position, out var mapGridData)) + return false; + + // Determine if the user is hovering over a target + var currentState = _stateManager.CurrentState; + + if (currentState is not GameplayStateBase screen) + return false; + + var target = screen.GetClickedEntity(_unalignedMouseCoords.ToMap(_entityManager, _transformSystem)); + + // Determine if the RCD operation is valid or not + if (!_rcdSystem.IsRCDOperationStillValid(heldEntity.Value, rcd, mapGridData.Value, target, player.Value, false)) + return false; + + return true; + } +} diff --git a/Content.Client/RCD/RCDConstructionGhostSystem.cs b/Content.Client/RCD/RCDConstructionGhostSystem.cs new file mode 100644 index 0000000000..792916b892 --- /dev/null +++ b/Content.Client/RCD/RCDConstructionGhostSystem.cs @@ -0,0 +1,78 @@ +using Content.Shared.Hands.Components; +using Content.Shared.Interaction; +using Content.Shared.RCD; +using Content.Shared.RCD.Components; +using Content.Shared.RCD.Systems; +using Robust.Client.Placement; +using Robust.Client.Player; +using Robust.Shared.Enums; + +namespace Content.Client.RCD; + +public sealed class RCDConstructionGhostSystem : EntitySystem +{ + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly RCDSystem _rcdSystem = default!; + [Dependency] private readonly IPlacementManager _placementManager = default!; + + private string _placementMode = typeof(AlignRCDConstruction).Name; + private Direction _placementDirection = default; + + public override void Update(float frameTime) + { + base.Update(frameTime); + + // Get current placer data + var placerEntity = _placementManager.CurrentPermission?.MobUid; + var placerProto = _placementManager.CurrentPermission?.EntityType; + var placerIsRCD = HasComp(placerEntity); + + // Exit if erasing or the current placer is not an RCD (build mode is active) + if (_placementManager.Eraser || (placerEntity != null && !placerIsRCD)) + return; + + // Determine if player is carrying an RCD in their active hand + var player = _playerManager.LocalSession?.AttachedEntity; + + if (!TryComp(player, out var hands)) + return; + + var heldEntity = hands.ActiveHand?.HeldEntity; + + if (!TryComp(heldEntity, out var rcd)) + { + // If the player was holding an RCD, but is no longer, cancel placement + if (placerIsRCD) + _placementManager.Clear(); + + return; + } + + // Update the direction the RCD prototype based on the placer direction + if (_placementDirection != _placementManager.Direction) + { + _placementDirection = _placementManager.Direction; + RaiseNetworkEvent(new RCDConstructionGhostRotationEvent(GetNetEntity(heldEntity.Value), _placementDirection)); + } + + // If the placer has not changed, exit + _rcdSystem.UpdateCachedPrototype(heldEntity.Value, rcd); + + if (heldEntity == placerEntity && rcd.CachedPrototype.Prototype == placerProto) + return; + + // Create a new placer + var newObjInfo = new PlacementInformation + { + MobUid = heldEntity.Value, + PlacementOption = _placementMode, + EntityType = rcd.CachedPrototype.Prototype, + Range = (int) Math.Ceiling(SharedInteractionSystem.InteractionRange), + IsTile = (rcd.CachedPrototype.Mode == RcdMode.ConstructTile), + UseEditorContext = false, + }; + + _placementManager.Clear(); + _placementManager.BeginPlacing(newObjInfo); + } +} diff --git a/Content.Client/RCD/RCDMenu.xaml b/Content.Client/RCD/RCDMenu.xaml new file mode 100644 index 0000000000..b3d5367a5f --- /dev/null +++ b/Content.Client/RCD/RCDMenu.xaml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/RCD/RCDMenu.xaml.cs b/Content.Client/RCD/RCDMenu.xaml.cs new file mode 100644 index 0000000000..8679e789dc --- /dev/null +++ b/Content.Client/RCD/RCDMenu.xaml.cs @@ -0,0 +1,137 @@ +using Content.Client.UserInterface.Controls; +using Content.Shared.RCD; +using Content.Shared.RCD.Components; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; +using System.Numerics; + +namespace Content.Client.RCD; + +[GenerateTypedNameReferences] +public sealed partial class RCDMenu : RadialMenu +{ + [Dependency] private readonly EntityManager _entManager = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + + private readonly SpriteSystem _spriteSystem; + + public event Action>? SendRCDSystemMessageAction; + + public RCDMenu(EntityUid owner, RCDMenuBoundUserInterface bui) + { + IoCManager.InjectDependencies(this); + RobustXamlLoader.Load(this); + + _spriteSystem = _entManager.System(); + + // Find the main radial container + var main = FindControl("Main"); + + if (main == null) + return; + + // Populate secondary radial containers + if (!_entManager.TryGetComponent(owner, out var rcd)) + return; + + foreach (var protoId in rcd.AvailablePrototypes) + { + if (!_protoManager.TryIndex(protoId, out var proto)) + continue; + + if (proto.Mode == RcdMode.Invalid) + continue; + + var parent = FindControl(proto.Category); + + if (parent == null) + continue; + + var name = Loc.GetString(proto.SetName); + name = char.ToUpper(name[0]) + name.Remove(0, 1); + + var button = new RCDMenuButton() + { + StyleClasses = { "RadialMenuButton" }, + SetSize = new Vector2(64f, 64f), + ToolTip = name, + ProtoId = protoId, + }; + + if (proto.Sprite != null) + { + var tex = new TextureRect() + { + VerticalAlignment = VAlignment.Center, + HorizontalAlignment = HAlignment.Center, + Texture = _spriteSystem.Frame0(proto.Sprite), + TextureScale = new Vector2(2f, 2f), + }; + + button.AddChild(tex); + } + + parent.AddChild(button); + + // Ensure that the button that transitions the menu to the associated category layer + // is visible in the main radial container (as these all start with Visible = false) + foreach (var child in main.Children) + { + var castChild = child as RadialMenuTextureButton; + + if (castChild is not RadialMenuTextureButton) + continue; + + if (castChild.TargetLayer == proto.Category) + { + castChild.Visible = true; + break; + } + } + } + + // Set up menu actions + foreach (var child in Children) + AddRCDMenuButtonOnClickActions(child); + + OnChildAdded += AddRCDMenuButtonOnClickActions; + + SendRCDSystemMessageAction += bui.SendRCDSystemMessage; + } + + private void AddRCDMenuButtonOnClickActions(Control control) + { + var radialContainer = control as RadialContainer; + + if (radialContainer == null) + return; + + foreach (var child in radialContainer.Children) + { + var castChild = child as RCDMenuButton; + + if (castChild == null) + continue; + + castChild.OnButtonUp += _ => + { + SendRCDSystemMessageAction?.Invoke(castChild.ProtoId); + Close(); + }; + } + } +} + +public sealed class RCDMenuButton : RadialMenuTextureButton +{ + public ProtoId ProtoId { get; set; } + + public RCDMenuButton() + { + + } +} diff --git a/Content.Client/RCD/RCDMenuBoundUserInterface.cs b/Content.Client/RCD/RCDMenuBoundUserInterface.cs new file mode 100644 index 0000000000..a37dbcecf8 --- /dev/null +++ b/Content.Client/RCD/RCDMenuBoundUserInterface.cs @@ -0,0 +1,49 @@ +using Content.Shared.RCD; +using Content.Shared.RCD.Components; +using JetBrains.Annotations; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Shared.Prototypes; + +namespace Content.Client.RCD; + +[UsedImplicitly] +public sealed class RCDMenuBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + + private RCDMenu? _menu; + + public RCDMenuBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _menu = new(Owner, this); + _menu.OnClose += Close; + + // Open the menu, centered on the mouse + var vpSize = _displayManager.ScreenSize; + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize); + } + + public void SendRCDSystemMessage(ProtoId protoId) + { + // A predicted message cannot be used here as the RCD UI is closed immediately + // after this message is sent, which will stop the server from receiving it + SendMessage(new RCDSystemMessage(protoId)); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) return; + + _menu?.Dispose(); + } +} diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index 426af1616e..2c7a1873a3 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -290,7 +290,7 @@ namespace Content.Client.Stylesheets var buttonTex = resCache.GetTexture("/Textures/Interface/Nano/button.svg.96dpi.png"); var topButtonBase = new StyleBoxTexture { - Texture = buttonTex, + Texture = buttonTex, }; topButtonBase.SetPatchMargin(StyleBox.Margin.All, 10); topButtonBase.SetPadding(StyleBox.Margin.All, 0); @@ -298,19 +298,19 @@ namespace Content.Client.Stylesheets var topButtonOpenRight = new StyleBoxTexture(topButtonBase) { - Texture = new AtlasTexture(buttonTex, UIBox2.FromDimensions(new Vector2(0, 0), new Vector2(14, 24))), + Texture = new AtlasTexture(buttonTex, UIBox2.FromDimensions(new Vector2(0, 0), new Vector2(14, 24))), }; topButtonOpenRight.SetPatchMargin(StyleBox.Margin.Right, 0); var topButtonOpenLeft = new StyleBoxTexture(topButtonBase) { - Texture = new AtlasTexture(buttonTex, UIBox2.FromDimensions(new Vector2(10, 0), new Vector2(14, 24))), + Texture = new AtlasTexture(buttonTex, UIBox2.FromDimensions(new Vector2(10, 0), new Vector2(14, 24))), }; topButtonOpenLeft.SetPatchMargin(StyleBox.Margin.Left, 0); var topButtonSquare = new StyleBoxTexture(topButtonBase) { - Texture = new AtlasTexture(buttonTex, UIBox2.FromDimensions(new Vector2(10, 0), new Vector2(3, 24))), + Texture = new AtlasTexture(buttonTex, UIBox2.FromDimensions(new Vector2(10, 0), new Vector2(3, 24))), }; topButtonSquare.SetPatchMargin(StyleBox.Margin.Horizontal, 0); @@ -368,9 +368,9 @@ namespace Content.Client.Stylesheets }; tabContainerPanel.SetPatchMargin(StyleBox.Margin.All, 2); - var tabContainerBoxActive = new StyleBoxFlat {BackgroundColor = new Color(64, 64, 64)}; + var tabContainerBoxActive = new StyleBoxFlat { BackgroundColor = new Color(64, 64, 64) }; tabContainerBoxActive.SetContentMarginOverride(StyleBox.Margin.Horizontal, 5); - var tabContainerBoxInactive = new StyleBoxFlat {BackgroundColor = new Color(32, 32, 32)}; + var tabContainerBoxInactive = new StyleBoxFlat { BackgroundColor = new Color(32, 32, 32) }; tabContainerBoxInactive.SetContentMarginOverride(StyleBox.Margin.Horizontal, 5); var progressBarBackground = new StyleBoxFlat @@ -409,21 +409,21 @@ namespace Content.Client.Stylesheets // Placeholder var placeholderTexture = resCache.GetTexture("/Textures/Interface/Nano/placeholder.png"); - var placeholder = new StyleBoxTexture {Texture = placeholderTexture}; + var placeholder = new StyleBoxTexture { Texture = placeholderTexture }; placeholder.SetPatchMargin(StyleBox.Margin.All, 19); placeholder.SetExpandMargin(StyleBox.Margin.All, -5); placeholder.Mode = StyleBoxTexture.StretchMode.Tile; - var itemListBackgroundSelected = new StyleBoxFlat {BackgroundColor = new Color(75, 75, 86)}; + var itemListBackgroundSelected = new StyleBoxFlat { BackgroundColor = new Color(75, 75, 86) }; itemListBackgroundSelected.SetContentMarginOverride(StyleBox.Margin.Vertical, 2); itemListBackgroundSelected.SetContentMarginOverride(StyleBox.Margin.Horizontal, 4); - var itemListItemBackgroundDisabled = new StyleBoxFlat {BackgroundColor = new Color(10, 10, 12)}; + var itemListItemBackgroundDisabled = new StyleBoxFlat { BackgroundColor = new Color(10, 10, 12) }; itemListItemBackgroundDisabled.SetContentMarginOverride(StyleBox.Margin.Vertical, 2); itemListItemBackgroundDisabled.SetContentMarginOverride(StyleBox.Margin.Horizontal, 4); - var itemListItemBackground = new StyleBoxFlat {BackgroundColor = new Color(55, 55, 68)}; + var itemListItemBackground = new StyleBoxFlat { BackgroundColor = new Color(55, 55, 68) }; itemListItemBackground.SetContentMarginOverride(StyleBox.Margin.Vertical, 2); itemListItemBackground.SetContentMarginOverride(StyleBox.Margin.Horizontal, 4); - var itemListItemBackgroundTransparent = new StyleBoxFlat {BackgroundColor = Color.Transparent}; + var itemListItemBackgroundTransparent = new StyleBoxFlat { BackgroundColor = Color.Transparent }; itemListItemBackgroundTransparent.SetContentMarginOverride(StyleBox.Margin.Vertical, 2); itemListItemBackgroundTransparent.SetContentMarginOverride(StyleBox.Margin.Horizontal, 4); @@ -489,9 +489,9 @@ namespace Content.Client.Stylesheets sliderForeBox.SetPatchMargin(StyleBox.Margin.All, 12); sliderGrabBox.SetPatchMargin(StyleBox.Margin.All, 12); - var sliderFillGreen = new StyleBoxTexture(sliderFillBox) {Modulate = Color.LimeGreen}; - var sliderFillRed = new StyleBoxTexture(sliderFillBox) {Modulate = Color.Red}; - var sliderFillBlue = new StyleBoxTexture(sliderFillBox) {Modulate = Color.Blue}; + var sliderFillGreen = new StyleBoxTexture(sliderFillBox) { Modulate = Color.LimeGreen }; + var sliderFillRed = new StyleBoxTexture(sliderFillBox) { Modulate = Color.Red }; + var sliderFillBlue = new StyleBoxTexture(sliderFillBox) { Modulate = Color.Blue }; var sliderFillWhite = new StyleBoxTexture(sliderFillBox) { Modulate = Color.White }; var boxFont13 = resCache.GetFont("/Fonts/Boxfont-round/Boxfont Round.ttf", 13); @@ -1468,6 +1468,25 @@ namespace Content.Client.Stylesheets Element
[DataField("charges"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public int Charges = 5; + public int Charges = 30; } - -// TODO: state??? check if it desyncs diff --git a/Content.Shared/RCD/Components/RCDComponent.cs b/Content.Shared/RCD/Components/RCDComponent.cs index 8e1032884a..39bb6fd3e9 100644 --- a/Content.Shared/RCD/Components/RCDComponent.cs +++ b/Content.Shared/RCD/Components/RCDComponent.cs @@ -1,20 +1,11 @@ -using Content.Shared.Maps; using Content.Shared.RCD.Systems; using Robust.Shared.Audio; using Robust.Shared.GameStates; -using Robust.Shared.Serialization; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Physics; +using Robust.Shared.Prototypes; namespace Content.Shared.RCD.Components; -public enum RcdMode : byte -{ - Floors, - Walls, - Airlock, - Deconstruct -} - /// /// Main component for the RCD /// Optionally uses LimitedChargesComponent. @@ -25,27 +16,57 @@ public enum RcdMode : byte public sealed partial class RCDComponent : Component { /// - /// Time taken to do an action like placing a wall + /// List of RCD prototypes that the device comes loaded with /// - [DataField("delay"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public float Delay = 2f; - - [DataField("swapModeSound")] - public SoundSpecifier SwapModeSound = new SoundPathSpecifier("/Audio/Items/genhit.ogg"); - - [DataField("successSound")] - public SoundSpecifier SuccessSound = new SoundPathSpecifier("/Audio/Items/deconstruct.ogg"); + [DataField, AutoNetworkedField] + public HashSet> AvailablePrototypes { get; set; } = new(); /// - /// What mode are we on? Can be floors, walls, airlock, deconstruct. + /// Sound that plays when a RCD operation successfully completes /// - [DataField("mode"), AutoNetworkedField] - public RcdMode Mode = RcdMode.Floors; + [DataField] + public SoundSpecifier SuccessSound { get; set; } = new SoundPathSpecifier("/Audio/Items/deconstruct.ogg"); /// - /// ID of the floor to create when using the floor mode. + /// The ProtoId of the currently selected RCD prototype /// - [DataField("floor", customTypeSerializer: typeof(PrototypeIdSerializer))] - [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] - public string Floor = "FloorSteel"; + [DataField, AutoNetworkedField] + public ProtoId ProtoId { get; set; } = "Invalid"; + + /// + /// A cached copy of currently selected RCD prototype + /// + /// + /// If the ProtoId is changed, make sure to update the CachedPrototype as well + /// + [ViewVariables(VVAccess.ReadOnly)] + public RCDPrototype CachedPrototype { get; set; } = default!; + + /// + /// The direction constructed entities will face upon spawning + /// + [DataField, AutoNetworkedField] + public Direction ConstructionDirection + { + get + { + return _constructionDirection; + } + set + { + _constructionDirection = value; + ConstructionTransform = new Transform(new(), _constructionDirection.ToAngle()); + } + } + + private Direction _constructionDirection = Direction.South; + + /// + /// Returns a rotated transform based on the specified ConstructionDirection + /// + /// + /// Contains no position data + /// + [ViewVariables(VVAccess.ReadOnly)] + public Transform ConstructionTransform { get; private set; } = default!; } diff --git a/Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs b/Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs new file mode 100644 index 0000000000..0ddc6897f0 --- /dev/null +++ b/Content.Shared/RCD/Components/RCDDeconstructibleComponent.cs @@ -0,0 +1,34 @@ +using Content.Shared.RCD.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.RCD.Components; + +[RegisterComponent, NetworkedComponent] +[Access(typeof(RCDSystem))] +public sealed partial class RCDDeconstructableComponent : Component +{ + /// + /// Number of charges consumed when the deconstruction is completed + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public int Cost = 1; + + /// + /// The length of the deconstruction + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float Delay = 1f; + + /// + /// The visual effect that plays during deconstruction + /// + [DataField("fx"), ViewVariables(VVAccess.ReadWrite)] + public EntProtoId? Effect = null; + + /// + /// Toggles whether this entity is deconstructable or not + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool Deconstructable = true; +} diff --git a/Content.Shared/RCD/RCDEvents.cs b/Content.Shared/RCD/RCDEvents.cs new file mode 100644 index 0000000000..a15a010277 --- /dev/null +++ b/Content.Shared/RCD/RCDEvents.cs @@ -0,0 +1,34 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.RCD; + +[Serializable, NetSerializable] +public sealed class RCDSystemMessage : BoundUserInterfaceMessage +{ + public ProtoId ProtoId; + + public RCDSystemMessage(ProtoId protoId) + { + ProtoId = protoId; + } +} + +[Serializable, NetSerializable] +public sealed class RCDConstructionGhostRotationEvent : EntityEventArgs +{ + public readonly NetEntity NetEntity; + public readonly Direction Direction; + + public RCDConstructionGhostRotationEvent(NetEntity netEntity, Direction direction) + { + NetEntity = netEntity; + Direction = direction; + } +} + +[Serializable, NetSerializable] +public enum RcdUiKey : byte +{ + Key +} diff --git a/Content.Shared/RCD/RCDPrototype.cs b/Content.Shared/RCD/RCDPrototype.cs new file mode 100644 index 0000000000..1e80abfb72 --- /dev/null +++ b/Content.Shared/RCD/RCDPrototype.cs @@ -0,0 +1,144 @@ +using Content.Shared.Physics; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.RCD; + +/// +/// Contains the parameters for a RCD construction / operation +/// +[Prototype("rcd")] +public sealed class RCDPrototype : IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; + + /// + /// The RCD mode associated with the operation + /// + [DataField(required: true), ViewVariables(VVAccess.ReadOnly)] + public RcdMode Mode { get; private set; } = RcdMode.Invalid; + + /// + /// The name associated with the prototype + /// + [DataField("name"), ViewVariables(VVAccess.ReadOnly)] + public string SetName { get; private set; } = "Unknown"; + + /// + /// The name of the radial container that this prototype will be listed under on the RCD menu + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public string Category { get; private set; } = "Undefined"; + + /// + /// Texture path for this prototypes menu icon + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public SpriteSpecifier? Sprite { get; private set; } = null; + + /// + /// The entity prototype that will be constructed (mode dependent) + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public string? Prototype { get; private set; } = string.Empty; + + /// + /// Number of charges consumed when the operation is completed + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public int Cost { get; private set; } = 1; + + /// + /// The length of the operation + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public float Delay { get; private set; } = 1f; + + /// + /// The visual effect that plays during this operation + /// + [DataField("fx"), ViewVariables(VVAccess.ReadOnly)] + public EntProtoId? Effect { get; private set; } = null; + + /// + /// A list of rules that govern where the entity prototype can be contructed + /// + [DataField("rules"), ViewVariables(VVAccess.ReadOnly)] + public HashSet ConstructionRules { get; private set; } = new(); + + /// + /// The collision mask used for determining whether the entity prototype will fit into a target tile + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public CollisionGroup CollisionMask { get; private set; } = CollisionGroup.None; + + /// + /// Specifies a set of custom collision bounds for determining whether the entity prototype will fit into a target tile + /// + /// + /// Should be set assuming that the entity faces south. + /// Make sure that Rotation is set to RcdRotation.User if the entity is to be rotated by the user + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public Box2? CollisionBounds + { + get + { + return _collisionBounds; + } + + private set + { + _collisionBounds = value; + + if (_collisionBounds != null) + { + var poly = new PolygonShape(); + poly.SetAsBox(_collisionBounds.Value); + + CollisionPolygon = poly; + } + } + } + + private Box2? _collisionBounds = null; + + /// + /// The polygon shape associated with the prototype CollisionBounds (if set) + /// + [ViewVariables(VVAccess.ReadOnly)] + public PolygonShape? CollisionPolygon { get; private set; } = null; + + /// + /// Governs how the local rotation of the constructed entity will be set + /// + [DataField, ViewVariables(VVAccess.ReadOnly)] + public RcdRotation Rotation { get; private set; } = RcdRotation.User; +} + +public enum RcdMode : byte +{ + Invalid, + Deconstruct, + ConstructTile, + ConstructObject, +} + +// These are to be replaced with more flexible 'RulesRule' at a later time +public enum RcdConstructionRule : byte +{ + MustBuildOnEmptyTile, // Can only be built on empty space (e.g. lattice) + CanBuildOnEmptyTile, // Can be built on empty space or replace an existing tile (e.g. hull plating) + MustBuildOnSubfloor, // Can only be built on exposed subfloor (e.g. catwalks on lattice or hull plating) + IsWindow, // The entity is a window and can be built on grilles + IsCatwalk, // The entity is a catwalk +} + +public enum RcdRotation : byte +{ + Fixed, // The entity has a local rotation of zero + Camera, // The rotation of the entity matches the local player camera + User, // The entity can be rotated by the local player prior to placement +} diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index 6282a117bb..cd1e90dc1f 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -1,28 +1,35 @@ using Content.Shared.Administration.Logs; using Content.Shared.Charges.Components; using Content.Shared.Charges.Systems; +using Content.Shared.Construction; using Content.Shared.Database; using Content.Shared.DoAfter; using Content.Shared.Examine; +using Content.Shared.Hands.Components; using Content.Shared.Interaction; -using Content.Shared.Interaction.Events; using Content.Shared.Maps; using Content.Shared.Physics; using Content.Shared.Popups; using Content.Shared.RCD.Components; using Content.Shared.Tag; using Content.Shared.Tiles; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Network; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Physics.Dynamics; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Timing; +using System.Diagnostics.CodeAnalysis; +using System.Linq; namespace Content.Shared.RCD.Systems; -public sealed class RCDSystem : EntitySystem +[Virtual] +public class RCDSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly INetManager _net = default!; @@ -34,312 +41,599 @@ public sealed class RCDSystem : EntitySystem [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly TurfSystem _turf = default!; - [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly TagSystem _tags = default!; - private readonly int _rcdModeCount = Enum.GetValues(typeof(RcdMode)).Length; + private readonly int _instantConstructionDelay = 0; + private readonly EntProtoId _instantConstructionFx = "EffectRCDConstruct0"; + private readonly ProtoId _deconstructTileProto = "DeconstructTile"; + private readonly ProtoId _deconstructLatticeProto = "DeconstructLattice"; + + private HashSet _intersectingEntities = new(); public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnExamine); - SubscribeLocalEvent(OnUseInHand); SubscribeLocalEvent(OnAfterInteract); SubscribeLocalEvent(OnDoAfter); SubscribeLocalEvent>(OnDoAfterAttempt); + SubscribeLocalEvent(OnRCDSystemMessage); + SubscribeNetworkEvent(OnRCDconstructionGhostRotationEvent); } - private void OnExamine(EntityUid uid, RCDComponent comp, ExaminedEvent args) + #region Event handling + + private void OnMapInit(EntityUid uid, RCDComponent component, MapInitEvent args) + { + // On init, set the RCD to its first available recipe + if (component.AvailablePrototypes.Any()) + { + component.ProtoId = component.AvailablePrototypes.First(); + UpdateCachedPrototype(uid, component); + Dirty(uid, component); + + return; + } + + // The RCD has no valid recipes somehow? Get rid of it + QueueDel(uid); + } + + private void OnRCDSystemMessage(EntityUid uid, RCDComponent component, RCDSystemMessage args) + { + // Exit if the RCD doesn't actually know the supplied prototype + if (!component.AvailablePrototypes.Contains(args.ProtoId)) + return; + + if (!_protoManager.HasIndex(args.ProtoId)) + return; + + // Set the current RCD prototype to the one supplied + component.ProtoId = args.ProtoId; + UpdateCachedPrototype(uid, component); + Dirty(uid, component); + + if (args.Session.AttachedEntity != null) + { + // Popup message + var msg = (component.CachedPrototype.Prototype != null) ? + Loc.GetString("rcd-component-change-build-mode", ("name", Loc.GetString(component.CachedPrototype.SetName))) : + Loc.GetString("rcd-component-change-mode", ("mode", Loc.GetString(component.CachedPrototype.SetName))); + + _popup.PopupClient(msg, uid, args.Session.AttachedEntity.Value); + } + } + + private void OnExamine(EntityUid uid, RCDComponent component, ExaminedEvent args) { if (!args.IsInDetailsRange) return; - var msg = Loc.GetString("rcd-component-examine-detail", ("mode", comp.Mode)); + // Update cached prototype if required + UpdateCachedPrototype(uid, component); + + var msg = (component.CachedPrototype.Prototype != null) ? + Loc.GetString("rcd-component-examine-build-details", ("name", Loc.GetString(component.CachedPrototype.SetName))) : + Loc.GetString("rcd-component-examine-mode-details", ("mode", Loc.GetString(component.CachedPrototype.SetName))); + args.PushMarkup(msg); } - private void OnUseInHand(EntityUid uid, RCDComponent comp, UseInHandEvent args) - { - if (args.Handled) - return; - - NextMode(uid, comp, args.User); - args.Handled = true; - } - - private void OnAfterInteract(EntityUid uid, RCDComponent comp, AfterInteractEvent args) + private void OnAfterInteract(EntityUid uid, RCDComponent component, AfterInteractEvent args) { if (args.Handled || !args.CanReach) return; var user = args.User; - - TryComp(uid, out var charges); - if (_charges.IsEmpty(uid, charges)) - { - _popup.PopupClient(Loc.GetString("rcd-component-no-ammo-message"), uid, user); - return; - } - var location = args.ClickLocation; - // Initial validity check + + // Initial validity checks if (!location.IsValid(EntityManager)) return; - var gridId = location.GetGridUid(EntityManager); - if (!HasComp(gridId)) + if (!TryGetMapGridData(location, out var mapGridData)) { - location = location.AlignWithClosestGridTile(); - gridId = location.GetGridUid(EntityManager); - // Check if fixing it failed / get final grid ID - if (!HasComp(gridId)) - return; + _popup.PopupClient(Loc.GetString("rcd-component-no-valid-grid"), uid, user); + return; } - var doAfterArgs = new DoAfterArgs(EntityManager, user, comp.Delay, new RCDDoAfterEvent(GetNetCoordinates(location), comp.Mode), uid, target: args.Target, used: uid) + if (!IsRCDOperationStillValid(uid, component, mapGridData.Value, args.Target, args.User)) + return; + + if (!_net.IsServer) + return; + + // Get the starting cost, delay, and effect from the prototype + var cost = component.CachedPrototype.Cost; + var delay = component.CachedPrototype.Delay; + var effectPrototype = component.CachedPrototype.Effect; + + #region: Operation modifiers + + // Deconstruction modifiers + switch (component.CachedPrototype.Mode) + { + case RcdMode.Deconstruct: + + // Deconstructing an object + if (args.Target != null) + { + if (TryComp(args.Target, out var destructible)) + { + cost = destructible.Cost; + delay = destructible.Delay; + effectPrototype = destructible.Effect; + } + } + + // Deconstructing a tile + else + { + var deconstructedTile = _mapSystem.GetTileRef(mapGridData.Value.GridUid, mapGridData.Value.Component, mapGridData.Value.Location); + var protoName = deconstructedTile.IsSpace() ? _deconstructTileProto : _deconstructLatticeProto; + + if (_protoManager.TryIndex(protoName, out var deconProto)) + { + cost = deconProto.Cost; + delay = deconProto.Delay; + effectPrototype = deconProto.Effect; + } + } + + break; + + case RcdMode.ConstructTile: + + // If replacing a tile, make the construction instant + var contructedTile = _mapSystem.GetTileRef(mapGridData.Value.GridUid, mapGridData.Value.Component, mapGridData.Value.Location); + + if (!contructedTile.Tile.IsEmpty) + { + delay = _instantConstructionDelay; + effectPrototype = _instantConstructionFx; + } + + break; + } + + #endregion + + // Try to start the do after + var effect = Spawn(effectPrototype, mapGridData.Value.Location); + var ev = new RCDDoAfterEvent(GetNetCoordinates(mapGridData.Value.Location), component.ProtoId, cost, EntityManager.GetNetEntity(effect)); + + var doAfterArgs = new DoAfterArgs(EntityManager, user, delay, ev, uid, target: args.Target, used: uid) { BreakOnDamage = true, - NeedHand = true, BreakOnHandChange = true, BreakOnMove = true, - AttemptFrequency = AttemptFrequency.EveryTick + AttemptFrequency = AttemptFrequency.EveryTick, + CancelDuplicate = false, + BlockDuplicate = false }; args.Handled = true; - if (_doAfter.TryStartDoAfter(doAfterArgs) && _gameTiming.IsFirstTimePredicted) - Spawn("EffectRCDConstruction", location); + if (!_doAfter.TryStartDoAfter(doAfterArgs)) + QueueDel(effect); } - private void OnDoAfterAttempt(EntityUid uid, RCDComponent comp, DoAfterAttemptEvent args) + private void OnDoAfterAttempt(EntityUid uid, RCDComponent component, DoAfterAttemptEvent args) { - // sus client crash why if (args.Event?.DoAfter?.Args == null) return; + // Exit if the RCD prototype has changed + if (component.ProtoId != args.Event.StartingProtoId) + return; + + // Ensure the RCD operation is still valid var location = GetCoordinates(args.Event.Location); - var gridId = location.GetGridUid(EntityManager); - if (!HasComp(gridId)) - { - location = location.AlignWithClosestGridTile(); - gridId = location.GetGridUid(EntityManager); - // Check if fixing it failed / get final grid ID - if (!HasComp(gridId)) - return; - } + if (!TryGetMapGridData(location, out var mapGridData)) + return; - var mapGrid = Comp(gridId.Value); - var tile = mapGrid.GetTileRef(location); - - if (!IsRCDStillValid(uid, comp, args.Event.User, args.Event.Target, mapGrid, tile, args.Event.StartingMode)) + if (!IsRCDOperationStillValid(uid, component, mapGridData.Value, args.Event.Target, args.Event.User)) args.Cancel(); } - private void OnDoAfter(EntityUid uid, RCDComponent comp, RCDDoAfterEvent args) + private void OnDoAfter(EntityUid uid, RCDComponent component, RCDDoAfterEvent args) { + if (args.Cancelled && _net.IsServer) + QueueDel(EntityManager.GetEntity(args.Effect)); + if (args.Handled || args.Cancelled || !_timing.IsFirstTimePredicted) return; - var user = args.User; + args.Handled = true; + var location = GetCoordinates(args.Location); - var gridId = location.GetGridUid(EntityManager); - if (!HasComp(gridId)) - { - location = location.AlignWithClosestGridTile(); - gridId = location.GetGridUid(EntityManager); - // Check if fixing it failed / get final grid ID - if (!HasComp(gridId)) - return; - } + if (!TryGetMapGridData(location, out var mapGridData)) + return; - var mapGrid = Comp(gridId.Value); - var tile = mapGrid.GetTileRef(location); - var snapPos = mapGrid.TileIndicesFor(location); + // Ensure the RCD operation is still valid + if (!IsRCDOperationStillValid(uid, component, mapGridData.Value, args.Target, args.User)) + return; - // I love that this uses entirely separate code to construction and tile placement!!! + // Finalize the operation + FinalizeRCDOperation(uid, component, mapGridData.Value, args.Target, args.User); - switch (comp.Mode) - { - //Floor mode just needs the tile to be a space tile (subFloor) - case RcdMode.Floors: - if (!_floors.CanPlaceTile(gridId.Value, mapGrid, out var reason)) - { - _popup.PopupClient(reason, user, user); - return; - } - - mapGrid.SetTile(snapPos, new Tile(_tileDefMan[comp.Floor].TileId)); - _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(args.User):user} used RCD to set grid: {tile.GridUid} {snapPos} to {comp.Floor}"); - break; - //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. - case RcdMode.Deconstruct: - if (!IsTileBlocked(tile)) // Delete the turf - { - mapGrid.SetTile(snapPos, Tile.Empty); - _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(args.User):user} used RCD to set grid: {tile.GridUid} tile: {snapPos} to space"); - } - else // Delete the targeted thing - { - var target = args.Target!.Value; - _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(args.User):user} used RCD to delete {ToPrettyString(target):target}"); - QueueDel(target); - } - break; - //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, - // thus we early return to avoid the tile set code. - case RcdMode.Walls: - // only spawn on the server - if (_net.IsServer) - { - var ent = Spawn("WallSolid", mapGrid.GridTileToLocal(snapPos)); - Transform(ent).LocalRotation = Angle.Zero; // Walls always need to point south. - _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(args.User):user} used RCD to spawn {ToPrettyString(ent)} at {snapPos} on grid {tile.GridUid}"); - } - break; - case RcdMode.Airlock: - // only spawn on the server - if (_net.IsServer) - { - var airlock = Spawn("Airlock", mapGrid.GridTileToLocal(snapPos)); - Transform(airlock).LocalRotation = Transform(uid).LocalRotation; //Now apply icon smoothing. - _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(args.User):user} used RCD to spawn {ToPrettyString(airlock)} at {snapPos} on grid {tile.GridUid}"); - } - break; - default: - args.Handled = true; - return; //I don't know why this would happen, but sure I guess. Get out of here invalid state! - } - - _audio.PlayPredicted(comp.SuccessSound, uid, user); - _charges.UseCharge(uid); - args.Handled = true; + // Play audio and consume charges + _audio.PlayPredicted(component.SuccessSound, uid, args.User); + _charges.UseCharges(uid, args.Cost); } - private bool IsRCDStillValid(EntityUid uid, RCDComponent comp, EntityUid user, EntityUid? target, MapGridComponent mapGrid, TileRef tile, RcdMode startingMode) + private void OnRCDconstructionGhostRotationEvent(RCDConstructionGhostRotationEvent ev, EntitySessionEventArgs session) { - //Less expensive checks first. Failing those ones, we need to check that the tile isn't obstructed. - if (comp.Mode != startingMode) - return false; + var uid = GetEntity(ev.NetEntity); - var unobstructed = target == null - ? _interaction.InRangeUnobstructed(user, mapGrid.GridTileToWorld(tile.GridIndices), popup: true) - : _interaction.InRangeUnobstructed(user, target.Value, popup: true); + // Determine if player that send the message is carrying the specified RCD in their active hand + if (session.SenderSession.AttachedEntity == null) + return; + + if (!TryComp(session.SenderSession.AttachedEntity, out var hands) || + uid != hands.ActiveHand?.HeldEntity) + return; + + if (!TryComp(uid, out var rcd)) + return; + + // Update the construction direction + rcd.ConstructionDirection = ev.Direction; + Dirty(uid, rcd); + } + + #endregion + + #region Entity construction/deconstruction rule checks + + public bool IsRCDOperationStillValid(EntityUid uid, RCDComponent component, MapGridData mapGridData, EntityUid? target, EntityUid user, bool popMsgs = true) + { + // Update cached prototype if required + UpdateCachedPrototype(uid, component); + + // Check that the RCD has enough ammo to get the job done + TryComp(uid, out var charges); + + // Both of these were messages were suppose to be predicted, but HasInsufficientCharges wasn't being checked on the client for some reason? + if (_charges.IsEmpty(uid, charges)) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-no-ammo-message"), uid, user); + + return false; + } + + if (_charges.HasInsufficientCharges(uid, component.CachedPrototype.Cost, charges)) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-insufficient-ammo-message"), uid, user); + + return false; + } + + // Exit if the target / target location is obstructed + var unobstructed = (target == null) + ? _interaction.InRangeUnobstructed(user, _mapSystem.GridTileToWorld(mapGridData.GridUid, mapGridData.Component, mapGridData.Position), popup: popMsgs) + : _interaction.InRangeUnobstructed(user, target.Value, popup: popMsgs); if (!unobstructed) return false; - switch (comp.Mode) + // Return whether the operation location is valid + switch (component.CachedPrototype.Mode) { - //Floor mode just needs the tile to be a space tile (subFloor) - case RcdMode.Floors: - if (!tile.Tile.IsEmpty) + case RcdMode.ConstructTile: return IsConstructionLocationValid(uid, component, mapGridData, user, popMsgs); + case RcdMode.ConstructObject: return IsConstructionLocationValid(uid, component, mapGridData, user, popMsgs); + case RcdMode.Deconstruct: return IsDeconstructionStillValid(uid, component, mapGridData, target, user, popMsgs); + } + + return false; + } + + private bool IsConstructionLocationValid(EntityUid uid, RCDComponent component, MapGridData mapGridData, EntityUid user, bool popMsgs = true) + { + // Check rule: Must build on empty tile + if (component.CachedPrototype.ConstructionRules.Contains(RcdConstructionRule.MustBuildOnEmptyTile) && !mapGridData.Tile.Tile.IsEmpty) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-must-build-on-empty-tile-message"), uid, user); + + return false; + } + + // Check rule: Must build on non-empty tile + if (!component.CachedPrototype.ConstructionRules.Contains(RcdConstructionRule.CanBuildOnEmptyTile) && mapGridData.Tile.Tile.IsEmpty) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-on-empty-tile-message"), uid, user); + + return false; + } + + // Check rule: Must place on subfloor + if (component.CachedPrototype.ConstructionRules.Contains(RcdConstructionRule.MustBuildOnSubfloor) && !mapGridData.Tile.Tile.GetContentTileDefinition().IsSubFloor) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-must-build-on-subfloor-message"), uid, user); + + return false; + } + + // Tile specific rules + if (component.CachedPrototype.Mode == RcdMode.ConstructTile) + { + // Check rule: Tile placement is valid + if (!_floors.CanPlaceTile(mapGridData.GridUid, mapGridData.Component, out var reason)) + { + if (popMsgs) + _popup.PopupClient(reason, uid, user); + + return false; + } + + // Check rule: Tiles can't be identical + if (mapGridData.Tile.Tile.GetContentTileDefinition().ID == component.CachedPrototype.Prototype) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-identical-tile"), uid, user); + + return false; + } + + // Ensure that all construction rules shared between tiles and object are checked before exiting here + return true; + } + + // Entity specific rules + + // Check rule: The tile is unoccupied + var isWindow = component.CachedPrototype.ConstructionRules.Contains(RcdConstructionRule.IsWindow); + var isCatwalk = component.CachedPrototype.ConstructionRules.Contains(RcdConstructionRule.IsCatwalk); + + _intersectingEntities.Clear(); + _lookup.GetLocalEntitiesIntersecting(mapGridData.GridUid, mapGridData.Position, _intersectingEntities, -0.05f, LookupFlags.Uncontained); + + foreach (var ent in _intersectingEntities) + { + if (isWindow && HasComp(ent)) + continue; + + if (isCatwalk && _tags.HasTag(ent, "Catwalk")) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-on-occupied-tile-message"), uid, user); + + return false; + } + + if (component.CachedPrototype.CollisionMask != CollisionGroup.None && TryComp(ent, out var fixtures)) + { + foreach (var fixture in fixtures.Fixtures.Values) { - _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-floor-tile-not-empty-message"), uid, user); + // Continue if no collision is possible + if (fixture.CollisionLayer <= 0 || (fixture.CollisionLayer & (int) component.CachedPrototype.CollisionMask) == 0) + continue; + + // Continue if our custom collision bounds are not intersected + if (component.CachedPrototype.CollisionPolygon != null && + !DoesCustomBoundsIntersectWithFixture(component.CachedPrototype.CollisionPolygon, component.ConstructionTransform, ent, fixture)) + continue; + + // Collision was detected + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-on-occupied-tile-message"), uid, user); + return false; } + } + } + + return true; + } + + private bool IsDeconstructionStillValid(EntityUid uid, RCDComponent component, MapGridData mapGridData, EntityUid? target, EntityUid user, bool popMsgs = true) + { + // Attempt to deconstruct a floor tile + if (target == null) + { + // The tile is empty + if (mapGridData.Tile.Tile.IsEmpty) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-nothing-to-deconstruct-message"), uid, user); + + return false; + } + + // The tile has a structure sitting on it + if (_turf.IsTileBlocked(mapGridData.Tile, CollisionGroup.MobMask)) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-tile-obstructed-message"), uid, user); + + return false; + } + + // The tile cannot be destroyed + var tileDef = (ContentTileDefinition) _tileDefMan[mapGridData.Tile.Tile.TypeId]; + + if (tileDef.Indestructible) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-tile-indestructible-message"), uid, user); + + return false; + } + } + + // Attempt to deconstruct an object + else + { + // The object is not in the whitelist + if (!TryComp(target, out var deconstructible) || !deconstructible.Deconstructable) + { + if (popMsgs) + _popup.PopupClient(Loc.GetString("rcd-component-deconstruct-target-not-on-whitelist-message"), uid, user); + + return false; + } + } + + return true; + } + + #endregion + + #region Entity construction/deconstruction + + private void FinalizeRCDOperation(EntityUid uid, RCDComponent component, MapGridData mapGridData, EntityUid? target, EntityUid user) + { + if (!_net.IsServer) + return; + + if (component.CachedPrototype.Prototype == null) + return; + + switch (component.CachedPrototype.Mode) + { + case RcdMode.ConstructTile: + _mapSystem.SetTile(mapGridData.GridUid, mapGridData.Component, mapGridData.Position, new Tile(_tileDefMan[component.CachedPrototype.Prototype].TileId)); + _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(user):user} used RCD to set grid: {mapGridData.GridUid} {mapGridData.Position} to {component.CachedPrototype.Prototype}"); + break; + + case RcdMode.ConstructObject: + var ent = Spawn(component.CachedPrototype.Prototype, _mapSystem.GridTileToLocal(mapGridData.GridUid, mapGridData.Component, mapGridData.Position)); + + switch (component.CachedPrototype.Rotation) + { + case RcdRotation.Fixed: + Transform(ent).LocalRotation = Angle.Zero; + break; + case RcdRotation.Camera: + Transform(ent).LocalRotation = Transform(uid).LocalRotation; + break; + case RcdRotation.User: + Transform(ent).LocalRotation = component.ConstructionDirection.ToAngle(); + break; + } + + _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(user):user} used RCD to spawn {ToPrettyString(ent)} at {mapGridData.Position} on grid {mapGridData.GridUid}"); + break; - return true; - //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. case RcdMode.Deconstruct: - if (tile.Tile.IsEmpty) - return false; - //They tried to decon a turf but... if (target == null) { - // the turf is blocked - if (IsTileBlocked(tile)) - { - _popup.PopupClient(Loc.GetString("rcd-component-tile-obstructed-message"), uid, user); - return false; - } - // the turf can't be destroyed (planet probably) - var tileDef = (ContentTileDefinition) _tileDefMan[tile.Tile.TypeId]; - if (tileDef.Indestructible) - { - _popup.PopupClient(Loc.GetString("rcd-component-tile-indestructible-message"), uid, user); - return false; - } + // Deconstruct tile (either converts the tile to lattice, or removes lattice) + var tile = (mapGridData.Tile.Tile.GetContentTileDefinition().ID != "Lattice") ? new Tile(_tileDefMan["Lattice"].TileId) : Tile.Empty; + _mapSystem.SetTile(mapGridData.GridUid, mapGridData.Component, mapGridData.Position, tile); + _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(user):user} used RCD to set grid: {mapGridData.GridUid} tile: {mapGridData.Position} open to space"); } - //They tried to decon a non-turf but it's not in the whitelist - else if (!_tag.HasTag(target.Value, "RCDDeconstructWhitelist")) + else { - _popup.PopupClient(Loc.GetString("rcd-component-deconstruct-target-not-on-whitelist-message"), uid, user); - return false; + // Deconstruct object + _adminLogger.Add(LogType.RCD, LogImpact.High, $"{ToPrettyString(user):user} used RCD to delete {ToPrettyString(target):target}"); + QueueDel(target); } - return true; - //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, thus we early return to avoid the tile set code. - case RcdMode.Walls: - if (tile.Tile.IsEmpty) - { - _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-wall-tile-not-empty-message"), uid, user); - return false; - } - - if (IsTileBlocked(tile)) - { - _popup.PopupClient(Loc.GetString("rcd-component-tile-obstructed-message"), uid, user); - return false; - } - return true; - case RcdMode.Airlock: - if (tile.Tile.IsEmpty) - { - _popup.PopupClient(Loc.GetString("rcd-component-cannot-build-airlock-tile-not-empty-message"), uid, user); - return false; - } - if (IsTileBlocked(tile)) - { - _popup.PopupClient(Loc.GetString("rcd-component-tile-obstructed-message"), uid, user); - return false; - } - return true; - default: - return false; //I don't know why this would happen, but sure I guess. Get out of here invalid state! + break; } } - private void NextMode(EntityUid uid, RCDComponent comp, EntityUid user) + #endregion + + #region Utility functions + + public bool TryGetMapGridData(EntityCoordinates location, [NotNullWhen(true)] out MapGridData? mapGridData) { - _audio.PlayPredicted(comp.SwapModeSound, uid, user); + mapGridData = null; + var gridUid = location.GetGridUid(EntityManager); - var mode = (int) comp.Mode; - mode = ++mode % _rcdModeCount; - comp.Mode = (RcdMode) mode; - Dirty(uid, comp); + if (!TryComp(gridUid, out var mapGrid)) + { + location = location.AlignWithClosestGridTile(1.75f, EntityManager); + gridUid = location.GetGridUid(EntityManager); - var msg = Loc.GetString("rcd-component-change-mode", ("mode", comp.Mode.ToString())); - _popup.PopupClient(msg, uid, user); + // Check if we got a grid ID the second time round + if (!TryComp(gridUid, out mapGrid)) + return false; + } + + gridUid = mapGrid.Owner; + + var tile = _mapSystem.GetTileRef(gridUid.Value, mapGrid, location); + var position = _mapSystem.TileIndicesFor(gridUid.Value, mapGrid, location); + mapGridData = new MapGridData(gridUid.Value, mapGrid, location, tile, position); + + return true; } - private bool IsTileBlocked(TileRef tile) + private bool DoesCustomBoundsIntersectWithFixture(PolygonShape boundingPolygon, Transform boundingTransform, EntityUid fixtureOwner, Fixture fixture) { - return _turf.IsTileBlocked(tile, CollisionGroup.MobMask); + var entXformComp = Transform(fixtureOwner); + var entXform = new Transform(new(), entXformComp.LocalRotation); + + return boundingPolygon.ComputeAABB(boundingTransform, 0).Intersects(fixture.Shape.ComputeAABB(entXform, 0)); + } + + public void UpdateCachedPrototype(EntityUid uid, RCDComponent component) + { + if (component.ProtoId.Id != component.CachedPrototype?.Prototype) + component.CachedPrototype = _protoManager.Index(component.ProtoId); + } + + #endregion +} + +public struct MapGridData +{ + public EntityUid GridUid; + public MapGridComponent Component; + public EntityCoordinates Location; + public TileRef Tile; + public Vector2i Position; + + public MapGridData(EntityUid gridUid, MapGridComponent component, EntityCoordinates location, TileRef tile, Vector2i position) + { + GridUid = gridUid; + Component = component; + Location = location; + Tile = tile; + Position = position; } } [Serializable, NetSerializable] public sealed partial class RCDDoAfterEvent : DoAfterEvent { - [DataField("location", required: true)] - public NetCoordinates Location = default!; + [DataField(required: true)] + public NetCoordinates Location { get; private set; } = default!; - [DataField("startingMode", required: true)] - public RcdMode StartingMode = default!; + [DataField] + public ProtoId StartingProtoId { get; private set; } = default!; - private RCDDoAfterEvent() - { - } + [DataField] + public int Cost { get; private set; } = 1; - public RCDDoAfterEvent(NetCoordinates location, RcdMode startingMode) + [DataField("fx")] + public NetEntity? Effect { get; private set; } = null; + + private RCDDoAfterEvent() { } + + public RCDDoAfterEvent(NetCoordinates location, ProtoId startingProtoId, int cost, NetEntity? effect = null) { Location = location; - StartingMode = startingMode; + StartingProtoId = startingProtoId; + Cost = cost; + Effect = effect; } public override DoAfterEvent Clone() => this; diff --git a/Resources/Locale/en-US/rcd/components/rcd-component.ftl b/Resources/Locale/en-US/rcd/components/rcd-component.ftl index b7920c9ede..bb65e76f3f 100644 --- a/Resources/Locale/en-US/rcd/components/rcd-component.ftl +++ b/Resources/Locale/en-US/rcd/components/rcd-component.ftl @@ -1,18 +1,66 @@ ### UI -# Shown when an RCD is examined in details range -rcd-component-examine-detail = It's currently on {$mode} mode. +rcd-component-examine-mode-details = It's currently set to '{$mode}' mode. +rcd-component-examine-build-details = It's currently set to build {MAKEPLURAL($name)}. + ### Interaction Messages -# Shown when changing RCD Mode -rcd-component-change-mode = The RCD is now set to {$mode} mode. +# Mode change +rcd-component-change-mode = The RCD is now set to '{$mode}' mode. +rcd-component-change-build-mode = The RCD is now set to build {MAKEPLURAL($name)}. -rcd-component-no-ammo-message = The RCD is out of ammo! -rcd-component-tile-obstructed-message = That tile is obstructed! -rcd-component-tile-indestructible-message = That tile can't be destroyed! +# Ammo count +rcd-component-no-ammo-message = The RCD has run out of charges! +rcd-component-insufficient-ammo-message = The RCD doesn't have enough charges left! + +# Deconstruction +rcd-component-tile-indestructible-message = That tile can't be destructed! rcd-component-deconstruct-target-not-on-whitelist-message = You can't deconstruct that! -rcd-component-cannot-build-floor-tile-not-empty-message = You can only build a floor on space! -rcd-component-cannot-build-wall-tile-not-empty-message = You cannot build a wall on space! -rcd-component-cannot-build-airlock-tile-not-empty-message = Cannot build an airlock on space! +rcd-component-nothing-to-deconstruct-message = There's nothing to deconstruct! +rcd-component-tile-obstructed-message = You can't deconstruct tiles when there's something on top of them! + +# Construction +rcd-component-no-valid-grid = You're too far into open space to build here! +rcd-component-must-build-on-empty-tile-message = A foundation already exists here! +rcd-component-cannot-build-on-empty-tile-message = You can't build that without a foundation! +rcd-component-must-build-on-subfloor-message = You can only build that on exposed subfloor! +rcd-component-cannot-build-on-subfloor-message = You can't build that on exposed subfloor! +rcd-component-cannot-build-on-occupied-tile-message = You can't build here, the space is already occupied! +rcd-component-cannot-build-identical-tile = That tile already exists there! + + +### Category names + +rcd-component-walls-and-flooring = Walls and flooring +rcd-component-windows-and-grilles = Windows and grilles +rcd-component-airlocks = Airlocks +rcd-component-electrical = Electrical +rcd-component-lighting = Lighting + + +### Prototype names (note: constructable items will be puralized) + +rcd-component-deconstruct = deconstruct +rcd-component-wall-solid = solid wall +rcd-component-floor-steel = steel tile +rcd-component-plating = hull plate +rcd-component-catwalk = catwalk +rcd-component-wall-reinforced = reinforced wall +rcd-component-grille = grille +rcd-component-window = window +rcd-component-window-directional = directional window +rcd-component-window-reinforced-directional = directional reinforced window +rcd-component-reinforced-window = reinforced window +rcd-component-airlock = standard airlock +rcd-component-airlock-glass = glass airlock +rcd-component-firelock = firelock +rcd-component-computer-frame = computer frame +rcd-component-machine-frame = machine frame +rcd-component-tube-light = light +rcd-component-window-bulb-light = small light +rcd-component-window-lv-cable = LV cable +rcd-component-window-mv-cable = MV cable +rcd-component-window-hv-cable = HV cable +rcd-component-window-cable-terminal = cable terminal diff --git a/Resources/Locale/en-US/ui/general.ftl b/Resources/Locale/en-US/ui/general.ftl new file mode 100644 index 0000000000..1471261dcb --- /dev/null +++ b/Resources/Locale/en-US/ui/general.ftl @@ -0,0 +1,3 @@ +### Loc for the various UI-related verbs +ui-verb-toggle-open = Toggle UI +verb-instrument-openui = Play Music diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml index 668f3776dd..03c870fa58 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml @@ -166,8 +166,8 @@ - type: entity id: CrateRCDAmmo parent: CrateEngineering - name: RCD ammo crate - description: 3 RCD ammo, each restoring 5 charges. + name: compressed matter crate + description: Contains three compressed matter cartridges. components: - type: StorageFill contents: @@ -178,7 +178,7 @@ id: CrateRCD parent: CrateEngineeringSecure name: RCD crate - description: A crate containing a single Rapid Construction Device. + description: A crate containing a single rapid construction device. components: - type: StorageFill contents: diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml index a8e28a1ef7..739464e961 100644 --- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml +++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml @@ -128,9 +128,10 @@ snap: - Wall components: - - type: Tag - tags: - - RCDDeconstructWhitelist + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 - type: Clickable - type: InteractionOutline - type: Sprite diff --git a/Resources/Prototypes/Entities/Effects/rcd.yml b/Resources/Prototypes/Entities/Effects/rcd.yml index adc6aa593c..902429818e 100644 --- a/Resources/Prototypes/Entities/Effects/rcd.yml +++ b/Resources/Prototypes/Entities/Effects/rcd.yml @@ -1,16 +1,115 @@ - type: entity - id: EffectRCDConstruction + id: EffectRCDBase + abstract: true noSpawn: true components: - type: Transform anchored: True - type: Sprite + snapCardinals: true + noRot: true drawdepth: Effects sprite: /Textures/Effects/rcd.rsi - state: construct - - type: TimedDespawn - lifetime: 3.2 + state: construct0 - type: Tag tags: - HideContextMenu - type: AnimationPlayer + +- type: entity + parent: EffectRCDBase + id: EffectRCDDeconstructPreview + noSpawn: true + components: + - type: Sprite + state: deconstructPreview + +- type: entity + parent: EffectRCDBase + id: EffectRCDConstruct0 + noSpawn: true + components: + - type: Sprite + state: construct0 + - type: TimedDespawn + lifetime: 1.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDConstruct1 + noSpawn: true + components: + - type: Sprite + state: construct1 + - type: TimedDespawn + lifetime: 2.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDConstruct2 + noSpawn: true + components: + - type: Sprite + state: construct2 + - type: TimedDespawn + lifetime: 3.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDConstruct3 + noSpawn: true + components: + - type: Sprite + state: construct3 + - type: TimedDespawn + lifetime: 4.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDConstruct4 + noSpawn: true + components: + - type: Sprite + state: construct4 + - type: TimedDespawn + lifetime: 5.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDDeconstruct2 + noSpawn: true + components: + - type: Sprite + state: deconstruct2 + - type: TimedDespawn + lifetime: 3.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDDeconstruct4 + noSpawn: true + components: + - type: Sprite + state: deconstruct4 + - type: TimedDespawn + lifetime: 5.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDDeconstruct6 + noSpawn: true + components: + - type: Sprite + state: deconstruct6 + - type: TimedDespawn + lifetime: 7.2 + +- type: entity + parent: EffectRCDBase + id: EffectRCDDeconstruct8 + noSpawn: true + components: + - type: Sprite + state: deconstruct8 + - type: TimedDespawn + lifetime: 9.2 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Markers/construction_ghost.yml b/Resources/Prototypes/Entities/Markers/construction_ghost.yml index d198ebdd51..be9cc915d9 100644 --- a/Resources/Prototypes/Entities/Markers/construction_ghost.yml +++ b/Resources/Prototypes/Entities/Markers/construction_ghost.yml @@ -7,4 +7,4 @@ color: '#3F38' - type: ConstructionGhost - type: Clickable - - type: InteractionOutline + - type: InteractionOutline \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index b46eded7d8..2b11c211e8 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -337,15 +337,35 @@ path: "/Audio/Items/drill_hit.ogg" - type: entity - name: RCD - parent: BaseItem id: RCD - description: An advanced construction device which can place/remove walls, floors, and airlocks quickly. + parent: BaseItem + name: RCD + description: The rapid construction device can be used to quickly place and remove various station structures and fixtures. Requires compressed matter to function. components: - type: RCD + availablePrototypes: + - WallSolid + - FloorSteel + - Plating + - Catwalk + - Grille + - Window + - WindowDirectional + - WindowReinforcedDirectional + - ReinforcedWindow + - Airlock + - AirlockGlass + - Firelock + - TubeLight + - BulbLight + - LVCable + - MVCable + - HVCable + - CableTerminal + - Deconstruct - type: LimitedCharges - maxCharges: 5 - charges: 5 + maxCharges: 30 + charges: 30 - type: UseDelay - type: Sprite sprite: Objects/Tools/rcd.rsi @@ -363,6 +383,12 @@ Plastic: 100 - type: StaticPrice price: 100 + - type: UserInterface + interfaces: + - key: enum.RcdUiKey.Key + type: RCDMenuBoundUserInterface + - type: ActivatableUI + key: enum.RcdUiKey.Key - type: entity id: RCDEmpty @@ -370,37 +396,50 @@ suffix: Empty components: - type: LimitedCharges - maxCharges: 5 charges: 0 + - type: RCD + availablePrototypes: + - WallSolid + - FloorSteel + - Plating + - Catwalk + - Grille + - Window + - WindowDirectional + - WindowReinforcedDirectional + - ReinforcedWindow + - Airlock + - AirlockGlass + - Firelock - type: entity id: RCDRecharging parent: RCD - name: experimental rcd - description: A bluespace-enhanced RCD that regenerates charges passively. + name: experimental RCD + description: A bluespace-enhanced rapid construction device that passively generates its own compressed matter. suffix: AutoRecharge components: - type: LimitedCharges - maxCharges: 3 - charges: 3 + maxCharges: 20 + charges: 20 - type: AutoRecharge - rechargeDuration: 30 + rechargeDuration: 10 - type: entity id: RCDExperimental parent: RCD suffix: Admeme - name: experimental rcd - description: A bluespace-enhanced RCD that regenerates charges passively. + name: experimental RCD + description: A bluespace-enhanced rapid construction device that passively generates its own compressed matter. components: - type: AutoRecharge - rechargeDuration: 5 + rechargeDuration: 1 - type: entity - name: RCD Ammo + name: compressed matter parent: BaseItem id: RCDAmmo - description: Ammo cartridge for an RCD. + description: A cartridge of raw matter compacted by bluespace technology. Used in rapid construction devices. components: - type: RCDAmmo - type: Sprite diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml index ce2b326129..ff02e315cb 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -138,48 +138,6 @@ sprite: Structures/Doors/Airlocks/Standard/hatch_maint.rsi # Glass - -- type: entity - id: AirlockGlass - parent: Airlock - name: glass airlock - components: - - type: MeleeSound - soundGroups: - Brute: - collection: GlassSmack - - type: Door - occludes: false - - type: Occluder - enabled: false - - type: Sprite - sprite: Structures/Doors/Airlocks/Glass/glass.rsi - - type: AnimationPlayer - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeAabb - bounds: "-0.49,-0.49,0.49,0.49" # don't want this colliding with walls or they won't close - density: 100 - mask: - - FullTileMask - layer: #removed opaque from the layer, allowing lasers to pass through glass airlocks - - GlassAirlockLayer - - type: LayerChangeOnWeld - unWeldedLayer: GlassAirlockLayer - weldedLayer: GlassLayer - - type: Construction - graph: Airlock - node: glassAirlock - - type: PaintableAirlock - group: Glass - - type: RadiationBlocker - resistance: 2 - - type: Tag - tags: - - GlassAirlock - # This tag is used to nagivate the Airlock construction graph. It's needed because the construction graph is shared between Airlock, AirlockGlass, and HighSecDoor - type: entity parent: AirlockGlass id: AirlockEngineeringGlass @@ -295,4 +253,4 @@ - type: Sprite sprite: Structures/Doors/Airlocks/Glass/centcomm.rsi - type: WiresPanelSecurity - securityLevel: medSecurity + securityLevel: medSecurity \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_assembly.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_assembly.yml index fcdb0d2dea..283c9f22ae 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_assembly.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_assembly.yml @@ -30,6 +30,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index 53a32e0f6f..abc86b2be8 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -111,6 +111,10 @@ - type: Damageable damageContainer: StructuralInorganic damageModifierSet: StrongMetallic + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -149,5 +153,53 @@ - type: BlockWeather placement: mode: SnapgridCenter + +- type: entity + id: AirlockRCDResistant + parent: Airlock + abstract: true + components: + - type: RCDDeconstructable + deconstructable: false - +- type: entity + id: AirlockGlass + parent: Airlock + name: glass airlock + components: + - type: MeleeSound + soundGroups: + Brute: + collection: GlassSmack + - type: Door + occludes: false + - type: Occluder + enabled: false + - type: Sprite + sprite: Structures/Doors/Airlocks/Glass/glass.rsi + - type: AnimationPlayer + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.49,-0.49,0.49,0.49" # don't want this colliding with walls or they won't close + density: 100 + mask: + - FullTileMask + layer: #removed opaque from the layer, allowing lasers to pass through glass airlocks + - GlassAirlockLayer + - type: LayerChangeOnWeld + unWeldedLayer: GlassAirlockLayer + weldedLayer: GlassLayer + - type: Construction + graph: Airlock + node: glassAirlock + - type: PaintableAirlock + group: Glass + - type: RadiationBlocker + resistance: 2 + - type: Tag + tags: + - GlassAirlock + # This tag is used to nagivate the Airlock construction graph. It's needed because the construction graph is shared between Airlock, AirlockGlass, and HighSecDoor \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml index 75b23f7071..293aaac273 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/external.yml @@ -1,5 +1,5 @@ - type: entity - parent: Airlock + parent: AirlockRCDResistant id: AirlockExternal suffix: External description: It opens, it closes, it might crush you, and there might be only space behind it. diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml index 9771f63388..5d6b1088f1 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/shuttle.yml @@ -1,5 +1,5 @@ - type: entity - parent: Airlock + parent: AirlockRCDResistant id: AirlockShuttle suffix: Docking name: external airlock diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index e677ef185b..0dd65ab4d0 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -19,6 +19,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 4 + delay: 6 + fx: EffectRCDDeconstruct6 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml index 8cf75e89e1..3f4306e4aa 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/frame.yml @@ -25,6 +25,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 4 + delay: 6 + fx: EffectRCDDeconstruct6 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml index 8dfe2f62a5..b8fb203b51 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml @@ -43,6 +43,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 6 + delay: 6 + fx: EffectRCDDeconstruct6 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml b/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml index d6c087af0a..06e9d2219a 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/SecretDoor/secret_door.yml @@ -41,6 +41,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -97,6 +101,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/assembly.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/assembly.yml index 8d9cedac03..5d47d9c5c4 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/assembly.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/assembly.yml @@ -26,6 +26,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index d03765d4fc..d58273edcc 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -66,7 +66,11 @@ damageContainer: Inorganic damageModifierSet: Glass - type: ExaminableDamage - messages: WindowMessages + messages: WindowMessages + - type: RCDDeconstructable + cost: 8 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml index b4b198eb77..ef89088d1a 100644 --- a/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml +++ b/Resources/Prototypes/Entities/Structures/Lighting/base_lighting.yml @@ -40,6 +40,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 4 + delay: 2 + fx: EffectRCDDeconstruct2 - type: Destructible thresholds: - trigger: @@ -70,7 +74,7 @@ mode: SnapgridCenter snap: - Wallmount - + - type: entity name: light description: "A light fixture. Draws power and produces light when equipped with a light tube." diff --git a/Resources/Prototypes/Entities/Structures/Power/cable_terminal.yml b/Resources/Prototypes/Entities/Structures/Power/cable_terminal.yml index da724014dc..2e8f047c21 100644 --- a/Resources/Prototypes/Entities/Structures/Power/cable_terminal.yml +++ b/Resources/Prototypes/Entities/Structures/Power/cable_terminal.yml @@ -17,6 +17,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Power/cables.yml b/Resources/Prototypes/Entities/Structures/Power/cables.yml index de66dfc66d..a81c89de0f 100644 --- a/Resources/Prototypes/Entities/Structures/Power/cables.yml +++ b/Resources/Prototypes/Entities/Structures/Power/cables.yml @@ -43,6 +43,10 @@ lowVoltageNode: power - type: CableVis node: power + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 - type: entity parent: CableBase diff --git a/Resources/Prototypes/Entities/Structures/Walls/fence_metal.yml b/Resources/Prototypes/Entities/Structures/Walls/fence_metal.yml index 88d2f272c0..1dca59225c 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/fence_metal.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/fence_metal.yml @@ -10,9 +10,6 @@ Brute: path: "/Audio/Weapons/grille_hit.ogg" - - type: Tag - tags: - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/fence.rsi drawdepth: WallTops @@ -78,6 +75,10 @@ True: { visible: True } False: { visible: False } - type: AnimationPlayer + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 - type: entity parent: BaseFenceMetal diff --git a/Resources/Prototypes/Entities/Structures/Walls/fence_wood.yml b/Resources/Prototypes/Entities/Structures/Walls/fence_wood.yml index f2b03aaeb8..55b7e40803 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/fence_wood.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/fence_wood.yml @@ -12,7 +12,6 @@ "/Audio/Weapons/boxingpunch1.ogg" - type: Tag tags: - - RCDDeconstructWhitelist - Wooden - type: Sprite sprite: Structures/Walls/wooden_fence.rsi @@ -24,6 +23,10 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: Wood + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Walls/grille.yml b/Resources/Prototypes/Entities/Structures/Walls/grille.yml index b532db221d..11ada142fa 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/grille.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/grille.yml @@ -9,9 +9,10 @@ Brute: path: "/Audio/Weapons/grille_hit.ogg" - - type: Tag - tags: - - RCDDeconstructWhitelist + - type: RCDDeconstructable + cost: 6 + delay: 4 + fx: EffectRCDDeconstruct4 - type: CanBuildWindowOnTop - type: Sprite drawdepth: Walls @@ -120,9 +121,10 @@ - type: Icon sprite: Structures/Walls/grille.rsi state: grille_broken - - type: Tag - tags: - - RCDDeconstructWhitelist + - type: RCDDeconstructable + cost: 6 + delay: 4 + fx: EffectRCDDeconstruct4 - type: Construction graph: Grille node: grilleBroken diff --git a/Resources/Prototypes/Entities/Structures/Walls/railing.yml b/Resources/Prototypes/Entities/Structures/Walls/railing.yml index 95d16742d5..a23c559aba 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/railing.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/railing.yml @@ -57,6 +57,10 @@ - type: Construction graph: Railing node: railing + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 - type: entity parent: BaseStructure @@ -126,6 +130,10 @@ - type: Construction graph: Railing node: railingCorner + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 - type: entity parent: BaseStructure @@ -186,7 +194,11 @@ - type: Construction graph: Railing node: railingCornerSmall - + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 + - type: entity parent: BaseStructure id: RailingRound @@ -261,3 +273,7 @@ - type: Construction graph: Railing node: railingRound + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index f06c0fc424..8eca58b124 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -59,11 +59,14 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/brick.rsi - type: Icon sprite: Structures/Walls/brick.rsi + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -90,7 +93,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/clock.rsi - type: Icon @@ -123,7 +125,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/clown.rsi - type: Icon @@ -131,6 +132,10 @@ - type: Construction graph: Girder node: bananiumWall + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -156,7 +161,6 @@ components: - type: Tag tags: - - RCDDeconstructWhitelist - Wall - Structure - type: Sprite @@ -190,7 +194,6 @@ components: - type: Tag tags: - - RCDDeconstructWhitelist - Wall - type: Sprite sprite: Structures/Walls/cult.rsi @@ -223,7 +226,6 @@ tags: - Wall - Debug - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/debug.rsi - type: Icon @@ -253,11 +255,14 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/diamond.rsi - type: Icon sprite: Structures/Walls/diamond.rsi + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -283,7 +288,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/gold.rsi - type: Icon @@ -291,6 +295,10 @@ - type: Construction graph: Girder node: goldWall + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -325,7 +333,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/ice.rsi - type: Icon @@ -355,7 +362,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/plasma.rsi - type: Icon @@ -363,6 +369,10 @@ - type: Construction graph: Girder node: plasmaWall + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -399,7 +409,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/plastic.rsi - type: Icon @@ -407,6 +416,10 @@ - type: Construction graph: Girder node: plasticWall + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -459,7 +472,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Destructible thresholds: - trigger: @@ -604,7 +616,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/riveted.rsi - type: Icon @@ -639,11 +650,14 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/sandstone.rsi - type: Icon sprite: Structures/Walls/sandstone.rsi + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -669,7 +683,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/silver.rsi - type: Icon @@ -677,6 +690,10 @@ - type: Construction graph: Girder node: silverWall + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -842,7 +859,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/solid.rsi - type: WallReplacementMarker @@ -851,6 +867,10 @@ node: wall - type: Icon sprite: Structures/Walls/solid.rsi + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -1012,7 +1032,6 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/web.rsi - type: Icon @@ -1224,11 +1243,14 @@ - type: Tag tags: - Wall - - RCDDeconstructWhitelist - type: Sprite sprite: Structures/Walls/cobblebrick.rsi - type: Icon sprite: Structures/Walls/cobblebrick.rsi + - type: RCDDeconstructable + cost: 6 + delay: 8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Windows/mining.yml b/Resources/Prototypes/Entities/Structures/Windows/mining.yml index 910c3daae2..82d11b732b 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/mining.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/mining.yml @@ -1,7 +1,7 @@ - type: entity id: MiningWindow name: mining window - parent: Window + parent: WindowRCDResistant components: - type: Sprite drawdepth: WallTops diff --git a/Resources/Prototypes/Entities/Structures/Windows/plasma.yml b/Resources/Prototypes/Entities/Structures/Windows/plasma.yml index 0dd2a1b06c..36a12f2d84 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/plasma.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/plasma.yml @@ -1,7 +1,7 @@ - type: entity id: PlasmaWindow name: plasma window - parent: Window + parent: WindowRCDResistant components: - type: Sprite drawdepth: WallTops @@ -55,7 +55,7 @@ - type: entity id: PlasmaWindowDirectional - parent: WindowDirectional + parent: WindowDirectionalRCDResistant name: directional plasma window description: Don't smudge up the glass down there. placement: diff --git a/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml b/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml index 1c79644ce4..d8b6c7d11d 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml @@ -14,6 +14,10 @@ - type: Damageable damageContainer: StructuralInorganic damageModifierSet: RGlass + - type: RCDDeconstructable + cost: 6 + delay: 6 + fx: EffectRCDDeconstruct6 - type: Destructible thresholds: - trigger: @@ -99,6 +103,10 @@ sprite: Structures/Windows/cracks_directional.rsi - type: Damageable damageModifierSet: RGlass + - type: RCDDeconstructable + cost: 4 + delay: 4 + fx: EffectRCDDeconstruct4 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Windows/rplasma.yml b/Resources/Prototypes/Entities/Structures/Windows/rplasma.yml index d81204be07..93859b1db2 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/rplasma.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/rplasma.yml @@ -1,7 +1,7 @@ - type: entity id: ReinforcedPlasmaWindow name: reinforced plasma window - parent: Window + parent: WindowRCDResistant components: - type: Sprite drawdepth: WallTops @@ -58,7 +58,7 @@ - type: entity id: PlasmaReinforcedWindowDirectional - parent: WindowDirectional + parent: WindowDirectionalRCDResistant name: directional reinforced plasma window description: Don't smudge up the glass down there. placement: diff --git a/Resources/Prototypes/Entities/Structures/Windows/ruranium.yml b/Resources/Prototypes/Entities/Structures/Windows/ruranium.yml index 6ed2cc5926..e26fec65b7 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/ruranium.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/ruranium.yml @@ -1,7 +1,7 @@ - type: entity id: ReinforcedUraniumWindow name: reinforced uranium window - parent: Window + parent: WindowRCDResistant components: - type: Sprite drawdepth: WallTops diff --git a/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml b/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml index d953cc588a..f1b840c143 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/shuttle.yml @@ -1,7 +1,7 @@ - type: entity id: ShuttleWindow name: shuttle window - parent: Window + parent: WindowRCDResistant components: - type: Sprite drawdepth: WallTops diff --git a/Resources/Prototypes/Entities/Structures/Windows/uranium.yml b/Resources/Prototypes/Entities/Structures/Windows/uranium.yml index b956d369fa..e5228bc593 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/uranium.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/uranium.yml @@ -1,7 +1,7 @@ - type: entity id: UraniumWindow name: uranium window - parent: Window + parent: WindowRCDResistant components: - type: Sprite drawdepth: WallTops diff --git a/Resources/Prototypes/Entities/Structures/Windows/window.yml b/Resources/Prototypes/Entities/Structures/Windows/window.yml index 375d0c16ae..606c54e35b 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/window.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/window.yml @@ -16,7 +16,6 @@ arc: 360 # interact despite grilles - type: Tag tags: - - RCDDeconstructWhitelist - ForceFixRotations - Window - type: Sprite @@ -42,6 +41,10 @@ - type: ExaminableDamage messages: WindowMessages - type: Repairable + - type: RCDDeconstructable + cost: 6 + delay: 4 + fx: EffectRCDDeconstruct4 - type: Destructible thresholds: - trigger: @@ -89,6 +92,14 @@ - type: StaticPrice price: 100 - type: BlockWeather + +- type: entity + id: WindowRCDResistant + parent: Window + abstract: true + components: + - type: RCDDeconstructable + deconstructable: false - type: entity id: WindowDirectional @@ -139,6 +150,10 @@ damageModifierSet: Glass - type: ExaminableDamage messages: WindowMessages + - type: RCDDeconstructable + cost: 4 + delay: 2 + fx: EffectRCDDeconstruct2 - type: Destructible thresholds: - trigger: @@ -181,6 +196,14 @@ - type: StaticPrice price: 10 +- type: entity + id: WindowDirectionalRCDResistant + parent: WindowDirectional + abstract: true + components: + - type: RCDDeconstructable + deconstructable: false + - type: entity id: WindowFrostedDirectional parent: WindowDirectional diff --git a/Resources/Prototypes/Entities/Structures/catwalk.yml b/Resources/Prototypes/Entities/Structures/catwalk.yml index c727c24952..6dee91365e 100644 --- a/Resources/Prototypes/Entities/Structures/catwalk.yml +++ b/Resources/Prototypes/Entities/Structures/catwalk.yml @@ -51,3 +51,7 @@ max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] + - type: RCDDeconstructable + cost: 2 + delay: 2 + fx: EffectRCDDeconstruct2 \ No newline at end of file diff --git a/Resources/Prototypes/RCD/rcd.yml b/Resources/Prototypes/RCD/rcd.yml new file mode 100644 index 0000000000..cb2c9ed234 --- /dev/null +++ b/Resources/Prototypes/RCD/rcd.yml @@ -0,0 +1,294 @@ +# Operations +- type: rcd + id: Invalid # Hidden prototype - do not add to RCDs + mode: Invalid + +- type: rcd + id: Deconstruct + name: rcd-component-deconstruct + category: Main + sprite: /Textures/Interface/Radial/RCD/deconstruct.png + mode: Deconstruct + prototype: EffectRCDDeconstructPreview + rotation: Camera + +- type: rcd + id: DeconstructLattice # Hidden prototype - do not add to RCDs + mode: Deconstruct + cost: 2 + delay: 1 + rotation: Camera + fx: EffectRCDDeconstruct2 + +- type: rcd + id: DeconstructTile # Hidden prototype - do not add to RCDs + mode: Deconstruct + cost: 4 + delay: 4 + rotation: Camera + fx: EffectRCDDeconstruct4 + +# Flooring +- type: rcd + id: Plating + name: rcd-component-plating + category: WallsAndFlooring + sprite: /Textures/Interface/Radial/RCD/plating.png + mode: ConstructTile + prototype: Plating + cost: 1 + delay: 1 + collisionMask: InteractImpassable + rules: + - CanBuildOnEmptyTile + fx: EffectRCDConstruct1 + +- type: rcd + id: FloorSteel + name: rcd-component-floor-steel + category: WallsAndFlooring + sprite: /Textures/Interface/Radial/RCD/metal_tile.png + mode: ConstructTile + prototype: FloorSteel + cost: 1 + delay: 1 + collisionMask: InteractImpassable + rules: + - CanBuildOnEmptyTile + fx: EffectRCDConstruct1 + +- type: rcd + id: Catwalk + name: rcd-component-catwalk + category: WallsAndFlooring + sprite: /Textures/Interface/Radial/RCD/catwalk.png + mode: ConstructObject + prototype: Catwalk + cost: 1 + delay: 1 + collisionMask: InteractImpassable + rules: + - MustBuildOnSubfloor + - IsCatwalk + rotation: Fixed + fx: EffectRCDConstruct1 + +# Walls +- type: rcd + id: WallSolid + name: rcd-component-wall-solid + category: WallsAndFlooring + sprite: /Textures/Interface/Radial/RCD/solid_wall.png + mode: ConstructObject + prototype: WallSolid + cost: 4 + delay: 2 + collisionMask: FullTileMask + rotation: Fixed + fx: EffectRCDConstruct2 + +- type: rcd + id: Grille + name: rcd-component-grille + category: WindowsAndGrilles + sprite: /Textures/Interface/Radial/RCD/grille.png + mode: ConstructObject + prototype: Grille + cost: 4 + delay: 2 + collisionMask: FullTileMask + rotation: Fixed + fx: EffectRCDConstruct2 + +# Windows +- type: rcd + id: Window + name: rcd-component-window + category: WindowsAndGrilles + sprite: /Textures/Interface/Radial/RCD/window.png + mode: ConstructObject + prototype: Window + cost: 3 + delay: 2 + collisionMask: FullTileMask + rules: + - IsWindow + rotation: Fixed + fx: EffectRCDConstruct2 + +- type: rcd + id: WindowDirectional + name: rcd-component-window-directional + category: WindowsAndGrilles + sprite: /Textures/Interface/Radial/RCD/directional.png + mode: ConstructObject + prototype: WindowDirectional + cost: 2 + delay: 1 + collisionMask: FullTileMask + collisionBounds: "-0.23,-0.49,0.23,-0.36" + rules: + - IsWindow + rotation: User + fx: EffectRCDConstruct1 + +- type: rcd + id: ReinforcedWindow + name: rcd-component-reinforced-window + category: WindowsAndGrilles + sprite: /Textures/Interface/Radial/RCD/window_reinforced.png + mode: ConstructObject + prototype: ReinforcedWindow + cost: 4 + delay: 3 + collisionMask: FullTileMask + rules: + - IsWindow + rotation: User + fx: EffectRCDConstruct3 + +- type: rcd + id: WindowReinforcedDirectional + name: rcd-component-window-reinforced-directional + category: WindowsAndGrilles + sprite: /Textures/Interface/Radial/RCD/directional_reinforced.png + mode: ConstructObject + prototype: WindowReinforcedDirectional + cost: 3 + delay: 2 + collisionMask: FullTileMask + collisionBounds: "-0.23,-0.49,0.23,-0.36" + rules: + - IsWindow + rotation: User + fx: EffectRCDConstruct2 + +# Airlocks +- type: rcd + id: Airlock + name: rcd-component-airlock + category: Airlocks + sprite: /Textures/Interface/Radial/RCD/airlock.png + mode: ConstructObject + prototype: Airlock + cost: 4 + delay: 4 + collisionMask: FullTileMask + rotation: Camera + fx: EffectRCDConstruct4 + +- type: rcd + id: AirlockGlass + name: rcd-component-airlock-glass + category: Airlocks + sprite: /Textures/Interface/Radial/RCD/glass_airlock.png + mode: ConstructObject + prototype: AirlockGlass + cost: 4 + delay: 4 + collisionMask: FullTileMask + rotation: Camera + fx: EffectRCDConstruct4 + +- type: rcd + id: Firelock + name: rcd-component-firelock + category: Airlocks + sprite: /Textures/Interface/Radial/RCD/firelock.png + mode: ConstructObject + prototype: Firelock + cost: 4 + delay: 3 + collisionMask: FullTileMask + rotation: Camera + fx: EffectRCDConstruct3 + +# Lighting +- type: rcd + id: TubeLight + name: rcd-component-tube-light + category: Lighting + sprite: /Textures/Interface/Radial/RCD/tube_light.png + mode: ConstructObject + prototype: Poweredlight + cost: 2 + delay: 1 + collisionMask: TabletopMachineMask + collisionBounds: "-0.23,-0.49,0.23,-0.36" + rotation: User + fx: EffectRCDConstruct1 + +- type: rcd + id: BulbLight + name: rcd-component-window-bulb-light + category: Lighting + sprite: /Textures/Interface/Radial/RCD/bulb_light.png + mode: ConstructObject + prototype: PoweredSmallLight + cost: 2 + delay: 1 + collisionMask: TabletopMachineMask + collisionBounds: "-0.23,-0.49,0.23,-0.36" + rotation: User + fx: EffectRCDConstruct1 + +# Electrical +- type: rcd + id: LVCable + name: rcd-component-window-lv-cable + category: Electrical + sprite: /Textures/Interface/Radial/RCD/lv_coil.png + mode: ConstructObject + prototype: CableApcExtension + cost: 1 + delay: 0 + collisionMask: InteractImpassable + rules: + - MustBuildOnSubfloor + rotation: Fixed + fx: EffectRCDConstruct0 + +- type: rcd + id: MVCable + name: rcd-component-window-mv-cable + category: Electrical + sprite: /Textures/Interface/Radial/RCD/mv_coil.png + mode: ConstructObject + prototype: CableMV + cost: 1 + delay: 0 + collisionMask: InteractImpassable + rules: + - MustBuildOnSubfloor + rotation: Fixed + fx: EffectRCDConstruct0 + +- type: rcd + id: HVCable + name: rcd-component-window-hv-cable + category: Electrical + sprite: /Textures/Interface/Radial/RCD/hv_coil.png + mode: ConstructObject + prototype: CableHV + cost: 1 + delay: 0 + collisionMask: InteractImpassable + rules: + - MustBuildOnSubfloor + rotation: Fixed + fx: EffectRCDConstruct0 + +- type: rcd + id: CableTerminal + name: rcd-component-window-cable-terminal + category: Electrical + sprite: /Textures/Interface/Radial/RCD/cable_terminal.png + mode: ConstructObject + prototype: CableTerminal + cost: 1 + delay: 0 + collisionMask: InteractImpassable + rules: + - MustBuildOnSubfloor + rotation: User + fx: EffectRCDConstruct0 \ No newline at end of file diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index fe8c5a3cc1..8f0038915d 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1034,9 +1034,6 @@ - type: Tag id: RawMaterial -- type: Tag - id: RCDDeconstructWhitelist - # Give this to something that doesn't need any special recycler behavior and just needs deleting. - type: Tag id: Recyclable diff --git a/Resources/Textures/Effects/rcd.rsi/construct.png b/Resources/Textures/Effects/rcd.rsi/construct.png deleted file mode 100644 index f4be36c9bf4363ad314986a38dfa3dd7a506ea6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3612 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 a+X}&kW$HhP#uT9I6EM4EfvPrgjs73@Qy{Pa diff --git a/Resources/Textures/Effects/rcd.rsi/construct0.png b/Resources/Textures/Effects/rcd.rsi/construct0.png new file mode 100644 index 0000000000000000000000000000000000000000..d83fa0506c6776eefcde77cb0a4e5203f70efe98 GIT binary patch literal 1095 zcmV-N1i1T&P)003YJ1^@s6nkRXg000CINkl$#fB^)q-zTO16ndjAkeLp zjP0PEoi2mTrh4kT-tWy|NKw%=YIWMvO7F8xvW(@0AVuG0<0{@0E=>PI_>0r%jWu zH;nY!CbwI$-!{fLPTHWaudii5$4Q%%XE)FGsaAvh#d-7a9 zr86QTf_|W1jY$9Gp8oY!O4Wd`t~@!q`6bzxuSG;8v$ZLg`#W~q@7{>>bZ`UE5A>^@ z@68W3fAnmjk*67-RDFhRGI6CR->4|EV_HwHtG<2SC4JvW1d$17-^) zcSK*&fGg`8=TiG4a=E|rubVzNv)(>h8_Wx#KdNti7#`BsVtwOWRzyUO)zx)g?WC`@ExxM3R=i;!M+1jjzXouFf%{YBkmm+H_~ok2C|u zVIGhSIGuiIW8~`%mkc;X1{4vs4CJ#6`eB(zKdKBEn;}?h9xNCF!t1-a-HI!{wtG9T z<+p9=hwhmsUC#shkZZQj9Q-zNCs4X7Cb(4PHK|@Cm4`D zA@S0WWJ!LU_Jpi-TSc`D)@>C9{i0e1^!2sqwu-C=jGMk~Vz(ZUJsIo?(exe}kPN7s z0htGkmwvWT3aaUBq2w;Q%{<_8&I3MfeeFka8VBQyWFYj_^i?w;$FrfYslPhU9M0X> zQSL7tzIit1vc`S)B>h>g=b_ImQvZL~73MQ{iWW1j9ZFxj3r0WL`m5SI<28wczUGsN zIItoB7!VR`K<$UoN!O82OM|4TvX@Ng~@jF>f6ek%WOV>1&!~W;r2`h94FHE z%4Xi>I{tS|y11y91r6UkP$KE))8T-G8<1asDi{C*0tN)YfB*ng!2kdN0000000000 z000000000>2FtMkfF6(@5Hw&<2w*_KfB+Z}Fd#(`L<+~VaXgzUe*t3ehmV#4$AbU> N002ovPDHLkV1lq$_jCXN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/rcd.rsi/construct1.png b/Resources/Textures/Effects/rcd.rsi/construct1.png new file mode 100644 index 0000000000000000000000000000000000000000..0b597fe1080de7a05f31f43f2c38b85a9bbc90c8 GIT binary patch literal 3663 zcmai1c{p3!+TW3imekOma??Rni&hoow5C=#)mA7D&G8cb|Lz`}Tg;de+|i-S2wWdVkNme!rV%oKJ05 z+^z@!z-F|)of`l^Y``&jBMj`Xs#H7!0A+Qwo$a5|Lkm=wzjrcrwUX*zd2Q*csNW?EZ|O7PiqWkNHmO(90~109XWCjNh+1NLx6qz;bfp0*cg?v?z`uJ z8By%VHwEN?^W*_%E!J}G;~EGMt=M_iMl5(Ktd-jUgkFOH{{VKMk5)`U(vP8_TEHE6 zB}M2TANg|sXw;h{rp(hr%uP+bmnQSIe00sEUsqi6;$0WxWXUG09bU`60cWQM7wn|H zSje&}%=dClgfQ>4WV&a0To0AG-g0i4{_ZvDkstPM0$fqHPZ(^}Xs9wqbZ67z_ELvA zdi)0vxjU+X0lvi&hX0Ive54b)`el$QPai6?k%3{fud|1qTpoS^4$*3!WrUD}%-Xn6 zPrIxKM9t7^jzpypE9ghU%#{G&SgYJpQKW>mz^Hr>hsBXc`Y6;ZGCu zKHe&ik4R@UE9-$`G%t>wAY@>H3$(8%3h=8r#4s+@bgb?qT+Dr3Ti!+N1CsXrL;ky6d3}@K--G41YHgRU}6H;Lnb4_iA zr5N_n{*ChU6lo2`Ila@sAkkr%^A=kp36~vXI1jZqzg{|p*J#JGAz@SEvD3OFx+lz! z&4{<=!SyRpt;ihP6I~gP>2!J~s4T=?NNZmt3WvEfjMcgK1=#wpFSK)2;|5TY5O^`2O7r3QIrb`O{7 z?qE?qXH83Gu1K6_t8(X(%aT=((Fvq6p3A%PC&T9sDBPD6FW9qkAEDfaxo2T#-==xf zxZb~Zp*BJ|vQ4e_M?_q&<>66G=NC)kQEs=W#5>Y=F4>{B`-)b?t+d&nCKfU&Mp^;a z4=TnjNvGFa2A0b)N?%{Dh;0$shKaYS*G{bDR_&n@lBD+d)*it8p9t(g#9>~C?+D_% zm0kzccB1;HUgCi)S(zIf%xk}Q(YLX$VU^OiZtNc~ML`$#R}%l0*711<`ak0`+zu!> zY^J8NR(I28qSr*bNZ+}hRSG6gcg6{Bv&zj$Kuq@apRj!P$GaV_0j@g7j7m~}SFmK| zH88!mB-iVYdT-yd^50eDt3+?)T3Ehbfv7MNww2B^;nph@za>J(#>a-8BaD?qWeL_O zVCgq?l=Pb<_Eci^YH|6TxNh>iaz^?<6g}gEh{%~6n`EeDf{zhF7fWXa$@i{|>Xspu zThxoIDNU?3!K#$i!>wY>Y0M=2XeE%FoDW^1`Zr@ReU@!Yb@daIqR0notRKn)p2hAO zKXa5qo-3!B`~x`t+Q-OfapYWI?W;KrpGBjh%o)tcQ~Vlc+>1r4o(TZ1cf;Ch`kew3R0zqzq0v$X5Nj67OZ z*gUtG#6G9wuF!U?LGU0A*8^+iltF)AKy9YiD<2F7yWSpJ)MzfA~O^kv3p`E@s zsHMI9ej#-a$M!xyUrk&44JZC#E;B}w_@+m={$Tyqj7kvGQWm#c3@4`r>8k5NMdR}k zrG7r);zhWAFrBx4qny{?93oPpLDVmzFLCk#UCP<*AbjkzH|coNjBcUcW4uPMUcScC z_*%}3G1bN=O|QyovLW&d;S&p}uOl97`8y>&oQ?vqG`^_8+M8rpK||f>JlH!ju1XrB z3{GrjgR}_EeK-DZr5hdmmx1>=MGaxl*y5tibO4v&4#6{G)o9FU@K>TyCq)oIkbCp6KzALKIvvWXT=8x?*X&;Br z_``5o{;@WDznk^D!3sZ*w>2-Zav|IO!}JXzUZ=hDR{6Z)Y+G|q66H&vi|7#=R%~S* z2;1_G7Wp4z>1y!(g1Up=x_{NBJ`aTX)#+V#Swou|_nmILviMiq$Y}!XpMSE{3k^e} z4TG8xcMKEvKtIq3F!RxRh18tz8~#4Jl#A*JGM;W|YG4CnWDG>{z?y@z5wruXEiL_@ zyw==<=Hd~!Bnl3wlA!0tU-#Ioi+a-`6ME2jgJ;M))l**Q8Re}nVijM4I|+Z&R&Y5I zXMyv*$sWJdW>W^@pkv*v$3S+82H%K6jDNv&?iG>Q>=`lN&&d>;lIH2pPCcWLU5V-y zBIX?(VK-#$-2kt%xlLfnR7g(-h%cOpJ23mP|g&6Eb91=K>mq z&czFZF7$Mz64`ETZP2=v@QL)z^KF#MV#u94NN~m@Vow|yrwV>T-i4=G?gfcfcE9Xf zp9@OV!X!#^GGmvzX+)!c|IDN-oOgJ+bDxgG^nhj?0EVB63Lt%=q_W2}BS=@uWK1IJ z3b8o&)U4y$b}(daz%*(%uqQ=?grp zOEQoRG3azFy{a|&YBqAm4$i2${QSH7p2Lyy33LttCvhzA>NIO0mNnPN8O&|-jRYxX z8TB{H)#-zS!-E+&-x%@P{wAS4O=}lPCcjJnA`J+HcidlIxHu1I;k}bElBbB+`RK-GbxarS#7wm5aN?#F8ZO9SoI3k16M6rIisM_ zPRQ@7tlDu%T z&zjg$`(P^`f4+Y09^u_Bj#-mQ?gfvak4phWc@M02FkA={oX&&hu?fZ+<_@r*Gz<0+ zjtmFy6G#B>7q)mnODqf^!)@SXgPU}#fP;wNPam{YB@LGqx063Rc1Sf`XyFU@5yF8}8iPXp$`AHZXgrwAmro_1?xLB%Q|O2pYte zy(=YX&3i|~&ZUL77!roBJAAS2zq#X==5eUQ-0e$VoLcr#Zxu~LY&Km)hXTF;4v-_K zyG|bf02nCK{@nl|T6D&G8cb|Lz`}Tg;de+|i-S2wWdVkNme!rV%oKJ05 z+^z@!z-F|)of`l^Y``&jBMj`Xs#H7!0A+Qwo$a5|Lkm=wzjrcrwUX*zd2Q*csNW?EZ|O7PiqWkNHmO(90~109XWCjNh+1NLx6qz;bfp0*cg?v?z`uJ z8By%VHwEN?^W*_%E!J}G;~EGMt=M_iMl5(Ktd-jUgkFOH{{VKMk5)`U(vP8_TEHE6 zB}M2TANg|sXw;h{rp(hr%uP+bmnQSIe00sEUsqi6;$0WxWXUG09bU`60cWQM7wn|H zSje&}%=dClgfQ>4WV&a0To0AG-g0i4{_ZvDkstPM0$fqHPZ(^}Xs9wqbZ67z_ELvA zdi)0vxjU+X0lvi&hX0Ive54b)`el$QPai6?k%3{fud|1qTpoS^4$*3!WrUD}%-Xn6 zPrIxKM9t7^jzpypE9ghU%#{G&SgYJpQKW>mz^Hr>hsBXc`Y6;ZGCu zKHe&ik4R@UE9-$`G%t>wAY@>H3$(8%3h=8r#4s+@bgb?qT+Dr3Ti!+N1CsXrL;ky6d3}@K--G41YHgRU}6H;Lnb4_iA zr5N_n{*ChU6lo2`Ila@sAkkr%^A=kp36~vXI1jZqzg{|p*J#JGAz@SEvD3OFx+lz! z&4{<=!SyRpt;ihP6I~gP>2!J~s4T=?NNZmt3WvEfjMcgK1=#wpFSK)2;|5TY5O^`2O7r3QIrb`O{7 z?qE?qXH83Gu1K6_t8(X(%aT=((Fvq6p3A%PC&T9sDBPD6FW9qkAEDfaxo2T#-==xf zxZb~Zp*BJ|vQ4e_M?_q&<>66G=NC)kQEs=W#5>Y=F4>{B`-)b?t+d&nCKfU&Mp^;a z4=TnjNvGFa2A0b)N?%{Dh;0$shKaYS*G{bDR_&n@lBD+d)*it8p9t(g#9>~C?+D_% zm0kzccB1;HUgCi)S(zIf%xk}Q(YLX$VU^OiZtNc~ML`$#R}%l0*711<`ak0`+zu!> zY^J8NR(I28qSr*bNZ+}hRSG6gcg6{Bv&zj$Kuq@apRj!P$GaV_0j@g7j7m~}SFmK| zH88!mB-iVYdT-yd^50eDt3+?)T3Ehbfv7MNww2B^;nph@za>J(#>a-8BaD?qWeL_O zVCgq?l=Pb<_Eci^YH|6TxNh>iaz^?<6g}gEh{%~6n`EeDf{zhF7fWXa$@i{|>Xspu zThxoIDNU?3!K#$i!>wY>Y0M=2XeE%FoDW^1`Zr@ReU@!Yb@daIqR0notRKn)p2hAO zKXa5qo-3!B`~x`t+Q-OfapYWI?W;KrpGBjh%o)tcQ~Vlc+>1r4o(TZ1cf;Ch`kew3R0zqzq0v$X5Nj67OZ z*gUtG#6G9wuF!U?LGU0A*8^+iltF)AKy9YiD<2F7yWSpJ)MzfA~O^kv3p`E@s zsHMI9ej#-a$M!xyUrk&44JZC#E;B}w_@+m={$Tyqj7kvGQWm#c3@4`r>8k5NMdR}k zrG7r);zhWAFrBx4qny{?93oPpLDVmzFLCk#UCP<*AbjkzH|coNjBcUcW4uPMUcScC z_*%}3G1bN=O|QyovLW&d;S&p}uOl97`8y>&oQ?vqG`^_8+M8rpK||f>JlH!ju1XrB z3{GrjgR}_EeK-DZr5hdmmx1>=MGaxl*y5tibO4v&4#6{G)o9FU@K>TyCq)oIkbCp6KzALKIvvWXT=8x?*X&;Br z_``5o{;@WDznk^D!3sZ*w>2-Zav|IO!}JXzUZ=hDR{6Z)Y+G|q66H&vi|7#=R%~S* z2;1_G7Wp4z>1y!(g1Up=x_{NBJ`aTX)#+V#Swou|_nmILviMiq$Y}!XpMSE{3k^e} z4TG8xcMKEvKtIq3F!RxRh18tz8~#4Jl#A*JGM;W|YG4CnWDG>{z?y@z5wruXEiL_@ zyw==<=Hd~!Bnl3wlA!0tU-#Ioi+a-`6ME2jgJ;M))l**Q8Re}nVijM4I|+Z&R&Y5I zXMyv*$sWJdW>W^@pkv*v$3S+82H%K6jDNv&?iG>Q>=`lN&&d>;lIH2pPCcWLU5V-y zBIX?(VK-#$-2kt%xlLfnR7g(-h%cOpJ23mP|g&6Eb91=K>mq z&czFZF7$Mz64`ETZP2=v@QL)z^KF#MV#u94NN~m@Vow|yrwV>T-i4=G?gfcfcE9Xf zp9@OV!X!#^GGmvzX+)!c|IDN-oOgJ+bDxgG^nhj?0EVB63Lt%=q_W2}BS=@uWK1IJ z3b8o&)U4y$b}(daz%*(%uqQ=?grp zOEQoRG3azFy{a|&YBqAm4$i2${QSH7p2Lyy33LttCvhzA>NIO0mNnPN8O&|-jRYxX z8TB{H)#-zS!-E+&-x%@P{wAS4O=}lPCcjJnA`J+HcidlIxHu1I;k}bElBbB+`RK-GbxarS#7wm5aN?#F8ZO9SoI3k16M6rIisM_ zPRQ@7tlDu%T z&zjg$`(P^`f4+Y09^u_Bj#-mQ?gfvak4phWc@M02FkA={oX&&hu?fZ+<_@r*Gz<0+ zjtmFy6G#B>7q)mnODqf^!)@SXgPU}#fP;wNPam{YB@LGqx063Rc1Sf`XyFU@5yF8}8iPXp$`AHZXgrwAmro_1?xLB%Q|O2pYte zy(=YX&3i|~&ZUL77!roBJAAS2zq#X==5eUQ-0e$VoLcr#Zxu~LY&Km)hXTF;4v-_K zyG|bf02nCK{@nl|T6D&G8cb|Lz`}Tg;de+|i-S2wWdVkNme!rV%oKJ05 z+^z@!z-F|)of`l^Y``&jBMj`Xs#H7!0A+Qwo$a5|Lkm=wzjrcrwUX*zd2Q*csNW?EZ|O7PiqWkNHmO(90~109XWCjNh+1NLx6qz;bfp0*cg?v?z`uJ z8By%VHwEN?^W*_%E!J}G;~EGMt=M_iMl5(Ktd-jUgkFOH{{VKMk5)`U(vP8_TEHE6 zB}M2TANg|sXw;h{rp(hr%uP+bmnQSIe00sEUsqi6;$0WxWXUG09bU`60cWQM7wn|H zSje&}%=dClgfQ>4WV&a0To0AG-g0i4{_ZvDkstPM0$fqHPZ(^}Xs9wqbZ67z_ELvA zdi)0vxjU+X0lvi&hX0Ive54b)`el$QPai6?k%3{fud|1qTpoS^4$*3!WrUD}%-Xn6 zPrIxKM9t7^jzpypE9ghU%#{G&SgYJpQKW>mz^Hr>hsBXc`Y6;ZGCu zKHe&ik4R@UE9-$`G%t>wAY@>H3$(8%3h=8r#4s+@bgb?qT+Dr3Ti!+N1CsXrL;ky6d3}@K--G41YHgRU}6H;Lnb4_iA zr5N_n{*ChU6lo2`Ila@sAkkr%^A=kp36~vXI1jZqzg{|p*J#JGAz@SEvD3OFx+lz! z&4{<=!SyRpt;ihP6I~gP>2!J~s4T=?NNZmt3WvEfjMcgK1=#wpFSK)2;|5TY5O^`2O7r3QIrb`O{7 z?qE?qXH83Gu1K6_t8(X(%aT=((Fvq6p3A%PC&T9sDBPD6FW9qkAEDfaxo2T#-==xf zxZb~Zp*BJ|vQ4e_M?_q&<>66G=NC)kQEs=W#5>Y=F4>{B`-)b?t+d&nCKfU&Mp^;a z4=TnjNvGFa2A0b)N?%{Dh;0$shKaYS*G{bDR_&n@lBD+d)*it8p9t(g#9>~C?+D_% zm0kzccB1;HUgCi)S(zIf%xk}Q(YLX$VU^OiZtNc~ML`$#R}%l0*711<`ak0`+zu!> zY^J8NR(I28qSr*bNZ+}hRSG6gcg6{Bv&zj$Kuq@apRj!P$GaV_0j@g7j7m~}SFmK| zH88!mB-iVYdT-yd^50eDt3+?)T3Ehbfv7MNww2B^;nph@za>J(#>a-8BaD?qWeL_O zVCgq?l=Pb<_Eci^YH|6TxNh>iaz^?<6g}gEh{%~6n`EeDf{zhF7fWXa$@i{|>Xspu zThxoIDNU?3!K#$i!>wY>Y0M=2XeE%FoDW^1`Zr@ReU@!Yb@daIqR0notRKn)p2hAO zKXa5qo-3!B`~x`t+Q-OfapYWI?W;KrpGBjh%o)tcQ~Vlc+>1r4o(TZ1cf;Ch`kew3R0zqzq0v$X5Nj67OZ z*gUtG#6G9wuF!U?LGU0A*8^+iltF)AKy9YiD<2F7yWSpJ)MzfA~O^kv3p`E@s zsHMI9ej#-a$M!xyUrk&44JZC#E;B}w_@+m={$Tyqj7kvGQWm#c3@4`r>8k5NMdR}k zrG7r);zhWAFrBx4qny{?93oPpLDVmzFLCk#UCP<*AbjkzH|coNjBcUcW4uPMUcScC z_*%}3G1bN=O|QyovLW&d;S&p}uOl97`8y>&oQ?vqG`^_8+M8rpK||f>JlH!ju1XrB z3{GrjgR}_EeK-DZr5hdmmx1>=MGaxl*y5tibO4v&4#6{G)o9FU@K>TyCq)oIkbCp6KzALKIvvWXT=8x?*X&;Br z_``5o{;@WDznk^D!3sZ*w>2-Zav|IO!}JXzUZ=hDR{6Z)Y+G|q66H&vi|7#=R%~S* z2;1_G7Wp4z>1y!(g1Up=x_{NBJ`aTX)#+V#Swou|_nmILviMiq$Y}!XpMSE{3k^e} z4TG8xcMKEvKtIq3F!RxRh18tz8~#4Jl#A*JGM;W|YG4CnWDG>{z?y@z5wruXEiL_@ zyw==<=Hd~!Bnl3wlA!0tU-#Ioi+a-`6ME2jgJ;M))l**Q8Re}nVijM4I|+Z&R&Y5I zXMyv*$sWJdW>W^@pkv*v$3S+82H%K6jDNv&?iG>Q>=`lN&&d>;lIH2pPCcWLU5V-y zBIX?(VK-#$-2kt%xlLfnR7g(-h%cOpJ23mP|g&6Eb91=K>mq z&czFZF7$Mz64`ETZP2=v@QL)z^KF#MV#u94NN~m@Vow|yrwV>T-i4=G?gfcfcE9Xf zp9@OV!X!#^GGmvzX+)!c|IDN-oOgJ+bDxgG^nhj?0EVB63Lt%=q_W2}BS=@uWK1IJ z3b8o&)U4y$b}(daz%*(%uqQ=?grp zOEQoRG3azFy{a|&YBqAm4$i2${QSH7p2Lyy33LttCvhzA>NIO0mNnPN8O&|-jRYxX z8TB{H)#-zS!-E+&-x%@P{wAS4O=}lPCcjJnA`J+HcidlIxHu1I;k}bElBbB+`RK-GbxarS#7wm5aN?#F8ZO9SoI3k16M6rIisM_ zPRQ@7tlDu%T z&zjg$`(P^`f4+Y09^u_Bj#-mQ?gfvak4phWc@M02FkA={oX&&hu?fZ+<_@r*Gz<0+ zjtmFy6G#B>7q)mnODqf^!)@SXgPU}#fP;wNPam{YB@LGqx063Rc1Sf`XyFU@5yF8}8iPXp$`AHZXgrwAmro_1?xLB%Q|O2pYte zy(=YX&3i|~&ZUL77!roBJAAS2zq#X==5eUQ-0e$VoLcr#Zxu~LY&Km)hXTF;4v-_K zyG|bf02nCK{@nl|T6KQ82UOo+>55Fz`Y>ZT8--nG6+iABb-K5e>XdNxfs#tM&B^E?->+$Vj?LNK zITr9h`I@KK5=WG2Y+~b|ro95oyg?(Oh@^julEtNsVujVa-tbTAq{2mI7>BQ?& z+~p9a@mBrasuY)O&AM`%)y|)P%v(pE#3BBwJE)FG37i|*ubMD4A>u_MPhPNKU5?KV zJypMc%yq}Sh4I6`RtQqU06ue;%rFqdsE;LT;Mvsy4Fy>8-tc zt@9w(YEe4C-Y^-{&(Oi$^CpU}fGZ$^ypacN*o^lO# zOgR8MQl55GJ>S^KWF$@dXkO3eU5+ObeqKAuaH(3jl6Ilh`{tGWsW4jQf_~1ql(Zf1 zGj0)H(Y9*XS-U|N(;p>LP9(6hay!iE@4mlusSapKw1js9dRtA#b8jxvCDC)zC0=7e zH}zk`pxm90go2uM_wr*rKlkm0r*jep0zeaTh^!H0Ri@k?b2^Az2EW7%ED7i>jy>dQ~0wEiuBN9Bhk60-fQR6hgF-R*xr_7<7&4Tt%V~S{iTz*Z1BK6>*1I z8XXlbA3m9l=k~_lxU?i`ljx$g!cgPY%;1``2JB0}saS!;i$d7^%hTX{=*)7JDz^Z7 zo)tS_fEHP8vNLD5^7q7l?P)#g6KzydG9)a_@TUA-7%bi3In(mV*|dJc#r^~I!jV06 z+6GHbwO9NGPZnwa?}P4_iGKviS;Sf9w@X+m?htT}%qA$H(`Z|04;I28yDsRH2P)5!Z;@%9u?sWPh zcb%});q21x@7|t-isQDO+&zn9E+vG_U0`RTndsd6sg69i$0yfW}&d+23 zR=2lzKzh1?6@#DzP^P$3S&0@nv}8#9o>dS>Cu-^0z{VqJbYg~`CE>KFmuw${Bxm`N z=*J%+mX<2;U9$uxPZQ!eADM4;><{Oyo!a-@HLZuc*dDsDHo@gSA04=3oi+~{nATrY z5IrP7`WlVDEbL?|!`o9a)6U+->GBT+EYg=Ou{`|j19I><)7ksJFU6ENxCi;-97k3m5g>0naSq zOMJ?B3Z1NgqT$CA{gTn5$%QtvwsHT~`5?`X?#O)9F$U*t;^8Ap#x_~sdLtiLm0@1) zYxk^UIndHEo94ja`OQ?H^dO$+? z!bdz{? zq~nuwD1-V+3$AO}?^x5FR72?xUqbrPZ;kVT)HZ=1_gzC5JG(>>P<4FvwkKi5P<`kD zH9eT0)XVGMc4fh_^g9~aMh{?654y}rC!o4`@j@;|+HgQuJTDFU${FMuue1rj6+4=i zU_}xmUlAAi`0)gtct89Ij^dN1faWtC_=Ay0S`mrGLu28m8R0NAe@GOu`%p+BD<=|0 z$P(~P^km1*Pc%Z&e8E`GuAO`aD+8ts*jQ+RS?I6|0AGt|a~m7h1G3dnYqeB|*GdC8 zFhqvUiM}syB9Onb;?d|Xl>5_i*;h!B){#1G;bmKi)qVa5CuN+elub*$inTQ)Vxp`T z#NrJn1orU;@rY6cbT1X2l0aUh5ya+S(OhvO=AqF2Dq$US4YMHduAouQ+7J+PE@BNj zy~sEL<&b3d4@xyB{%8!M)FAtBKfK%*?c&L`s5>KlcXq%tf`ye0pV#0;Dqp{#MG-$G zs`>DzO`KTq2F-bGp`GoV{jcrIo=#Pm8J=_IbwCb^M%i)7cEO)^Z;n(Lu5XoN07{xX_%f@+I$b+^N=Cv89Vc`uvr;}QROF7 z3ZL=&=`Ic;`wO43PqJP-e|ye<_2k=VZ|Q79+mSQ7wrPiv!oZxl(syfIM12K8kZyVv zKKJU9dy>xm%O7$=NIlAEm~lW@IPBj-7@aTJPG08qtfPn9X>` zrrh&)`Bf3pr*~(^ofmeS%xzSvdDtuYj-8TAlT&k-Dv%SU>!!M1kJXenJ9IKNI@B+R z3?<>#yGx%%VOfSq-DF+TQKEe5rm7ThRsf6Vm>PYCF6d&U*AM^8u zVXJri8h#?@`WD(oHb)G18#6MQtDU+wDd1l&2XqET1kOEsgZ(#-EWI;py8DG{Hq}gm z;^u|kiNuD2?m6S}+}1(zTXCGP0c7tl{b zmB(4q(VgPj_WkPWp^JC6wnQ3CL9U60V>aEjDoa*K<(MIEZ<~aG&=ZIMJ52f;)?ToJ^WHso4WRii*B zb~Wv$3biKmm@mwG5}j9~07Zx@xjbEScFX$FVi2=V3L3o>5F*invMA{4zatXbHLJ_zvN|Y*A1g51VWjUQ*Ey7x zGkPRyOh0ctx2yJ)DMC6{uKyBizEep9* z^%~EVJ^FcQCCo3MLjzpwZUaUlJ-GjuNFc%KN*}VM0)L1P3wX?(Cn|gN`9ELCi8t7* zP3`8|4I4an^a_#KkI8PnetVq8qb#@1Nx3ZOpB6~cZ(y}{S zW{~ZU{goj;R3C_?g16p6Pj~C=O4LLxpADVdmFGwPh^&ahyqQ?tI?$n`xIGnTG8ucU z3biJ!Tu})f*Ozj~CM_;$KW@*_aNawR3iWjv-KI6Z%YD)bLzoXE`kqTyk_-RQTZ1de zy*fzHb-?Ooiiac3f`yP{R!%nzfe+jf$Kv7CzS~OJZBKer3tRM!XY6-ok+OvCP;ku~ z8|>kmrh~5gacOcJN)fibp*NDTFHpLkJ}yLrkTHao)5U{{yz&l z?^Okl|IXio&KWzjT8%tsq&!kMutdFE+%XdTh0Vzql%O)2WL{>?zeRnS&APuE=JS$1 z7Vb|{*82@?gEw}|G_)Rxo31{L%9E#;D4YpmOg~~--h}!5Fvx6@85j=;@=y?+#F7Kx z6)bHNtE3MKbHC!W=Nujdx64|&P6U=W;MTNVFP^Q=cYk*-)a1|VNyp09q(}VswAt`o zEYzBPfof?n(F)NDa+q2ZV4xgeXS1^zUS;wgmf8SZ6Rs&*+Y9)xpw!5k$OuZzEnv0w zATf0Ss||bx&q0NH*i>&71t_>8NHR@zmDBtOijr2pSd48Y>4H$xd{hMh8#fths4ECJ zNFqI4hUR92wgkyfY9jvO>KKJe)c8*qff&wKOZAEsjOqwjtJPkG;PI#Z^*?*#gmpZm z@7I$w%z1Q0hMysvz6W`(VS}gF?N3FS1er^P+Ps(q61TRV@~!Sr1H$v8u6_;a(`_1M zdg-b75);>dC7$QNz)LxGoVW&FQ{0dAyOv_PC~n7h+-3@q;wKqm@-FQ#^fjta#App4 zI1@~eCA?x5l+@PK1(J7xeVHccrO}iEZe3kgP=6@9j_JVda1IssSODRnY%!C^lW`rw zYg!Sy++-h|wD!WkB98y|{v$f!uYOjP<<;S0hWNUnA@TRt&IZt5($3F>??hk-$_(K? z>Uer4qT$gJhqdo}l<;q2`)uSqM$&oa=%hhR%trN78*uj!#rchpJo%++ULtXJGG`jO z*_$3C1~bj@;9RI{k0`?)W~(&uwQRAwqmQ)tHa7-wTT^uoEPce8mknz^M$k7({fNsv zyyX7eLTB>hhTNSfeKD^ZoYr35?9jV!$vX83f(GG}WYmf{ntfODKbB-=1xEz06g3xh z;rnjn!=qmdBk#!{Pb7A2OiF4sST;Vpw9|NY%bzY71I*!H1kcCyj|tf^S6d%k8cPv!J2qj+sllfGu`jU?xqU=V;Ro(f=|fXXZa|Xb zD#@#+0l4LhVONVgf>D9F2JY12c6;6!Y?1nk^o7;KMD}(CYgx5N=Kh2&G6JN6t> z!5(bCV?<^42lfm*u7ngVNlcXN5_`RtPGbW|b?_DC>B_9xCd)+%&!yOiXcb4okt2O7 zT83gAqYe7%LvOH)Gn73nUp_g#Obs8{739%^fL9jYgZOxLEe$F-)^ekKe~@9Xc!J18 zH=tCc8Cc}I_)Y;)4&*_oGLe+rBFJ#K5iyXx*-NHI##6GYB4x{m=>Yuyw$%R}|9|a& z?Eq{oK|UB-F&Dc`LRfOBl?L$fL?80tvTVy?bj2Rnt28{nl7_$sh(i5vfx~}K;};S5 z`TP`mZNNew=Fj|F1ht$Zp!l@VIV>3YFLZEG=EHL`*4RVrOrET*3Sa^RvMX6o2HJc) zQOGVIZ4QRM|3^aw1?kXG!ygsx9n0}geEPe@RffTIxMjJAOKW1m2rD8emSy)Z6eMD- z)w*LAh+h%-yG7H@nL93)_@=z8HPgZV!|kZXw7QAaBj>Xc>CmwG8D&Ls2*ET<1|V^1 z?|({fY7@E55d}y+{%t{Yb@i6zmGn*bXMg$Sff|N>e=IwTRPsa2bTH<#X2ChSl0J~R zVu}T?(|5cd2h}ps84Q9LW-;y$n;PLY5@2g3Yje)|w=KuarD?N*`D}*Z6NGVo<^<;x z66p4Bi^Yo|g#njIte0tlmbc%l=U5CP2YxW<`}#zs9K&J7HrrBM%@s}HuB zNoqmv?yt`OtsMr|>25HDT^U{*!U^#)p`X3Wzu5!m<>CAx<43TqEvE`BO8s#!{RT!h zNt-|FU;#`I3%Iie9mN7xzRB&WVr z=egAVR8*7eSh&kr$#GWc9Nax)v+G%q|FBQTXX{}#h|;& zdIN!~;9B-68LB_%+SVrxBa>)PSipie7Oi~cfv}?5Y1i5Iy>r>8~358Ub{e2Hl$Aio!9%0$GyE*aQ!CYe(qPE*k&zkM7ZA4Y2 zu?u#uB7EFhM-x;oL;lr@WmlzU#Z}2!O)G5iBmnBWT45rk(qX;5KpB*}9*6=JL$I$V z`~Me&xa39rrS=*4vbqLT3q2rg_g<;Y`;XIi@Y{zdtA7mG+nu!ieApx6e*lp- BrtAO! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/rcd.rsi/deconstruct2.png b/Resources/Textures/Effects/rcd.rsi/deconstruct2.png new file mode 100644 index 0000000000000000000000000000000000000000..d2144af3c78b41f5a6844dbdd01a23c9694b3d50 GIT binary patch literal 4964 zcmb6-c{G&o_e70|mymsEMXI6F7-k_pSxO^I`lv<{vWz8(VH#UPM4N;`rL5V?F8fww zge+wn%a~AR7-MD_{9fPh`JMCo_jk^7-gD1=?tSik?sMO}#adl76&F<$6%Y^*H#ak} z77!3L1mQ4|UEntuD9INPkk&FcF|rN%^*7zoOW9PVBb0tb=By&sA>6V@e*mzp7&xbv zTjWjHpS}M|lI)V?1KW2`kgdD(`G$UJQ&yL3M;^)a<&srJi%f3s+>5_;w4iW0?6!r+ zHH~)~a>T7sVsq=jqCH zT{{ILQ@W=Tp?&(KUO0f}Qajpms*+X#wKROfw@bkj=9`I$In3DElwI@oK8~l2~hh>#orI%U3JL%=_VE7Wj~a-q9JS zx82g`_&+8Dr}pm=E>yJyR;)+Fdiq9JYxA^EdT**+SXWA29n+v1g*Rkyd9{mK)tTex zqu{tKo()WaH7R)ZyZ$pgaG`R8Xb))ZkI;yeQ9WycT9K_IatvhM8!FNo4 z*vl(0(xAWp9(;@LUucriquEfaP=-u4_cP>j2GT3N*aPEHpYOFyY7%Odk#}(W_&0p6 zLRHt%?o1u@Lb%O|Agj66Mw9ydja**-$FJ)<0m+EdF7r)@jKMw5ADUJJP$h~$H+vY# zy}7;@pwvl=^*P4o*muB+PtFdYrLJql$2-1){;o4Lkvl|8QrE;`#Z`rFe2aj*JONM; zp^iQoP!o4nLj9&2gSe;SsDVco%uAHpR6a%4710kbS!_ zw-M%iTOe#90Tz6+m&HbET(6&BTR~~`tSZ+RLu7y0h?0n<;KgsMJAa!D#IWQriRWoe zx_`oV&Mdr)WW$l9l4V6zA*z0e$TPAqdj$ec#pUj$#F{gq8|4SKgDhkL-zqHR)kalc6t43GWOuoInS5zB@_ zW*1%xvEe49*B@I<Wj5cjt62YrLKo2F=&2y$f}2^k}%@fo!6TWzW}!P zxbmR6I^j!&@mvAL9l7`sEk`Ho9sF6PDj<~|~!G*yBZa!;0Ss|-*H~fV$68Ax_M-{Y1`;kZZ z+ErN<(im^_v|rHs!HVzct`_T+ml?Rw2mQFG*ehb9Xs)7lhvu$?{*^0n1xk=P)j<2u zdL_7m?{RND`F&xPq4#m$YkpxOk>P5VQFV^EEYGU}L+uh1EW1Fh<7u9LkuQ1WjW!0A z?d=@`A}Qh`Y`?Hyo=H)9hJ~vrPFnw!f@4KdvfQRAQPg~0QFLOY3|H4LLvU*CgBae}%hIxt7!^Vj{HZx*S9DK@;CzKoWKYMNsBZeSnhSBn z&&Q9oF~xk=*rB3!>rg*g+{C0ZGZ^J7Av%IM7!y;2B|na5{Al?6*Hv@kMe^x-dx8gj z(1fWYaP~5)^c=DzxpK^_o8|GKC&bE$mA)2&j%gQ)OUn!bw0B>97KaeLi&R%4VgNJR z?vy`0at~B*6c&15^m{gU&J+Z_HGQ{IVzQZB0DWSgAXa)mtGtwWQG&CE04!EHE`(71 zz~d$HK282&WoL$?eMbDB<9d1@KV3qh8e8AB&2XIi*<`OTJwhMn2)fOcb*k5f`RB$n zHF)3|3aXxdHtpE6%9kybpIKxh6b|uI^$zJyU?^YDIKm|gHi_FBEVTd2G%ExUucTxK$9B3MIgy{;Nc-AiE3c4KKFvv6 zPD|~`^}Rjp4$Dg2!6F{;kX`fdJ>vKocVJ$+^ANL*<&WDC`{G7IniGB$HxSqNFWJ!s zmuH-g`gk;a51zYvXxVO~vM~q5%x_s4s1Qs$bF_n~T|7&ZcMDDbcI}>&jehr}YU^qX zV!v`M^g*ZpN?eO|TV5Xb*`^2KY>l7$-ul7KKqHju(i+zV_mUUBTF~W&#Do?=$(axu zn`XfKRlx}_o z8S=dtV};avT%H1j#^5AGB0uNp5VVg15>R<=Z*W*DRGGyh-(*tHZ6J-rpjR&SOMA$6 z%H2h35Ad>~W&)&PXnbd6BxDz<3`+Gut1Ukou_m0XAzTYUX^fF2pUqmLw69~$YF2yQ z@Y%n^Z?{$JO3Gbs*r)3NoTD{02?=2wfRa!85MbVq7mU--aFT}_juMmHUI_q2X3o-W zbvB=vVU5v{SKVhmf$+CqBuB*zCyi~Qe!VItN)iq`j#Oh#3Q`!Zm8TPX1EL?AD#eE^ zKaOOv_Ovix+xp#-3c7L5&sQo)Eem}A(?op8M4%j1FdP6%ypLy_L#^ya$;V&?mVjEA zo5E3yp)%-;h8z7~&Wiz}{4F0q+XC1F73NYSGc^Eh>;Hvi0PQrqYaHX7>1_CtKQmLe zQc~)v3+VGx@;{n1ppk~H z`?smwX^yO?iC(1Nl>kxwC4$Q@4!vk%LX8BsN||E_J?9UhDLOZgeFQ`BwhED|I+*DX zrnG+N6XcP}%@ZMG1WP-KzL)tDpwiWJOCk1qv{ z|KYjLWt@xGL!C3VRjsav=sU3N1058B26M9ur!oeG;vY`fgxhl68sI<#yy`S@pqF8%!Yu zdRM{ihH@}hfx9CXCWS^^mvgNuj{bEu#IH+zs|h5HX$ceh$&_y^Ex;dGX3DT5`jp?( zGlAF0ByM;d?Ub}!+ba0mulCO-Y*3c=)-!l-cMg~NdP7vk%zjkR<&)F_o309j0>4xH zlWVc$06F7rqb*PW6V=r4qO`+arKf8$&8&^n-(0P7MGSla(Ry#(?ONicY(m~)e(GoH zJaVK4K|qf9t2V#-qK2(jg2a%8sgW43vIdtcM7snf^Y!p$3lA%Mri~YM^&SzRd4Nz`4bDGb zlf?}mt=?bPN@eaP75MW184!5=+vig51Z-JOZsLqW*d6^1+05qDWy=|~aBP>5pD>zh zP8(UJ-s+oN2)=Oy`tLCG+JOgphnUh7pgU5mb%;Z~z&g85|2fERBqH_Tnom<8IYW*k z#FkP3s>Wqf{{;JH6W-isd4cRwLB5Fe&B4M}?U}Tq2+sot6gSnz^*%Jenf$_2mx9ne z{<10+>Detg9?GvyQ!eb~$ZAk5WrqU$(j14-FuQByqZciYCcxTDcXFXaZJMGRg$s$6 zy5A>eEW-_KUdi1BD~RQ{MN32I&1fJI8U8}bkAUirm0aG==B`zgXpbGY0$Jmwm;NL0IMZ;h+;|W z6?YsNr;|3z`D7O$K@(+o3Ml$5SDAblI3We4COfabeoKv|!SH4;A)KD{O!Wi$Dv(Ua zIE5Y9`JV$pVWNqaGz72kpQJL5nbR%4)FunQQdWjC?t)&+g-&eM_05NOpEz;2Gt!g9 z6!9eaueH4+`0nep?xDm@gn^}A6M+z;o7te?*mbH^=5#pph9asYZK-Mp3uZk_wGpF?Qg2Hw)8>g58tmGckS;2c`1S5!e2S|vi zAa5#3^}_J1x~aj>NWI>Ej~f_$zb$y48@*+S-B^Y^lY`-9UufSOdVgEGiSo5q{DiML zKiS5KpJpM6B^CBq3*M*^3_sxEAbSH2vrERG(K!*sC280HEE(2WdWT(=J3q z-Bg}qyHHgHLQKJhp#@rst|BC-cHiaXL_q<*2CC6yMwqwmbATftc5r&7QWfJsizaRi zAqTOlxS+(BP{rpsOr=U+W$bUAG-7d8St=)UB*Bd4K35dQ{)MH)sq$0=xOubio<=mON8o0+-@a)o)@N=Tt`-gAE3o#+?#KbGKsrd+g#b zC^YoWPnzn4;a%QbL!WLU+lH{LUH%twZo3mbKC*avmQdc|7|MzLQ7tXwtG9(&Pxiz)|2wRaW-i3p;(vGGDg z7c4wLIb{43Zl67!zW-5&w3O^FMqns?iaA=VvAJmOg?*8a^TNt71i`Z;tlr;!t*v+W z2Hp^<&L^gAJyo9Q+A^Ep+UU&iUh9Q$>44Fq4Yi_}(>sb~6iOU{k2$2Di@LJ7$$h*s zKVB?(iLLpeMLmD*ss9KgyIHB&4kEe8PdG)N>&x8d?o7j!&3RUSSI6>8vq@d+_8JDv zLv;ZoDrM}>oemxirL)}Xp3y7#Ex9ajYjV%V3?X%mgUMyKdk%o!02^CRN?pbM>@T!~ zRnT7wEgNh36OmEEm~tWNjZfy5fh0Up_Fq* zWFjW#V;eJK4x5Q>W_!Nw=l6R(&ma4IKl_|d*ZaDz_w~fi)?9iQbQcH&lD4!ky8;4< z0a*}j2N*~fOl#~wAXtH=nd#N=(Zy_>-vROiGWANT8zEHA3b^j}-a z41TEQzHsbs(>JCixhCT6?qVsst{!@3ZK=6WPZQIy!|q74F*FDRE;lJrubS9Ro_d8wNjJ8C9~` z_%a&l{A%J`T-?o3Vt>)YyFrVk1)G-s_d<_y#AqPtQ=bNL9wq z&xN@U4@Arn2vt|RYu{}sP4Wi$6}*5Bn`X$$<4Fd2C!9+&Cl?lJ%qir4`lN9Ri$*JR zcg|MJ?gm?xPKtr>z%RbzOE9e}dE&Oz;F4{Yz}~l-r5?B@9jCd=7> zXMm_0;N@k&RxAmSAv;gc@#xjMLal=2J6Cj3wgplAE7%bg?z!kAY5BZh&51rjd<3l5m~aViO*AzWl742~GP~Z^-cz8+mE&x#Ny0%Hsp+vB|8Qyx z=cc09({eOoU^>)5T*WTg_j*|h@aSc+y0h4XRlkRKDcO<;cPxKAg0k6s+(bUpn!_9T zrP+-r^^$sQ)w22c$*-Uu=)_kZKC(*tI&=wkB+s;wbSg360OFe>r}%xMDB|K~dUoIe zs{f?Zex*t#$s1mZQOg{xd^Fb^B+`|$>Fm~L61d@@aX09Ax%%oDHlJ6VIb4JiEjc2g zhD9qAvp=<85_ETElL=9j#yyau2e`fh%eLYEaq+A>36A@jB89YpPVNUzy^@E7yhCZ0 z&Y4J;&#rBR9Eu{-m~-lI+i)W~Vc<8RBrFp)DL7Gu8bW>J4br6>iEEyog&YO1uv5}= z%>%&i^Sx&(Mp#VWPVcTOqj56r0Z=;m$UI>emEW>^UYw=m!V4ZosF!nKtN7L=>M_Z; z6Tf4(a}heO&CQacHirC4B_4te=3U<&)4azIcph#nF%$el2zC!ITq34fRm@HMx|+1> zbyhP{6BYPct!Qp?75`8kjA0FM`4+Lq zP;a^q)<2o)Z2Wh;%y#i)%N^2SIJc_>xxOmbMX-c@Y6yH9G8%&~6wc%Qw; zRp~2HFR5UbC#Ms*QQ+Q{t+yB#+d;JaADia(kM{qsUn0c1vxPEX9m%6P(|hB&iBIcs>$UpOFJVuuVB4rnb^y+PXj0QKdrUB5`>f8~u49av;e(TWd)a{COTTz{*03Z!2ofqbbi)yBj{i_KK`v zXJRR^z~}2Okl5wl;nkRd;7T_0RZKB6_muQhe@@R%wISW4+MZk9+75VSOyRhnrfy~e zWe5g5^cG^@3o;@yTcHWm)&i-(buN-E*zcG)>xAbH44e9> zq65wXlip^(tDUqh_cNk?mo_&$dTl!)OLGpx7{}Oim{n@UzIL_X_x{M5eZ3`b-}k-w z4gKCv8yxqmf_5TMXHkRWL0bZ3dpMS?ub11rY|Qx(9ThAMJ%h8FO`32%hSL4H4ceuE z4&R_}-DIQh$i(lPQ$y#(`i!Ih%+xAeO-XpSEthwy&-~O|;2UfU`!;+TRKI3sE32@` z7G!>~5WhZln(uJqR_GV&Q*8;tT5n{!)~oU#%ud15aq2DgT`wu#jo;T?D$l+y#@vn) z{Em+yJ(}sWRsIdeVr?q^eFCtUXcaeQg;Wgp~kq=pvX+3 zgL}%R16|=`?3`iid?g9HZjh4Qwkrmh2Y-UVBmT33)^(4=I7no2PzB({$$8bjT6(Ea+4^Z%xDQD5C^U64$aHcob z@E;D>=jL$-MaIwSvfc$!bXHuPklurx7p$b%MbPk&#+X2FyK)|R^Eq1AP9hvA!D^t= z3c4GAaPonCDvt}51zUYMq$b6s9VH~^=F;#)H#h(bFWg!r0JQ=EL3d+VY3*cX04a8Y z@XdRCSYOU4Alk=+z@!iDx2hHHSYMJN*7|F;H*5nFH}+p@o2B0lZ&V53Vm3@UY;ez= z{dcU*T1wfnsqNKm9(D}LAF!j1)bJh8K>8Vv~P{OPCq%757vQ zuuXAQEzsw%&P$*a2B1LTPH zMS1Se$E~lXSRrlXuxDSNJzq;sCaaz!CM!&yQ!luUF#?b9Y^fqC-TGDRgDLqRE|FD1 zPChjvO|`lc-dL;Nsg-!Hy-$xS7t8lxwe&aH{svQ_@><@~^qScw|BkUqUi zu#7XF�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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/rcd.rsi/deconstruct6.png b/Resources/Textures/Effects/rcd.rsi/deconstruct6.png new file mode 100644 index 0000000000000000000000000000000000000000..70771150669b4abb1da6f41476099d5299f097d4 GIT binary patch literal 8158 zcmYjWdpy(q+aGEwF;Zd5q;7RrPDRRLqZD!&Nh&ds9Oe||IGgU>NjZfy5fh0Up_Fq* zWFjW#V;eJK4x5Q>W_!Nw=l6R(&ma4IKl_|d*ZaDz_w~fi)?9iQbQcH&lD4!ky8;4< z0a*}j2N*~fOl#~wAXtH=nd#N=(Zy_>-vROiGWANT8zEHA3b^j}-a z41TEQzHsbs(>JCixhCT6?qVsst{!@3ZK=6WPZQIy!|q74F*FDRE;lJrubS9Ro_d8wNjJ8C9~` z_%a&l{A%J`T-?o3Vt>)YyFrVk1)G-s_d<_y#AqPtQ=bNL9wq z&xN@U4@Arn2vt|RYu{}sP4Wi$6}*5Bn`X$$<4Fd2C!9+&Cl?lJ%qir4`lN9Ri$*JR zcg|MJ?gm?xPKtr>z%RbzOE9e}dE&Oz;F4{Yz}~l-r5?B@9jCd=7> zXMm_0;N@k&RxAmSAv;gc@#xjMLal=2J6Cj3wgplAE7%bg?z!kAY5BZh&51rjd<3l5m~aViO*AzWl742~GP~Z^-cz8+mE&x#Ny0%Hsp+vB|8Qyx z=cc09({eOoU^>)5T*WTg_j*|h@aSc+y0h4XRlkRKDcO<;cPxKAg0k6s+(bUpn!_9T zrP+-r^^$sQ)w22c$*-Uu=)_kZKC(*tI&=wkB+s;wbSg360OFe>r}%xMDB|K~dUoIe zs{f?Zex*t#$s1mZQOg{xd^Fb^B+`|$>Fm~L61d@@aX09Ax%%oDHlJ6VIb4JiEjc2g zhD9qAvp=<85_ETElL=9j#yyau2e`fh%eLYEaq+A>36A@jB89YpPVNUzy^@E7yhCZ0 z&Y4J;&#rBR9Eu{-m~-lI+i)W~Vc<8RBrFp)DL7Gu8bW>J4br6>iEEyog&YO1uv5}= z%>%&i^Sx&(Mp#VWPVcTOqj56r0Z=;m$UI>emEW>^UYw=m!V4ZosF!nKtN7L=>M_Z; z6Tf4(a}heO&CQacHirC4B_4te=3U<&)4azIcph#nF%$el2zC!ITq34fRm@HMx|+1> zbyhP{6BYPct!Qp?75`8kjA0FM`4+Lq zP;a^q)<2o)Z2Wh;%y#i)%N^2SIJc_>xxOmbMX-c@Y6yH9G8%&~6wc%Qw; zRp~2HFR5UbC#Ms*QQ+Q{t+yB#+d;JaADia(kM{qsUn0c1vxPEX9m%6P(|hB&iBIcs>$UpOFJVuuVB4rnb^y+PXj0QKdrUB5`>f8~u49av;e(TWd)a{COTTz{*03Z!2ofqbbi)yBj{i_KK`v zXJRR^z~}2Okl5wl;nkRd;7T_0RZKB6_muQhe@@R%wISW4+MZk9+75VSOyRhnrfy~e zWe5g5^cG^@3o;@yTcHWm)&i-(buN-E*zcG)>xAbH44e9> zq65wXlip^(tDUqh_cNk?mo_&$dTl!)OLGpx7{}Oim{n@UzIL_X_x{M5eZ3`b-}k-w z4gKCv8yxqmf_5TMXHkRWL0bZ3dpMS?ub11rY|Qx(9ThAMJ%h8FO`32%hSL4H4ceuE z4&R_}-DIQh$i(lPQ$y#(`i!Ih%+xAeO-XpSEthwy&-~O|;2UfU`!;+TRKI3sE32@` z7G!>~5WhZln(uJqR_GV&Q*8;tT5n{!)~oU#%ud15aq2DgT`wu#jo;T?D$l+y#@vn) z{Em+yJ(}sWRsIdeVr?q^eFCtUXcaeQg;Wgp~kq=pvX+3 zgL}%R16|=`?3`iid?g9HZjh4Qwkrmh2Y-UVBmT33)^(4=I7no2PzB({$$8bjT6(Ea+4^Z%xDQD5C^U64$aHcob z@E;D>=jL$-MaIwSvfc$!bXHuPklurx7p$b%MbPk&#+X2FyK)|R^Eq1AP9hvA!D^t= z3c4GAaPonCDvt}51zUYMq$b6s9VH~^=F;#)H#h(bFWg!r0JQ=EL3d+VY3*cX04a8Y z@XdRCSYOU4Alk=+z@!iDx2hHHSYMJN*7|F;H*5nFH}+p@o2B0lZ&V53Vm3@UY;ez= z{dcU*T1wfnsqNKm9(D}LAF!j1)bJh8K>8Vv~P{OPCq%757vQ zuuXAQEzsw%&P$*a2B1LTPH zMS1Se$E~lXSRrlXuxDSNJzq;sCaaz!CM!&yQ!luUF#?b9Y^fqC-TGDRgDLqRE|FD1 zPChjvO|`lc-dL;Nsg-!Hy-$xS7t8lxwe&aH{svQ_@><@~^qScw|BkUqUi zu#7XF�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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/rcd.rsi/deconstruct8.png b/Resources/Textures/Effects/rcd.rsi/deconstruct8.png new file mode 100644 index 0000000000000000000000000000000000000000..79d724e6ba2e76bc3ec4bc2bead42ee8fbc006a3 GIT binary patch literal 7941 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 Yg`;!s@;^-gdK+}^^aZPulh+^rAKYv^4gdfE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/rcd.rsi/deconstructPreview.png b/Resources/Textures/Effects/rcd.rsi/deconstructPreview.png new file mode 100644 index 0000000000000000000000000000000000000000..2d114002fb288ad27decd3b2c005be23cb013b7a GIT binary patch literal 47364 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/rcd.rsi/meta.json b/Resources/Textures/Effects/rcd.rsi/meta.json index 5004a9c4fc..c9e8320c60 100644 --- a/Resources/Textures/Effects/rcd.rsi/meta.json +++ b/Resources/Textures/Effects/rcd.rsi/meta.json @@ -8,7 +8,65 @@ "copyright": "Taken from tgStation at commit https://github.com/tgstation/tgstation/commit/d75cbd0a2900fdec4c12cd5ba986b52ccff03713/icons/effects/effects_rcd.dmi", "states": [ { - "name": "construct", + "name": "construct0", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "construct1", + "delays": [ + [ + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "construct2", "delays": [ [ 0.1, @@ -45,6 +103,357 @@ 0.1 ] ] + }, + { + "name": "construct3", + "delays": [ + [ + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "construct4", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deconstruct2", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deconstruct4", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deconstruct6", + "delays": [ + [ + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deconstruct8", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deconstructPreview", + "delays": [ + [ + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05 + ] + ] } ] } diff --git a/Resources/Textures/Interface/Radial/RCD/airlock.png b/Resources/Textures/Interface/Radial/RCD/airlock.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1e0e9aa089b0179f3f63a6348e58d5db13725b GIT binary patch literal 710 zcmV;%0y+JOP)_w=D+yqbaBpyWE*{gqm{sHbX|AOI8!VZH7 z8+d8ic5p#*C@ge^K{`7GOCXFf4>sAdCRr-Fdf0Qz^Yi;Y-}imqHzS*yn+#J%8M0gh z7&?HPamuBorPD^ELAhLJcXyYk3k%$ungZba;UOPaSGhkk!K%brERFcT& z^H`P@>NQQH+wCT{GtM7ietsU$^Rn-OQ%M2{lPQXV5CW;EPZCLz5JI3RN+kY|HesPq zh$M>>!!R&SGu9S>E))v?$0?9y`Dy_qaXv7BxI}?2t-VPr&J3V+QtwN2QMa%+2rf%I?q18WN+;(=Hc^! zC}=a)M?t$sOA-Zb_ST93yk9t>z6f_7Ux@je6uf#{<-?oki^{Srs?{p>#l=jMFp&ap zya@-T2nCc5kbm5b^#}0An+QA0466VQ;P$PT>qL~0~j`dU$%iKY0NyE!vFvP07*qoM6N<$g3SC$xBvhE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/airlocks.png b/Resources/Textures/Interface/Radial/RCD/airlocks.png new file mode 100644 index 0000000000000000000000000000000000000000..1195d79b58bb2196da79fef53d163110eed1d880 GIT binary patch literal 776 zcmV+j1NZ!iP) zO-mb56o#KzWAvKZN;I*7Qd1apilbc!UAZWA5V|bdO*e(E+Et;O?(2V$7P@mG)s@gf z$f5)ZwTc9cA;_pvgw%Xkr3q6(>~vv_rkPBVw!w`DW^vzp?mh24UvuD6F6Dy7W(JOp zjTxGzAnAG??(uM)9EB0j~70t z(`jkUOn*5VMK30~W56_c=`9+@2qg{m@M7XsmMxN7575zuwLEaq~# zitxF)xtfey64*KZ3Q$yve`3?q(}gm$a{G&SQdt6xW}xr>5m!B4vPnB|lt=A(?C4x0 zIMJP&ShRfk$jAu6V6Z+pFg3BrKr+dv-QAMCTQ`~k=;`UH%>(hzcAU<3QmItI-MX&h zcDu=)t7{%r(JA1S> zpS=3V;bFen+sLHTwGpVs?Pf9WYHK_5PE!-DEe1QO9N+i%YY%~beH#+qq7dLs5dN5~ zxzrxro+KE&Q(F?=ymGI!$^3=!|JDglJDklhDi0Zk!BG`@mN~Guw?{IWEc{sB2!PW| zD_<^vjbs)oc&xEp`xQcw^o+U9x#?%}iQFk5$zb|8e{)kuc+ zRvVHeRX>#W_VyZzqM&ISPx@E?Y2uw)?YA6CFXd7$Tz&)TKqMS2eiK#z0000|)|!nmY^~*`d-MAtmv~Y2ZP<5hiLNcb+SWq9GB9x_0&{%_ zkijQ8lzSU|0w`AisEE?XQnW<0Edy&JjLkx939cW}1AuaXPjUcR?{k=d-H8>@0H~l` z0iTSgK@apk#|R)wpZ#_eF?~GrS%vx|YfWG0D(HhMupK*wvu+<6t_dTL8N(<6TiN^% hoM8$?fFKCF^8$1Ha?PK@$TEX>4Tx04R}tkv&MmP!xqvQ%glE3U*L&$WR5rf~bh2RIvyaN?V~-2a}in2u&K2 z6c<1NmzipIj037> z8L4*mUrKu)ve@B2KYqcS*9Bn@jCJJ zrloVJzVjIhC%u0qzJVhK)RE_e5 ztjh}LEzWAW%9{7&FAU|i?Y{ z03*jdDo`Oge(*o|JzKLdIpHRSVnE=8f^XD6qK(j^EZ5Y1m@fn}dwLI8wp=Fl{!l%%IG#@IdAXpOD4&HGY{ zYMvR1%{ljZo^w{u8WI>;!~~eYGy&~1n~L{dw?OyoZ@6&j!YT5L6e(5kUHn2i1F8tbN*b>~(_};{Hk3lFR-*-v znH^#&x~_wB4r`3Mt|6Usczyc>037z`n}pt|o9{>eZ<+=bRvz01WDM+$`t~(rEqkNx zbd2fiYair`tPKFb>G%aAnqnS|mE!LoGP-%0It>v)YYl5HwAObyCAhUV$)JqcCQRZ9 zc<=(bIL{f{GFgO?#GQAlDuM6jaAuZ>rZwc;1#+F};(d<^{F1_BjLa5cNM$MQAoqdHWzFz*j%u=;Qzb8 z+o@0En81^9aZ}1YTyC?Oi)Xt4fH>^W0)Xg^64!2a!j|IME(lMBD)A* y{4nvU`%7GW6LLK~x+a?D1)^T(Lj{8gNSVl5IF!@_duo84O6IE zsR+ISR7zdBtRS07BbD0a5;n~d`hy`Xqm zb$|IiuRw^GxM9>oiLz8W4Gv%!b@V!|Pyh^rF$Dnd)9rGJALerGHLx&I6q&?r+vY36 zWpP4CAo2Np?hD+P*LXaRL?RIgU^1CtI-Q0C;5ZIuvsoYj$8q@jK)xWM*J;7FZHS_X z@p#N!1Nnl4@2?O40G4GzuW69W3fiAduD>8(kf7HzSeE4=&WPke2}2Z)*Sm002ov JPDHLkV1lxd%lZHS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/computers_and_frames.png b/Resources/Textures/Interface/Radial/RCD/computers_and_frames.png new file mode 100644 index 0000000000000000000000000000000000000000..0f17ab5ef1d42abf861dcfa6161dfc21ecb6c3bb GIT binary patch literal 775 zcmV+i1Ni)jP)ok{PLVm2R zo!GcgRD>v2(sjQ#o-+af27}?)HO7JhT&|JaHKKow>-C2()f)`hY%NSpy*PADFc{2! z2aHA|CX-23_a_n|911Zx@kCW$d*wQ%rJ}YF#9}d`(P$dJ6^~OP%Y)p1R#gGExXbSIAX z{?Hr%Xliawn`o9X1*J9fW& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/deconstruct.png b/Resources/Textures/Interface/Radial/RCD/deconstruct.png new file mode 100644 index 0000000000000000000000000000000000000000..ca9548e0cf932a6f099c84b8585b262696df86a9 GIT binary patch literal 1200 zcmV;h1W)^kP)_7Q_+9?!o%}C@8|vI z`{wige7@h$BR-#x`#B8m^LSw3z8kP719$G+sX973SY=tVCpDF-%1ZL`^8pBScWZA` zleqi(_&ge=&NNSLHH?g^%F1c^1qCaWQdTe!Nbxo`?SDHOow+9^rE}M=T?1nokYrV` zZrwVy%CaQep449+5SZri$chy!biHYU$RdvRb!(7sJi!bFcKZX)sQJ#M+832NV6LWuD7Npc;s@p zv>N`Na1HUz_Z&6aho&NO2JA86sVgrKUiu?P60>#KKC3)YOC1GiHJ z>GAtpiGZQ?XBb8aq7RHF7yXl|?sgek09p^FKn#(Y1`GmEjV4D^dLIEe?{@dz4FejG za4d$1d{bPQrhzX6UR6qYfK#Id1F1R!P~!2VPsl)UM&uSOFe9Qh=tOz0>D}`Ns6HY>>3#O|ue~!Xm$q4Hf&kr`oA-C3A<>Te5(}e&Zi7~jnBo^*+ z)zv-WbUNSET5oJ=X>s@pt_F_*IR|SW?^&|D?M|0Kat^r_fQZpOOutDhTbDxFoK9zL zYisL~o}Qk;va+)DV{2~i1IZ>IGXkxLAW&G0v2-MU;$$)YD}6{j7vkI*Kqv5S*OW)g z2c8^g@caE|gTY|I!i5WG0~aS;1x^=~&GFxYm(B6xbb-@_%yqFX&h4DLSS@lc)~WMm zU;I^TeN03ie!soFQYm#Ip>-T|_uO$62#A0!{>)FWn=Jm`LTj;u9053U=FBJM<>d=b z)Yk54YipaF(1w)CSSH&nbHH^g_nQzs8gGeG--tgJ0twp>f_ zmn~cN*KPL$xt&>(1WQKUnmDU+JF`E$XAQ|Pci(D}VxS6P{arKQztV@drbc^fYIHJ< zh8H(m7WJmdB)k1OT7Ny95e_p=)4K4C4hOxfl5l3-?Q?h&a`1^sqrpYSHf(Sg5k@4U5 zJhB&%cqA4H`~o}{3=hnEIwPY4k^MkkFdY3j6WkMCg3{7b_L?T)Sd4HiHX<^KOT#um z3mjEYiq=aJIiO(^O66;<_i3&7CA6zouf8$v2%J8Bnpv}EvA3gxP$&fb{lh;`0{ZFi z?*nABWdU>m4iWiXDU~N8-N0mr!|~&n@B%D4LOdc4xm*ZbLQqAvkA?^|Y O0000T~J=tB9o2v45|A@`Cn9t<@)B1Zf6^*VbPFV~Z6$S=c!KF)%PN{Q32R ziICcxS1(3jvxga%<%-&-KlPJqAH2PFl|wJK=&78g$9oYSvrlhtUFERMZGZUo)>RJk ztma2@mLBhs#jvSmdjE=>nc;85+t)AGpxecQD+J_xlODg`vs`ZN+NB>E7#R5B65dO{ z78X{bienQ)5|{H$dUXHlX%%et;B>&F>gCe3Kpp2S-a8CzU^giJzUw0{(NEp0000xrWIA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/firelock.png b/Resources/Textures/Interface/Radial/RCD/firelock.png new file mode 100644 index 0000000000000000000000000000000000000000..5b581a2aa373e2a7a7953aae0ccab5c8f2c75a3e GIT binary patch literal 637 zcmV-@0)qXCP)R4NtX3V{0nb^t7-Is7>4S@u3Po3`KN1;N5Eq&d`86_O;O zR;zgfa7kV50(X*8tFQ^YxSz3z);AA^^t#%`WW4|Y+9xLffbGLy;5p97j9w2s$008W zLte=X!jP^JWyG}Q3Bd1DBM%o-3H&)XVu!|JBX1+{yt$^a7~;2d93FQ~Tb|PJ+1>TP zf^d{AM*v?oZiG9KtUY!p9J)Tfxad0iF7!smz)#+Y;JucL#njbeG~PJ<|1Aia48UM7 z*lVfRJCXrF>qy7@P6q&R{7pk9H)rl0d~O4PDRbiIS1Bl^$khLOivdwI#<15d6J&QojvNo5)b|Z?%@0jhP%lI zLWB*xw5&V0ACg01qbms8%n()rWsG=`#AQultBwxYyXE`)zTfYg_g>!bCAGG;MlbCW zJ+=!0Jr{5#3Y?#x_iD8oxm=FT%}pN8&T@5l7=Um4`@CCPVtQhNPwVR#hC#Vpj^s>D zO<~(MilQKdU}0e))sX=Ia9Nhob)B6?gPlerSl4wu#82Yf93SUPt%j_3^V6#%Glmb{;S@DttNRkwAP1E#*5M;C2 z?rQ)blgUsl7E?*ihGAe?7KUN8t(_F@I8N`s0$G;-qdwplR3?)-I{}U3N-XAwb8&Go zl>a23u8J^w=ZOB%u{K=4JI3Me(J#RI$@Q&&bPUrpJx$X9s8*{ycy`L?tZP8iG^*7q zj^p49={f@2t9_)?gG?8~_}21BTO-UTgxK=yq-O#G8f_VFH`X3Ri3xc!xNPdf_y$tWo|Cimb*@YJ5Xo(ei$!* z_=^1fMkF7=9jH?(y$rf%p-|w>`xlxWnSXfPCm9(5Aq1+bV%s(c2M374Q7x-aO}gNDm><)Bt_6#DAUF=$lkD#%%2+J!j@6eR_ae z>!Y8%@%GI}bqPZcoU!wfuJ*v$`m_gDcfQxv9$4M^URQYlIe;8M4j>1R1IU4Y6nP)EX>4Tx04R}tkv&MmP!xqvQ%glE3U*L&$WR5rf~bh2RIvyaN?V~-2a}in2u&K2 z6c<1NmzipIj037> z8L4*mUrKu)ve@B2KYqcS*9Bn@jCJJ zrloVJzVjIhC%u0qzJVhK)RE_e5 ztjh}LEzWAW%9{7&FAU|i?Y{ z03*jdDo`Oge(*o|JzKLdIpHRSVnE=N_=^lXd^2>?KY z714cfIhP!Xx4VmC^F8Y>ig6*^6+zKO*^q|?WO*fh&$^R$%bn$wL{VwvDnio8h5ez1 zqHG?U0VGeTGf3X`E6PTx2nvfso6Md8e!9x{w--2`Z(5Z~r~`}(puvi4cNdAoWBv=B zo_~GUO0UPzwZ)-Lrhdj^iX2Oh{Tu3I`zucQXbC`a#s&DEMKBx21*DPN+W{DpMlLWe zwD!TDGf2YO65xcl i@8@K0U|?WifcORW6SO_Bl^qn~_51CdINneh{^%T^eR`f?pwaaCY)gQDYtvFl zDQy6Kuf1NkzVg=A)(uIB8r55Xhkz$B>fS)n??p(c+KX70&I55EB}7+cJsda;5NPjc z0^S0C*LD5#$%*m7%}LZszy&;jsXmG@9cy+K!-{D+1~dY`E#ODqy>Q_vMN#5jk0FLlRyZxPNwdyiV z6J6J_TCE5n?pck0czBp_I9$`f5-^7_zDBC~wT>Ba1$u5hbNQC(ER*-th1xT zIdJYxGMNm;ViD6cqmvWk;kLFmB9RC^Jv}>m3I70oK`}-U<_8$o5{3;F^Fx&C$H1>} zB)1CBWwW7br4q~M^UnJEdVD?~CypOud3iZHmKY7MUfSQ^|BuGd3p@l4LR&E?vI70lrz5S_XvZ%1Sws1N;cHyzKmnA8%|6ziX|`xkF0n&n_%HbNkk;Ude zBoe2q)oQGvp~0zX8cv6UAFf^d*YKUhufF)w%TIKMP8Z_wxcqr;PTokRi;Ig`ESBg* zQrorIxBV9Ax_&gD&$}EB2bD?%tJNAE*Ajcz^R0C9RC8}rbBkr b&|c{;rGF|O5qow*00000NkvXXu0mjf4SBQ| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/lv_coil.png b/Resources/Textures/Interface/Radial/RCD/lv_coil.png new file mode 100644 index 0000000000000000000000000000000000000000..f83ed75325b3aeb23335db6ac95d9413a414a80e GIT binary patch literal 850 zcmV-Y1FigtP)EX>4Tx04R}tkv&MmP!xqvQ%glE3U*L&$WR5rf~bh2RIvyaN?V~-2a}in2u&K2 z6c<1NmzipIj037> z8L4*mUrKu)ve@B2KYqcS*9Bn@jCJJ zrloVJzVjIhC%u0qzJVhK)RE_e5 ztjh}LEzWAW%9{7&FAU|i?Y{ z03*jdDo`Oge(*o|JzKLdIpHRSVnE=+ut>5SzMB&TEbHtBSF zPw!3#;Nalk@ZZ6vHlJUfjEVK(s`~2&TL@FmOnL9GAKH4oR51|;86U-@Km`EcCmyrC zZ@rY9h|8kVVq3oHL`i|F?+A%*upPN>E#SCAwdI?Rd}#M^hl)hSd87%6^9auS3kg{6 z0Feh7pCktW2vg4JTv=3_BP1+LIs1D1UM8SET-C#)5AEq@5P>CB9{U?`@)nnDG=g38qEO8iStOy zx%(S7*mjNMC!V%{-e0KBYFK;f^nT7=0_I*oo!*{qqd_DET2I42O+q4|4)5;g6dZB~Qr81bgi9LIK^z(k9VA7%bQ1rxXd#2p(BND_=}-_MNVk?k zh8_WHF&!EQgZ(q4RyuU*&?H;^CC4om8i$x`Q?1%uXb|$Id*Ao_-S>O%_ujiZM<$b@ zmDWLvtu3JC0y<9%j76iBW)i)go_74RfU#(_GCKMkS(ckZUMLh8i$*KI6Vds%&56Vt zTjV1nPZ~Rd<2Et=$k7P-iQGxiAtr? z*)vcq7FhedWQ*7z2;+9kjUPdm)5-UzyLeZI5kdg48(GA=GEDCF95><@DEmT4l7tWf zNs_F++uNV)*8o6|K0q!qSLX`^J^BEUw(#TRO)Elx)vN;9$MgpCIM>ranvVXVYOsF@ zgy3*FS?%i@-po1B8_d%i%(I$RDEmT`eIX8)lL#RYLf~9a^JVg&4*&4}a&t1^a=9?g zJpg3+9j568z*JSXvWr~zcraC!OE`{~bz z_&7Dit@&r%*FvzwQOr&TQu<7te>d{L!n(V=L7zFobcqzT^)saO>iULipja$eZFq5F zAAcZBm(yusnqly5|6U#D4}|dt!f1wpW*AnicCUuJ;L5CrovC?vc-6wv2L~u}0=Q;j z`TW=Fg{s!ZpS>d}77M6q9{@XSp{jirc1P`l9Cg@9Q<9HP*CbuH!tnqA002ovPDHLkV1g9tF*5)F literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/metal_tile.png b/Resources/Textures/Interface/Radial/RCD/metal_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..14f1ce2bd9d63cc5a257255ebae0adeb4958a546 GIT binary patch literal 297 zcmV+^0oMMBP)hMT|COj%1gaOlFq=cz7HP zGIw~*GNo%Q%M$mh!X=8p7}F97A#ls{558cj;n8)g7hd8RbzOrohG*YHN@?W)bz!3| zxibM<;064y07A&0JD`+;av)%K5pm8(k~O@fgb>1rsA(E=0cn~VUCKE}k|f5p#sW-M zv2CrB47i$rQwRv0z3UTEgpe`7x*${A5nMYnCErcJAsLw3{!LZ_R}R=ZvFR<4O6@ZR vOIvG-VHiLtMNt$8!%$n_wypmHc$^b&xLasC2fjuj00000NkvXXu0mjfypVN- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/multicoil.png b/Resources/Textures/Interface/Radial/RCD/multicoil.png new file mode 100644 index 0000000000000000000000000000000000000000..9e32919a7baaff69fd7af50625709fcc08970d35 GIT binary patch literal 976 zcmV;>126oEP)EX>4Tx04R}tkv&MmP!xqvQ%glE3U*L&$WR5rf~bh2RIvyaN?V~-2a}in2u&K2 z6c<1NmzipIj037> z8L4*mUrKu)ve@B2KYqcS*9Bn@jCJJ zrloVJzVjIhC%u0qzJVhK)RE_e5 ztjh}LEzWAW%9{7&FAU|i?Y{ z03*jdDo`Oge(*o|JzKLdIpHRSVnE=BjE6vuy8 z7gN{N2?aq6GIYt*W^p@t$dC`9QKfY6(oN7TT|3`b=+=OO7mpo01Y9r;>X0R1FbNhk zREuL*iDM$JgK}=%$i;HU-fz=;clZAHfA<6igTe5>BeH_e-#=Tp;qb!|0K2>E>UKN~ z6C9`X`@GND`(J&G=DzReRlND~i2~SrSH6?;{a69i>qW8bdAS6f_r_{t+X6t!VigV( zyqyZ&lPkhuvYG?B_{O$Hzd7LTo6?<|I8I5lT9?YU3&{2ed%b{LPaTo%RG70>V(;*0 zJ^|;wv3mS;jmeLzrJQozGXA%idaWpAd!%j(imCK->TN#RMp3uD9(1?B8vO6YBYwGJWCn(sEX>4Tx04R}tkv&MmP!xqvQ%glE3U*L&$WR5rf~bh2RIvyaN?V~-2a}in2u&K2 z6c<1NmzipIj037> z8L4*mUrKu)ve@B2KYqcS*9Bn@jCJJ zrloVJzVjIhC%u0qzJVhK)RE_e5 ztjh}LEzWAW%9{7&FAU|i?Y{ z03*jdDo`Oge(*o|JzKLdIpHRSVnE=@pMqo?bA%z>?!JzJS0bv|s^r|(MKUhx6XgX=Nn$hfP0TL1t z622X5Y4djb-At_OrysAa?LkV;w(_pmzhHgZtC)zD%4RV{=K%nOIJ4OMPJ79TxGWz* ztSF9yC`9MSj*w_;` zK5&GDNy*vn9;oZ5zg&KxX zk(1?Azoj~kzv9-JC;>!{=mz_w$Alkn{F8w6-4_M~HC0syeE(pVpo_ zeVp@_fVCG$$(b>&Z<^O^5FxtgY5373Bm(O2@&2BdCnO{!BoO`q2UEGHuY0KG00000 LNkvXXu0mjff4_KD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/plating.png b/Resources/Textures/Interface/Radial/RCD/plating.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a63acc610c5a0b0bdf72e2850f18200f539cf2 GIT binary patch literal 436 zcmV;l0ZaagP)?`jEiRV}hGB>ruBr-M*CpkM2z6b1@4Nvp zGlpS6p663`&uo3j^W1yxoP!VoecuOPQ>SWlyWMa+9%twOvnHaMOxw07iXvW~RDFHU zmtu*oj5W?X5cFcL{cHg5!pBPxoC0QsF$TsM@4YbwS(afOM+hN;axVoSgg{kQN#*jws6#P18W@B%R=JI4lpqIX5w(k6`{1k=7bS6qEyi>-8G^ zFW%CGFw9@XDYcrDn62+E!Lw`Iwtd-g(=@QwMmMJ902f7(+<1KZ0RZfF zyX2>)Lt{fk==*+RF)8I_OiBr6MwVrGJRURWN+~e&lsORvM^T5GrmpKneX!r}7xBQF eO}$~ms`vrJ)ueS~515(&0000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+SONCb}gq4{bv*z0uqR3I0A~bGJ`k#Y*CF*e{H|~ zj9hX-G#!$%-qE|5IThf56K3J#Y>e7`WO&rjwY@0_E|x$V|zOz>zr zB5FCCPBz%s;PS9OOL#I~0iD-V@f5GV1M=a!Z+JRYVxTe|MH-|uXa@cWziL8t;jS#B;cP<`83G@-B93Jd3eeS&^Z zA#!;f4B#Tj7AQjj2>3)nD3Q<1nFxL?07#)ZhsX^GkO&Vb$uWe)E^}d%jc+ooy)2yA zrcs*!gdm$Tu&F@-R*Zu9$*~}Y6uA{eBuSRyq>84HVv>|nPFCbJha9uylyfe*W-Xz_ zA|;hvN~uLF*MJ%*HPu{8tyPtsLXd)&V!vXhaSJUrX{qH_T5Z}9K0S8nspnpL?K*gb zfif}D$fJxpbR)N+QfzUPEp2%#TitXb)@GP-%1krQGV9a}wFA|s=Le|Kff_HQY+t@m z!>r5sWI6(C_(L`G$?MS%0ATsEb!{u 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/RCD/windows_and_grilles.png b/Resources/Textures/Interface/Radial/RCD/windows_and_grilles.png new file mode 100644 index 0000000000000000000000000000000000000000..e51ab094233f2f46c2da73f27f0ab409d4f0abea GIT binary patch literal 1205 zcmV;m1WNmfP)Y}j6o#KWo*6ri?HSt>w~ZS56_KV%NN7t3wIBpYRV4(K%1`JX7Oc8~C1S~jU%{qQ zK@~_<7bWe`R1g9wO&bV-B#k{2&)A8-J;Nd&O+sARUC>R>?#!KY=e_5==e=jd&6_uQ zo+j~}?FE464nW@P;l+y=gV*2v0Nb`(1{#LZ(fXswajssyD%t|jKYEsf?_8oQn?*~d zP<@{U0U;q#uaxmTmrPF&G221YG!#X_CqP0_Yc}w_JbKC?QYfOUDxr8B!!X*((R4+M*j$KOj?&W*kdK)sPB2uGQnony+WB5b>5wps#+ z1~tM#f!~UUtlaFhsU_m97K@|~9Gp1hVmxwRuv2^B;eH0pRrM zQ#<@Zp|Hc((!rO^2&99L?W@npP0C}!7&HDDH{g;g98)_g{_ZmW?~b}W+tX5rvMO=grs(nI&gsU zv*H#yOf z4j4w7uDC`#p;0cZJ+-;vfZJTb}p;YW%KZ%f^TJznUh$<=x z+aXMYVzB^1>UxVoU>q8FCLPc=PChs?Y6U!l4ul8@fb84@6JTKMBvD1>)>ofh zk18tJg{2+-^yJi*fA;(Zq*{e!MB(1u3A0hHbgl!nK#*UnqK3QZQocFkhjXk{Wdgqm_^`oj zfVgPllu8s!CH!sa^Z^3!%WH^`#KgqUIBRr157e6h|1`q9b>ff}QyOO9{vKS{WpH@R zx^;WpJl5CCNN+dChexgPJC?be%`34PY;4UY8g=W#BF5E6obMgV0(Xo`ea_u>8z zT>0p7do$sgp~L)f|27L7HO;y%)ou6vUh{z8V%^zTKQnZ={S3VLF?j*t|FnMrHpwI= T(z-m800000NkvXXu0mjf=vzYl literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/back_hover.png b/Resources/Textures/Interface/Radial/back_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..7378a60fef4f78362e422ba5659a1497a87fb5a3 GIT binary patch literal 495 zcmVfN`NmvpMPcmu$Y=bipvZDB&j-L-&_Pd zZwFPafr$7>1`yPneMi@n2)ErIu=#q6dn3tVuIGdb~DsV_AVeI5K%xx&@~0C`NR&-Kt%FtKCyL8L8CXcVrmuFh8(#NB1r6I zR)&=jLKNGEtbnd5KyT;(K%+ObbWOqLFWMlEy^8`IApnFmU~}}m7+W|2&i86QF##lN z07N8r#*VYyA8t}Wx002ovPDHLkV1lJz)-?bC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/back_normal.png b/Resources/Textures/Interface/Radial/back_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4a20048c6b4f75a7e8c7415b01e5766c7f4fef GIT binary patch literal 525 zcmV+o0`mQdP)As=6vzK9pJDl*w=4w{UV0tcz1ub+{=6gcH;+AYC-j!KwHO-24WeoLmI8 z$brEi4qftWNX0}9bZ8y~l6U{h{oc#FcjRt5o#HR;9)D~ZKn9QjXh}rna%E>2d92q< z02sx{Ur0M1zvpfSpv3{eF!FeMdR$!6d*1$}Etf01IEYvPTKsrC^Z-DqL)?@e0BG7n zljhz8uwE}=7Y zc-|hVwqnoQH-j^wees1qk*Cv&$K&^0{~q8Qbm`z{o`@+0 P00000NkvXXu0mjfftc^@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/button_hover.png b/Resources/Textures/Interface/Radial/button_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..49885a26c37de185dd882df53e6cdf4fea744873 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJS)MMAArXg@6C_?X2+mYiQ#0+A zo3^j&s}A>JMuXFzZ>3$l^2swaQ=>1zaav2{z8$+i3F_+f>*h{BojseioTZIf0tn2` zzN$EK{=C2N{rp*1Kc3KE>%4pS3j3^P6KYxF3FM83J;26GS!GbRxVf&sxe_sFP!9iQg6hj{N znm<1#uFGs-?bgoBdieW$zNDLTf(Z*IQP6$>DEl=R679^D-K+w?{pp#{#|}Wxs$F`eiLT0w_6z#d-q#&B z(Lk5l`?_PaU7$v>nuI2`>jB19W3>;awxhUD?WXQ%-@QtNWw}MlfVgS^h?4Zl#E(zQ j$aWO}`8sxRaB%nrkAA6lY1Zx400000NkvXXu0mjfgC?>Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Radial/close_normal.png b/Resources/Textures/Interface/Radial/close_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..99417f28295d3d2693f15493944818ffc2f036e8 GIT binary patch literal 391 zcmV;20eJq2P)I(57Hhkii}DTN(@<^A#TT6&V8^@>>}akcneK;u2#>m&g^umein5)qz0R zC%vcB={+DIAmG0vav^2e`jfMUpxt#A`ZF|pLg988|ITnlOor!b0Da#X`NizXZz;Y@ lsJ7#!i)yazI3OS(;2W3Ut002ovPDHLkV1g--t;7HT literal 0 HcmV?d00001 From 93bda6f5936d52bd42007552192454565ff84fa9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 04:30:53 +0000 Subject: [PATCH 034/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 46d239e83f..50019fb804 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: SonicHDC - changes: - - message: Added reinforced diagonal! - type: Add - id: 5767 - time: '2024-01-22T14:53:19.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24393 - author: Alekshhh changes: - message: Hud eyepatches have been added to BarDrobes, MediDrobes and SecTechs. @@ -3794,3 +3787,14 @@ id: 6266 time: '2024-03-31T04:09:15.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/24287 +- author: chromiumboy + changes: + - message: Additional construction options have been added to the Rapid Construction + Device (RCD), along with a radial style UI for fast navigation + type: Add + - message: The number of charges and the length of time required to build a structure + with the RCD now vary depending on the complexity of the constructed fixture + type: Tweak + id: 6267 + time: '2024-03-31T04:29:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/22799 From 32bd6630ef7d8ba4993b626f73a7401f4ea27aaa Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 31 Mar 2024 15:36:02 +1100 Subject: [PATCH 035/206] Update submodule to 217.2.0 (#26592) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index b28b5ed09b..99c5b0ad08 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit b28b5ed09b361c4f2da5dd9c3e392b79e6b23c51 +Subproject commit 99c5b0ad08351af347db3a122373f2c4482e94dc From 6b7427e3ee8a4453d30b585e0fc4fa734f5f46d5 Mon Sep 17 00:00:00 2001 From: UBlueberry <161545003+UBlueberry@users.noreply.github.com> Date: Sun, 31 Mar 2024 00:39:40 -0400 Subject: [PATCH 036/206] Southern accent (#26543) * created the AccentComponent and the AccentSystem * word replacement schtuhff * made it a trait fr ongg!!1 * Update Content.Server/Speech/EntitySystems/SouthernAccentSystem.cs --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- .../Components/SouthernAccentComponent.cs | 8 ++++++ .../EntitySystems/SouthernAccentSystem.cs | 28 +++++++++++++++++++ Resources/Locale/en-US/accent/southern.ftl | 17 +++++++++++ Resources/Locale/en-US/traits/traits.ftl | 3 ++ .../Prototypes/Accents/word_replacements.yml | 9 ++++++ Resources/Prototypes/Traits/neutral.yml | 7 +++++ 6 files changed, 72 insertions(+) create mode 100644 Content.Server/Speech/Components/SouthernAccentComponent.cs create mode 100644 Content.Server/Speech/EntitySystems/SouthernAccentSystem.cs create mode 100644 Resources/Locale/en-US/accent/southern.ftl diff --git a/Content.Server/Speech/Components/SouthernAccentComponent.cs b/Content.Server/Speech/Components/SouthernAccentComponent.cs new file mode 100644 index 0000000000..0c44290086 --- /dev/null +++ b/Content.Server/Speech/Components/SouthernAccentComponent.cs @@ -0,0 +1,8 @@ +using Content.Server.Speech.EntitySystems; + +namespace Content.Server.Speech.Components; + +[RegisterComponent] +[Access(typeof(SouthernAccentSystem))] +public sealed partial class SouthernAccentComponent : Component +{ } diff --git a/Content.Server/Speech/EntitySystems/SouthernAccentSystem.cs b/Content.Server/Speech/EntitySystems/SouthernAccentSystem.cs new file mode 100644 index 0000000000..4d401367cc --- /dev/null +++ b/Content.Server/Speech/EntitySystems/SouthernAccentSystem.cs @@ -0,0 +1,28 @@ +using System.Text.RegularExpressions; +using Content.Server.Speech.Components; + +namespace Content.Server.Speech.EntitySystems; + +public sealed class SouthernAccentSystem : EntitySystem +{ + [Dependency] private readonly ReplacementAccentSystem _replacement = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnAccent); + } + + private void OnAccent(EntityUid uid, SouthernAccentComponent component, AccentGetEvent args) + { + var message = args.Message; + + message = _replacement.ApplyReplacements(message, "southern"); + + //They shoulda started runnin' an' hidin' from me! + message = Regex.Replace(message, @"ing\b", "in'"); + message = Regex.Replace(message, @"\band\b", "an'"); + message = Regex.Replace(message, "d've", "da"); + args.Message = message; + } +}; diff --git a/Resources/Locale/en-US/accent/southern.ftl b/Resources/Locale/en-US/accent/southern.ftl new file mode 100644 index 0000000000..7e1657a3ed --- /dev/null +++ b/Resources/Locale/en-US/accent/southern.ftl @@ -0,0 +1,17 @@ +accent-southern-words-1 = you all +accent-southern-words-replace-1 = y'all + +accent-southern-words-2 = you guys +accent-southern-words-replace-2 = y'all + +accent-southern-words-3 = isn't +accent-southern-words-replace-3 = ain't + +accent-southern-words-4 = is not +accent-southern-words-replace-4 = ain't + +accent-southern-words-5 = aren't +accent-southern-words-replace-5 = ain't + +accent-southern-words-6 = are not +accent-southern-words-replace-6 = ain't diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index b82cb0033a..98f0817f74 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -33,5 +33,8 @@ trait-frontal-lisp-desc = You thpeak with a lithp trait-socialanxiety-name = Social Anxiety trait-socialanxiety-desc = You are anxious when you speak and stutter. +trait-southern-name = Southern Drawl +trait-southern-desc = Are you wonderin' what this does? + trait-snoring-name = Snoring trait-snoring-desc = You will snore while sleeping. diff --git a/Resources/Prototypes/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index abcfeded22..3fadc69010 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -367,6 +367,15 @@ accent-cowboy-words-98: accent-cowboy-replacement-98 accent-cowboy-words-99: accent-cowboy-replacement-99 +- type: accent + id: southern + wordReplacements: + accent-southern-words-1: accent-southern-words-replace-1 + accent-southern-words-2: accent-southern-words-replace-2 + accent-southern-words-3: accent-southern-words-replace-3 + accent-southern-words-4: accent-southern-words-replace-4 + accent-southern-words-5: accent-southern-words-replace-5 + accent-southern-words-6: accent-southern-words-replace-6 # For the chat sanitization system - type: accent diff --git a/Resources/Prototypes/Traits/neutral.yml b/Resources/Prototypes/Traits/neutral.yml index 9e7f765507..ba9bd8d886 100644 --- a/Resources/Prototypes/Traits/neutral.yml +++ b/Resources/Prototypes/Traits/neutral.yml @@ -16,3 +16,10 @@ - type: MothAccent - type: ReplacementAccent accent: dwarf + +- type: trait + id: Southern + name: trait-southern-name + description: trait-southern-desc + components: + - type: SouthernAccent From 1b94e0156311c918d17c7de4b79fedd328e04efc Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Sun, 31 Mar 2024 00:40:22 -0400 Subject: [PATCH 037/206] Prevent storing liquids in equipped buckets (#24412) * Block access to solutions in equipped spillables. * Stop Drink verb appearing if the solution can't be accessed. --- .../Fluids/EntitySystems/PuddleSystem.Spillable.cs | 12 ++++++++++++ .../Nutrition/EntitySystems/DrinkSystem.cs | 4 ++++ .../Components/BlockSolutionAccessComponent.cs | 11 +++++++++++ .../EntitySystems/SharedSolutionContainerSystem.cs | 9 +++++++++ 4 files changed, 36 insertions(+) create mode 100644 Content.Shared/Chemistry/Components/BlockSolutionAccessComponent.cs diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs index ce5b5b3637..a365b8d0a4 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs @@ -29,6 +29,7 @@ public sealed partial class PuddleSystem // Openable handles the event if it's closed SubscribeLocalEvent(SplashOnMeleeHit, after: [typeof(OpenableSystem)]); SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); SubscribeLocalEvent(OnOverflow); SubscribeLocalEvent(OnDoAfter); SubscribeLocalEvent(OnAttemptPacifiedThrow); @@ -114,6 +115,9 @@ public sealed partial class PuddleSystem if (!_solutionContainerSystem.TryGetSolution(entity.Owner, entity.Comp.SolutionName, out var soln, out var solution)) return; + // block access to the solution while worn + AddComp(entity); + if (solution.Volume == 0) return; @@ -122,6 +126,14 @@ public sealed partial class PuddleSystem TrySplashSpillAt(entity.Owner, Transform(args.Equipee).Coordinates, drainedSolution, out _); } + private void OnGotUnequipped(Entity entity, ref GotUnequippedEvent args) + { + if (!entity.Comp.SpillWorn) + return; + + RemCompDeferred(entity); + } + private void SpillOnLand(Entity entity, ref LandEvent args) { if (!_solutionContainerSystem.TryGetSolution(entity.Owner, entity.Comp.SolutionName, out var soln, out var solution)) diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs index 5fb090087a..036c855dbb 100644 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs @@ -410,6 +410,10 @@ public sealed class DrinkSystem : EntitySystem !_body.TryGetBodyOrganComponents(ev.User, out var stomachs, body)) return; + // Make sure the solution exists + if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out var solution)) + return; + // no drinking from living drinks, have to kill them first. if (_mobState.IsAlive(entity)) return; diff --git a/Content.Shared/Chemistry/Components/BlockSolutionAccessComponent.cs b/Content.Shared/Chemistry/Components/BlockSolutionAccessComponent.cs new file mode 100644 index 0000000000..182f92d7d3 --- /dev/null +++ b/Content.Shared/Chemistry/Components/BlockSolutionAccessComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Chemistry.Components; + +/// +/// Blocks all attempts to access solutions contained by this entity. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class BlockSolutionAccessComponent : Component +{ +} diff --git a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs index 6e762aa598..d71fffcdee 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs @@ -133,6 +133,12 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem /// public bool TryGetSolution(Entity container, string? name, [NotNullWhen(true)] out Entity? entity) { + if (TryComp(container, out BlockSolutionAccessComponent? blocker)) + { + entity = null; + return false; + } + EntityUid uid; if (name is null) uid = container; @@ -178,6 +184,9 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem if (!Resolve(container, ref container.Comp, logMissing: false)) yield break; + if (HasComp(container)) + yield break; + foreach (var name in container.Comp.Containers) { if (ContainerSystem.GetContainer(container, $"solution@{name}") is ContainerSlot slot && slot.ContainedEntity is { } solutionId) From 1ad509173dc99b9ed577ed5aa696641ebcb354cc Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 04:41:28 +0000 Subject: [PATCH 038/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 50019fb804..02a44e5638 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,19 +1,4 @@ Entries: -- author: Alekshhh - changes: - - message: Hud eyepatches have been added to BarDrobes, MediDrobes and SecTechs. - They're just cooler looking huds. - type: Add - id: 5768 - time: '2024-01-22T14:59:32.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24132 -- author: CrigCrag - changes: - - message: Removed the revolutionaries gamemode pending a rework. - type: Remove - id: 5769 - time: '2024-01-23T02:11:09.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24420 - author: themias changes: - message: Added different footstep sounds for blood, soda and juice @@ -3798,3 +3783,18 @@ id: 6267 time: '2024-03-31T04:29:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/22799 +- author: UBlueberry + changes: + - message: Nanotransen is now recruitin' personnel that speak with a Southern drawl. + type: Add + id: 6268 + time: '2024-03-31T04:39:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26543 +- author: Tayrtahn + changes: + - message: You can no longer drink out of or put liquids into buckets worn on your + head. + type: Fix + id: 6269 + time: '2024-03-31T04:40:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/24412 From 4e618e9387ffe9696e1241f6073aaa03e126832d Mon Sep 17 00:00:00 2001 From: drteaspoon420 <87363733+drteaspoon420@users.noreply.github.com> Date: Sun, 31 Mar 2024 07:59:36 +0300 Subject: [PATCH 039/206] Fix 'Hypopen shouldn't display solution examine text' (#26453) * stealthy hypo * ExaminableSolution hand check when in covert implement. ExaminableSolution now has 'hidden' datafield to enable chemical inspection only in hand. * cleaning code * more cleaning * Hidden datafield renamed to HeldOnly * review --------- Co-authored-by: metalgearsloth --- .../ExaminableSolutionComponent.cs | 6 +++++ .../SharedSolutionContainerSystem.cs | 26 +++++++++++++++++++ .../Objects/Specific/Medical/hypospray.yml | 1 + 3 files changed, 33 insertions(+) diff --git a/Content.Shared/Chemistry/Components/SolutionManager/ExaminableSolutionComponent.cs b/Content.Shared/Chemistry/Components/SolutionManager/ExaminableSolutionComponent.cs index 76e7967db2..1abe81180c 100644 --- a/Content.Shared/Chemistry/Components/SolutionManager/ExaminableSolutionComponent.cs +++ b/Content.Shared/Chemistry/Components/SolutionManager/ExaminableSolutionComponent.cs @@ -5,4 +5,10 @@ public sealed partial class ExaminableSolutionComponent : Component { [DataField, ViewVariables(VVAccess.ReadWrite)] public string Solution = "default"; + + /// + /// If false then the hidden solution is always visible. + /// + [DataField] + public bool HeldOnly; } diff --git a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs index d71fffcdee..5bb97e83eb 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs @@ -13,6 +13,8 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using System.Text; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; using Dependency = Robust.Shared.IoC.DependencyAttribute; namespace Content.Shared.Chemistry.EntitySystems; @@ -53,6 +55,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem [Dependency] protected readonly ChemicalReactionSystem ChemicalReactionSystem = default!; [Dependency] protected readonly ExamineSystemShared ExamineSystem = default!; [Dependency] protected readonly SharedAppearanceSystem AppearanceSystem = default!; + [Dependency] protected readonly SharedHandsSystem Hands = default!; [Dependency] protected readonly SharedContainerSystem ContainerSystem = default!; public override void Initialize() @@ -729,6 +732,9 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem return; } + if (!CanSeeHiddenSolution(entity,args.Examiner)) + return; + var primaryReagent = solution.GetPrimaryReagentId(); if (string.IsNullOrEmpty(primaryReagent?.Prototype)) @@ -825,6 +831,9 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem return; } + if (!CanSeeHiddenSolution(entity,args.User)) + return; + var target = args.Target; var user = args.User; var verb = new ExamineVerb() @@ -874,5 +883,22 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem return msg; } + /// + /// Check if examinable solution requires you to hold the item in hand. + /// + private bool CanSeeHiddenSolution(Entity entity, EntityUid examiner) + { + // If not held-only then it's always visible. + if (!entity.Comp.HeldOnly) + return true; + + if (TryComp(examiner, out HandsComponent? handsComp)) + { + return Hands.IsHolding(examiner, entity, out _, handsComp); + } + + return true; + } + #endregion Event Handlers } diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index abcabd7481..dbc78a8409 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -417,6 +417,7 @@ solution: hypospray - type: ExaminableSolution solution: hypospray + heldOnly: true # Allow examination only when held in hand. - type: Hypospray onlyAffectsMobs: false - type: UseDelay From 213c075e13a2b8aa5f1995dbf95ca82ef4b2ba92 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 05:00:42 +0000 Subject: [PATCH 040/206] 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 02a44e5638..19c1c744cf 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: themias - changes: - - message: Added different footstep sounds for blood, soda and juice - type: Add - id: 5770 - time: '2024-01-23T04:18:33.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24406 - author: TheShuEd changes: - message: 'Flesh and Rock anom reworked: It should be easier to maintain them now @@ -3798,3 +3791,11 @@ id: 6269 time: '2024-03-31T04:40:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/24412 +- author: DrTeaspoon + changes: + - message: Hypopen no longer shows chemical contents when examined, when not held + by the examinee. + type: Fix + id: 6270 + time: '2024-03-31T04:59:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26453 From c91ed9685349efd0cb7dc0e541f5349dbdb17f81 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 31 Mar 2024 16:12:52 +1100 Subject: [PATCH 041/206] Revert Paint (#26593) * Revert "Fix build (#26258)" This reverts commit 6de5fbfafbde700d711a566f6a43f05f7a99e455. * Revert "Spray Paint (Review Ready) (#23003)" This reverts commit e4d5e7f1aebfc37b1bc3453fdb39578f3897b6a1. # Conflicts: # Resources/Prototypes/Entities/Structures/Holographic/projections.yml --- Content.Client/Paint/PaintVisualizerSystem.cs | 116 ------- Content.Server/Paint/PaintSystem.cs | 178 ----------- .../EntitySystems/SpawnItemsOnUseSystem.cs | 6 +- Content.Shared/Paint/PaintComponent.cs | 60 ---- Content.Shared/Paint/PaintDoAfterEvent.cs | 9 - Content.Shared/Paint/PaintRemoverComponent.cs | 24 -- .../Paint/PaintRemoverDoAfterEvent.cs | 9 - Content.Shared/Paint/PaintRemoverSystem.cs | 94 ------ Content.Shared/Paint/PaintedComponent.cs | 41 --- Content.Shared/Paint/SharedPaintSystem.cs | 11 - .../SprayPainter/SharedSprayPainterSystem.cs | 3 - Resources/Locale/en-US/paint/paint.ftl | 8 - .../Prototypes/Catalog/Cargo/cargo_fun.yml | 10 - .../Prototypes/Catalog/Fills/Crates/fun.yml | 48 +-- .../Prototypes/Catalog/Fills/Lockers/misc.yml | 4 - .../Markers/Spawners/Random/crates.yml | 1 - .../Markers/Spawners/Random/maintenance.yml | 5 - .../Prototypes/Entities/Mobs/NPCs/carp.yml | 1 - .../Entities/Mobs/NPCs/revenant.yml | 3 - .../Entities/Mobs/Player/guardian.yml | 2 - .../Entities/Objects/Fun/spray_paint.yml | 292 ------------------ .../Objects/Materials/Sheets/glass.yml | 1 - .../Objects/Materials/Sheets/metal.yml | 1 - .../Objects/Materials/Sheets/other.yml | 3 - .../Entities/Objects/Materials/materials.yml | 1 - .../Entities/Objects/Misc/tiles.yml | 3 - .../Objects/Specific/Janitorial/soap.yml | 1 - .../Objects/Weapons/Melee/e_sword.yml | 4 - .../Structures/Decoration/bonfire.yml | 3 - .../Structures/Holographic/projections.yml | 3 - .../Entities/Structures/hydro_tray.yml | 3 - Resources/Prototypes/tags.yml | 3 - .../Textures/Interface/VerbIcons/paint.svg | 39 --- .../Interface/VerbIcons/paint.svg.192dpi.png | Bin 15653 -> 0 bytes .../VerbIcons/paint.svg.192dpi.png.yml | 2 - .../Fun/spraycans.rsi/clown-inhand-left.png | Bin 20773 -> 0 bytes .../Fun/spraycans.rsi/clown-inhand-right.png | Bin 20783 -> 0 bytes .../Objects/Fun/spraycans.rsi/meta.json | 19 +- .../Fun/spraycans.rsi/spray-inhand-left.png | Bin 21199 -> 0 bytes .../Fun/spraycans.rsi/spray-inhand-right.png | Bin 21213 -> 0 bytes .../Objects/Fun/spraycans.rsi/spray_cap.png | Bin 0 -> 246 bytes 41 files changed, 11 insertions(+), 1000 deletions(-) delete mode 100644 Content.Client/Paint/PaintVisualizerSystem.cs delete mode 100644 Content.Server/Paint/PaintSystem.cs delete mode 100644 Content.Shared/Paint/PaintComponent.cs delete mode 100644 Content.Shared/Paint/PaintDoAfterEvent.cs delete mode 100644 Content.Shared/Paint/PaintRemoverComponent.cs delete mode 100644 Content.Shared/Paint/PaintRemoverDoAfterEvent.cs delete mode 100644 Content.Shared/Paint/PaintRemoverSystem.cs delete mode 100644 Content.Shared/Paint/PaintedComponent.cs delete mode 100644 Content.Shared/Paint/SharedPaintSystem.cs delete mode 100644 Resources/Locale/en-US/paint/paint.ftl delete mode 100644 Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml delete mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg delete mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png delete mode 100644 Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png.yml delete mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-left.png delete mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png delete mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png delete mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png create mode 100644 Resources/Textures/Objects/Fun/spraycans.rsi/spray_cap.png diff --git a/Content.Client/Paint/PaintVisualizerSystem.cs b/Content.Client/Paint/PaintVisualizerSystem.cs deleted file mode 100644 index 8d037811fa..0000000000 --- a/Content.Client/Paint/PaintVisualizerSystem.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System.Linq; -using Robust.Client.GameObjects; -using static Robust.Client.GameObjects.SpriteComponent; -using Content.Shared.Clothing; -using Content.Shared.Hands; -using Content.Shared.Paint; -using Robust.Client.Graphics; -using Robust.Shared.Prototypes; - -namespace Content.Client.Paint; - -public sealed class PaintedVisualizerSystem : VisualizerSystem -{ - /// - /// Visualizer for Paint which applies a shader and colors the entity. - /// - - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly IPrototypeManager _protoMan = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnHeldVisualsUpdated); - SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnEquipmentVisualsUpdated); - } - - protected override void OnAppearanceChange(EntityUid uid, PaintedComponent component, ref AppearanceChangeEvent args) - { - var shader = _protoMan.Index(component.ShaderName).Instance(); - - if (args.Sprite == null) - return; - - // What is this even doing? It's not even checking what the value is. - if (!_appearance.TryGetData(uid, PaintVisuals.Painted, out bool isPainted)) - return; - - var sprite = args.Sprite; - - foreach (var spriteLayer in sprite.AllLayers) - { - if (spriteLayer is not Layer layer) - continue; - - if (layer.Shader == null) // If shader isn't null we dont want to replace the original shader. - { - layer.Shader = shader; - layer.Color = component.Color; - } - } - } - - private void OnHeldVisualsUpdated(EntityUid uid, PaintedComponent component, HeldVisualsUpdatedEvent args) - { - if (args.RevealedLayers.Count == 0) - return; - - if (!TryComp(args.User, out SpriteComponent? sprite)) - return; - - foreach (var revealed in args.RevealedLayers) - { - if (!sprite.LayerMapTryGet(revealed, out var layer)) - continue; - - sprite.LayerSetShader(layer, component.ShaderName); - sprite.LayerSetColor(layer, component.Color); - } - } - - private void OnEquipmentVisualsUpdated(EntityUid uid, PaintedComponent component, EquipmentVisualsUpdatedEvent args) - { - if (args.RevealedLayers.Count == 0) - return; - - if (!TryComp(args.Equipee, out SpriteComponent? sprite)) - return; - - foreach (var revealed in args.RevealedLayers) - { - if (!sprite.LayerMapTryGet(revealed, out var layer)) - continue; - - sprite.LayerSetShader(layer, component.ShaderName); - sprite.LayerSetColor(layer, component.Color); - } - } - - private void OnShutdown(EntityUid uid, PaintedComponent component, ref ComponentShutdown args) - { - if (!TryComp(uid, out SpriteComponent? sprite)) - return; - - component.BeforeColor = sprite.Color; - var shader = _protoMan.Index(component.ShaderName).Instance(); - - if (!Terminating(uid)) - { - foreach (var spriteLayer in sprite.AllLayers) - { - if (spriteLayer is not Layer layer) - continue; - - if (layer.Shader == shader) // If shader isn't same as one in component we need to ignore it. - { - layer.Shader = null; - if (layer.Color == component.Color) // If color isn't the same as one in component we don't want to change it. - layer.Color = component.BeforeColor; - } - } - } - } -} diff --git a/Content.Server/Paint/PaintSystem.cs b/Content.Server/Paint/PaintSystem.cs deleted file mode 100644 index 892f961d63..0000000000 --- a/Content.Server/Paint/PaintSystem.cs +++ /dev/null @@ -1,178 +0,0 @@ -using Content.Shared.Popups; -using Content.Shared.Paint; -using Content.Shared.Sprite; -using Content.Shared.DoAfter; -using Content.Shared.Interaction; -using Content.Server.Chemistry.Containers.EntitySystems; -using Robust.Shared.Audio.Systems; -using Content.Shared.Humanoid; -using Robust.Shared.Utility; -using Content.Shared.Verbs; -using Content.Shared.SubFloor; -using Content.Server.Nutrition.Components; -using Content.Shared.Inventory; -using Content.Server.Nutrition.EntitySystems; - -namespace Content.Server.Paint; - -/// -/// Colors target and consumes reagent on each color success. -/// -public sealed class PaintSystem : SharedPaintSystem -{ - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; - [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly OpenableSystem _openable = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnInteract); - SubscribeLocalEvent(OnPaint); - SubscribeLocalEvent>(OnPaintVerb); - } - - private void OnInteract(EntityUid uid, PaintComponent component, AfterInteractEvent args) - { - if (!args.CanReach) - return; - - if (args.Target is not { Valid: true } target) - return; - - PrepPaint(uid, component, target, args.User); - } - - private void OnPaintVerb(EntityUid uid, PaintComponent component, GetVerbsEvent args) - { - if (!args.CanInteract || !args.CanAccess) - return; - - var paintText = Loc.GetString("paint-verb"); - - var verb = new UtilityVerb() - { - Act = () => - { - PrepPaint(uid, component, args.Target, args.User); - }, - - Text = paintText, - Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/paint.svg.192dpi.png")) - }; - args.Verbs.Add(verb); - } - private void PrepPaint(EntityUid uid, PaintComponent component, EntityUid target, EntityUid user) - { - - var doAfterEventArgs = new DoAfterArgs(EntityManager, user, component.Delay, new PaintDoAfterEvent(), uid, target: target, used: uid) - { - BreakOnMove = true, - NeedHand = true, - BreakOnHandChange = true - }; - - _doAfterSystem.TryStartDoAfter(doAfterEventArgs); - } - - private void OnPaint(Entity entity, ref PaintDoAfterEvent args) - { - if (args.Target == null || args.Used == null) - return; - - if (args.Handled || args.Cancelled) - return; - - if (args.Target is not { Valid: true } target) - return; - - if (!_openable.IsOpen(entity)) - { - _popup.PopupEntity(Loc.GetString("paint-closed", ("used", args.Used)), args.User, args.User, PopupType.Medium); - return; - } - - if (HasComp(target) || HasComp(target)) - { - _popup.PopupEntity(Loc.GetString("paint-failure-painted", ("target", args.Target)), args.User, args.User, PopupType.Medium); - return; - } - - if (!entity.Comp.Blacklist?.IsValid(target, EntityManager) != true || HasComp(target) || HasComp(target)) - { - _popup.PopupEntity(Loc.GetString("paint-failure", ("target", args.Target)), args.User, args.User, PopupType.Medium); - return; - } - - if (TryPaint(entity, target)) - { - EnsureComp(target, out PaintedComponent? paint); - EnsureComp(target); - - paint.Color = entity.Comp.Color; // set the target color to the color specified in the spray paint yml. - _audio.PlayPvs(entity.Comp.Spray, entity); - paint.Enabled = true; - - if (HasComp(target)) // Paint any clothing the target is wearing. - { - if (_inventory.TryGetSlots(target, out var slotDefinitions)) - { - foreach (var slot in slotDefinitions) - { - if (!_inventory.TryGetSlotEntity(target, slot.Name, out var slotEnt)) - continue; - - if (HasComp(slotEnt.Value) || !entity.Comp.Blacklist?.IsValid(slotEnt.Value, - EntityManager) != true - || HasComp(slotEnt.Value) || - HasComp( - slotEnt.Value)) - { - continue; - } - - EnsureComp(slotEnt.Value, out PaintedComponent? slotpaint); - EnsureComp(slotEnt.Value); - slotpaint.Color = entity.Comp.Color; - _appearanceSystem.SetData(slotEnt.Value, PaintVisuals.Painted, true); - Dirty(slotEnt.Value, slotpaint); - } - } - } - - _popup.PopupEntity(Loc.GetString("paint-success", ("target", args.Target)), args.User, args.User, PopupType.Medium); - _appearanceSystem.SetData(target, PaintVisuals.Painted, true); - Dirty(target, paint); - args.Handled = true; - return; - } - - if (!TryPaint(entity, target)) - { - _popup.PopupEntity(Loc.GetString("paint-empty", ("used", args.Used)), args.User, args.User, PopupType.Medium); - return; - } - } - - private bool TryPaint(Entity reagent, EntityUid target) - { - if (HasComp(target) || HasComp(target)) - return false; - - if (_solutionContainer.TryGetSolution(reagent.Owner, reagent.Comp.Solution, out _, out var solution)) - { - var quantity = solution.RemoveReagent(reagent.Comp.Reagent, reagent.Comp.ConsumptionUnit); - if (quantity > 0)// checks quantity of solution is more than 0. - return true; - - if (quantity < 1) - return false; - } - return false; - } -} diff --git a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs index 0b4b13d6e4..c49bfdec93 100644 --- a/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs +++ b/Content.Server/Storage/EntitySystems/SpawnItemsOnUseSystem.cs @@ -80,6 +80,11 @@ namespace Content.Server.Storage.EntitySystems _adminLogger.Add(LogType.EntitySpawn, LogImpact.Low, $"{ToPrettyString(args.User)} used {ToPrettyString(uid)} which spawned {ToPrettyString(entityToPlaceInHands.Value)}"); } + if (component.Sound != null) + { + _audio.PlayPvs(component.Sound, uid); + } + component.Uses--; // Delete entity only if component was successfully used @@ -92,7 +97,6 @@ namespace Content.Server.Storage.EntitySystems if (entityToPlaceInHands != null) { _hands.PickupOrDrop(args.User, entityToPlaceInHands.Value); - _audio.PlayPvs(component.Sound, entityToPlaceInHands.Value); } } } diff --git a/Content.Shared/Paint/PaintComponent.cs b/Content.Shared/Paint/PaintComponent.cs deleted file mode 100644 index ad09f4ca73..0000000000 --- a/Content.Shared/Paint/PaintComponent.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Content.Shared.FixedPoint; -using Robust.Shared.Audio; -using Content.Shared.Whitelist; -using Robust.Shared.Prototypes; -using Robust.Shared.GameStates; - -namespace Content.Shared.Paint; - -/// -/// Entity when used on another entity will paint target entity. -/// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -[Access(typeof(SharedPaintSystem))] -public sealed partial class PaintComponent : Component -{ - /// - /// Noise made when paint applied. - /// - [DataField] - public SoundSpecifier Spray = new SoundPathSpecifier("/Audio/Effects/spray2.ogg"); - - /// - /// Solution on the entity that contains the paint. - /// - [DataField] - public string Solution = "drink"; - - /// - /// How long the doafter will take. - /// - [DataField] - public int Delay = 2; - - /// - /// Reagent that will be used as paint. - /// - [DataField, AutoNetworkedField] - public ProtoId Reagent = "SpaceGlue"; - - /// - /// Color that the painting entity will instruct the painted entity to be. - /// - [DataField, AutoNetworkedField] - public Color Color = Color.FromHex("#c62121"); - - [DataField, ViewVariables(VVAccess.ReadWrite)] - public EntityWhitelist? Blacklist; - /// - /// Reagent consumption per use. - /// - [DataField] - public FixedPoint2 ConsumptionUnit = FixedPoint2.New(5); - - /// - /// Duration per unit - /// - [DataField] - public TimeSpan DurationPerUnit = TimeSpan.FromSeconds(6); -} diff --git a/Content.Shared/Paint/PaintDoAfterEvent.cs b/Content.Shared/Paint/PaintDoAfterEvent.cs deleted file mode 100644 index 0851f1541b..0000000000 --- a/Content.Shared/Paint/PaintDoAfterEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Shared.DoAfter; -using Robust.Shared.Serialization; - -namespace Content.Shared.Paint; - -[Serializable, NetSerializable] -public sealed partial class PaintDoAfterEvent : SimpleDoAfterEvent -{ -} diff --git a/Content.Shared/Paint/PaintRemoverComponent.cs b/Content.Shared/Paint/PaintRemoverComponent.cs deleted file mode 100644 index 54d0ed7a71..0000000000 --- a/Content.Shared/Paint/PaintRemoverComponent.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Audio; - -namespace Content.Shared.Paint; - -/// -/// Removes paint from an entity that was painted with spray paint. -/// -[RegisterComponent, NetworkedComponent] -[Access(typeof(PaintRemoverSystem))] -public sealed partial class PaintRemoverComponent : Component -{ - /// - /// Sound when target is cleaned. - /// - [DataField] - public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Effects/Fluids/watersplash.ogg"); - - /// - /// DoAfter wait time. - /// - [DataField] - public float CleanDelay = 2f; -} diff --git a/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs b/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs deleted file mode 100644 index 940b1aa513..0000000000 --- a/Content.Shared/Paint/PaintRemoverDoAfterEvent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Shared.DoAfter; -using Robust.Shared.Serialization; - -namespace Content.Shared.Paint; - -[Serializable, NetSerializable] -public sealed partial class PaintRemoverDoAfterEvent : SimpleDoAfterEvent -{ -} diff --git a/Content.Shared/Paint/PaintRemoverSystem.cs b/Content.Shared/Paint/PaintRemoverSystem.cs deleted file mode 100644 index efc1ded067..0000000000 --- a/Content.Shared/Paint/PaintRemoverSystem.cs +++ /dev/null @@ -1,94 +0,0 @@ -using Content.Shared.Popups; -using Content.Shared.Interaction; -using Content.Shared.DoAfter; -using Content.Shared.Verbs; -using Content.Shared.Sprite; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Timing; - -namespace Content.Shared.Paint; - -/// -/// Removes paint from an entity. -/// -public sealed class PaintRemoverSystem : SharedPaintSystem -{ - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnInteract); - SubscribeLocalEvent(OnDoAfter); - SubscribeLocalEvent>(OnPaintRemoveVerb); - } - - // When entity is painted, remove paint from that entity. - private void OnInteract(EntityUid uid, PaintRemoverComponent component, AfterInteractEvent args) - { - if (args.Handled) - return; - - if (!args.CanReach || args.Target is not { Valid: true } target || !HasComp(target)) - return; - - _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.CleanDelay, new PaintRemoverDoAfterEvent(), uid, args.Target, uid) - { - BreakOnMove = true, - BreakOnDamage = true, - MovementThreshold = 1.0f, - }); - args.Handled = true; - } - - private void OnDoAfter(EntityUid uid, PaintRemoverComponent component, DoAfterEvent args) - { - if (args.Cancelled || args.Handled || args.Args.Target == null) - return; - - if (args.Target is not { Valid: true } target) - return; - - if (!TryComp(target, out PaintedComponent? paint)) - return; - - paint.Enabled = false; - _audio.PlayPredicted(component.Sound, target, args.User); - _popup.PopupClient(Loc.GetString("paint-removed", ("target", target)), args.User, args.User, PopupType.Medium); - _appearanceSystem.SetData(target, PaintVisuals.Painted, false); - RemComp(target); - Dirty(target, paint); - - args.Handled = true; - } - - private void OnPaintRemoveVerb(EntityUid uid, PaintRemoverComponent component, GetVerbsEvent args) - { - if (!args.CanInteract || !args.CanAccess) - return; - - var paintremovalText = Loc.GetString("paint-remove-verb"); - - var verb = new UtilityVerb() - { - Act = () => - { - - _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.CleanDelay, new PaintRemoverDoAfterEvent(), uid, args.Target, uid) - { - BreakOnMove = true, - BreakOnDamage = true, - MovementThreshold = 1.0f, - }); - }, - - Text = paintremovalText - }; - - args.Verbs.Add(verb); - } -} diff --git a/Content.Shared/Paint/PaintedComponent.cs b/Content.Shared/Paint/PaintedComponent.cs deleted file mode 100644 index a6ee7377e1..0000000000 --- a/Content.Shared/Paint/PaintedComponent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Serialization; - -namespace Content.Shared.Paint; - -/// -/// Component applied to target entity when painted. -/// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class PaintedComponent : Component -{ - /// - /// Color of the paint. - /// - [DataField, AutoNetworkedField] - public Color Color = Color.FromHex("#2cdbd5"); - - /// - /// Used to remove the color when component removed. - /// - [DataField, AutoNetworkedField] - public Color BeforeColor; - - /// - /// If paint is enabled. - /// - [DataField, AutoNetworkedField] - public bool Enabled; - - /// - /// Name of the shader. - /// - [DataField, AutoNetworkedField] - public string ShaderName = "Greyscale"; -} - -[Serializable, NetSerializable] -public enum PaintVisuals : byte -{ - Painted, -} diff --git a/Content.Shared/Paint/SharedPaintSystem.cs b/Content.Shared/Paint/SharedPaintSystem.cs deleted file mode 100644 index 10185817b8..0000000000 --- a/Content.Shared/Paint/SharedPaintSystem.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Content.Shared.Paint; - -/// -/// Colors target and consumes reagent on each color success. -/// -public abstract class SharedPaintSystem : EntitySystem -{ - public virtual void UpdateAppearance(EntityUid uid, PaintedComponent? component = null) - { - } -} diff --git a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs index feb1cebb8e..b238c6fc72 100644 --- a/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs +++ b/Content.Shared/SprayPainter/SharedSprayPainterSystem.cs @@ -4,7 +4,6 @@ using Content.Shared.DoAfter; using Content.Shared.Doors.Components; using Content.Shared.Interaction; using Content.Shared.Popups; -using Content.Shared.Paint; using Content.Shared.SprayPainter.Components; using Content.Shared.SprayPainter.Prototypes; using Robust.Shared.Audio.Systems; @@ -130,8 +129,6 @@ public abstract class SharedSprayPainterSystem : EntitySystem return; } - RemComp(ent); - var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, painter.AirlockSprayTime, new SprayPainterDoorDoAfterEvent(sprite, style.Department), args.Used, target: ent, used: args.Used) { BreakOnMove = true, diff --git a/Resources/Locale/en-US/paint/paint.ftl b/Resources/Locale/en-US/paint/paint.ftl deleted file mode 100644 index 200b1f6e3f..0000000000 --- a/Resources/Locale/en-US/paint/paint.ftl +++ /dev/null @@ -1,8 +0,0 @@ -paint-success = {THE($target)} has been covered in paint! -paint-failure = Can't cover {THE($target)} in paint! -paint-failure-painted = {THE($target)} is already covered in paint! -paint-empty = {THE($used)} is empty! -paint-removed = You clean off the paint! -paint-closed = You must open {THE($used)} first! -paint-verb = Paint -paint-remove-verb = Remove Paint diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml index c29458a1ee..61085f13b9 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml @@ -68,16 +68,6 @@ category: cargoproduct-category-name-fun group: market -- type: cargoProduct - id: FunSprayPaints - icon: - sprite: Objects/Fun/spraycans.rsi - state: death2_cap - product: CrateFunSprayPaints - cost: 2000 - category: Fun - group: market - - type: cargoProduct id: FunParty icon: diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index 17018cb9e6..72cf6c447c 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -290,21 +290,14 @@ contents: - id: SnapPopBox - id: CrazyGlue + amount: 2 - id: PlasticBanana - - id: FunnyPaint - orGroup: Paint - prob: 0.5 - - id: FunnyPaintYellow - orGroup: Paint - prob: 0.5 - id: WhoopieCushion - id: ToyHammer - id: MrChips - prob: 0.5 - orGroup: Dummy + orGroup: GiftPool - id: MrDips - prob: 0.5 - orGroup: Dummy + orGroup: Giftpool - id: RevolverCapGun - id: BalloonNT - id: ClothingShoesClownLarge @@ -337,41 +330,6 @@ amount: 15 prob: 0.05 -- type: entity - id: CrateFunSprayPaints - name: spray paint crate - description: a crate filled with spray paint. - parent: CratePlastic - suffix: Spray Paint - components: - - type: StorageFill - contents: - - id: SprayPaintBlue - amount: 2 - prob: 0.33 - - id: SprayPaintRed - amount: 2 - prob: 0.33 - - id: SprayPaintOrange - amount: 2 - prob: 0.33 - - id: SprayPaintBlack - amount: 2 - prob: 0.33 - - id: SprayPaintGreen - amount: 2 - prob: 0.33 - - id: SprayPaintPurple - amount: 2 - prob: 0.33 - - id: SprayPaintWhite - amount: 2 - prob: 0.33 - - id: DeathPaint - amount: 2 - - id: DeathPaintTwo - amount: 2 - - type: entity name: dartboard box set description: A box with everything you need for a fun game of darts. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index 850fb91273..25078dbe57 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -145,10 +145,6 @@ prob: 0.25 - id: StrangePill prob: 0.20 - - id: DeathPaint - prob: 0.05 - - id: DeathPaintTwo - prob: 0.05 - id: DrinkMopwataBottleRandom prob: 0.20 - id: ModularReceiver diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml index 883182aae8..ae7e5bcf76 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml @@ -44,7 +44,6 @@ - CrateMaterialPlastic - CrateMaterialWood - CrateMaterialPlasteel - - CrateFunSprayPaints - CrateFunArtSupplies - CrateEngineeringCableLV - CrateEngineeringCableMV diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 450b501d1a..6419c1aaa1 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -173,12 +173,7 @@ - MaterialCloth10 - MaterialWoodPlank10 - ResearchDisk - - DeathPaint - Plunger - - SprayPaintBlue - - SprayPaintRed - - SprayPaintGreen - - SprayPaintOrange - TechnologyDisk - PowerCellMedium - PowerCellSmall diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 3e6c603626..7308267473 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -70,7 +70,6 @@ tags: - Carp - DoorBumpOpener - - NoPaint - type: ReplacementAccent accent: genericAggressive - type: Speech diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index 4a35f71ac0..68ebf52dc0 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -93,6 +93,3 @@ - RevenantTheme - type: Speech speechVerb: Ghost - - type: Tag - tags: - - NoPaint diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index 9f0d54ee64..c7cd40988d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -104,7 +104,6 @@ - type: Tag tags: - CannotSuicide - - NoPaint # From the uplink injector - type: entity @@ -213,7 +212,6 @@ tags: - CannotSuicide - FootstepSound - - NoPaint - type: Inventory templateId: holoclown - type: Hands diff --git a/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml b/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml deleted file mode 100644 index 1b417f6cde..0000000000 --- a/Resources/Prototypes/Entities/Objects/Fun/spray_paint.yml +++ /dev/null @@ -1,292 +0,0 @@ -# Base Paints -- type: entity - parent: BaseItem - id: PaintBase - name: spray paint - description: A tin of spray paint. - noSpawn: true - components: - - type: Appearance - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - state: clown_cap - layers: - - state: clown_cap - map: ["enum.OpenableVisuals.Layer"] - - type: Paint - consumptionUnit: 10 - blacklist: - tags: - - NoPaint - - type: Item - sprite: Objects/Fun/spraycans.rsi - heldPrefix: spray - - type: SolutionContainerManager - solutions: - drink: - maxVol: 50 - reagents: - - ReagentId: SpaceGlue - Quantity: 50 - - type: TrashOnSolutionEmpty - solution: drink - - type: Sealable - - type: Openable - sound: - path: /Audio/Effects/pop_high.ogg - closeable: true - closeSound: - path: /Audio/Effects/pop_high.ogg - -# Paints - -# funnypaint -- type: entity - parent: PaintBase - id: FunnyPaint - name: funny paint - description: A tin of funny paint, manufactured by Honk! Co. - components: - - type: Paint - color: "#fa74df" - - type: Item - sprite: Objects/Fun/spraycans.rsi - heldPrefix: clown - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "clown"} - False: {state: "clown_cap"} - -- type: entity - parent: PaintBase - id: FunnyPaintYellow - name: funny paint - description: A tin of funny paint, manufactured by Honk! Co. - components: - - type: Paint - color: "#d5e028" - - type: Item - sprite: Objects/Fun/spraycans.rsi - heldPrefix: clown - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - state: clown2_cap - layers: - - state: clown2_cap - map: ["enum.OpenableVisuals.Layer"] - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "clown2"} - False: {state: "clown2_cap"} - -#death paint -- type: entity - parent: PaintBase - id: DeathPaint - components: - - type: Paint - color: "#ff20c8" - - type: Item - sprite: Objects/Fun/spraycans.rsi - heldPrefix: spray - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - state: death_cap - layers: - - state: death_cap - map: ["enum.OpenableVisuals.Layer"] - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "death"} - False: {state: "death_cap"} - -- type: entity - parent: PaintBase - id: DeathPaintTwo - components: - - type: Paint - color: "#ff2020" - - type: Item - sprite: Objects/Fun/spraycans.rsi - heldPrefix: spray - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - state: death2_cap - layers: - - state: death2_cap - map: ["enum.OpenableVisuals.Layer"] - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "death2"} - False: {state: "death2_cap"} - -#Sprays - -#Blue -- type: entity - parent: PaintBase - id: SprayPaintBlue - suffix: Blue - components: - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - layers: - - state: spray - map: ["Base"] - - state: spray_cap_colors - map: ["enum.OpenableVisuals.Layer"] - color: "#5890f7" - - type: Paint - color: "#5890f7" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "spray_colors" , color: "#5890f7"} - False: {state: "spray_cap_colors" , color: "#5890f7"} - -#Red -- type: entity - parent: PaintBase - id: SprayPaintRed - suffix: Red - components: - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - layers: - - state: spray - map: ["Base"] - - state: spray_cap_colors - map: ["enum.OpenableVisuals.Layer"] - color: "#ff3b3b" - - type: Paint - color: "#ff3b3b" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "spray_colors" , color: "#ff3b3b"} - False: {state: "spray_cap_colors" , color: "#ff3b3b"} - -#Green -- type: entity - parent: PaintBase - id: SprayPaintGreen - suffix: Green - components: - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - layers: - - state: spray - map: ["Base"] - - state: spray_cap_colors - map: ["enum.OpenableVisuals.Layer"] - color: "#73f170" - - type: Paint - color: "#73f170" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "spray_colors" , color: "#73f170"} - False: {state: "spray_cap_colors" , color: "#73f170"} - -#Black -- type: entity - parent: PaintBase - id: SprayPaintBlack - suffix: Black - components: - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - layers: - - state: spray - map: ["Base"] - - state: spray_cap_colors - map: ["enum.OpenableVisuals.Layer"] - color: "#3a3a3a" - - type: Paint - color: "#3a3a3a" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "spray_colors" , color: "#3a3a3a"} - False: {state: "spray_cap_colors" , color: "#3a3a3a"} - -#Orange -- type: entity - parent: PaintBase - id: SprayPaintOrange - suffix: Orange - components: - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - layers: - - state: spray - map: ["Base"] - - state: spray_cap_colors - map: ["enum.OpenableVisuals.Layer"] - color: "#f6a44b" - - type: Paint - color: "#f6a44b" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "spray_colors" , color: "#f6a44b"} - False: {state: "spray_cap_colors" , color: "#f6a44b"} - -#Purple -- type: entity - parent: PaintBase - id: SprayPaintPurple - suffix: Purple - components: - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - layers: - - state: spray - map: ["Base"] - - state: spray_cap_colors - map: ["enum.OpenableVisuals.Layer"] - color: "#c063f5" - - type: Paint - color: "#c063f5" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "spray_colors" , color: "#c063f5"} - False: {state: "spray_cap_colors" , color: "#c063f5"} - -#White -- type: entity - parent: PaintBase - id: SprayPaintWhite - suffix: White - components: - - type: Sprite - sprite: Objects/Fun/spraycans.rsi - layers: - - state: spray - map: ["Base"] - - state: spray_cap_colors - map: ["enum.OpenableVisuals.Layer"] - color: "#f2f2f2" - - type: Paint - color: "#f2f2f2" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "spray_colors" , color: "#f2f2f2"} - False: {state: "spray_cap_colors" , color: "#f2f2f2"} diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml index 2e0eec7a65..59d8ed1922 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml @@ -15,7 +15,6 @@ - type: Tag tags: - Sheet - - NoPaint - type: Material - type: Damageable damageContainer: Inorganic diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index 3a887848bf..82b9f62837 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -15,7 +15,6 @@ tags: - Sheet - Metal - - NoPaint - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index 9dc87a9117..dfb5133628 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -12,7 +12,6 @@ - type: Tag tags: - Sheet - - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible @@ -111,7 +110,6 @@ - type: Tag tags: - Sheet - - NoPaint - type: entity parent: SheetPlasma @@ -134,7 +132,6 @@ tags: - Plastic - Sheet - - NoPaint - type: Material - type: PhysicalComposition materialComposition: diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index 2bfd409c30..d11df5d94e 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -12,7 +12,6 @@ - type: Tag tags: - RawMaterial - - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 6f351ee9db..3b2e4cd8f1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -15,9 +15,6 @@ Blunt: 5 - type: Stack count: 1 - - type: Tag - tags: - - NoPaint - type: Damageable damageContainer: Inorganic - type: Destructible diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index 56786057d5..5678de6baf 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -62,7 +62,6 @@ solution: soap - type: DeleteOnSolutionEmpty solution: soap - - type: PaintRemover - type: FlavorProfile flavors: - clean diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index c5ea359540..13c8b9cb25 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -78,9 +78,6 @@ malus: 0 - type: Reflect enabled: false - - type: Tag - tags: - - NoPaint - type: IgnitionSource temperature: 700 @@ -159,7 +156,6 @@ - type: Tag tags: - Write - - NoPaint - type: DisarmMalus malus: 0 diff --git a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml index f82fe8b51b..7777153bba 100644 --- a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml +++ b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml @@ -31,9 +31,6 @@ sound: path: /Audio/Ambience/Objects/fireplace.ogg - type: AlwaysHot - - type: Tag - tags: - - NoPaint - type: entity id: LegionnaireBonfire diff --git a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml index a62af015f7..aaa0ed716d 100644 --- a/Resources/Prototypes/Entities/Structures/Holographic/projections.yml +++ b/Resources/Prototypes/Entities/Structures/Holographic/projections.yml @@ -25,9 +25,6 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] - - type: Tag - tags: - - NoPaint - type: entity id: HoloFan diff --git a/Resources/Prototypes/Entities/Structures/hydro_tray.yml b/Resources/Prototypes/Entities/Structures/hydro_tray.yml index 43b8bd197a..1ab1fd5b2f 100644 --- a/Resources/Prototypes/Entities/Structures/hydro_tray.yml +++ b/Resources/Prototypes/Entities/Structures/hydro_tray.yml @@ -92,9 +92,6 @@ - type: GuideHelp guides: - Botany - - type: Tag - tags: - - NoPaint - type: entity parent: hydroponicsTray diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 8f0038915d..303a9b7c87 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -911,9 +911,6 @@ - type: Tag id: NoBlockAnchoring -- type: Tag - id: NoPaint - - type: Tag id: NozzleBackTank diff --git a/Resources/Textures/Interface/VerbIcons/paint.svg b/Resources/Textures/Interface/VerbIcons/paint.svg deleted file mode 100644 index 78a56e3570..0000000000 --- a/Resources/Textures/Interface/VerbIcons/paint.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - diff --git a/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png b/Resources/Textures/Interface/VerbIcons/paint.svg.192dpi.png deleted file mode 100644 index b7bd88245f2ab069dbf5a39850a866af0c5dc174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15653 zcmeI3Ym6J!6@c$%At6fwD^Z{%uuL393Tejkve)auHrd!ob^#~b&7$l^6=XbfZ4a?$ zoSE^icLQO0mqGyXgEvtlDvC%zAkn5$c`8a@KR`fGMTH1e8(?XniJ&}$1l*bN^RD+2 zK_vcM%O3mObI&>Ve&?R!`7^f-ZQQW9Ye^RXVDaEUY8ZX5aX+WcN7pCx9q*v8g{6Tp z8-NRLbw3?<9X$>KxOkO5GU|+`FPBxb7*sSf1A~=f3C#u|c1fkAsN12#WMED=;(`DD z@x=h6Yw^IAaGFn-k}$6iOj&UA)W#8YYP%ZM0+%GZVig%VC_+bJD#e0f%awS*^DCp@ z?l2c%yeZE1c%a`6$c(0kn51bzCLHW#RlYaEM4~|<9EpS?s~M3O!W=Jg63>c~9OC7W z$W&i}L>KxMv$U){oLXNEhopEQ?>Hry<0d91f)i5Ev~rvfjYc_Mg|JMlok4OD+s_f;&_0~vOe9iqrploBTdd9Iz2rq*pr zWvk#VO;b5ofJJCHHnJ1i+LiLAW7>Ihj*xZroPkkJhV@+DvFq{MuG#YDv|R%7kWQ1W zi^aBugabg z<-_PbBJ|3l^fO+NdA`YmKMiw`HZ?svS#uC#dC_&i^Kv*OhoW13^QK9-IjTHOag^_J z&^)clg{I0`(<&-XLN6*g$d!y-jB5hvH6m++G<$_}5;(-dQ z!K_j)IDtem$umRcOhH$flvz}CgGoV6R~4^5tLI5|^Q4bMRC+}d9SOJEOP-D9nQ&9k zGQAYXIJcw=dg~he(blDTdz-b5SiQ{Tq**X6L>nfg7}svNiAcTl%>G|h4MqM=|}ffstSqQ-{9s>Eth6fBd;s;r=9#7L-5vzZbuw8|-Se054j$BE zT+3)#&A8*Rs9&9t~OehxY&!OXSB8|`Y+G>Wo zZ(n&QB@4DP{=;%`VkPxGa?qwn|9Ba2S^Lq|JnFKj3vsoBTN^mBr1`0At*Ba+&aS|i z`?oBk>P3gi>)Ht+#?2aQME2*8x>Z;xdsQYxMIOC4!M#>(oAtQu*mu}A>v7wL=@o|V zB*bbsY`DqFy?gNg3pS%$WtivVor!L$??281k9Tx33&mg2&IkVT4%%m>p_To@3tNO6(*U|Na`140%lE;1iXOL1X9 z$Rfo>=7VV|E({1+q`1g@FfGM}0U?VN7nu*HrMNI4WRc<`^TD(f7Y2kZQe0#{n3m$g zfRIIsi_8bpQd}4ivPf}}`CwX#3j;zHDK0V}OiOWLK*%D+MdpKPDJ~2MS){ngd@wD= zg#jUp6c?Efrlq(rAY_r^BJ;tt6c+}BEK*!#KA4u`!hn!PBCf8+1F+CQPrXi{$6Mb! zmwOC78q25y!)XAfRsb-4BLH81gT7|~DDwb(xD5dLegMuj@44#GdH_1ggQ@`d;nH-J03Zr|Ct&;EP&wwn%Znb)2De;!;OJaeCP>1qFb`z&qb zg)8@-^X`%LZ){q!ck-1BpXgZqbmESl&P`|DK7V@ADIfoI-Z{G~r|l^uJHXQD`dFJrr zYaZS8?4R>VcFlroKUneXvSrhEzG~gOYt5<*A7mc6YOA>XZxXv~Xw}p^pRE1e-k*Ri zrS~5^-uH*Y_pQ)xy78qiuK-iITc3L1-+S`XlSgL0{?D<$Ja+2N$%Dtaf!HnY9TInZ z)bZ|<2bV7FeDvz;xy2v6_Sfs5(R#+um`?6F@bIGFb{so;PtTRY>VL&{pML1-rJp4h p2EWO5KELuJFpt6C3+_AuIgtw=ow{Om$WDZhO1a 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 Lg-7S^{K9_#hzGN8 diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png b/Resources/Textures/Objects/Fun/spraycans.rsi/clown-inhand-right.png deleted file mode 100644 index 27b68e2cfe5d2b364b379707b887bdfcb115eeb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20783 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 diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json b/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json index f34820cec4..0f883ee280 100644 --- a/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/spraycans.rsi/meta.json @@ -58,6 +58,9 @@ { "name": "spray" }, + { + "name": "spray_cap" + }, { "name": "spray_cap_colors" }, @@ -67,22 +70,6 @@ { "name": "equipped-BELT", "directions": 4 - }, - { - "name": "clown-inhand-right", - "directions": 4 - }, - { - "name": "clown-inhand-left", - "directions": 4 - }, - { - "name": "spray-inhand-right", - "directions": 4 - }, - { - "name": "spray-inhand-left", - "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-left.png deleted file mode 100644 index ad3ad959de4138922ea09c84316ad9369fedf403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21199 zcmeI4eT*bU6~G%61ILFZ5K;bdTr`SUJN3~YRm1GS-tL`u35)0667CKYuDYsvuVr_7 zn3=oXJBb1O!)S=2Mx!SZC4MAEi5mFBaK=P}e+c}c5s4o$l3-MVL5+!GqWF4xW~ygy z_O6-RC?q|}?$&m{_p18$>f^mPllj=b8{d1$jw^RKj&sT0J&Vim_xkkbg4e_EZ^pO( z7XDn=+H)H5wvKAci@W>X!GCizN4nisty(^2iX)s2&8CABNV z6sw!ERVA~yI!Q^Zp-$^)d#yJ#t*U0ttea-H1A1hlUh7EGO*%)CExH`u-m+ux$7;) zVJE$_B?Pk>Z=sgn$<%stDsy!mpw$-IMs}0-N|LNKvgx{S;ET$_LT`Fj-gR@_)X7HY z>Uwot#ZDY+%`D2UX;2Jvkzj=B3h`>ptC8RuOllbCjAW8yHkJ|{N5=;?7$Ou=u|oVB zp*6w}W$HPhadlXOT6X2x4CKXfCbX(WNqb#(8}YhaHPu#gwO+LsbCSbJSzAcfk~WOU zG+4bl>GDLa#Y7!VSH*l&nGU$1lXDF?sJHHS%GJ@UgBxpcgY4!zcM6Z~a+%;e7sx!_ zIq!SEhv(;oPj~ZrHC^E#XnXJby?;I1wsfLmU9+RcK9`=N24NF&M2Im+a_S=?IK@n0 z#)LbqX{Ds0U`zQN<_0kug&2M*-(Vt`%dt>Xnq~nDa3lmWzKSx_TzMW+t}vWN+NU&} z(zGk7#*s8gxIm>hY929)A`(hXv1>4%7Kq0~!hMR730!x3M;&OUSx6+9R$iaA0X{0= zfuuB&jL<282(664J_Xh$*xpeKqgfP!)zFBrZ`u%o!a&2bP$nX8S~n`J^x zp;j(3A=1B#?)T*)<$2$}XMFp=>+;Y!2; z+22&*6u?MuDLmM4xsiIx84^)K8HX9-`T)GQsY)CHp9mX|F-3!LYSSKtg9^4M7+`;) zzx+|J#t<82M`N!ETaV<@_Yw2_2)UsP2O{PSaiWcc(~`UV?1umZPqP{hThDi;;=&-G z1tDU-3rDPy9@21@D3?eTndq!s2gbq>he}5T$;b$#JvV}*Is_;AAsFMX;lwL!Eb@pJ zF7^=(xkR3XQwdH_j(qAXjTKjc5XFs24l$r2$OknTUOGnum!ODY8YxTxC&WvWf|Ts) zXz-Jdtj-iVrE%!eQf+Uu)0Gfe?Okl7q+-Ah@r&{`48`|!fUtB!Bp6jFfOs+T!yr)F z??soR>Nb4pn;!HIrnd;8VE5#a2ABALZw7*Yg@!nX7&r6{_&WlM**J5?PV4A>?HCeM zxt5a|cs)?y4CQGQ1rbaf=6Wb}!Syh$m`j*zL?8!UOfYj=S9{_#1U)_)EA~Rr{pR-3 zt2PAfrI0Pz?wB+|nwuG9NW+{ni#PjGXD`vJNtGs_4V9)H2A259RXePqW<3*#Pj_cA z1gEKQ-N(ie(>zn!l9}pBZEd8JMBNS9HuI|x+84>FGOMF%@c> zU_KX~z!8SpNVzD7fk9RvTZ_*j2svk`u|RPG6(&R#WL!LiKwd~6PC*rTjC)}erM0rD zoR(HS-L&e-+!~|hPP&ad=~*_ml2&EFnZJ$Po-{Oxg7t9es1?l$24qTXP}F6Xq;x0$ndL-)f+D@?=pJO;(b@yp{H z`{GTrc3?4vcSAdAama_Dsi!l3W1`~0trT-N`ij}I$$bc-=a}p&e8d7i-BBHWyd&o` zyHjp^%RbSzo3;kaPArQ8trAxONLHl8WmyzxmADE(vLYoe%c4N5#8m*26)AC976n=* zt^$y(NQuj`D9|c#6@X+#N?evjfmVsD03<6?;<79Xv`SnBAX$+Tmt|3)RpKfD$%>S? zEQ)qoTJ!ro;&O~wa+`w70IV>eQY<#zOZ+3er5Al&;RnfmpqCu zUi|6)d*4Fux$?-Tp*^Ug1S?#}!7{0M*M3s<-6 zm)Aji^mTaopZYrfLI}hLeU!MjguK)l5 diff --git a/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png b/Resources/Textures/Objects/Fun/spraycans.rsi/spray-inhand-right.png deleted file mode 100644 index 353e47c56fa71b948a6443d4a3a850de2edcb5c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21213 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 literal 0 HcmV?d00001 From 90a880a9bea64601db77d5bbb2b184d5371dc082 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:20:48 -0700 Subject: [PATCH 042/206] Fix: Prevent single-use hyposprays from getting the toggle draw verb (#26595) Prevent single-use hyposprays from getting the toggle draw verb Co-authored-by: Plykiya --- Content.Shared/Chemistry/Components/HyposprayComponent.cs | 7 +++++++ .../Chemistry/EntitySystems/SharedHypospraySystem.cs | 2 +- .../Entities/Objects/Specific/Medical/hypospray.yml | 8 ++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Chemistry/Components/HyposprayComponent.cs b/Content.Shared/Chemistry/Components/HyposprayComponent.cs index 05d202aaaa..05ef84bbaf 100644 --- a/Content.Shared/Chemistry/Components/HyposprayComponent.cs +++ b/Content.Shared/Chemistry/Components/HyposprayComponent.cs @@ -30,4 +30,11 @@ public sealed partial class HyposprayComponent : Component [AutoNetworkedField] [DataField(required: true)] public bool OnlyAffectsMobs = false; + + /// + /// Whether or not the hypospray is able to draw from containers or if it's a single use + /// device that can only inject. + /// + [DataField] + public bool InjectOnly = false; } diff --git a/Content.Shared/Chemistry/EntitySystems/SharedHypospraySystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedHypospraySystem.cs index f91e5621f0..b647d33c98 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedHypospraySystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedHypospraySystem.cs @@ -27,7 +27,7 @@ public abstract class SharedHypospraySystem : EntitySystem // private void AddToggleModeVerb(Entity entity, ref GetVerbsEvent args) { - if (!args.CanAccess || !args.CanInteract || args.Hands == null) + if (!args.CanAccess || !args.CanInteract || args.Hands == null || entity.Comp.InjectOnly) return; var (_, component) = entity; diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index dbc78a8409..d6f3ee75fa 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -115,6 +115,7 @@ solutionName: pen transferAmount: 15 onlyAffectsMobs: false + injectOnly: true - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 1 @@ -205,6 +206,7 @@ solutionName: pen transferAmount: 20 onlyAffectsMobs: false + injectOnly: true - type: SolutionContainerManager solutions: pen: @@ -236,6 +238,7 @@ solutionName: pen transferAmount: 20 onlyAffectsMobs: false + injectOnly: true - type: SolutionContainerManager solutions: pen: @@ -267,6 +270,8 @@ solutionName: pen transferAmount: 20 onlyAffectsMobs: false + injectOnly: true + - type: SolutionContainerManager solutions: pen: @@ -299,6 +304,7 @@ solutionName: pen transferAmount: 30 onlyAffectsMobs: false + injectOnly: true - type: SolutionContainerManager solutions: pen: @@ -337,6 +343,7 @@ solutionName: pen transferAmount: 30 onlyAffectsMobs: false + injectOnly: true - type: StaticPrice price: 500 - type: Tag @@ -397,6 +404,7 @@ solutionName: pen transferAmount: 30 onlyAffectsMobs: false + injectOnly: true - type: StaticPrice price: 500 - type: Tag From ae8a68b7cd1d4f89b4d9f429b49d5336dccac6bb Mon Sep 17 00:00:00 2001 From: Bixkitts <72874643+Bixkitts@users.noreply.github.com> Date: Sun, 31 Mar 2024 07:21:01 +0200 Subject: [PATCH 043/206] MeleeHitSoundSystem (#25005) * Began work to unscrew melee noises * finished * cleanup * cleanup * Update Content.Server/Weapons/Melee/MeleeWeaponSystem.cs Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com> * _Style * Fix merge --------- Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com> Co-authored-by: metalgearsloth --- .../Weapons/Melee/MeleeWeaponSystem.cs | 26 ++-- .../Weapons/Ranged/Systems/GunSystem.cs | 2 +- .../Weapons/Melee/MeleeSoundSystem.cs | 108 ++++++++++++++++ .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 117 ++++-------------- 4 files changed, 146 insertions(+), 107 deletions(-) create mode 100644 Content.Shared/Weapons/Melee/MeleeSoundSystem.cs diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index a01a324013..ef4b161477 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -23,6 +23,7 @@ using Content.Shared.Tag; using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Random; @@ -33,16 +34,17 @@ namespace Content.Server.Weapons.Melee; public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem { - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly BloodstreamSystem _bloodstream = default!; - [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly DamageExamineSystem _damageExamine = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly LagCompensationSystem _lag = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; - [Dependency] private readonly SolutionContainerSystem _solutions = default!; - [Dependency] private readonly TagSystem _tag = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly BloodstreamSystem _bloodstream = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly DamageExamineSystem _damageExamine = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly LagCompensationSystem _lag = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; + [Dependency] private readonly SolutionContainerSystem _solutions = default!; + [Dependency] private readonly TagSystem _tag = default!; public override void Initialize() { @@ -158,7 +160,8 @@ public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem return false; } - Audio.PlayPvs(combatMode.DisarmSuccessSound, user, AudioParams.Default.WithVariation(0.025f).WithVolume(5f)); + _audio.PlayPvs(combatMode.DisarmSuccessSound, user, AudioParams.Default.WithVariation(0.025f).WithVolume(5f)); + AdminLogger.Add(LogType.DisarmedAction, $"{ToPrettyString(user):user} used disarm on {ToPrettyString(target):target}"); var targetEnt = Identity.Entity(target, EntityManager); var userEnt = Identity.Entity(user, EntityManager); @@ -175,7 +178,6 @@ public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem PopupSystem.PopupEntity(msgOther, user, filterOther, true); PopupSystem.PopupEntity(msgUser, target, user); - if (eventArgs.IsStunned) { diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs index e64657743d..f5f4e3f199 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs @@ -38,7 +38,7 @@ public sealed partial class GunSystem : SharedGunSystem [Dependency] private readonly StaminaSystem _stamina = default!; [Dependency] private readonly StunSystem _stun = default!; - public const float DamagePitchVariation = SharedMeleeWeaponSystem.DamagePitchVariation; + private const float DamagePitchVariation = 0.05f; public const float GunClumsyChance = 0.5f; public override void Initialize() diff --git a/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs new file mode 100644 index 0000000000..5bf7480202 --- /dev/null +++ b/Content.Shared/Weapons/Melee/MeleeSoundSystem.cs @@ -0,0 +1,108 @@ +using Content.Shared.Weapons.Melee.Components; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; + +namespace Content.Shared.Weapons.Melee; + +/// +/// This handles +/// +public sealed class MeleeSoundSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public const float DamagePitchVariation = 0.05f; + + /// + /// Plays the SwingSound from a weapon component + /// for immediate feedback, misses and such + /// (Swinging a weapon goes "whoosh" whether it hits or not) + /// + public void PlaySwingSound(EntityUid userUid, EntityUid weaponUid, MeleeWeaponComponent weaponComponent) + { + _audio.PlayPredicted(weaponComponent.SwingSound, weaponUid, userUid); + } + + /// + /// Takes a "damageType" string as an argument and uses it to + /// search one of the various Dictionaries in the MeleeSoundComponent + /// for a sound to play, and falls back if that fails + /// + /// Serves as a lookup key for a hit sound + /// A sound can be supplied by the itself to override everything else + public void PlayHitSound(EntityUid targetUid, EntityUid? userUid, string? damageType, SoundSpecifier? hitSoundOverride, MeleeWeaponComponent weaponComponent) + { + var hitSound = weaponComponent.HitSound; + var noDamageSound = weaponComponent.NoDamageSound; + + var playedSound = false; + + if (Deleted(targetUid)) + return; + + // hitting can obv destroy an entity so we play at coords and not following them + var coords = Transform(targetUid).Coordinates; + // Play sound based off of highest damage type. + if (TryComp(targetUid, out var damageSoundComp)) + { + if (damageType == null && damageSoundComp.NoDamageSound != null) + { + _audio.PlayPredicted(damageSoundComp.NoDamageSound, coords, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + playedSound = true; + } + else if (damageType != null && damageSoundComp.SoundTypes?.TryGetValue(damageType, out var damageSoundType) == true) + { + _audio.PlayPredicted(damageSoundType, coords, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + playedSound = true; + } + else if (damageType != null && damageSoundComp.SoundGroups?.TryGetValue(damageType, out var damageSoundGroup) == true) + { + _audio.PlayPredicted(damageSoundGroup, coords, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + playedSound = true; + } + } + + // Use weapon sounds if the thing being hit doesn't specify its own sounds. + if (!playedSound) + { + if (hitSoundOverride != null) + { + _audio.PlayPredicted(hitSoundOverride, coords, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + playedSound = true; + } + else if (hitSound != null) + { + _audio.PlayPredicted(hitSound, coords, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + playedSound = true; + } + else + { + _audio.PlayPredicted(noDamageSound, coords, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + playedSound = true; + } + } + + // Fallback to generic sounds. + if (!playedSound) + { + switch (damageType) + { + // Unfortunately heat returns caustic group so can't just use the damagegroup in that instance. + case "Burn": + case "Heat": + case "Radiation": + case "Cold": + _audio.PlayPredicted(new SoundPathSpecifier("/Audio/Items/welder.ogg"), targetUid, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + break; + // No damage, fallback to tappies + case null: + _audio.PlayPredicted(new SoundCollectionSpecifier("WeakHit"), targetUid, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + break; + case "Brute": + _audio.PlayPredicted(new SoundCollectionSpecifier("MetalThud"), targetUid, userUid, AudioParams.Default.WithVariation(DamagePitchVariation)); + break; + } + } + } + +} diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 6a5127f2c9..e59b4a13fe 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -21,8 +21,6 @@ using Content.Shared.Weapons.Melee.Events; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; using Content.Shared.Weapons.Ranged.Systems; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Physics; using Robust.Shared.Physics.Systems; @@ -36,22 +34,21 @@ namespace Content.Shared.Weapons.Melee; public abstract class SharedMeleeWeaponSystem : EntitySystem { - [Dependency] protected readonly IGameTiming Timing = default!; - [Dependency] protected readonly IMapManager MapManager = default!; - [Dependency] private readonly IPrototypeManager _protoManager = default!; - [Dependency] protected readonly ISharedAdminLogManager AdminLogger = default!; - [Dependency] protected readonly ActionBlockerSystem Blocker = default!; - [Dependency] protected readonly DamageableSystem Damageable = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] protected readonly SharedAudioSystem Audio = default!; - [Dependency] protected readonly SharedCombatModeSystem CombatMode = default!; - [Dependency] protected readonly SharedInteractionSystem Interaction = default!; - [Dependency] private readonly SharedPhysicsSystem _physics = default!; - [Dependency] protected readonly SharedPopupSystem PopupSystem = default!; - [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; - [Dependency] private readonly StaminaSystem _stamina = default!; + [Dependency] protected readonly ISharedAdminLogManager AdminLogger = default!; + [Dependency] protected readonly ActionBlockerSystem Blocker = default!; + [Dependency] protected readonly SharedCombatModeSystem CombatMode = default!; + [Dependency] protected readonly DamageableSystem Damageable = default!; + [Dependency] protected readonly SharedInteractionSystem Interaction = default!; + [Dependency] protected readonly IMapManager MapManager = default!; + [Dependency] protected readonly SharedPopupSystem PopupSystem = default!; + [Dependency] protected readonly IGameTiming Timing = default!; + [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly MeleeSoundSystem _meleeSound = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly StaminaSystem _stamina = default!; - public const float DamagePitchVariation = 0.05f; private const int AttackMask = (int) (CollisionGroup.MobMask | CollisionGroup.Opaque); /// @@ -83,7 +80,8 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem SubscribeAllEvent(OnStopAttack); #if DEBUG - SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent (OnMapInit); } private void OnMapInit(EntityUid uid, MeleeWeaponComponent component, MapInitEvent args) @@ -465,7 +463,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem } var missEvent = new MeleeHitEvent(new List(), user, meleeUid, damage, null); RaiseLocalEvent(meleeUid, missEvent); - Audio.PlayPredicted(component.SwingSound, meleeUid, user); + _meleeSound.PlaySwingSound(user, meleeUid, component); return; } @@ -520,7 +518,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem } - PlayHitSound(target.Value, user, GetHighestDamageSound(modifiedDamage, _protoManager), hitEvent.HitSoundOverride, component.HitSound, component.NoDamageSound); + _meleeSound.PlayHitSound(target.Value, user, GetHighestDamageSound(modifiedDamage, _protoManager), hitEvent.HitSoundOverride, component); if (damageResult?.GetTotal() > FixedPoint2.Zero) { @@ -563,7 +561,9 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem var missEvent = new MeleeHitEvent(new List(), user, meleeUid, damage, direction); RaiseLocalEvent(meleeUid, missEvent); - Audio.PlayPredicted(component.SwingSound, meleeUid, user); + // immediate audio feedback + _meleeSound.PlaySwingSound(user, meleeUid, component); + return true; } @@ -658,7 +658,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem if (entities.Count != 0) { var target = entities.First(); - PlayHitSound(target, user, GetHighestDamageSound(appliedDamage, _protoManager), hitEvent.HitSoundOverride, component.HitSound, component.NoDamageSound); + _meleeSound.PlayHitSound(target, user, GetHighestDamageSound(appliedDamage, _protoManager), hitEvent.HitSoundOverride, component); } if (appliedDamage.GetTotal() > FixedPoint2.Zero) @@ -702,77 +702,6 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem return true; } - public void PlayHitSound(EntityUid target, EntityUid? user, string? type, SoundSpecifier? hitSoundOverride, SoundSpecifier? hitSound, SoundSpecifier? noDamageSound) - { - var playedSound = false; - - if (Deleted(target)) - return; - - // hitting can obv destroy an entity so we play at coords and not following them - var coords = Transform(target).Coordinates; - // Play sound based off of highest damage type. - if (TryComp(target, out var damageSoundComp)) - { - if (type == null && damageSoundComp.NoDamageSound != null) - { - Audio.PlayPredicted(damageSoundComp.NoDamageSound, coords, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - playedSound = true; - } - else if (type != null && damageSoundComp.SoundTypes?.TryGetValue(type, out var damageSoundType) == true) - { - Audio.PlayPredicted(damageSoundType, coords, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - playedSound = true; - } - else if (type != null && damageSoundComp.SoundGroups?.TryGetValue(type, out var damageSoundGroup) == true) - { - Audio.PlayPredicted(damageSoundGroup, coords, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - playedSound = true; - } - } - - // Use weapon sounds if the thing being hit doesn't specify its own sounds. - if (!playedSound) - { - if (hitSoundOverride != null) - { - Audio.PlayPredicted(hitSoundOverride, coords, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - playedSound = true; - } - else if (hitSound != null) - { - Audio.PlayPredicted(hitSound, coords, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - playedSound = true; - } - else if (noDamageSound != null) - { - Audio.PlayPredicted(noDamageSound, coords, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - playedSound = true; - } - } - - // Fallback to generic sounds. - if (!playedSound) - { - switch (type) - { - // Unfortunately heat returns caustic group so can't just use the damagegroup in that instance. - case "Burn": - case "Heat": - case "Radiation": - case "Cold": - Audio.PlayPredicted(new SoundPathSpecifier("/Audio/Items/welder.ogg"), target, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - break; - // No damage, fallback to tappies - case null: - Audio.PlayPredicted(new SoundCollectionSpecifier("WeakHit"), target, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - break; - case "Brute": - Audio.PlayPredicted(new SoundCollectionSpecifier("MetalThud"), target, user, AudioParams.Default.WithVariation(DamagePitchVariation)); - break; - } - } - } public static string? GetHighestDamageSound(DamageSpecifier modifiedDamage, IPrototypeManager protoManager) { @@ -809,7 +738,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem } // Play a sound to give instant feedback; same with playing the animations - Audio.PlayPredicted(component.SwingSound, meleeUid, user); + _meleeSound.PlaySwingSound(user, meleeUid, component); return true; } From f5e5b6b0952e73acfcc500cd2d65d30d6bcd5b96 Mon Sep 17 00:00:00 2001 From: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com> Date: Sun, 31 Mar 2024 00:30:48 -0500 Subject: [PATCH 044/206] Remove physics comp from VendingMachineWallmount (#25632) * Remove physics comp from VendingMachineWallmount * Fixtures removal --------- Co-authored-by: Jeff Co-authored-by: metalgearsloth --- .../Entities/Structures/Machines/vending_machines.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index c97dc4b9dc..e738510277 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -1391,9 +1391,6 @@ snap: - Wallmount components: - - type: Physics - canCollide: false - - type: Fixtures - type: Sprite drawdepth: WallMountedItems snapCardinals: false From d5052697aa21ffddb9cec49f9b445ce194e41eab Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sun, 31 Mar 2024 07:33:23 +0200 Subject: [PATCH 045/206] Remake hairflowers (#25475) * Add more lily usage (orange hairflower and flowercrown) * comit 2 * ee * more fixes * w * im stupid * bring poppy in authodrobe * weh --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- .../VendingMachines/Inventories/theater.yml | 2 +- .../Entities/Clothing/Head/misc.yml | 14 ---------- .../Objects/Consumable/Food/produce.yml | 4 +++ .../Entities/Objects/Decoration/present.yml | 2 +- .../Crafting/Graphs/improvised/hairflower.yml | 16 ----------- .../Recipes/Crafting/improvised.yml | 13 --------- .../Head/Misc/hairflower.rsi/icon.png | Bin 259 -> 0 bytes .../Head/Misc/hairflower.rsi/inhand-left.png | Bin 291 -> 0 bytes .../Head/Misc/hairflower.rsi/inhand-right.png | Bin 266 -> 0 bytes .../Head/Misc/hairflower.rsi/meta.json | 26 ------------------ .../Hydroponics/lily.rsi/equipped-HELMET.png | Bin 0 -> 341 bytes .../Specific/Hydroponics/lily.rsi/meta.json | 6 +++- .../poppy.rsi}/equipped-HELMET.png | Bin .../Specific/Hydroponics/poppy.rsi/meta.json | 6 +++- Resources/migration.yml | 7 +++-- 15 files changed, 21 insertions(+), 75 deletions(-) delete mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/improvised/hairflower.yml delete mode 100644 Resources/Textures/Clothing/Head/Misc/hairflower.rsi/icon.png delete mode 100644 Resources/Textures/Clothing/Head/Misc/hairflower.rsi/inhand-left.png delete mode 100644 Resources/Textures/Clothing/Head/Misc/hairflower.rsi/inhand-right.png delete mode 100644 Resources/Textures/Clothing/Head/Misc/hairflower.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Hydroponics/lily.rsi/equipped-HELMET.png rename Resources/Textures/{Clothing/Head/Misc/hairflower.rsi => Objects/Specific/Hydroponics/poppy.rsi}/equipped-HELMET.png (100%) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml index 960a8f8797..5e3c7d9401 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/theater.yml @@ -43,7 +43,7 @@ ClothingMaskScaredMime: 1 ClothingUniformJumpsuitKimono: 1 ClothingHeadHatCasa: 1 - ClothingHeadHatHairflower: 1 + FoodPoppy: 1 ClothingHeadHatGladiator: 1 ClothingUniformJumpsuitGladiator: 1 ClothingHeadHatCowboyBrown: 1 diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index 3fd55faf26..1149224fc3 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -47,20 +47,6 @@ graph: flowercrown node: flowercrown -- type: entity - parent: ClothingHeadBase - id: ClothingHeadHatHairflower - name: hairflower - description: A red flower for beautiful ladies. - components: - - type: Sprite - sprite: Clothing/Head/Misc/hairflower.rsi - - type: Clothing - sprite: Clothing/Head/Misc/hairflower.rsi - - type: Construction - graph: hairflower - node: hairflower - - type: entity parent: ClothingHeadLightBase id: ClothingHeadHatPumpkin diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index 21eb0fb942..3f0277e1bc 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -1220,6 +1220,10 @@ id: FoodPoppy description: A flower with extracts often used in the production of medicine components: + - type: Clothing + slots: + - HEAD + quickEquip: false - type: FlavorProfile flavors: - medicine diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index 8fdc479351..a417fdf076 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -294,7 +294,7 @@ orGroup: GiftPool - id: ClothingHeadHatFlowerCrown orGroup: GiftPool - - id: ClothingHeadHatHairflower + - id: FoodPoppy orGroup: GiftPool - id: ClothingMaskClown orGroup: GiftPool diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/hairflower.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/hairflower.yml deleted file mode 100644 index 76bc124290..0000000000 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/hairflower.yml +++ /dev/null @@ -1,16 +0,0 @@ -- type: constructionGraph - id: hairflower - start: start - graph: - - node: start - edges: - - to: hairflower - steps: - - tag: Flower # TODO change to "RedFlower" or "Poppy" tag, so you cant make red flower from bluesyellow etc., when it will be - name: flower - icon: - sprite: Objects/Specific/Hydroponics/poppy.rsi - state: produce - doAfter: 3.5 - - node: hairflower - entity: ClothingHeadHatHairflower diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index 7414837592..2c55e4fc26 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -98,19 +98,6 @@ sprite: Clothing/Eyes/Misc/blindfold.rsi state: icon -- type: construction - name: hairflower - id: hairflower - graph: hairflower - startNode: start - targetNode: hairflower - category: construction-category-clothing - description: "A red flower for beautiful ladies." - icon: - sprite: Clothing/Head/Misc/hairflower.rsi - state: icon - objectType: Item - - type: construction name: flower crown id: flowercrown diff --git a/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/icon.png b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/icon.png deleted file mode 100644 index a87d0676fb4ce93c6344dcaa77a8b773c0d439ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJQ=Tr4Ar*7pUfammWFXM+@c)&G zoh=8|3)$itHhkvV!)85u_w3GxtO8->wQS}>!X7=HE16$D$S~Y+CpY)fo$}oEE4SpH zp0qK_WH*z@0tQwMh8sI{R$aQlAkxTCaC81q(GQ>bcp_7}9B!;TUU*ZoO~+_6BSW5k zhwZ{QJUidV?2&%(OQw5mwey>k*YD^w+}$WRd(XS$N5qV{7kD`*3qSi;!4rIFC3ntK z(}McL4--9P7$1F7-JHuYVa_bi?H4#doR9dU8qxr^xrX6zkab-|&C3%&Uom*P`njxg HN@xNAZU}62 diff --git a/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/inhand-left.png deleted file mode 100644 index f838e54e74169b230a7dfd569d5c292509d39f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=uRL8GLn`LHy=BPP4ZLn`LHy=BYSb0+;`ELFT~e<|;C_;WqY!iLuy zIs4a_R3Beioi@FM)8o>&D=kH*geJeqZ{m5tSCGt5-XP7qgZYlc0a>s$3|oXGTvd#gK50YKk1p2$CQP2BR01_nlU zPZ!6KinzD8HgX;c5IFX+d+t>39SvoA3i-^{(&+^Z-!~MqTMIt)Rpe6;E8DoaOQp4A zW95g|iaqtOo)mq5EV$$J%tFNpTOB4w)%I-sdgAkz70-k>zuma$>${0E#-{8~|1!I7 z*!AP|*&M5~(CXk_ED1Ywx~ntG_JwizCn+>AFmWJ=65R{0;_JWuR%}`K`GxMjC9>~y zs}FW>W*3kUVq#8f5rd+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Hydroponics/lily.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/lily.rsi/meta.json index ddbda4f0af..782dc2bfda 100644 --- a/Resources/Textures/Objects/Specific/Hydroponics/lily.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Hydroponics/lily.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a seed modified by potato1234_X (github) for ss14", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a seed modified by potato1234_X (github) for ss14, equipped-HELMET taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e and changed hue", "size": { "x": 32, "y": 32 @@ -27,6 +27,10 @@ }, { "name": "stage-3" + }, + { + "name": "equipped-HELMET", + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/equipped-HELMET.png b/Resources/Textures/Objects/Specific/Hydroponics/poppy.rsi/equipped-HELMET.png similarity index 100% rename from Resources/Textures/Clothing/Head/Misc/hairflower.rsi/equipped-HELMET.png rename to Resources/Textures/Objects/Specific/Hydroponics/poppy.rsi/equipped-HELMET.png diff --git a/Resources/Textures/Objects/Specific/Hydroponics/poppy.rsi/meta.json b/Resources/Textures/Objects/Specific/Hydroponics/poppy.rsi/meta.json index 8b6952d030..b49b49cc85 100644 --- a/Resources/Textures/Objects/Specific/Hydroponics/poppy.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Hydroponics/poppy.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a, equipped-HELMET taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", "size": { "x": 32, "y": 32 @@ -27,6 +27,10 @@ }, { "name": "stage-3" + }, + { + "name": "equipped-HELMET", + "directions": 4 } ] } diff --git a/Resources/migration.yml b/Resources/migration.yml index 147e322fb5..8c0fe2064f 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -237,7 +237,7 @@ AirlockExternalGlassEasyPryLocked: AirlockExternalGlassLocked AirlockGlassShuttleEasyPryLocked: AirlockExternalGlassShuttleLocked AirlockShuttleEasyPryLocked: AirlockExternalShuttleLocked -#2024-03-10 +# 2024-03-10 ClothingBackpackFilledDetective: ClothingBackpackSecurityFilledDetective ClothingBackpackDuffelFilledDetective: ClothingBackpackDuffelSecurityFilledDetective ClothingBackpackSatchelFilledDetective: ClothingBackpackSatchelSecurityFilledDetective @@ -247,10 +247,13 @@ ImprovisedExplosive: FireBomb ImprovisedExplosiveEmpty: FireBombEmpty ImprovisedExplosiveFuel: FireBombFuel +# 2024-03-16 +ClothingHeadHatHairflower: FoodPoppy + # 2024-03-21 RPED: null # 2024-03-30 # These are technically not equivalent, but it probably makes more sense to replace any existing SCAF stuff with SOME kind of armor, instead of just deleting it outright. ClothingHeadHelmetScaf: ClothingHeadHelmetBasic -ClothingOuterArmorScaf: ClothingOuterArmorBasic \ No newline at end of file +ClothingOuterArmorScaf: ClothingOuterArmorBasic From 7c7ff5abf64dff98b922c4adefad9d5f7d755351 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 05:34:29 +0000 Subject: [PATCH 046/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 19c1c744cf..23cf2b5d2b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: 'Flesh and Rock anom reworked: It should be easier to maintain them now - (I guess)' - type: Tweak - id: 5771 - time: '2024-01-23T12:32:05.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24381 - author: metalgearsloth changes: - message: Fix thrusters. @@ -3799,3 +3791,13 @@ id: 6270 time: '2024-03-31T04:59:36.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26453 +- author: lzk228 + changes: + - message: Hairflower was removed. + type: Remove + - message: Now you can wear poppy (and other flowers) on your head instead of crafting + hairflower with it. + type: Tweak + id: 6271 + time: '2024-03-31T05:33:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25475 From d71062a64c569d59bc67c950a34454eef7ccaa14 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Sat, 30 Mar 2024 22:37:33 -0700 Subject: [PATCH 047/206] Injector UI shows TransferAmount change, Spilling liquid changes Injector mode (#26596) * Injector UI shows TransferAmount change, spill changes mode * Update Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs * Update Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs --------- Co-authored-by: Plykiya Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- Content.Client/Chemistry/UI/InjectorStatusControl.cs | 3 +++ Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/Content.Client/Chemistry/UI/InjectorStatusControl.cs b/Content.Client/Chemistry/UI/InjectorStatusControl.cs index 9cb699330c..ba1f97cd1e 100644 --- a/Content.Client/Chemistry/UI/InjectorStatusControl.cs +++ b/Content.Client/Chemistry/UI/InjectorStatusControl.cs @@ -17,6 +17,7 @@ public sealed class InjectorStatusControl : Control private FixedPoint2 PrevVolume; private FixedPoint2 PrevMaxVolume; + private FixedPoint2 PrevTransferAmount; private InjectorToggleMode PrevToggleState; public InjectorStatusControl(Entity parent, SharedSolutionContainerSystem solutionContainers) @@ -37,11 +38,13 @@ public sealed class InjectorStatusControl : Control // only updates the UI if any of the details are different than they previously were if (PrevVolume == solution.Volume && PrevMaxVolume == solution.MaxVolume + && PrevTransferAmount == _parent.Comp.TransferAmount && PrevToggleState == _parent.Comp.ToggleState) return; PrevVolume = solution.Volume; PrevMaxVolume = solution.MaxVolume; + PrevTransferAmount = _parent.Comp.TransferAmount; PrevToggleState = _parent.Comp.ToggleState; // Update current volume and injector state diff --git a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs index 1e9e742a38..92ea962140 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs @@ -1,3 +1,4 @@ +using Content.Shared.Chemistry.Components; using Content.Shared.Database; using Content.Shared.DoAfter; using Content.Shared.Examine; @@ -62,6 +63,12 @@ public abstract partial class SharedPuddleSystem { var puddleSolution = _solutionContainerSystem.SplitSolution(soln.Value, solution.Volume); TrySpillAt(Transform(target).Coordinates, puddleSolution, out _); + + if (TryComp(entity, out var injectorComp)) + { + injectorComp.ToggleState = InjectorToggleMode.Draw; + Dirty(entity, injectorComp); + } }; } else From d512bc141a0a629e5fe49435529b0b5d68bbf9a9 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 31 Mar 2024 17:03:52 +1100 Subject: [PATCH 048/206] Update submodule to 217.2.1 (#26599) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 99c5b0ad08..6764ed56b0 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 99c5b0ad08351af347db3a122373f2c4482e94dc +Subproject commit 6764ed56b06309b56bd35c8ebffdf64882d4c4c1 From 1b69762816c5ae5184baa024a4bcd23b75236a6c Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Sun, 31 Mar 2024 02:34:17 -0400 Subject: [PATCH 049/206] disallow unanchoring or opening panels on locked emitters/APEs (#26600) * disallow unanchoring or opening panels on locked emitters/APEs * no locking open panels * oops * needback feedback * Update Content.Shared/Lock/LockSystem.cs * Update Content.Shared/Lock/LockSystem.cs * Update Content.Shared/Lock/LockSystem.cs * sanity --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: metalgearsloth --- Content.Client/Popups/PopupSystem.cs | 7 +- Content.Server/Popups/PopupSystem.cs | 2 +- Content.Shared/Lock/LockSystem.cs | 69 ++++++++++++++++--- .../Lock/LockedAnchorableComponent.cs | 13 ++++ .../Lock/LockedWiresPanelComponent.cs | 13 ++++ Content.Shared/Popups/SharedPopupSystem.cs | 2 +- Content.Shared/Wires/SharedWiresSystem.cs | 24 ++++++- Content.Shared/Wires/WiresPanelComponent.cs | 6 ++ .../Locale/en-US/lock/lock-component.ftl | 3 +- .../Mobs/Cyborgs/base_borg_chassis.yml | 1 + .../Structures/Machines/anomaly_equipment.yml | 2 + .../Power/Generation/Singularity/emitter.yml | 2 + 12 files changed, 129 insertions(+), 15 deletions(-) create mode 100644 Content.Shared/Lock/LockedAnchorableComponent.cs create mode 100644 Content.Shared/Lock/LockedWiresPanelComponent.cs diff --git a/Content.Client/Popups/PopupSystem.cs b/Content.Client/Popups/PopupSystem.cs index 479fb02906..fcc8bfc420 100644 --- a/Content.Client/Popups/PopupSystem.cs +++ b/Content.Client/Popups/PopupSystem.cs @@ -163,10 +163,13 @@ namespace Content.Client.Popups PopupEntity(message, uid, type); } - public override void PopupClient(string? message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small) + public override void PopupClient(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small) { + if (recipient == null) + return; + if (_timing.IsFirstTimePredicted) - PopupEntity(message, uid, recipient, type); + PopupEntity(message, uid, recipient.Value, type); } public override void PopupEntity(string? message, EntityUid uid, PopupType type = PopupType.Small) diff --git a/Content.Server/Popups/PopupSystem.cs b/Content.Server/Popups/PopupSystem.cs index c5eb3819b5..237ca33a4d 100644 --- a/Content.Server/Popups/PopupSystem.cs +++ b/Content.Server/Popups/PopupSystem.cs @@ -88,7 +88,7 @@ namespace Content.Server.Popups RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), actor.PlayerSession); } - public override void PopupClient(string? message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small) + public override void PopupClient(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small) { // do nothing duh its for client only } diff --git a/Content.Shared/Lock/LockSystem.cs b/Content.Shared/Lock/LockSystem.cs index 74cf5496d9..5644a6b02f 100644 --- a/Content.Shared/Lock/LockSystem.cs +++ b/Content.Shared/Lock/LockSystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Access.Components; using Content.Shared.Access.Systems; +using Content.Shared.Construction.Components; using Content.Shared.DoAfter; using Content.Shared.Emag.Systems; using Content.Shared.Examine; @@ -9,6 +10,7 @@ using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Storage.Components; using Content.Shared.Verbs; +using Content.Shared.Wires; using JetBrains.Annotations; using Robust.Shared.Audio.Systems; using Robust.Shared.Utility; @@ -40,8 +42,11 @@ public sealed class LockSystem : EntitySystem SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnDoAfterLock); SubscribeLocalEvent(OnDoAfterUnlock); - } + SubscribeLocalEvent(OnLockToggleAttempt); + SubscribeLocalEvent(OnAttemptChangePanel); + SubscribeLocalEvent(OnUnanchorAttempt); + } private void OnStartup(EntityUid uid, LockComponent lockComp, ComponentStartup args) { _appearanceSystem.SetData(uid, LockVisuals.Locked, lockComp.Locked); @@ -226,18 +231,18 @@ public sealed class LockSystem : EntitySystem private void AddToggleLockVerb(EntityUid uid, LockComponent component, GetVerbsEvent args) { - if (!args.CanAccess || !args.CanInteract || !CanToggleLock(uid, args.User)) + if (!args.CanAccess || !args.CanInteract) return; AlternativeVerb verb = new() { - Act = component.Locked ? - () => TryUnlock(uid, args.User, component) : - () => TryLock(uid, args.User, component), + Act = component.Locked + ? () => TryUnlock(uid, args.User, component) + : () => TryLock(uid, args.User, component), Text = Loc.GetString(component.Locked ? "toggle-lock-verb-unlock" : "toggle-lock-verb-lock"), - Icon = component.Locked ? - new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/unlock.svg.192dpi.png")) : - new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/lock.svg.192dpi.png")), + Icon = !component.Locked + ? new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/lock.svg.192dpi.png")) + : new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/unlock.svg.192dpi.png")), }; args.Verbs.Add(verb); } @@ -275,5 +280,53 @@ public sealed class LockSystem : EntitySystem TryUnlock(uid, args.User, skipDoAfter: true); } + + private void OnLockToggleAttempt(Entity ent, ref LockToggleAttemptEvent args) + { + if (args.Cancelled) + return; + + if (!TryComp(ent, out var panel) || !panel.Open) + return; + + if (!args.Silent) + { + _sharedPopupSystem.PopupClient(Loc.GetString("construction-step-condition-wire-panel-close"), + ent, + args.User); + } + args.Cancelled = true; + } + + + private void OnAttemptChangePanel(Entity ent, ref AttemptChangePanelEvent args) + { + if (args.Cancelled) + return; + + if (!TryComp(ent, out var lockComp) || !lockComp.Locked) + return; + + _sharedPopupSystem.PopupClient(Loc.GetString("lock-comp-generic-fail", + ("target", Identity.Entity(ent, EntityManager))), + ent, + args.User); + args.Cancelled = true; + } + + private void OnUnanchorAttempt(Entity ent, ref UnanchorAttemptEvent args) + { + if (args.Cancelled) + return; + + if (!TryComp(ent, out var lockComp) || !lockComp.Locked) + return; + + _sharedPopupSystem.PopupClient(Loc.GetString("lock-comp-generic-fail", + ("target", Identity.Entity(ent, EntityManager))), + ent, + args.User); + args.Cancel(); + } } diff --git a/Content.Shared/Lock/LockedAnchorableComponent.cs b/Content.Shared/Lock/LockedAnchorableComponent.cs new file mode 100644 index 0000000000..781b7f6532 --- /dev/null +++ b/Content.Shared/Lock/LockedAnchorableComponent.cs @@ -0,0 +1,13 @@ +using Content.Shared.Construction.Components; +using Robust.Shared.GameStates; + +namespace Content.Shared.Lock; + +/// +/// This is used for a that cannot be unanchored while locked. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(LockSystem))] +public sealed partial class LockedAnchorableComponent : Component +{ + +} diff --git a/Content.Shared/Lock/LockedWiresPanelComponent.cs b/Content.Shared/Lock/LockedWiresPanelComponent.cs new file mode 100644 index 0000000000..1dbe6a4932 --- /dev/null +++ b/Content.Shared/Lock/LockedWiresPanelComponent.cs @@ -0,0 +1,13 @@ +using Content.Shared.Wires; +using Robust.Shared.GameStates; + +namespace Content.Shared.Lock; + +/// +/// This is used for a that cannot be opened while locked. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(LockSystem))] +public sealed partial class LockedWiresPanelComponent : Component +{ + +} diff --git a/Content.Shared/Popups/SharedPopupSystem.cs b/Content.Shared/Popups/SharedPopupSystem.cs index aeb85de2f5..b199884afb 100644 --- a/Content.Shared/Popups/SharedPopupSystem.cs +++ b/Content.Shared/Popups/SharedPopupSystem.cs @@ -86,7 +86,7 @@ namespace Content.Shared.Popups /// Variant of that only runs on the client, outside of prediction. /// Useful for shared code that is always ran by both sides to avoid duplicate popups. /// - public abstract void PopupClient(string? message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small); + public abstract void PopupClient(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small); /// /// Variant of for use with prediction. The local client will show diff --git a/Content.Shared/Wires/SharedWiresSystem.cs b/Content.Shared/Wires/SharedWiresSystem.cs index f069687ffb..b4b0768e0f 100644 --- a/Content.Shared/Wires/SharedWiresSystem.cs +++ b/Content.Shared/Wires/SharedWiresSystem.cs @@ -28,15 +28,24 @@ public abstract class SharedWiresSystem : EntitySystem if (args.Cancelled) return; - TogglePanel(uid, panel, !panel.Open); + if (!TogglePanel(uid, panel, !panel.Open, args.User)) + return; + AdminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(args.User):user} screwed {ToPrettyString(uid):target}'s maintenance panel {(panel.Open ? "open" : "closed")}"); var sound = panel.Open ? panel.ScrewdriverOpenSound : panel.ScrewdriverCloseSound; Audio.PlayPredicted(sound, uid, args.User); + args.Handled = true; } private void OnInteractUsing(Entity ent, ref InteractUsingEvent args) { + if (!Tool.HasQuality(args.Used, ent.Comp.OpeningTool)) + return; + + if (!CanTogglePanel(ent, args.User)) + return; + if (!Tool.UseTool( args.Used, args.User, @@ -89,14 +98,25 @@ public abstract class SharedWiresSystem : EntitySystem Appearance.SetData(uid, WiresVisuals.MaintenancePanelState, panel.Open && panel.Visible, appearance); } - public void TogglePanel(EntityUid uid, WiresPanelComponent component, bool open) + public bool TogglePanel(EntityUid uid, WiresPanelComponent component, bool open, EntityUid? user = null) { + if (!CanTogglePanel((uid, component), user)) + return false; + component.Open = open; UpdateAppearance(uid, component); Dirty(uid, component); var ev = new PanelChangedEvent(component.Open); RaiseLocalEvent(uid, ref ev); + return true; + } + + public bool CanTogglePanel(Entity ent, EntityUid? user) + { + var attempt = new AttemptChangePanelEvent(ent.Comp.Open, user); + RaiseLocalEvent(ent, ref attempt); + return !attempt.Cancelled; } public bool IsPanelOpen(Entity entity) diff --git a/Content.Shared/Wires/WiresPanelComponent.cs b/Content.Shared/Wires/WiresPanelComponent.cs index 9c7444778e..a18e590e21 100644 --- a/Content.Shared/Wires/WiresPanelComponent.cs +++ b/Content.Shared/Wires/WiresPanelComponent.cs @@ -57,6 +57,12 @@ public sealed partial class WiresPanelComponent : Component public LocId? ExamineTextOpen = "wires-panel-component-on-examine-open"; } +/// +/// Event raised on a before its open state is about to be changed. +/// +[ByRefEvent] +public record struct AttemptChangePanelEvent(bool Open, EntityUid? User, bool Cancelled = false); + /// /// Event raised when a panel is opened or closed. /// diff --git a/Resources/Locale/en-US/lock/lock-component.ftl b/Resources/Locale/en-US/lock/lock-component.ftl index f9f975c96e..380605697b 100644 --- a/Resources/Locale/en-US/lock/lock-component.ftl +++ b/Resources/Locale/en-US/lock/lock-component.ftl @@ -3,8 +3,9 @@ lock-comp-on-examined-is-unlocked = The {$entityName} seems to be unlocked. lock-comp-do-lock-success = You lock the {$entityName}. lock-comp-do-unlock-success = You unlock the {$entityName}. lock-comp-has-user-access-fail = Access denied +lock-comp-generic-fail = {CAPITALIZE(SUBJECT($target))} {CONJUGATE-BE($target)} locked. ## ToggleLockVerb toggle-lock-verb-unlock = Unlock -toggle-lock-verb-lock = Lock \ No newline at end of file +toggle-lock-verb-lock = Lock diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index dc6e718290..5c7a4e139f 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -140,6 +140,7 @@ - type: Lock locked: true - type: ActivatableUIRequiresLock + - type: LockedWiresPanel - type: Flashable - type: Damageable damageContainer: Silicon diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index cc9f8035fe..36d77a236d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -160,6 +160,7 @@ board: APECircuitboard - type: Lock locked: false + - type: LockedWiresPanel - type: AccessReader access: [[ "Research" ]] - type: Emitter @@ -204,6 +205,7 @@ True: { visible: true } False: { visible: false } - type: LockVisuals + - type: LockedAnchorable - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: BasicDevice diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/emitter.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/emitter.yml index 52698f62cc..b999b2bded 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/emitter.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/emitter.yml @@ -84,6 +84,8 @@ - type: Lock locked: false - type: LockVisuals + - type: LockedAnchorable + - type: LockedWiresPanel - type: AccessReader access: [[ "Engineering" ]] - type: Machine From d1ad6d912643e223ed3717916826c68d3a3ac5e5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 06:35:23 +0000 Subject: [PATCH 050/206] 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 23cf2b5d2b..e2b7f81231 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Fix thrusters. - type: Fix - id: 5772 - time: '2024-01-23T12:49:19.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24446 - author: '0x6273' changes: - message: Hotplates now work again @@ -3801,3 +3794,11 @@ id: 6271 time: '2024-03-31T05:33:23.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25475 +- author: EmoGarbage404 + changes: + - message: Borgs, Emitters, and APEs can no longer have their panels opened while + locked. APEs and Emitters additionally cannot be unanchored either. + type: Add + id: 6272 + time: '2024-03-31T06:34:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26600 From 83374935262265679e554780bcd42017238f059a Mon Sep 17 00:00:00 2001 From: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Date: Sun, 31 Mar 2024 08:49:46 +0000 Subject: [PATCH 051/206] Fix grave digging sound indefinitely playing if dug by aghost. (#26420) Admins bypass doafters. As such, the code that runs on doafter completion is ran before the sound is actually created. This then leads to the sound never being stopped, and as such it would infinitely play. This commit gets around the issue by manually stopping the sound should the doafter fail to start. If we could be sure that the doafter would never fail, then we could just move the call to StartDigging above starting the doafter but this is currently not possible. Co-authored-by: metalgearsloth --- Content.Shared/Burial/BurialSystem.cs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Burial/BurialSystem.cs b/Content.Shared/Burial/BurialSystem.cs index e19ac2e9c6..ccf5f1a298 100644 --- a/Content.Shared/Burial/BurialSystem.cs +++ b/Content.Shared/Burial/BurialSystem.cs @@ -51,8 +51,15 @@ public sealed class BurialSystem : EntitySystem BreakOnHandChange = true }; + if (component.Stream == null) + component.Stream = _audioSystem.PlayPredicted(component.DigSound, uid, args.User)?.Entity; + if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs)) + { + _audioSystem.Stop(component.Stream); return; + } + StartDigging(uid, args.User, args.Used, component); } @@ -111,8 +118,6 @@ public sealed class BurialSystem : EntitySystem { _popupSystem.PopupClient(Loc.GetString("grave-start-digging-user", ("grave", uid), ("tool", used)), user, user); _popupSystem.PopupEntity(Loc.GetString("grave-start-digging-others", ("user", user), ("grave", uid), ("tool", used)), user, Filter.PvsExcept(user), true); - if (component.Stream == null) - component.Stream = _audioSystem.PlayPredicted(component.DigSound, uid, user)?.Entity; component.ActiveShovelDigging = true; Dirty(uid, component); } @@ -163,8 +168,15 @@ public sealed class BurialSystem : EntitySystem BreakOnDamage = false }; - if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs, out component.HandDiggingDoAfter)) + + if (component.Stream == null) + component.Stream = _audioSystem.PlayPredicted(component.DigSound, uid, args.Entity)?.Entity; + + if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs)) + { + _audioSystem.Stop(component.Stream); return; + } StartDigging(uid, args.Entity, null, component); } From ad438a7ac2216c6295cae97025b4204a9c2ae41f Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sun, 31 Mar 2024 01:51:02 -0700 Subject: [PATCH 052/206] Make the buttons on the map ui not squished (#26604) Make the map ui work Co-authored-by: wrexbe --- Content.Client/Pinpointer/UI/NavMapControl.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Content.Client/Pinpointer/UI/NavMapControl.cs b/Content.Client/Pinpointer/UI/NavMapControl.cs index a8ec7b37a0..677092e191 100644 --- a/Content.Client/Pinpointer/UI/NavMapControl.cs +++ b/Content.Client/Pinpointer/UI/NavMapControl.cs @@ -114,9 +114,16 @@ public partial class NavMapControl : MapGridControl VerticalExpand = false, Children = { - _zoom, - _beacons, - _recenter, + new BoxContainer() + { + Orientation = BoxContainer.LayoutOrientation.Horizontal, + Children = + { + _zoom, + _beacons, + _recenter + } + } } }; From 55c77af33cad8e173c6281286fc66f3a67579eb5 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sun, 31 Mar 2024 10:52:52 +0200 Subject: [PATCH 053/206] Combine flower crown and wreath (#26605) * Combine flower crown and wreath * huh * huuh :trollface: --- .../Entities/Clothing/Head/misc.yml | 17 +++++++----- .../Entities/Clothing/Neck/misc.yml | 14 ---------- .../Entities/Objects/Decoration/present.yml | 2 +- .../Graphs/improvised/flowercrown.yml | 26 ------------------ .../Graphs/improvised/flowerwreath.yml | 2 +- .../Recipes/Crafting/improvised.yml | 19 ++----------- .../Head/Misc/flower-crown.rsi/icon.png | Bin 5190 -> 0 bytes .../equipped-HELMET.png | Bin .../Misc/flower-wreath.rsi/equipped-NECK.png | Bin .../Misc/flower-wreath.rsi/icon.png | Bin .../meta.json | 6 +++- .../Neck/Misc/flower-wreath.rsi/meta.json | 19 ------------- Resources/migration.yml | 4 +++ 13 files changed, 24 insertions(+), 85 deletions(-) delete mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowercrown.yml delete mode 100644 Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/icon.png rename Resources/Textures/Clothing/Head/Misc/{flower-crown.rsi => flower-wreath.rsi}/equipped-HELMET.png (100%) rename Resources/Textures/Clothing/{Neck => Head}/Misc/flower-wreath.rsi/equipped-NECK.png (100%) rename Resources/Textures/Clothing/{Neck => Head}/Misc/flower-wreath.rsi/icon.png (100%) rename Resources/Textures/Clothing/Head/Misc/{flower-crown.rsi => flower-wreath.rsi}/meta.json (59%) delete mode 100644 Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index 1149224fc3..c7ba6e0b32 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -35,17 +35,20 @@ - type: entity parent: ClothingHeadBase - id: ClothingHeadHatFlowerCrown - name: flower crown - description: A coronet of fresh and fragrant flowers. + id: ClothingHeadHatFlowerWreath + name: flower wreath + description: A wreath of colourful flowers. Can be worn both on head and neck. components: - type: Sprite - sprite: Clothing/Head/Misc/flower-crown.rsi + sprite: Clothing/Head/Misc/flower-wreath.rsi - type: Clothing - sprite: Clothing/Head/Misc/flower-crown.rsi + sprite: Clothing/Head/Misc/flower-wreath.rsi + slots: + - HEAD + - neck - type: Construction - graph: flowercrown - node: flowercrown + graph: flowerwreath + node: flowerwreath - type: entity parent: ClothingHeadLightBase diff --git a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml index 6b4be3c9f8..51325c0bbb 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml @@ -79,17 +79,3 @@ event: !type:StethoscopeActionEvent checkCanInteract: false priority: -1 - -- type: entity - parent: ClothingNeckBase - id: ClothingNeckFlowerWreath - name: flower wreath - description: A wreath of colourful flowers. - components: - - type: Sprite - sprite: Clothing/Neck/Misc/flower-wreath.rsi - - type: Clothing - sprite: Clothing/Neck/Misc/flower-wreath.rsi - - type: Construction - graph: flowerwreath - node: flowerwreath diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index a417fdf076..3fb5675f83 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -292,7 +292,7 @@ orGroup: GiftPool - id: ClothingHeadHatBunny orGroup: GiftPool - - id: ClothingHeadHatFlowerCrown + - id: ClothingHeadHatFlowerWreath orGroup: GiftPool - id: FoodPoppy orGroup: GiftPool diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowercrown.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowercrown.yml deleted file mode 100644 index cba454b663..0000000000 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowercrown.yml +++ /dev/null @@ -1,26 +0,0 @@ -- type: constructionGraph - id: flowercrown - start: start - graph: - - node: start - edges: - - to: flowercrown - steps: - - tag: Flower - name: flower - icon: - sprite: Objects/Specific/Hydroponics/poppy.rsi - state: produce - - tag: Flower - name: flower - icon: - sprite: Objects/Specific/Hydroponics/poppy.rsi - state: produce - - tag: Ambrosia - name: ambrosia - icon: - sprite: Objects/Specific/Hydroponics/ambrosia_vulgaris.rsi - state: produce - doAfter: 10 - - node: flowercrown - entity: ClothingHeadHatFlowerCrown diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowerwreath.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowerwreath.yml index a0a87a14d8..b8e580230d 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowerwreath.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/flowerwreath.yml @@ -23,4 +23,4 @@ state: produce doAfter: 10 - node: flowerwreath - entity: ClothingNeckFlowerWreath + entity: ClothingHeadHatFlowerWreath diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index 2c55e4fc26..38d254c141 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -98,19 +98,6 @@ sprite: Clothing/Eyes/Misc/blindfold.rsi state: icon -- type: construction - name: flower crown - id: flowercrown - graph: flowercrown - startNode: start - targetNode: flowercrown - category: construction-category-clothing - description: "A coronet of fresh and fragrant flowers." - icon: - sprite: Clothing/Head/Misc/flower-crown.rsi - state: icon - objectType: Item - - type: construction name: flower wreath id: flowerwreath @@ -118,9 +105,9 @@ startNode: start targetNode: flowerwreath category: construction-category-clothing - description: "A wreath of colourful flowers." + description: A wreath of colourful flowers. Can be worn both on head and neck. icon: - sprite: Clothing/Neck/Misc/flower-wreath.rsi + sprite: Clothing/Head/Misc/flower-wreath.rsi state: icon objectType: Item @@ -226,4 +213,4 @@ description: An improvised explosive made from pipes and wire. icon: sprite: Objects/Weapons/Bombs/pipebomb.rsi - state: icon \ No newline at end of file + state: icon diff --git a/Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/icon.png b/Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/icon.png deleted file mode 100644 index e1e80b9293d449cd5f31588a33d99fcafc8e8f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5190 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 diff --git a/Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/equipped-HELMET.png similarity index 100% rename from Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/equipped-HELMET.png rename to Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/equipped-HELMET.png diff --git a/Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/equipped-NECK.png b/Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/equipped-NECK.png rename to Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/icon.png b/Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/icon.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/icon.png rename to Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/icon.png diff --git a/Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/meta.json b/Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/meta.json similarity index 59% rename from Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/meta.json rename to Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/meta.json index 2899868b90..c3dc06f19c 100644 --- a/Resources/Textures/Clothing/Head/Misc/flower-crown.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Misc/flower-wreath.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-4.0", - "copyright": "Kevin Zheng 2022", + "copyright": "Kevin Zheng 2022 | equipped-NECK and icon Drawn by Ubaser.", "size": { "x": 32, "y": 32 @@ -10,6 +10,10 @@ { "name": "icon" }, + { + "name": "equipped-NECK", + "directions": 4 + }, { "name": "equipped-HELMET", "directions": 4 diff --git a/Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/meta.json deleted file mode 100644 index 71f798f2c4..0000000000 --- a/Resources/Textures/Clothing/Neck/Misc/flower-wreath.rsi/meta.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Drawn by Ubaser.", - "size": { - "x": 32, - "y": 32 - }, - - "states": [ - { - "name": "equipped-NECK", - "directions": 4 - }, - { - "name": "icon" - } - ] -} diff --git a/Resources/migration.yml b/Resources/migration.yml index 8c0fe2064f..f5306c8b7c 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -257,3 +257,7 @@ RPED: null # These are technically not equivalent, but it probably makes more sense to replace any existing SCAF stuff with SOME kind of armor, instead of just deleting it outright. ClothingHeadHelmetScaf: ClothingHeadHelmetBasic ClothingOuterArmorScaf: ClothingOuterArmorBasic + +# 2024-03-31 +ClothingNeckFlowerWreath: ClothingHeadHatFlowerWreath +ClothingHeadHatFlowerCrown: ClothingHeadHatFlowerWreath From 241b153f6a6466306edf1aa5011829c73f48ceb5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 08:53:58 +0000 Subject: [PATCH 054/206] 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 e2b7f81231..fc8e6bb559 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: '0x6273' - changes: - - message: Hotplates now work again - type: Fix - id: 5773 - time: '2024-01-23T13:06:14.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24450 - author: Boaz1111 changes: - message: Lizards can now properly eat fruit cakes and banana cream pie slices. @@ -3802,3 +3795,11 @@ id: 6272 time: '2024-03-31T06:34:17.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26600 +- author: lzk228 + changes: + - message: Flower crown and wreath were combined. Now you can wear wreath both on + head and on neck. + type: Tweak + id: 6273 + time: '2024-03-31T08:52:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26605 From 2a1903dae0948e315761fbde46552b5ceb3b57e1 Mon Sep 17 00:00:00 2001 From: Ubaser <134914314+UbaserB@users.noreply.github.com> Date: Sun, 31 Mar 2024 22:48:36 +1100 Subject: [PATCH 055/206] Add AP damage to throwing knives (#26380) * add * ap * no more stam dmg --- Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index 03654061ce..afe4644517 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -275,6 +275,7 @@ - type: EmbeddableProjectile sound: /Audio/Weapons/star_hit.ogg - type: DamageOtherOnHit + ignoreResistances: true damage: types: Slash: 10 From 7f2e6ccbb887addf5c3381f8c84fff6c451d1405 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 11:49:42 +0000 Subject: [PATCH 056/206] 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 fc8e6bb559..41e707cb49 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Boaz1111 - changes: - - message: Lizards can now properly eat fruit cakes and banana cream pie slices. - type: Fix - id: 5774 - time: '2024-01-23T18:08:32.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24457 - author: icekot8 changes: - message: The bounty of briefcases has been removed @@ -3803,3 +3796,10 @@ id: 6273 time: '2024-03-31T08:52:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26605 +- author: Ubaser + changes: + - message: Throwing knives now additionally do armour piercing damage. + type: Tweak + id: 6274 + time: '2024-03-31T11:48:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26380 From 5eff7f169e95e94aab54b742c6928c4925cf7887 Mon Sep 17 00:00:00 2001 From: avery <51971268+graevy@users.noreply.github.com> Date: Sun, 31 Mar 2024 13:44:02 -0700 Subject: [PATCH 057/206] cancelable brig timers (#26557) brig timers now cancelable. also some screensystem yakshave --- Content.Client/TextScreen/TextScreenSystem.cs | 14 ++++------- .../Components/SignalTimerComponent.cs | 6 +++++ .../Systems/SignalTimerSystem.cs | 23 +++++++++++++------ .../Screens/Systems/ScreenSystem.cs | 1 + 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/Content.Client/TextScreen/TextScreenSystem.cs b/Content.Client/TextScreen/TextScreenSystem.cs index b4d67f5f21..53a620bd46 100644 --- a/Content.Client/TextScreen/TextScreenSystem.cs +++ b/Content.Client/TextScreen/TextScreenSystem.cs @@ -112,17 +112,11 @@ public sealed class TextScreenSystem : VisualizerSystem + /// Default max width of a label (how many letters can this render?) + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public int MaxLength = 5; + /// /// The port that gets signaled when the timer triggers. /// diff --git a/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs b/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs index f9c2d3430e..0e214ee865 100644 --- a/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs +++ b/Content.Server/DeviceLinking/Systems/SignalTimerSystem.cs @@ -39,6 +39,7 @@ public sealed class SignalTimerSystem : EntitySystem private void OnInit(EntityUid uid, SignalTimerComponent component, ComponentInit args) { + _appearanceSystem.SetData(uid, TextScreenVisuals.DefaultText, component.Label); _appearanceSystem.SetData(uid, TextScreenVisuals.ScreenText, component.Label); _signalSystem.EnsureSinkPorts(uid, component.Trigger); } @@ -66,11 +67,6 @@ public sealed class SignalTimerSystem : EntitySystem { RemComp(uid); - if (TryComp(uid, out var appearance)) - { - _appearanceSystem.SetData(uid, TextScreenVisuals.ScreenText, signalTimer.Label, appearance); - } - _audio.PlayPvs(signalTimer.DoneSound, uid); _signalSystem.InvokePort(uid, signalTimer.TriggerPort); @@ -139,10 +135,15 @@ public sealed class SignalTimerSystem : EntitySystem if (!IsMessageValid(uid, args)) return; - component.Label = args.Text[..Math.Min(5, args.Text.Length)]; + component.Label = args.Text[..Math.Min(component.MaxLength, args.Text.Length)]; if (!HasComp(uid)) + { + // could maybe move the defaulttext update out of this block, + // if you delved deep into appearance update batching + _appearanceSystem.SetData(uid, TextScreenVisuals.DefaultText, component.Label); _appearanceSystem.SetData(uid, TextScreenVisuals.ScreenText, component.Label); + } } /// @@ -166,7 +167,15 @@ public sealed class SignalTimerSystem : EntitySystem { if (!IsMessageValid(uid, args)) return; - OnStartTimer(uid, component); + + // feedback received: pressing the timer button while a timer is running should cancel the timer. + if (HasComp(uid)) + { + _appearanceSystem.SetData(uid, TextScreenVisuals.TargetTime, _gameTiming.CurTime); + Trigger(uid, component); + } + else + OnStartTimer(uid, component); } private void OnSignalReceived(EntityUid uid, SignalTimerComponent component, ref SignalReceivedEvent args) diff --git a/Content.Server/Screens/Systems/ScreenSystem.cs b/Content.Server/Screens/Systems/ScreenSystem.cs index 19790f64d5..782fe38c88 100644 --- a/Content.Server/Screens/Systems/ScreenSystem.cs +++ b/Content.Server/Screens/Systems/ScreenSystem.cs @@ -56,6 +56,7 @@ public sealed class ScreenSystem : EntitySystem ) { _appearanceSystem.SetData(uid, TextScreenVisuals.DefaultText, text); + _appearanceSystem.SetData(uid, TextScreenVisuals.ScreenText, text); } } From 7e950ea1d59bf8c19416c060a55b08839ba11412 Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Sun, 31 Mar 2024 21:44:24 +0100 Subject: [PATCH 058/206] Fix orientation of roller skate sprites (#26627) Co-authored-by: Eoin Mcloughlin --- .../Specific/skates.rsi/equipped-FEET.png | Bin 21114 -> 773 bytes .../Shoes/Specific/skates.rsi/inhand-left.png | Bin 20591 -> 630 bytes .../Specific/skates.rsi/inhand-right.png | Bin 20584 -> 651 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Clothing/Shoes/Specific/skates.rsi/equipped-FEET.png b/Resources/Textures/Clothing/Shoes/Specific/skates.rsi/equipped-FEET.png index 09c92cfa5f54d70dadb3b6374b83a34a35d9930f..e62bf7af7d8c2fade57ad514393644eaa28f1f2d 100644 GIT binary patch delta 750 zcmVPx%zez+vRCt{2+RsZAVHgMS@8k->POY22 zW(89WY%^4V~l?>#u#IaF~%5UjIsZO zkV~+pX{7&NSy@3S6cWb9#>nIGWMTq=Ku&WWcm5M*1N(|X1OUZl5{k>DUH6RF^tgPp zE5E4%^c97ud$0n2cRNO?VV(fj_$#VycfaF{Eln^nx;{4nS?LD$E|;eYZV?L zSqPvRxU~q}SX+Okd~651^Jgu<U<73y*t8I+(G*Ia=0FGc?x>`H#z(B znfV6DVx<=VRj4^-47-Nhv#u#IaF~Ga!FJPACEpXvt{l4q#Ypc*S4dHOu zmhGUbDg^?81OM^4+1Sx-fpkyagVa(l=4N9U81H6*Z?qJ{i6JY~W2F80Z zHycB0sTZyd4ad+v;_xP#t31#QJ0)YuRtmjV*+f?Nu0-vY*5jSWFEuEolHR=)wq g*^|$9ULYsG0DQ4IG-qd~4*&oF07*qoM6N<$f_3I@aR2}S literal 21114 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 literal 20591 zcmeI4cUTik*T5G+K~TV65N`l0vLxBmjiH7rBGLrJ!e+Axk&*yWii%*xa#chHK@jyS z3W^0q5l}z{8z6eEAgG{-Uh!Vhi%NSp6v3!@{rvp?`JUtAym@ofrV-9YgEpw&SFO|Aw|Uk6m<`ujo-Ez(cQ>#3 zd1?FUd#3eAnv%21RSVPx?X;sf)1n3)wj4j?@v4$b#ZT&t&7;*PhyiW2ES_FSn}HJW zA(G9WreC0X9#9Iqt)T`KI3^X4#;xnndTF_9o>J6mr2yRj14qi|Y_JAA zNx*Qv!zCEF4+12655666{0vY~rmb-jP#Xl0oMYBZ1yq&-K35D3!hqGgfZ;Z8J=p(D z%hawn#7XTs$(LRl-ZA(Hk^+1LlVu6i^6w}fugBekDG1)Kx*s= ze6&q%VP%?`Wo7iu*_sQ%mlp~BiXIZ z?;oFkIw2aGA8o7h;c?N8cQX%+E8jM7HMi>d7TeY{8Xc{=xAiaCb8|cmhu1m}4ccs# zxTy&`pugU7+tkYwZ*}mV))=)Yo7T{P{YNK|o`Jh*5r!sWo1j5yr;m-OFu{1lf%LX@s zyPfV^li+^vx_LI|Vy9mLpp~s_^K8l6qfa`U{5j|}C+84j>}s2R8aH_oa^jYesYy43 zPmML%MBiI~Gs9Qw;TBU)38~=4XjRH3f0A+WMavURqk(bg^%MF>24xhFJwE4%a_;)~ zX!(gym7&qr1q10Sp_T+>yoH_TOwU>O?G6#fO`r~WIFK<=d9`!VWc|294yPua8}jke zXf8xv=V@nTaChjIVMOhvF`P?`2}9R&pvgH~``MrP!|m44TQ;`>T?`tG4kuCV#u~(3 zeaQ1WsS0m5B22rorY^beVjZPUr%vy!w|X+yJm`-Pu1}}9Tw63_%rot0)Mo>*1jxdD zf1=ByLwntZ(6-FAJi0gA<(TujL&KbpChgEMB)T0=KbT&fuHoL~e%)=$;RUYCGi}@{uC<2;{<$;5 zJw18$D_0#?!QttL)};#$iQLToi1cb(Kfvqa%!^K(Kb%ufEUe8dCTO5zvcin?{03*N zT^vojH0ea?gJnw$a}(Nhb2pl#AKnXdC^IM?SuRc6`DUuM2|*urOJ)tMpOO~e6uF^# z_?xLur|KM}&decW^Ze3x#_#mZu*-1Huzi(J&wQPhd@$cS*Q+I3)1qX?k>;U|8eHbzi7@mfb2lxpRA6}sbKHFWAnR>)+S-` zyxIx10mT8u`zH;Uq&LaI@ug#9qKjkB!KnwQ&zwH9r1VDVzS6t9Xh|mIdr*B+ebT+8 znlnCg!{!=gAId(9*`KVNd(f*fJ1=m}T-fV?r~BObSvE(Lk50Usdo(v~NLtRUxLFw~ zcLf)Z|C4<+`|z1D$DiFFP??z>ki8rca7PKwT+Y1M7?&Tn{M_>2+e}mkuX~`Gp*vSM zGUQb7aMm1Fbz<4>MziIY-|cK53OviT%kNWavxi-udP$hn<050H2+D&t@p`ESxH5&4^QOzEh~?%d{%f=&-cn-TaW5B*C&+4mI*c2%#M6<_ogcH9NBm=a?s>8>(+Rz zHQOwX@f=%0j;DoIRB=LTtUg)ow5m=Lke%RT;0&6fX}a+u_Cv-w>N&GwW4_moJD$m& z_WlmzU}M8fdZ7RLn%37%>z*b*)u>%MDuH-qzBqhuS<$;SX(JCC4>e-#G@ltWi@E)8 z3vI(gBR5TaJ1lhKX7%tQ-6DZLv4UO^bDuNMaQv*dc7~1-+y08pqlHhnOgUimENAuP z!&~!a4xafaiIp-kaS0&+GGXPDS8a>k8f2NS=NOkQcqw?!Uvm8jw&rB}<-m<+h~syt zUiHh`dZfP>sGe-jwY$RhY8J1D$Ty>>+ZX=~>UIKn==A=@zEj#I{KkNC{U{7Dgxe$fjG zudOURt>pJg!(IK^n&q#m?!BJxse;%(HIQYTCQ-f>foO=EKU+YR@eCd?R+*R3} zoc$NrXY;VMt7WCr&D{QQd*}Aajox_c(P`w~hro(PouzsIQvbSB>7CcyW_tB}rMr^5 z;~oATti`@1tJy4beR{)(ohS--LpL>4V*W-(CFFKx`FW*U&t$rg{8e*25*6mL7Scdi%E}x&mF|BFn_Li8e{D zi7nn-?{iK!Oe^lbtd3~4t^7@EHrkBlodsg!HWaYDA9%nrgkFgd8yp+6Tx5wRfD#_iQ zo0yq1&o8GjBLDPKeshCP3Zv}NyZrEfMt0o2lLDJO%5RDgHD7LiUo-MiWbov+vg^4I zLMJyK&2!3I_|E*b#RJZxb$86X+pF%ssamn9AT+h9qRO^;z?xO%?XmB-XmR>)*|p{R z+QDmIr7%rl_^DZNTSIFar<_+lDP>gqzV_>xqec=VKiqkBudE`WVsHH0__zxJ%MP@? zEO<5MSY>fh@%Zys!zknh@8-0;E)1;-)qS(SM$4&g8DYhg4&RR_-n-sRYl#~Z7uTVp zoY2&YQou?8;8+XYJSCovGg+u8z!>3)xR`NRfEeG10sz}AOpKs@n1sN^1j0ZQ{WrN6 z^a(n`mV7@}Th+xb$VwM{k;fKOJeKS*ab{GqH5P(S#LRf%*U){MxYtfL6k&i5E!sAnZ{sH8Ab$%M5Yl*6e5KL zLKGI2#G*ok?w7u)I)23t=J8oBRyN(u;gX5IuS6nd5s9Ipp~j&UV^OexNQPmUNP>tE z1mZQoknlhW5(Wl_7<4)5@neOBpus}1L?{X*Nc|#Q(PD{-zP_}f&#&%r1&BX46d2OY z4yQ;AL&QX~F^TvcBS%O1W&r`;v<#70FTs1#J+f~$7~&Q##)vLhh-h&zidiqg0wo6D z>V&xGB=K!`pVi+T1rPmfDPA1x-wBw95;1=)0BiU}=CCl~ zcg&=kF0;;1=$aum9)B!OFosA(!EPdvziC&L^`4*bHD!D_;<3*|B*>3=`J%3@9}!Q; z5C0)Ay*0n|;poV+4-AnYfhcBgWr~m8SSaMNcn}Gt^BFXdkCGq|Vp6#vm%(FzFrQB% zQxPtOkI*^?`K9?+uB}AqVrd-UuDcdKPlV#`KZg~I$HgdI5{7|P9!v(wWc&)jcqEX| z=aDfw7eO&<7frmOKF+>s$SGKe=Ox6yPaWx4cz9!Uj0;o9C>P{WNGOQ#sC*D%G8iBO zqLT2m0z(jq*)x`JxcRCnJ7EYOP2qi_43D+W%;Sm$eOcP0@E3Mw5HS)Qf=L&qiGI(@ z{G4(=XB4ST=K^OTs5JMOqSElicx>VqrM=zyY}sul{CYZn3_+LwKIY$VBh(iQlo$S8 zt~zUd-${swF9}70F$)16AwRM*yS#pBChML}l;&!G;s3!zgdj`)chm4=tLp#7H1tL> z>Wc&lFrF!~CxCkjer)Et=JU&y)w5c^UWx49%+iwyEbz=GU9cfvMnva=wL}D8mP)(b z9Y16nrlloJqgYcZFw>Glwty@x=rlTwWMKi*Asakp$PcvdBs>y|A{YeWn;SY4k|sPJ zi03~ZE@C7yOrbJKF#40ODGUmO#D`%Jqoe#T*G!Z~15qlBF(E#W4nf?XbWKGd9*K`& zAWVg@Zr6MY1oFvT1dnPeMj}yv(lw3AB{S&|3B(vw>aXoJ14d~W1qZ^XQ)u0+5r~EZ zr(kqCj6g8=XM4@yQFs(C8Nqvv_PECImQV(hfj|%+p^%}U1OoF=3?tDYd>S#vuLS~Q zJPMzSd*xyKlU$VB*PSFaH&ihxWS1%e303AfM76+PVyr) zv~U8HZ#(NM{c^v;CjQuNr_ZK{Bk~soJBoOiDc(-6b#HO+rmT+@{w3q=uJ0I4LtJbv z3HH_;IvK`i3o^!2Sg)Ht_4@eXp)9^AH~^8D3Ih-UMid7M*u>t#J~gE$e-?fO!;b?< z=g|lE{#BW5eNX98%71ZZeFj9rUqrI>f46C0wXCU^eAB*aS<_xi_dub<6u;MZc2uUg zkCpWC1gn#?EB+)6GsTA{TO?b1wlECy_p}n?2j~##L6D9wfleD)#WxMTzGv7+(QVij zTz#H*b#98gO7W*@_=7y+=O=kz?Uz3vKY!&#?}&b-R~cW5Mr44<7ZteV^O4aiaLE9X zFDh`!=Od$4;F19%UsT|d&qqe9z$F7jzNo+@pO1`IflCI6d{Kc*J|7va0+$RB`Jw`s zd_FQ-1uhvN@$@Z zRp62VB41SClFvs*tH31#M82rNC7+LsR)I?fhi z;F8ZrMytRj14O}s%bs^ekF7Ybl6uCp^TCzZT zzn8l*)`w}Qw|-LD@pvGxB`{KX_Qfio#XZpDPR&1V)yw!DuQbhD&lEOziJht&h|6(> zZOW0V%yhil`Qo+v)5?{ss{74o*Sww^1*pmSGjE-iKFETrwC|esg!BE2OSL`i^Zz~s zsm$5t?L***8}3{H|MuTE7qBVUo-mfMp{Hs@f2&wMyH*pQszK3p%9GmWKW+vhl>7Hv Us`Drc4?w`)dX`nDrO(R$0PZK-2LJ#7 diff --git a/Resources/Textures/Clothing/Shoes/Specific/skates.rsi/inhand-right.png b/Resources/Textures/Clothing/Shoes/Specific/skates.rsi/inhand-right.png index 7886baaeda6342587754b9ad910a1bc27fd2c536..0b772c7c8560d855512fe2b03124fa84937f4611 100644 GIT binary patch delta 627 zcmV-(0*w9WpaF{okR*Qrb5ch_0Itp)=>Px%MM*?KRCt{2+P_O1VI0Tt_tk6)vDKPf zM=Qky67Uaj&>`T|UB^NW!9c1*$tF1X2eeE22MAppidZwdNWPxI}k;A@Px^pj+$#i^A=rRGNQb|or#aq|W?>eVn zo1_yFMrWH{e{7hpD-rcO50H`){q!ST<&~5?1NGBpx8#&-l z_I|ofK)q(O+B^rqzFJ~&c@BMZD}bDXp>J-nxIEWd{;Pk@^S%clbeVuuDy8ksZ*X%s z1Hi%MJ{98#ZJ`ig7+Ls%Q~4_68L#(({`- zOt&*yj;prEGxy5c^9(3lm|DGNV@&25nFd0B28>LDF`1`cvngDdp**aG5JCtcgb+dq zA%qY@JQ!Lb4$e3*IK0{HCU!_3nJ`0e1s%+mx6q=SD*{C4nR=J^be4qp6QeggdI4)5y=Ckp@o N002ovPDHLkV1h=iGGYJ# literal 20584 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 From 3adf6c1ecc51b538fe1b1546206a089fee8dd668 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 20:45:08 +0000 Subject: [PATCH 059/206] 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 41e707cb49..8a8f3911ee 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: icekot8 - changes: - - message: The bounty of briefcases has been removed - type: Remove - id: 5775 - time: '2024-01-23T18:26:28.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24392 - author: Errant changes: - message: '"Not enough oxygen" hud alerts now indicate the proper gas for nitrogen @@ -3803,3 +3796,10 @@ id: 6274 time: '2024-03-31T11:48:36.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26380 +- author: graevy + changes: + - message: clicking the brig timer button will now cancel its countdown + type: Tweak + id: 6275 + time: '2024-03-31T20:44:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26557 From d2bee7ec91fef6cb2a1ee9b2aada98ae1ba136f3 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Mon, 1 Apr 2024 09:45:40 +1300 Subject: [PATCH 060/206] Fix GastTileOverlay sending redundant data (#26623) Fix GastTileOverlay not updating properly --- .../Atmos/EntitySystems/GasTileOverlaySystem.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs b/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs index c42cfd08da..89b9c52078 100644 --- a/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs +++ b/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs @@ -432,14 +432,16 @@ namespace Content.Server.Atmos.EntitySystems if (!overlay.Chunks.TryGetValue(gIndex, out var value)) continue; - if (previousChunks != null && - previousChunks.Contains(gIndex) && - value.LastUpdate > LastSessionUpdate) + // If the chunk was updated since we last sent it, send it again + if (value.LastUpdate > LastSessionUpdate) { + dataToSend.Add(value); continue; } - dataToSend.Add(value); + // Always send it if we didn't previously send it + if (previousChunks == null || !previousChunks.Contains(gIndex)) + dataToSend.Add(value); } previouslySent[netGrid] = gridChunks; From 6d1511124f5ba8f3a2ecc5297600e0dd008cfb82 Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sun, 31 Mar 2024 13:49:51 -0700 Subject: [PATCH 061/206] Auto DeAdmin sooner (#26551) Co-authored-by: wrexbe --- .../GameTicking/GameTicker.RoundFlow.cs | 35 +++++++++++-------- .../GameTicking/GameTicker.Spawning.cs | 4 --- .../GameTicking/Rules/NukeopsRuleSystem.cs | 4 --- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 004508ab91..202daf256d 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -4,6 +4,7 @@ using Content.Server.Discord; using Content.Server.GameTicking.Events; using Content.Server.Ghost; using Content.Server.Maps; +using Content.Shared.CCVar; using Content.Shared.Database; using Content.Shared.GameTicking; using Content.Shared.Mind; @@ -194,26 +195,18 @@ namespace Content.Server.GameTicking SendServerMessage(Loc.GetString("game-ticker-start-round")); - // Just in case it hasn't been loaded previously we'll try loading it. - LoadMaps(); - - // map has been selected so update the lobby info text - // applies to players who didn't ready up - UpdateInfoText(); - - StartGamePresetRules(); - - RoundLengthMetric.Set(0); - - var startingEvent = new RoundStartingEvent(RoundId); - RaiseLocalEvent(startingEvent); var readyPlayers = new List(); var readyPlayerProfiles = new Dictionary(); - + var autoDeAdmin = _cfg.GetCVar(CCVars.AdminDeadminOnJoin); foreach (var (userId, status) in _playerGameStatuses) { if (LobbyEnabled && status != PlayerGameStatus.ReadyToPlay) continue; if (!_playerManager.TryGetSessionById(userId, out var session)) continue; + + if (autoDeAdmin && _adminManager.IsAdmin(session)) + { + _adminManager.DeAdmin(session); + } #if DEBUG DebugTools.Assert(_userDb.IsLoadComplete(session), $"Player was readied up but didn't have user DB data loaded yet??"); #endif @@ -235,6 +228,20 @@ namespace Content.Server.GameTicking readyPlayerProfiles.Add(userId, profile); } + // Just in case it hasn't been loaded previously we'll try loading it. + LoadMaps(); + + // map has been selected so update the lobby info text + // applies to players who didn't ready up + UpdateInfoText(); + + StartGamePresetRules(); + + RoundLengthMetric.Set(0); + + var startingEvent = new RoundStartingEvent(RoundId); + RaiseLocalEvent(startingEvent); + var origReadyPlayers = readyPlayers.ToArray(); if (!StartPreset(origReadyPlayers, force)) diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index 52bab07ce8..5f4610744a 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -154,10 +154,6 @@ namespace Content.Server.GameTicking return; } - // Automatically de-admin players who are joining. - if (_cfg.GetCVar(CCVars.AdminDeadminOnJoin) && _adminManager.IsAdmin(player)) - _adminManager.DeAdmin(player); - // We raise this event to allow other systems to handle spawning this player themselves. (e.g. late-join wizard, etc) var bev = new PlayerBeforeSpawnEvent(player, character, jobId, lateJoin, station); RaiseLocalEvent(bev); diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index ea5ab9c2ab..886af60987 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -763,10 +763,6 @@ public sealed class NukeopsRuleSystem : GameRuleSystem _mind.SetUserId(newMind, nukieSession.Session.UserId); _roles.MindAddRole(newMind, new NukeopsRoleComponent { PrototypeId = nukieSession.Type.AntagRoleProto }); - // Automatically de-admin players who are being made nukeops - if (_cfg.GetCVar(CCVars.AdminDeadminOnJoin) && _adminManager.IsAdmin(nukieSession.Session)) - _adminManager.DeAdmin(nukieSession.Session); - _mind.TransferTo(newMind, mob); } //Otherwise, spawn as a ghost role From 0602e643006e9068f30322d52a797e481c3c15f1 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sun, 31 Mar 2024 22:52:49 +0200 Subject: [PATCH 062/206] Add briefcase to curadrobe and lawdrobe, and some briefcases cleanup (#26527) * Add briefcase to curadrobe and some briefcases cleanup * also add to lawdrobe --- .../Catalog/Fills/Items/briefcases.yml | 6 +---- .../VendingMachines/Inventories/curadrobe.yml | 3 ++- .../VendingMachines/Inventories/lawdrobe.yml | 1 + .../Entities/Objects/Misc/briefcases.yml | 23 ++++--------------- Resources/migration.yml | 1 + 5 files changed, 9 insertions(+), 25 deletions(-) diff --git a/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml b/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml index 6be5ae0d30..58a49aa6e9 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml @@ -1,6 +1,5 @@ - type: entity id: BriefcaseBrownFilled - name: brown briefcase parent: BriefcaseBrown suffix: Filled, Paper components: @@ -11,9 +10,8 @@ - type: entity id: BriefcaseSyndieSniperBundleFilled - name: brown briefcase parent: BriefcaseSyndie - suffix: SniperBundle + suffix: Syndicate, Sniper Bundle components: - type: Item size: Ginormous @@ -32,7 +30,6 @@ - type: entity id: BriefcaseSyndieLobbyingBundleFilled - name: brown briefcase parent: BriefcaseSyndie suffix: Syndicate, Spesos components: @@ -52,7 +49,6 @@ - type: entity id: BriefcaseThiefBribingBundleFilled - name: brown briefcase parent: BriefcaseSyndie suffix: Thief, Spesos components: diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml index 07e957a5e0..aac1cbb3f4 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml @@ -2,6 +2,7 @@ id: CuraDrobeInventory startingInventory: BooksBag: 2 + BriefcaseBrown: 2 HandLabeler: 2 ClothingEyesGlasses: 2 ClothingEyesGlassesJamjar: 2 @@ -12,4 +13,4 @@ ClothingUniformJumpskirtLibrarian: 3 ClothingShoesBootsLaceup: 2 ClothingHeadsetService: 2 - + diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml index b1478a7cfc..28f63e44e2 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/lawdrobe.yml @@ -14,6 +14,7 @@ ClothingShoesBootsLaceup: 2 ClothingHeadsetService: 2 ClothingNeckLawyerbadge: 2 + BriefcaseBrown: 2 LuxuryPen: 2 contrabandInventory: ClothingOuterRobesJudge: 1 diff --git a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml index aa8823d70d..762204701c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml @@ -1,8 +1,8 @@ - type: entity parent: BaseStorageItem - abstract: true id: BriefcaseBase description: Useful for carrying items in your hands. + abstract: true components: - type: Item size: Ginormous @@ -14,10 +14,9 @@ - Briefcase - type: entity - name: brown briefcase parent: BriefcaseBase id: BriefcaseBrown - description: A handy briefcase. + name: brown briefcase components: - type: Sprite sprite: Objects/Storage/Briefcases/briefcase_brown.rsi @@ -26,23 +25,9 @@ sprite: Objects/Storage/Briefcases/briefcase_brown.rsi - type: entity - parent: BriefcaseBase - abstract: true - id: BriefcaseSyndieBase + parent: BriefcaseBrown + id: BriefcaseSyndie suffix: Syndicate, Empty - description: Useful for carrying items in your hands. components: - type: Item size: Huge - -- type: entity - name: brown briefcase - parent: BriefcaseSyndieBase - id: BriefcaseSyndie - description: A handy briefcase. - components: - - type: Sprite - sprite: Objects/Storage/Briefcases/briefcase_brown.rsi - state: icon - - type: Item - sprite: Objects/Storage/Briefcases/briefcase_brown.rsi diff --git a/Resources/migration.yml b/Resources/migration.yml index f5306c8b7c..eadb76305c 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -261,3 +261,4 @@ ClothingOuterArmorScaf: ClothingOuterArmorBasic # 2024-03-31 ClothingNeckFlowerWreath: ClothingHeadHatFlowerWreath ClothingHeadHatFlowerCrown: ClothingHeadHatFlowerWreath +BriefcaseSyndieBase: null From c62e90afb364b443c830540e362d21583667eceb Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 31 Mar 2024 20:53:55 +0000 Subject: [PATCH 063/206] 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 8a8f3911ee..29108f69f8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Errant - changes: - - message: '"Not enough oxygen" hud alerts now indicate the proper gas for nitrogen - breathers.' - type: Fix - id: 5776 - time: '2024-01-23T20:17:41.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24373 - author: themias changes: - message: Cyborgs can no longer spawn with the Wheelchair Bound or Muted trait @@ -3803,3 +3795,10 @@ id: 6275 time: '2024-03-31T20:44:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26557 +- author: lzk228 + changes: + - message: Briefcases was added to CuraDrobe and LawDrobe. + type: Tweak + id: 6276 + time: '2024-03-31T20:52:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26527 From 9b08c2c908e344e3356c7cb4bd75efca0adae2e4 Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Mon, 1 Apr 2024 01:07:13 +0100 Subject: [PATCH 064/206] Fix some text overflow bugs in HUD (#26615) * Don't clip text in item status * Fix overflow in examine tooltip --------- Co-authored-by: Eoin Mcloughlin --- Content.Client/Examine/ExamineSystem.cs | 27 +++++++++---------- .../Inventory/Controls/ItemStatusPanel.xaml | 4 +-- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Content.Client/Examine/ExamineSystem.cs b/Content.Client/Examine/ExamineSystem.cs index 1be472b06d..45db4efa53 100644 --- a/Content.Client/Examine/ExamineSystem.cs +++ b/Content.Client/Examine/ExamineSystem.cs @@ -212,14 +212,16 @@ namespace Content.Client.Examine var vBox = new BoxContainer { Name = "ExaminePopupVbox", - Orientation = LayoutOrientation.Vertical + Orientation = LayoutOrientation.Vertical, + MaxWidth = _examineTooltipOpen.MaxWidth }; panel.AddChild(vBox); var hBox = new BoxContainer { Orientation = LayoutOrientation.Horizontal, - SeparationOverride = 5 + SeparationOverride = 5, + Margin = new Thickness(6, 0, 6, 0) }; vBox.AddChild(hBox); @@ -229,8 +231,7 @@ namespace Content.Client.Examine var spriteView = new SpriteView { OverrideDirection = Direction.South, - SetSize = new Vector2(32, 32), - Margin = new Thickness(2, 0, 2, 0), + SetSize = new Vector2(32, 32) }; spriteView.SetEntity(target); hBox.AddChild(spriteView); @@ -238,19 +239,17 @@ namespace Content.Client.Examine if (knowTarget) { - hBox.AddChild(new Label - { - Text = Identity.Name(target, EntityManager, player), - HorizontalExpand = true, - }); + var itemName = FormattedMessage.RemoveMarkup(Identity.Name(target, EntityManager, player)); + var labelMessage = FormattedMessage.FromMarkup($"[bold]{itemName}[/bold]"); + var label = new RichTextLabel(); + label.SetMessage(labelMessage); + hBox.AddChild(label); } else { - hBox.AddChild(new Label - { - Text = "???", - HorizontalExpand = true, - }); + var label = new RichTextLabel(); + label.SetMessage(FormattedMessage.FromMarkup("[bold]???[/bold]")); + hBox.AddChild(label); } panel.Measure(Vector2Helpers.Infinity); diff --git a/Content.Client/UserInterface/Systems/Inventory/Controls/ItemStatusPanel.xaml b/Content.Client/UserInterface/Systems/Inventory/Controls/ItemStatusPanel.xaml index 2c622b82b9..d469e6ced0 100644 --- a/Content.Client/UserInterface/Systems/Inventory/Controls/ItemStatusPanel.xaml +++ b/Content.Client/UserInterface/Systems/Inventory/Controls/ItemStatusPanel.xaml @@ -1,4 +1,4 @@ - - From 652de4d3213fcd222b180a994113c3b60899ed1a Mon Sep 17 00:00:00 2001 From: RiceMar1244 <138547931+RiceMar1244@users.noreply.github.com> Date: Sun, 31 Mar 2024 20:07:30 -0400 Subject: [PATCH 065/206] Adds two milk cartons to the BoozeOMat (#26635) --- .../Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml index 793121e2f2..91dc9f51cb 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml @@ -14,6 +14,7 @@ DrinkBlueCuracaoBottleFull: 2 DrinkCognacBottleFull: 4 DrinkColaBottleFull: 4 + DrinkMilkCarton: 2 DrinkCreamCarton: 5 DrinkGinBottleFull: 3 DrinkGildlagerBottleFull: 2 #if champagne gets less because its premium, then gildlager should match this and have two From e53bfed5899db7b7d840498a04df9b28644f8b4d Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 00:08:36 +0000 Subject: [PATCH 066/206] 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 29108f69f8..07fae067fe 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: themias - changes: - - message: Cyborgs can no longer spawn with the Wheelchair Bound or Muted trait - type: Fix - id: 5777 - time: '2024-01-23T20:18:01.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24459 - author: Nimfar11 changes: - message: Adds solo comfy benches in different colors. @@ -3802,3 +3795,10 @@ id: 6276 time: '2024-03-31T20:52:49.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26527 +- author: RiceMar + changes: + - message: Added milk cartons to the BoozeOMat vendor. Got milk? + type: Add + id: 6277 + time: '2024-04-01T00:07:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26635 From ce6b6fd4284d9dd576f0dc2b82152f4bf04bade2 Mon Sep 17 00:00:00 2001 From: UBlueberry <161545003+UBlueberry@users.noreply.github.com> Date: Sun, 31 Mar 2024 21:58:27 -0400 Subject: [PATCH 067/206] made the hover text less vague (sorry) (#26630) --- Resources/Locale/en-US/traits/traits.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index 98f0817f74..fa17dc23ec 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -34,7 +34,7 @@ trait-socialanxiety-name = Social Anxiety trait-socialanxiety-desc = You are anxious when you speak and stutter. trait-southern-name = Southern Drawl -trait-southern-desc = Are you wonderin' what this does? +trait-southern-desc = You have a different way of speakin'. trait-snoring-name = Snoring trait-snoring-desc = You will snore while sleeping. From adaaf0fefc989a827337796257c06b500f2ff496 Mon Sep 17 00:00:00 2001 From: Zealith-Gamer <61980908+Zealith-Gamer@users.noreply.github.com> Date: Sun, 31 Mar 2024 19:12:46 -0700 Subject: [PATCH 068/206] blacklisted throwing knifes from pneumatic cannon (#26628) --- Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index afe4644517..9cd1bb2940 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -263,6 +263,7 @@ tags: - CombatKnife - Knife + - CannonRestrict - type: Sprite sprite: Objects/Weapons/Melee/throwing_knife.rsi state: icon From 29c81bcc052ab53c5b10d9a5dbe1c761745e3d1e Mon Sep 17 00:00:00 2001 From: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Date: Mon, 1 Apr 2024 02:13:51 +0000 Subject: [PATCH 069/206] Fix radio jammer not blocking suit sensors. (#26632) As it turns out, they are not in fact on their own netid. They are actually just on wireless. The way I had tested my previous pr led to this mistake being made. I originally had the radio jammer block wireless as well, but decided to take out under the flase assumption that it suit sensors were actually on their own netid and did not require the ability to block all wireless packets at the last moment. --- Content.Server/Radio/EntitySystems/JammerSystem.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Content.Server/Radio/EntitySystems/JammerSystem.cs b/Content.Server/Radio/EntitySystems/JammerSystem.cs index 1258cc10fa..5a2a854017 100644 --- a/Content.Server/Radio/EntitySystems/JammerSystem.cs +++ b/Content.Server/Radio/EntitySystems/JammerSystem.cs @@ -54,14 +54,10 @@ public sealed class JammerSystem : EntitySystem if (activated) { EnsureComp(uid); - var stationId = _stationSystem.GetOwningStation(uid); - if (stationId != null && _singletonServerSystem.TryGetActiveServerAddress(stationId.Value, out var netId)) - { - EnsureComp(uid, out var jammingComp); - jammingComp.Range = comp.Range; - jammingComp.JammableNetworks.Add(netId); - Dirty(uid, jammingComp); - } + EnsureComp(uid, out var jammingComp); + jammingComp.Range = comp.Range; + jammingComp.JammableNetworks.Add(DeviceNetworkComponent.DeviceNetIdDefaults.Wireless.ToString()); + Dirty(uid, jammingComp); } else { From 311ad83f058a9dbc7e47c53217623c01cecffec6 Mon Sep 17 00:00:00 2001 From: hamurlik <75280571+hamurlik@users.noreply.github.com> Date: Mon, 1 Apr 2024 05:14:28 +0300 Subject: [PATCH 070/206] Fix dirt decals in reach not being cleanable (#26636) made all dirt decals cleanable Co-authored-by: hamurlik --- Resources/Maps/reach.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Resources/Maps/reach.yml b/Resources/Maps/reach.yml index f84136e9ec..9cc0887d17 100644 --- a/Resources/Maps/reach.yml +++ b/Resources/Maps/reach.yml @@ -529,12 +529,14 @@ entities: 7: 4,-14 259: 0,11 - node: + cleanable: True color: '#FFFFFFFF' id: DirtHeavy decals: 222: -18,-4 275: 1,13 - node: + cleanable: True color: '#FFFFFFFF' id: DirtLight decals: @@ -574,6 +576,7 @@ entities: 283: 0,8 284: 1,7 - node: + cleanable: True color: '#FFFFFFFF' id: DirtMedium decals: From 1d2bf51488f4080b3543db9152bfc881308b5e28 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 02:14:59 +0000 Subject: [PATCH 071/206] 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 07fae067fe..82536b2ad2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Nimfar11 - changes: - - message: Adds solo comfy benches in different colors. - type: Add - id: 5778 - time: '2024-01-23T22:15:48.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24203 - author: Tin-Man-Tim changes: - message: Attempting to microwave metal now can cause the microwave to spark and @@ -3802,3 +3795,10 @@ id: 6277 time: '2024-04-01T00:07:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26635 +- author: nikthechampiongr + changes: + - message: Radio jammers now actually block suit sensors. + type: Fix + id: 6278 + time: '2024-04-01T02:13:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26632 From c4f383c9ba3c99f02ebb9afe0e4aea9b663ca65b Mon Sep 17 00:00:00 2001 From: no <165581243+pissdemon@users.noreply.github.com> Date: Mon, 1 Apr 2024 04:25:36 +0200 Subject: [PATCH 072/206] Replace drill_hit.ogg and drill_use.ogg with better sounds (#26622) * Replace drill_hit.ogg and drill_use.ogg with better sounds * Fix attribution source for drill_hit.ogg * Update Resources/Audio/Items/attributions.yml Co-authored-by: Kara * Update Resources/Audio/Items/attributions.yml Co-authored-by: Kara --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: Kara --- Resources/Audio/Items/attributions.yml | 10 ++++++++++ Resources/Audio/Items/drill_hit.ogg | Bin 40866 -> 40108 bytes Resources/Audio/Items/drill_use.ogg | Bin 45403 -> 54931 bytes 3 files changed, 10 insertions(+) diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml index e63b678ef8..c6fea50bd2 100644 --- a/Resources/Audio/Items/attributions.yml +++ b/Resources/Audio/Items/attributions.yml @@ -107,3 +107,13 @@ license: "CC0-1.0" copyright: "Bhijn and Myr (github username deathride58)" source: "https://github.com/space-wizards/space-station-14/pull/23476" + +- files: ["drill_hit.ogg"] + license: "CC-BY-4.0" + copyright: "Created by vanilla with sounds from MinecraftGamerLR and stomachache on freesound.org" + source: "https://github.com/space-wizards/space-station-14/pull/26622" + +- files: ["drill_use.ogg"] + license: "CC0-1.0" + copyright: "Original sound by stomachache on freesound.org, processed by vanilla" + source: "https://freesound.org/s/262213/" diff --git a/Resources/Audio/Items/drill_hit.ogg b/Resources/Audio/Items/drill_hit.ogg index 0f8fa631aa1a0943d7cad0e33ccaa1d703d3b8ba..dcdfe5df3a1ca5c5ba0f1eb233bd5dbd5beb6efe 100644 GIT binary patch delta 38991 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 diff --git a/Resources/Audio/Items/drill_use.ogg b/Resources/Audio/Items/drill_use.ogg index 82f37cd35bb2c3e233211e0b99ebb0e09b3ea5ba..6cd027d3b27e27e8232eff2312b44d6374015a08 100644 GIT binary patch delta 53931 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 From 5bb0179c25ee34c02e6fd241c43672dc3f09ad72 Mon Sep 17 00:00:00 2001 From: Zealith-Gamer <61980908+Zealith-Gamer@users.noreply.github.com> Date: Sun, 31 Mar 2024 19:28:14 -0700 Subject: [PATCH 073/206] Gave Blast door access permissions (#26606) Added access reader to all blast doors. Added pre configured blast doors for engineering and science. --- .../Structures/Doors/Shutter/blast_door.yml | 1 + .../Doors/Shutter/blast_door_autolink.yml | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml index 97f3c1b9e3..0700a5a3e7 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door.yml @@ -4,6 +4,7 @@ name: blast door description: This one says 'BLAST DONGER'. components: + - type: AccessReader - type: Sprite sprite: Structures/Doors/Shutters/blastdoor.rsi layers: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door_autolink.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door_autolink.yml index 399760616c..3386703ec9 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door_autolink.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/blast_door_autolink.yml @@ -56,6 +56,8 @@ parent: BlastDoor suffix: Autolink, Bridge components: + - type: AccessReader + access: [["Command"]] - type: AutoLinkReceiver channel: Bridge @@ -64,9 +66,51 @@ parent: BlastDoorOpen suffix: Open, Autolink, Bridge components: + - type: AccessReader + access: [["Command"]] - type: AutoLinkReceiver channel: Bridge +- type: entity + id: BlastDoorEngineering + parent: BlastDoor + suffix: Autolink, Engineering + components: + - type: AccessReader + access: [["Command"], ["Engineering"]] + - type: AutoLinkReceiver + channel: Engineering + +- type: entity + id: BlastDoorEngineeringOpen + parent: BlastDoorOpen + suffix: Open, Autolink, Engineering + components: + - type: AccessReader + access: [["Command"], ["Engineering"]] + - type: AutoLinkReceiver + channel: Engineering + +- type: entity + id: BlastDoorScience + parent: BlastDoor + suffix: Autolink, Science + components: + - type: AccessReader + access: [["Command"], ["Research"]] + - type: AutoLinkReceiver + channel: Research + +- type: entity + id: BlastDoorScienceOpen + parent: BlastDoorOpen + suffix: Open, Autolink, Science + components: + - type: AccessReader + access: [["Command"], ["Research"]] + - type: AutoLinkReceiver + channel: Research + - type: entity id: BlastDoorWindows parent: BlastDoor From 29d7b73da72e066436933f869ff7adbee1d24f45 Mon Sep 17 00:00:00 2001 From: Flareguy <78941145+Flareguy@users.noreply.github.com> Date: Sun, 31 Mar 2024 22:23:59 -0500 Subject: [PATCH 074/206] Gives all wheeled objects low friction (#26601) * gives all wheeled objects friction * adjustments to sum stuff --- .../Objects/Specific/Janitorial/janitor.yml | 402 ------------------ .../Devices => Structures/Machines}/nuke.yml | 4 +- .../Piping/Atmospherics/portable.yml | 2 +- .../Power/Generation/portable_generator.yml | 11 +- .../Structures/Specific/Janitor/drain.yml | 62 +++ .../Structures/Specific/Janitor/janicart.yml | 324 ++++++++++++++ .../Structures/Storage/Crates/crates.yml | 2 +- .../Storage/Tanks/base_structuretanks.yml | 18 + .../Structures/Storage/Tanks/tanks.yml | 18 +- .../Entities/Structures/base_structure.yml | 8 + 10 files changed, 433 insertions(+), 418 deletions(-) rename Resources/Prototypes/Entities/{Objects/Devices => Structures/Machines}/nuke.yml (95%) create mode 100644 Resources/Prototypes/Entities/Structures/Specific/Janitor/drain.yml create mode 100644 Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index cad2d9a924..b192401c8b 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -87,123 +87,6 @@ - Mop - MopAdv -- type: entity - name: mop bucket - id: MopBucket - description: Holds water and the tears of the janitor. - components: - - type: Clickable - - type: Sprite - sprite: Objects/Specific/Janitorial/janitorial.rsi - noRot: true - layers: - - state: mopbucket - - state: mopbucket_water-1 - map: ["enum.SolutionContainerLayers.Fill"] - visible: false - drawdepth: Objects - - type: InteractionOutline - - type: SolutionContainerManager - solutions: - bucket: - maxVol: 600 - - type: Spillable - solution: bucket - spillDelay: 3.0 - - type: DrainableSolution - solution: bucket - - type: RefillableSolution - solution: bucket - - type: ExaminableSolution - solution: bucket - - type: Tag - tags: - - Wringer - - type: ItemMapper - mapLayers: - mopbucket_shark_blue: - whitelist: - tags: - - PlushieSharkBlue - mopbucket_shark_pink: - whitelist: - tags: - - PlushieSharkPink - mopbucket_shark_grey: - whitelist: - tags: - - PlushieSharkGrey - sprite: Objects/Fun/sharkplush.rsi - - type: Physics - bodyType: Dynamic - - type: Transform - noRot: true - - type: ItemSlots - slots: - shark_slot: - name: mop-bucket-slot-component-slot-name-shark - whitelist: - tags: - - PlushieSharkBlue - - PlushieSharkPink - - PlushieSharkGrey - priority: 3 # Higher than drinking priority - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeAabb - bounds: "-0.25,-0.40,0.25,0.25" - density: 60 - mask: - - MobMask - layer: - - MobLayer - - type: Pullable - - type: Drink - solution: bucket - - type: Appearance - - type: SolutionContainerVisuals - maxFillLevels: 3 - fillBaseName: mopbucket_water- - - type: ContainerContainer - containers: - storagebase: !type:Container - ents: [] - shark_slot: !type:ContainerSlot {} - - type: GuideHelp - guides: - - Janitorial - - type: Damageable - damageContainer: Inorganic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 70 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] - -- type: entity - name: mop bucket - id: MopBucketFull - parent: MopBucket - suffix: full - components: - - type: Sprite - layers: - - state: mopbucket - - state: mopbucket_water-3 - map: [ "enum.SolutionContainerLayers.Fill" ] - - type: SolutionContainerManager - solutions: - bucket: - maxVol: 600 - reagents: - - ReagentId: Water - Quantity: 600 - - type: entity name: wet floor sign id: WetFloorSign @@ -279,291 +162,6 @@ tags: # ignore "WhitelistChameleon" tag - WetFloorSign -- type: entity - name: janitorial trolley - id: JanitorialTrolley - parent: BaseStructureDynamic - description: This is the alpha and omega of sanitation. - components: - - type: Sprite - noRot: true - sprite: Objects/Specific/Janitorial/janitorial_cart.rsi - layers: - - state: cart - - state: cart_water-1 - map: ["enum.SolutionContainerLayers.Fill"] - visible: false - - type: Rotatable - - type: InteractionOutline - # Removing storage until OnInteractUsing logic resolved - #- type: Storage - # popup: false - # capacity: 80 - # blacklist: # there is exclusive item slots for that - # tags: - # - Mop - # - TrashBag - # - Bucket - - type: ItemSlots - slots: - mop_slot: - name: janitorial-trolley-slot-component-slot-name-mop - whitelist: - tags: - - Mop - insertOnInteract: false # or it conflicts with bucket logic - priority: 9 # Higher than bucket slot - plunger_slot: - name: janitorial-trolley-slot-component-slot-name-plunger - whitelist: - tags: - - Plunger - priority: 8 - wetfloorsign_slot4: - name: janitorial-trolley-slot-component-slot-name-sign - whitelist: - tags: - - WetFloorSign - priority: 7 - wetfloorsign_slot3: - name: janitorial-trolley-slot-component-slot-name-sign - whitelist: - tags: - - WetFloorSign - priority: 7 - wetfloorsign_slot2: - name: janitorial-trolley-slot-component-slot-name-sign - whitelist: - tags: - - WetFloorSign - priority: 7 - wetfloorsign_slot1: - name: janitorial-trolley-slot-component-slot-name-sign - whitelist: - tags: - - WetFloorSign - priority: 7 - lightreplacer_slot: - name: janitorial-trolley-slot-component-slot-name-lightreplacer - whitelist: - components: - - LightReplacer - priority: 6 - spraybottle_slot: - name: janitorial-trolley-slot-component-slot-name-spray - whitelist: - tags: - - Spray - insertOnInteract: false # or it conflicts with bucket logic - priority: 5 # Higher than bucket slot - bucket_slot: - name: janitorial-trolley-slot-component-slot-name-bucket - whitelist: - tags: - - Bucket - insertOnInteract: false # or it also conflicts with bucket logic - priority: 4 # Higher than trash bag slot - trashbag_slot: - name: janitorial-trolley-slot-component-slot-name-trashbag - whitelist: - tags: - - TrashBag - priority: 3 # Higher than drinking priority - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.3 - density: 250 - layer: - - MobLayer - mask: - - MobMask - - type: Spillable - solution: bucket - spillDelay: 3.0 - - type: SolutionContainerManager - solutions: - bucket: - maxVol: 800 - reagents: - - ReagentId: Water - Quantity: 600 # 3 quarters full at roundstart to make it more appealing - - type: DrainableSolution - solution: bucket - - type: RefillableSolution - solution: bucket - - type: ExaminableSolution - solution: bucket - - type: Tag - tags: - - Wringer - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Metallic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 400 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:EmptyAllContainersBehaviour - - !type:DoActsBehavior - acts: ["Destruction"] - - !type:PlaySoundBehavior - sound: - collection: MetalBreak - - type: ItemMapper - mapLayers: - cart_plunger: - whitelist: - tags: - - Plunger - cart_mop: - whitelist: - tags: - - MopBasic - cart_advmop: - whitelist: - tags: - - MopAdv - cart_garbage: - whitelist: - tags: - - TrashBag - cart_replacer: - whitelist: - components: - - LightReplacer - cart_spray: - whitelist: - tags: - - Spray - cart_sign1: # this is like stack of floor signs - minCount: 1 - whitelist: - tags: - - WetFloorSign - cart_sign2: - minCount: 2 - whitelist: - tags: - - WetFloorSign - cart_sign3: - minCount: 3 - whitelist: - tags: - - WetFloorSign - cart_sign4: - minCount: 4 - whitelist: - tags: - - WetFloorSign - cart_bucket: - whitelist: - tags: - - Bucket - sprite: Objects/Specific/Janitorial/janitorial_cart.rsi - - type: Appearance - - type: SolutionContainerVisuals - maxFillLevels: 3 - fillBaseName: cart_water- - - type: UserInterface - interfaces: - - key: enum.StorageUiKey.Key - type: StorageBoundUserInterface - - type: Drink - solution: bucket - - type: ContainerContainer - containers: - storagebase: !type:Container - ents: [] - mop_slot: !type:ContainerSlot {} - trashbag_slot: !type:ContainerSlot {} - bucket_slot: !type:ContainerSlot {} - plunger_slot: !type:ContainerSlot {} - wetfloorsign_slot4: !type:ContainerSlot {} - wetfloorsign_slot3: !type:ContainerSlot {} - wetfloorsign_slot2: !type:ContainerSlot {} - wetfloorsign_slot1: !type:ContainerSlot {} - lightreplacer_slot: !type:ContainerSlot {} - spraybottle_slot: !type:ContainerSlot {} - - type: GuideHelp - guides: - - Janitorial - - type: TileFrictionModifier - modifier: 0.4 # makes it slide - -- type: entity - id: FloorDrain - name: drain - description: Drains puddles around it. Useful for dumping mop buckets or keeping certain rooms clean. - placement: - mode: SnapgridCenter - components: - - type: Sprite - drawdepth: FloorObjects - sprite: Objects/Specific/Janitorial/drain.rsi - layers: - - state: icon - - map: [ "enum.SolutionContainerLayers.Fill" ] - state: fill-1 - visible: false - - type: InteractionOutline - - type: Clickable - - type: Transform - anchored: true - - type: Physics - bodyType: Static - canCollide: false - - type: AmbientSound - enabled: false - volume: -8 - range: 8 - sound: - path: /Audio/Ambience/Objects/drain.ogg - - type: Drain - - type: DumpableSolution - solution: drainBuffer - - type: Appearance - - type: SolutionContainerVisuals - maxFillLevels: 1 - fillBaseName: fill- - solutionName: drainBuffer - - type: SolutionContainerManager - solutions: - drainBuffer: - maxVol: 1000 - - type: DrainableSolution - solution: drainBuffer - - type: Damageable - damageContainer: Inorganic - damageModifierSet: Metallic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 100 - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - !type:PlaySoundBehavior - sound: - collection: MetalBreak - - type: entity name: plunger id: Plunger diff --git a/Resources/Prototypes/Entities/Objects/Devices/nuke.yml b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml similarity index 95% rename from Resources/Prototypes/Entities/Objects/Devices/nuke.yml rename to Resources/Prototypes/Entities/Structures/Machines/nuke.yml index 811210d429..f37c42e474 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/nuke.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/nuke.yml @@ -1,5 +1,5 @@ - type: entity - parent: BaseStructure + parent: [BaseStructure, StructureWheeled] id: NuclearBomb name: nuclear fission explosive description: You probably shouldn't stick around to see if this is armed. @@ -49,7 +49,7 @@ shape: !type:PhysShapeCircle radius: 0.45 - density: 80 #It has wheels and bluespace tech to make it lighter. + density: 255 # Has "bluespace technology" to make it lighter, whatever that means. Don't mind the fact that this is lighter then a high capacity fuel tank. mask: - MachineMask layer: diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml index 0e2a5f6fe5..316c403d7a 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml @@ -1,6 +1,6 @@ - type: entity id: PortableScrubber - parent: [BaseMachinePowered, ConstructibleMachine] + parent: [BaseMachinePowered, ConstructibleMachine, StructureWheeled] name: portable scrubber description: It scrubs, portably! components: diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml index b606c01f1d..0c8afc87a4 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml @@ -6,7 +6,7 @@ - type: entity abstract: true id: PortableGeneratorBase - parent: [ BaseMachine, ConstructibleMachine ] + parent: [ BaseMachine, ConstructibleMachine, StructureWheeled] components: # Basic properties - type: Transform @@ -27,8 +27,8 @@ shape: !type:PhysShapeAabb bounds: "-0.40,-0.40,0.40,0.40" - # It has wheels - density: 45 + # Despite the heavy weight, it has wheels, so it's still fairly portable. + density: 155 mask: - MachineMask layer: @@ -259,8 +259,7 @@ shape: !type:PhysShapeAabb bounds: "-0.30,-0.30,0.30,0.30" - # It has wheels - density: 30 + density: 80 mask: - MachineMask layer: @@ -357,4 +356,4 @@ damage: 75 behaviors: - !type:SolutionExplosionBehavior - solution: tank + solution: tank \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/drain.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/drain.yml new file mode 100644 index 0000000000..e0247001f2 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/drain.yml @@ -0,0 +1,62 @@ +- type: entity + id: FloorDrain + name: drain + description: Drains puddles around it. Useful for dumping mop buckets or keeping certain rooms clean. + placement: + mode: SnapgridCenter + components: + - type: Sprite + drawdepth: FloorObjects + sprite: Objects/Specific/Janitorial/drain.rsi + layers: + - state: icon + - map: [ "enum.SolutionContainerLayers.Fill" ] + state: fill-1 + visible: false + - type: InteractionOutline + - type: Clickable + - type: Transform + anchored: true + - type: Physics + bodyType: Static + canCollide: false + - type: AmbientSound + enabled: false + volume: -8 + range: 8 + sound: + path: /Audio/Ambience/Objects/drain.ogg + - type: Drain + - type: DumpableSolution + solution: drainBuffer + - type: Appearance + - type: SolutionContainerVisuals + maxFillLevels: 1 + fillBaseName: fill- + solutionName: drainBuffer + - type: SolutionContainerManager + solutions: + drainBuffer: + maxVol: 1000 + - type: DrainableSolution + solution: drainBuffer + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml new file mode 100644 index 0000000000..bdbff1b504 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -0,0 +1,324 @@ +# Mop Bucket +- type: entity + name: mop bucket + id: MopBucket + parent: [BaseStructureDynamic, StructureWheeled] + description: Holds water and the tears of the janitor. + components: + - type: Clickable + - type: Sprite + sprite: Objects/Specific/Janitorial/janitorial.rsi + noRot: true + layers: + - state: mopbucket + - state: mopbucket_water-1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + drawdepth: Objects + - type: InteractionOutline + - type: SolutionContainerManager + solutions: + bucket: + maxVol: 600 + - type: Spillable + solution: bucket + spillDelay: 3.0 + - type: DrainableSolution + solution: bucket + - type: RefillableSolution + solution: bucket + - type: ExaminableSolution + solution: bucket + - type: Tag + tags: + - Wringer + - type: ItemMapper + mapLayers: + mopbucket_shark_blue: + whitelist: + tags: + - PlushieSharkBlue + mopbucket_shark_pink: + whitelist: + tags: + - PlushieSharkPink + mopbucket_shark_grey: + whitelist: + tags: + - PlushieSharkGrey + sprite: Objects/Fun/sharkplush.rsi + - type: Transform + noRot: true + - type: ItemSlots + slots: + shark_slot: + name: mop-bucket-slot-component-slot-name-shark + whitelist: + tags: + - PlushieSharkBlue + - PlushieSharkPink + - PlushieSharkGrey + priority: 3 # Higher than drinking priority + - type: Drink + solution: bucket + - type: SolutionContainerVisuals + maxFillLevels: 3 + fillBaseName: mopbucket_water- + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + shark_slot: !type:ContainerSlot {} + - type: GuideHelp + guides: + - Janitorial + - type: Damageable + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 70 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + +- type: entity + name: mop bucket + id: MopBucketFull + parent: MopBucket + suffix: full + components: + - type: Sprite + layers: + - state: mopbucket + - state: mopbucket_water-3 + map: [ "enum.SolutionContainerLayers.Fill" ] + - type: SolutionContainerManager + solutions: + bucket: + maxVol: 600 + reagents: + - ReagentId: Water + Quantity: 600 + +# Janicart +- type: entity + name: janitorial trolley + id: JanitorialTrolley + parent: [BaseStructureDynamic, StructureWheeled] + description: This is the alpha and omega of sanitation. + components: + - type: Sprite + noRot: true + sprite: Objects/Specific/Janitorial/janitorial_cart.rsi + layers: + - state: cart + - state: cart_water-1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + - type: Rotatable + - type: InteractionOutline + # Removing storage until OnInteractUsing logic resolved + #- type: Storage + # popup: false + # capacity: 80 + # blacklist: # there is exclusive item slots for that + # tags: + # - Mop + # - TrashBag + # - Bucket + - type: ItemSlots + slots: + mop_slot: + name: janitorial-trolley-slot-component-slot-name-mop + whitelist: + tags: + - Mop + insertOnInteract: false # or it conflicts with bucket logic + priority: 9 # Higher than bucket slot + plunger_slot: + name: janitorial-trolley-slot-component-slot-name-plunger + whitelist: + tags: + - Plunger + priority: 8 + wetfloorsign_slot4: + name: janitorial-trolley-slot-component-slot-name-sign + whitelist: + tags: + - WetFloorSign + priority: 7 + wetfloorsign_slot3: + name: janitorial-trolley-slot-component-slot-name-sign + whitelist: + tags: + - WetFloorSign + priority: 7 + wetfloorsign_slot2: + name: janitorial-trolley-slot-component-slot-name-sign + whitelist: + tags: + - WetFloorSign + priority: 7 + wetfloorsign_slot1: + name: janitorial-trolley-slot-component-slot-name-sign + whitelist: + tags: + - WetFloorSign + priority: 7 + lightreplacer_slot: + name: janitorial-trolley-slot-component-slot-name-lightreplacer + whitelist: + components: + - LightReplacer + priority: 6 + spraybottle_slot: + name: janitorial-trolley-slot-component-slot-name-spray + whitelist: + tags: + - Spray + insertOnInteract: false # or it conflicts with bucket logic + priority: 5 # Higher than bucket slot + bucket_slot: + name: janitorial-trolley-slot-component-slot-name-bucket + whitelist: + tags: + - Bucket + insertOnInteract: false # or it also conflicts with bucket logic + priority: 4 # Higher than trash bag slot + trashbag_slot: + name: janitorial-trolley-slot-component-slot-name-trashbag + whitelist: + tags: + - TrashBag + priority: 3 # Higher than drinking priority + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.3 + density: 250 + layer: + - MobLayer + mask: + - MobMask + - type: Spillable + solution: bucket + spillDelay: 3.0 + - type: SolutionContainerManager + solutions: + bucket: + maxVol: 800 + reagents: + - ReagentId: Water + Quantity: 600 # 3 quarters full at roundstart to make it more appealing + - type: DrainableSolution + solution: bucket + - type: RefillableSolution + solution: bucket + - type: ExaminableSolution + solution: bucket + - type: Tag + tags: + - Wringer + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 400 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:EmptyAllContainersBehaviour + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - type: ItemMapper + mapLayers: + cart_plunger: + whitelist: + tags: + - Plunger + cart_mop: + whitelist: + tags: + - MopBasic + cart_advmop: + whitelist: + tags: + - MopAdv + cart_garbage: + whitelist: + tags: + - TrashBag + cart_replacer: + whitelist: + components: + - LightReplacer + cart_spray: + whitelist: + tags: + - Spray + cart_sign1: # this is like stack of floor signs + minCount: 1 + whitelist: + tags: + - WetFloorSign + cart_sign2: + minCount: 2 + whitelist: + tags: + - WetFloorSign + cart_sign3: + minCount: 3 + whitelist: + tags: + - WetFloorSign + cart_sign4: + minCount: 4 + whitelist: + tags: + - WetFloorSign + cart_bucket: + whitelist: + tags: + - Bucket + sprite: Objects/Specific/Janitorial/janitorial_cart.rsi + - type: Appearance + - type: SolutionContainerVisuals + maxFillLevels: 3 + fillBaseName: cart_water- + - type: UserInterface + interfaces: + - key: enum.StorageUiKey.Key + type: StorageBoundUserInterface + - type: Drink + solution: bucket + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + mop_slot: !type:ContainerSlot {} + trashbag_slot: !type:ContainerSlot {} + bucket_slot: !type:ContainerSlot {} + plunger_slot: !type:ContainerSlot {} + wetfloorsign_slot4: !type:ContainerSlot {} + wetfloorsign_slot3: !type:ContainerSlot {} + wetfloorsign_slot2: !type:ContainerSlot {} + wetfloorsign_slot1: !type:ContainerSlot {} + lightreplacer_slot: !type:ContainerSlot {} + spraybottle_slot: !type:ContainerSlot {} + - type: GuideHelp + guides: + - Janitorial diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml index 24bcf7cf7a..e55612d2c4 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml @@ -563,7 +563,7 @@ sprite: Structures/Storage/Crates/syndicate.rsi - type: entity - parent: CrateBaseWeldable + parent: [StructureWheeled, CrateBaseWeldable] id: CrateTrashCart name: trash cart components: diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml index 238efaf68d..7b56e6d36b 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/base_structuretanks.yml @@ -65,3 +65,21 @@ - type: ReagentTank - type: Transform noRot: true + +# For highcap tanks +- type: entity + id: StorageTankBig + parent: StorageTank + abstract: true + components: + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.4" + density: 455 #very heavy, they store 10k units of reagents after all. + mask: + - MachineMask + layer: + - WallLayer \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml index a644c7afa1..e177cc72b1 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml @@ -2,7 +2,7 @@ - type: entity id: WeldingFuelTank - parent: StorageTank + parent: [StorageTank, StructureWheeled] name: fuel tank description: A fuel tank. It's used to store high amounts of fuel. suffix: Empty @@ -48,7 +48,7 @@ Quantity: 1500 - type: entity - parent: WeldingFuelTank + parent: [StorageTankBig, WeldingFuelTank] # StorageTankBig must come first, or else the desnity won't get inherited. id: WeldingFuelTankHighCapacity name: high-capacity fuel tank description: A highly pressurized fuel tank made to hold gargantuan amounts of welding fuel. @@ -81,7 +81,7 @@ - type: entity id: WaterTank - parent: StorageTank + parent: [StorageTank, StructureWheeled] name: water tank description: A water tank. It's used to store high amounts of water. suffix: Empty @@ -115,7 +115,7 @@ Quantity: 1500 - type: entity - parent: WaterTankFull + parent: StorageTank id: WaterCooler name: water cooler description: Seems like a good place to stand and waste time. It has a stock of paper cups on the side. @@ -157,14 +157,20 @@ - FitsInDispenser tags: - Trash + - type: ExaminableSolution + solution: tank + - type: StaticPrice + price: 500 - type: entity - parent: StorageTank + parent: [StorageTankBig, WaterTank] id: WaterTankHighCapacity name: high-capacity water tank description: A highly pressurized water tank made to hold gargantuan amounts of water. suffix: Full components: + - type: StaticPrice + price: 2500 - type: Sprite sprite: Structures/Storage/tanks.rsi layers: @@ -192,7 +198,7 @@ - type: entity id: GenericTank - parent: StorageTank + parent: [StorageTank, StructureWheeled] suffix: Empty components: - type: StaticPrice diff --git a/Resources/Prototypes/Entities/Structures/base_structure.yml b/Resources/Prototypes/Entities/Structures/base_structure.yml index b5356674aa..71971a6624 100644 --- a/Resources/Prototypes/Entities/Structures/base_structure.yml +++ b/Resources/Prototypes/Entities/Structures/base_structure.yml @@ -56,5 +56,13 @@ - LowImpassable - type: Anchorable +# For use with yaml composition, so that all wheeled structures can easily be changed. +- type: entity + id: StructureWheeled + abstract: true + components: + - type: TileFrictionModifier + modifier: 0.4 + - type: Tag id: Structure From d8d4feec3813c2667dd33e084da916d394977527 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 03:25:06 +0000 Subject: [PATCH 075/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 82536b2ad2..fe4288712a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Tin-Man-Tim - changes: - - message: Attempting to microwave metal now can cause the microwave to spark and - explode. - type: Tweak - id: 5779 - time: '2024-01-23T22:59:10.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/23887 - author: DrMelon changes: - message: The Microwave works as intended after power outages again. @@ -3802,3 +3794,13 @@ id: 6278 time: '2024-04-01T02:13:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26632 +- author: Flareguy + changes: + - message: All wheeled objects now have lower friction. Portable items, like fuel + canisters & portable scrubbers, should now be easier to carry around. + type: Tweak + - message: High-capacity reagent tanks are now much heavier. + type: Tweak + id: 6279 + time: '2024-04-01T03:23:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26601 From d0d12760a88f21368a19e9b523686b304f331a81 Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Sun, 31 Mar 2024 23:39:34 -0400 Subject: [PATCH 076/206] Combine solution injection systems; Fix embeddable injectors (#26268) * Combine injection systems * Update Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- .../BaseSolutionInjectOnEventComponent.cs | 60 +++++++ .../MeleeChemicalInjectorComponent.cs | 37 +---- .../SolutionInjectOnCollideComponent.cs | 28 ---- .../SolutionInjectOnEmbedComponent.cs | 8 + .../SolutionInjectOnProjectileHitComponent.cs | 8 + .../SolutionInjectOnCollideSystem.cs | 49 ------ .../SolutionInjectOnEventSystem.cs | 147 ++++++++++++++++++ .../Weapons/Melee/MeleeWeaponSystem.cs | 68 +------- .../Prototypes/Entities/Objects/Fun/darts.yml | 9 +- .../Guns/Ammunition/Projectiles/shotgun.yml | 8 +- .../Weapons/Guns/Projectiles/arrows.yml | 4 +- .../Entities/Objects/Weapons/Melee/spear.yml | 5 +- 12 files changed, 249 insertions(+), 182 deletions(-) create mode 100644 Content.Server/Chemistry/Components/BaseSolutionInjectOnEventComponent.cs delete mode 100644 Content.Server/Chemistry/Components/SolutionInjectOnCollideComponent.cs create mode 100644 Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs create mode 100644 Content.Server/Chemistry/Components/SolutionInjectOnProjectileHitComponent.cs delete mode 100644 Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs create mode 100644 Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs diff --git a/Content.Server/Chemistry/Components/BaseSolutionInjectOnEventComponent.cs b/Content.Server/Chemistry/Components/BaseSolutionInjectOnEventComponent.cs new file mode 100644 index 0000000000..708c1ef005 --- /dev/null +++ b/Content.Server/Chemistry/Components/BaseSolutionInjectOnEventComponent.cs @@ -0,0 +1,60 @@ +using Content.Shared.FixedPoint; +using Content.Shared.Inventory; + +namespace Content.Server.Chemistry.Components; + +///

+/// Base class for components that inject a solution into a target's bloodstream in response to an event. +/// +public abstract partial class BaseSolutionInjectOnEventComponent : Component +{ + /// + /// How much solution to remove from this entity per target when transferring. + /// + /// + /// Note that this amount is per target, so the total amount removed will be + /// multiplied by the number of targets hit. + /// + [DataField] + public FixedPoint2 TransferAmount = FixedPoint2.New(1); + + [ViewVariables(VVAccess.ReadWrite)] + public float TransferEfficiency { get => _transferEfficiency; set => _transferEfficiency = Math.Clamp(value, 0, 1); } + + /// + /// Proportion of the that will actually be injected + /// into the target's bloodstream. The rest is lost. + /// 0 means none of the transferred solution will enter the bloodstream. + /// 1 means the entire amount will enter the bloodstream. + /// + [DataField("transferEfficiency")] + private float _transferEfficiency = 1f; + + /// + /// Solution to inject from. + /// + [DataField] + public string Solution = "default"; + + /// + /// Whether this will inject through hardsuits or not. + /// + [DataField] + public bool PierceArmor = true; + + /// + /// Contents of popup message to display to the attacker when injection + /// fails due to the target wearing a hardsuit. + /// + /// + /// Passed values: $weapon and $target + /// + [DataField] + public LocId BlockedByHardsuitPopupMessage = "melee-inject-failed-hardsuit"; + + /// + /// If anything covers any of these slots then the injection fails. + /// + [DataField] + public SlotFlags BlockSlots = SlotFlags.NONE; +} diff --git a/Content.Server/Chemistry/Components/MeleeChemicalInjectorComponent.cs b/Content.Server/Chemistry/Components/MeleeChemicalInjectorComponent.cs index 6b6ce830a9..6b64b82f78 100644 --- a/Content.Server/Chemistry/Components/MeleeChemicalInjectorComponent.cs +++ b/Content.Server/Chemistry/Components/MeleeChemicalInjectorComponent.cs @@ -1,31 +1,8 @@ -using Content.Shared.FixedPoint; +namespace Content.Server.Chemistry.Components; -namespace Content.Server.Chemistry.Components -{ - [RegisterComponent] - public sealed partial class MeleeChemicalInjectorComponent : Component - { - [ViewVariables(VVAccess.ReadWrite)] - [DataField("transferAmount")] - public FixedPoint2 TransferAmount { get; set; } = FixedPoint2.New(1); - - [ViewVariables(VVAccess.ReadWrite)] - public float TransferEfficiency { get => _transferEfficiency; set => _transferEfficiency = Math.Clamp(value, 0, 1); } - - [DataField("transferEfficiency")] - private float _transferEfficiency = 1f; - - /// - /// Whether this will inject through hardsuits or not. - /// - [DataField("pierceArmor"), ViewVariables(VVAccess.ReadWrite)] - public bool PierceArmor = true; - - /// - /// Solution to inject from. - /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("solution")] - public string Solution { get; set; } = "default"; - } -} +/// +/// Used for melee weapon entities that should try to inject a +/// contained solution into a target when used to hit it. +/// +[RegisterComponent] +public sealed partial class MeleeChemicalInjectorComponent : BaseSolutionInjectOnEventComponent { } diff --git a/Content.Server/Chemistry/Components/SolutionInjectOnCollideComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectOnCollideComponent.cs deleted file mode 100644 index 76bb5294bc..0000000000 --- a/Content.Server/Chemistry/Components/SolutionInjectOnCollideComponent.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Content.Shared.FixedPoint; -using Content.Shared.Inventory; -using Content.Shared.Projectiles; - -namespace Content.Server.Chemistry.Components; - -/// -/// On colliding with an entity that has a bloodstream will dump its solution onto them. -/// -[RegisterComponent] -public sealed partial class SolutionInjectOnCollideComponent : Component -{ - [ViewVariables(VVAccess.ReadWrite)] - [DataField("transferAmount")] - public FixedPoint2 TransferAmount = FixedPoint2.New(1); - - [ViewVariables(VVAccess.ReadWrite)] - public float TransferEfficiency { get => _transferEfficiency; set => _transferEfficiency = Math.Clamp(value, 0, 1); } - - [DataField("transferEfficiency")] - private float _transferEfficiency = 1f; - - /// - /// If anything covers any of these slots then the injection fails. - /// - [DataField("blockSlots"), ViewVariables(VVAccess.ReadWrite)] - public SlotFlags BlockSlots = SlotFlags.MASK; -} diff --git a/Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs new file mode 100644 index 0000000000..241da38045 --- /dev/null +++ b/Content.Server/Chemistry/Components/SolutionInjectOnEmbedComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Server.Chemistry.Components; + +/// +/// Used for embeddable entities that should try to inject a +/// contained solution into a target when they become embedded in it. +/// +[RegisterComponent] +public sealed partial class SolutionInjectOnEmbedComponent : BaseSolutionInjectOnEventComponent { } diff --git a/Content.Server/Chemistry/Components/SolutionInjectOnProjectileHitComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectOnProjectileHitComponent.cs new file mode 100644 index 0000000000..395a075298 --- /dev/null +++ b/Content.Server/Chemistry/Components/SolutionInjectOnProjectileHitComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Server.Chemistry.Components; + +/// +/// Used for projectile entities that should try to inject a +/// contained solution into a target when they hit it. +/// +[RegisterComponent] +public sealed partial class SolutionInjectOnProjectileHitComponent : BaseSolutionInjectOnEventComponent { } diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs deleted file mode 100644 index fb84aca3e4..0000000000 --- a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnCollideSystem.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Content.Server.Body.Components; -using Content.Server.Body.Systems; -using Content.Server.Chemistry.Components; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Shared.Inventory; -using Content.Shared.Projectiles; - -namespace Content.Server.Chemistry.EntitySystems; - -public sealed class SolutionInjectOnCollideSystem : EntitySystem -{ - [Dependency] private readonly SolutionContainerSystem _solutionContainersSystem = default!; - [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; - [Dependency] private readonly InventorySystem _inventorySystem = default!; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent(HandleInjection); - } - - private void HandleInjection(Entity ent, ref ProjectileHitEvent args) - { - var component = ent.Comp; - var target = args.Target; - - if (!TryComp(target, out var bloodstream) || - !_solutionContainersSystem.TryGetInjectableSolution(ent.Owner, out var solution, out _)) - { - return; - } - - if (component.BlockSlots != 0x0) - { - var containerEnumerator = _inventorySystem.GetSlotEnumerator(target, component.BlockSlots); - - // TODO add a helper method for this? - if (containerEnumerator.MoveNext(out _)) - return; - } - - var solRemoved = _solutionContainersSystem.SplitSolution(solution.Value, component.TransferAmount); - var solRemovedVol = solRemoved.Volume; - - var solToInject = solRemoved.SplitSolution(solRemovedVol * component.TransferEfficiency); - - _bloodstreamSystem.TryAddToChemicals(target, solToInject, bloodstream); - } -} diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs new file mode 100644 index 0000000000..8ba36e3a29 --- /dev/null +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs @@ -0,0 +1,147 @@ +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Server.Chemistry.Components; +using Content.Server.Chemistry.Containers.EntitySystems; +using Content.Shared.Inventory; +using Content.Shared.Popups; +using Content.Shared.Projectiles; +using Content.Shared.Tag; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Server.Chemistry.EntitySystems; + +/// +/// System for handling the different inheritors of . +/// Subscribes to relevent events and performs solution injections when they are raised. +/// +public sealed class SolutionInjectOnCollideSystem : EntitySystem +{ + [Dependency] private readonly BloodstreamSystem _bloodstream = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly TagSystem _tag = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(HandleProjectileHit); + SubscribeLocalEvent(HandleEmbed); + SubscribeLocalEvent(HandleMeleeHit); + } + + private void HandleProjectileHit(Entity entity, ref ProjectileHitEvent args) + { + DoInjection((entity.Owner, entity.Comp), args.Target, args.Shooter); + } + + private void HandleEmbed(Entity entity, ref EmbedEvent args) + { + DoInjection((entity.Owner, entity.Comp), args.Embedded, args.Shooter); + } + + private void HandleMeleeHit(Entity entity, ref MeleeHitEvent args) + { + // MeleeHitEvent is weird, so we have to filter to make sure we actually + // hit something and aren't just examining the weapon. + if (args.IsHit) + TryInjectTargets((entity.Owner, entity.Comp), args.HitEntities, args.User); + } + + private void DoInjection(Entity injectorEntity, EntityUid target, EntityUid? source = null) + { + TryInjectTargets(injectorEntity, [target], source); + } + + /// + /// Filters for valid targets and tries to inject a portion of into + /// each valid target's bloodstream. + /// + /// + /// Targets are invalid if any of the following are true: + /// + /// The target does not have a bloodstream. + /// is false and the target is wearing a hardsuit. + /// is not NONE and the target has an item equipped in any of the specified slots. + /// + /// + /// true if at least one target was successfully injected, otherwise false + private bool TryInjectTargets(Entity injector, IReadOnlyList targets, EntityUid? source = null) + { + // Make sure we have at least one target + if (targets.Count == 0) + return false; + + // Get the solution to inject + if (!_solutionContainer.TryGetSolution(injector.Owner, injector.Comp.Solution, out var injectorSolution)) + return false; + + // Build a list of bloodstreams to inject into + var targetBloodstreams = new ValueList>(); + foreach (var target in targets) + { + if (Deleted(target)) + continue; + + // Yuck, this is way to hardcodey for my tastes + // TODO blocking injection with a hardsuit should probably done with a cancellable event or something + if (!injector.Comp.PierceArmor && _inventory.TryGetSlotEntity(target, "outerClothing", out var suit) && _tag.HasTag(suit.Value, "Hardsuit")) + { + // Only show popup to attacker + if (source != null) + _popup.PopupEntity(Loc.GetString(injector.Comp.BlockedByHardsuitPopupMessage, ("weapon", injector.Owner), ("target", target)), target, source.Value, PopupType.SmallCaution); + + continue; + } + + // Check if the target has anything equipped in a slot that would block injection + if (injector.Comp.BlockSlots != SlotFlags.NONE) + { + var blocked = false; + var containerEnumerator = _inventory.GetSlotEnumerator(target, injector.Comp.BlockSlots); + while (containerEnumerator.MoveNext(out var container)) + { + if (container.ContainedEntity != null) + { + blocked = true; + break; + } + } + if (blocked) + continue; + } + + // Make sure the target has a bloodstream + if (!TryComp(target, out var bloodstream)) + continue; + + + // Checks passed; add this target's bloodstream to the list + targetBloodstreams.Add((target, bloodstream)); + } + + // Make sure we got at least one bloodstream + if (targetBloodstreams.Count == 0) + return false; + + // Extract total needed solution from the injector + var removedSolution = _solutionContainer.SplitSolution(injectorSolution.Value, injector.Comp.TransferAmount * targetBloodstreams.Count); + // Adjust solution amount based on transfer efficiency + var solutionToInject = removedSolution.SplitSolution(removedSolution.Volume * injector.Comp.TransferEfficiency); + // Calculate how much of the adjusted solution each target will get + var volumePerBloodstream = solutionToInject.Volume * (1f / targetBloodstreams.Count); + + var anySuccess = false; + foreach (var targetBloodstream in targetBloodstreams) + { + // Take our portion of the adjusted solution for this target + var individualInjection = solutionToInject.SplitSolution(volumePerBloodstream); + // Inject our portion into the target's bloodstream + if (_bloodstream.TryAddToChemicals(targetBloodstream.Owner, individualInjection, targetBloodstream.Comp)) + anySuccess = true; + } + + // Huzzah! + return anySuccess; + } +} diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index ef4b161477..2612e99ec9 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -1,8 +1,4 @@ -using Content.Server.Body.Components; -using Content.Server.Body.Systems; using Content.Server.Chat.Systems; -using Content.Server.Chemistry.Components; -using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.CombatMode.Disarm; using Content.Server.Movement.Systems; using Content.Shared.Actions.Events; @@ -14,12 +10,10 @@ using Content.Shared.Database; using Content.Shared.Effects; using Content.Shared.Hands.Components; using Content.Shared.IdentityManagement; -using Content.Shared.Inventory; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; using Content.Shared.Speech.Components; using Content.Shared.StatusEffect; -using Content.Shared.Tag; using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Audio; @@ -34,22 +28,17 @@ namespace Content.Server.Weapons.Melee; public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem { - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly BloodstreamSystem _bloodstream = default!; - [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly DamageExamineSystem _damageExamine = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly LagCompensationSystem _lag = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; - [Dependency] private readonly SolutionContainerSystem _solutions = default!; - [Dependency] private readonly TagSystem _tag = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly DamageExamineSystem _damageExamine = default!; + [Dependency] private readonly LagCompensationSystem _lag = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnChemicalInjectorHit); SubscribeLocalEvent(OnSpeechHit); SubscribeLocalEvent(OnMeleeExamineDamage); } @@ -263,47 +252,4 @@ public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem } } - - private void OnChemicalInjectorHit(Entity entity, ref MeleeHitEvent args) - { - if (!args.IsHit || - !args.HitEntities.Any() || - !_solutions.TryGetSolution(entity.Owner, entity.Comp.Solution, out var solutionContainer)) - { - return; - } - - var hitBloodstreams = new List<(EntityUid Entity, BloodstreamComponent Component)>(); - var bloodQuery = GetEntityQuery(); - - foreach (var hit in args.HitEntities) - { - if (Deleted(hit)) - continue; - - // prevent deathnettles injecting through hardsuits - if (!entity.Comp.PierceArmor && _inventory.TryGetSlotEntity(hit, "outerClothing", out var suit) && _tag.HasTag(suit.Value, "Hardsuit")) - { - PopupSystem.PopupEntity(Loc.GetString("melee-inject-failed-hardsuit", ("weapon", entity.Owner)), args.User, args.User, PopupType.SmallCaution); - continue; - } - - if (bloodQuery.TryGetComponent(hit, out var bloodstream)) - hitBloodstreams.Add((hit, bloodstream)); - } - - if (!hitBloodstreams.Any()) - return; - - var removedSolution = _solutions.SplitSolution(solutionContainer.Value, entity.Comp.TransferAmount * hitBloodstreams.Count); - var removedVol = removedSolution.Volume; - var solutionToInject = removedSolution.SplitSolution(removedVol * entity.Comp.TransferEfficiency); - var volPerBloodstream = solutionToInject.Volume * (1 / hitBloodstreams.Count); - - foreach (var (ent, bloodstream) in hitBloodstreams) - { - var individualInjection = solutionToInject.SplitSolution(volPerBloodstream); - _bloodstream.TryAddToChemicals(ent, individualInjection, bloodstream); - } - } } diff --git a/Resources/Prototypes/Entities/Objects/Fun/darts.yml b/Resources/Prototypes/Entities/Objects/Fun/darts.yml index 391823dc52..4c7ae68420 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/darts.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/darts.yml @@ -53,10 +53,10 @@ solution: melee - type: InjectableSolution solution: melee - - type: SolutionInjectOnCollide + - type: SolutionInjectOnEmbed transferAmount: 2 + solution: melee blockSlots: OUTERCLOTHING - fixtureId: "throw-fixture" - type: SolutionTransfer maxTransferAmount: 2 - type: Damageable @@ -124,10 +124,9 @@ solutions: melee: maxVol: 7 - - type: SolutionInjectOnCollide + - type: SolutionInjectOnEmbed transferAmount: 7 - blockSlots: NONE - fixtureId: "throw-fixture" + solution: melee - type: SolutionTransfer maxTransferAmount: 7 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml index 757b8934d4..e119a846c9 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml @@ -86,8 +86,8 @@ damage: types: Piercing: 3 - Slash: 3 - + Slash: 3 + - type: entity id: PelletShotgunTranquilizer @@ -110,9 +110,9 @@ solution: ammo - type: DrainableSolution solution: ammo - - type: SolutionInjectOnCollide + - type: SolutionInjectOnProjectileHit transferAmount: 15 - blockSlots: NONE #tranquillizer darts shouldn't be blocked by a mask + solution: ammo - type: InjectableSolution solution: ammo diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml index 8dbcf2b303..52c5dc8a9d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml @@ -50,9 +50,9 @@ solution: ammo - type: InjectableSolution solution: ammo - - type: SolutionInjectOnCollide + - type: SolutionInjectOnEmbed transferAmount: 2 - blockSlots: NONE + solution: ammo - type: SolutionTransfer maxTransferAmount: 2 - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index 279fed8043..3758487bd4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -65,10 +65,9 @@ solution: melee - type: InjectableSolution solution: melee - - type: SolutionInjectOnCollide + - type: SolutionInjectOnEmbed transferAmount: 2 - fixtureId: "throw-fixture" - blockSlots: NONE + solution: melee - type: SolutionTransfer maxTransferAmount: 2 - type: Wieldable From 246155bd3736387fece46bae643e90fd1e77d41d Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 03:40:40 +0000 Subject: [PATCH 077/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fe4288712a..87eeba79df 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: DrMelon - changes: - - message: The Microwave works as intended after power outages again. - type: Fix - id: 5780 - time: '2024-01-24T01:14:55.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/23997 - author: Krunk changes: - message: To prevent accidental spills, buckets can no longer be quick-equipped. @@ -3804,3 +3797,12 @@ id: 6279 time: '2024-04-01T03:23:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26601 +- author: Tayrtahn + changes: + - message: spears, darts, and hypodarts can inject targets again. + type: Fix + - message: arrows can no longer inject targets they don't actually hit. + type: Fix + id: 6280 + time: '2024-04-01T03:39:35.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26268 From b7a6fb991f768a693103309867d4128852a56a7a Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 1 Apr 2024 14:41:57 +1100 Subject: [PATCH 078/206] Add ValueList import (#26640) --- .../Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs index 8ba36e3a29..3c57cc31af 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Popups; using Content.Shared.Projectiles; using Content.Shared.Tag; using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Collections; namespace Content.Server.Chemistry.EntitySystems; From 83766b5d20e6585decf0df5e941303c562cfb5e8 Mon Sep 17 00:00:00 2001 From: SoulFN <164462467+SoulFN@users.noreply.github.com> Date: Mon, 1 Apr 2024 12:21:11 +0800 Subject: [PATCH 079/206] Change assault borg modules texture (#26502) * Update borg_modules.yml * Fix borg_modules.yml? * Uh --------- Co-authored-by: metalgearsloth --- .../Specific/Robotics/borg_modules.yml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index e14f29746d..cbfec8c9cf 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -517,13 +517,13 @@ components: - type: Sprite layers: - - state: syndicate - - state: icon-tools + - state: syndicate + - state: icon-syndicate - type: ItemBorgModule items: - - Crowbar - - Emag - - PinpointerSyndicateNuclear + - Crowbar + - Emag + - PinpointerSyndicateNuclear - type: entity id: BorgModuleEsword @@ -533,12 +533,12 @@ components: - type: Sprite layers: - - state: syndicate - - state: icon-tools + - state: syndicate + - state: icon-syndicate - type: ItemBorgModule items: - - EnergySwordDouble - - PinpointerSyndicateNuclear + - EnergySwordDouble + - PinpointerSyndicateNuclear - type: entity id: BorgModuleL6C @@ -548,9 +548,9 @@ components: - type: Sprite layers: - - state: syndicate - - state: icon-tools + - state: syndicate + - state: icon-syndicate - type: ItemBorgModule items: - - WeaponLightMachineGunL6C - - PinpointerSyndicateNuclear + - WeaponLightMachineGunL6C + - PinpointerSyndicateNuclear From 8c5e236de4b0e54299abd79fa41bd99895ae932b Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 04:22:17 +0000 Subject: [PATCH 080/206] 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 87eeba79df..5428dceb3c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Krunk - changes: - - message: To prevent accidental spills, buckets can no longer be quick-equipped. - type: Fix - id: 5781 - time: '2024-01-24T02:35:37.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24472 - author: lzk228 changes: - message: Fixed escaping from locked artifact crate. @@ -3806,3 +3799,10 @@ id: 6280 time: '2024-04-01T03:39:35.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26268 +- author: SoulFN + changes: + - message: Changed textures of the assault borg modules + type: Tweak + id: 6281 + time: '2024-04-01T04:21:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26502 From cf7567d073ee6a26786a006dd2049b9643338bff Mon Sep 17 00:00:00 2001 From: Keer-Sar <144283718+Keer-Sar@users.noreply.github.com> Date: Mon, 1 Apr 2024 00:35:21 -0400 Subject: [PATCH 081/206] Add Cyborg Emote Sounds (#26594) * Hal 9000's first emote * Add Chime emote & Change variation to 0.05 * Modify Buzz emote * Add Buzz-two emote * modified Horn * add ping emote * add slowclap emote * Convert slowclap.ogg to mono, reflect change in attribution.yml * fix capitalization for all chatMessages && change all catagory to category * remove all traces of slowclap.ogg * forgor one file smh * collating copywrite * spelling mistakes will be the death of me * more spelling mistakes * change yml string to list --- Resources/Audio/Machines/attributions.yml | 9 ++ Resources/Audio/Machines/buzz-sigh.ogg | Bin 0 -> 8972 bytes Resources/Audio/Machines/buzz-two.ogg | Bin 0 -> 12724 bytes Resources/Audio/Machines/chime.ogg | Bin 0 -> 8240 bytes Resources/Audio/Machines/twobeep.ogg | Bin 0 -> 6851 bytes .../Mobs/Cyborgs/base_borg_chassis.yml | 5 +- .../Prototypes/Voice/speech_emote_sounds.yml | 18 +++ Resources/Prototypes/Voice/speech_emotes.yml | 104 ++++++++++++++++++ 8 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 Resources/Audio/Machines/buzz-sigh.ogg create mode 100644 Resources/Audio/Machines/buzz-two.ogg create mode 100644 Resources/Audio/Machines/chime.ogg create mode 100644 Resources/Audio/Machines/twobeep.ogg diff --git a/Resources/Audio/Machines/attributions.yml b/Resources/Audio/Machines/attributions.yml index a0f1c9f7e7..38267ebd69 100644 --- a/Resources/Audio/Machines/attributions.yml +++ b/Resources/Audio/Machines/attributions.yml @@ -152,3 +152,12 @@ license: "CC0-1.0" copyright: "dakamakat on freesound.org" source: "https://freesound.org/people/Dakamakat/sounds/717370/" + +- files: + - twobeep.ogg + - chime.ogg + - buzz-sigh.ogg + - buzztwo.ogg + license: "CC-BY-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/tree/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0" diff --git a/Resources/Audio/Machines/buzz-sigh.ogg b/Resources/Audio/Machines/buzz-sigh.ogg new file mode 100644 index 0000000000000000000000000000000000000000..109c196e2c4fef313bdb2a17c4c7b4a59668eda4 GIT binary patch literal 8972 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 z zUk9!0d;3}>o&Dsi4=l7-Z$>{%*Xqx1?h?N5VpE+h}prvd?FuTHoDuR4N(cu|9Xs7dss5)QR458ev;{~B!gnJKs zDHaWUh)(V3YP*J5W~NCVWX{Zkcj25eJI(Rzyp*$Ddu<5y z(jnAV&w|`rKk=!pgIN9rz)-Y?vRfr4ga8+qlr@lFk0X|3v>_#BPY04Pc`#qMl`g~tGHg1Q61%7Zs?`K@RqEr0kKmaC%xrBf~@K*`AMGY?e1!Sp+vt{Q{)ES-M6 z6ux_Mw8;eBh1%i%>gfYTro7?Exc9}DlzGZw9MSnHf)U3HdtZJ!^)%r(trw5JG05{O zEpiy(7P)H-0qM55i|dBN%aOclEt)m4DXZ-|(Z0&7qv@Jk$Np;irOO_QHM*OePrWEZSFZYnbCt&($v3 z0AI}R;O+y^j#hR9uxA5gkX;FRAv> zbDw4iNyCW`wj18Hx6ON59vfBkEstkX=Znb(KBA{aUii1%UlqMnuh@$12jR2MI$-vK z+ut%BG~g58$^-B9U{&l*N0NYxk6o0w{ytL)dH}PTPR!HB%XRmvJHK zDFK0Wbr@YgM-O^VQKQshsGv*pfwr0VFBCDUC%qiLU(|n;tgYQ|F zk?x-}Jw?b`1i9aCg4|L8J>y_eUWl&fUeC43l(v<%A z6Z;;fB3vLKk@~v1iVx#J8#;d)rS8CkcT5sjrEgIta+?k!Q|P{ka2$)FikvtMVozVv zakI?02vDK#YBm}y#{Cg#+dd_}={{%Z#ry?4+-JV_;r8sPrS^)%x*^&F9%rf?I%Tz$eVT z_Zw5e1^m99$Eb$KqWhFm$z>}k4+V0GSM}xIQ(E{PX?&k@80Zw?QjcoG7GnbH;<00S zl@_$8W8Zu`5JxxN`DmN@D@SBShiNy)6eQx%A22Tf2>W)QfF2rj9Ki++62r=1q^i#t zjZYptrw=_Vb(EuF*b0GRwo$BZxz0nE^czp#d{&%)bl}6C$=jO7*BCLk+3Y2k zWKK$?oiS9d^O*W0n{#9Gr?0BaqGMyquGT%dwe9%4bMIqRQ%;PI*JDOUR30teSof-K z&3mKt?Y@NkUgC!_*G|&1->Q9oUKvaZkIXMxbANq72BOgELrQu8%n5rgEW=P4{@Lo? z9W>pu&ykB!3ufs9#u3d%OONZNjz79#Er0VR8)jfeO|u>O?d^$%lg@Jc8^-W@){K#? YpWW{(cLm8@!@I_{S#7+Mw$|`}0FkJ~c>n+a literal 0 HcmV?d00001 diff --git a/Resources/Audio/Machines/twobeep.ogg b/Resources/Audio/Machines/twobeep.ogg new file mode 100644 index 0000000000000000000000000000000000000000..26fc5a95a57bb4a0537355f874665e4a9199c02a GIT binary patch literal 6851 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 literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index 5c7a4e139f..f04998388b 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity parent: BaseMob id: BaseBorgChassis name: cyborg @@ -131,6 +131,9 @@ - type: Speech speechVerb: Robotic speechSounds: Pai + - type: Vocal + sounds: + Unsexed: UnisexSilicon - type: UnblockableSpeech - type: Construction graph: Cyborg diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index 01fabbadf3..5556afa07d 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -298,6 +298,24 @@ Weh: collection: Weh +- type: emoteSounds + id: UnisexSilicon + params: + variation: 0.05 + sounds: + Beep: + path: /Audio/Machines/twobeep.ogg + Chime: + path: /Audio/Machines/chime.ogg + Buzz: + path: /Audio/Machines/buzz-sigh.ogg + Buzz-Two: + path: /Audio/Machines/buzz-two.ogg + Honk: + path: /Audio/Items/bikehorn.ogg + Ping: + path: /Audio/Effects/Cargo/ping.ogg + # body emotes - type: emoteSounds id: GeneralBodyEmotes diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index 8e33f483aa..3b7ffc0107 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -66,6 +66,19 @@ id: Honk category: Vocal chatMessages: [honks] + chatTriggers: + - honk + - honk. + - honk! + - honks + - honks. + - honks! + - honked + - honked. + - honked! + - honking + - honking. + - honking! - type: emote id: Sigh @@ -264,3 +277,94 @@ - chirping - chirping. - chirping! + +# Machine Emotes +- type: emote + id: Beep + category: Vocal + chatMessages: [beeps.] + chatTriggers: + - beep + - beep! + - beep. + - beeps + - beeps. + - beeps! + - beeped + - beeped. + - beeped! + - beeping + - beeping. + - beeping! + +- type: emote + id: Chime + category: Vocal + chatMessages: [chimes.] + chatTriggers: + - chime + - chime. + - chime! + - chimes + - chimes. + - chimes! + - chimed + - chimed. + - chimed! + - chiming + - chiming, + - chiming! + +- type: emote + id: Buzz-Two + category: Vocal + chatMessages: [buzzesTwice.] + chatTriggers: + - buzztwice + - buzztwice. + - buzztwice! + - buzzstwice + - buzzstwice. + - buzzstwice! + - buzzestwice + - buzzestwice. + - buzzestwice! + - buzzingtwice + - buzzingtwice. + - buzzingtwice! + - buzzedtwice + - buzzedtwice. + - buzzedtwice! + - buzz twice + - buzz twice. + - buzz twice! + - buzzs twice + - buzzs twice. + - buzzs twice! + - buzzes twice + - buzzes twice. + - buzzes twice! + - buzzing twice + - buzzing twice. + - buzzing twice! + - buzzed twice + - buzzed twice. + - buzzed twice! + +- type: emote + id: Ping + category: Vocal + chatMessages: [pings.] + chatTriggers: + - ping + - ping. + - ping! + - pings + - pings. + - pings! + - pinged + - pinged. + - pinged! + - pinging + - pinging. + - pinging! From cc35f16839c290dc79f942d6b18c76a334e74a2c Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 04:36:27 +0000 Subject: [PATCH 082/206] 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 5428dceb3c..ce167dcff3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Fixed escaping from locked artifact crate. - type: Fix - id: 5782 - time: '2024-01-25T00:46:07.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24442 - author: Krunk changes: - message: Players will once again spawn at arrivals instead of cryostorage. @@ -3806,3 +3799,10 @@ id: 6281 time: '2024-04-01T04:21:12.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26502 +- author: Keer-Sar + changes: + - message: Cyborgs now have audio for some emotes. + type: Add + id: 6282 + time: '2024-04-01T04:35:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26594 From bed9e9ac6a068495ff70f09eb852a9c7a156d632 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Mon, 1 Apr 2024 06:50:00 +0200 Subject: [PATCH 083/206] Coordinates Disks & Shuttle FTL Travel (#23240) * Adds the CentComm Disk and configures it to work with direct-use shuttles * Added functionality for drone shuttles (i.e. cargo shuttle) * Adds support for pods, and a disk console object for disks to be inserted into. Also sprites. * Added the disk to HoP's locker * Removed leftover logs & comments * Fix for integration test * Apply suggestions from code review (formatting & proper DataField) Co-authored-by: 0x6273 <0x40@keemail.me> * Fix integration test & changes based on code review * Includes Disk Cases to contain Coordinate Disks, which are now CDs instead of Floppy Disks * Check pods & non-evac shuttles for CentCom travel, even in FTL * Import * Remove CentCom travel restrictions & pod disk consoles * Major changes that changes the coordinates disk system to work with salvage expeditions * Missed CC diskcase removal * Fix build * Review suggestions and changes * Major additional changes after merge * Minor tag miss * Integration test fix * review --------- Co-authored-by: 0x6273 <0x40@keemail.me> Co-authored-by: metalgearsloth --- Content.Client/Shuttles/UI/MapScreen.xaml.cs | 12 ++--- .../SalvageSystem.ExpeditionConsole.cs | 13 +++++- .../Salvage/SalvageSystem.Expeditions.cs | 5 ++- Content.Server/Salvage/SalvageSystem.cs | 3 ++ .../Salvage/SpawnSalvageMissionJob.cs | 26 ++++++++--- .../Shuttles/Components/EscapePodComponent.cs | 2 +- .../Components/ShuttleConsoleComponent.cs | 6 +++ .../Systems/EmergencyShuttleSystem.cs | 2 +- .../Systems/ShuttleConsoleSystem.FTL.cs | 6 ++- .../Salvage/Expeditions/SalvageExpeditions.cs | 7 ++- .../Components/FTLDestinationComponent.cs | 6 +++ .../SharedShuttleConsoleComponent.cs | 2 +- .../ShuttleDestinationCoordinatesComponent.cs | 15 +++++++ .../Shuttles/Systems/SharedShuttleSystem.cs | 42 +++++++++++++++--- .../Prototypes/Entities/Objects/Misc/cds.yml | 19 ++++++++ .../Entities/Objects/Misc/diskcases.yml | 21 +++++++++ .../Machines/Computers/computers.yml | 16 +++++++ Resources/Prototypes/tags.yml | 3 ++ .../Textures/Objects/Misc/cd.rsi/icon.png | Bin 0 -> 361 bytes .../Textures/Objects/Misc/cd.rsi/meta.json | 14 ++++++ .../Objects/Misc/diskcases.rsi/icon_base.png | Bin 0 -> 240 bytes .../Objects/Misc/diskcases.rsi/icon_cargo.png | Bin 0 -> 234 bytes .../Objects/Misc/diskcases.rsi/icon_cc.png | Bin 0 -> 239 bytes .../Objects/Misc/diskcases.rsi/meta.json | 20 +++++++++ 24 files changed, 217 insertions(+), 23 deletions(-) create mode 100644 Content.Shared/Shuttles/Components/ShuttleDestinationCoordinatesComponent.cs create mode 100644 Resources/Prototypes/Entities/Objects/Misc/cds.yml create mode 100644 Resources/Prototypes/Entities/Objects/Misc/diskcases.yml create mode 100644 Resources/Textures/Objects/Misc/cd.rsi/icon.png create mode 100644 Resources/Textures/Objects/Misc/cd.rsi/meta.json create mode 100644 Resources/Textures/Objects/Misc/diskcases.rsi/icon_base.png create mode 100644 Resources/Textures/Objects/Misc/diskcases.rsi/icon_cargo.png create mode 100644 Resources/Textures/Objects/Misc/diskcases.rsi/icon_cc.png create mode 100644 Resources/Textures/Objects/Misc/diskcases.rsi/meta.json diff --git a/Content.Client/Shuttles/UI/MapScreen.xaml.cs b/Content.Client/Shuttles/UI/MapScreen.xaml.cs index 225d1be14e..10800b8c5f 100644 --- a/Content.Client/Shuttles/UI/MapScreen.xaml.cs +++ b/Content.Client/Shuttles/UI/MapScreen.xaml.cs @@ -263,9 +263,10 @@ public sealed partial class MapScreen : BoxContainer while (mapComps.MoveNext(out var mapComp, out var mapXform, out var mapMetadata)) { - if (!_shuttles.CanFTLTo(_shuttleEntity.Value, mapComp.MapId)) - continue; - + if (_console != null && !_shuttles.CanFTLTo(_shuttleEntity.Value, mapComp.MapId, _console.Value)) + { + continue; + } var mapName = mapMetadata.EntityName; if (string.IsNullOrEmpty(mapName)) @@ -310,7 +311,6 @@ public sealed partial class MapScreen : BoxContainer }; _mapHeadings.Add(mapComp.MapId, gridContents); - foreach (var grid in _mapManager.GetAllMapGrids(mapComp.MapId)) { _entManager.TryGetComponent(grid.Owner, out IFFComponent? iffComp); @@ -327,8 +327,8 @@ public sealed partial class MapScreen : BoxContainer { AddMapObject(mapComp.MapId, gridObj); } - else if (iffComp == null || - (iffComp.Flags & IFFFlags.Hide) == 0x0) + else if (!_shuttles.IsBeaconMap(_mapManager.GetMapEntityId(mapComp.MapId)) && (iffComp == null || + (iffComp.Flags & IFFFlags.Hide) == 0x0)) { _pendingMapObjects.Add((mapComp.MapId, gridObj)); } diff --git a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs index f7f3718208..61636bea7c 100644 --- a/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs +++ b/Content.Server/Salvage/SalvageSystem.ExpeditionConsole.cs @@ -1,10 +1,16 @@ +using Content.Shared.Shuttles.Components; using Content.Shared.Procedural; using Content.Shared.Salvage.Expeditions; +using Content.Shared.Dataset; +using Robust.Shared.Prototypes; namespace Content.Server.Salvage; public sealed partial class SalvageSystem { + [ValidatePrototypeId] + public const string CoordinatesDisk = "CoordinatesDisk"; + private void OnSalvageClaimMessage(EntityUid uid, SalvageExpeditionConsoleComponent component, ClaimSalvageMessage args) { var station = _station.GetOwningStation(uid); @@ -15,11 +21,16 @@ public sealed partial class SalvageSystem if (!data.Missions.TryGetValue(args.Index, out var missionparams)) return; - SpawnMission(missionparams, station.Value); + var cdUid = Spawn(CoordinatesDisk, Transform(uid).Coordinates); + SpawnMission(missionparams, station.Value, cdUid); data.ActiveMission = args.Index; var mission = GetMission(_prototypeManager.Index(missionparams.Difficulty), missionparams.Seed); data.NextOffer = _timing.CurTime + mission.Duration + TimeSpan.FromSeconds(1); + + _labelSystem.Label(cdUid, GetFTLName(_prototypeManager.Index("names_borer"), missionparams.Seed)); + _audio.PlayPvs(component.PrintSound, uid); + UpdateConsoles((station.Value, data)); } diff --git a/Content.Server/Salvage/SalvageSystem.Expeditions.cs b/Content.Server/Salvage/SalvageSystem.Expeditions.cs index 7e4a9c9310..839730ec87 100644 --- a/Content.Server/Salvage/SalvageSystem.Expeditions.cs +++ b/Content.Server/Salvage/SalvageSystem.Expeditions.cs @@ -8,6 +8,7 @@ using Content.Shared.Salvage.Expeditions; using Robust.Shared.CPUJob.JobQueues; using Robust.Shared.CPUJob.JobQueues.Queues; using Robust.Shared.GameStates; +using Robust.Shared.Map; namespace Content.Server.Salvage; @@ -148,7 +149,7 @@ public sealed partial class SalvageSystem return new SalvageExpeditionConsoleState(component.NextOffer, component.Claimed, component.Cooldown, component.ActiveMission, missions); } - private void SpawnMission(SalvageMissionParams missionParams, EntityUid station) + private void SpawnMission(SalvageMissionParams missionParams, EntityUid station, EntityUid? coordinatesDisk) { var cancelToken = new CancellationTokenSource(); var job = new SpawnSalvageMissionJob( @@ -162,7 +163,9 @@ public sealed partial class SalvageSystem _biome, _dungeon, _metaData, + _transform, station, + coordinatesDisk, missionParams, cancelToken.Token); diff --git a/Content.Server/Salvage/SalvageSystem.cs b/Content.Server/Salvage/SalvageSystem.cs index a1a3b686b2..9af4736345 100644 --- a/Content.Server/Salvage/SalvageSystem.cs +++ b/Content.Server/Salvage/SalvageSystem.cs @@ -32,6 +32,7 @@ using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Map.Components; using Robust.Shared.Timing; +using Content.Server.Labels; namespace Content.Server.Salvage { @@ -39,6 +40,7 @@ namespace Content.Server.Salvage { [Dependency] private readonly IChatManager _chat = default!; [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IMapManager _mapManager = default!; @@ -48,6 +50,7 @@ namespace Content.Server.Salvage [Dependency] private readonly BiomeSystem _biome = default!; [Dependency] private readonly DungeonSystem _dungeon = default!; [Dependency] private readonly GravitySystem _gravity = default!; + [Dependency] private readonly LabelSystem _labelSystem = default!; [Dependency] private readonly MapLoaderSystem _map = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly RadioSystem _radioSystem = default!; diff --git a/Content.Server/Salvage/SpawnSalvageMissionJob.cs b/Content.Server/Salvage/SpawnSalvageMissionJob.cs index e2b17b5872..180c8d145c 100644 --- a/Content.Server/Salvage/SpawnSalvageMissionJob.cs +++ b/Content.Server/Salvage/SpawnSalvageMissionJob.cs @@ -33,6 +33,9 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; +using Content.Server.Shuttles.Components; +using Content.Shared.Coordinates; +using Content.Shared.Shuttles.Components; namespace Content.Server.Salvage; @@ -46,8 +49,10 @@ public sealed class SpawnSalvageMissionJob : Job private readonly BiomeSystem _biome; private readonly DungeonSystem _dungeon; private readonly MetaDataSystem _metaData; + private readonly SharedTransformSystem _xforms; public readonly EntityUid Station; + public readonly EntityUid? CoordinatesDisk; private readonly SalvageMissionParams _missionParams; private readonly ISawmill _sawmill; @@ -63,7 +68,9 @@ public sealed class SpawnSalvageMissionJob : Job BiomeSystem biome, DungeonSystem dungeon, MetaDataSystem metaData, + SharedTransformSystem xform, EntityUid station, + EntityUid? coordinatesDisk, SalvageMissionParams missionParams, CancellationToken cancellation = default) : base(maxTime, cancellation) { @@ -75,7 +82,9 @@ public sealed class SpawnSalvageMissionJob : Job _biome = biome; _dungeon = dungeon; _metaData = metaData; + _xforms = xform; Station = station; + CoordinatesDisk = coordinatesDisk; _missionParams = missionParams; _sawmill = logManager.GetSawmill("salvage_job"); #if !DEBUG @@ -94,6 +103,18 @@ public sealed class SpawnSalvageMissionJob : Job var random = new Random(_missionParams.Seed); var destComp = _entManager.AddComponent(mapUid); destComp.BeaconsOnly = true; + destComp.RequireCoordinateDisk = true; + destComp.Enabled = true; + _metaData.SetEntityName(mapUid, SharedSalvageSystem.GetFTLName(_prototypeManager.Index("names_borer"), _missionParams.Seed)); + _entManager.AddComponent(mapUid); + + // Saving the mission mapUid to a CD is made optional, in case one is somehow made in a process without a CD entity + if (CoordinatesDisk.HasValue) + { + var cd = _entManager.EnsureComponent(CoordinatesDisk.Value); + cd.Destination = mapUid; + _entManager.Dirty(CoordinatesDisk.Value, cd); + } // Setup mission configs // As we go through the config the rating will deplete so we'll go for most important to least important. @@ -144,11 +165,6 @@ public sealed class SpawnSalvageMissionJob : Job expedition.EndTime = _timing.CurTime + mission.Duration; expedition.MissionParams = _missionParams; - // Don't want consoles to have the incorrect name until refreshed. - var ftlUid = _entManager.CreateEntityUninitialized("FTLPoint", new EntityCoordinates(mapUid, grid.TileSizeHalfVector)); - _metaData.SetEntityName(ftlUid, SharedSalvageSystem.GetFTLName(_prototypeManager.Index("names_borer"), _missionParams.Seed)); - _entManager.InitializeAndStartEntity(ftlUid); - var landingPadRadius = 24; var minDungeonOffset = landingPadRadius + 4; diff --git a/Content.Server/Shuttles/Components/EscapePodComponent.cs b/Content.Server/Shuttles/Components/EscapePodComponent.cs index 72c8024e12..d717e97441 100644 --- a/Content.Server/Shuttles/Components/EscapePodComponent.cs +++ b/Content.Server/Shuttles/Components/EscapePodComponent.cs @@ -9,7 +9,7 @@ namespace Content.Server.Shuttles.Components; [RegisterComponent, Access(typeof(EmergencyShuttleSystem)), AutoGenerateComponentPause] public sealed partial class EscapePodComponent : Component { - [DataField("launchTime", customTypeSerializer:typeof(TimeOffsetSerializer))] + [DataField(customTypeSerializer:typeof(TimeOffsetSerializer))] [AutoPausedField] public TimeSpan? LaunchTime; } diff --git a/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs b/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs index 91cecde044..03e262cef5 100644 --- a/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs +++ b/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs @@ -14,5 +14,11 @@ namespace Content.Server.Shuttles.Components ///
[DataField("zoom")] public Vector2 Zoom = new(1.5f, 1.5f); + + /// + /// Should this console have access to restricted FTL destinations? + /// + [ViewVariables(VVAccess.ReadWrite), DataField("whitelistSpecific")] + public List FTLWhitelist = new List(); } } diff --git a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs index a7f83f2e15..c043861b37 100644 --- a/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/EmergencyShuttleSystem.cs @@ -418,7 +418,7 @@ public sealed partial class EmergencyShuttleSystem : EntitySystem } var mapId = _mapManager.CreateMap(); - var grid = _map.LoadGrid(mapId, component.Map.ToString(), new MapLoadOptions() + var grid = _map.LoadGrid(mapId, component.Map.ToString(), new MapLoadOptions() { LoadMap = false, }); diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs index 7606d190a4..c214bb015c 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs @@ -44,6 +44,10 @@ public sealed partial class ShuttleConsoleSystem } var nCoordinates = new NetCoordinates(GetNetEntity(targetXform.ParentUid), targetXform.LocalPosition); + if (targetXform.ParentUid == EntityUid.Invalid) + { + nCoordinates = new NetCoordinates(GetNetEntity(beaconEnt), targetXform.LocalPosition); + } // Check target exists if (!_shuttle.CanFTLBeacon(nCoordinates)) @@ -128,7 +132,7 @@ public sealed partial class ShuttleConsoleSystem } // Check shuttle can FTL to this target. - if (!_shuttle.CanFTLTo(shuttleUid.Value, targetMap)) + if (!_shuttle.CanFTLTo(shuttleUid.Value, targetMap, ent)) { return; } diff --git a/Content.Shared/Salvage/Expeditions/SalvageExpeditions.cs b/Content.Shared/Salvage/Expeditions/SalvageExpeditions.cs index fe4d59b81a..4844a1f3fd 100644 --- a/Content.Shared/Salvage/Expeditions/SalvageExpeditions.cs +++ b/Content.Shared/Salvage/Expeditions/SalvageExpeditions.cs @@ -1,4 +1,5 @@ using Content.Shared.Salvage.Expeditions.Modifiers; +using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; @@ -30,7 +31,11 @@ public sealed class SalvageExpeditionConsoleState : BoundUserInterfaceState [RegisterComponent, NetworkedComponent] public sealed partial class SalvageExpeditionConsoleComponent : Component { - + /// + /// The sound made when spawning a coordinates disk + /// + [DataField] + public SoundSpecifier PrintSound = new SoundPathSpecifier("/Audio/Machines/terminal_insert_disc.ogg"); } [Serializable, NetSerializable] diff --git a/Content.Shared/Shuttles/Components/FTLDestinationComponent.cs b/Content.Shared/Shuttles/Components/FTLDestinationComponent.cs index 58cff96c2b..d4bc536a29 100644 --- a/Content.Shared/Shuttles/Components/FTLDestinationComponent.cs +++ b/Content.Shared/Shuttles/Components/FTLDestinationComponent.cs @@ -23,4 +23,10 @@ public sealed partial class FTLDestinationComponent : Component ///
[DataField, AutoNetworkedField] public bool BeaconsOnly; + + /// + /// Shuttles must use a corresponding CD to travel to this location. + /// + [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + public bool RequireCoordinateDisk = false; } diff --git a/Content.Shared/Shuttles/Components/SharedShuttleConsoleComponent.cs b/Content.Shared/Shuttles/Components/SharedShuttleConsoleComponent.cs index 436c830d20..2ee03210ba 100644 --- a/Content.Shared/Shuttles/Components/SharedShuttleConsoleComponent.cs +++ b/Content.Shared/Shuttles/Components/SharedShuttleConsoleComponent.cs @@ -9,7 +9,7 @@ namespace Content.Shared.Shuttles.Components [NetworkedComponent] public abstract partial class SharedShuttleConsoleComponent : Component { - + public static string DiskSlotName = "disk_slot"; } [Serializable, NetSerializable] diff --git a/Content.Shared/Shuttles/Components/ShuttleDestinationCoordinatesComponent.cs b/Content.Shared/Shuttles/Components/ShuttleDestinationCoordinatesComponent.cs new file mode 100644 index 0000000000..009dee49d1 --- /dev/null +++ b/Content.Shared/Shuttles/Components/ShuttleDestinationCoordinatesComponent.cs @@ -0,0 +1,15 @@ +namespace Content.Shared.Shuttles.Components; +using Robust.Shared.GameStates; + +/// +/// Enables a shuttle to travel to a destination with an item inserted into its console +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ShuttleDestinationCoordinatesComponent : Component +{ + /// + /// Uid for entity containing the FTLDestination component + /// + [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + public EntityUid? Destination; +} diff --git a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs index ca25a49b23..d859d9f485 100644 --- a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs +++ b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Containers.ItemSlots; using Content.Shared.Shuttles.BUIStates; using Content.Shared.Shuttles.Components; using Content.Shared.Shuttles.UI.MapObjects; @@ -10,7 +11,8 @@ namespace Content.Shared.Shuttles.Systems; public abstract partial class SharedShuttleSystem : EntitySystem { - [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] protected readonly SharedMapSystem Maps = default!; [Dependency] protected readonly SharedTransformSystem XformSystem = default!; @@ -34,7 +36,7 @@ public abstract partial class SharedShuttleSystem : EntitySystem /// /// Returns whether an entity can FTL to the specified map. /// - public bool CanFTLTo(EntityUid shuttleUid, MapId targetMap) + public bool CanFTLTo(EntityUid shuttleUid, MapId targetMap, EntityUid consoleUid) { var mapUid = _mapManager.GetMapEntityId(targetMap); var shuttleMap = _xformQuery.GetComponent(shuttleUid).MapID; @@ -42,10 +44,40 @@ public abstract partial class SharedShuttleSystem : EntitySystem if (shuttleMap == targetMap) return true; - if (!TryComp(mapUid, out var destination) || - !destination.Enabled) - { + if (!TryComp(mapUid, out var destination) || !destination.Enabled) return false; + + if (destination.RequireCoordinateDisk) + { + if (!TryComp(consoleUid, out var slot)) + { + return false; + } + + if (!_itemSlots.TryGetSlot(consoleUid, SharedShuttleConsoleComponent.DiskSlotName, out var itemSlot, component: slot) || !itemSlot.HasItem) + { + return false; + } + + if (itemSlot.Item is { Valid: true } disk) + { + ShuttleDestinationCoordinatesComponent? diskCoordinates = null; + if (!Resolve(disk, ref diskCoordinates)) + { + return false; + } + + var diskCoords = diskCoordinates.Destination; + + if (diskCoords == null || !TryComp(diskCoords.Value, out var diskDestination) || diskDestination != destination) + { + return false; + } + } + else + { + return false; + } } if (HasComp(mapUid)) diff --git a/Resources/Prototypes/Entities/Objects/Misc/cds.yml b/Resources/Prototypes/Entities/Objects/Misc/cds.yml new file mode 100644 index 0000000000..a80a7d1d58 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Misc/cds.yml @@ -0,0 +1,19 @@ +- type: entity + name: coordinates disk + parent: BaseItem + id: CoordinatesDisk + description: A disk containing the coordinates to a location in space. Necessary for any FTL-traversing vessel to reach their destination. Fits inside shuttle consoles. + components: + - type: Sprite + sprite: Objects/Misc/cd.rsi + state: icon + - type: StaticPrice + price: 100 + - type: Tag + tags: + - CoordinatesDisk + - type: DamageOtherOnHit + damage: + types: + Slash: 1 + - type: ShuttleDestinationCoordinates diff --git a/Resources/Prototypes/Entities/Objects/Misc/diskcases.yml b/Resources/Prototypes/Entities/Objects/Misc/diskcases.yml new file mode 100644 index 0000000000..da86d7a00d --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Misc/diskcases.yml @@ -0,0 +1,21 @@ +- type: entity + name: diskcase + parent: BaseStorageItem + id: DiskCase + description: Case for storing a coordinates disk. + components: + - type: Sprite + sprite: Objects/Misc/diskcases.rsi + state: icon_base + - type: Storage + grid: + - 0,0,0,1 + maxItemSize: Normal + whitelist: + tags: + - Document + - CoordinatesDisk + storageOpenSound: /Audio/Machines/screwdriveropen.ogg + storageCloseSound: /Audio/Machines/screwdriverclose.ogg + storageInsertSound: /Audio/Items/crowbar.ogg + storageRemoveSound: /Audio/Items/crowbar.ogg diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 8f58464bd4..5a3dc37582 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -63,6 +63,22 @@ color: "#43ccb5" - type: Rotatable rotateWhileAnchored: true + - type: ItemSlots + slots: + disk_slot: + name: Disk + insertSound: + path: /Audio/Machines/terminal_insert_disc.ogg + ejectSound: + path: /Audio/Machines/terminal_insert_disc.ogg + whitelist: + components: + - ShuttleDestinationCoordinates + - type: ContainerContainer + containers: + board: !type:Container + ents: [] + disk_slot: !type:ContainerSlot {} - type: entity parent: BaseComputerShuttle diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 303a9b7c87..961912d609 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -418,6 +418,9 @@ - type: Tag id: ConveyorAssembly +- type: Tag + id: CoordinatesDisk + - type: Tag #Ohioans die happy id: Corn diff --git a/Resources/Textures/Objects/Misc/cd.rsi/icon.png b/Resources/Textures/Objects/Misc/cd.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..346d8c162a920fabb4dc5c692bdf7c156837b70f GIT binary patch literal 361 zcmV-v0ha!WP)Px$BS}O-R9J=WmAy*DKomw##5b@JoMQ4QQ*R?|mqM6o3r!*GPbC(Dg(4QwVyl2f zx&@o9=TVX(fi!uBv5*aJ*gz&(u$j|MhTQXUZ!Q6k$K&~Dg0U}#VQBxJrIZ+Boa>DW z5Qd?BUu8Sbgb>_bUO0z1I)r>nw%!oOvE6&wgHzf*xex+?v(pm*qWNraCkA(*PyU^) zT6tABRCUAa=NC$;L7i|OL06up>D$N416ADsP?jZSSyB|mpc=+9JfFzWwZ4LU}xrCt``w`o*#A#0E{ug z^W%Mco+@_^0FWd}5Y1|#9ABXFpY$(GaGB4H2n neifaE2UzWtj~C9lT*>%qtrgFStzi~GS2K9J`njxgN@xNA=O$S% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/diskcases.rsi/icon_cargo.png b/Resources/Textures/Objects/Misc/diskcases.rsi/icon_cargo.png new file mode 100644 index 0000000000000000000000000000000000000000..4bee922d75418a46b80fde7f2af1b62f1d1c9acd GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}OFUg1Ln2y} z6C_v{Cy4YkF|zfvh(tt0{CWQPadN`X%K0kI_O(9`7Cd>A-1Ka-K+u8X$B$2#GUdpJ zXRn+l$!vIgL3YsFS+t>X)g^shI;9`_; z_@=urVBt*W6I(?jc`B4-3fL#evOZC=_~S=j&p literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/diskcases.rsi/icon_cc.png b/Resources/Textures/Objects/Misc/diskcases.rsi/icon_cc.png new file mode 100644 index 0000000000000000000000000000000000000000..a0dd3a87938ad773547a8cc75fb11534487253c5 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}D?MEtLn2y} z6C_v{Cy4YkF|zfvh(tt0{CWQPak9n1f=-p@|9k(Q{qXcnbknoV0zn6kA3r`}%9JAo zf8*Fa`F>P9U=4gV!^3DQTSA7F!-c>}ju!%j)aQ#h81N=+{`2?WbBmu#nifj3GQVp0 z{(Ju7BbHY4LmY~v8X~*;{e{^lygIBHEFdV$G=;_3mG8%wm%@klRDPDQGZGMAV({Vp m+x$(krd)0ZH6&O|SQ(yuGGh9Fxlj=3Xa-MLKbLh*2~7Y~ab9o$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/diskcases.rsi/meta.json b/Resources/Textures/Objects/Misc/diskcases.rsi/meta.json new file mode 100644 index 0000000000..714b0b19a0 --- /dev/null +++ b/Resources/Textures/Objects/Misc/diskcases.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by SlamBamActionman", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon_base" + }, + { + "name": "icon_cc" + }, + { + "name": "icon_cargo" + } + ] +} From 72bdcac1e271691abb92e3232f0a4d1a592e19c2 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 04:51:06 +0000 Subject: [PATCH 084/206] 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 ce167dcff3..bccb6798b4 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Krunk - changes: - - message: Players will once again spawn at arrivals instead of cryostorage. - type: Fix - id: 5783 - time: '2024-01-25T00:48:58.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24476 - author: Krunk changes: - message: Paper cups can now be worn as party hats! @@ -3806,3 +3799,11 @@ id: 6282 time: '2024-04-01T04:35:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26594 +- author: SlamBamActionman + changes: + - message: Added Coordinates Disks to the Salvage expeditions console, which are + now a requirement for expedition FTL. + type: Add + id: 6283 + time: '2024-04-01T04:50:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/23240 From 64bb8dbdd50e0b1e5744e1eb0cc6f24bda959ade Mon Sep 17 00:00:00 2001 From: c4llv07e <38111072+c4llv07e@users.noreply.github.com> Date: Mon, 1 Apr 2024 09:06:13 +0300 Subject: [PATCH 085/206] Add door electronics access configuration menu (#17778) * Add door electronics configuration menu * Use file-scoped namespaces Signed-off-by: c4llv07e * Open door electronics configuration menu only with network configurator Signed-off-by: c4llv07e * Doors will now try to move their AccessReaderComponent to their door electronics when the map is initialized Signed-off-by: c4llv07e * Make the access list in the id card computer a separate control Signed-off-by: c4llv07e * Fix merge conflict Signed-off-by: c4llv07e * Remove DoorElectronics tag Signed-off-by: c4llv07e * Integrate doors with #17927 Signed-off-by: c4llv07e * Move door electornics ui stuff to the right place Signed-off-by: c4llv07e * Some review fixes Signed-off-by: c4llv07e * More fixes Signed-off-by: c4llv07e * review fix Signed-off-by: c4llv07e * move all accesses from airlock prototypes to door electronics Signed-off-by: c4llv07e * rework door electronics config access list Signed-off-by: c4llv07e * Remove Linq from the door electronics user interface * [WIP] Add EntityWhitelist to the activatable ui component Signed-off-by: c4llv07e * Better interaction system Signed-off-by: c4llv07e * Refactor Signed-off-by: c4llv07e * Fix some door electronics not working without AccessReaderComponent Signed-off-by: c4llv07e * Move AccessReaderComponent update code to the AccessReaderSystem Signed-off-by: c4llv07e * Remove unnecesary newlines in the door access prototypes Signed-off-by: c4llv07e * Remove unused variables in access level control Signed-off-by: c4llv07e * Remove unnecessary method from the door electronics configuration menu Signed-off-by: c4llv07e * [WIP] change access type from string to ProtoId Signed-off-by: c4llv07e * Remove unused methods Signed-off-by: c4llv07e * Newline fix Signed-off-by: c4llv07e * Restored to a functional state Signed-off-by: c4llv07e * Fix access configurator not working with door electronics AccessReaderComponent Signed-off-by: c4llv07e * Replace all string access fields with ProtoId Signed-off-by: c4llv07e * move access level control initialization into Populate method Signed-off-by: c4llv07e * Review --------- Signed-off-by: c4llv07e Co-authored-by: metalgearsloth --- .../Access/UI/AccessLevelControl.xaml | 4 + .../Access/UI/AccessLevelControl.xaml.cs | 52 ++ .../UI/AccessOverriderBoundUserInterface.cs | 2 +- .../Access/UI/AccessOverriderWindow.xaml.cs | 17 +- .../UI/IdCardConsoleBoundUserInterface.cs | 4 +- .../Access/UI/IdCardConsoleWindow.xaml | 6 +- .../Access/UI/IdCardConsoleWindow.xaml.cs | 51 +- .../DoorElectronicsBoundUserInterface.cs | 59 ++ .../DoorElectronicsConfigurationMenu.xaml | 6 + .../DoorElectronicsConfigurationMenu.xaml.cs | 41 ++ .../Tests/Access/AccessReaderTest.cs | 60 +- .../Access/Systems/AccessOverriderSystem.cs | 42 +- .../Access/Systems/IdCardConsoleSystem.cs | 17 +- .../Systems/AdminVerbSystem.Tools.cs | 5 +- .../Systems/DoorElectronicsSystem.cs | 69 ++ Content.Server/Sandbox/SandboxSystem.cs | 3 +- .../EntitySystems/BluespaceLockerSystem.cs | 4 +- .../UserInterface/ActivatableUIComponent.cs | 13 +- .../UserInterface/ActivatableUISystem.cs | 11 +- Content.Shared/Access/AccessGroupPrototype.cs | 4 +- Content.Shared/Access/AccessLevelPrototype.cs | 8 + .../Access/Components/AccessComponent.cs | 12 +- .../Components/AccessOverriderComponent.cs | 16 +- .../Components/AccessReaderComponent.cs | 20 +- .../Components/IdCardConsoleComponent.cs | 20 +- .../Access/Systems/AccessReaderSystem.cs | 51 +- .../Access/Systems/SharedAccessSystem.cs | 6 +- .../Systems/SharedIdCardConsoleSystem.cs | 14 + .../Electronics/DoorElectronicsComponent.cs | 42 ++ Content.Shared/Random/RulesPrototype.cs | 4 +- Content.Shared/Roles/JobPrototype.cs | 16 +- .../Objects/Devices/Electronics/door.yml | 12 +- .../Devices/Electronics/door_access.yml | 264 +++++++ .../Structures/Doors/Airlocks/access.yml | 642 ++++++++---------- .../Doors/Airlocks/base_structureairlocks.yml | 3 +- .../Structures/Doors/Airlocks/highsec.yml | 1 + .../Graphs/structures/airlock.yml | 2 +- .../Graphs/structures/shutter.yml | 2 +- .../Graphs/structures/shuttle.yml | 2 +- .../Graphs/structures/windoor.yml | 4 +- 40 files changed, 1079 insertions(+), 532 deletions(-) create mode 100644 Content.Client/Access/UI/AccessLevelControl.xaml create mode 100644 Content.Client/Access/UI/AccessLevelControl.xaml.cs create mode 100644 Content.Client/Doors/Electronics/DoorElectronicsBoundUserInterface.cs create mode 100644 Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml create mode 100644 Content.Client/Doors/Electronics/DoorElectronicsConfigurationMenu.xaml.cs create mode 100644 Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs create mode 100644 Content.Shared/Doors/Electronics/DoorElectronicsComponent.cs create mode 100644 Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml diff --git a/Content.Client/Access/UI/AccessLevelControl.xaml b/Content.Client/Access/UI/AccessLevelControl.xaml new file mode 100644 index 0000000000..56968d8983 --- /dev/null +++ b/Content.Client/Access/UI/AccessLevelControl.xaml @@ -0,0 +1,4 @@ + + diff --git a/Content.Client/Access/UI/AccessLevelControl.xaml.cs b/Content.Client/Access/UI/AccessLevelControl.xaml.cs new file mode 100644 index 0000000000..34db80b7af --- /dev/null +++ b/Content.Client/Access/UI/AccessLevelControl.xaml.cs @@ -0,0 +1,52 @@ +using System.Linq; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; +using Content.Shared.Access; +using Content.Shared.Access.Systems; + +namespace Content.Client.Access.UI; + +[GenerateTypedNameReferences] +public sealed partial class AccessLevelControl : GridContainer +{ + public readonly Dictionary, Button> ButtonsList = new(); + + public AccessLevelControl() + { + RobustXamlLoader.Load(this); + } + + public void Populate(List> accessLevels, IPrototypeManager prototypeManager) + { + foreach (var access in accessLevels) + { + if (!prototypeManager.TryIndex(access, out var accessLevel)) + { + Logger.Error($"Unable to find accesslevel for {access}"); + continue; + } + + var newButton = new Button + { + Text = accessLevel.GetAccessLevelName(), + ToggleMode = true, + }; + AddChild(newButton); + ButtonsList.Add(accessLevel.ID, newButton); + } + } + + public void UpdateState( + List> pressedList, + List>? enabledList = null) + { + foreach (var (accessName, button) in ButtonsList) + { + button.Pressed = pressedList.Contains(accessName); + button.Disabled = !(enabledList?.Contains(accessName) ?? true); + } + } +} diff --git a/Content.Client/Access/UI/AccessOverriderBoundUserInterface.cs b/Content.Client/Access/UI/AccessOverriderBoundUserInterface.cs index 0c23542f79..c1b63dc4d0 100644 --- a/Content.Client/Access/UI/AccessOverriderBoundUserInterface.cs +++ b/Content.Client/Access/UI/AccessOverriderBoundUserInterface.cs @@ -64,7 +64,7 @@ namespace Content.Client.Access.UI _window?.UpdateState(castState); } - public void SubmitData(List newAccessList) + public void SubmitData(List> newAccessList) { SendMessage(new WriteToTargetAccessReaderIdMessage(newAccessList)); } diff --git a/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs b/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs index 2fd0057121..6025c3b551 100644 --- a/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs +++ b/Content.Client/Access/UI/AccessOverriderWindow.xaml.cs @@ -16,7 +16,6 @@ namespace Content.Client.Access.UI [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - private readonly ISawmill _logMill = default!; private readonly AccessOverriderBoundUserInterface _owner; private readonly Dictionary _accessButtons = new(); @@ -25,7 +24,7 @@ namespace Content.Client.Access.UI { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); - _logMill = _logManager.GetSawmill(SharedAccessOverriderSystem.Sawmill); + var logMill = _logManager.GetSawmill(SharedAccessOverriderSystem.Sawmill); _owner = owner; @@ -33,13 +32,13 @@ namespace Content.Client.Access.UI { if (!prototypeManager.TryIndex(access, out var accessLevel)) { - _logMill.Error($"Unable to find accesslevel for {access}"); + logMill.Error($"Unable to find accesslevel for {access}"); continue; } var newButton = new Button { - Text = GetAccessLevelName(accessLevel), + Text = accessLevel.GetAccessLevelName(), ToggleMode = true, }; @@ -49,14 +48,6 @@ namespace Content.Client.Access.UI } } - private static string GetAccessLevelName(AccessLevelPrototype prototype) - { - if (prototype.Name is { } name) - return Loc.GetString(name); - - return prototype.ID; - } - public void UpdateState(AccessOverriderBoundUserInterfaceState state) { PrivilegedIdLabel.Text = state.PrivilegedIdName; @@ -105,7 +96,7 @@ namespace Content.Client.Access.UI _owner.SubmitData( // Iterate over the buttons dictionary, filter by `Pressed`, only get key from the key/value pair - _accessButtons.Where(x => x.Value.Pressed).Select(x => x.Key).ToList()); + _accessButtons.Where(x => x.Value.Pressed).Select(x => new ProtoId(x.Key)).ToList()); } } } diff --git a/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs b/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs index 898792aa03..5b7011c195 100644 --- a/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs +++ b/Content.Client/Access/UI/IdCardConsoleBoundUserInterface.cs @@ -1,5 +1,6 @@ using Content.Shared.Access; using Content.Shared.Access.Components; +using Content.Shared.Access; using Content.Shared.Access.Systems; using Content.Shared.Containers.ItemSlots; using Content.Shared.CrewManifest; @@ -28,7 +29,6 @@ namespace Content.Client.Access.UI if (EntMan.TryGetComponent(Owner, out var idCard)) { accessLevels = idCard.AccessLevels; - accessLevels.Sort(); } else { @@ -65,7 +65,7 @@ namespace Content.Client.Access.UI _window?.UpdateState(castState); } - public void SubmitData(string newFullName, string newJobTitle, List newAccessList, string newJobPrototype) + public void SubmitData(string newFullName, string newJobTitle, List> newAccessList, string newJobPrototype) { if (newFullName.Length > MaxFullNameLength) newFullName = newFullName[..MaxFullNameLength]; diff --git a/Content.Client/Access/UI/IdCardConsoleWindow.xaml b/Content.Client/Access/UI/IdCardConsoleWindow.xaml index c29adc8ebd..a2f5f3382b 100644 --- a/Content.Client/Access/UI/IdCardConsoleWindow.xaml +++ b/Content.Client/Access/UI/IdCardConsoleWindow.xaml @@ -30,10 +30,6 @@
private void TryWriteToTargetAccessReaderId(EntityUid uid, - List newAccessList, + List> newAccessList, EntityUid player, AccessOverriderComponent? component = null) { @@ -211,9 +217,7 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem return; } - TryComp(component.TargetAccessReaderId, out AccessReaderComponent? accessReader); - - if (accessReader == null) + if (!_accessReader.GetMainAccessReader(component.TargetAccessReaderId, out var accessReader)) return; var oldTags = ConvertAccessHashSetsToList(accessReader.AccessLists); @@ -262,10 +266,10 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem if (!Resolve(uid, ref component)) return true; - if (!EntityManager.TryGetComponent(uid, out var reader)) + if (_accessReader.GetMainAccessReader(uid, out var accessReader)) return true; var privilegedId = component.PrivilegedIdSlot.Item; - return privilegedId != null && _accessReader.IsAllowed(privilegedId.Value, uid, reader); + return privilegedId != null && _accessReader.IsAllowed(privilegedId.Value, uid, accessReader); } } diff --git a/Content.Server/Access/Systems/IdCardConsoleSystem.cs b/Content.Server/Access/Systems/IdCardConsoleSystem.cs index 791159f972..db8b9d036e 100644 --- a/Content.Server/Access/Systems/IdCardConsoleSystem.cs +++ b/Content.Server/Access/Systems/IdCardConsoleSystem.cs @@ -12,6 +12,7 @@ using Robust.Shared.Containers; using Robust.Shared.Prototypes; using System.Linq; using static Content.Shared.Access.Components.IdCardConsoleComponent; +using Content.Shared.Access; namespace Content.Server.Access.Systems; @@ -54,11 +55,11 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem return; var privilegedIdName = string.Empty; - string[]? possibleAccess = null; + List>? possibleAccess = null; if (component.PrivilegedIdSlot.Item is { Valid: true } item) { privilegedIdName = EntityManager.GetComponent(item).EntityName; - possibleAccess = _accessReader.FindAccessTags(item).ToArray(); + possibleAccess = _accessReader.FindAccessTags(item).ToList(); } IdCardConsoleBoundUserInterfaceState newState; @@ -82,7 +83,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem var targetIdComponent = EntityManager.GetComponent(targetId); var targetAccessComponent = EntityManager.GetComponent(targetId); - var jobProto = string.Empty; + var jobProto = new ProtoId(string.Empty); if (TryComp(targetId, out var keyStorage) && keyStorage.Key is {} key && _record.TryGetRecord(key, out var record)) @@ -96,7 +97,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem true, targetIdComponent.FullName, targetIdComponent.JobTitle, - targetAccessComponent.Tags.ToArray(), + targetAccessComponent.Tags.ToList(), possibleAccess, jobProto, privilegedIdName, @@ -113,8 +114,8 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem private void TryWriteToTargetId(EntityUid uid, string newFullName, string newJobTitle, - List newAccessList, - string newJobProto, + List> newAccessList, + ProtoId newJobProto, EntityUid player, IdCardConsoleComponent? component = null) { @@ -140,7 +141,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem return; } - var oldTags = _access.TryGetTags(targetId) ?? new List(); + var oldTags = _access.TryGetTags(targetId) ?? new List>(); oldTags = oldTags.ToList(); var privilegedId = component.PrivilegedIdSlot.Item; @@ -189,7 +190,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem return privilegedId != null && _accessReader.IsAllowed(privilegedId.Value, uid, reader); } - private void UpdateStationRecord(EntityUid uid, EntityUid targetId, string newFullName, string newJobTitle, JobPrototype? newJobProto) + private void UpdateStationRecord(EntityUid uid, EntityUid targetId, string newFullName, ProtoId newJobTitle, JobPrototype? newJobProto) { if (!TryComp(targetId, out var keyStorage) || keyStorage.Key is not { } key diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs index 9d66338c8b..328fa74484 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs @@ -35,6 +35,7 @@ using Robust.Shared.Map.Components; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Server.Administration.Systems; @@ -844,14 +845,14 @@ public sealed partial class AdminVerbSystem { var allAccess = _prototypeManager .EnumeratePrototypes() - .Select(p => p.ID).ToArray(); + .Select(p => new ProtoId(p.ID)).ToArray(); _accessSystem.TrySetTags(entity, allAccess); } private void RevokeAllAccess(EntityUid entity) { - _accessSystem.TrySetTags(entity, Array.Empty()); + _accessSystem.TrySetTags(entity, new List>()); } public enum TricksVerbPriorities diff --git a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs new file mode 100644 index 0000000000..56e8bd50b3 --- /dev/null +++ b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs @@ -0,0 +1,69 @@ +using System.Linq; +using Content.Server.Doors.Electronics; +using Content.Shared.Access; +using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; +using Content.Shared.DeviceNetwork.Components; +using Content.Shared.Doors.Electronics; +using Content.Shared.Doors; +using Content.Shared.Interaction; +using Robust.Server.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.Server.Doors.Electronics; + +public sealed class DoorElectronicsSystem : EntitySystem +{ + [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly AccessReaderSystem _accessReader = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnChangeConfiguration); + SubscribeLocalEvent(OnAccessReaderChanged); + SubscribeLocalEvent(OnBoundUIOpened); + } + + public void UpdateUserInterface(EntityUid uid, DoorElectronicsComponent component) + { + var accesses = new List>(); + + if (TryComp(uid, out var accessReader)) + { + foreach (var accessList in accessReader.AccessLists) + { + var access = accessList.FirstOrDefault(); + accesses.Add(access); + } + } + + var state = new DoorElectronicsConfigurationState(accesses); + _uiSystem.TrySetUiState(uid, DoorElectronicsConfigurationUiKey.Key, state); + } + + private void OnChangeConfiguration( + EntityUid uid, + DoorElectronicsComponent component, + DoorElectronicsUpdateConfigurationMessage args) + { + var accessReader = EnsureComp(uid); + _accessReader.SetAccesses(uid, accessReader, args.AccessList); + } + + private void OnAccessReaderChanged( + EntityUid uid, + DoorElectronicsComponent component, + AccessReaderConfigurationChangedEvent args) + { + UpdateUserInterface(uid, component); + } + + private void OnBoundUIOpened( + EntityUid uid, + DoorElectronicsComponent component, + BoundUIOpenedEvent args) + { + UpdateUserInterface(uid, component); + } +} diff --git a/Content.Server/Sandbox/SandboxSystem.cs b/Content.Server/Sandbox/SandboxSystem.cs index b8bf123090..30fe4e0fe9 100644 --- a/Content.Server/Sandbox/SandboxSystem.cs +++ b/Content.Server/Sandbox/SandboxSystem.cs @@ -14,6 +14,7 @@ using Robust.Server.Placement; using Robust.Server.Player; using Robust.Shared.Enums; using Robust.Shared.Player; +using Robust.Shared.Prototypes; namespace Content.Server.Sandbox { @@ -121,7 +122,7 @@ namespace Content.Server.Sandbox var allAccess = PrototypeManager .EnumeratePrototypes() - .Select(p => p.ID).ToArray(); + .Select(p => new ProtoId(p.ID)).ToList(); if (_inventory.TryGetSlotEntity(attached, "id", out var slotEntity)) { diff --git a/Content.Server/Storage/EntitySystems/BluespaceLockerSystem.cs b/Content.Server/Storage/EntitySystems/BluespaceLockerSystem.cs index 356768769b..838311c1aa 100644 --- a/Content.Server/Storage/EntitySystems/BluespaceLockerSystem.cs +++ b/Content.Server/Storage/EntitySystems/BluespaceLockerSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Explosion.EntitySystems; using Content.Server.Resist; using Content.Server.Station.Components; using Content.Server.Storage.Components; +using Content.Shared.Access; using Content.Shared.Access.Components; using Content.Shared.Coordinates; using Content.Shared.DoAfter; @@ -14,6 +15,7 @@ using Content.Shared.Tools.Systems; using Robust.Shared.Containers; using Robust.Shared.Random; using Robust.Shared.Timing; +using Robust.Shared.Prototypes; namespace Content.Server.Storage.EntitySystems; @@ -138,7 +140,7 @@ public sealed class BluespaceLockerSystem : EntitySystem } /// True if any HashSet in would grant access to - private bool AccessMatch(IReadOnlyCollection>? a, IReadOnlyCollection>? b) + private bool AccessMatch(IReadOnlyCollection>>? a, IReadOnlyCollection>>? b) { if ((a == null || a.Count == 0) && (b == null || b.Count == 0)) return true; diff --git a/Content.Server/UserInterface/ActivatableUIComponent.cs b/Content.Server/UserInterface/ActivatableUIComponent.cs index 54639dd2b0..cc0e5008e4 100644 --- a/Content.Server/UserInterface/ActivatableUIComponent.cs +++ b/Content.Server/UserInterface/ActivatableUIComponent.cs @@ -1,3 +1,6 @@ +using Content.Shared.Whitelist; +using Robust.Server.GameObjects; +using Robust.Server.Player; using Robust.Shared.Player; using Robust.Shared.Serialization.TypeSerializers.Implementations; @@ -34,12 +37,19 @@ namespace Content.Server.UserInterface [DataField] public bool RequireHands = true; + /// + /// Entities that are required to open this UI. + /// + [DataField("allowedItems")] + [ViewVariables(VVAccess.ReadWrite)] + public EntityWhitelist? AllowedItems = null; + /// /// Whether you can activate this ui with activateinhand or not /// [ViewVariables(VVAccess.ReadWrite)] [DataField] - public bool rightClickOnly = false; + public bool RightClickOnly; /// /// Whether spectators (non-admin ghosts) should be allowed to view this UI. @@ -63,4 +73,3 @@ namespace Content.Server.UserInterface public ICommonSession? CurrentSingleUser; } } - diff --git a/Content.Server/UserInterface/ActivatableUISystem.cs b/Content.Server/UserInterface/ActivatableUISystem.cs index 387221e00c..e3a11af429 100644 --- a/Content.Server/UserInterface/ActivatableUISystem.cs +++ b/Content.Server/UserInterface/ActivatableUISystem.cs @@ -26,6 +26,7 @@ public sealed partial class ActivatableUISystem : EntitySystem SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnHandDeselected); SubscribeLocalEvent((uid, aui, _) => CloseAll(uid, aui)); // *THIS IS A BLATANT WORKAROUND!* RATIONALE: Microwaves need it @@ -100,12 +101,20 @@ public sealed partial class ActivatableUISystem : EntitySystem if (args.Handled) return; - if (component.rightClickOnly) + if (component.RightClickOnly) return; args.Handled = InteractUI(args.User, uid, component); } + private void OnInteractUsing(EntityUid uid, ActivatableUIComponent component, InteractUsingEvent args) + { + if (args.Handled) return; + if (component.AllowedItems == null) return; + if (!component.AllowedItems.IsValid(args.Used, EntityManager)) return; + args.Handled = InteractUI(args.User, uid, component); + } + private void OnParentChanged(EntityUid uid, ActivatableUIComponent aui, ref EntParentChangedMessage args) { CloseAll(uid, aui); diff --git a/Content.Shared/Access/AccessGroupPrototype.cs b/Content.Shared/Access/AccessGroupPrototype.cs index 8d3ed8feea..323fdb91ed 100644 --- a/Content.Shared/Access/AccessGroupPrototype.cs +++ b/Content.Shared/Access/AccessGroupPrototype.cs @@ -14,6 +14,6 @@ public sealed partial class AccessGroupPrototype : IPrototype [IdDataField] public string ID { get; private set; } = default!; - [DataField("tags", required: true, customTypeSerializer: typeof(PrototypeIdHashSetSerializer))] - public HashSet Tags = default!; + [DataField("tags", required: true)] + public HashSet> Tags = default!; } diff --git a/Content.Shared/Access/AccessLevelPrototype.cs b/Content.Shared/Access/AccessLevelPrototype.cs index 8cc5927158..e3a3b426b0 100644 --- a/Content.Shared/Access/AccessLevelPrototype.cs +++ b/Content.Shared/Access/AccessLevelPrototype.cs @@ -17,5 +17,13 @@ namespace Content.Shared.Access /// [DataField("name")] public string? Name { get; set; } + + public string GetAccessLevelName() + { + if (Name is { } name) + return Loc.GetString(name); + + return ID; + } } } diff --git a/Content.Shared/Access/Components/AccessComponent.cs b/Content.Shared/Access/Components/AccessComponent.cs index 2eacf2aa67..00ee87b3b6 100644 --- a/Content.Shared/Access/Components/AccessComponent.cs +++ b/Content.Shared/Access/Components/AccessComponent.cs @@ -20,17 +20,17 @@ public sealed partial class AccessComponent : Component [AutoNetworkedField] public bool Enabled = true; - [DataField(customTypeSerializer: typeof(PrototypeIdHashSetSerializer))] + [DataField] [Access(typeof(SharedAccessSystem), Other = AccessPermissions.ReadExecute)] // FIXME Friends [AutoNetworkedField] - public HashSet Tags = new(); + public HashSet> Tags = new(); /// /// Access Groups. These are added to the tags during map init. After map init this will have no effect. /// - [DataField(readOnly: true, customTypeSerializer: typeof(PrototypeIdHashSetSerializer))] + [DataField(readOnly: true)] [AutoNetworkedField] - public HashSet Groups = new(); + public HashSet> Groups = new(); } /// @@ -47,9 +47,9 @@ public struct GetAdditionalAccessEvent } [ByRefEvent] -public record struct GetAccessTagsEvent(HashSet Tags, IPrototypeManager PrototypeManager) +public record struct GetAccessTagsEvent(HashSet> Tags, IPrototypeManager PrototypeManager) { - public void AddGroup(string group) + public void AddGroup(ProtoId group) { if (!PrototypeManager.TryIndex(group, out var groupPrototype)) return; diff --git a/Content.Shared/Access/Components/AccessOverriderComponent.cs b/Content.Shared/Access/Components/AccessOverriderComponent.cs index 92c09f1ab7..6a1bf2c831 100644 --- a/Content.Shared/Access/Components/AccessOverriderComponent.cs +++ b/Content.Shared/Access/Components/AccessOverriderComponent.cs @@ -25,9 +25,9 @@ public sealed partial class AccessOverriderComponent : Component [Serializable, NetSerializable] public sealed class WriteToTargetAccessReaderIdMessage : BoundUserInterfaceMessage { - public readonly List AccessList; + public readonly List> AccessList; - public WriteToTargetAccessReaderIdMessage(List accessList) + public WriteToTargetAccessReaderIdMessage(List> accessList) { AccessList = accessList; } @@ -48,15 +48,15 @@ public sealed partial class AccessOverriderComponent : Component public readonly string PrivilegedIdName; public readonly bool IsPrivilegedIdPresent; public readonly bool IsPrivilegedIdAuthorized; - public readonly string[]? TargetAccessReaderIdAccessList; - public readonly string[]? AllowedModifyAccessList; - public readonly string[]? MissingPrivilegesList; + public readonly ProtoId[]? TargetAccessReaderIdAccessList; + public readonly ProtoId[]? AllowedModifyAccessList; + public readonly ProtoId[]? MissingPrivilegesList; public AccessOverriderBoundUserInterfaceState(bool isPrivilegedIdPresent, bool isPrivilegedIdAuthorized, - string[]? targetAccessReaderIdAccessList, - string[]? allowedModifyAccessList, - string[]? missingPrivilegesList, + ProtoId[]? targetAccessReaderIdAccessList, + ProtoId[]? allowedModifyAccessList, + ProtoId[]? missingPrivilegesList, string privilegedIdName, string targetLabel, Color targetLabelColor) diff --git a/Content.Shared/Access/Components/AccessReaderComponent.cs b/Content.Shared/Access/Components/AccessReaderComponent.cs index b157797922..cbd3f5acd6 100644 --- a/Content.Shared/Access/Components/AccessReaderComponent.cs +++ b/Content.Shared/Access/Components/AccessReaderComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.StationRecords; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; @@ -23,15 +24,15 @@ public sealed partial class AccessReaderComponent : Component /// The set of tags that will automatically deny an allowed check, if any of them are present. /// [ViewVariables(VVAccess.ReadWrite)] - [DataField(customTypeSerializer: typeof(PrototypeIdHashSetSerializer))] - public HashSet DenyTags = new(); + [DataField] + public HashSet> DenyTags = new(); /// /// List of access groups that grant access to this reader. Only a single matching group is required to gain access. /// A group matches if it is a subset of the set being checked against. /// [DataField("access")] [ViewVariables(VVAccess.ReadWrite)] - public List> AccessLists = new(); + public List>> AccessLists = new(); /// /// A list of s that grant access. Only a single matching key is required to gain @@ -88,9 +89,9 @@ public sealed class AccessReaderComponentState : ComponentState { public bool Enabled; - public HashSet DenyTags; + public HashSet> DenyTags; - public List> AccessLists; + public List>> AccessLists; public List<(NetEntity, uint)> AccessKeys; @@ -98,7 +99,7 @@ public sealed class AccessReaderComponentState : ComponentState public int AccessLogLimit; - public AccessReaderComponentState(bool enabled, HashSet denyTags, List> accessLists, List<(NetEntity, uint)> accessKeys, Queue accessLog, int accessLogLimit) + public AccessReaderComponentState(bool enabled, HashSet> denyTags, List>> accessLists, List<(NetEntity, uint)> accessKeys, Queue accessLog, int accessLogLimit) { Enabled = enabled; DenyTags = denyTags; @@ -108,3 +109,10 @@ public sealed class AccessReaderComponentState : ComponentState AccessLogLimit = accessLogLimit; } } + +public sealed class AccessReaderConfigurationChangedEvent : EntityEventArgs +{ + public AccessReaderConfigurationChangedEvent() + { + } +} diff --git a/Content.Shared/Access/Components/IdCardConsoleComponent.cs b/Content.Shared/Access/Components/IdCardConsoleComponent.cs index 387ca8a013..deeafe2793 100644 --- a/Content.Shared/Access/Components/IdCardConsoleComponent.cs +++ b/Content.Shared/Access/Components/IdCardConsoleComponent.cs @@ -3,6 +3,8 @@ using Content.Shared.Containers.ItemSlots; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; +using Robust.Shared.Prototypes; namespace Content.Shared.Access.Components; @@ -27,10 +29,10 @@ public sealed partial class IdCardConsoleComponent : Component { public readonly string FullName; public readonly string JobTitle; - public readonly List AccessList; - public readonly string JobPrototype; + public readonly List> AccessList; + public readonly ProtoId JobPrototype; - public WriteToTargetIdMessage(string fullName, string jobTitle, List accessList, string jobPrototype) + public WriteToTargetIdMessage(string fullName, string jobTitle, List> accessList, ProtoId jobPrototype) { FullName = fullName; JobTitle = jobTitle; @@ -86,18 +88,18 @@ public sealed partial class IdCardConsoleComponent : Component public readonly string TargetIdName; public readonly string? TargetIdFullName; public readonly string? TargetIdJobTitle; - public readonly string[]? TargetIdAccessList; - public readonly string[]? AllowedModifyAccessList; - public readonly string TargetIdJobPrototype; + public readonly List>? TargetIdAccessList; + public readonly List>? AllowedModifyAccessList; + public readonly ProtoId TargetIdJobPrototype; public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent, bool isPrivilegedIdAuthorized, bool isTargetIdPresent, string? targetIdFullName, string? targetIdJobTitle, - string[]? targetIdAccessList, - string[]? allowedModifyAccessList, - string targetIdJobPrototype, + List>? targetIdAccessList, + List>? allowedModifyAccessList, + ProtoId targetIdJobPrototype, string privilegedIdName, string targetIdName) { diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 812a8e0487..4c12622ab5 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -112,11 +112,36 @@ public sealed class AccessReaderSystem : EntitySystem return false; } + public bool GetMainAccessReader(EntityUid uid, [NotNullWhen(true)] out AccessReaderComponent? component) + { + component = null; + if (!TryComp(uid, out AccessReaderComponent? accessReader)) + return false; + + component = accessReader; + + if (component.ContainerAccessProvider == null) + return true; + + if (!_containerSystem.TryGetContainer(uid, component.ContainerAccessProvider, out var container)) + return true; + + foreach (var entity in container.ContainedEntities) + { + if (TryComp(entity, out AccessReaderComponent? containedReader)) + { + component = containedReader; + return true; + } + } + return true; + } + /// /// Check whether the given access permissions satisfy an access reader's requirements. /// public bool IsAllowed( - ICollection access, + ICollection> access, ICollection stationKeys, EntityUid target, AccessReaderComponent reader) @@ -142,7 +167,7 @@ public sealed class AccessReaderSystem : EntitySystem return false; } - private bool IsAllowedInternal(ICollection access, ICollection stationKeys, AccessReaderComponent reader) + private bool IsAllowedInternal(ICollection> access, ICollection stationKeys, AccessReaderComponent reader) { return !reader.Enabled || AreAccessTagsAllowed(access, reader) @@ -154,7 +179,7 @@ public sealed class AccessReaderSystem : EntitySystem /// /// A list of access tags /// An access reader to check against - public bool AreAccessTagsAllowed(ICollection accessTags, AccessReaderComponent reader) + public bool AreAccessTagsAllowed(ICollection> accessTags, AccessReaderComponent reader) { if (reader.DenyTags.Overlaps(accessTags)) { @@ -218,9 +243,9 @@ public sealed class AccessReaderSystem : EntitySystem /// /// The entity that is being searched. /// All of the items to search for access. If none are passed in, will be used. - public ICollection FindAccessTags(EntityUid uid, HashSet? items = null) + public ICollection> FindAccessTags(EntityUid uid, HashSet? items = null) { - HashSet? tags = null; + HashSet>? tags = null; var owned = false; items ??= FindPotentialAccessItems(uid); @@ -230,7 +255,7 @@ public sealed class AccessReaderSystem : EntitySystem FindAccessTagsItem(ent, ref tags, ref owned); } - return (ICollection?) tags ?? Array.Empty(); + return (ICollection>?) tags ?? Array.Empty>(); } /// @@ -260,7 +285,7 @@ public sealed class AccessReaderSystem : EntitySystem /// This version merges into a set or replaces the set. /// If owned is false, the existing tag-set "isn't ours" and can't be merged with (is read-only). /// - private void FindAccessTagsItem(EntityUid uid, ref HashSet? tags, ref bool owned) + private void FindAccessTagsItem(EntityUid uid, ref HashSet>? tags, ref bool owned) { if (!FindAccessTagsItem(uid, out var targetTags)) { @@ -286,6 +311,16 @@ public sealed class AccessReaderSystem : EntitySystem } } + public void SetAccesses(EntityUid uid, AccessReaderComponent component, List> accesses) + { + component.AccessLists.Clear(); + foreach (var access in accesses) + { + component.AccessLists.Add(new HashSet>(){access}); + } + RaiseLocalEvent(uid, new AccessReaderConfigurationChangedEvent()); + } + public bool FindAccessItemsInventory(EntityUid uid, out HashSet items) { items = new(); @@ -308,7 +343,7 @@ public sealed class AccessReaderSystem : EntitySystem /// Try to find on this item /// or inside this item (if it's pda) /// - private bool FindAccessTagsItem(EntityUid uid, out HashSet tags) + private bool FindAccessTagsItem(EntityUid uid, out HashSet> tags) { tags = new(); var ev = new GetAccessTagsEvent(tags, _prototype); diff --git a/Content.Shared/Access/Systems/SharedAccessSystem.cs b/Content.Shared/Access/Systems/SharedAccessSystem.cs index 965ccb2412..a4b04c3559 100644 --- a/Content.Shared/Access/Systems/SharedAccessSystem.cs +++ b/Content.Shared/Access/Systems/SharedAccessSystem.cs @@ -51,7 +51,7 @@ namespace Content.Shared.Access.Systems /// Replaces the set of access tags we have with the provided set. /// /// The new access tags - public bool TrySetTags(EntityUid uid, IEnumerable newTags, AccessComponent? access = null) + public bool TrySetTags(EntityUid uid, IEnumerable> newTags, AccessComponent? access = null) { if (!Resolve(uid, ref access)) return false; @@ -67,12 +67,12 @@ namespace Content.Shared.Access.Systems /// Gets the set of access tags. /// /// The new access tags - public IEnumerable? TryGetTags(EntityUid uid, AccessComponent? access = null) + public IEnumerable>? TryGetTags(EntityUid uid, AccessComponent? access = null) { return !Resolve(uid, ref access) ? null : access.Tags; } - public bool TryAddGroups(EntityUid uid, IEnumerable newGroups, AccessComponent? access = null) + public bool TryAddGroups(EntityUid uid, IEnumerable> newGroups, AccessComponent? access = null) { if (!Resolve(uid, ref access)) return false; diff --git a/Content.Shared/Access/Systems/SharedIdCardConsoleSystem.cs b/Content.Shared/Access/Systems/SharedIdCardConsoleSystem.cs index 12e25e1e22..81843b5e2d 100644 --- a/Content.Shared/Access/Systems/SharedIdCardConsoleSystem.cs +++ b/Content.Shared/Access/Systems/SharedIdCardConsoleSystem.cs @@ -1,6 +1,9 @@ using Content.Shared.Access.Components; using Content.Shared.Containers.ItemSlots; using JetBrains.Annotations; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; +using Robust.Shared.Prototypes; namespace Content.Shared.Access.Systems { @@ -33,5 +36,16 @@ namespace Content.Shared.Access.Systems _itemSlotsSystem.RemoveItemSlot(uid, component.PrivilegedIdSlot); _itemSlotsSystem.RemoveItemSlot(uid, component.TargetIdSlot); } + + [Serializable, NetSerializable] + private sealed class IdCardConsoleComponentState : ComponentState + { + public List AccessLevels; + + public IdCardConsoleComponentState(List accessLevels) + { + AccessLevels = accessLevels; + } + } } } diff --git a/Content.Shared/Doors/Electronics/DoorElectronicsComponent.cs b/Content.Shared/Doors/Electronics/DoorElectronicsComponent.cs new file mode 100644 index 0000000000..3e9f279ee5 --- /dev/null +++ b/Content.Shared/Doors/Electronics/DoorElectronicsComponent.cs @@ -0,0 +1,42 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; +using Robust.Shared.Prototypes; +using Content.Shared.Access; + +namespace Content.Shared.Doors.Electronics; + +/// +/// Allows an entity's AccessReader to be configured via UI. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class DoorElectronicsComponent : Component +{ +} + +[Serializable, NetSerializable] +public sealed class DoorElectronicsUpdateConfigurationMessage : BoundUserInterfaceMessage +{ + public List> AccessList; + + public DoorElectronicsUpdateConfigurationMessage(List> accessList) + { + AccessList = accessList; + } +} + +[Serializable, NetSerializable] +public sealed class DoorElectronicsConfigurationState : BoundUserInterfaceState +{ + public List> AccessList; + + public DoorElectronicsConfigurationState(List> accessList) + { + AccessList = accessList; + } +} + +[Serializable, NetSerializable] +public enum DoorElectronicsConfigurationUiKey : byte +{ + Key +} diff --git a/Content.Shared/Random/RulesPrototype.cs b/Content.Shared/Random/RulesPrototype.cs index 6bbc3a68f8..20961af8e7 100644 --- a/Content.Shared/Random/RulesPrototype.cs +++ b/Content.Shared/Random/RulesPrototype.cs @@ -116,8 +116,8 @@ public sealed partial class NearbyAccessRule : RulesRule [DataField("count")] public int Count = 1; - [DataField("access", required: true, customTypeSerializer: typeof(PrototypeIdListSerializer))] - public List Access = new(); + [DataField("access", required: true)] + public List> Access = new(); [DataField("range")] public float Range = 10f; diff --git a/Content.Shared/Roles/JobPrototype.cs b/Content.Shared/Roles/JobPrototype.cs index 0064fcdf17..34a8ce64bf 100644 --- a/Content.Shared/Roles/JobPrototype.cs +++ b/Content.Shared/Roles/JobPrototype.cs @@ -105,17 +105,17 @@ namespace Content.Shared.Roles [DataField("special", serverOnly: true)] public JobSpecial[] Special { get; private set; } = Array.Empty(); - [DataField("access", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public IReadOnlyCollection Access { get; private set; } = Array.Empty(); + [DataField("access")] + public IReadOnlyCollection> Access { get; private set; } = Array.Empty>(); - [DataField("accessGroups", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public IReadOnlyCollection AccessGroups { get; private set; } = Array.Empty(); + [DataField("accessGroups")] + public IReadOnlyCollection> AccessGroups { get; private set; } = Array.Empty>(); - [DataField("extendedAccess", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public IReadOnlyCollection ExtendedAccess { get; private set; } = Array.Empty(); + [DataField("extendedAccess")] + public IReadOnlyCollection> ExtendedAccess { get; private set; } = Array.Empty>(); - [DataField("extendedAccessGroups", customTypeSerializer: typeof(PrototypeIdListSerializer))] - public IReadOnlyCollection ExtendedAccessGroups { get; private set; } = Array.Empty(); + [DataField("extendedAccessGroups")] + public IReadOnlyCollection> ExtendedAccessGroups { get; private set; } = Array.Empty>(); } /// diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml index 275a61d821..16713a6692 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door.yml @@ -7,9 +7,19 @@ - type: Sprite sprite: Objects/Misc/module.rsi state: door_electronics - - type: AccessReader - type: Tag tags: - DoorElectronics + - type: DoorElectronics - type: StaticPrice price: 55 + - type: AccessReader + - type: ActivatableUI + key: enum.DoorElectronicsConfigurationUiKey.Key + allowedItems: + tags: + - Multitool + - type: UserInterface + interfaces: + - key: enum.DoorElectronicsConfigurationUiKey.Key + type: DoorElectronicsBoundUserInterface diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml new file mode 100644 index 0000000000..fc6d8e2697 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/door_access.yml @@ -0,0 +1,264 @@ + +- type: entity + parent: DoorElectronics + id: DoorElectronicsService + suffix: Service, Locked + components: + - type: AccessReader + access: [["Service"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsTheatre + suffix: Theatre, Locked + components: + - type: AccessReader + access: [["Theatre"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsChapel + suffix: Chapel, Locked + components: + - type: AccessReader + access: [["Chapel"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsJanitor + suffix: Janitor, Locked + components: + - type: AccessReader + access: [["Janitor"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsKitchen + suffix: Kitchen, Locked + components: + - type: AccessReader + access: [["Kitchen"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsBar + suffix: Bar, Locked + components: + - type: AccessReader + access: [["Bar"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsHydroponics + suffix: Hydroponics, Locked + components: + - type: AccessReader + access: [["Hydroponics"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsCaptain + suffix: Captain, Locked + components: + - type: AccessReader + access: [["Captain"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsExternal + suffix: External, Locked + components: + - type: AccessReader + access: [["External"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsCargo + suffix: Cargo, Locked + components: + - type: AccessReader + access: [["Cargo"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsEngineering + suffix: Engineering, Locked + components: + - type: AccessReader + access: [["Engineering"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsAtmospherics + suffix: Atmospherics, Locked + components: + - type: AccessReader + access: [["Atmospherics"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsFreezer + suffix: Freezer, Locked + components: + - type: AccessReader + access: [["Kitchen"], ["Hydroponics"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsSalvage + suffix: Salvage, Locked + components: + - type: AccessReader + access: [["Salvage"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsMedical + suffix: Medical, Locked + components: + - type: AccessReader + access: [["Medical"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsChemistry + suffix: Chemistry, Locked + components: + - type: AccessReader + access: [["Chemistry"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsResearch + suffix: Research, Locked + components: + - type: AccessReader + access: [["Research"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsScience + suffix: Science, Locked + components: + - type: AccessReader + access: [["Research"], ["Medical"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsCommand + suffix: Command, Locked + components: + - type: AccessReader + access: [["Command"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsChiefMedicalOfficer + suffix: ChiefMedicalOfficer, Locked + components: + - type: AccessReader + access: [["ChiefMedicalOfficer"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsChiefEngineer + suffix: ChiefEngineer, Locked + components: + - type: AccessReader + access: [["ChiefEngineer"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsHeadOfSecurity + suffix: HeadOfSecurity, Locked + components: + - type: AccessReader + access: [["HeadOfSecurity"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsResearchDirector + suffix: ResearchDirector, Locked + components: + - type: AccessReader + access: [["ResearchDirector"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsHeadOfPersonnel + suffix: HeadOfPersonnel, Locked + components: + - type: AccessReader + access: [["HeadOfPersonnel"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsQuartermaster + suffix: Quartermaster, Locked + components: + - type: AccessReader + access: [["Quartermaster"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsSecurity + suffix: Security, Locked + components: + - type: AccessReader + access: [["Security"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsDetective + suffix: Detective, Locked + components: + - type: AccessReader + access: [["Detective"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsBrig + suffix: Brig, Locked + components: + - type: AccessReader + access: [["Brig"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsArmory + suffix: Armory, Locked + components: + - type: AccessReader + access: [["Armory"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsVault + suffix: Vault, Locked + components: + - type: AccessReader + access: [["Security", "Command"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsMaintenance + suffix: Maintenance, Locked + components: + - type: AccessReader + access: [["Maintenance"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsSyndicateAgent + suffix: SyndicateAgent, Locked + components: + - type: AccessReader + access: [["SyndicateAgent"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsRnDMed + suffix: Medical/Science, Locked + components: + - type: AccessReader + access: [["Research"], ["Medical"]] diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml index 7eed29ad56..8ffd18e7e2 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml @@ -4,10 +4,9 @@ id: AirlockServiceLocked suffix: Service, Locked components: - - type: AccessReader - access: [["Service"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsService ] - type: entity parent: Airlock @@ -24,108 +23,99 @@ id: AirlockTheatreLocked suffix: Theatre, Locked components: - - type: AccessReader - access: [["Theatre"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsTheatre ] - type: entity parent: Airlock id: AirlockChapelLocked suffix: Chapel, Locked components: - - type: AccessReader - access: [["Chapel"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsChapel ] - type: entity parent: Airlock id: AirlockJanitorLocked suffix: Janitor, Locked components: - - type: AccessReader - access: [["Janitor"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsJanitor ] - type: entity parent: Airlock id: AirlockKitchenLocked suffix: Kitchen, Locked components: - - type: AccessReader - access: [["Kitchen"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsKitchen ] - type: entity parent: Airlock id: AirlockBarLocked suffix: Bar, Locked components: - - type: AccessReader - access: [["Bar"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsBar ] - type: entity parent: Airlock id: AirlockHydroponicsLocked suffix: Hydroponics, Locked components: - - type: AccessReader - access: [["Hydroponics"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsHydroponics ] - type: entity parent: Airlock id: AirlockServiceCaptainLocked suffix: Captain, Locked components: - - type: AccessReader - access: [["Captain"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsCaptain ] - type: entity parent: AirlockExternal id: AirlockExternalLocked suffix: External, Locked components: - - type: AccessReader - access: [["External"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] - type: entity parent: AirlockExternal id: AirlockExternalCargoLocked suffix: External, Cargo, Locked components: - - type: AccessReader - access: [["Cargo"]] - - type: Wires - layoutId: AirlockCargo + - type: ContainerFill + containers: + board: [ DoorElectronicsCargo ] - type: entity parent: AirlockExternal id: AirlockExternalEngineeringLocked suffix: External, Engineering, Locked components: - - type: AccessReader - access: [["Engineering"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: AirlockExternal id: AirlockExternalAtmosphericsLocked suffix: External, Atmospherics, Locked components: - - type: AccessReader - access: [["Atmospherics"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsAtmospherics ] - type: entity parent: AirlockExternal @@ -148,20 +138,18 @@ id: AirlockFreezerLocked suffix: Kitchen, Locked components: - - type: AccessReader - access: [["Kitchen"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsKitchen ] - type: entity parent: AirlockFreezer id: AirlockFreezerKitchenHydroLocked suffix: Kitchen/Hydroponics, Locked components: - - type: AccessReader - access: [["Kitchen"], ["Hydroponics"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsFreezer ] - type: entity parent: AirlockFreezer @@ -178,40 +166,36 @@ id: AirlockEngineeringLocked suffix: Engineering, Locked components: - - type: AccessReader - access: [["Engineering"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: AirlockAtmospherics id: AirlockAtmosphericsLocked suffix: Atmospherics, Locked components: - - type: AccessReader - access: [["Atmospherics"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsAtmospherics ] - type: entity parent: AirlockCargo id: AirlockCargoLocked suffix: Cargo, Locked components: - - type: AccessReader - access: [["Cargo"]] - - type: Wires - layoutId: AirlockCargo + - type: ContainerFill + containers: + board: [ DoorElectronicsCargo ] - type: entity parent: AirlockCargo id: AirlockSalvageLocked suffix: Salvage, Locked components: - - type: AccessReader - access: [["Salvage"]] - - type: Wires - layoutId: AirlockCargo + - type: ContainerFill + containers: + board: [ DoorElectronicsSalvage ] - type: entity parent: AirlockMining @@ -228,50 +212,45 @@ id: AirlockMedicalLocked suffix: Medical, Locked components: - - type: AccessReader - access: [["Medical"]] - - type: Wires - layoutId: AirlockMedical + - type: ContainerFill + containers: + board: [ DoorElectronicsMedical ] - type: entity parent: AirlockVirology id: AirlockVirologyLocked suffix: Virology, Locked components: - - type: AccessReader - access: [["Medical"]] - - type: Wires - layoutId: AirlockMedical + - type: ContainerFill + containers: + board: [ DoorElectronicsMedical ] - type: entity parent: AirlockChemistry id: AirlockChemistryLocked suffix: Chemistry, Locked components: - - type: AccessReader - access: [["Chemistry"]] - - type: Wires - layoutId: AirlockMedical + - type: ContainerFill + containers: + board: [ DoorElectronicsChemistry ] - type: entity parent: AirlockScience id: AirlockScienceLocked suffix: Science, Locked components: - - type: AccessReader - access: [["Research"]] - - type: Wires - layoutId: AirlockScience + - type: ContainerFill + containers: + board: [ DoorElectronicsResearch ] - type: entity parent: AirlockScience id: AirlockMedicalScienceLocked suffix: Medical/Science, Locked components: - - type: AccessReader - access: [["Research"], ["Medical"]] - - type: Wires - layoutId: AirlockScience + - type: ContainerFill + containers: + board: [ DoorElectronicsScience ] - type: entity parent: AirlockCentralCommand @@ -288,8 +267,9 @@ id: AirlockCommandLocked suffix: Command, Locked components: - - type: AccessReader - access: [["Command"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCommand ] - type: Wires layoutId: AirlockCommand @@ -298,78 +278,72 @@ id: AirlockCaptainLocked suffix: Captain, Locked components: - - type: AccessReader - access: [["Captain"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsCaptain ] - type: entity parent: AirlockCommand id: AirlockChiefMedicalOfficerLocked suffix: ChiefMedicalOfficer, Locked components: - - type: AccessReader - access: [["ChiefMedicalOfficer"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefMedicalOfficer ] - type: entity parent: AirlockCommand id: AirlockChiefEngineerLocked suffix: ChiefEngineer, Locked components: - - type: AccessReader - access: [["ChiefEngineer"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefEngineer ] - type: entity parent: AirlockCommand id: AirlockHeadOfSecurityLocked suffix: HeadOfSecurity, Locked components: - - type: AccessReader - access: [["HeadOfSecurity"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsHeadOfSecurity ] - type: entity parent: AirlockCommand id: AirlockResearchDirectorLocked suffix: ResearchDirector, Locked components: - - type: AccessReader - access: [["ResearchDirector"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsResearchDirector ] - type: entity parent: AirlockCommand id: AirlockHeadOfPersonnelLocked suffix: HeadOfPersonnel, Locked components: - - type: AccessReader - access: [["HeadOfPersonnel"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsHeadOfPersonnel ] - type: entity parent: AirlockCommand id: AirlockQuartermasterLocked suffix: Quartermaster, Locked components: - - type: AccessReader - access: [["Quartermaster"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsQuartermaster ] - type: entity parent: AirlockSecurity id: AirlockSecurityLocked suffix: Security, Locked components: - - type: AccessReader - access: [["Security"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsSecurity ] - type: Wires layoutId: AirlockSecurity @@ -378,8 +352,9 @@ id: AirlockDetectiveLocked suffix: Detective, Locked components: - - type: AccessReader - access: [["Detective"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsDetective ] - type: Wires layoutId: AirlockSecurity @@ -388,8 +363,9 @@ id: AirlockBrigLocked suffix: Brig, Locked components: - - type: AccessReader - access: [["Brig"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsBrig ] - type: Wires layoutId: AirlockSecurity @@ -408,8 +384,9 @@ id: AirlockArmoryLocked suffix: Armory, Locked components: - - type: AccessReader - access: [["Armory"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsArmory ] - type: Wires layoutId: AirlockArmory @@ -418,20 +395,18 @@ id: AirlockVaultLocked suffix: Vault, Locked components: - - type: AccessReader - access: [["Security", "Command"]] - - type: Wires - layoutId: AirlockSecurity + - type: ContainerFill + containers: + board: [ DoorElectronicsVault ] - type: entity parent: AirlockCommand id: AirlockEVALocked suffix: EVA, Locked components: - - type: AccessReader - access: [["External"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] # Glass Airlocks - type: entity @@ -439,10 +414,9 @@ id: AirlockServiceGlassLocked suffix: Service, Locked components: - - type: AccessReader - access: [["Service"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsService ] - type: entity parent: AirlockGlass @@ -469,28 +443,27 @@ id: AirlockBarGlassLocked suffix: Bar, Locked components: - - type: AccessReader - access: [["Bar"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsBar ] - type: entity parent: AirlockExternalGlass id: AirlockExternalGlassLocked suffix: External, Glass, Locked components: - - type: AccessReader - access: [["External"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] - type: entity parent: AirlockExternalGlass id: AirlockExternalGlassCargoLocked suffix: External, Glass, Cargo, Locked components: - - type: AccessReader - access: [["Cargo"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsCargo ] - type: entity parent: AirlockExternalGlass @@ -513,30 +486,27 @@ id: AirlockExternalGlassEngineeringLocked suffix: External, Glass, Engineering, Locked components: - - type: AccessReader - access: [["Engineering"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: AirlockExternalGlass id: AirlockExternalGlassAtmosphericsLocked suffix: External, Glass, Atmospherics, Locked components: - - type: AccessReader - access: [["Atmospherics"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsAtmospherics ] - type: entity parent: AirlockGlass id: AirlockKitchenGlassLocked suffix: Kitchen, Locked components: - - type: AccessReader - access: [["Kitchen"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsKitchen ] - type: entity parent: AirlockGlass @@ -553,60 +523,54 @@ id: AirlockHydroGlassLocked suffix: Hydroponics, Locked components: - - type: AccessReader - access: [["Hydroponics"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsHydroponics ] - type: entity parent: AirlockGlass id: AirlockChapelGlassLocked suffix: Chapel, Locked components: - - type: AccessReader - access: [["Chapel"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsChapel ] - type: entity parent: AirlockEngineeringGlass id: AirlockEngineeringGlassLocked suffix: Engineering, Locked components: - - type: AccessReader - access: [["Engineering"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: AirlockAtmosphericsGlass id: AirlockAtmosphericsGlassLocked suffix: Atmospherics, Locked components: - - type: AccessReader - access: [["Atmospherics"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsAtmospherics ] - type: entity parent: AirlockCargoGlass id: AirlockCargoGlassLocked suffix: Cargo, Locked components: - - type: AccessReader - access: [["Cargo"]] - - type: Wires - layoutId: AirlockCargo + - type: ContainerFill + containers: + board: [ DoorElectronicsCargo ] - type: entity parent: AirlockCargoGlass id: AirlockSalvageGlassLocked suffix: Salvage, Locked components: - - type: AccessReader - access: [["Salvage"]] - - type: Wires - layoutId: AirlockCargo + - type: ContainerFill + containers: + board: [ DoorElectronicsSalvage ] - type: entity parent: AirlockMiningGlass @@ -633,40 +597,36 @@ id: AirlockMedicalGlassLocked suffix: Medical, Locked components: - - type: AccessReader - access: [["Medical"]] - - type: Wires - layoutId: AirlockMedical + - type: ContainerFill + containers: + board: [ DoorElectronicsMedical ] - type: entity parent: AirlockVirologyGlass id: AirlockVirologyGlassLocked suffix: Virology, Locked components: - - type: AccessReader - access: [["Medical"]] - - type: Wires - layoutId: AirlockMedical + - type: ContainerFill + containers: + board: [ DoorElectronicsMedical ] - type: entity parent: AirlockScienceGlass id: AirlockScienceGlassLocked suffix: Science, Locked components: - - type: AccessReader - access: [["Research"]] - - type: Wires - layoutId: AirlockScience + - type: ContainerFill + containers: + board: [ DoorElectronicsResearch ] - type: entity parent: AirlockScienceGlass id: AirlockMedicalScienceGlassLocked suffix: Medical/Science, Locked components: - - type: AccessReader - access: [["Research"], ["Medical"]] - - type: Wires - layoutId: AirlockScience + - type: ContainerFill + containers: + board: [ DoorElectronicsScience ] - type: entity parent: AirlockCentralCommandGlass @@ -683,110 +643,99 @@ id: AirlockCommandGlassLocked suffix: Command, Locked components: - - type: AccessReader - access: [["Command"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsCommand ] - type: entity parent: AirlockCommandGlass id: AirlockCaptainGlassLocked suffix: Captain, Locked components: - - type: AccessReader - access: [["Captain"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsCaptain ] - type: entity parent: AirlockCommandGlass id: AirlockChiefMedicalOfficerGlassLocked suffix: ChiefMedicalOfficer, Locked components: - - type: AccessReader - access: [["ChiefMedicalOfficer"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefMedicalOfficer ] - type: entity parent: AirlockCommandGlass id: AirlockChiefEngineerGlassLocked suffix: ChiefEngineer, Locked components: - - type: AccessReader - access: [["ChiefEngineer"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsChiefEngineer ] - type: entity parent: AirlockCommandGlass id: AirlockHeadOfSecurityGlassLocked suffix: HeadOfSecurity, Locked components: - - type: AccessReader - access: [["HeadOfSecurity"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsHeadOfSecurity ] - type: entity parent: AirlockCommandGlass id: AirlockResearchDirectorGlassLocked suffix: ResearchDirector, Locked components: - - type: AccessReader - access: [["ResearchDirector"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsResearchDirector ] - type: entity parent: AirlockCommandGlass id: AirlockHeadOfPersonnelGlassLocked suffix: HeadOfPersonnel, Locked components: - - type: AccessReader - access: [["HeadOfPersonnel"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsHeadOfPersonnel ] - type: entity parent: AirlockCommandGlass id: AirlockQuartermasterGlassLocked suffix: Quartermaster, Locked components: - - type: AccessReader - access: [["Quartermaster"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsQuartermaster ] - type: entity parent: AirlockSecurityGlass id: AirlockSecurityGlassLocked suffix: Security, Locked components: - - type: AccessReader - access: [["Security"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsSecurity ] - type: entity parent: AirlockSecurityGlass id: AirlockDetectiveGlassLocked suffix: Detective, Locked components: - - type: AccessReader - access: [["Detective"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsDetective ] - type: entity parent: AirlockSecurityGlass id: AirlockBrigGlassLocked suffix: Brig, Locked components: - - type: AccessReader - access: [["Brig"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsBrig ] - type: entity parent: AirlockSecurityGlass @@ -803,18 +752,18 @@ id: AirlockArmoryGlassLocked suffix: Armory, Locked components: - - type: AccessReader - access: [["Armory"]] - - type: Wires - layoutId: AirlockSecurity + - type: ContainerFill + containers: + board: [ DoorElectronicsArmory ] - type: entity parent: AirlockCommandGlassLocked id: AirlockEVAGlassLocked suffix: EVA, Locked components: - - type: AccessReader - access: [["External"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] - type: entity parent: AirlockSyndicateGlass @@ -838,114 +787,108 @@ id: AirlockMaintLocked suffix: Locked components: - - type: AccessReader - access: [["Maintenance"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsMaintenance ] - type: entity parent: AirlockMaintGlass id: AirlockMaintGlassLocked suffix: Locked components: - - type: AccessReader - access: [["Maintenance"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsMaintenance ] - type: entity parent: AirlockMaint id: AirlockMaintSalvageLocked suffix: Salvage, Locked components: - - type: AccessReader - access: [["Salvage"]] - - type: Wires - layoutId: AirlockCargo + - type: ContainerFill + containers: + board: [ DoorElectronicsSalvage ] - type: entity parent: AirlockMaint id: AirlockMaintCargoLocked suffix: Cargo, Locked components: - - type: AccessReader - access: [["Cargo"]] - - type: Wires - layoutId: AirlockCargo + - type: ContainerFill + containers: + board: [ DoorElectronicsCargo ] - type: entity parent: AirlockMaint id: AirlockMaintCommandLocked suffix: Command, Locked components: - - type: AccessReader - access: [["Command"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsCommand ] - type: entity parent: AirlockMaint id: AirlockMaintCommonLocked suffix: Common, Locked components: - - type: AccessReader - access: [["Maintenance"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsMaintenance ] - type: entity parent: AirlockMaint id: AirlockMaintEngiLocked suffix: Engineering, Locked components: - - type: AccessReader - access: [["Engineering"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsEngineering ] - type: entity parent: AirlockMaint id: AirlockMaintAtmoLocked suffix: Atmospherics, Locked components: - - type: AccessReader - access: [["Atmospherics"]] - - type: Wires - layoutId: AirlockEngineering + - type: ContainerFill + containers: + board: [ DoorElectronicsAtmospherics ] - type: entity parent: AirlockMaint id: AirlockMaintBarLocked suffix: Bar, Locked components: - - type: AccessReader - access: [["Bar"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsBar ] - type: entity parent: AirlockMaint id: AirlockMaintChapelLocked suffix: Chapel, Locked components: - - type: AccessReader - access: [["Chapel"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsChapel ] - type: entity parent: AirlockMaint id: AirlockMaintHydroLocked suffix: Hydroponics, Locked components: - - type: AccessReader - access: [["Hydroponics"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsHydroponics ] - type: entity parent: AirlockMaint id: AirlockMaintJanitorLocked suffix: Janitor, Locked components: - - type: AccessReader - access: [["Janitor"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsJanitor ] - type: entity parent: AirlockMaint @@ -972,108 +915,99 @@ id: AirlockMaintTheatreLocked suffix: Theatre, Locked components: - - type: AccessReader - access: [["Theatre"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsTheatre ] - type: entity parent: AirlockMaint id: AirlockMaintKitchenLocked suffix: Kitchen, Locked components: - - type: AccessReader - access: [["Kitchen"]] - - type: Wires - layoutId: AirlockService + - type: ContainerFill + containers: + board: [ DoorElectronicsKitchen ] - type: entity parent: AirlockMaint id: AirlockMaintIntLocked suffix: Interior, Locked components: - - type: AccessReader - access: [["Maintenance"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsMaintenance ] - type: entity parent: AirlockMaint id: AirlockMaintMedLocked suffix: Medical, Locked components: - - type: AccessReader - access: [["Medical"]] - - type: Wires - layoutId: AirlockMedical + - type: ContainerFill + containers: + board: [ DoorElectronicsMedical ] - type: entity parent: AirlockMaint id: AirlockMaintChemLocked suffix: Chemistry, Locked components: - - type: AccessReader - access: [["Chemistry"]] - - type: Wires - layoutId: AirlockMedical + - type: ContainerFill + containers: + board: [ DoorElectronicsChemistry ] - type: entity parent: AirlockMaint id: AirlockMaintRnDLocked suffix: Science, Locked components: - - type: AccessReader - access: [["Research"]] - - type: Wires - layoutId: AirlockScience + - type: ContainerFill + containers: + board: [ DoorElectronicsResearch ] - type: entity parent: AirlockMaint id: AirlockMaintRnDMedLocked suffix: Medical/Science, Locked components: - - type: AccessReader - access: [["Research"], ["Medical"]] - - type: Wires - layoutId: AirlockScience + - type: ContainerFill + containers: + board: [ DoorElectronicsRnDMed ] - type: entity parent: AirlockMaint id: AirlockMaintSecLocked suffix: Security, Locked components: - - type: AccessReader - access: [["Security"]] - - type: Wires - layoutId: AirlockSecurity + - type: ContainerFill + containers: + board: [ DoorElectronicsSecurity ] - type: entity parent: AirlockMaint id: AirlockMaintDetectiveLocked suffix: Detective, Locked components: - - type: AccessReader - access: [["Detective"]] - - type: Wires - layoutId: AirlockSecurity + - type: ContainerFill + containers: + board: [ DoorElectronicsDetective ] - type: entity parent: AirlockMaint id: AirlockMaintHOPLocked suffix: HeadOfPersonnel, Locked components: - - type: AccessReader - access: [["HeadOfPersonnel"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsHeadOfPersonnel ] - type: entity parent: AirlockMaint id: AirlockMaintCaptainLocked suffix: Captain, Locked components: - - type: AccessReader - access: [["Captain"]] - - type: Wires - layoutId: AirlockCommand + - type: ContainerFill + containers: + board: [ DoorElectronicsCaptain ] - type: entity parent: AirlockMaint @@ -1147,8 +1081,9 @@ id: AirlockExternalShuttleLocked suffix: External, Docking, Locked components: - - type: AccessReader - access: [["External"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] - type: entity parent: AirlockShuttleSyndicate @@ -1171,8 +1106,9 @@ id: AirlockExternalGlassShuttleLocked suffix: External, Glass, Docking, Locked components: - - type: AccessReader - access: [["External"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] - type: entity parent: AirlockGlassShuttleSyndicate @@ -1197,8 +1133,9 @@ components: - type: PriorityDock tag: DockEmergency - - type: AccessReader - access: [["External"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsExternal ] - type: entity parent: AirlockGlassShuttle @@ -1229,24 +1166,27 @@ id: HighSecCommandLocked suffix: Command, Locked components: - - type: AccessReader - access: [["Command"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCommand ] - type: entity parent: HighSecDoor id: HighSecCaptainLocked suffix: Captain, Locked components: - - type: AccessReader - access: [["Captain"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsCaptain ] - type: entity parent: HighSecDoor id: HighSecArmoryLocked suffix: Armory, Locked components: - - type: AccessReader - access: [["Armory"]] + - type: ContainerFill + containers: + board: [ DoorElectronicsArmory ] #Airtight hatch @@ -1255,6 +1195,6 @@ id: AirlockHatchSyndicate suffix: Syndicate, Locked components: - - type: AccessReader - access: [["SyndicateAgent"]] - + - type: ContainerFill + containers: + board: [ DoorElectronicsSyndicateAgent ] diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index abc86b2be8..4ca7df6482 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -48,6 +48,8 @@ - type: ContainerFill containers: board: [ DoorElectronics ] + - type: AccessReader + containerAccessProvider: board - type: Door crushDamage: types: @@ -140,7 +142,6 @@ - type: PaintableAirlock group: Standard department: Civilian - - type: AccessReader - type: StaticPrice price: 150 - type: LightningTarget diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml index a26226c957..e9ea05a1c3 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml @@ -60,6 +60,7 @@ - type: NavMapDoor - type: DoorBolt - type: AccessReader + containerAccessProvider: board - type: Appearance - type: WiresVisuals - type: ApcPowerReceiver diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml index 3cd22bbfc7..5529514fdc 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml @@ -46,7 +46,7 @@ conditions: - !type:EntityAnchored {} steps: - - tag: DoorElectronics + - component: DoorElectronics store: board name: "door electronics circuit board" icon: diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/shutter.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/shutter.yml index 70d1c12d84..db53de288a 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/shutter.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/shutter.yml @@ -44,7 +44,7 @@ - !type:EntityAnchored anchored: true steps: - - tag: DoorElectronics + - component: DoorElectronics name: Door Electronics icon: sprite: "Objects/Misc/module.rsi" diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/shuttle.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/shuttle.yml index 457fbfede5..f29629043d 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/shuttle.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/shuttle.yml @@ -23,7 +23,7 @@ conditions: - !type:EntityAnchored {} steps: - - tag: DoorElectronics + - component: DoorElectronics store: board name: "door electronics circuit board" icon: diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/windoor.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/windoor.yml index 64809ee1db..de89663467 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/windoor.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/windoor.yml @@ -107,7 +107,7 @@ conditions: - !type:EntityAnchored {} steps: - - tag: DoorElectronics + - component: DoorElectronics store: board name: "door electronics circuit board" icon: @@ -378,7 +378,7 @@ conditions: - !type:EntityAnchored { } steps: - - tag: DoorElectronics + - component: DoorElectronics store: board name: "door electronics circuit board" icon: From d9b6e9f1276ac0e589b95e664e371675feb498da Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 06:07:20 +0000 Subject: [PATCH 086/206] 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 bccb6798b4..946856290a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Krunk - changes: - - message: Paper cups can now be worn as party hats! - type: Add - id: 5784 - time: '2024-01-25T01:02:33.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24334 - author: Blackern5000 changes: - message: Botany's hatchet, spade, and hoe have received a damage decrease to 10, @@ -3807,3 +3800,11 @@ id: 6283 time: '2024-04-01T04:50:00.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/23240 +- author: kseandi + changes: + - message: NT has declassified the documentation for door electronics, now anyone + can configure its access using network configurator or multitool. + type: Add + id: 6284 + time: '2024-04-01T06:06:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/17778 From 1db178b63254c5b509a6493a631fddb596b376a4 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Mon, 1 Apr 2024 06:27:39 +0000 Subject: [PATCH 087/206] scoopable ash and foam, solution transfer prediction (#25832) * move SolutionTransfer to shared and predict as much as possible * fully move OpenableSystem to shared now that SolutionTransfer is * fix imports for everything * doc for solution transfer system * trolling * add scoopable system * make ash and foam scoopable * untroll * untroll real * make clickable it work * troll * the scooping room --------- Co-authored-by: deltanedas <@deltanedas:kde.org> Co-authored-by: metalgearsloth --- .../Nutrition/EntitySystems/OpenableSystem.cs | 7 - .../EntitySystems/ReagentDispenserSystem.cs | 3 +- .../EntitySystems/SolutionTransferSystem.cs | 234 ------------------ .../Thresholds/Behaviors/OpenBehavior.cs | 2 +- .../Extinguisher/FireExtinguisherSystem.cs | 1 + .../EntitySystems/PuddleSystem.Spillable.cs | 3 +- Content.Server/Glue/GlueSystem.cs | 2 +- Content.Server/Lube/LubeSystem.cs | 2 +- .../Materials/MaterialReclaimerSystem.cs | 4 +- .../NPC/Systems/NPCUtilitySystem.cs | 1 + .../Nutrition/EntitySystems/DrinkSystem.cs | 1 + .../Nutrition/EntitySystems/FoodSystem.cs | 1 + .../Nutrition/EntitySystems/OpenableSystem.cs | 27 -- .../Components/ScoopableSolutionComponent.cs | 31 +++ .../EntitySystems/ScoopableSolutionSystem.cs | 53 ++++ .../EntitySystems/SolutionTransferSystem.cs | 223 +++++++++++++++++ .../Fluids/SharedPuddleSystem.Spillable.cs | 2 +- .../Nutrition/Components/OpenableComponent.cs | 2 +- ...redOpenableSystem.cs => OpenableSystem.cs} | 13 +- .../Nutrition/EntitySystems/SealableSystem.cs | 2 +- .../components/scoopable-component.ftl | 1 + .../Entities/Effects/chemistry_effects.yml | 3 + .../Objects/Specific/Medical/morgue.yml | 2 + 23 files changed, 341 insertions(+), 279 deletions(-) delete mode 100644 Content.Client/Nutrition/EntitySystems/OpenableSystem.cs delete mode 100644 Content.Server/Chemistry/EntitySystems/SolutionTransferSystem.cs delete mode 100644 Content.Server/Nutrition/EntitySystems/OpenableSystem.cs create mode 100644 Content.Shared/Chemistry/Components/ScoopableSolutionComponent.cs create mode 100644 Content.Shared/Chemistry/EntitySystems/ScoopableSolutionSystem.cs create mode 100644 Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs rename Content.Shared/Nutrition/EntitySystems/{SharedOpenableSystem.cs => OpenableSystem.cs} (91%) create mode 100644 Resources/Locale/en-US/chemistry/components/scoopable-component.ftl diff --git a/Content.Client/Nutrition/EntitySystems/OpenableSystem.cs b/Content.Client/Nutrition/EntitySystems/OpenableSystem.cs deleted file mode 100644 index f8c3f7c447..0000000000 --- a/Content.Client/Nutrition/EntitySystems/OpenableSystem.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Content.Shared.Nutrition.EntitySystems; - -namespace Content.Client.Nutrition.EntitySystems; - -public sealed class OpenableSystem : SharedOpenableSystem -{ -} diff --git a/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs b/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs index a8583e6bcb..d6433da56a 100644 --- a/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ReagentDispenserSystem.cs @@ -1,11 +1,12 @@ using Content.Server.Chemistry.Components; using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Nutrition.EntitySystems; +using Content.Server.Nutrition.Components; using Content.Shared.Chemistry; using Content.Shared.Chemistry.Dispenser; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Containers.ItemSlots; using Content.Shared.FixedPoint; +using Content.Shared.Nutrition.EntitySystems; using JetBrains.Annotations; using Robust.Server.Audio; using Robust.Server.GameObjects; diff --git a/Content.Server/Chemistry/EntitySystems/SolutionTransferSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionTransferSystem.cs deleted file mode 100644 index 1ed5cec8dd..0000000000 --- a/Content.Server/Chemistry/EntitySystems/SolutionTransferSystem.cs +++ /dev/null @@ -1,234 +0,0 @@ -using Content.Server.Administration.Logs; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Shared.Chemistry; -using Content.Shared.Chemistry.Components; -using Content.Shared.Database; -using Content.Shared.FixedPoint; -using Content.Shared.Interaction; -using Content.Shared.Popups; -using Content.Shared.Verbs; -using JetBrains.Annotations; -using Robust.Server.GameObjects; -using Robust.Shared.Player; - -namespace Content.Server.Chemistry.EntitySystems -{ - [UsedImplicitly] - public sealed class SolutionTransferSystem : EntitySystem - { - [Dependency] private readonly SharedPopupSystem _popupSystem = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; - [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; - [Dependency] private readonly IAdminLogManager _adminLogger = default!; - - /// - /// Default transfer amounts for the set-transfer verb. - /// - public static readonly List DefaultTransferAmounts = new() { 1, 5, 10, 25, 50, 100, 250, 500, 1000 }; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent>(AddSetTransferVerbs); - SubscribeLocalEvent(OnAfterInteract); - SubscribeLocalEvent(OnTransferAmountSetValueMessage); - } - - private void OnTransferAmountSetValueMessage(Entity entity, ref TransferAmountSetValueMessage message) - { - var newTransferAmount = FixedPoint2.Clamp(message.Value, entity.Comp.MinimumTransferAmount, entity.Comp.MaximumTransferAmount); - entity.Comp.TransferAmount = newTransferAmount; - - if (message.Session.AttachedEntity is { Valid: true } user) - _popupSystem.PopupEntity(Loc.GetString("comp-solution-transfer-set-amount", ("amount", newTransferAmount)), entity.Owner, user); - } - - private void AddSetTransferVerbs(Entity entity, ref GetVerbsEvent args) - { - var (uid, component) = entity; - - if (!args.CanAccess || !args.CanInteract || !component.CanChangeTransferAmount || args.Hands == null) - return; - - if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) - return; - - // Custom transfer verb - AlternativeVerb custom = new(); - custom.Text = Loc.GetString("comp-solution-transfer-verb-custom-amount"); - custom.Category = VerbCategory.SetTransferAmount; - custom.Act = () => _userInterfaceSystem.TryOpen(uid, TransferAmountUiKey.Key, actor.PlayerSession); - custom.Priority = 1; - args.Verbs.Add(custom); - - // Add specific transfer verbs according to the container's size - var priority = 0; - var user = args.User; - foreach (var amount in DefaultTransferAmounts) - { - if (amount < component.MinimumTransferAmount.Int() || amount > component.MaximumTransferAmount.Int()) - continue; - - AlternativeVerb verb = new(); - verb.Text = Loc.GetString("comp-solution-transfer-verb-amount", ("amount", amount)); - verb.Category = VerbCategory.SetTransferAmount; - verb.Act = () => - { - component.TransferAmount = FixedPoint2.New(amount); - _popupSystem.PopupEntity(Loc.GetString("comp-solution-transfer-set-amount", ("amount", amount)), uid, user); - }; - - // we want to sort by size, not alphabetically by the verb text. - verb.Priority = priority; - priority--; - - args.Verbs.Add(verb); - } - } - - private void OnAfterInteract(Entity entity, ref AfterInteractEvent args) - { - if (!args.CanReach || args.Target == null) - return; - - var target = args.Target!.Value; - var (uid, component) = entity; - - //Special case for reagent tanks, because normally clicking another container will give solution, not take it. - if (component.CanReceive && !EntityManager.HasComponent(target) // target must not be refillable (e.g. Reagent Tanks) - && _solutionContainerSystem.TryGetDrainableSolution(target, out var targetSoln, out _) // target must be drainable - && EntityManager.TryGetComponent(uid, out RefillableSolutionComponent? refillComp) - && _solutionContainerSystem.TryGetRefillableSolution((uid, refillComp, null), out var ownerSoln, out var ownerRefill)) - - { - - var transferAmount = component.TransferAmount; // This is the player-configurable transfer amount of "uid," not the target reagent tank. - - if (EntityManager.TryGetComponent(uid, out RefillableSolutionComponent? refill) && refill.MaxRefill != null) // uid is the entity receiving solution from target. - { - transferAmount = FixedPoint2.Min(transferAmount, (FixedPoint2) refill.MaxRefill); // if the receiver has a smaller transfer limit, use that instead - } - - var transferred = Transfer(args.User, target, targetSoln.Value, uid, ownerSoln.Value, transferAmount); - if (transferred > 0) - { - var toTheBrim = ownerRefill.AvailableVolume == 0; - var msg = toTheBrim - ? "comp-solution-transfer-fill-fully" - : "comp-solution-transfer-fill-normal"; - - _popupSystem.PopupEntity(Loc.GetString(msg, ("owner", args.Target), ("amount", transferred), ("target", uid)), uid, args.User); - - args.Handled = true; - return; - } - } - - // if target is refillable, and owner is drainable - if (component.CanSend && _solutionContainerSystem.TryGetRefillableSolution(target, out targetSoln, out var targetRefill) - && _solutionContainerSystem.TryGetDrainableSolution(uid, out ownerSoln, out var ownerDrain)) - { - var transferAmount = component.TransferAmount; - - if (EntityManager.TryGetComponent(target, out RefillableSolutionComponent? refill) && refill.MaxRefill != null) - { - transferAmount = FixedPoint2.Min(transferAmount, (FixedPoint2) refill.MaxRefill); - } - - var transferred = Transfer(args.User, uid, ownerSoln.Value, target, targetSoln.Value, transferAmount); - - if (transferred > 0) - { - var message = Loc.GetString("comp-solution-transfer-transfer-solution", ("amount", transferred), ("target", target)); - _popupSystem.PopupEntity(message, uid, args.User); - - args.Handled = true; - } - } - } - - /// - /// Transfer from a solution to another. - /// - /// The actual amount transferred. - public FixedPoint2 Transfer(EntityUid user, - EntityUid sourceEntity, - Entity source, - EntityUid targetEntity, - Entity target, - FixedPoint2 amount) - { - var transferAttempt = new SolutionTransferAttemptEvent(sourceEntity, targetEntity); - - // Check if the source is cancelling the transfer - RaiseLocalEvent(sourceEntity, transferAttempt, broadcast: true); - if (transferAttempt.Cancelled) - { - _popupSystem.PopupEntity(transferAttempt.CancelReason!, sourceEntity, user); - return FixedPoint2.Zero; - } - - var sourceSolution = source.Comp.Solution; - if (sourceSolution.Volume == 0) - { - _popupSystem.PopupEntity(Loc.GetString("comp-solution-transfer-is-empty", ("target", sourceEntity)), sourceEntity, user); - return FixedPoint2.Zero; - } - - // Check if the target is cancelling the transfer - RaiseLocalEvent(targetEntity, transferAttempt, broadcast: true); - if (transferAttempt.Cancelled) - { - _popupSystem.PopupEntity(transferAttempt.CancelReason!, sourceEntity, user); - return FixedPoint2.Zero; - } - - var targetSolution = target.Comp.Solution; - if (targetSolution.AvailableVolume == 0) - { - _popupSystem.PopupEntity(Loc.GetString("comp-solution-transfer-is-full", ("target", targetEntity)), targetEntity, user); - return FixedPoint2.Zero; - } - - var actualAmount = FixedPoint2.Min(amount, FixedPoint2.Min(sourceSolution.Volume, targetSolution.AvailableVolume)); - - var solution = _solutionContainerSystem.Drain(sourceEntity, source, actualAmount); - _solutionContainerSystem.Refill(targetEntity, target, solution); - - _adminLogger.Add(LogType.Action, LogImpact.Medium, - $"{EntityManager.ToPrettyString(user):player} transferred {string.Join(", ", solution.Contents)} to {EntityManager.ToPrettyString(targetEntity):entity}, which now contains {SolutionContainerSystem.ToPrettyString(targetSolution)}"); - - return actualAmount; - } - } - - /// - /// Raised when attempting to transfer from one solution to another. - /// - public sealed class SolutionTransferAttemptEvent : CancellableEntityEventArgs - { - public SolutionTransferAttemptEvent(EntityUid from, EntityUid to) - { - From = from; - To = to; - } - - public EntityUid From { get; } - public EntityUid To { get; } - - /// - /// Why the transfer has been cancelled. - /// - public string? CancelReason { get; private set; } - - /// - /// Cancels the transfer. - /// - public void Cancel(string reason) - { - base.Cancel(); - CancelReason = reason; - } - } -} diff --git a/Content.Server/Destructible/Thresholds/Behaviors/OpenBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/OpenBehavior.cs index f01e4f7048..7ab1fe11b0 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/OpenBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/OpenBehavior.cs @@ -1,4 +1,4 @@ -using Content.Server.Nutrition.EntitySystems; +using Content.Shared.Nutrition.EntitySystems; namespace Content.Server.Destructible.Thresholds.Behaviors; diff --git a/Content.Server/Extinguisher/FireExtinguisherSystem.cs b/Content.Server/Extinguisher/FireExtinguisherSystem.cs index dfecd72398..b33a1af157 100644 --- a/Content.Server/Extinguisher/FireExtinguisherSystem.cs +++ b/Content.Server/Extinguisher/FireExtinguisherSystem.cs @@ -73,6 +73,7 @@ public sealed class FireExtinguisherSystem : EntitySystem args.Handled = true; + // TODO: why is this copy paste shit here just have fire extinguisher cancel transfer when safety is on var transfer = containerSolution.AvailableVolume; if (TryComp(entity.Owner, out var solTrans)) { diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs index a365b8d0a4..bd7c55e85e 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs @@ -1,5 +1,5 @@ using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Nutrition.EntitySystems; +using Content.Server.Fluids.Components; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reaction; @@ -11,6 +11,7 @@ using Content.Shared.FixedPoint; using Content.Shared.Fluids.Components; using Content.Shared.IdentityManagement; using Content.Shared.Inventory.Events; +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Popups; using Content.Shared.Spillable; using Content.Shared.Throwing; diff --git a/Content.Server/Glue/GlueSystem.cs b/Content.Server/Glue/GlueSystem.cs index 44ff4e5459..ff53ef91ca 100644 --- a/Content.Server/Glue/GlueSystem.cs +++ b/Content.Server/Glue/GlueSystem.cs @@ -1,12 +1,12 @@ using Content.Server.Administration.Logs; using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Nutrition.EntitySystems; using Content.Shared.Database; using Content.Shared.Glue; using Content.Shared.Hands; using Content.Shared.Interaction; using Content.Shared.Interaction.Components; using Content.Shared.Item; +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Popups; using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/Lube/LubeSystem.cs b/Content.Server/Lube/LubeSystem.cs index 5285cb389c..06d6456a57 100644 --- a/Content.Server/Lube/LubeSystem.cs +++ b/Content.Server/Lube/LubeSystem.cs @@ -1,12 +1,12 @@ using Content.Server.Administration.Logs; using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Nutrition.EntitySystems; using Content.Shared.Database; using Content.Shared.Glue; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Item; using Content.Shared.Lube; +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Popups; using Content.Shared.Verbs; using Robust.Shared.Audio; diff --git a/Content.Server/Materials/MaterialReclaimerSystem.cs b/Content.Server/Materials/MaterialReclaimerSystem.cs index ae4444e059..0d6d27777a 100644 --- a/Content.Server/Materials/MaterialReclaimerSystem.cs +++ b/Content.Server/Materials/MaterialReclaimerSystem.cs @@ -1,8 +1,6 @@ using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Chemistry.EntitySystems; using Content.Server.Fluids.EntitySystems; using Content.Server.GameTicking; -using Content.Server.Nutrition.EntitySystems; using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Stack; @@ -10,11 +8,13 @@ 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.IdentityManagement; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Materials; using Content.Shared.Mind; +using Content.Shared.Nutrition.EntitySystems; using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Utility; diff --git a/Content.Server/NPC/Systems/NPCUtilitySystem.cs b/Content.Server/NPC/Systems/NPCUtilitySystem.cs index 6793161105..e8fb54022e 100644 --- a/Content.Server/NPC/Systems/NPCUtilitySystem.cs +++ b/Content.Server/NPC/Systems/NPCUtilitySystem.cs @@ -14,6 +14,7 @@ using Content.Shared.Inventory; using Content.Shared.Mobs.Systems; using Content.Shared.NPC.Systems; using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Tools.Systems; using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Ranged.Components; diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs index 036c855dbb..74637d4813 100644 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs @@ -24,6 +24,7 @@ using Content.Shared.Interaction.Events; using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition; using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Throwing; using Content.Shared.Verbs; using Robust.Shared.Audio; diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index d87b0bd0b0..49d7374041 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -23,6 +23,7 @@ using Content.Shared.Interaction.Events; using Content.Shared.Inventory; using Content.Shared.Mobs.Systems; using Content.Shared.Nutrition; +using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Stacks; using Content.Shared.Storage; using Content.Shared.Verbs; diff --git a/Content.Server/Nutrition/EntitySystems/OpenableSystem.cs b/Content.Server/Nutrition/EntitySystems/OpenableSystem.cs deleted file mode 100644 index 8037b61572..0000000000 --- a/Content.Server/Nutrition/EntitySystems/OpenableSystem.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Content.Server.Chemistry.EntitySystems; -using Content.Shared.Nutrition.EntitySystems; -using Content.Shared.Nutrition.Components; - -namespace Content.Server.Nutrition.EntitySystems; - -/// -/// Provides API for openable food and drinks, handles opening on use and preventing transfer when closed. -/// -public sealed class OpenableSystem : SharedOpenableSystem -{ - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnTransferAttempt); - } - - private void OnTransferAttempt(EntityUid uid, OpenableComponent comp, SolutionTransferAttemptEvent args) - { - if (!comp.Opened) - { - // message says its just for drinks, shouldn't matter since you typically dont have a food that is openable and can be poured out - args.Cancel(Loc.GetString("drink-component-try-use-drink-not-open", ("owner", uid))); - } - } -} diff --git a/Content.Shared/Chemistry/Components/ScoopableSolutionComponent.cs b/Content.Shared/Chemistry/Components/ScoopableSolutionComponent.cs new file mode 100644 index 0000000000..6c3f934b7a --- /dev/null +++ b/Content.Shared/Chemistry/Components/ScoopableSolutionComponent.cs @@ -0,0 +1,31 @@ +using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.GameStates; + +namespace Content.Shared.Chemistry.Components; + +/// +/// Basically reverse spiking, instead of using the solution-entity on a beaker, you use the beaker on the solution-entity. +/// If there is not enough volume it will stay in the solution-entity rather than spill onto the floor. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(ScoopableSolutionSystem))] +public sealed partial class ScoopableSolutionComponent : Component +{ + /// + /// Solution name that can be scooped from. + /// + [DataField] + public string Solution = "default"; + + /// + /// If true, when the whole solution is scooped up the entity will be deleted. + /// + [DataField] + public bool Delete = true; + + /// + /// Popup to show the user when scooping. + /// Passed entities "scooped" and "beaker". + /// + [DataField] + public LocId Popup = "scoopable-component-popup"; +} diff --git a/Content.Shared/Chemistry/EntitySystems/ScoopableSolutionSystem.cs b/Content.Shared/Chemistry/EntitySystems/ScoopableSolutionSystem.cs new file mode 100644 index 0000000000..84f1e45616 --- /dev/null +++ b/Content.Shared/Chemistry/EntitySystems/ScoopableSolutionSystem.cs @@ -0,0 +1,53 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Robust.Shared.Network; + +namespace Content.Shared.Chemistry.EntitySystems; + +/// +/// Handles solution transfer when a beaker is used on a scoopable entity. +/// +public sealed class ScoopableSolutionSystem : EntitySystem +{ + [Dependency] private readonly INetManager _netManager = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly SolutionTransferSystem _solutionTransfer = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInteractUsing); + } + + private void OnInteractUsing(Entity ent, ref InteractUsingEvent args) + { + TryScoop(ent, args.Used, args.User); + } + + public bool TryScoop(Entity ent, EntityUid beaker, EntityUid user) + { + if (!_solution.TryGetSolution(ent.Owner, ent.Comp.Solution, out var src, out var srcSolution) || + !_solution.TryGetRefillableSolution(beaker, out var target, out _)) + return false; + + var scooped = _solutionTransfer.Transfer(user, ent, src.Value, beaker, target.Value, srcSolution.Volume); + if (scooped == 0) + return false; + + _popup.PopupClient(Loc.GetString(ent.Comp.Popup, ("scooped", ent.Owner), ("beaker", beaker)), user, user); + + if (srcSolution.Volume == 0 && ent.Comp.Delete) + { + // deletion isnt predicted so do this to prevent spam clicking to see "the ash is empty!" + RemCompDeferred(ent); + + if (!_netManager.IsClient) + QueueDel(ent); + } + + return true; + } +} diff --git a/Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs b/Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs new file mode 100644 index 0000000000..34a64d0edb --- /dev/null +++ b/Content.Shared/Chemistry/EntitySystems/SolutionTransferSystem.cs @@ -0,0 +1,223 @@ +using Content.Shared.Administration.Logs; +using Content.Shared.Chemistry; +using Content.Shared.Chemistry.Components; +using Content.Shared.Database; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Content.Shared.Verbs; +using Robust.Shared.Network; +using Robust.Shared.Player; + +namespace Content.Shared.Chemistry.EntitySystems; + +/// +/// Allows an entity to transfer solutions with a customizable amount per click. +/// Also provides API for other systems. +/// +public sealed class SolutionTransferSystem : EntitySystem +{ + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; + + /// + /// Default transfer amounts for the set-transfer verb. + /// + public static readonly FixedPoint2[] DefaultTransferAmounts = new FixedPoint2[] { 1, 5, 10, 25, 50, 100, 250, 500, 1000 }; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(AddSetTransferVerbs); + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnTransferAmountSetValueMessage); + } + + private void OnTransferAmountSetValueMessage(Entity ent, ref TransferAmountSetValueMessage message) + { + var newTransferAmount = FixedPoint2.Clamp(message.Value, ent.Comp.MinimumTransferAmount, ent.Comp.MaximumTransferAmount); + ent.Comp.TransferAmount = newTransferAmount; + + if (message.Session.AttachedEntity is { Valid: true } user) + _popup.PopupClient(Loc.GetString("comp-solution-transfer-set-amount", ("amount", newTransferAmount)), ent, user); + } + + private void AddSetTransferVerbs(Entity ent, ref GetVerbsEvent args) + { + var (uid, comp) = ent; + + if (!args.CanAccess || !args.CanInteract || !comp.CanChangeTransferAmount || args.Hands == null) + return; + + if (!TryComp(args.User, out var actor)) + return; + + // Custom transfer verb + args.Verbs.Add(new AlternativeVerb() + { + Text = Loc.GetString("comp-solution-transfer-verb-custom-amount"), + Category = VerbCategory.SetTransferAmount, + // TODO: remove server check when bui prediction is a thing + Act = () => + { + if (_net.IsServer) + _ui.TryOpen(uid, TransferAmountUiKey.Key, actor.PlayerSession); + }, + Priority = 1 + }); + + // Add specific transfer verbs according to the container's size + var priority = 0; + var user = args.User; + foreach (var amount in DefaultTransferAmounts) + { + AlternativeVerb verb = new(); + verb.Text = Loc.GetString("comp-solution-transfer-verb-amount", ("amount", amount)); + verb.Category = VerbCategory.SetTransferAmount; + verb.Act = () => + { + comp.TransferAmount = amount; + _popup.PopupClient(Loc.GetString("comp-solution-transfer-set-amount", ("amount", amount)), uid, user); + }; + + // we want to sort by size, not alphabetically by the verb text. + verb.Priority = priority; + priority--; + + args.Verbs.Add(verb); + } + } + + private void OnAfterInteract(Entity ent, ref AfterInteractEvent args) + { + if (!args.CanReach || args.Target is not {} target) + return; + + var (uid, comp) = ent; + + //Special case for reagent tanks, because normally clicking another container will give solution, not take it. + if (comp.CanReceive + && !HasComp(target) // target must not be refillable (e.g. Reagent Tanks) + && _solution.TryGetDrainableSolution(target, out var targetSoln, out _) // target must be drainable + && TryComp(uid, out var refill) + && _solution.TryGetRefillableSolution((uid, refill, null), out var ownerSoln, out var ownerRefill)) + { + var transferAmount = comp.TransferAmount; // This is the player-configurable transfer amount of "uid," not the target reagent tank. + + // if the receiver has a smaller transfer limit, use that instead + if (refill?.MaxRefill is {} maxRefill) + transferAmount = FixedPoint2.Min(transferAmount, maxRefill); + + var transferred = Transfer(args.User, target, targetSoln.Value, uid, ownerSoln.Value, transferAmount); + if (transferred > 0) + { + var toTheBrim = ownerRefill.AvailableVolume == 0; + var msg = toTheBrim + ? "comp-solution-transfer-fill-fully" + : "comp-solution-transfer-fill-normal"; + + _popup.PopupClient(Loc.GetString(msg, ("owner", args.Target), ("amount", transferred), ("target", uid)), uid, args.User); + + args.Handled = true; + return; + } + } + + // if target is refillable, and owner is drainable + if (comp.CanSend + && TryComp(target, out var targetRefill) + && _solution.TryGetRefillableSolution((target, targetRefill, null), out targetSoln, out _) + && _solution.TryGetDrainableSolution(uid, out ownerSoln, out _)) + { + var transferAmount = comp.TransferAmount; + + if (targetRefill?.MaxRefill is {} maxRefill) + transferAmount = FixedPoint2.Min(transferAmount, maxRefill); + + var transferred = Transfer(args.User, uid, ownerSoln.Value, target, targetSoln.Value, transferAmount); + + if (transferred > 0) + { + var message = Loc.GetString("comp-solution-transfer-transfer-solution", ("amount", transferred), ("target", target)); + _popup.PopupClient(message, uid, args.User); + + args.Handled = true; + } + } + } + + /// + /// Transfer from a solution to another, allowing either entity to cancel it and show a popup. + /// + /// The actual amount transferred. + public FixedPoint2 Transfer(EntityUid user, + EntityUid sourceEntity, + Entity source, + EntityUid targetEntity, + Entity target, + FixedPoint2 amount) + { + var transferAttempt = new SolutionTransferAttemptEvent(sourceEntity, targetEntity); + + // Check if the source is cancelling the transfer + RaiseLocalEvent(sourceEntity, ref transferAttempt); + if (transferAttempt.CancelReason is {} reason) + { + _popup.PopupClient(reason, sourceEntity, user); + return FixedPoint2.Zero; + } + + var sourceSolution = source.Comp.Solution; + if (sourceSolution.Volume == 0) + { + _popup.PopupClient(Loc.GetString("comp-solution-transfer-is-empty", ("target", sourceEntity)), sourceEntity, user); + return FixedPoint2.Zero; + } + + // Check if the target is cancelling the transfer + RaiseLocalEvent(targetEntity, ref transferAttempt); + if (transferAttempt.CancelReason is {} targetReason) + { + _popup.PopupClient(targetReason, targetEntity, user); + return FixedPoint2.Zero; + } + + var targetSolution = target.Comp.Solution; + if (targetSolution.AvailableVolume == 0) + { + _popup.PopupClient(Loc.GetString("comp-solution-transfer-is-full", ("target", targetEntity)), targetEntity, user); + return FixedPoint2.Zero; + } + + var actualAmount = FixedPoint2.Min(amount, FixedPoint2.Min(sourceSolution.Volume, targetSolution.AvailableVolume)); + + var solution = _solution.SplitSolution(source, actualAmount); + _solution.Refill(targetEntity, target, solution); + + _adminLogger.Add(LogType.Action, LogImpact.Medium, + $"{ToPrettyString(user):player} transferred {SharedSolutionContainerSystem.ToPrettyString(solution)} to {ToPrettyString(targetEntity):target}, which now contains {SharedSolutionContainerSystem.ToPrettyString(targetSolution)}"); + + return actualAmount; + } +} + +/// +/// Raised when attempting to transfer from one solution to another. +/// Raised on both the source and target entities so either can cancel the transfer. +/// To not mispredict this should always be cancelled in shared code and not server or client. +/// +[ByRefEvent] +public record struct SolutionTransferAttemptEvent(EntityUid From, EntityUid To, string? CancelReason = null) +{ + /// + /// Cancels the transfer. + /// + public void Cancel(string reason) + { + CancelReason = reason; + } +} diff --git a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs index 92ea962140..f88f13e8b0 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs @@ -13,7 +13,7 @@ namespace Content.Shared.Fluids; public abstract partial class SharedPuddleSystem { - [Dependency] protected readonly SharedOpenableSystem Openable = default!; + [Dependency] protected readonly OpenableSystem Openable = default!; protected virtual void InitializeSpillable() { diff --git a/Content.Shared/Nutrition/Components/OpenableComponent.cs b/Content.Shared/Nutrition/Components/OpenableComponent.cs index 3a230fc765..0381888e28 100644 --- a/Content.Shared/Nutrition/Components/OpenableComponent.cs +++ b/Content.Shared/Nutrition/Components/OpenableComponent.cs @@ -9,7 +9,7 @@ namespace Content.Shared.Nutrition.Components; /// Starts closed, open it with Z or E. /// [NetworkedComponent, AutoGenerateComponentState] -[RegisterComponent, Access(typeof(SharedOpenableSystem))] +[RegisterComponent, Access(typeof(OpenableSystem))] public sealed partial class OpenableComponent : Component { /// [DataField] public int Offset = 0; + + /// + /// Sets if the icon should be rendered with or without the effect of lighting. + /// + [DataField] + public bool IsShaded = false; } /// diff --git a/Resources/Prototypes/StatusEffects/health.yml b/Resources/Prototypes/StatusEffects/health.yml index 12c16e57f0..562dbb336d 100644 --- a/Resources/Prototypes/StatusEffects/health.yml +++ b/Resources/Prototypes/StatusEffects/health.yml @@ -1,32 +1,35 @@ - type: statusIcon - id: HealthIconFine + id: HealthIcon + abstract: true priority: 1 + locationPreference: Right + isShaded: true + +- type: statusIcon + parent: HealthIcon + id: HealthIconFine icon: sprite: /Textures/Interface/Misc/health_icons.rsi state: Fine - locationPreference: Right - type: statusIcon id: HealthIconCritical - priority: 1 + parent: HealthIcon icon: sprite: /Textures/Interface/Misc/health_icons.rsi state: Critical - locationPreference: Right - type: statusIcon id: HealthIconDead - priority: 1 + parent: HealthIcon icon: sprite: /Textures/Interface/Misc/health_icons.rsi state: Dead - locationPreference: Right - type: statusIcon id: HealthIconRotting - priority: 1 + parent: HealthIcon icon: sprite: /Textures/Interface/Misc/health_icons.rsi state: Rotting - locationPreference: Right diff --git a/Resources/Prototypes/StatusEffects/hunger.yml b/Resources/Prototypes/StatusEffects/hunger.yml index 6436665713..9af246e06e 100644 --- a/Resources/Prototypes/StatusEffects/hunger.yml +++ b/Resources/Prototypes/StatusEffects/hunger.yml @@ -1,49 +1,57 @@ #Hunger - type: statusIcon - id: HungerIconOverfed + id: HungerIcon + abstract: true priority: 5 + locationPreference: Right + isShaded: true + +- type: statusIcon + id: HungerIconOverfed + parent: HungerIcon icon: sprite: /Textures/Interface/Misc/food_icons.rsi state: overfed - locationPreference: Right - type: statusIcon id: HungerIconPeckish - priority: 5 + parent: HungerIcon icon: sprite: /Textures/Interface/Misc/food_icons.rsi state: peckish - locationPreference: Right - type: statusIcon id: HungerIconStarving - priority: 5 + parent: HungerIcon icon: sprite: /Textures/Interface/Misc/food_icons.rsi state: starving - locationPreference: Right #Thirst - type: statusIcon - id: ThirstIconOverhydrated + id: ThirstIcon + abstract: true priority: 5 + locationPreference: Left + isShaded: true + +- type: statusIcon + id: ThirstIconOverhydrated + parent: ThirstIcon icon: sprite: /Textures/Interface/Misc/food_icons.rsi state: overhydrated - locationPreference: Left - type: statusIcon id: ThirstIconThirsty - priority: 5 + parent: ThirstIcon icon: sprite: /Textures/Interface/Misc/food_icons.rsi state: thirsty - locationPreference: Left - type: statusIcon id: ThirstIconParched - priority: 5 + parent: ThirstIcon icon: sprite: /Textures/Interface/Misc/food_icons.rsi state: parched - locationPreference: Left diff --git a/Resources/Prototypes/StatusEffects/job.yml b/Resources/Prototypes/StatusEffects/job.yml index 0811877ab5..aec3f5e69d 100644 --- a/Resources/Prototypes/StatusEffects/job.yml +++ b/Resources/Prototypes/StatusEffects/job.yml @@ -3,6 +3,7 @@ abstract: true priority: 1 locationPreference: Right + isShaded: true - type: statusIcon parent: JobIcon diff --git a/Resources/Prototypes/StatusEffects/security.yml b/Resources/Prototypes/StatusEffects/security.yml index 51d087104d..ca25f746f2 100644 --- a/Resources/Prototypes/StatusEffects/security.yml +++ b/Resources/Prototypes/StatusEffects/security.yml @@ -4,6 +4,7 @@ priority: 2 offset: 1 locationPreference: Right + isShaded: true - type: statusIcon parent: SecurityIcon From 38f9c1c3168bba33dca923900e937a7d12118082 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 4 Apr 2024 23:06:07 +0000 Subject: [PATCH 144/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4ff32dea4b..1e3381e96c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: graevy - changes: - - message: Added hallway screen prototypes and comms console text broadcasts. - type: Add - id: 5805 - time: '2024-01-27T13:51:25.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24189 - author: mirrorcult changes: - message: Lights are now shaded with the same color that they glow. @@ -3807,3 +3800,12 @@ id: 6304 time: '2024-04-04T19:30:13.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26729 +- author: PrPleGoo + changes: + - message: The medical HUD's brightness now scales with lighting again. + type: Tweak + - message: Most HUD icon's brightness now scale with lighting. + type: Tweak + id: 6305 + time: '2024-04-04T23:05:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26726 From ad0f046f0c66ff0bbbb1f655fef237ef73703cb1 Mon Sep 17 00:00:00 2001 From: Mephisto72 <66994453+Mephisto72@users.noreply.github.com> Date: Fri, 5 Apr 2024 04:48:24 +0200 Subject: [PATCH 145/206] Rework Identifier Overrides to prevent showing Law Priority (#26680) Does-The-Fix Co-authored-by: Mephisto72 --- .../StationEvents/Events/IonStormRule.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Content.Server/StationEvents/Events/IonStormRule.cs b/Content.Server/StationEvents/Events/IonStormRule.cs index e73c9a1813..cd3cd63ae8 100644 --- a/Content.Server/StationEvents/Events/IonStormRule.cs +++ b/Content.Server/StationEvents/Events/IonStormRule.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Server.GameTicking.Rules.Components; using Content.Server.Silicons.Laws; using Content.Server.Station.Components; @@ -143,6 +144,24 @@ public sealed class IonStormRule : StationEventSystem }); } + // sets all unobfuscated laws' indentifier in order from highest to lowest priority + // This could technically override the Obfuscation from the code above, but it seems unlikely enough to basically never happen + int orderDeduction = -1; + + for (int i = 0; i < laws.Laws.Count; i++) + { + string notNullIdentifier = laws.Laws[i].LawIdentifierOverride ?? (i - orderDeduction).ToString(); + + if (notNullIdentifier.Any(char.IsSymbol)) + { + orderDeduction += 1; + } + else + { + laws.Laws[i].LawIdentifierOverride = (i - orderDeduction).ToString(); + } + } + _adminLogger.Add(LogType.Mind, LogImpact.High, $"{ToPrettyString(ent):silicon} had its laws changed by an ion storm to {laws.LoggingString()}"); // laws unique to this silicon, dont use station laws anymore From 77c4e40fc6523f3f8944966af2c94932f9cff8c9 Mon Sep 17 00:00:00 2001 From: Dae <60460608+ZeroDayDaemon@users.noreply.github.com> Date: Thu, 4 Apr 2024 23:15:01 -0400 Subject: [PATCH 146/206] Make practice projectiles consistent in damage (#26731) * Make practice weapon damage consistent to 1 * Add book reference to description --- .../Objects/Weapons/Guns/Battery/battery_guns.yml | 4 ++-- .../Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml | 2 +- .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index c4736ad356..529e883638 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -228,7 +228,7 @@ name: practice laser rifle parent: WeaponLaserCarbine id: WeaponLaserCarbinePractice - description: This modified laser rifle fires harmless beams in the 40-watt range, for target practice. + description: This modified laser rifle fires nearly harmless beams in the 40-watt range, for target practice. components: - type: HitscanBatteryAmmoProvider proto: RedLaserPractice @@ -488,7 +488,7 @@ name: practice disabler parent: WeaponDisabler id: WeaponDisablerPractice - description: A self-defense weapon that exhausts organic targets, weakening them until they collapse. This one has been undertuned for cadets. + description: A self-defense weapon that exhausts organic targets, weakening them until they collapse. This one has been undertuned for cadets making it mostly harmless. components: - type: Sprite sprite: Objects/Weapons/Guns/Battery/practice_disabler.rsi diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml index 99c4a7bdf2..3f37d308db 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml @@ -35,7 +35,7 @@ id: RedLaserPractice damage: types: - Heat: 0 + Heat: 1 muzzleFlash: sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi state: muzzle_laser diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index a28d527535..91fdaa6481 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -102,7 +102,7 @@ - type: Projectile damage: types: - Blunt: 2 + Blunt: 1 - type: entity id: BaseBulletRubber @@ -288,7 +288,7 @@ fly-by: *flybyfixture - type: Ammo - type: StaminaDamageOnCollide - damage: 5 + damage: 1 - type: Projectile impactEffect: BulletImpactEffectDisabler damage: @@ -641,7 +641,7 @@ shader: unshaded - type: AnomalousParticle particleType: Sigma - + - type: entity parent: AnomalousParticleSigma id: AnomalousParticleSigmaStrong @@ -650,7 +650,7 @@ components: - type: AnomalousParticle particleType: Sigma - + # Launcher projectiles (grenade / rocket) - type: entity id: BulletRocket From 3d88b8ced29b6871304e8f421ff966b635aadb87 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 5 Apr 2024 03:16:07 +0000 Subject: [PATCH 147/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1e3381e96c..ff6fabea78 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: mirrorcult - changes: - - message: Lights are now shaded with the same color that they glow. - type: Tweak - id: 5806 - time: '2024-01-27T17:43:45.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24612 - author: Boaz1111 changes: - message: The PKA shuttle gun now breaks rocks in one hit. @@ -3809,3 +3802,12 @@ id: 6305 time: '2024-04-04T23:05:01.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26726 +- author: Daemon + changes: + - message: Practice projectiles have been given standardized minimal damage. + type: Tweak + - message: The practice laser gun now works with shooting targets. + type: Tweak + id: 6306 + time: '2024-04-05T03:15:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26731 From 25bcb0c880e995c4a7c94f8dab3b73f1eb9613f5 Mon Sep 17 00:00:00 2001 From: osjarw <62134478+osjarw@users.noreply.github.com> Date: Fri, 5 Apr 2024 09:01:04 +0300 Subject: [PATCH 148/206] fix mopbucket water level (#26740) --- .../Prototypes/Entities/Structures/Specific/Janitor/janicart.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml index f35a052723..2591b3f340 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -62,6 +62,7 @@ priority: 3 # Higher than drinking priority - type: Drink solution: bucket + - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 3 fillBaseName: mopbucket_water- From e7fda78a181243d67e79e559c366977d92782f1f Mon Sep 17 00:00:00 2001 From: Dae <60460608+ZeroDayDaemon@users.noreply.github.com> Date: Fri, 5 Apr 2024 03:19:41 -0400 Subject: [PATCH 149/206] Damage popup type can now be changed with a left click if allowed via component boolean. (#26734) * Update DamagePopupSystem.cs * Update DamagePopupSystem.cs * Add ability to allow or deny type change via component bool --- .../Damage/Components/DamagePopupComponent.cs | 5 +++++ .../Damage/Systems/DamagePopupSystem.cs | 20 ++++++++++++++++++- .../Objects/Specific/Security/target.yml | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Content.Server/Damage/Components/DamagePopupComponent.cs b/Content.Server/Damage/Components/DamagePopupComponent.cs index b1216069f5..37c5d57cf4 100644 --- a/Content.Server/Damage/Components/DamagePopupComponent.cs +++ b/Content.Server/Damage/Components/DamagePopupComponent.cs @@ -5,6 +5,11 @@ namespace Content.Server.Damage.Components; [RegisterComponent, Access(typeof(DamagePopupSystem))] public sealed partial class DamagePopupComponent : Component { + /// + /// Bool that will be used to determine if the popup type can be changed with a left click. + /// + [DataField("allowTypeChange")] [ViewVariables(VVAccess.ReadWrite)] + public bool AllowTypeChange = false; /// /// Enum that will be used to determine the type of damage popup displayed. /// diff --git a/Content.Server/Damage/Systems/DamagePopupSystem.cs b/Content.Server/Damage/Systems/DamagePopupSystem.cs index 12fd894ac6..3386c92129 100644 --- a/Content.Server/Damage/Systems/DamagePopupSystem.cs +++ b/Content.Server/Damage/Systems/DamagePopupSystem.cs @@ -1,7 +1,8 @@ +using System.Linq; using Content.Server.Damage.Components; using Content.Server.Popups; using Content.Shared.Damage; -using Robust.Shared.Player; +using Content.Shared.Interaction; namespace Content.Server.Damage.Systems; @@ -13,6 +14,7 @@ public sealed class DamagePopupSystem : EntitySystem { base.Initialize(); SubscribeLocalEvent(OnDamageChange); + SubscribeLocalEvent(OnInteractHand); } private void OnDamageChange(EntityUid uid, DamagePopupComponent component, DamageChangedEvent args) @@ -33,4 +35,20 @@ public sealed class DamagePopupSystem : EntitySystem _popupSystem.PopupEntity(msg, uid); } } + + private void OnInteractHand(EntityUid uid, DamagePopupComponent component, InteractHandEvent args) + { + if (component.AllowTypeChange) + { + if (component.Type == Enum.GetValues(typeof(DamagePopupType)).Cast().Last()) + { + component.Type = Enum.GetValues(typeof(DamagePopupType)).Cast().First(); + } + else + { + component.Type = (DamagePopupType) (int) component.Type + 1; + } + _popupSystem.PopupEntity("Target set to type: " + component.Type.ToString(), uid); + } + } } diff --git a/Resources/Prototypes/Entities/Objects/Specific/Security/target.yml b/Resources/Prototypes/Entities/Objects/Specific/Security/target.yml index adbb7cde40..a17c892169 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Security/target.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Security/target.yml @@ -9,6 +9,7 @@ noRot: true - type: Repairable - type: DamagePopup + allowTypeChange: true damagePopupType: Combined - type: Fixtures fixtures: From 0afb3337b0759f1f2fc07c685631ff5e53fbfa43 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 5 Apr 2024 07:20:48 +0000 Subject: [PATCH 150/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ff6fabea78..68ae384e1d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Boaz1111 - changes: - - message: The PKA shuttle gun now breaks rocks in one hit. - type: Tweak - id: 5807 - time: '2024-01-27T17:47:35.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24627 - author: FungiFellow changes: - message: Ion Storms are twice as likely to occur. @@ -3811,3 +3804,12 @@ id: 6306 time: '2024-04-05T03:15:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26731 +- author: Daemon + changes: + - message: Shooting targets can now have their popup type changed with a left click + to show total damage, damage of a single hit, both, or just a notice that it + was hit. + type: Tweak + id: 6307 + time: '2024-04-05T07:19:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26734 From 3817133d926c8b8c9a17f75420c8dc7ec34b6102 Mon Sep 17 00:00:00 2001 From: TsjipTsjip <19798667+TsjipTsjip@users.noreply.github.com> Date: Fri, 5 Apr 2024 09:42:06 +0200 Subject: [PATCH 151/206] CCVars.cs: Minor inconsistency fixes. (#26744) Update CCVars.cs * Fixes one file format inconsistency. * Adds missing closing tag. --- Content.Shared/CCVar/CCVars.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index c9b582faf0..c9271331f3 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -543,8 +543,8 @@ namespace Content.Shared.CCVar * Console */ - public static readonly CVarDef - ConsoleLoginLocal = CVarDef.Create("console.loginlocal", true, CVar.ARCHIVE | CVar.SERVERONLY); + public static readonly CVarDef ConsoleLoginLocal = + CVarDef.Create("console.loginlocal", true, CVar.ARCHIVE | CVar.SERVERONLY); /// /// Automatically log in the given user as host, equivalent to the promotehost command. @@ -836,6 +836,7 @@ namespace Content.Shared.CCVar /// /// Should the ban details in admin channel include PII? (IP, HWID, etc) + /// public static readonly CVarDef AdminShowPIIOnBan = CVarDef.Create("admin.show_pii_onban", false, CVar.SERVERONLY); From d802928610ae27627dc974663fd215490b81c06e Mon Sep 17 00:00:00 2001 From: Verm <32827189+Vermidia@users.noreply.github.com> Date: Fri, 5 Apr 2024 10:41:35 -0500 Subject: [PATCH 152/206] Make baseball bat crafting require a slicing tool (#26742) Make baseball bat crafting harder --- .../Objects/Weapons/Melee/baseball_bat.yml | 15 ++++++++++++ .../Crafting/Graphs/improvised/bat.yml | 22 ++++++++++++++++-- .../Weapons/Melee/incomplete_bat.rsi/icon.png | Bin 0 -> 703 bytes .../Melee/incomplete_bat.rsi/meta.json | 14 +++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Objects/Weapons/Melee/incomplete_bat.rsi/icon.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/incomplete_bat.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml index 8ba643a115..834d35a529 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml @@ -40,6 +40,21 @@ tags: - BaseballBat +- type: entity + name: incomplete baseball bat + parent: BaseItem + id: IncompleteBaseBallBat + description: A few planks of wood stuck together. + components: + - type: Sprite + sprite: Objects/Weapons/Melee/incomplete_bat.rsi + state: icon + - type: Item + size: Normal + - type: Construction + graph: WoodenBat + node: incompleteBat + - type: entity name: knockback stick parent: BaseBallBat diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/bat.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/bat.yml index 56530f443e..cecd031f97 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/bat.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/bat.yml @@ -1,13 +1,31 @@ -- type: constructionGraph +- type: constructionGraph id: WoodenBat start: start graph: - node: start edges: - - to: bat + - to: incompleteBat steps: - material: WoodPlank amount: 5 doAfter: 4 + + - node: incompleteBat + entity: IncompleteBaseBallBat + edges: + - to: start + completed: + - !type:SpawnPrototype + prototype: MaterialWoodPlank1 + amount: 5 + - !type:DeleteEntity {} + steps: + - tool: Prying + doAfter: 1 + - to: bat + steps: + - tool: Slicing + doAfter: 4 + - node: bat entity: BaseBallBat diff --git a/Resources/Textures/Objects/Weapons/Melee/incomplete_bat.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/incomplete_bat.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6955b10e5d0ff8696d4a5db4f67b7b01b55e2346 GIT binary patch literal 703 zcmV;w0zmzVP)7I1wl{*5l3fVi+LI1yyW9hl3n`-)&Q6Uebr-d3gIZ7y#H$iHZx~fz)(pB0zY9jal zdD_~{wAVe70z$8@`#BDT_kl*;b$?G?w{ZppUVv+}?XOTybKj)b+gkh>i0%NFH*HNh z0Iqg{(PvBMa#IS>@oO6JaRCe!fZ=;!VBO2A^&aO>Kz^Hk(H(Gj1WeHV=*AzrZ)fVh zB10zt000SaNLh0L01FZT01FZU(%pXi0002?NklVVxb`bc(ojSf4mdUm)pzTJDi`hI#a6w4;~BY*+{g(wR3XpiS(!IgPQ5_ zOjIBh4gs-O5QE2piZqauoL_gbKnc9~8z_Yr2}r=R1*G6v0+R4#0cm)WfChZ9fEIj^ zfF`_GKpP$vuz&{ztl*sjmhhHwj002ovPDHLkV1goFGZ6p) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/incomplete_bat.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/incomplete_bat.rsi/meta.json new file mode 100644 index 0000000000..c7c06adfc8 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Melee/incomplete_bat.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from goonstation and modified by Swept at commit https://github.com/goonstation/goonstation/pull/3555/commits/b24eb6260647c0fcfe858268a26b6160bc50017a, modified into incomplete version by Vermidia", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} From f433e2d9f858f38e8aa6fb8c3ac35b1d9a4938d6 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Fri, 5 Apr 2024 15:42:12 +0000 Subject: [PATCH 153/206] make fulton recipe faster and require cloth (#26747) Co-authored-by: deltanedas <@deltanedas:kde.org> --- Resources/Prototypes/Recipes/Lathes/salvage.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Recipes/Lathes/salvage.yml b/Resources/Prototypes/Recipes/Lathes/salvage.yml index 57ae75b617..9b3cb08643 100644 --- a/Resources/Prototypes/Recipes/Lathes/salvage.yml +++ b/Resources/Prototypes/Recipes/Lathes/salvage.yml @@ -1,11 +1,10 @@ - type: latheRecipe id: Fulton result: Fulton1 - completetime: 5 + completetime: 1 materials: Steel: 200 - # TODO: Need better sources of cloth as otherwise these will never get made. - # Cloth: 200 + Cloth: 100 - type: latheRecipe id: FultonBeacon From ec77a161d917c9f51785bf66fe6c750ccbe9f395 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 5 Apr 2024 15:43:18 +0000 Subject: [PATCH 154/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 68ae384e1d..6e374bbac6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,18 +1,4 @@ Entries: -- author: FungiFellow - changes: - - message: Ion Storms are twice as likely to occur. - type: Tweak - id: 5808 - time: '2024-01-27T23:14:09.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24633 -- author: PJB3005 - changes: - - message: Security barriers need 5 seconds to lock and unlock. - type: Tweak - id: 5809 - time: '2024-01-28T00:28:02.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24637 - author: themias changes: - message: Added cowboy hats and boots to autodrobe, secdrobe, and maints @@ -3813,3 +3799,17 @@ id: 6307 time: '2024-04-05T07:19:41.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26734 +- author: Vermidia + changes: + - message: Baseball bats now require a knife to craft + type: Tweak + id: 6308 + time: '2024-04-05T15:41:35.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26742 +- author: deltanedas + changes: + - message: Making fultons now requires cloth and they are faster to make. + type: Tweak + id: 6309 + time: '2024-04-05T15:42:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26747 From c5441a1b015eb579c68e14072f0d5e6a14c7e6bd Mon Sep 17 00:00:00 2001 From: superjj18 Date: Fri, 5 Apr 2024 13:29:21 -0400 Subject: [PATCH 155/206] -fixed Broadcast button never enabling (#26750) --- .../Communications/SharedCommunicationsConsoleComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Communications/SharedCommunicationsConsoleComponent.cs b/Content.Shared/Communications/SharedCommunicationsConsoleComponent.cs index d48b99837f..604b067a84 100644 --- a/Content.Shared/Communications/SharedCommunicationsConsoleComponent.cs +++ b/Content.Shared/Communications/SharedCommunicationsConsoleComponent.cs @@ -11,7 +11,7 @@ namespace Content.Shared.Communications public sealed class CommunicationsConsoleInterfaceState : BoundUserInterfaceState { public readonly bool CanAnnounce; - public readonly bool CanBroadcast; + public readonly bool CanBroadcast = true; public readonly bool CanCall; public readonly TimeSpan? ExpectedCountdownEnd; public readonly bool CountdownStarted; From e0ac00b256f608e33a0bfe0416501a7b77e1d98a Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 5 Apr 2024 17:30:27 +0000 Subject: [PATCH 156/206] 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 6e374bbac6..bb1c204931 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: themias - changes: - - message: Added cowboy hats and boots to autodrobe, secdrobe, and maints - type: Add - - message: Added cowboy accent - type: Add - id: 5810 - time: '2024-01-28T03:23:16.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24299 - author: shampunj changes: - message: A new game preset! Can only be selected by admins. All at once. @@ -3813,3 +3804,10 @@ id: 6309 time: '2024-04-05T15:42:12.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26747 +- author: superjj18 + changes: + - message: Broadcasting works again! + type: Fix + id: 6310 + time: '2024-04-05T17:29:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26750 From 26f41e9fd54c5799a4c0aed7e5935e7192c5e1b2 Mon Sep 17 00:00:00 2001 From: Golinth Date: Fri, 5 Apr 2024 15:35:32 -0500 Subject: [PATCH 157/206] Let Mindshields be effected by statusIcon shading (#26754) Phone Webedit Ops Original PR author forgot about mindshields for making status icons shaded. This can be done with other antag icons as well, I remember people mentioning revs being able to see each other in the dark was lame. --- Resources/Prototypes/StatusIcon/antag.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/StatusIcon/antag.yml b/Resources/Prototypes/StatusIcon/antag.yml index 87576f93b7..da530a86d8 100644 --- a/Resources/Prototypes/StatusIcon/antag.yml +++ b/Resources/Prototypes/StatusIcon/antag.yml @@ -31,6 +31,7 @@ priority: 1 locationPreference: Right layer: Mod + isShaded: true icon: sprite: /Textures/Interface/Misc/job_icons.rsi state: MindShield From d94eba8c5209e05736983572eb01616e26d7899c Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 5 Apr 2024 20:36:38 +0000 Subject: [PATCH 158/206] 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 bb1c204931..816df88a92 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: shampunj - changes: - - message: A new game preset! Can only be selected by admins. All at once. - type: Add - id: 5811 - time: '2024-01-28T10:41:36.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/23171 - author: Doctor-Cpu changes: - message: 3kliksphilips name. @@ -3811,3 +3804,10 @@ id: 6310 time: '2024-04-05T17:29:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26750 +- author: Golinth + changes: + - message: Fixed mindshield icons being glow in the dark + type: Fix + id: 6311 + time: '2024-04-05T20:35:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26754 From 5523e016f4af4f4574c3e26757e7dbbb09de457f Mon Sep 17 00:00:00 2001 From: Alzore <140123969+Blackern5000@users.noreply.github.com> Date: Fri, 5 Apr 2024 16:06:12 -0500 Subject: [PATCH 159/206] Dionae now bleed sap, and this can be used to make syrup. (#25748) * SapAndSyrup * centrifug * morewatervapor * whyisitnotpushing * nymphs * lessrealmorefun --- .../Locale/en-US/reagents/meta/biological.ftl | 3 +++ .../meta/consumable/food/condiments.ftl | 3 +++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 2 +- .../Entities/Mobs/Species/diona.yml | 4 +-- .../Reagents/Consumable/Food/condiments.yml | 24 +++++++++++++++++ Resources/Prototypes/Reagents/biological.yml | 26 +++++++++++++++++++ .../Recipes/Reactions/biological.yml | 13 ++++++++++ .../Recipes/Reactions/single_reagent.yml | 13 ++++++++++ 8 files changed, 85 insertions(+), 3 deletions(-) diff --git a/Resources/Locale/en-US/reagents/meta/biological.ftl b/Resources/Locale/en-US/reagents/meta/biological.ftl index a320bbdcb3..d8f0f6c413 100644 --- a/Resources/Locale/en-US/reagents/meta/biological.ftl +++ b/Resources/Locale/en-US/reagents/meta/biological.ftl @@ -7,6 +7,9 @@ reagent-desc-insect-blood = Okay, this is really gross. It almost looks.. alive? reagent-name-slime = slime reagent-desc-slime = You thought this was gradient blood at first, but you were mistaken. +reagent-name-sap = sap +reagent-desc-sap = Sticky, sweet tree blood. + reagent-name-hemocyanin-blood = blue blood reagent-desc-hemocyanin-blood = Contains copper as opposed to iron which gives it a distinct blue color. diff --git a/Resources/Locale/en-US/reagents/meta/consumable/food/condiments.ftl b/Resources/Locale/en-US/reagents/meta/consumable/food/condiments.ftl index 38cd16b01c..809fbafffd 100644 --- a/Resources/Locale/en-US/reagents/meta/consumable/food/condiments.ftl +++ b/Resources/Locale/en-US/reagents/meta/consumable/food/condiments.ftl @@ -39,3 +39,6 @@ reagent-desc-soysauce = A salty soy-based flavoring. reagent-name-table-salt = table salt reagent-desc-table-salt = Commonly known as salt, Sodium Chloride is often used to season food or kill borers instantly. + +reagent-name-syrup = syrup +reagent-desc-syrup = Delicious syrup made from tree sap, somehow stickier than glue. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 3a56c4df3a..dc469ddea4 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -3166,7 +3166,7 @@ - type: InventorySlots - type: Strippable - type: Bloodstream - bloodReagent: Water + bloodReagent: Sap bloodMaxVolume: 60 - type: UserInterface interfaces: diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index 7f726e2f2c..dbdaa9c7e3 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -24,14 +24,14 @@ damageOverlayGroups: Brute: sprite: Mobs/Effects/brute_damage.rsi - color: "#75b1f0" + color: "#cd7314" - type: Butcherable butcheringType: Spike spawned: - id: FoodMeatPlant amount: 5 - type: Bloodstream - bloodReagent: Water + bloodReagent: Sap - type: Reactive groups: Flammable: [ Touch ] diff --git a/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml b/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml index 8fbfd3cd64..4cc2810792 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml @@ -164,3 +164,27 @@ # eating salt on its own kinda sucks, kids - !type:SatiateThirst factor: -0.5 + +- type: reagent + id: Syrup + name: reagent-name-syrup + group: Foods + desc: reagent-desc-syrup + flavor: sweet + color: "#fb7125" + recognizable: true + physicalDesc: reagent-physical-desc-sticky + slippery: false + viscosity: 0.55 #Start using syrup to attach your remote recievers to your microwaves! + tileReactions: + - !type:SpillTileReaction + metabolisms: + Food: + # 12 diona blood for 1 unit of syrup, this stuff better be worthwhile. + effects: + - !type:SatiateHunger + factor: 6.0 #Stronger than cookedramen + footstepSound: + collection: FootstepBlood + params: + volume: 6 diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index c24c073f03..0c53ae10fd 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -82,6 +82,32 @@ params: volume: 6 +- type: reagent + id: Sap + name: reagent-name-sap + group: Biological + desc: reagent-desc-sap + flavor: sweet + color: "#cd7314" + recognizable: true + physicalDesc: reagent-physical-desc-sticky + slippery: false + viscosity: 0.10 + tileReactions: + - !type:SpillTileReaction + metabolisms: + Food: + # Sweet! + effects: + - !type:SatiateHunger + factor: 1 + - !type:SatiateThirst + factor: 1 + footstepSound: + collection: FootstepBlood + params: + volume: 6 + - type: reagent parent: Blood id: CopperBlood diff --git a/Resources/Prototypes/Recipes/Reactions/biological.yml b/Resources/Prototypes/Recipes/Reactions/biological.yml index 4e94b8d85b..604211466f 100644 --- a/Resources/Prototypes/Recipes/Reactions/biological.yml +++ b/Resources/Prototypes/Recipes/Reactions/biological.yml @@ -25,6 +25,19 @@ Water: 4 Nitrogen: 1 + +- type: reaction + id: SapBloodBreakdown + source: true + requiredMixerCategories: + - Centrifuge + reactants: + Sap: + amount: 10 + products: + Water: 9 + Sugar: 1 + - type: reaction id: CopperBloodBreakdown source: true diff --git a/Resources/Prototypes/Recipes/Reactions/single_reagent.yml b/Resources/Prototypes/Recipes/Reactions/single_reagent.yml index 160353219b..46fe35415f 100644 --- a/Resources/Prototypes/Recipes/Reactions/single_reagent.yml +++ b/Resources/Prototypes/Recipes/Reactions/single_reagent.yml @@ -20,6 +20,19 @@ products: EggCooked: 0.5 +- type: reaction + id: SapBoiling + impact: Low + minTemp: 377 + reactants: + Sap: + amount: 1.2 + effects: + - !type:CreateGas + gas: WaterVapor + products: + Syrup: 0.1 #12:1 sap to syruop + # Holy - TODO: make it so only the chaplain can use the bible to start these reactions, not anyone with a bible - type: reaction From 34980efdb546bfe1b22f6fcace1044249e71d980 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 5 Apr 2024 21:07:17 +0000 Subject: [PATCH 160/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 816df88a92..86b5cbb4fe 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Doctor-Cpu - changes: - - message: 3kliksphilips name. - type: Fix - id: 5812 - time: '2024-01-28T10:46:32.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24657 - author: mirrorcult changes: - message: Speech sounds are now quieter @@ -3811,3 +3804,14 @@ id: 6311 time: '2024-04-05T20:35:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26754 +- author: Blackern5000 + changes: + - message: Added sap + type: Add + - message: Added syrup, it can be made by boiling sap. + type: Add + - message: Dionae now bleed sap instead of water + type: Tweak + id: 6312 + time: '2024-04-05T21:06:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25748 From dd03612d8032050e4d60b8ac7fffae4d5911d422 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sat, 6 Apr 2024 09:49:44 +1100 Subject: [PATCH 161/206] Alerts crash fix (#26602) - If the client tries to call ShowAlert while applying gamestates (e.g. initialising an entity) then this will cause problems. I need to double-check the initial PR before I'd be comfortable with this being merged. --- Content.Shared/Alert/AlertsSystem.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Content.Shared/Alert/AlertsSystem.cs b/Content.Shared/Alert/AlertsSystem.cs index d8737a717a..5b888e30c4 100644 --- a/Content.Shared/Alert/AlertsSystem.cs +++ b/Content.Shared/Alert/AlertsSystem.cs @@ -80,6 +80,10 @@ public abstract class AlertsSystem : EntitySystem /// if true, the cooldown will be visibly shown over the alert icon public void ShowAlert(EntityUid euid, AlertType alertType, short? severity = null, (TimeSpan, TimeSpan)? cooldown = null, bool autoRemove = false, bool showCooldown = true ) { + // This should be handled as part of networking. + if (_timing.ApplyingState) + return; + if (!TryComp(euid, out AlertsComponent? alertsComponent)) return; @@ -148,6 +152,9 @@ public abstract class AlertsSystem : EntitySystem /// public void ClearAlert(EntityUid euid, AlertType alertType) { + if (_timing.ApplyingState) + return; + if (!EntityManager.TryGetComponent(euid, out AlertsComponent? alertsComponent)) return; From 107dc0e0369d43a1f07dcca89dca6c8501f08af1 Mon Sep 17 00:00:00 2001 From: osjarw <62134478+osjarw@users.noreply.github.com> Date: Sat, 6 Apr 2024 04:55:31 +0300 Subject: [PATCH 162/206] made thin firelocks constructable/deconstructable (#26745) --- .../Structures/Doors/Firelocks/firelock.yml | 5 ++++- .../Graphs/structures/firelock.yml | 19 +++++++++++++++++++ .../Recipes/Construction/structures.yml | 17 +++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index a678ab7443..1ba867773b 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -151,7 +151,7 @@ - type: entity id: FirelockEdge - parent: BaseFirelock + parent: Firelock name: firelock components: - type: Sprite @@ -181,3 +181,6 @@ canCollide: false - type: StaticPrice price: 100 + - type: Construction + graph: Firelock + node: FirelockEdge diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml index 0dbf26794d..0d7bdddd2f 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml @@ -103,6 +103,14 @@ - tool: Anchoring doAfter: 1 + - to: FirelockEdge + conditions: + - !type:EntityAnchored + anchored: true + steps: + - tool: Welding + doAfter: 0.5 + - to: FirelockGlassFrame conditions: - !type:EntityAnchored @@ -160,3 +168,14 @@ steps: - tool: Anchoring doAfter: 1 + + - node: FirelockEdge + entity: FirelockEdge + edges: + - to: frame4 + conditions: + - !type:DoorWelded + welded: true + steps: + - tool: Anchoring + doAfter: 0.25 diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index bea97beaaa..a1f370cc1b 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -795,6 +795,23 @@ conditions: - !type:TileNotBlocked +- type: construction + name: Thin firelock + id: FirelockEdge + graph: Firelock + startNode: start + targetNode: FirelockEdge + category: construction-category-structures + description: This is a firelock - it locks an area when a fire alarm in the area is triggered. Don't get squished! + icon: + sprite: Structures/Doors/edge_door_hazard.rsi + state: closed + placementMode: SnapgridCenter + objectType: Structure + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + - type: construction name: shutter id: Shutters From 5e20c18cb8331e2d97a06ba3e0e0e629c81538d8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 6 Apr 2024 01:56:37 +0000 Subject: [PATCH 163/206] 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 86b5cbb4fe..da422e22b3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: mirrorcult - changes: - - message: Speech sounds are now quieter - type: Tweak - id: 5813 - time: '2024-01-28T10:49:55.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24579 - author: TheShuEd changes: - message: The fire anomaly is now heavier in content. @@ -3815,3 +3808,10 @@ id: 6312 time: '2024-04-05T21:06:12.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25748 +- author: osjarw + changes: + - message: Thin firelocks are now constructable/deconstructable + type: Fix + id: 6313 + time: '2024-04-06T01:55:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26745 From 78dd193c2500a04fd05c813157a398bfbf58146c Mon Sep 17 00:00:00 2001 From: BITTERLYNX <166083655+PaigeMaeForrest@users.noreply.github.com> Date: Fri, 5 Apr 2024 21:41:23 -0700 Subject: [PATCH 164/206] Fire sprite change for mice (#26758) * Add new fire sprite for mice that fits them better * Add the sprite change to rats as well * Moffroach and hamsters now also have more fitting fire sprites * made the meta.json easier to read --- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 9 +++ .../Entities/Mobs/NPCs/regalrat.yml | 3 + .../Mobs/Effects/onfire.rsi/Mouse_burning.png | Bin 0 -> 1374 bytes .../Mobs/Effects/onfire.rsi/meta.json | 52 +++++++++++++++++- 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Mobs/Effects/onfire.rsi/Mouse_burning.png diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index dc469ddea4..bb017b538a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -525,6 +525,9 @@ damage: 60 behaviors: - !type:GibBehavior { } + - type: FireVisuals + sprite: Mobs/Effects/onfire.rsi + normalState: Mouse_burning # Note that the mallard duck is actually a male drake mallard, with the brown duck being the female variant of the same species, however ss14 lacks sex specific textures @@ -1594,6 +1597,9 @@ - type: BadFood - type: NonSpreaderZombie - type: PreventSpiller + - type: FireVisuals + sprite: Mobs/Effects/onfire.rsi + normalState: Mouse_burning - type: entity parent: MobMouse @@ -3063,6 +3069,9 @@ - type: MobPrice price: 60 - type: NonSpreaderZombie + - type: FireVisuals + sprite: Mobs/Effects/onfire.rsi + normalState: Mouse_burning - type: entity name: pig diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index afcb2bac47..1fcd074b8e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -284,6 +284,9 @@ - type: GuideHelp guides: - MinorAntagonists + - type: FireVisuals + sprite: Mobs/Effects/onfire.rsi + normalState: Mouse_burning - type: weightedRandomEntity id: RatKingLoot diff --git a/Resources/Textures/Mobs/Effects/onfire.rsi/Mouse_burning.png b/Resources/Textures/Mobs/Effects/onfire.rsi/Mouse_burning.png new file mode 100644 index 0000000000000000000000000000000000000000..d5461a89c02143a413d8e56db7e27ad4892d143d GIT binary patch literal 1374 zcmZXTdpOez7{}*+U3o|f$0f3o5OxY%i?axaTn;*#d(u;GMTjx=luNnh7IVL5m?E9i zmQ7SxTRXW{?lLotIcCka-#B{ur{_8E^L)SG_xb+u{_%O9H_P445v-`G2m*n?PUn!G zyIHfVGSS_ulsjs$ZkGh=v3z zgBsJK1-clRXHG*?C2D@HKq?TUQh^Q(Af z4RNjvyMts*xJ5)Vcmz<#2E40Onb}vx-I*QNv+Rm{(Y%(l(snD=ENG!vFb*TjGA?=z z9n`^yw#oS$IR{VH@ zx97pfgv~;7J6b2d+Ba!T7IPHA-nv+wvex7nGae0t^I=k94v2rtS$q`u+l7ZikKfbt zfOn#(L7rO77P=!cvqxPpj>ao{2#c2mlKaIM+8B;AY5n5q^~0Mkh*%DSt(!%rvJ=*w zUp!hTTx+1Go-nZwv<^K@O;PrX(E)SZWPF9Ee|(4K*> zy9+U|tUtEH?oQ>!o8K0n6*8f`-80F+7E zLH9#HK9ej_R}MRTm%qL4ErT>QQG6HuAT&zuOAJM~J@K}H@ic+???}zg%TD7A5Axv_ zkrK`18Ez|IpyfO7pM0jPjMxU{qHa@wp#y%auK#fE$%NTafDcN3#N!ygH2WlDiOBJz z(7SuWQWp(^ihhaXf@8e}{p@Wt=dt_@TtZ~0oU|~NT&KkP_UJASKq*&6zaA`x_^&yY zMPDwg8iYe5iLz7C-_D8?SI}Ldn^MkPmYnp@D1Yqh=RJIrTDbakr1cIP>G}=tBKRF^ z-++R;H6sNYmc>^3x~j&cE6~jP54jj#gG^dtT%8)i5jmX=H-=^u=V@cw-Gy*t)3|`! zMsgF`#GonPUcVjZTR?j#f_5L>p%oJqa&w~YVf%HIG)~Rjy}js!39*x$)dmj0>VEL{ zU&?^D~ZC$LpcPe~&$7%w#Flya}s zE$D(}_R2PO3u@JBA{tfsn`fDv)t%%pFU!8=LsrE&E2fe;)ulAq_?Z67jS)tb(du5a zB;ict@V3gM*~$T)7RzGxwaR3+CQKr5$uVBWXXVTxtVcZ;@~IomtM@w%dODa}{@aox zPtMf4n~*Wt*MtI^_J1nEQLDQk7+=KPu#TSn%+8o8@{(&=(wowmh-k{Tryb*xYRPm; z?r@|~RkbWIifXX?;77T%HlZqE0I%=}JLeKReT(z!M6q^Rpa^Dx!9&aq5!IrQJxGSs bPdKPTCHc#YYN)X`<9q9L)(wfb54!UoO|h|B literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Effects/onfire.rsi/meta.json b/Resources/Textures/Mobs/Effects/onfire.rsi/meta.json index 5bd235bf90..005128d9be 100644 --- a/Resources/Textures/Mobs/Effects/onfire.rsi/meta.json +++ b/Resources/Textures/Mobs/Effects/onfire.rsi/meta.json @@ -1 +1,51 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0", "states": [{"name": "Generic_mob_burning", "directions": 4, "delays": [[0.1, 0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "Monkey_burning", "directions": 4, "delays": [[0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1]]}, {"name": "Standing", "directions": 4, "delays": [[0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0", + "states": [ + { + "name": "Generic_mob_burning", + "directions": 4, + "delays": [ + [ 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1 ] + ] + }, + { + "name": "Monkey_burning", + "directions": 4, + "delays": [ + [ 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1 ] + ] + }, + { + "name": "Standing", + "directions": 4, + "delays": [ + [ 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1 ] + ] + }, + { + "name": "Mouse_burning", + "directions": 4, + "delays": [ + [ 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1 ], + [ 0.1, 0.1, 0.1, 0.1, 0.1 ] + ] + } + ] +} From 47d4a0a411b26ef6526740990dfebb1dd6912f18 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 6 Apr 2024 04:42:29 +0000 Subject: [PATCH 165/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index da422e22b3..97280aed39 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: The fire anomaly is now heavier in content. - type: Tweak - - message: Artifacts no longer block projectiles. - type: Tweak - id: 5814 - time: '2024-01-29T01:30:55.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24666 - author: Krunk changes: - message: Health analysis interfaces now also display a subject's temperature in @@ -3815,3 +3806,12 @@ id: 6313 time: '2024-04-06T01:55:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26745 +- author: BITTERLYNX + changes: + - message: Rodents are more visually pleasing to burn + type: Fix + - message: mothroach and hammy also more visually pleasing to burn + type: Fix + id: 6314 + time: '2024-04-06T04:41:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26758 From 265337d93f21511c86972add3b757164db5414a6 Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Fri, 5 Apr 2024 21:49:14 -0700 Subject: [PATCH 166/206] Change speed threshold for barefeet walking on glass shards and D4 (#26763) Allow walking over glass shards and D4 Co-authored-by: Plykiya --- Resources/Prototypes/Entities/Objects/Fun/dice.yml | 1 - Resources/Prototypes/Entities/Objects/Materials/shards.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice.yml b/Resources/Prototypes/Entities/Objects/Fun/dice.yml index 81a9c173c7..852a1c2699 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/dice.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/dice.yml @@ -120,7 +120,6 @@ - ItemMask - type: StepTrigger intersectRatio: 0.2 - requiredTriggeredSpeed: 0 - type: TriggerOnStepTrigger - type: ShoesRequiredStepTrigger - type: Slippery diff --git a/Resources/Prototypes/Entities/Objects/Materials/shards.yml b/Resources/Prototypes/Entities/Objects/Materials/shards.yml index f94f0a7e0e..621a3b1c38 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/shards.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/shards.yml @@ -63,7 +63,6 @@ acts: [ "Destruction" ] - type: StepTrigger intersectRatio: 0.2 - requiredTriggeredSpeed: 0 - type: ShoesRequiredStepTrigger - type: Slippery slipSound: From 813a0b7b7f409e2396a515e260d7cd98288a1a2e Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 6 Apr 2024 04:50:20 +0000 Subject: [PATCH 167/206] 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 97280aed39..f959311aa4 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Krunk - changes: - - message: Health analysis interfaces now also display a subject's temperature in - Kelvin. - type: Add - id: 5815 - time: '2024-01-29T01:32:54.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24643 - author: Ubaser changes: - message: Detectives now work as independent agents, separate from security, and @@ -3815,3 +3807,10 @@ id: 6314 time: '2024-04-06T04:41:23.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26758 +- author: Plykiya + changes: + - message: You can now carefully walk over glass shards and D4. + type: Tweak + id: 6315 + time: '2024-04-06T04:49:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26763 From 8adfa1918175a416e5b1833d7477a25fb7ff6c9b Mon Sep 17 00:00:00 2001 From: PursuitInAshes <91865152+PursuitInAshes@users.noreply.github.com> Date: Sat, 6 Apr 2024 14:16:47 -0600 Subject: [PATCH 168/206] Add sake bottle (#26776) --- .../VendingMachines/Inventories/boozeomat.yml | 1 + .../Consumable/Drinks/drinks_bottles.yml | 18 ++++++++++++++++++ .../Consumable/Drinks/sakebottle.rsi/icon.png | Bin 0 -> 523 bytes .../Drinks/sakebottle.rsi/icon_open.png | Bin 0 -> 528 bytes .../Drinks/sakebottle.rsi/meta.json | 17 +++++++++++++++++ 5 files changed, 36 insertions(+) create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sakebottle.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sakebottle.rsi/icon_open.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sakebottle.rsi/meta.json diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml index eaa4c839af..bd8b04f982 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml @@ -38,6 +38,7 @@ DrinkWhiskeyBottleFull: 5 DrinkWineBottleFull: 5 DrinkChampagneBottleFull: 2 #because the premium drink + DrinkSakeBottleFull: 3 DrinkBeerCan: 5 DrinkWineCan: 5 emaggedInventory: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml index e2361cfa6e..b6455735cc 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml @@ -661,6 +661,24 @@ - type: Label currentLabel: tonic water +- type: entity + parent: [DrinkBottleVisualsOpenable, DrinkBottleGlassBaseFull] + id: DrinkSakeBottleFull + name: small sake bottle + description: The regret of the next morning seems to be nipping on the bottle too. + components: + - type: SolutionContainerManager + solutions: + drink: + reagents: + - ReagentId: Sake + Quantity: 50 + - type: Label + currentLabel: Sake + - type: Sprite + sprite: Objects/Consumable/Drinks/sakebottle.rsi + - type: Sealable + # Cartons, TODO: this needs to be moved elsewhere eventually, since cartons shouldnt smash into glass shards - type: entity diff --git a/Resources/Textures/Objects/Consumable/Drinks/sakebottle.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/sakebottle.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..53b96d67d5a62ea99df43060ae87def6db0828d0 GIT binary patch literal 523 zcmV+m0`&cfP)u1z!X-1L73S#gcRt zdm#!(otvbEJPk*n`sa5;{=TO`Bw*~zmfaQZS3Ov(uxwN?4pCSS4*&T14 zn)v|0*u)ZpZ`8R&MHttkH*7Zw5;Wx&xKWTmTmvrL)9V9as8w1g;M;V9idFPZ@7w}) z0pb*_XLp!icCK9`H6V^aT#pic{t$3#V6Uv+14IIH8zpiZDbMygp%BUfRttTELZP~0 zqyztl5$r1Q`96%q0_sO`O9iA;@3phj1L{9(f1B!Ip3LIs2A(K)71u=$k8XauYC!-1 N002ovPDHLkV1jN<>bd{` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/sakebottle.rsi/icon_open.png b/Resources/Textures/Objects/Consumable/Drinks/sakebottle.rsi/icon_open.png new file mode 100644 index 0000000000000000000000000000000000000000..57273615e30a4f372a587c3080b883a24ce715d6 GIT binary patch literal 528 zcmV+r0`L8aP);fp6^cpF!N~uKD2s8KFXD_doW}+I$v=(+wG47Jm>4kWn$bWHr-jzwfV7F(Q$es-3(N{s?U|GvR0M*De5`yJ|)G z6anl-;`TVaFbcrb>>5K~)V)N9a9H!bnOjkis4Ta@ih@MqGhoTuz1Hu6e714`Kj(F_ z>4d%e!Yxn-5T{@-5@%_>aP3Mt1L6n_Yd(CP4M5=xT&2`&fC%6yn&c=Nw&!*w6iOLj z>&%bK Date: Sat, 6 Apr 2024 20:17:54 +0000 Subject: [PATCH 169/206] 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 f959311aa4..1987e578cc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Ubaser - changes: - - message: Detectives now work as independent agents, separate from security, and - are encouraged to answer any requests for help. - type: Tweak - id: 5816 - time: '2024-01-29T06:45:27.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/23114 - author: mirrorcult changes: - message: Rotting examine text doesn't have weird grammatical errors now @@ -3814,3 +3806,10 @@ id: 6315 time: '2024-04-06T04:49:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26763 +- author: PursuitInAshes + changes: + - message: Sake Bottles can now be found in the booze-o-mat. + type: Tweak + id: 6316 + time: '2024-04-06T20:16:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26776 From 1b8fc71dd6183b21ebf21b651e4836f39c3103b7 Mon Sep 17 00:00:00 2001 From: osjarw <62134478+osjarw@users.noreply.github.com> Date: Sun, 7 Apr 2024 01:27:16 +0300 Subject: [PATCH 170/206] temporarily remove broken anom behavior (#26775) Removed `Moving` anom behavior --- Resources/Prototypes/Anomaly/behaviours.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Resources/Prototypes/Anomaly/behaviours.yml b/Resources/Prototypes/Anomaly/behaviours.yml index b46ba97fc2..aa9ad2f90d 100644 --- a/Resources/Prototypes/Anomaly/behaviours.yml +++ b/Resources/Prototypes/Anomaly/behaviours.yml @@ -20,7 +20,6 @@ InconstancyParticle: 0.5 FullUnknown: 0.5 Jumping: 0.3 - Moving: 0.1 #Complex FastUnknown: 0.2 JumpingUnknown: 0.1 @@ -133,19 +132,6 @@ shuffleOnParticleHit: true prob: 0.8 -- type: anomalyBehavior - id: Moving - earnPointModifier: 2.2 - description: anomaly-behavior-moving - components: - - type: RandomWalk - minSpeed: 0 - maxSpeed: 0.3 - - type: CanMoveInAir - - type: Physics - bodyType: Dynamic - bodyStatus: InAir - - type: anomalyBehavior id: Jumping earnPointModifier: 1.8 From 98d3ee293c388f742c7a1f16f674522317b520f4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 6 Apr 2024 22:28:22 +0000 Subject: [PATCH 171/206] 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 1987e578cc..3cec0ed3e1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: mirrorcult - changes: - - message: Rotting examine text doesn't have weird grammatical errors now - type: Fix - id: 5817 - time: '2024-01-29T07:50:18.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24689 - author: Eden077 changes: - message: Synaptizine now deals less poison damage. @@ -3813,3 +3806,11 @@ id: 6316 time: '2024-04-06T20:16:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26776 +- author: osjarw + changes: + - message: Removed broken anom behaviour, which causes APE shots to fly through + the anom. + type: Remove + id: 6317 + time: '2024-04-06T22:27:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26775 From 7face4638e814cdef3e2f030e84345c67a03679a Mon Sep 17 00:00:00 2001 From: Verm <32827189+Vermidia@users.noreply.github.com> Date: Sat, 6 Apr 2024 18:58:57 -0500 Subject: [PATCH 172/206] Fix Water cooler visuals (#26784) Fix watercooler visuals --- Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml index e177cc72b1..934298b620 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml @@ -127,6 +127,7 @@ - state: watercooler-2-1 map: ["enum.SolutionContainerLayers.Fill"] visible: false + - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 4 fillBaseName: watercooler-2- From 637526773fe41bbabdf555259d0e2262aa1bed12 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 7 Apr 2024 00:00:03 +0000 Subject: [PATCH 173/206] 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 3cec0ed3e1..7a1578a501 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Eden077 - changes: - - message: Synaptizine now deals less poison damage. - type: Tweak - id: 5818 - time: '2024-01-29T07:55:52.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24676 - author: mirrorcult changes: - message: Various annoying sounds are now a little quieter @@ -3814,3 +3807,10 @@ id: 6317 time: '2024-04-06T22:27:16.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26775 +- author: Vermidia + changes: + - message: Water coolers show how full/what they're full of again. + type: Fix + id: 6318 + time: '2024-04-06T23:58:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26784 From 857f29f5832ac759953a8f713e266f21576115da Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Apr 2024 21:23:39 -0400 Subject: [PATCH 174/206] Update Credits (#26787) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index f201c03630..6c838abb85 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, africalimedrop, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUmAndXGabriel08X, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, Callmore, CaptainSqrBeard, Carbonhell, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, CrafterKolyan, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DmitriyMX, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DoutorWhite, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, Kadeo64, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nails-n-Tape, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, Nylux, OctoRocket, OldDanceJacket, OliverOtter, onoira, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, Phill101, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, Putnam3145, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, Ranger6012, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, renodubois, RiceMar1244, RieBi, RIKELOLDABOSS, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, wafehling, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem +0x6273, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 4dplanner, 612git, 778b, Ablankmann, Acruid, actioninja, adamsong, Admiral-Obvious-001, Adrian16199, Aerocrux, Aexxie, Agoichi, Ahion, AJCM-git, AjexRose, Alekshhh, AlexMorgan3817, AlexUmAndXGabriel08X, AlmondFlour, AlphaQwerty, Altoids1, amylizzle, ancientpower, ArchPigeon, Arendian, arimah, Arteben, AruMoon, as334, AsikKEsel, asperger-sind, avghdev, AzzyIsNotHere, BananaFlambe, Baptr0b0t, BasedUser, beck-thompson, BGare, BingoJohnson-zz, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, Boaz1111, BobdaBiscuit, brainfood1183, Brandon-Huu, Bright0, brndd, BubblegumBlue, BYONDFuckery, c4llv07e, CakeQ, Callmore, CaptainSqrBeard, Carbonhell, casperr04, CatTheSystem, Centronias, chairbender, Charlese2, Cheackraze, cheesePizza2, Chief-Engineer, chromiumboy, Chronophylos, clement-or, Clyybber, Cojoke-dot, ColdAutumnRain, collinlunn, ComicIronic, coolmankid12345, corentt, CrafterKolyan, crazybrain23, creadth, CrigCrag, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DamianX, DangerRevolution, daniel-cr, Darkenson, DawBla, dch-GH, Deahaka, DEATHB4DEFEAT, DeathCamel58, deathride58, DebugOk, Decappi, deepdarkdepths, deepy, Delete69, deltanedas, DerbyX, DmitriyMX, Doctor-Cpu, DoctorBeard, DogZeroX, dontbetank, Doru991, DoubleRiceEddiedd, DoutorWhite, DrMelon, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, Dutch-VanDerLinde, Easypoller, eclips_e, EdenTheLiznerd, EEASAS, Efruit, ElectroSR, elthundercloud, Emisse, EmoGarbage404, Endecc, enumerate0, eoineoineoin, ERORR404V1, Errant-4, estacaoespacialpirata, exincore, exp111, Fahasor, FairlySadPanda, ficcialfaint, Fildrance, FillerVK, Fishfish458, Flareguy, FluffiestFloof, FluidRock, FoLoKe, fooberticus, Fortune117, freeman2651, Fromoriss, FungiFellow, GalacticChimp, gbasood, Geekyhobo, Genkail, Ghagliiarghii, Git-Nivrak, github-actions[bot], gituhabu, GNF54, Golinth, GoodWheatley, Gotimanga, graevy, GreyMario, gusxyz, Gyrandola, h3half, Hanzdegloker, Hardly3D, harikattar, Hebiman, Henry12116, HerCoyote23, Hmeister-real, HoofedEar, hord-brayden, hubismal, Hugal31, Huxellberger, Hyenh, iacore, IamVelcroboy, icekot8, igorsaux, ike709, Illiux, Ilya246, IlyaElDunaev, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, ItsMeThom, j-giebel, Jackal298, Jackrost, jamessimo, janekvap, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JoeHammad1844, joelhed, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, JustArt1m, JustCone14, JustinTether, JustinTrotter, Kadeo64, KaiShibaa, kalane15, kalanosh, KEEYNy, Keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, KingFroozy, kira-er, Kit0vras, KittenColony, Kmc2000, Ko4ergaPunk, komunre, koteq, Krunklehorn, Kukutis96513, kxvvv, Lamrr, LankLTE, lapatison, Leander-0, LetterN, Level10Cybermancer, lever1209, LightVillet, liltenhead, LittleBuilderJane, Lomcastar, LordCarve, LordEclipse, luckyshotpictures, LudwigVonChesterfield, Lukasz825700516, lunarcomets, luringens, lvvova1, lzimann, lzk228, M3739, MACMAN2003, Macoron, MagnusCrowe, ManelNavola, Mangohydra, matthst, Matz05, MehimoNemo, MeltedPixel, MemeProof, Menshin, Mephisto72, Mervill, metalgearsloth, mhamsterr, MilenVolf, Minty642, Mirino97, mirrorcult, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, Moneyl, Moomoobeef, moony, Morb0, Mr0maks, musicmanvr, Myakot, Myctai, N3X15, Nails-n-Tape, Nairodian, Naive817, NakataRin, namespace-Memory, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, nmajask, nok-ko, Nopey, notafet, notquitehadouken, noudoit, noverd, nuke-haus, NULL882, Nylux, OctoRocket, OldDanceJacket, OliverOtter, onoira, osjarw, Owai-Seek, pali6, Pangogie, patrikturi, PaulRitter, Peptide90, peptron1, Phantom-Lily, Phill101, PixelTheKermit, PJB3005, Plykiya, pofitlo, pointer-to-null, PolterTzi, PoorMansDreams, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuroSlavKing, PursuitInAshes, Putnam3145, quatre, QuietlyWhisper, qwerltaz, Radosvik, Radrark, Rainbeon, Rainfey, Rane, ravage123321, rbertoche, Redict, RedlineTriad, RednoWCirabrab, RemberBM, RemieRichards, RemTim, rene-descartes2021, RiceMar1244, RieBi, RIKELOLDABOSS, Rinkashikachi, Rockdtben, rolfero, rosieposieeee, Saakra, Samsterious, SaphireLattice, ScalyChimp, scrato, Scribbles0, Serkket, SethLafuente, ShadowCommander, Shadowtheprotogen546, shampunj, SignalWalker, Simyon264, SirDragooon, Sirionaut, siyengar04, Skarletto, Skrauz, Skyedra, SlamBamActionman, Slava0135, snebl, Snowni, snowsignal, SonicHDC, SoulSloth, SpaceManiac, SpeltIncorrectyl, SphiraI, spoogemonster, ssdaniel24, Stealthbomber16, StrawberryMoses, Subversionary, SweptWasTaken, Szunti, takemysoult, TaralGit, Tayrtahn, tday93, TekuNut, TemporalOroboros, tentekal, tgrkzus, thatrandomcanadianguy, TheArturZh, theashtronaut, thedraccx, themias, Theomund, theOperand, TheShuEd, TimrodDX, Titian3, tkdrg, tmtmtl30, tom-leys, tomasalves8, Tomeno, tosatur, TsjipTsjip, Tunguso4ka, TurboTrackerss14, Tyler-IN, Tyzemol, UbaserB, UKNOWH, Uriende, UristMcDorf, Vaaankas, Varen, VasilisThePikachu, veliebm, Veritius, Vermidia, Verslebas, VigersRay, Visne, volundr-, Vordenburg, vulppine, wafehling, waylon531, weaversam8, Willhelm53, wixoaGit, WlarusFromDaSpace, wrexbe, xRiriq, yathxyz, Ygg01, YotaXP, YuriyKiss, zach-hill, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zerorulez, zionnBE, zlodo, ZNixian, ZoldorfTheWizard, Zumorica, Zymem From f4ca0340758256e95c0315978b6a66df3cd8dbad Mon Sep 17 00:00:00 2001 From: Ubaser <134914314+UbaserB@users.noreply.github.com> Date: Sun, 7 Apr 2024 15:54:25 +1000 Subject: [PATCH 175/206] Update Core (#26791) * add * invalid --- Resources/Maps/core.yml | 12334 +++++++++++++++++--------------------- 1 file changed, 5639 insertions(+), 6695 deletions(-) diff --git a/Resources/Maps/core.yml b/Resources/Maps/core.yml index 06a2fa3d89..9e977b9b35 100644 --- a/Resources/Maps/core.yml +++ b/Resources/Maps/core.yml @@ -74,207 +74,207 @@ entities: chunks: 0,0: ind: 0,0 - tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABbQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAgQAAAAAAbgAAAAABbgAAAAADbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACbQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAgQAAAAAAbgAAAAACbgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 -1,0: ind: -1,0 - tiles: DgAAAAABDgAAAAADJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAADgAAAAAADgAAAAADJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAABDgAAAAABJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAACDgAAAAACJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAHwAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAHwAAAAACegAAAAACegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAegAAAAABegAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAADegAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAALgAAAAAALgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAAfgAAAAAAbQAAAAAAbgAAAAAAbgAAAAADbQAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADfgAAAAAA + tiles: DgAAAAABDgAAAAACJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAADgAAAAAADgAAAAABJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAABDgAAAAAAJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAADDgAAAAADJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABHwAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAHwAAAAABegAAAAADegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAABegAAAAADegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAHwAAAAABegAAAAACegAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAALgAAAAAALgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAAfgAAAAAAbQAAAAAAbgAAAAAAbgAAAAADbQAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAA version: 6 0,-1: ind: 0,-1 - tiles: bAAAAAAAbAAAAAAAXQAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAAAJAAAAAADXQAAAAAAXQAAAAAAaAAAAAADbAAAAAAAbAAAAAAAXQAAAAABaAAAAAADJAAAAAABJAAAAAADJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAXQAAAAABaAAAAAADJAAAAAADJAAAAAAAJAAAAAACfgAAAAAAbAAAAAAAbgAAAAADbgAAAAABbgAAAAABbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAXQAAAAADfgAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAACfgAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAOwAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: bAAAAAAAbAAAAAAAXQAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACJAAAAAACJAAAAAABXQAAAAAAXQAAAAABaAAAAAABbAAAAAAAbAAAAAAAXQAAAAACaAAAAAADJAAAAAAAJAAAAAADJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAXQAAAAADaAAAAAADJAAAAAADJAAAAAAAJAAAAAADfgAAAAAAbAAAAAAAbgAAAAABbgAAAAABbgAAAAACbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAXQAAAAADfgAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAACfgAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAOwAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 -1,-1: ind: -1,-1 - tiles: bAAAAAAAfgAAAAAAHwAAAAAAHwAAAAACXQAAAAACaAAAAAABXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAXQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAHwAAAAACHwAAAAAAXQAAAAACfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAXQAAAAACXQAAAAACXQAAAAADXQAAAAADaAAAAAADXQAAAAADbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABfgAAAAAAJAAAAAABJAAAAAADJAAAAAADXQAAAAACJAAAAAABXQAAAAACXQAAAAACaAAAAAAAXQAAAAADbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACHwAAAAABfgAAAAAAXQAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAegAAAAADegAAAAAAegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAegAAAAAAegAAAAACegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAegAAAAACegAAAAACegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAADgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAADDgAAAAAAJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: bAAAAAAAfgAAAAAAHwAAAAACHwAAAAADXQAAAAAAaAAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACXQAAAAADXQAAAAABXQAAAAAAfgAAAAAAXQAAAAADbAAAAAAAbAAAAAAAfgAAAAAAHwAAAAADHwAAAAACXQAAAAABfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABXQAAAAADXQAAAAADaAAAAAAAXQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADfgAAAAAAJAAAAAADJAAAAAAAJAAAAAABXQAAAAABJAAAAAACXQAAAAACXQAAAAABaAAAAAADXQAAAAACbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACHwAAAAADfgAAAAAAXQAAAAABbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAXQAAAAADXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAegAAAAADegAAAAABegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAegAAAAACegAAAAADegAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAegAAAAADegAAAAACegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAADgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAADDgAAAAACJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,-2: ind: -1,-2 - tiles: XQAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAABXQAAAAACaAAAAAABXQAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAAAXQAAAAAAXQAAAAABaAAAAAADaAAAAAADaAAAAAAAaAAAAAADaAAAAAADaAAAAAAAaAAAAAABaAAAAAABaAAAAAACaAAAAAACTgAAAAAATgAAAAACaAAAAAABTgAAAAADTgAAAAACaAAAAAABXQAAAAADXQAAAAACXQAAAAADXQAAAAACXQAAAAADXQAAAAAAXQAAAAADaAAAAAADXQAAAAABXQAAAAACXQAAAAACXQAAAAADXQAAAAAAXQAAAAAAXQAAAAABXQAAAAADHwAAAAABfgAAAAAAHwAAAAADfgAAAAAAXQAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAXQAAAAABXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAaAAAAAAAaAAAAAADXQAAAAAAXQAAAAADfgAAAAAAHwAAAAABHwAAAAABHwAAAAACHwAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAADaAAAAAADaAAAAAAAaAAAAAABXQAAAAAAXQAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAACHwAAAAADHwAAAAABHwAAAAACfgAAAAAAbgAAAAADfgAAAAAAJAAAAAACfgAAAAAAaAAAAAAAaAAAAAABXQAAAAAAJAAAAAACfgAAAAAAHwAAAAABHwAAAAAAHwAAAAACaQAAAAAAaQAAAAAAaQAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAaQAAAAAAaQAAAAAAaQAAAAAAfgAAAAAAbgAAAAADfgAAAAAAHwAAAAADHwAAAAADHwAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAACXQAAAAADXQAAAAACXQAAAAADaQAAAAAAaQAAAAAAaQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADXQAAAAACTgAAAAABTgAAAAABTgAAAAADXQAAAAADXQAAAAAATgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAJAAAAAABJAAAAAADJAAAAAABXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAJAAAAAACbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAABJAAAAAACXQAAAAABJAAAAAACJAAAAAAAJAAAAAADfgAAAAAAJAAAAAADJAAAAAAAbgAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAACfgAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAACXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAAAHwAAAAACXQAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABXQAAAAADfgAAAAAAXQAAAAADXQAAAAADbQAAAAAAfgAAAAAAHwAAAAACHwAAAAADXQAAAAAAaAAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAACXQAAAAABXQAAAAAAXQAAAAADfgAAAAAAXQAAAAACXQAAAAAD + tiles: XQAAAAABXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAACaAAAAAACXQAAAAAAXQAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAADXQAAAAABXQAAAAADaAAAAAAAaAAAAAAAaAAAAAABaAAAAAACaAAAAAACaAAAAAADaAAAAAADaAAAAAABaAAAAAABaAAAAAACTgAAAAADTgAAAAAAaAAAAAADTgAAAAABTgAAAAABaAAAAAACXQAAAAACXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAABXQAAAAADXQAAAAAAaAAAAAADXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAHwAAAAADfgAAAAAAHwAAAAAAfgAAAAAAXQAAAAADfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAaAAAAAACaAAAAAABXQAAAAAAXQAAAAABfgAAAAAAHwAAAAABHwAAAAACHwAAAAACHwAAAAAAHwAAAAABHwAAAAADfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAACaAAAAAABaAAAAAABaAAAAAABXQAAAAABXQAAAAACfgAAAAAAHwAAAAABHwAAAAADHwAAAAACHwAAAAACHwAAAAACHwAAAAACfgAAAAAAbgAAAAABfgAAAAAAJAAAAAADfgAAAAAAaAAAAAACaAAAAAAAXQAAAAADJAAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAACaQAAAAAAaQAAAAAAaQAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAaQAAAAAAaQAAAAAAaQAAAAAAfgAAAAAAbgAAAAADfgAAAAAAHwAAAAABHwAAAAAAHwAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAAAXQAAAAACaQAAAAAAaQAAAAAAaQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAABXQAAAAABTgAAAAAATgAAAAADTgAAAAAAXQAAAAAAXQAAAAAATgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAJAAAAAABJAAAAAAAJAAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACJAAAAAADbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAACJAAAAAAAXQAAAAAAJAAAAAADJAAAAAACJAAAAAAAfgAAAAAAJAAAAAAAJAAAAAABbgAAAAACfgAAAAAAXQAAAAAAXQAAAAADXQAAAAABfgAAAAAAXQAAAAABXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAABHwAAAAACXQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAbQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAXQAAAAAAaAAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAABfgAAAAAAXQAAAAADXQAAAAAC version: 6 0,-2: ind: 0,-2 - tiles: aAAAAAABaAAAAAADXQAAAAAAXQAAAAABaAAAAAAAXQAAAAABXQAAAAACXQAAAAACaAAAAAABXQAAAAABaAAAAAADXQAAAAACXQAAAAAAXQAAAAADXQAAAAACXQAAAAABTgAAAAAATgAAAAACaAAAAAAAaAAAAAACaAAAAAABaAAAAAAAaAAAAAAAaAAAAAABaAAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAAAaAAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAABXQAAAAADfgAAAAAAHwAAAAACJAAAAAACJAAAAAADJAAAAAADJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAHwAAAAADJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAJAAAAAAAegAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAADJAAAAAAAfgAAAAAAHwAAAAACJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAegAAAAAAegAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAACHwAAAAACfgAAAAAAHwAAAAADJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAegAAAAAAegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAJAAAAAACJAAAAAABJAAAAAADJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABaAAAAAACXQAAAAAAHwAAAAADfgAAAAAAHwAAAAADJAAAAAACJAAAAAAAJAAAAAABJAAAAAADXQAAAAABXQAAAAACJAAAAAABfgAAAAAAJAAAAAAAaAAAAAADaAAAAAAAaAAAAAACXQAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAATgAAAAABTgAAAAABJAAAAAAAfgAAAAAAaAAAAAABaAAAAAABaAAAAAAAaAAAAAACXQAAAAADHwAAAAABHwAAAAACHwAAAAADHwAAAAADHwAAAAACHwAAAAAAHwAAAAABXQAAAAABXQAAAAABXQAAAAADaAAAAAAAaAAAAAADaAAAAAABaAAAAAACaAAAAAADXQAAAAACHwAAAAABHwAAAAAAHwAAAAACHwAAAAABXQAAAAADXQAAAAABaAAAAAACXQAAAAAAXQAAAAAAXQAAAAACfgAAAAAAaAAAAAABaAAAAAACaAAAAAAAaAAAAAABXQAAAAACHwAAAAABHwAAAAABfgAAAAAAHwAAAAAAXQAAAAADXQAAAAACaAAAAAABHwAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAaAAAAAAAaAAAAAABaAAAAAACaAAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAaAAAAAAAaAAAAAAAXQAAAAAAfgAAAAAAJAAAAAAAJAAAAAADJAAAAAACXQAAAAACXQAAAAACaAAAAAADXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAADXQAAAAACfgAAAAAAJAAAAAABHwAAAAACHwAAAAAAXQAAAAAAXQAAAAAAaAAAAAABXQAAAAADXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAHwAAAAADHwAAAAADXQAAAAACXQAAAAABaAAAAAAD + tiles: aAAAAAADaAAAAAADXQAAAAADXQAAAAACaAAAAAABXQAAAAAAXQAAAAADXQAAAAAAaAAAAAAAXQAAAAADaAAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAACXQAAAAAATgAAAAAATgAAAAACaAAAAAAAaAAAAAADaAAAAAAAaAAAAAABaAAAAAADaAAAAAADaAAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAAAaAAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAAAXQAAAAAAfgAAAAAAHwAAAAADJAAAAAAAJAAAAAABJAAAAAACJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAHwAAAAACJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAJAAAAAADegAAAAADfgAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAACJAAAAAACfgAAAAAAHwAAAAAAJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAegAAAAADegAAAAACfgAAAAAAHwAAAAABHwAAAAABHwAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAHwAAAAADJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAegAAAAABegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABJAAAAAADJAAAAAADJAAAAAADJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAADaAAAAAAAXQAAAAAAHwAAAAACfgAAAAAAHwAAAAADJAAAAAADJAAAAAADJAAAAAADJAAAAAADXQAAAAADXQAAAAAAJAAAAAADfgAAAAAAJAAAAAAAaAAAAAADaAAAAAADaAAAAAABXQAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAATgAAAAADTgAAAAADJAAAAAAAfgAAAAAAaAAAAAABaAAAAAACaAAAAAABaAAAAAADXQAAAAAAHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAADHwAAAAABXQAAAAADXQAAAAAAXQAAAAABaAAAAAACaAAAAAADaAAAAAABaAAAAAACaAAAAAABXQAAAAADHwAAAAAAHwAAAAABHwAAAAADHwAAAAAAXQAAAAADXQAAAAADaAAAAAABXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAaAAAAAABaAAAAAADaAAAAAAAaAAAAAABXQAAAAACHwAAAAACHwAAAAACfgAAAAAAHwAAAAAAXQAAAAADXQAAAAADaAAAAAADHwAAAAAAHwAAAAABHwAAAAAAfgAAAAAAaAAAAAABaAAAAAADaAAAAAADaAAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAACaAAAAAABaAAAAAABXQAAAAADfgAAAAAAJAAAAAACJAAAAAABJAAAAAAAXQAAAAABXQAAAAAAaAAAAAAAXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAXQAAAAABXQAAAAABXQAAAAADXQAAAAACXQAAAAABfgAAAAAAJAAAAAACHwAAAAACHwAAAAABXQAAAAADXQAAAAAAaAAAAAABXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADHwAAAAADHwAAAAADXQAAAAACXQAAAAACaAAAAAAD version: 6 1,-2: ind: 1,-2 - tiles: XQAAAAABXQAAAAAAaAAAAAADXQAAAAABaAAAAAADXQAAAAABfgAAAAAAHwAAAAAAaAAAAAADaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAACHwAAAAABfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAABXQAAAAADfgAAAAAAHwAAAAAAaAAAAAACaAAAAAAAaAAAAAAAaAAAAAACaAAAAAAAHwAAAAACfgAAAAAAHwAAAAABJAAAAAAAHwAAAAACfgAAAAAAXQAAAAACaAAAAAACXQAAAAABfgAAAAAAHwAAAAADaAAAAAACaAAAAAACaAAAAAABXQAAAAABaAAAAAABHwAAAAABHwAAAAACHwAAAAADJAAAAAACHwAAAAABfgAAAAAAXQAAAAACaAAAAAAAXQAAAAABfgAAAAAAHwAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAADaAAAAAACHwAAAAACfgAAAAAAHwAAAAADJAAAAAAAHwAAAAABfgAAAAAAaAAAAAABaAAAAAAAaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACJAAAAAAAHwAAAAACfgAAAAAAXQAAAAABaAAAAAABXQAAAAACJAAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAJAAAAAAAHwAAAAACfgAAAAAAXQAAAAADaAAAAAADaAAAAAABaAAAAAAAaAAAAAABaAAAAAADaAAAAAABaAAAAAADaAAAAAAAaAAAAAABXQAAAAAAfgAAAAAAHwAAAAADJAAAAAACHwAAAAADfgAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAAAXQAAAAADaAAAAAAAXQAAAAACfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAABfgAAAAAAXQAAAAABfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAAAaAAAAAAAXQAAAAAAfgAAAAAAXQAAAAACfgAAAAAAHwAAAAABHwAAAAACXQAAAAADXQAAAAAAXQAAAAADfgAAAAAAXQAAAAACfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAAAaAAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAACXQAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAABfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAADaAAAAAADXQAAAAACfgAAAAAAXQAAAAABfgAAAAAAHwAAAAADJAAAAAAAXQAAAAABXQAAAAAAXQAAAAAAfgAAAAAAHwAAAAABfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAAAaAAAAAADXQAAAAACaAAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAAAaAAAAAADaAAAAAADaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAHwAAAAACfgAAAAAAXQAAAAABXQAAAAACXQAAAAACaAAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAA + tiles: XQAAAAABXQAAAAACaAAAAAADXQAAAAAAaAAAAAABXQAAAAADfgAAAAAAHwAAAAACaAAAAAACaAAAAAACaAAAAAAAaAAAAAABaAAAAAABHwAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAACfgAAAAAAHwAAAAAAaAAAAAACaAAAAAACaAAAAAADaAAAAAADaAAAAAABHwAAAAADfgAAAAAAHwAAAAADJAAAAAAAHwAAAAAAfgAAAAAAXQAAAAAAaAAAAAABXQAAAAACfgAAAAAAHwAAAAABaAAAAAACaAAAAAACaAAAAAADXQAAAAAAaAAAAAABHwAAAAAAHwAAAAACHwAAAAABJAAAAAACHwAAAAABfgAAAAAAXQAAAAADaAAAAAABXQAAAAAAfgAAAAAAHwAAAAACaAAAAAAAaAAAAAABaAAAAAAAaAAAAAABaAAAAAABHwAAAAACfgAAAAAAHwAAAAAAJAAAAAACHwAAAAADfgAAAAAAaAAAAAACaAAAAAAAaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACJAAAAAADHwAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAACJAAAAAACXQAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAAAXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAJAAAAAAAHwAAAAADfgAAAAAAXQAAAAADaAAAAAABaAAAAAADaAAAAAACaAAAAAAAaAAAAAADaAAAAAABaAAAAAAAaAAAAAADaAAAAAABXQAAAAAAfgAAAAAAHwAAAAADJAAAAAABHwAAAAADfgAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAAAaAAAAAACXQAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAABXQAAAAABfgAAAAAAXQAAAAAAfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAAAaAAAAAABXQAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAHwAAAAADHwAAAAABXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAXQAAAAABfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAADaAAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADXQAAAAABXQAAAAADXQAAAAABXQAAAAABXQAAAAAAfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAABaAAAAAADXQAAAAABfgAAAAAAXQAAAAAAfgAAAAAAHwAAAAACJAAAAAADXQAAAAABXQAAAAABXQAAAAABfgAAAAAAHwAAAAABfgAAAAAAMwAAAAAAMwAAAAAAXQAAAAAAaAAAAAAAXQAAAAACaAAAAAADXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAABaAAAAAAAaAAAAAADaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAACHwAAAAADfgAAAAAAXQAAAAACXQAAAAACXQAAAAAAaAAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAA version: 6 1,-1: ind: 1,-1 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAgQAAAAAAbQAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAbgAAAAABfgAAAAAAJAAAAAADJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAJAAAAAABJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAHwAAAAABHwAAAAAC + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAgQAAAAAAbQAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAATwAAAAAAfgAAAAAAbgAAAAABfgAAAAAAJAAAAAADJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAJAAAAAAAJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAHwAAAAAAHwAAAAAA version: 6 -2,-2: ind: -2,-2 - tiles: EgAAAAAAXQAAAAADegAAAAABegAAAAAAXQAAAAACfgAAAAAAJAAAAAACXQAAAAAAXQAAAAACXQAAAAACXQAAAAADXQAAAAAAaAAAAAACXQAAAAABXQAAAAADXQAAAAACEgAAAAABXQAAAAACegAAAAAAegAAAAACXQAAAAADfgAAAAAAXQAAAAADTgAAAAACTgAAAAACaAAAAAABTgAAAAACaAAAAAABaAAAAAAAaAAAAAADaAAAAAAAaAAAAAACEgAAAAAAXQAAAAACegAAAAACegAAAAAAXQAAAAACfgAAAAAAXQAAAAACTgAAAAACXQAAAAADXQAAAAACXQAAAAAAXQAAAAADaAAAAAABXQAAAAAAXQAAAAABXQAAAAADEgAAAAADXQAAAAABegAAAAABegAAAAADXQAAAAABaAAAAAACXQAAAAAAaAAAAAADXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAEgAAAAAAXQAAAAABegAAAAAAegAAAAACXQAAAAABaAAAAAAAXQAAAAADTgAAAAACXQAAAAABXQAAAAACaAAAAAAAHwAAAAAAHwAAAAAAJgAAAAADJgAAAAABJgAAAAADEgAAAAADXQAAAAACegAAAAABegAAAAAAXQAAAAADfgAAAAAAXQAAAAABTgAAAAADXQAAAAAAXQAAAAAAaAAAAAAAHwAAAAABHwAAAAACTgAAAAADTgAAAAABTgAAAAAAXQAAAAADXQAAAAAAKAAAAAACKAAAAAAAXQAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABXQAAAAAAaAAAAAADHwAAAAAAHwAAAAADJgAAAAABJgAAAAABJgAAAAACKAAAAAADKAAAAAADKAAAAAACKAAAAAADXQAAAAACfgAAAAAAXQAAAAACaAAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAADXQAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAbgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAABXQAAAAAAaAAAAAABXQAAAAADfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAACaAAAAAADfgAAAAAAfgAAAAAAegAAAAACfgAAAAAAegAAAAABfgAAAAAAfgAAAAAAQwAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAXQAAAAABaAAAAAADXQAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAABegAAAAADegAAAAAAfgAAAAAAQwAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAXQAAAAAAaAAAAAADXQAAAAABfgAAAAAAegAAAAAAegAAAAABegAAAAADegAAAAABegAAAAABfgAAAAAAQwAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAXQAAAAACaAAAAAACXQAAAAAAegAAAAABegAAAAAAegAAAAABegAAAAAAegAAAAAAegAAAAADfgAAAAAAQwAAAAAAfgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAAAegAAAAABegAAAAACegAAAAACegAAAAABegAAAAACegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABfgAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAfgAAAAAAfgAAAAAA + tiles: EgAAAAACXQAAAAADegAAAAABegAAAAACXQAAAAADfgAAAAAAJAAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAACXQAAAAABaAAAAAAAXQAAAAAAXQAAAAABXQAAAAAAEgAAAAACXQAAAAAAegAAAAAAegAAAAAAXQAAAAACfgAAAAAAXQAAAAACTgAAAAAATgAAAAAAaAAAAAACTgAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAaAAAAAADEgAAAAAAXQAAAAACegAAAAAAegAAAAABXQAAAAADfgAAAAAAXQAAAAABTgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACaAAAAAADXQAAAAAAXQAAAAAAXQAAAAADEgAAAAADXQAAAAAAegAAAAABegAAAAADXQAAAAACaAAAAAAAXQAAAAADaAAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAACEgAAAAAAXQAAAAACegAAAAABegAAAAABXQAAAAAAaAAAAAACXQAAAAACTgAAAAAAXQAAAAABXQAAAAAAaAAAAAADHwAAAAADHwAAAAAAJgAAAAADJgAAAAABJgAAAAAAEgAAAAACXQAAAAABegAAAAADegAAAAABXQAAAAABfgAAAAAAXQAAAAAATgAAAAACXQAAAAACXQAAAAADaAAAAAADHwAAAAADHwAAAAABTgAAAAABTgAAAAAATgAAAAABXQAAAAACXQAAAAABKAAAAAACKAAAAAADXQAAAAAAfgAAAAAAXQAAAAAAaAAAAAACXQAAAAAAXQAAAAADaAAAAAACHwAAAAADHwAAAAAAJgAAAAABJgAAAAAAJgAAAAABKAAAAAAAKAAAAAADKAAAAAAAKAAAAAACXQAAAAABfgAAAAAAXQAAAAAAaAAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAABXQAAAAACfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAbgAAAAACgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAACXQAAAAADaAAAAAABXQAAAAADfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAAAaAAAAAABfgAAAAAAfgAAAAAAegAAAAAAfgAAAAAAegAAAAABfgAAAAAAfgAAAAAAQwAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAXQAAAAADaAAAAAABXQAAAAADfgAAAAAAegAAAAAAegAAAAACegAAAAAAegAAAAABegAAAAABfgAAAAAAQwAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAXQAAAAABaAAAAAADXQAAAAACfgAAAAAAegAAAAAAegAAAAADegAAAAADegAAAAACegAAAAABfgAAAAAAQwAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAXQAAAAAAaAAAAAABXQAAAAACegAAAAACegAAAAADegAAAAAAegAAAAABegAAAAAAegAAAAADfgAAAAAAQwAAAAAAfgAAAAAAFgAAAAAAFgAAAAAAFgAAAAAAfgAAAAAAXQAAAAACaAAAAAACXQAAAAAAegAAAAACegAAAAACegAAAAABegAAAAAAegAAAAAAegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACfgAAAAAAfgAAAAAAXQAAAAABaAAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAfgAAAAAAfgAAAAAA version: 6 -2,-1: ind: -2,-1 - tiles: egAAAAACegAAAAACegAAAAAAegAAAAACegAAAAACaAAAAAADXQAAAAACaAAAAAABXQAAAAABfgAAAAAAegAAAAABegAAAAACegAAAAAAewAAAAADewAAAAADfgAAAAAATgAAAAAATgAAAAAAKAAAAAABTgAAAAADTgAAAAADaAAAAAADXQAAAAAAaAAAAAABXQAAAAABfgAAAAAAegAAAAABegAAAAACegAAAAADewAAAAADewAAAAAAfgAAAAAATgAAAAABTgAAAAAAKAAAAAAATgAAAAADTgAAAAABaAAAAAAAXQAAAAABaAAAAAABXQAAAAADfgAAAAAAegAAAAACegAAAAADegAAAAABewAAAAAAewAAAAACfgAAAAAAegAAAAAAegAAAAABegAAAAADegAAAAAAegAAAAAAaAAAAAABXQAAAAADaAAAAAAAXQAAAAADfgAAAAAAegAAAAADegAAAAAAegAAAAABewAAAAABewAAAAADfgAAAAAAKAAAAAACfgAAAAAAfgAAAAAAJAAAAAADfgAAAAAAfgAAAAAAaAAAAAACaAAAAAADaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAaAAAAAAAfgAAAAAAewAAAAAAewAAAAABewAAAAADfgAAAAAAXQAAAAAAaAAAAAACXQAAAAADXQAAAAADfgAAAAAAHwAAAAADHwAAAAADHwAAAAACQAAAAAAAfgAAAAAAaAAAAAABfgAAAAAAKAAAAAADKAAAAAACKAAAAAAAfgAAAAAAXQAAAAACaAAAAAADaAAAAAAAXQAAAAADfgAAAAAAHwAAAAADHwAAAAADHwAAAAABQAAAAAAAQAAAAAAAXQAAAAABfgAAAAAAKAAAAAACKAAAAAADKAAAAAABfgAAAAAAXQAAAAACXQAAAAABaAAAAAAAXQAAAAADfgAAAAAAHwAAAAABHwAAAAACHwAAAAACQAAAAAAAQAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAAAaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbgAAAAABbgAAAAABfgAAAAAAfgAAAAAAaAAAAAADaAAAAAACaAAAAAAAaAAAAAACaAAAAAADfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAABaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXwAAAAABXwAAAAAAJAAAAAACXwAAAAADXwAAAAAAXwAAAAAAXwAAAAAAXQAAAAAAXQAAAAACXQAAAAABaAAAAAAAegAAAAAAegAAAAAAegAAAAADegAAAAACegAAAAACHwAAAAAAHwAAAAACXwAAAAACHwAAAAABHwAAAAABHwAAAAADHwAAAAACXQAAAAAAXQAAAAACXQAAAAAAaAAAAAABegAAAAAAegAAAAADegAAAAACegAAAAAAegAAAAADHwAAAAABHwAAAAAAXwAAAAACHwAAAAAAHwAAAAABHwAAAAADHwAAAAACXQAAAAADXQAAAAACXQAAAAADaAAAAAABegAAAAAAegAAAAABegAAAAAAegAAAAADegAAAAACHwAAAAACHwAAAAACXwAAAAAAHwAAAAAAHwAAAAABHwAAAAAAHwAAAAACXQAAAAABXQAAAAACXQAAAAAAaAAAAAACegAAAAAAegAAAAACegAAAAABegAAAAADfgAAAAAAXQAAAAACXQAAAAADXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAABaAAAAAAAegAAAAADegAAAAADegAAAAABegAAAAADegAAAAAA + tiles: egAAAAAAegAAAAAAegAAAAABegAAAAAAegAAAAACaAAAAAABXQAAAAAAaAAAAAABXQAAAAACfgAAAAAAegAAAAACegAAAAACegAAAAACewAAAAACewAAAAABfgAAAAAATgAAAAACTgAAAAABKAAAAAACTgAAAAADTgAAAAAAaAAAAAACXQAAAAAAaAAAAAACXQAAAAABfgAAAAAAegAAAAADegAAAAABegAAAAADewAAAAAAewAAAAABfgAAAAAATgAAAAABTgAAAAACKAAAAAAATgAAAAAATgAAAAABaAAAAAABXQAAAAABaAAAAAADXQAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAADewAAAAACewAAAAACfgAAAAAAegAAAAAAegAAAAAAegAAAAABegAAAAADegAAAAADaAAAAAACXQAAAAADaAAAAAADXQAAAAAAfgAAAAAAegAAAAABegAAAAACegAAAAABewAAAAAAewAAAAADfgAAAAAAKAAAAAAAfgAAAAAAfgAAAAAAJAAAAAADfgAAAAAAfgAAAAAAaAAAAAACaAAAAAADaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAaAAAAAADfgAAAAAAewAAAAACewAAAAACewAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAABXQAAAAACfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAQAAAAAAAfgAAAAAAaAAAAAACfgAAAAAAKAAAAAADKAAAAAACKAAAAAAAfgAAAAAAXQAAAAABaAAAAAABaAAAAAADXQAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAACQAAAAAAAQAAAAAAAXQAAAAABfgAAAAAAKAAAAAAAKAAAAAACKAAAAAACfgAAAAAAXQAAAAABXQAAAAAAaAAAAAABXQAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAACaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbgAAAAADbgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAACaAAAAAAAaAAAAAACaAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAACaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXwAAAAABXwAAAAABJAAAAAADXwAAAAADXwAAAAAAXwAAAAABXwAAAAAAXQAAAAADXQAAAAABXQAAAAADaAAAAAACegAAAAABegAAAAADegAAAAADegAAAAABegAAAAAAHwAAAAADHwAAAAABXwAAAAADHwAAAAACHwAAAAABHwAAAAADHwAAAAADXQAAAAACXQAAAAADXQAAAAACaAAAAAABegAAAAACegAAAAAAegAAAAADegAAAAADegAAAAABHwAAAAABHwAAAAAAXwAAAAABHwAAAAABHwAAAAAAHwAAAAACHwAAAAADXQAAAAADXQAAAAABXQAAAAADaAAAAAACegAAAAADegAAAAADegAAAAABegAAAAABegAAAAACHwAAAAACHwAAAAADXwAAAAADHwAAAAADHwAAAAAAHwAAAAACHwAAAAACXQAAAAABXQAAAAABXQAAAAABaAAAAAABegAAAAACegAAAAADegAAAAAAegAAAAADfgAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACaAAAAAABegAAAAABegAAAAAAegAAAAACegAAAAADegAAAAAD version: 6 1,0: ind: 1,0 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAADaAAAAAACaAAAAAABaAAAAAACMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAAAXQAAAAABXQAAAAADaAAAAAABXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABTgAAAAABTgAAAAABaAAAAAABaAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAaAAAAAADaAAAAAABaAAAAAAAaAAAAAADaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAATgAAAAABXQAAAAADXQAAAAABXQAAAAAAJAAAAAADJAAAAAADJAAAAAAAXQAAAAAAXQAAAAACaAAAAAABXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAAAaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAADaAAAAAAAfgAAAAAAJAAAAAABJAAAAAAAJAAAAAACXQAAAAAAXQAAAAACXQAAAAABfgAAAAAAXQAAAAABXQAAAAABfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABfgAAAAAAJAAAAAACJAAAAAACJAAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAAAXQAAAAABXQAAAAABfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAACfgAAAAAAJAAAAAAAJAAAAAACJAAAAAABXQAAAAACXQAAAAABXQAAAAADfgAAAAAAXQAAAAACXQAAAAABfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAABfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAADXQAAAAACXQAAAAACXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAXQAAAAABXQAAAAADfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAACaAAAAAAAXQAAAAAAaAAAAAADaAAAAAAAfgAAAAAAaAAAAAABaAAAAAABXQAAAAADXQAAAAACfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAACXQAAAAAAaAAAAAACaAAAAAACHQAAAAAAaAAAAAAAaAAAAAABXQAAAAACXQAAAAABfgAAAAAAXQAAAAADXQAAAAABfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAADaAAAAAADXQAAAAADaAAAAAABaAAAAAAAXQAAAAADaAAAAAABaAAAAAADXQAAAAAAXQAAAAADfgAAAAAAXQAAAAACXQAAAAADbAAAAAAAbQAAAAAAfgAAAAAAXQAAAAAAaAAAAAABXQAAAAACaAAAAAAAaAAAAAADXQAAAAADaAAAAAAAaAAAAAADXQAAAAACXQAAAAABfgAAAAAAXQAAAAABXQAAAAABbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAABaAAAAAAAaAAAAAAAfgAAAAAAaAAAAAAAaAAAAAADXQAAAAACXQAAAAACfgAAAAAAXQAAAAABXQAAAAAC + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAABaAAAAAAAaAAAAAABaAAAAAACMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAABXQAAAAABXQAAAAADXQAAAAAAXQAAAAADXQAAAAAAXQAAAAACXQAAAAAAaAAAAAADXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADTgAAAAABTgAAAAACaAAAAAADaAAAAAACbQAAAAAAbQAAAAAAbQAAAAAAaAAAAAADaAAAAAACaAAAAAAAaAAAAAADaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACTgAAAAADXQAAAAAAXQAAAAABXQAAAAACJAAAAAAAJAAAAAAAJAAAAAABXQAAAAACXQAAAAACaAAAAAABXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAACXQAAAAACfgAAAAAAfgAAAAAAaAAAAAABaAAAAAABaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAaAAAAAABfgAAAAAAJAAAAAAAJAAAAAADJAAAAAABXQAAAAAAXQAAAAABXQAAAAADfgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAACaAAAAAABXQAAAAADfgAAAAAAJAAAAAAAJAAAAAABJAAAAAABXQAAAAACXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAAAaAAAAAACXQAAAAADfgAAAAAAJAAAAAACJAAAAAABJAAAAAABXQAAAAAAXQAAAAACXQAAAAABfgAAAAAAXQAAAAABXQAAAAABfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAAAaAAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAADaAAAAAAAaAAAAAAAfgAAAAAAaAAAAAADaAAAAAADXQAAAAADXQAAAAABfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAADaAAAAAAAaAAAAAAAHQAAAAADaAAAAAAAaAAAAAABXQAAAAABXQAAAAADfgAAAAAAXQAAAAAAXQAAAAACfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAACaAAAAAAAaAAAAAAAXQAAAAAAaAAAAAADaAAAAAADXQAAAAABXQAAAAADfgAAAAAAXQAAAAACXQAAAAAAbAAAAAAAbQAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAADaAAAAAABaAAAAAAAXQAAAAADaAAAAAAAaAAAAAABXQAAAAACXQAAAAABfgAAAAAAXQAAAAACXQAAAAADbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAAAaAAAAAABXQAAAAADaAAAAAABaAAAAAADfgAAAAAAaAAAAAADaAAAAAACXQAAAAABXQAAAAADfgAAAAAAXQAAAAACXQAAAAAC version: 6 2,-2: ind: 2,-2 - tiles: HwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAACfgAAAAAAHwAAAAAAHwAAAAAAewAAAAAAfgAAAAAAewAAAAACHwAAAAABHwAAAAADMwAAAAAAHwAAAAADHwAAAAADewAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAACHwAAAAACHwAAAAADHwAAAAABewAAAAAAewAAAAACewAAAAAAHwAAAAABHwAAAAACMwAAAAAAHwAAAAACHwAAAAACewAAAAABfgAAAAAAHwAAAAADHwAAAAACHwAAAAADfgAAAAAAHwAAAAADHwAAAAAAewAAAAAAfgAAAAAAewAAAAABHwAAAAABHwAAAAABHwAAAAAAHwAAAAACHwAAAAACewAAAAABfgAAAAAAHwAAAAACHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAewAAAAABewAAAAAAewAAAAACewAAAAADewAAAAAAewAAAAACfgAAAAAAHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAegAAAAABegAAAAADegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAAAXQAAAAAAegAAAAABegAAAAAAegAAAAADfgAAAAAAHwAAAAABHwAAAAACHwAAAAAAXQAAAAABXQAAAAAAegAAAAABJAAAAAABfgAAAAAAHwAAAAACXQAAAAABXQAAAAAAXQAAAAACegAAAAADegAAAAABegAAAAACHwAAAAAAHwAAAAACHwAAAAADHwAAAAACXQAAAAADXQAAAAACXQAAAAACXQAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAADXQAAAAACfgAAAAAAJAAAAAADfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAADXQAAAAABXQAAAAADXQAAAAABXQAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABfgAAAAAAcAAAAAACcAAAAAADcAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAACXQAAAAADXQAAAAABXQAAAAACaAAAAAACXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAACXQAAAAAAaAAAAAADXQAAAAACTgAAAAACTgAAAAADaAAAAAAATgAAAAACTgAAAAADaAAAAAACaAAAAAABTgAAAAADaAAAAAADTgAAAAABTgAAAAACTgAAAAACaAAAAAADTgAAAAAAaAAAAAABaAAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAABaAAAAAACXQAAAAACXQAAAAAAXQAAAAAAaAAAAAADXQAAAAABXQAAAAACXQAAAAACaAAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAABfgAAAAAAXQAAAAABaAAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAA + tiles: HwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAACfgAAAAAAHwAAAAABHwAAAAAAewAAAAACfgAAAAAAewAAAAABHwAAAAABHwAAAAABMwAAAAAAHwAAAAACHwAAAAACewAAAAABfgAAAAAAHwAAAAABHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAACewAAAAADewAAAAACewAAAAABHwAAAAADHwAAAAADMwAAAAAAHwAAAAADHwAAAAABewAAAAABfgAAAAAAHwAAAAABHwAAAAADHwAAAAABfgAAAAAAHwAAAAADHwAAAAACewAAAAACfgAAAAAAewAAAAAAHwAAAAAAHwAAAAADHwAAAAAAHwAAAAACHwAAAAACewAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAewAAAAAAewAAAAADewAAAAADewAAAAADewAAAAAAewAAAAABfgAAAAAAHwAAAAAAHwAAAAABHwAAAAAAfgAAAAAAegAAAAACegAAAAAAegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAADXQAAAAAAegAAAAABegAAAAABegAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAABXQAAAAADXQAAAAABegAAAAACJAAAAAABfgAAAAAAHwAAAAABXQAAAAAAXQAAAAACXQAAAAABegAAAAADegAAAAABegAAAAAAHwAAAAACHwAAAAADHwAAAAAAHwAAAAADXQAAAAACXQAAAAAAXQAAAAADXQAAAAADfgAAAAAAXQAAAAABXQAAAAADXQAAAAACXQAAAAADfgAAAAAAJAAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAACXQAAAAACXQAAAAACXQAAAAABXQAAAAADfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAfgAAAAAAcAAAAAABcAAAAAADcAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAADfgAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAADXQAAAAACaAAAAAACXQAAAAACXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAaAAAAAADXQAAAAABTgAAAAABTgAAAAACaAAAAAACTgAAAAADTgAAAAADaAAAAAAAaAAAAAACTgAAAAACaAAAAAADTgAAAAACTgAAAAAATgAAAAADaAAAAAADTgAAAAAAaAAAAAADaAAAAAABXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAAAXQAAAAADaAAAAAAAXQAAAAACXQAAAAAAXQAAAAACaAAAAAACXQAAAAADXQAAAAAAXQAAAAAAaAAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAACfgAAAAAAXQAAAAABaAAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAA version: 6 2,-1: ind: 2,-1 - tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAADXQAAAAACXQAAAAADaAAAAAAAXQAAAAADfgAAAAAAgQAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAACfgAAAAAAXQAAAAADaAAAAAAAXQAAAAADfgAAAAAAgQAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAACaAAAAAACfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAaAAAAAAAaAAAAAAAaAAAAAABaAAAAAABaAAAAAACfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAADXQAAAAADfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACaAAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbgAAAAABgQAAAAAAfgAAAAAAXQAAAAABaAAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbgAAAAABgQAAAAAAfgAAAAAAXQAAAAACaAAAAAAAXQAAAAADfgAAAAAAdQAAAAADdQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbgAAAAACfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAABXQAAAAADfgAAAAAAdQAAAAABdQAAAAABcAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACbgAAAAABbgAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAACXQAAAAACfgAAAAAAXQAAAAAAaAAAAAACXQAAAAADfgAAAAAAdQAAAAAAdQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAABaAAAAAABXQAAAAABfgAAAAAAdQAAAAABdQAAAAAAcAAAAAABJAAAAAACJAAAAAADJAAAAAACfgAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAfgAAAAAAXQAAAAAATgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAADJAAAAAACfgAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAfgAAAAAAXQAAAAACTgAAAAACXQAAAAACfgAAAAAAdQAAAAAAdQAAAAABfgAAAAAAHwAAAAADHwAAAAADHwAAAAADfgAAAAAAaAAAAAACaAAAAAAAaAAAAAADaAAAAAACfgAAAAAAXQAAAAADaAAAAAADXQAAAAACfgAAAAAAdQAAAAACdQAAAAACcAAAAAAA + tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAADXQAAAAACXQAAAAACaAAAAAADXQAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAQgAAAAAAQgAAAAAAQgAAAAAAfgAAAAAAXQAAAAACXQAAAAABXQAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAABfgAAAAAAgQAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAABaAAAAAADfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAaAAAAAADaAAAAAADaAAAAAABaAAAAAAAaAAAAAACfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAABXQAAAAACfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAACfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADaAAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbgAAAAAAgQAAAAAAfgAAAAAAXQAAAAABaAAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbgAAAAABgQAAAAAAfgAAAAAAXQAAAAABaAAAAAAAXQAAAAACfgAAAAAAdQAAAAACdQAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbgAAAAACfgAAAAAAfgAAAAAAXQAAAAACaAAAAAAAXQAAAAADfgAAAAAAdQAAAAACdQAAAAACcAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABbgAAAAABbgAAAAACfgAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAADfgAAAAAAXQAAAAACaAAAAAACXQAAAAAAfgAAAAAAdQAAAAADdQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAABXQAAAAADXQAAAAADaAAAAAADXQAAAAAAfgAAAAAAdQAAAAABdQAAAAADcAAAAAADJAAAAAADJAAAAAABJAAAAAABfgAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAfgAAAAAAXQAAAAABTgAAAAACXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAACJAAAAAABfgAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAJQAAAAAAfgAAAAAAXQAAAAABTgAAAAAAXQAAAAAAfgAAAAAAdQAAAAAAdQAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACfgAAAAAAaAAAAAAAaAAAAAADaAAAAAACaAAAAAADfgAAAAAAXQAAAAABaAAAAAADXQAAAAAAfgAAAAAAdQAAAAABdQAAAAACcAAAAAAC version: 6 -2,0: ind: -2,0 - tiles: aAAAAAACaAAAAAACaAAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAAAXQAAAAADXQAAAAADXQAAAAABaAAAAAADegAAAAAAegAAAAADegAAAAAAegAAAAACegAAAAACaAAAAAADaAAAAAABXwAAAAADXQAAAAAAXQAAAAABXQAAAAAAXQAAAAABXQAAAAACXQAAAAAAXQAAAAAAaAAAAAACegAAAAABegAAAAACegAAAAADegAAAAACegAAAAAAaAAAAAACaAAAAAAAXwAAAAABXQAAAAACXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAACXQAAAAAAaAAAAAACegAAAAACegAAAAADegAAAAACegAAAAABegAAAAACaAAAAAABaAAAAAADaAAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAABaAAAAAADegAAAAABegAAAAAAegAAAAACegAAAAAAegAAAAACewAAAAADewAAAAADXQAAAAADXQAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAADMwAAAAAAegAAAAADegAAAAABegAAAAADegAAAAAAXQAAAAAAXQAAAAABXQAAAAAAHwAAAAACewAAAAADMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAAAXQAAAAAAXQAAAAABMwAAAAAAegAAAAACHwAAAAAAHwAAAAABHwAAAAACfgAAAAAAJAAAAAACHwAAAAAAHwAAAAAAewAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAABXQAAAAABXQAAAAACMwAAAAAAegAAAAABJAAAAAAAJAAAAAACJAAAAAABfgAAAAAAJAAAAAABHwAAAAAAHwAAAAACewAAAAACMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAADXQAAAAACXQAAAAAAMwAAAAAAegAAAAACJAAAAAABJAAAAAADJAAAAAACfgAAAAAAJAAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAACaAAAAAADaAAAAAABaAAAAAAAaAAAAAACaAAAAAAAaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAABaAAAAAABaAAAAAACaAAAAAADaAAAAAACaAAAAAABaAAAAAABaAAAAAABaAAAAAACfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAADaAAAAAABfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABdQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAAAegAAAAABXQAAAAADXQAAAAADaAAAAAABXQAAAAACeQAAAAABeQAAAAACeQAAAAADeQAAAAABeQAAAAAAeQAAAAACLgAAAAAALgAAAAAAegAAAAADegAAAAABegAAAAABJAAAAAABfgAAAAAAXQAAAAAAaAAAAAADXQAAAAADfgAAAAAAJAAAAAAAeQAAAAAAeQAAAAACeQAAAAACeQAAAAABfgAAAAAALgAAAAAAegAAAAADegAAAAAAegAAAAABegAAAAAAXQAAAAADXQAAAAABaAAAAAADXQAAAAAAXQAAAAACYAAAAAACYAAAAAABYAAAAAABYAAAAAAAYAAAAAAAfgAAAAAALgAAAAAAaAAAAAACaAAAAAACaAAAAAABaAAAAAABXQAAAAAAXQAAAAADaAAAAAACXQAAAAABXQAAAAABYAAAAAAAYAAAAAACYAAAAAABYAAAAAADYAAAAAABfgAAAAAALgAAAAAAPAAAAAAAPAAAAAAAXQAAAAADXQAAAAABfgAAAAAAXQAAAAABaAAAAAACXQAAAAAAfgAAAAAAYAAAAAADYAAAAAABYAAAAAACYAAAAAABYAAAAAACfgAAAAAAfgAAAAAA + tiles: aAAAAAACaAAAAAACaAAAAAAAXQAAAAAAXQAAAAADXQAAAAADXQAAAAAAXQAAAAACXQAAAAACXQAAAAAAaAAAAAABegAAAAACegAAAAABegAAAAACegAAAAAAegAAAAADaAAAAAADaAAAAAACXwAAAAABXQAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAAAXQAAAAACXQAAAAABaAAAAAACegAAAAACegAAAAABegAAAAABegAAAAABegAAAAABaAAAAAAAaAAAAAADXwAAAAACXQAAAAAAXQAAAAADXQAAAAADXQAAAAACXQAAAAAAXQAAAAAAXQAAAAADaAAAAAAAegAAAAABegAAAAABegAAAAABegAAAAABegAAAAABaAAAAAACaAAAAAAAaAAAAAABXQAAAAACXQAAAAACXQAAAAADXQAAAAACXQAAAAACXQAAAAAAXQAAAAADaAAAAAABegAAAAACegAAAAAAegAAAAACegAAAAABegAAAAADewAAAAAAewAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAADXQAAAAACXQAAAAADMwAAAAAAegAAAAACegAAAAABegAAAAAAegAAAAAAXQAAAAABXQAAAAAAXQAAAAABHwAAAAAAewAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAACXQAAAAAAXQAAAAAAMwAAAAAAegAAAAABHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAJAAAAAADHwAAAAABHwAAAAADewAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAABXQAAAAACXQAAAAABMwAAAAAAegAAAAAAJAAAAAACJAAAAAACJAAAAAABfgAAAAAAJAAAAAADHwAAAAAAHwAAAAACewAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAADXQAAAAADXQAAAAAAMwAAAAAAegAAAAACJAAAAAABJAAAAAABJAAAAAACfgAAAAAAJAAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAaAAAAAADaAAAAAABaAAAAAADaAAAAAACaAAAAAACaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAADaAAAAAACaAAAAAADaAAAAAAAaAAAAAAAaAAAAAACaAAAAAACaAAAAAAAaAAAAAACfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAABaAAAAAACfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADdQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAABegAAAAAAegAAAAABXQAAAAABXQAAAAABaAAAAAAAXQAAAAADeQAAAAACeQAAAAAAeQAAAAAAeQAAAAADeQAAAAAAeQAAAAADLgAAAAAALgAAAAAAegAAAAADegAAAAABegAAAAAAJAAAAAACfgAAAAAAXQAAAAAAaAAAAAABXQAAAAADfgAAAAAAJAAAAAABeQAAAAACeQAAAAACeQAAAAABeQAAAAACfgAAAAAALgAAAAAAegAAAAACegAAAAAAegAAAAADegAAAAADXQAAAAADXQAAAAABaAAAAAADXQAAAAADXQAAAAAAYAAAAAABYAAAAAABYAAAAAAAYAAAAAAAYAAAAAAAfgAAAAAALgAAAAAAaAAAAAADaAAAAAACaAAAAAAAaAAAAAABXQAAAAABXQAAAAADaAAAAAADXQAAAAADXQAAAAACYAAAAAAAYAAAAAADYAAAAAABYAAAAAABYAAAAAAAfgAAAAAALgAAAAAAPAAAAAAAPAAAAAAAXQAAAAADXQAAAAAAfgAAAAAAXQAAAAAAaAAAAAACXQAAAAADfgAAAAAAYAAAAAADYAAAAAABYAAAAAADYAAAAAACYAAAAAABfgAAAAAAfgAAAAAA version: 6 1,-3: ind: 1,-3 - tiles: bQAAAAAAfgAAAAAAJAAAAAAAJAAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAJAAAAAABJAAAAAACfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAAAbQAAAAAAbQAAAAAAJAAAAAABJAAAAAADfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADHwAAAAABHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAJAAAAAAAJAAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAABHwAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAJAAAAAADJAAAAAABfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAHwAAAAABHwAAAAACfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAACbQAAAAAAbQAAAAAAJAAAAAACJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAABXQAAAAABJAAAAAACJAAAAAACJAAAAAABJAAAAAACfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAACXQAAAAAAHwAAAAABHwAAAAAAHwAAAAADHwAAAAADfgAAAAAAHwAAAAAAHwAAAAABfgAAAAAAJAAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAACXQAAAAACHwAAAAABHwAAAAABHwAAAAAAHwAAAAACJAAAAAAAJAAAAAACJAAAAAACJAAAAAACJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAACJAAAAAADJAAAAAABJAAAAAAAJAAAAAACfgAAAAAAHwAAAAABHwAAAAADfgAAAAAAJAAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABXQAAAAABXQAAAAABaAAAAAACXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAHwAAAAADaAAAAAADaAAAAAAAaAAAAAADaAAAAAAAaAAAAAABHwAAAAAAfgAAAAAAHwAAAAACTgAAAAADaAAAAAADaAAAAAABaAAAAAADaAAAAAABXQAAAAABfgAAAAAAHwAAAAACaAAAAAADaAAAAAACaAAAAAACaAAAAAADaAAAAAAAHwAAAAADfgAAAAAAHwAAAAAA + tiles: bQAAAAAAfgAAAAAAJAAAAAAAJAAAAAADfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAJAAAAAADJAAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAJAAAAAADbQAAAAAAbQAAAAAAJAAAAAACJAAAAAABfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAABHwAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAJAAAAAABJAAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAADHwAAAAABHwAAAAADHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAJAAAAAADJAAAAAABfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAHwAAAAABHwAAAAACfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAJAAAAAACJAAAAAAAbQAAAAAAbQAAAAAAJAAAAAACJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAAAJAAAAAACJAAAAAADJAAAAAADJAAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAAAXQAAAAACHwAAAAACHwAAAAAAHwAAAAABHwAAAAABfgAAAAAAHwAAAAACHwAAAAAAfgAAAAAAJAAAAAACfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAABHwAAAAAAHwAAAAABHwAAAAABHwAAAAABJAAAAAADJAAAAAACJAAAAAACJAAAAAADJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAACXQAAAAACJAAAAAABJAAAAAACJAAAAAADJAAAAAADfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAJAAAAAABfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAXQAAAAACXQAAAAABaAAAAAADXQAAAAAAXQAAAAAAXQAAAAACfgAAAAAAHwAAAAABaAAAAAABaAAAAAAAaAAAAAABaAAAAAACaAAAAAACHwAAAAACfgAAAAAAHwAAAAACTgAAAAADaAAAAAAAaAAAAAADaAAAAAABaAAAAAACXQAAAAABfgAAAAAAHwAAAAACaAAAAAADaAAAAAAAaAAAAAABaAAAAAAAaAAAAAACHwAAAAACfgAAAAAAHwAAAAAC version: 6 0,-3: ind: 0,-3 - tiles: fQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAJAAAAAADJAAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbgAAAAABbgAAAAADfgAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAACXQAAAAADJAAAAAAAJAAAAAAAJAAAAAADfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAABXQAAAAACaAAAAAABaAAAAAADJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAACXQAAAAADaAAAAAAAaAAAAAABJAAAAAAAfgAAAAAAXQAAAAACXQAAAAABHwAAAAADHwAAAAABHwAAAAABJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACJAAAAAABJAAAAAACJAAAAAABJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADJAAAAAACfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAACfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAbgAAAAACbgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAgQAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAADfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAABaAAAAAADXQAAAAADXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAXQAAAAADaAAAAAADaAAAAAADaAAAAAABaAAAAAAATgAAAAABaAAAAAACTgAAAAADaAAAAAAB + tiles: fQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbgAAAAACbgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAAAXQAAAAADJAAAAAACJAAAAAADJAAAAAACfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAABXQAAAAABaAAAAAAAaAAAAAAAJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAAAXQAAAAADaAAAAAACaAAAAAACJAAAAAADfgAAAAAAXQAAAAAAXQAAAAACHwAAAAADHwAAAAAAHwAAAAADJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAAAJAAAAAACJAAAAAADJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAADJAAAAAACfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAABfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAbgAAAAAAbgAAAAABbgAAAAACfgAAAAAAfgAAAAAAgQAAAAAAXQAAAAACXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAABaAAAAAACXQAAAAADXQAAAAAAXQAAAAADXQAAAAAAXQAAAAACXQAAAAACXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAXQAAAAADaAAAAAADaAAAAAADaAAAAAADaAAAAAABTgAAAAABaAAAAAAATgAAAAACaAAAAAAB version: 6 1,1: ind: 1,1 - tiles: bAAAAAAAbAAAAAAAfgAAAAAAXQAAAAACaAAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAAAaAAAAAADfgAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAABXQAAAAABJAAAAAACXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAACfgAAAAAAXQAAAAAAXQAAAAADXQAAAAABXQAAAAACXQAAAAACXQAAAAADXQAAAAADXQAAAAACXQAAAAACXQAAAAABaAAAAAADXQAAAAADXQAAAAACaAAAAAAAXQAAAAABfgAAAAAAXQAAAAADaAAAAAACaAAAAAABaAAAAAAAXQAAAAAAaAAAAAADaAAAAAADaAAAAAADXQAAAAADaAAAAAADaAAAAAACaAAAAAADaAAAAAACaAAAAAAAXQAAAAABfgAAAAAAXQAAAAABaAAAAAABaAAAAAAAaAAAAAABXQAAAAAAaAAAAAACaAAAAAAAaAAAAAADXQAAAAADXQAAAAABaAAAAAABXQAAAAADXQAAAAACXQAAAAABJAAAAAADfgAAAAAAXQAAAAADaAAAAAAAaAAAAAADaAAAAAAAXQAAAAABaAAAAAADaAAAAAACaAAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAACXQAAAAAAXQAAAAABXQAAAAACXQAAAAACXQAAAAABdQAAAAABdAAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAACdAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: bAAAAAAAbAAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAABaAAAAAADfgAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAADXQAAAAAAXQAAAAACJAAAAAADXQAAAAABXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAABfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABXQAAAAADXQAAAAADaAAAAAAAXQAAAAAAXQAAAAABaAAAAAADXQAAAAABfgAAAAAAXQAAAAAAaAAAAAAAaAAAAAAAaAAAAAAAXQAAAAACaAAAAAAAaAAAAAADaAAAAAACXQAAAAABaAAAAAABaAAAAAAAaAAAAAACaAAAAAAAaAAAAAACXQAAAAAAfgAAAAAAXQAAAAADaAAAAAADaAAAAAACaAAAAAACXQAAAAADaAAAAAACaAAAAAADaAAAAAACXQAAAAABXQAAAAADaAAAAAABXQAAAAACXQAAAAACXQAAAAAAJAAAAAACfgAAAAAAXQAAAAADaAAAAAAAaAAAAAADaAAAAAAAXQAAAAAAaAAAAAABaAAAAAACaAAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAACXQAAAAADXQAAAAABXQAAAAACdQAAAAADdAAAAAADfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAAAXQAAAAABXQAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAAAdAAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,1: ind: 0,1 - tiles: fgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbgAAAAACbgAAAAAAbAAAAAAAbAAAAAAAbgAAAAADbgAAAAADfgAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAACaAAAAAABXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAADXQAAAAACaAAAAAADaAAAAAADaAAAAAADaAAAAAACaAAAAAADaAAAAAACaAAAAAACaAAAAAAAaAAAAAAAaAAAAAACaAAAAAABaAAAAAABaAAAAAAAaAAAAAADaAAAAAACaAAAAAAAXQAAAAABXQAAAAADXQAAAAABaAAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAACXQAAAAADXQAAAAABXQAAAAADXQAAAAACXQAAAAAAXQAAAAADXQAAAAACXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAXQAAAAADXQAAAAAAXQAAAAAAHwAAAAACHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAABcAAAAAADcAAAAAADdQAAAAABdAAAAAACdAAAAAADdAAAAAACXQAAAAACXQAAAAABXQAAAAABHwAAAAAAHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAAAcAAAAAADcAAAAAAAdQAAAAABdAAAAAADdAAAAAACdAAAAAACfgAAAAAAXQAAAAABXQAAAAACHwAAAAADHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdAAAAAAAdAAAAAAAdAAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbgAAAAACbgAAAAADfgAAAAAAdQAAAAADdQAAAAACdQAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAABHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAACHwAAAAACHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAALgAAAAAALgAAAAAALgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAALgAAAAAAaAAAAAADfgAAAAAAHwAAAAADHwAAAAABHwAAAAABHwAAAAAAHwAAAAACTwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAcAAAAAADcAAAAAAAaAAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAAAHwAAAAABHwAAAAADTwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAALgAAAAAAfgAAAAAALgAAAAAA + tiles: fgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbgAAAAABbgAAAAACbAAAAAAAbAAAAAAAbgAAAAACbgAAAAACfgAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADXQAAAAAAaAAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAAAXQAAAAABXQAAAAAAXQAAAAABXQAAAAABaAAAAAADaAAAAAABaAAAAAADaAAAAAADaAAAAAAAaAAAAAABaAAAAAACaAAAAAACaAAAAAACaAAAAAADaAAAAAACaAAAAAABaAAAAAABaAAAAAAAaAAAAAACaAAAAAADXQAAAAABXQAAAAADXQAAAAADaAAAAAAAXQAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAACXQAAAAACXQAAAAACXQAAAAAAXQAAAAABXQAAAAABXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAADHwAAAAABHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAAAcAAAAAADcAAAAAADdQAAAAAAdAAAAAAAdAAAAAAAdAAAAAADXQAAAAACXQAAAAABXQAAAAADHwAAAAACHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAABcAAAAAABcAAAAAACdQAAAAABdAAAAAACdAAAAAAAdAAAAAACfgAAAAAAXQAAAAADXQAAAAAAHwAAAAADHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdAAAAAAAdAAAAAABdAAAAAACfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbgAAAAADbgAAAAACfgAAAAAAdQAAAAABdQAAAAACdQAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADHwAAAAAAHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAALgAAAAAALgAAAAAALgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAALgAAAAAALgAAAAAAaAAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAABHwAAAAAAHwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAcAAAAAACcAAAAAAAaAAAAAADfgAAAAAAHwAAAAACHwAAAAACHwAAAAACHwAAAAADHwAAAAACTwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAALgAAAAAAfgAAAAAALgAAAAAA version: 6 -1,1: ind: -1,1 - tiles: bAAAAAAAfgAAAAAAgQAAAAAAbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAbgAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAADaAAAAAABXQAAAAABXQAAAAACXQAAAAADXQAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAABaAAAAAACaAAAAAABaAAAAAADaAAAAAADaAAAAAAAaAAAAAABaAAAAAABaAAAAAAAaAAAAAAAaAAAAAACTgAAAAAATgAAAAAAaAAAAAAATgAAAAAATgAAAAAAaAAAAAADXQAAAAABXQAAAAADXQAAAAACXQAAAAABXQAAAAACXQAAAAACXQAAAAAAaAAAAAACXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAAAXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAADfgAAAAAAXQAAAAACXQAAAAAAXQAAAAADfgAAAAAAXQAAAAABXQAAAAACXQAAAAAAfgAAAAAAXQAAAAABHwAAAAABHwAAAAADXQAAAAACXQAAAAAAXQAAAAACXQAAAAADfgAAAAAAXQAAAAACXQAAAAABXQAAAAABfgAAAAAAXQAAAAACXQAAAAADXQAAAAADfgAAAAAAXQAAAAAAHwAAAAAAHwAAAAACXQAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAXQAAAAAAJAAAAAACJAAAAAACXQAAAAABHwAAAAACHwAAAAAAHwAAAAAAHwAAAAADHwAAAAAAHwAAAAADHwAAAAACHwAAAAACHwAAAAADHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAfgAAAAAAHwAAAAAATgAAAAAATgAAAAAAHwAAAAACTgAAAAABTgAAAAACTgAAAAADHwAAAAAATgAAAAADTgAAAAADHwAAAAADXQAAAAACXQAAAAABXQAAAAADXQAAAAACJAAAAAABHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAHwAAAAACHwAAAAADHwAAAAADHwAAAAADHwAAAAACHwAAAAADHwAAAAACXQAAAAACXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAAAHwAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAABXQAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAADfgAAAAAAHwAAAAACHwAAAAADHwAAAAAAHwAAAAABXQAAAAADXQAAAAABXQAAAAACXQAAAAABXQAAAAAAJAAAAAAAJAAAAAACfgAAAAAAXQAAAAABXQAAAAACXQAAAAAA + tiles: bAAAAAAAfgAAAAAAgQAAAAAAbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAbgAAAAACbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAAAXQAAAAABaAAAAAAAXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAACXQAAAAABXQAAAAADXQAAAAADaAAAAAAAaAAAAAACaAAAAAABaAAAAAABaAAAAAADaAAAAAABaAAAAAACaAAAAAABaAAAAAADaAAAAAABTgAAAAADTgAAAAABaAAAAAACTgAAAAACTgAAAAABaAAAAAABXQAAAAACXQAAAAADXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAABaAAAAAABXQAAAAABXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAABfgAAAAAAXQAAAAABXQAAAAADXQAAAAABfgAAAAAAXQAAAAABXQAAAAADXQAAAAADfgAAAAAAXQAAAAABXQAAAAADXQAAAAACfgAAAAAAXQAAAAABHwAAAAACHwAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAACfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAACfgAAAAAAXQAAAAAAHwAAAAABHwAAAAACXQAAAAACfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAXQAAAAACJAAAAAADJAAAAAACXQAAAAABHwAAAAACHwAAAAABHwAAAAADHwAAAAACHwAAAAACHwAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAHwAAAAADHwAAAAACfgAAAAAAHwAAAAABTgAAAAADTgAAAAAAHwAAAAACTgAAAAABTgAAAAADTgAAAAADHwAAAAAATgAAAAACTgAAAAABHwAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABJAAAAAACHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAACHwAAAAACHwAAAAAAHwAAAAACHwAAAAABHwAAAAACHwAAAAAAXQAAAAABXQAAAAADXQAAAAACXQAAAAABXQAAAAADHwAAAAACHwAAAAAAHwAAAAADHwAAAAAAHwAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAACXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAADfgAAAAAAHwAAAAACHwAAAAACHwAAAAACHwAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAABJAAAAAACJAAAAAABfgAAAAAAXQAAAAABXQAAAAACXQAAAAAC version: 6 -2,1: ind: -2,1 - tiles: PAAAAAAAPAAAAAAAXQAAAAABXQAAAAAAfgAAAAAAXQAAAAADaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABPAAAAAAAPAAAAAAAXQAAAAAAXQAAAAACfgAAAAAAXQAAAAADaAAAAAACXQAAAAABKAAAAAADKAAAAAADKAAAAAADKAAAAAABKAAAAAAAKAAAAAADfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAADXQAAAAABXwAAAAABXwAAAAABXwAAAAAAXwAAAAADXwAAAAABXwAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAADXQAAAAADaAAAAAABaAAAAAACaAAAAAABaAAAAAADaAAAAAABaAAAAAADaAAAAAAAaAAAAAACaAAAAAABaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAACaAAAAAAAXwAAAAACXwAAAAABXwAAAAABXwAAAAAAXwAAAAADXwAAAAADaAAAAAACaAAAAAABfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAJAAAAAADKAAAAAADKAAAAAAAKAAAAAABKAAAAAADKAAAAAADKAAAAAAAXQAAAAAAaAAAAAABgQAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbgAAAAABbAAAAAAAbAAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbgAAAAADbgAAAAACfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAADfgAAAAAAegAAAAABegAAAAAAegAAAAABfgAAAAAAgQAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAACegAAAAADegAAAAACegAAAAAAegAAAAABegAAAAACbgAAAAADfgAAAAAAJAAAAAADJAAAAAADJAAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAABfgAAAAAAegAAAAABegAAAAACegAAAAADfgAAAAAAbgAAAAAAfgAAAAAAJAAAAAABJAAAAAABJAAAAAADHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAADfgAAAAAAgQAAAAAAfgAAAAAAJAAAAAABJAAAAAADJAAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAbgAAAAAAbgAAAAABfgAAAAAAXQAAAAAAXQAAAAADXQAAAAABfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAJAAAAAACXQAAAAABXQAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAA + tiles: PAAAAAAAPAAAAAAAXQAAAAAAXQAAAAABfgAAAAAAXQAAAAACaAAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACPAAAAAAAPAAAAAAAXQAAAAAAXQAAAAADfgAAAAAAXQAAAAABaAAAAAAAXQAAAAABKAAAAAADKAAAAAACKAAAAAAAKAAAAAAAKAAAAAAAKAAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAADXQAAAAABXwAAAAADXwAAAAAAXwAAAAACXwAAAAADXwAAAAADXwAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAaAAAAAABaAAAAAACaAAAAAADaAAAAAABaAAAAAACaAAAAAAAaAAAAAACaAAAAAABaAAAAAADaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAaAAAAAABXwAAAAADXwAAAAACXwAAAAAAXwAAAAADXwAAAAAAXwAAAAACaAAAAAACaAAAAAACfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAABJAAAAAABKAAAAAACKAAAAAADKAAAAAACKAAAAAACKAAAAAABKAAAAAACXQAAAAACaAAAAAADgQAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbgAAAAADbAAAAAAAbAAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAABfgAAAAAAegAAAAADegAAAAABegAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAABegAAAAABegAAAAABegAAAAADegAAAAABegAAAAAAbgAAAAAAfgAAAAAAJAAAAAAAJAAAAAACJAAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAADfgAAAAAAegAAAAADegAAAAABegAAAAADfgAAAAAAbgAAAAAAfgAAAAAAJAAAAAABJAAAAAAAJAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAACfgAAAAAAgQAAAAAAfgAAAAAAJAAAAAABJAAAAAAAJAAAAAACHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAbgAAAAABbgAAAAADfgAAAAAAXQAAAAAAXQAAAAACXQAAAAACfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAJAAAAAABXQAAAAADXQAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAC version: 6 -1,-3: ind: -1,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADXgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAABYQAAAAADXgAAAAABXQAAAAACXQAAAAADfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAXgAAAAABYQAAAAACXQAAAAABXgAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAABXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAaAAAAAACfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADgQAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAAAXQAAAAABXQAAAAADXQAAAAABbQAAAAAAbQAAAAAAbgAAAAACbgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbgAAAAACbgAAAAACfgAAAAAAXQAAAAACXQAAAAADXQAAAAAAfgAAAAAAaAAAAAACaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAADaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAD + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAACXgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAAAYQAAAAABXgAAAAABXQAAAAABXQAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAXgAAAAABYQAAAAABXQAAAAADXgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAAAXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAaAAAAAACaAAAAAAAaAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACgQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAADXQAAAAABXQAAAAABbQAAAAAAbQAAAAAAbgAAAAABbgAAAAABgQAAAAAAfgAAAAAAfgAAAAAAbgAAAAABbgAAAAADfgAAAAAAXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAaAAAAAADaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAAAaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAC version: 6 2,-3: ind: 2,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAJAAAAAABJAAAAAABJAAAAAAAJAAAAAADJAAAAAADJAAAAAADJAAAAAADJAAAAAABJAAAAAAAJAAAAAAAJAAAAAADJAAAAAACJAAAAAACJAAAAAABJAAAAAAAJAAAAAABJAAAAAAAJAAAAAACJAAAAAADJAAAAAAAJAAAAAACJAAAAAADJAAAAAACJAAAAAADJAAAAAACJAAAAAAAJAAAAAAAJAAAAAADJAAAAAABJAAAAAAAJAAAAAABJAAAAAADJAAAAAACJgAAAAACJgAAAAACJgAAAAACJgAAAAABJgAAAAABJgAAAAABJgAAAAABJgAAAAABJgAAAAABJgAAAAACJgAAAAACJgAAAAAAJAAAAAACJAAAAAACJAAAAAADJgAAAAADJgAAAAAAHwAAAAAAHwAAAAADHwAAAAACHwAAAAADHwAAAAACHwAAAAAAHwAAAAABHwAAAAABHwAAAAACJgAAAAAAJgAAAAAAJAAAAAABJAAAAAABJAAAAAACJgAAAAAAJgAAAAADHwAAAAABHwAAAAADHwAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAACHwAAAAAAHwAAAAACJgAAAAACJgAAAAABJAAAAAADHwAAAAAAHwAAAAADJAAAAAABJAAAAAAAHwAAAAAAHwAAAAACJAAAAAAAJAAAAAACJAAAAAACJAAAAAABJAAAAAADHwAAAAAAHwAAAAAAJAAAAAADJAAAAAABHwAAAAAAHwAAAAABHwAAAAACJgAAAAABJAAAAAAAJAAAAAACJAAAAAACJAAAAAAAJAAAAAADJAAAAAAAJAAAAAABJAAAAAAAJAAAAAAAJAAAAAABJAAAAAAAJgAAAAADHwAAAAAD + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADJAAAAAACJAAAAAACJAAAAAADJAAAAAACJAAAAAADJAAAAAABJAAAAAAAJAAAAAABJAAAAAACJAAAAAADJAAAAAABJAAAAAAAJAAAAAAAJAAAAAACJAAAAAAAJAAAAAACJAAAAAABJAAAAAADJAAAAAABJAAAAAABJAAAAAADJAAAAAAAJAAAAAABJAAAAAADJAAAAAAAJAAAAAAAJAAAAAADJAAAAAADJAAAAAAAJAAAAAACJAAAAAADJAAAAAAAJAAAAAACJgAAAAADJgAAAAACJgAAAAABJgAAAAABJgAAAAAAJgAAAAAAJgAAAAACJgAAAAACJgAAAAACJgAAAAACJgAAAAACJgAAAAACJAAAAAACJAAAAAABJAAAAAABJgAAAAAAJgAAAAABHwAAAAACHwAAAAABHwAAAAADHwAAAAABHwAAAAAAHwAAAAABHwAAAAAAHwAAAAACHwAAAAABJgAAAAABJgAAAAADJAAAAAABJAAAAAADJAAAAAABJgAAAAADJgAAAAADHwAAAAAAHwAAAAACHwAAAAACHwAAAAAAHwAAAAAAHwAAAAADHwAAAAACHwAAAAABHwAAAAADJgAAAAACJgAAAAACJAAAAAABHwAAAAAAHwAAAAACJAAAAAABJAAAAAADHwAAAAAAHwAAAAABJAAAAAAAJAAAAAACJAAAAAACJAAAAAADJAAAAAAAHwAAAAADHwAAAAAAJAAAAAABJAAAAAABHwAAAAACHwAAAAABHwAAAAAAJgAAAAADJAAAAAAAJAAAAAACJAAAAAAAJAAAAAADJAAAAAABJAAAAAADJAAAAAACJAAAAAACJAAAAAADJAAAAAADJAAAAAACJgAAAAADHwAAAAAB version: 6 3,-2: ind: 3,-2 - tiles: HwAAAAAAHwAAAAABfgAAAAAAHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAADHwAAAAAAHwAAAAABfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAADXQAAAAADHwAAAAACHwAAAAACfgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAXQAAAAABXQAAAAADfgAAAAAAfgAAAAAABwAAAAAAJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAgQAAAAAAbQAAAAAAbQAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADfgAAAAAAfgAAAAAABwAAAAAAJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADXQAAAAAAHwAAAAABHwAAAAACfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADXQAAAAABXQAAAAABXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAAAXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAACaAAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAaAAAAAAAXQAAAAACaAAAAAADXQAAAAAAXQAAAAABXQAAAAADXQAAAAADJAAAAAADfgAAAAAAfgAAAAAAXQAAAAACaAAAAAACMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAaAAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAADXQAAAAACXQAAAAAAaAAAAAABMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAaAAAAAACXQAAAAABXQAAAAAAJAAAAAAAfgAAAAAAXQAAAAACTgAAAAAATgAAAAAAaAAAAAABTgAAAAACTgAAAAADaAAAAAADaAAAAAADaAAAAAABaAAAAAACaAAAAAADaAAAAAAAXQAAAAACXQAAAAACXQAAAAADXQAAAAACXQAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAADXQAAAAACfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAAAXQAAAAABbQAAAAAAbQAAAAAAbQAAAAAAgQAAAAAAbgAAAAACbgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAAAXQAAAAAAXQAAAAADfgAAAAAAXQAAAAAC + tiles: HwAAAAACHwAAAAAAfgAAAAAAHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAADHwAAAAABHwAAAAADfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAAAHwAAAAADHwAAAAACfgAAAAAAXQAAAAACXQAAAAABfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADfgAAAAAAXQAAAAABXQAAAAADfgAAAAAAfgAAAAAABwAAAAAAJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAgQAAAAAAbQAAAAAAbQAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAABwAAAAAAJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABXQAAAAACHwAAAAAAHwAAAAADfgAAAAAAXQAAAAACXQAAAAABfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADXQAAAAACXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAADXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAAAXQAAAAAAXQAAAAADXQAAAAACXQAAAAAAaAAAAAAAXQAAAAAAXQAAAAADXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAADMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAaAAAAAADXQAAAAAAaAAAAAADXQAAAAAAXQAAAAACXQAAAAACXQAAAAAAJAAAAAABfgAAAAAAfgAAAAAAXQAAAAAAaAAAAAACMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAAAXQAAAAACXQAAAAABaAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAaAAAAAAAXQAAAAACXQAAAAACJAAAAAADfgAAAAAAXQAAAAAATgAAAAAATgAAAAACaAAAAAAATgAAAAAATgAAAAABaAAAAAABaAAAAAABaAAAAAAAaAAAAAABaAAAAAACaAAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABXQAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAABXQAAAAADXQAAAAABXQAAAAAAXQAAAAABXQAAAAACfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAADXQAAAAAAXQAAAAADXQAAAAACXQAAAAACbQAAAAAAbQAAAAAAbQAAAAAAgQAAAAAAbgAAAAADbgAAAAACbgAAAAADfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAXQAAAAAB version: 6 3,-3: ind: 3,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAACwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAKBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAKBwAAAAAABwAAAAAABwAAAAAAJAAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAACJAAAAAADJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAAJAAAAAACJAAAAAABfgAAAAAAHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAAJAAAAAAAJAAAAAADHwAAAAAAHwAAAAACHwAAAAAAfgAAAAAAHwAAAAAAHwAAAAABOAAAAAAAOAAAAAAAOAAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAAfwAAAAAAJAAAAAACJAAAAAAAfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAHwAAAAABHwAAAAACOAAAAAAAHwAAAAACOAAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAAHwAAAAADHwAAAAADfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADHwAAAAACHwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAHwAAAAAAHwAAAAADHwAAAAABHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAAB + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAHCwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAACBwAAAAAAJAAAAAACfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAACBwAAAAAABwAAAAAABwAAAAAAJAAAAAAAJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAABBwAAAAABJAAAAAACJAAAAAABfgAAAAAAHwAAAAADHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAAJAAAAAACJAAAAAAAHwAAAAAAHwAAAAABHwAAAAADfgAAAAAAHwAAAAABHwAAAAADOAAAAAAAOAAAAAAAOAAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAAfwAAAAAAJAAAAAACJAAAAAADfgAAAAAAHwAAAAACHwAAAAACfgAAAAAAHwAAAAACHwAAAAADOAAAAAAAHwAAAAACOAAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAAHwAAAAABHwAAAAABfgAAAAAAHwAAAAABHwAAAAACHwAAAAACHwAAAAACHwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAABfgAAAAAAHwAAAAACHwAAAAADfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAAA version: 6 -2,-3: ind: -2,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAegAAAAADfAAAAAACfgAAAAAAfAAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAgQAAAAAAfgAAAAAAFQAAAAAEfAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAFQAAAAAEgQAAAAAAfAAAAAABfAAAAAACfgAAAAAAbgAAAAACbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAegAAAAAAJAAAAAAAfgAAAAAAegAAAAADfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADXQAAAAADKAAAAAADKAAAAAACXQAAAAACXQAAAAAAXQAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAACXQAAAAACXQAAAAABXQAAAAADXQAAAAACfgAAAAAAbgAAAAAAXQAAAAACKAAAAAADfgAAAAAAegAAAAABegAAAAAAegAAAAACegAAAAAAegAAAAABegAAAAADegAAAAAAegAAAAACegAAAAACegAAAAABegAAAAABfgAAAAAAbgAAAAABewAAAAACewAAAAADfgAAAAAAegAAAAADegAAAAABegAAAAACKAAAAAADKAAAAAADKAAAAAADKAAAAAACKAAAAAADKAAAAAADKAAAAAAAKAAAAAADfgAAAAAAbQAAAAAAewAAAAADewAAAAADfgAAAAAAegAAAAAAegAAAAAAegAAAAADKAAAAAABKAAAAAAAKAAAAAADKAAAAAAAKAAAAAACKAAAAAADKAAAAAAAKAAAAAAAfgAAAAAAbQAAAAAAewAAAAADewAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAACKAAAAAAAKAAAAAADKAAAAAADKAAAAAACKAAAAAAAKAAAAAADKAAAAAACfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAADegAAAAABegAAAAADegAAAAACegAAAAABegAAAAABJAAAAAACfgAAAAAAbQAAAAAAKAAAAAAAKAAAAAACKAAAAAACKAAAAAAAXQAAAAADfgAAAAAAXQAAAAADXQAAAAAAXQAAAAADXQAAAAAAXQAAAAADXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAXQAAAAABXQAAAAABKAAAAAAAKAAAAAADXQAAAAADfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAB + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAegAAAAACfAAAAAADfgAAAAAAfAAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAgQAAAAAAfgAAAAAAFQAAAAADfAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAFQAAAAAAgQAAAAAAfAAAAAAAfAAAAAABfgAAAAAAbgAAAAADbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAegAAAAABJAAAAAADfgAAAAAAegAAAAADfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACXQAAAAAAKAAAAAABKAAAAAACXQAAAAACXQAAAAADXQAAAAACXQAAAAABXQAAAAABXQAAAAABXQAAAAADXQAAAAACXQAAAAABXQAAAAACXQAAAAABfgAAAAAAbgAAAAADXQAAAAADKAAAAAAAfgAAAAAAegAAAAAAegAAAAAAegAAAAACegAAAAABegAAAAAAegAAAAAAegAAAAADegAAAAADegAAAAABegAAAAACegAAAAADfgAAAAAAbgAAAAACewAAAAAAewAAAAABfgAAAAAAegAAAAAAegAAAAABegAAAAAAKAAAAAAAKAAAAAABKAAAAAABKAAAAAACKAAAAAADKAAAAAABKAAAAAABKAAAAAADfgAAAAAAbQAAAAAAewAAAAABewAAAAACfgAAAAAAegAAAAADegAAAAADegAAAAADKAAAAAADKAAAAAABKAAAAAABKAAAAAAAKAAAAAABKAAAAAACKAAAAAAAKAAAAAADfgAAAAAAbQAAAAAAewAAAAADewAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAKAAAAAACKAAAAAACKAAAAAAAKAAAAAAAKAAAAAABKAAAAAAAKAAAAAAAKAAAAAABfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAAAegAAAAAAegAAAAADegAAAAACegAAAAABegAAAAABJAAAAAAAfgAAAAAAbQAAAAAAKAAAAAAAKAAAAAACKAAAAAAAKAAAAAABXQAAAAABfgAAAAAAXQAAAAADXQAAAAAAXQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAACfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAKAAAAAADKAAAAAACXQAAAAABfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAC version: 6 -3,-1: ind: -3,-1 - tiles: HwAAAAAAfgAAAAAAewAAAAADewAAAAAAewAAAAABfgAAAAAAbAAAAAAAbgAAAAACfgAAAAAAegAAAAADegAAAAABegAAAAABegAAAAAAegAAAAADegAAAAAAegAAAAABHwAAAAABHwAAAAAAHwAAAAACHwAAAAADHwAAAAADfgAAAAAAbAAAAAAAbgAAAAABfgAAAAAAegAAAAAATgAAAAABTgAAAAADKAAAAAABTgAAAAABTgAAAAADKAAAAAABHwAAAAADfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAegAAAAAATgAAAAABTgAAAAACKAAAAAACTgAAAAADTgAAAAACKAAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAACegAAAAACegAAAAABegAAAAABegAAAAADfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABfgAAAAAAfgAAAAAAKAAAAAADKAAAAAACbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAZQAAAAABZQAAAAADfgAAAAAAewAAAAABewAAAAADewAAAAAAfgAAAAAAaAAAAAABKAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAZQAAAAAAZQAAAAACfgAAAAAAKAAAAAABKAAAAAABKAAAAAABfgAAAAAAaAAAAAABKAAAAAABMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAZQAAAAADZQAAAAAAfgAAAAAAKAAAAAAAKAAAAAABKAAAAAAAfgAAAAAAXQAAAAABXQAAAAABMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABbgAAAAABbgAAAAADbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAXQAAAAACXQAAAAABfgAAAAAAXwAAAAAAXwAAAAABXwAAAAABXwAAAAABXwAAAAABJAAAAAABXwAAAAADXwAAAAADXQAAAAADXQAAAAABXQAAAAABXQAAAAABXQAAAAAAXQAAAAAAXQAAAAACfgAAAAAAXwAAAAABHwAAAAAAHwAAAAAAHwAAAAABHwAAAAABXwAAAAABHwAAAAABHwAAAAACJAAAAAAAJAAAAAABJAAAAAADJAAAAAABJAAAAAABXQAAAAADXQAAAAAAfgAAAAAAXwAAAAADHwAAAAACHwAAAAABHwAAAAABHwAAAAABXwAAAAADHwAAAAABHwAAAAADMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAAAXQAAAAACfgAAAAAAXwAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAABXwAAAAAAHwAAAAACHwAAAAADJAAAAAAAJAAAAAAAJAAAAAACJAAAAAABJAAAAAAAXQAAAAABXQAAAAABfgAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAACXQAAAAABXQAAAAABXQAAAAACXQAAAAAC + tiles: HwAAAAABfgAAAAAAewAAAAABewAAAAACewAAAAADfgAAAAAAbAAAAAAAbgAAAAACfgAAAAAAegAAAAACegAAAAADegAAAAADegAAAAABegAAAAADegAAAAAAegAAAAABHwAAAAAAHwAAAAADHwAAAAACHwAAAAACHwAAAAAAfgAAAAAAbAAAAAAAbgAAAAAAfgAAAAAAegAAAAAATgAAAAAATgAAAAADKAAAAAABTgAAAAAATgAAAAACKAAAAAADHwAAAAACfgAAAAAAHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAegAAAAAATgAAAAACTgAAAAABKAAAAAADTgAAAAABTgAAAAACKAAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACegAAAAADegAAAAADegAAAAAAegAAAAACegAAAAACegAAAAABfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABfgAAAAAAfgAAAAAAKAAAAAABKAAAAAADbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAZQAAAAADZQAAAAACfgAAAAAAewAAAAADewAAAAAAewAAAAAAfgAAAAAAaAAAAAADKAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAZQAAAAABZQAAAAAAfgAAAAAAKAAAAAADKAAAAAADKAAAAAABfgAAAAAAaAAAAAAAKAAAAAABMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAZQAAAAACZQAAAAAAfgAAAAAAKAAAAAAAKAAAAAABKAAAAAABfgAAAAAAXQAAAAADXQAAAAADMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbgAAAAACbgAAAAACbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAABfgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAXwAAAAAAXwAAAAADXwAAAAAAXwAAAAADXwAAAAACJAAAAAAAXwAAAAABXwAAAAADXQAAAAACXQAAAAACXQAAAAACXQAAAAABXQAAAAABXQAAAAADXQAAAAADfgAAAAAAXwAAAAAAHwAAAAACHwAAAAACHwAAAAAAHwAAAAABXwAAAAAAHwAAAAADHwAAAAABJAAAAAACJAAAAAACJAAAAAABJAAAAAABJAAAAAADXQAAAAADXQAAAAABfgAAAAAAXwAAAAAAHwAAAAABHwAAAAADHwAAAAACHwAAAAACXwAAAAABHwAAAAAAHwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAADXQAAAAACfgAAAAAAXwAAAAABHwAAAAAAHwAAAAACHwAAAAADHwAAAAADXwAAAAABHwAAAAAAHwAAAAAAJAAAAAADJAAAAAACJAAAAAADJAAAAAABJAAAAAAAXQAAAAACXQAAAAACfgAAAAAAXQAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAACXQAAAAAC version: 6 -3,0: ind: -3,0 - tiles: ZQAAAAACZQAAAAABZQAAAAACZQAAAAAAZQAAAAABXQAAAAADaAAAAAACaAAAAAADXQAAAAAAXQAAAAABaAAAAAACaAAAAAAAaAAAAAADaAAAAAACaAAAAAABXQAAAAADTgAAAAADTgAAAAABaAAAAAAATgAAAAADTgAAAAACaAAAAAACaAAAAAAAaAAAAAACXQAAAAACXQAAAAABXwAAAAAAaAAAAAABaAAAAAABaAAAAAADXwAAAAACaAAAAAAAZQAAAAACZQAAAAACZQAAAAADZQAAAAABZQAAAAAAXQAAAAACaAAAAAAAaAAAAAADXQAAAAADXQAAAAAAXwAAAAABaAAAAAAAaAAAAAAAaAAAAAACXwAAAAACaAAAAAABJAAAAAABJAAAAAABJAAAAAAAJAAAAAAAJAAAAAABXQAAAAACXQAAAAACfgAAAAAAXQAAAAACXQAAAAABaAAAAAABaAAAAAAAaAAAAAABaAAAAAAAaAAAAAABaAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAABXQAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAABewAAAAABewAAAAADewAAAAADewAAAAACewAAAAACJAAAAAADJAAAAAACJAAAAAADJAAAAAACJAAAAAAAXQAAAAAAXQAAAAACfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAewAAAAACHwAAAAAAHwAAAAAAHwAAAAADHwAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAAAXQAAAAADfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAewAAAAABHwAAAAACHwAAAAAAHwAAAAABHwAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAACfgAAAAAAXQAAAAACXQAAAAACfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAewAAAAADHwAAAAABHwAAAAACHwAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAgAAAAAAHwAAAAABHwAAAAABHwAAAAAAHwAAAAADfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACgQAAAAAAbgAAAAAAbAAAAAAAbQAAAAAAfgAAAAAAAgAAAAAAJAAAAAAAJAAAAAABJAAAAAADJAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAADbQAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAaAAAAAACAgAAAAAAJAAAAAAAJAAAAAABHwAAAAACHwAAAAABHwAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAaAAAAAACAgAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAABHwAAAAABfgAAAAAAgQAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAXQAAAAAAaAAAAAABfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACggAAAAACfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAXQAAAAAB + tiles: ZQAAAAAAZQAAAAACZQAAAAADZQAAAAAAZQAAAAAAXQAAAAADaAAAAAABaAAAAAADXQAAAAAAXQAAAAADaAAAAAAAaAAAAAABaAAAAAABaAAAAAADaAAAAAAAXQAAAAADTgAAAAAATgAAAAABaAAAAAAATgAAAAAATgAAAAACaAAAAAACaAAAAAAAaAAAAAACXQAAAAACXQAAAAAAXwAAAAACaAAAAAACaAAAAAADaAAAAAAAXwAAAAAAaAAAAAAAZQAAAAACZQAAAAACZQAAAAAAZQAAAAAAZQAAAAADXQAAAAADaAAAAAABaAAAAAABXQAAAAACXQAAAAACXwAAAAAAaAAAAAACaAAAAAACaAAAAAADXwAAAAABaAAAAAACJAAAAAACJAAAAAABJAAAAAADJAAAAAACJAAAAAAAXQAAAAACXQAAAAACfgAAAAAAXQAAAAACXQAAAAACaAAAAAACaAAAAAACaAAAAAADaAAAAAACaAAAAAAAaAAAAAABMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAXQAAAAADXQAAAAABfgAAAAAAXQAAAAACXQAAAAACXQAAAAABewAAAAADewAAAAACewAAAAAAewAAAAACewAAAAADJAAAAAADJAAAAAABJAAAAAADJAAAAAACJAAAAAAAXQAAAAADXQAAAAABfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAewAAAAAAHwAAAAAAHwAAAAAAHwAAAAADHwAAAAABXQAAAAACXQAAAAACXQAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAACfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAewAAAAADHwAAAAADHwAAAAABHwAAAAACHwAAAAACXQAAAAADXQAAAAABXQAAAAAAXQAAAAACfgAAAAAAXQAAAAACXQAAAAABfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAewAAAAABHwAAAAABHwAAAAADHwAAAAACHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAADfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADgQAAAAAAbgAAAAADbAAAAAAAbQAAAAAAfgAAAAAAAgAAAAAAJAAAAAABJAAAAAABJAAAAAABJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAHwAAAAADHwAAAAACHwAAAAABHwAAAAAAbQAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAaAAAAAABAgAAAAAAJAAAAAABJAAAAAAAHwAAAAABHwAAAAACHwAAAAABfgAAAAAAbQAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAaAAAAAABAgAAAAAAHwAAAAABHwAAAAABHwAAAAAAHwAAAAACHwAAAAADfgAAAAAAgQAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAADXQAAAAAAaAAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABggAAAAAAfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAXQAAAAAC version: 6 -3,1: ind: -3,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADgQAAAAAAfgAAAAAAbgAAAAADgQAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAbgAAAAACbgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAAAegAAAAADegAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAIwAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAACegAAAAAAegAAAAACfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAIwAAAAAARQAAAAAAIwAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAegAAAAADfgAAAAAAegAAAAABegAAAAAAegAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAIwAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAFQAAAAAAgQAAAAAAegAAAAAAegAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAgQAAAAAAggAAAAAAFQAAAAAFegAAAAADfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAggAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAggAAAAACegAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAgQAAAAAAgQAAAAAAggAAAAACgQAAAAAAFQAAAAADfgAAAAAAegAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAFQAAAAAFfgAAAAAAgQAAAAAAegAAAAAAegAAAAACegAAAAADegAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAggAAAAACFQAAAAADegAAAAACegAAAAADfgAAAAAAegAAAAADegAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABgQAAAAAAfgAAAAAAbgAAAAACgQAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAPAAAAAAAPAAAAAAAXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAegAAAAACegAAAAABegAAAAADegAAAAABegAAAAACfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAIwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAACegAAAAAAegAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAIwAAAAAARQAAAAAAIwAAAAADfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAegAAAAADfgAAAAAAegAAAAACegAAAAAAegAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAIwAAAAACfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAFQAAAAAGgQAAAAAAegAAAAACegAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAgQAAAAAAggAAAAABFQAAAAADegAAAAADfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAggAAAAABgQAAAAAAgQAAAAAAgQAAAAAAggAAAAABegAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAgQAAAAAAgQAAAAAAggAAAAACgQAAAAAAFQAAAAAAfgAAAAAAegAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAFQAAAAADfgAAAAAAgQAAAAAAegAAAAAAegAAAAADegAAAAADegAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAggAAAAACFQAAAAACegAAAAADegAAAAABfgAAAAAAegAAAAACegAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA version: 6 -3,-2: ind: -3,-2 - tiles: aAAAAAABaAAAAAAAaAAAAAABaAAAAAAAXQAAAAABXQAAAAAAfgAAAAAAXQAAAAACegAAAAAAegAAAAABXQAAAAADEgAAAAABEgAAAAACEgAAAAABEgAAAAAAEgAAAAACfgAAAAAAfgAAAAAAJAAAAAABaAAAAAACXQAAAAAAXQAAAAABfgAAAAAAXQAAAAAAegAAAAADegAAAAABXQAAAAADEgAAAAADEgAAAAABEgAAAAADEgAAAAACEgAAAAAAMwAAAAAAMwAAAAAAJAAAAAAAaAAAAAAAXQAAAAAAXQAAAAABfgAAAAAAXQAAAAADegAAAAAAegAAAAABXQAAAAADEgAAAAAAEgAAAAAAEgAAAAACEgAAAAADEgAAAAADMwAAAAAAMwAAAAAAJAAAAAADaAAAAAAAaAAAAAAAXQAAAAADaAAAAAABXQAAAAADegAAAAADegAAAAABXQAAAAACEgAAAAACEgAAAAADEgAAAAACEgAAAAAAEgAAAAACMwAAAAAAMwAAAAAAJAAAAAABaAAAAAADaAAAAAADXQAAAAADaAAAAAACXQAAAAABegAAAAACegAAAAADXQAAAAACEgAAAAACEgAAAAACEgAAAAACEgAAAAABEgAAAAADMwAAAAAAMwAAAAAAJAAAAAABaAAAAAACXQAAAAADXQAAAAAAfgAAAAAAXQAAAAABegAAAAAAegAAAAADXQAAAAABEgAAAAAAEgAAAAADEgAAAAACEgAAAAAAEgAAAAADfgAAAAAAfgAAAAAAJAAAAAADaAAAAAAAXQAAAAAAXQAAAAACfgAAAAAAXQAAAAAAKAAAAAABKAAAAAAAXQAAAAACXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAADaAAAAAABaAAAAAABaAAAAAADaAAAAAACXQAAAAABXQAAAAADfgAAAAAAXQAAAAACKAAAAAACKAAAAAACKAAAAAACKAAAAAAAKAAAAAADKAAAAAABKAAAAAADKAAAAAADaAAAAAAAaAAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAXQAAAAADXQAAAAABXQAAAAACfgAAAAAAbgAAAAAAbgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAbQAAAAAAbgAAAAADaAAAAAABaAAAAAADXQAAAAABXQAAAAACXQAAAAACfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAABXQAAAAADXQAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAADegAAAAABKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAAAKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAADegAAAAACKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAXQAAAAACfgAAAAAAewAAAAACewAAAAADewAAAAACfgAAAAAAgQAAAAAAfgAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAXQAAAAACfgAAAAAAewAAAAADewAAAAACewAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAAB + tiles: aAAAAAABaAAAAAACaAAAAAACaAAAAAAAXQAAAAACXQAAAAABfgAAAAAAXQAAAAABegAAAAAAegAAAAABXQAAAAADEgAAAAABEgAAAAACEgAAAAAAEgAAAAAAEgAAAAACfgAAAAAAfgAAAAAAJAAAAAAAaAAAAAABXQAAAAACXQAAAAACfgAAAAAAXQAAAAACegAAAAACegAAAAABXQAAAAABEgAAAAACEgAAAAACEgAAAAACEgAAAAABEgAAAAADMwAAAAAAMwAAAAAAJAAAAAABaAAAAAACXQAAAAADXQAAAAAAfgAAAAAAXQAAAAADegAAAAACegAAAAACXQAAAAADEgAAAAAAEgAAAAADEgAAAAABEgAAAAABEgAAAAAAMwAAAAAAMwAAAAAAJAAAAAABaAAAAAACaAAAAAABXQAAAAAAaAAAAAAAXQAAAAADegAAAAACegAAAAACXQAAAAAAEgAAAAABEgAAAAADEgAAAAACEgAAAAACEgAAAAADMwAAAAAAMwAAAAAAJAAAAAACaAAAAAADaAAAAAAAXQAAAAACaAAAAAACXQAAAAADegAAAAADegAAAAACXQAAAAAAEgAAAAAAEgAAAAAAEgAAAAABEgAAAAAAEgAAAAADMwAAAAAAMwAAAAAAJAAAAAAAaAAAAAAAXQAAAAABXQAAAAADfgAAAAAAXQAAAAAAegAAAAADegAAAAADXQAAAAADEgAAAAABEgAAAAAAEgAAAAADEgAAAAACEgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACaAAAAAAAXQAAAAADXQAAAAAAfgAAAAAAXQAAAAAAKAAAAAADKAAAAAABXQAAAAABXQAAAAACXQAAAAAAXQAAAAACXQAAAAAAXQAAAAABaAAAAAAAaAAAAAACaAAAAAADaAAAAAACXQAAAAAAXQAAAAACfgAAAAAAXQAAAAAAKAAAAAABKAAAAAACKAAAAAABKAAAAAABKAAAAAACKAAAAAAAKAAAAAABKAAAAAABaAAAAAABaAAAAAAAXQAAAAABXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAADXQAAAAAAXQAAAAABXQAAAAABfgAAAAAAbgAAAAADbgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAbQAAAAAAbgAAAAADaAAAAAACaAAAAAADXQAAAAACXQAAAAADXQAAAAABfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAXQAAAAADXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAADegAAAAADKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAXQAAAAADXQAAAAABXQAAAAACXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAADegAAAAACKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAABegAAAAACKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAXQAAAAABfgAAAAAAewAAAAAAewAAAAACewAAAAADfgAAAAAAgQAAAAAAfgAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfgAAAAAAaQAAAAAAaQAAAAAAQwAAAAAAXQAAAAACfgAAAAAAewAAAAADewAAAAACewAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAACfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAAB version: 6 -3,-3: ind: -3,-3 - tiles: XQAAAAADXQAAAAAAXQAAAAACXQAAAAADXQAAAAACXQAAAAACXQAAAAAAaAAAAAACXQAAAAADfgAAAAAABwAAAAAABwAAAAAABwAAAAAKAAAAAAAAfQAAAAAAAAAAAAAATgAAAAABTgAAAAACaAAAAAACTgAAAAAATgAAAAADaAAAAAABaAAAAAAAaAAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABXQAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAAAXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAJAAAAAACJAAAAAACHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAACHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAaAAAAAACXQAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAACHwAAAAACHwAAAAACfgAAAAAAfgAAAAAATgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATgAAAAACXQAAAAACfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAaAAAAAACXQAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAMBwAAAAAABwAAAAAABwAAAAAABwAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATgAAAAADXQAAAAABfgAAAAAABwAAAAAABwAAAAAABwAAAAAKBwAAAAAABwAAAAAKBwAAAAAABwAAAAAAfgAAAAAAbQAAAAAAbgAAAAABfgAAAAAAKAAAAAABXQAAAAACTgAAAAABXQAAAAACfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAKBwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAKAAAAAAAXQAAAAABaAAAAAABXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAewAAAAACTgAAAAACXQAAAAACXQAAAAABfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAewAAAAABTgAAAAACXQAAAAADfgAAAAAAfgAAAAAAbgAAAAADbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAewAAAAABaAAAAAACXQAAAAABfgAAAAAAfgAAAAAAbgAAAAADbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADKAAAAAAAKAAAAAACKAAAAAAAKAAAAAAAKAAAAAAAKAAAAAADKAAAAAADKAAAAAABaAAAAAADXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAXQAAAAACKAAAAAACKAAAAAACXQAAAAABXQAAAAADXQAAAAACXQAAAAADXQAAAAADXQAAAAAB + tiles: XQAAAAADXQAAAAAAXQAAAAADXQAAAAABXQAAAAACXQAAAAADXQAAAAACaAAAAAABXQAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAEAAAAAAAAfQAAAAAAAAAAAAAATgAAAAABTgAAAAACaAAAAAAATgAAAAACTgAAAAADaAAAAAACaAAAAAADaAAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADXQAAAAAAXQAAAAADXQAAAAABXQAAAAABXQAAAAACXQAAAAADXQAAAAABXQAAAAACfgAAAAAAJAAAAAADJAAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACJAAAAAAAHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAaAAAAAACXQAAAAADfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAADHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAATgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATgAAAAADXQAAAAABfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAaAAAAAABXQAAAAAAfgAAAAAABwAAAAACBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATgAAAAABXQAAAAABfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAfgAAAAAAbQAAAAAAbgAAAAABfgAAAAAAKAAAAAAAXQAAAAADTgAAAAABXQAAAAACfgAAAAAABwAAAAAABwAAAAAABwAAAAADBwAAAAAJBwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAKAAAAAADXQAAAAACaAAAAAABXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAADfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAewAAAAADTgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAewAAAAABTgAAAAACXQAAAAADfgAAAAAAfgAAAAAAbgAAAAABbQAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAewAAAAABaAAAAAACXQAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABKAAAAAACKAAAAAABKAAAAAACKAAAAAAAKAAAAAACKAAAAAADKAAAAAACKAAAAAABaAAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAXQAAAAADKAAAAAAAKAAAAAAAXQAAAAABXQAAAAACXQAAAAACXQAAAAACXQAAAAABXQAAAAAD version: 6 -4,0: ind: -4,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAABaAAAAAACXQAAAAAAXQAAAAAAZQAAAAABZQAAAAACZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAADaAAAAAADaAAAAAABaAAAAAACTgAAAAABTgAAAAACaAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAAAaAAAAAABXQAAAAADXQAAAAACZQAAAAADZQAAAAABZQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAACJAAAAAADJAAAAAAAJAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAXQAAAAADXQAAAAACMwAAAAAAMwAAAAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAACXQAAAAAAXQAAAAADJAAAAAABJAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAADXQAAAAABXQAAAAADXQAAAAABXQAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAACfgAAAAAAHwAAAAAAHwAAAAABHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAACfgAAAAAAJAAAAAADJAAAAAACJAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAABJAAAAAADJAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAACaAAAAAACXQAAAAADXQAAAAAAZQAAAAABZQAAAAACZQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAAAaAAAAAAAaAAAAAABaAAAAAADTgAAAAADTgAAAAAAaAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAAAaAAAAAABXQAAAAADXQAAAAABZQAAAAAAZQAAAAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAADXQAAAAADJAAAAAADJAAAAAACJAAAAAAAJAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAACXQAAAAACXQAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAAAXQAAAAADXQAAAAAAJAAAAAADJAAAAAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAADXQAAAAADXQAAAAAAXQAAAAACXQAAAAACXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAABfgAAAAAAJAAAAAADJAAAAAAAJAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADAgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAABJAAAAAAAJAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA version: 6 -4,-1: ind: -4,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADTgAAAAAAXQAAAAACfgAAAAAAHwAAAAACHwAAAAACHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAATgAAAAAAXQAAAAABfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAaAAAAAAAXQAAAAACfgAAAAAAHwAAAAADHwAAAAADHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABTgAAAAACXQAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAACXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAAAXQAAAAACfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAABXQAAAAABfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAACfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAACaAAAAAADfgAAAAAAXQAAAAADXQAAAAACXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAABXQAAAAACXQAAAAADXQAAAAABXQAAAAADXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAADXQAAAAABXQAAAAABJAAAAAACJAAAAAADJAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACaAAAAAADXQAAAAAAXQAAAAABMwAAAAAAMwAAAAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAADXQAAAAACJAAAAAAAJAAAAAABJAAAAAACJAAAAAAD + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADTgAAAAACXQAAAAADfgAAAAAAHwAAAAADHwAAAAACHwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABTgAAAAABXQAAAAABfgAAAAAAHwAAAAACHwAAAAABHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAaAAAAAACXQAAAAADfgAAAAAAHwAAAAABHwAAAAAAHwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADTgAAAAAAXQAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABTgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADTgAAAAABXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABaAAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAABTgAAAAABXQAAAAAAfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAADXQAAAAAAfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACaAAAAAACXQAAAAABfgAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACaAAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAAAaAAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAAAXQAAAAABJAAAAAADJAAAAAAAJAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABaAAAAAAAXQAAAAABXQAAAAACMwAAAAAAMwAAAAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAAAXQAAAAADJAAAAAABJAAAAAACJAAAAAABJAAAAAAB version: 6 -4,-2: ind: -4,-2 - tiles: fgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACbgAAAAABbgAAAAABfgAAAAAAfgAAAAAAXQAAAAABaAAAAAABaAAAAAACaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABaAAAAAABJAAAAAADfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAABHwAAAAABfgAAAAAAXQAAAAADaAAAAAAAJAAAAAABMwAAAAAAgQAAAAAAfgAAAAAAJAAAAAABHwAAAAAAHwAAAAAAHwAAAAACfgAAAAAAHwAAAAABHwAAAAABHwAAAAACHwAAAAACfgAAAAAAXQAAAAAAaAAAAAADJAAAAAAAMwAAAAAAfgAAAAAAfgAAAAAAegAAAAAAegAAAAABegAAAAADHwAAAAACHwAAAAABHwAAAAADHwAAAAACHwAAAAACHwAAAAACfgAAAAAAXQAAAAABaAAAAAABJAAAAAABMwAAAAAAgQAAAAAAfgAAAAAAegAAAAACegAAAAABegAAAAADHwAAAAACfgAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAACfgAAAAAAXQAAAAABaAAAAAADJAAAAAABMwAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAADHwAAAAABfgAAAAAAaAAAAAABaAAAAAACaAAAAAADaAAAAAABaAAAAAAAXQAAAAAAaAAAAAAAJAAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAACHwAAAAACfgAAAAAAaAAAAAAAaAAAAAACaAAAAAAAaAAAAAABaAAAAAABXQAAAAACaAAAAAACaAAAAAADaAAAAAACbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAACfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADaAAAAAADbgAAAAABbgAAAAACbgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAACaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAACXQAAAAADXQAAAAACXQAAAAADaAAAAAACfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAAAaAAAAAABaAAAAAADaAAAAAADaAAAAAADaAAAAAACfQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAADAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAaAAAAAADaAAAAAADaAAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAADAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAAAaAAAAAADXQAAAAADfgAAAAAAXQAAAAADXQAAAAABXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAaAAAAAAAXQAAAAAAfgAAAAAAXQAAAAABXQAAAAACXQAAAAAB + tiles: fgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADbgAAAAACbgAAAAACfgAAAAAAfgAAAAAAXQAAAAADaAAAAAAAaAAAAAABaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAAAJAAAAAABfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAACHwAAAAADfgAAAAAAXQAAAAADaAAAAAABJAAAAAAAMwAAAAAAgQAAAAAAfgAAAAAAJAAAAAADHwAAAAADHwAAAAACHwAAAAABfgAAAAAAHwAAAAAAHwAAAAADHwAAAAABHwAAAAABfgAAAAAAXQAAAAABaAAAAAACJAAAAAAAMwAAAAAAfgAAAAAAfgAAAAAAegAAAAADegAAAAAAegAAAAACHwAAAAACHwAAAAABHwAAAAABHwAAAAADHwAAAAAAHwAAAAABfgAAAAAAXQAAAAACaAAAAAADJAAAAAAAMwAAAAAAgQAAAAAAfgAAAAAAegAAAAACegAAAAAAegAAAAAAHwAAAAABfgAAAAAAXQAAAAADXQAAAAAAXQAAAAADXQAAAAAAfgAAAAAAXQAAAAACaAAAAAABJAAAAAADMwAAAAAAfgAAAAAAfgAAAAAAegAAAAABegAAAAAAegAAAAABHwAAAAABfgAAAAAAaAAAAAADaAAAAAABaAAAAAADaAAAAAAAaAAAAAACXQAAAAAAaAAAAAACJAAAAAACfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAACHwAAAAABfgAAAAAAaAAAAAACaAAAAAACaAAAAAACaAAAAAAAaAAAAAADXQAAAAAAaAAAAAADaAAAAAADaAAAAAABbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAACXQAAAAABfgAAAAAAXQAAAAADXQAAAAADXQAAAAABaAAAAAADbgAAAAAAbgAAAAADbgAAAAABfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAABXQAAAAAAXQAAAAAAXQAAAAADXQAAAAADaAAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAABaAAAAAAAaAAAAAAAaAAAAAADaAAAAAAAaAAAAAACfQAAAAAAfgAAAAAAXQAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAADXQAAAAADXQAAAAABXQAAAAACXQAAAAADAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAaAAAAAABaAAAAAACaAAAAAADfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAACfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADaAAAAAADXQAAAAACfgAAAAAAXQAAAAABXQAAAAACXQAAAAAD version: 6 -4,-3: ind: -4,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADaAAAAAADXQAAAAABXQAAAAADXQAAAAACXQAAAAAAXQAAAAABXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAAAaAAAAAAAaAAAAAABaAAAAAACTgAAAAADTgAAAAAAaAAAAAADTgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAACXQAAAAAAXQAAAAADXQAAAAAAXQAAAAACXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAADXgAAAAAAXQAAAAAAXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAADXQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAABXQAAAAAAXgAAAAABXQAAAAABfgAAAAAAgQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAXQAAAAACAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABXgAAAAABXgAAAAABXQAAAAABXQAAAAABfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACYQAAAAAAYQAAAAABXgAAAAAAXQAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAYQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAB + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABaAAAAAAAXQAAAAADXQAAAAABXQAAAAACXQAAAAACXQAAAAABXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAAAaAAAAAADaAAAAAADaAAAAAABTgAAAAABTgAAAAACaAAAAAAATgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAAAXQAAAAAAXQAAAAABXQAAAAABXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAACAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAACXQAAAAACXgAAAAABXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAXQAAAAAAXQAAAAABAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAACXgAAAAAAXQAAAAABfgAAAAAAgQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAXQAAAAACAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAAAXgAAAAABXgAAAAAAXQAAAAABXQAAAAABfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAADYQAAAAAAYQAAAAACXgAAAAAAXQAAAAACfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAYQAAAAAEfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAB version: 6 2,0: ind: 2,0 - tiles: HwAAAAACHwAAAAAAHwAAAAABfgAAAAAAaAAAAAABaAAAAAACaAAAAAADfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAADaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADXQAAAAACaAAAAAAAXQAAAAAAdQAAAAABdQAAAAADdQAAAAABfgAAAAAAXQAAAAAAXQAAAAADXQAAAAAAJAAAAAADXQAAAAABXQAAAAACXQAAAAACaAAAAAADXQAAAAAAXQAAAAAATgAAAAABXQAAAAABdQAAAAACdQAAAAABdQAAAAAAfgAAAAAAaAAAAAABaAAAAAABaAAAAAAAaAAAAAABTgAAAAACTgAAAAADaAAAAAAAaAAAAAACaAAAAAABTgAAAAACTgAAAAAAXQAAAAACdQAAAAACdQAAAAADaAAAAAADfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAABXQAAAAADXQAAAAAAaAAAAAAAXQAAAAADXQAAAAACXQAAAAACXQAAAAACdQAAAAABdQAAAAADdQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAADcAAAAAACcAAAAAADcAAAAAADcAAAAAACcAAAAAACcAAAAAADfgAAAAAAXQAAAAABXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAXQAAAAACfgAAAAAAcAAAAAADcAAAAAADcAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAdQAAAAABdQAAAAADcAAAAAAAcAAAAAADcAAAAAADcAAAAAADcAAAAAAAdQAAAAABXQAAAAAAXQAAAAADXQAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAdQAAAAADdQAAAAADTgAAAAADcAAAAAACdQAAAAABcAAAAAABTgAAAAACdQAAAAAAXQAAAAADXQAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAACcAAAAAACcAAAAAABcAAAAAACcAAAAAADcAAAAAACdQAAAAABXQAAAAABXQAAAAACXQAAAAABfgAAAAAAgQAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAcAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAcAAAAAADcAAAAAAAcAAAAAACJAAAAAAAcAAAAAAAcAAAAAADcAAAAAADfgAAAAAAXQAAAAACegAAAAABegAAAAADegAAAAAAegAAAAADfgAAAAAAbAAAAAAAfgAAAAAAcAAAAAAAcAAAAAADcAAAAAACcAAAAAAAcAAAAAABcAAAAAACJAAAAAABXQAAAAABXQAAAAACegAAAAAAegAAAAAAegAAAAAAegAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAcAAAAAACcAAAAAABcAAAAAABcAAAAAADcAAAAAABcAAAAAAAcAAAAAABfgAAAAAAXQAAAAAAegAAAAADegAAAAADegAAAAAAegAAAAADfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAAAcAAAAAABcAAAAAADfgAAAAAAXQAAAAADegAAAAABegAAAAACegAAAAAAegAAAAACfgAAAAAAbgAAAAADgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAcAAAAAADcAAAAAACcAAAAAAD + tiles: HwAAAAADHwAAAAABHwAAAAAAfgAAAAAAaAAAAAADaAAAAAACaAAAAAADfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAaAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAXQAAAAACaAAAAAABXQAAAAACdQAAAAACdQAAAAADdQAAAAADfgAAAAAAXQAAAAADXQAAAAAAXQAAAAAAJAAAAAADXQAAAAACXQAAAAABXQAAAAACaAAAAAACXQAAAAAAXQAAAAAATgAAAAAAXQAAAAACdQAAAAADdQAAAAAAdQAAAAABfgAAAAAAaAAAAAACaAAAAAABaAAAAAABaAAAAAABTgAAAAABTgAAAAADaAAAAAADaAAAAAACaAAAAAADTgAAAAADTgAAAAAAXQAAAAAAdQAAAAAAdQAAAAACaAAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAXQAAAAACXQAAAAABXQAAAAACXQAAAAADaAAAAAACXQAAAAAAXQAAAAADXQAAAAADXQAAAAADdQAAAAAAdQAAAAABdQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABcAAAAAACcAAAAAAAcAAAAAADcAAAAAACcAAAAAABcAAAAAABfgAAAAAAXQAAAAABXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAXQAAAAABfgAAAAAAcAAAAAABcAAAAAADcAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAAAfgAAAAAAbgAAAAADfgAAAAAAXQAAAAABfgAAAAAAdQAAAAAAdQAAAAABcAAAAAACcAAAAAADcAAAAAABcAAAAAACcAAAAAAAdQAAAAABXQAAAAABXQAAAAAAXQAAAAADfgAAAAAAbgAAAAADfgAAAAAAXQAAAAABfgAAAAAAdQAAAAAAdQAAAAAATgAAAAACcAAAAAADdQAAAAADcAAAAAADTgAAAAADdQAAAAACXQAAAAAAXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAADcAAAAAACcAAAAAACcAAAAAABcAAAAAABcAAAAAABdQAAAAABXQAAAAAAXQAAAAABXQAAAAACfgAAAAAAgQAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAcAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAcAAAAAADcAAAAAACcAAAAAACJAAAAAAAcAAAAAACcAAAAAADcAAAAAACfgAAAAAAXQAAAAABegAAAAADegAAAAACegAAAAABegAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAcAAAAAADcAAAAAACcAAAAAACcAAAAAABcAAAAAAAcAAAAAACJAAAAAABXQAAAAABXQAAAAABegAAAAAAegAAAAACegAAAAABegAAAAACfgAAAAAAbAAAAAAAfgAAAAAAcAAAAAACcAAAAAACcAAAAAAAcAAAAAADcAAAAAABcAAAAAABcAAAAAAAfgAAAAAAXQAAAAAAegAAAAAAegAAAAADegAAAAAAegAAAAADfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAAAcAAAAAABcAAAAAADfgAAAAAAXQAAAAABegAAAAADegAAAAADegAAAAACegAAAAABfgAAAAAAbgAAAAADgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAcAAAAAACcAAAAAACcAAAAAAA version: 6 -5,-2: ind: -5,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAADgAAAAABDgAAAAACgQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAADgAAAAADDgAAAAABDgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAADgAAAAACDgAAAAADgQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAADgAAAAACDgAAAAACDgAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,2: ind: 0,2 - tiles: fgAAAAAAfgAAAAAATwAAAAAAHwAAAAADHwAAAAAAHwAAAAADHwAAAAADTwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAALgAAAAAALgAAAAAALgAAAAAAfgAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAAAXQAAAAACfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAADfgAAAAAAdAAAAAABdAAAAAACdQAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAABfgAAAAAAHwAAAAADHwAAAAADHwAAAAABfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABHwAAAAADHwAAAAADHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADHwAAAAACHwAAAAACHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADHwAAAAADHwAAAAABHwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAATwAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAABTwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAALgAAAAAALgAAAAAALgAAAAAAfgAAAAAAfgAAAAAATwAAAAAATwAAAAAATwAAAAAATwAAAAAATwAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACXQAAAAABfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAACfgAAAAAAdAAAAAADdAAAAAABdQAAAAABfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAABfgAAAAAAHwAAAAACHwAAAAADHwAAAAABfgAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAGwAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAADfgAAAAAAHwAAAAACHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADHwAAAAACHwAAAAACHwAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAHwAAAAACHwAAAAACHwAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABHwAAAAAAHwAAAAACHwAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,2: ind: -1,2 - tiles: HwAAAAACHwAAAAACewAAAAABewAAAAAAewAAAAABXQAAAAABXQAAAAAAXQAAAAACXQAAAAACXQAAAAABJAAAAAADJAAAAAADfgAAAAAAXQAAAAADXQAAAAABXQAAAAABfgAAAAAAHwAAAAAAewAAAAAAewAAAAADewAAAAAAXQAAAAABXQAAAAABXQAAAAABXQAAAAAAXQAAAAADHwAAAAACHwAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAHwAAAAABfgAAAAAAHwAAAAADewAAAAADewAAAAADewAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAADXQAAAAABHwAAAAACHwAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbgAAAAACfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADHwAAAAADXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADHwAAAAACXQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAXQAAAAADHwAAAAACXQAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAHwAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABfgAAAAAAHwAAAAAAHwAAAAABHwAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAAAdAAAAAACdAAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAAAHwAAAAAAgQAAAAAAHwAAAAABHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAJAAAAAABJAAAAAAAJAAAAAABfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAABfgAAAAAAXQAAAAAAXQAAAAADXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACHwAAAAADHwAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAADXQAAAAADXQAAAAACXQAAAAABXQAAAAAC + tiles: HwAAAAACHwAAAAAAewAAAAACewAAAAACewAAAAADXQAAAAABXQAAAAABXQAAAAACXQAAAAACXQAAAAABJAAAAAABJAAAAAACfgAAAAAAXQAAAAAAXQAAAAACXQAAAAAAfgAAAAAAHwAAAAAAewAAAAADewAAAAAAewAAAAABXQAAAAADXQAAAAADXQAAAAACXQAAAAABXQAAAAACHwAAAAADHwAAAAACfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADfgAAAAAAHwAAAAACewAAAAAAewAAAAACewAAAAABXQAAAAADXQAAAAADXQAAAAACXQAAAAACXQAAAAABHwAAAAACHwAAAAABfgAAAAAAHwAAAAABHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADHwAAAAACXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAHwAAAAACXQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAXQAAAAABHwAAAAAAXQAAAAABfgAAAAAAHwAAAAABfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAHwAAAAACHwAAAAABHwAAAAADHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAABdAAAAAAAdAAAAAABfgAAAAAAHwAAAAACHwAAAAABHwAAAAACHwAAAAABgQAAAAAAHwAAAAABHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAHwAAAAACHwAAAAAAfgAAAAAAJAAAAAABJAAAAAABJAAAAAADfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACfgAAAAAAXQAAAAAAXQAAAAACXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADHwAAAAADHwAAAAACXQAAAAAAXQAAAAADXQAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACHwAAAAAAHwAAAAABXQAAAAAAXQAAAAAAXQAAAAADXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAABHwAAAAACHwAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAAD version: 6 -2,2: ind: -2,2 - tiles: fQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAbgAAAAABgQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAAAHwAAAAADXQAAAAACfgAAAAAAHwAAAAAAHwAAAAACHwAAAAACHwAAAAADHwAAAAACHwAAAAABfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAHwAAAAACHwAAAAAAHwAAAAABHwAAAAAAHwAAAAAAHwAAAAADfgAAAAAAXQAAAAABXQAAAAADfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAADXQAAAAACXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAACXQAAAAAAXQAAAAACXQAAAAACXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACfgAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAADXQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAABAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAA + tiles: fQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAbgAAAAABgQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAADHwAAAAACXQAAAAADfgAAAAAAHwAAAAAAHwAAAAABHwAAAAABHwAAAAAAHwAAAAABHwAAAAAAfgAAAAAAXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABfgAAAAAAHwAAAAACHwAAAAAAHwAAAAACHwAAAAADHwAAAAACHwAAAAAAfgAAAAAAXQAAAAAAXQAAAAABfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAACXQAAAAABXQAAAAACXQAAAAADXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAXQAAAAACXQAAAAABXQAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAACXQAAAAAAXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAHwAAAAADAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,3: ind: -1,3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAJAAAAAAAXQAAAAAAXQAAAAABXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAABXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAABHwAAAAABHwAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAABJAAAAAABXQAAAAACXQAAAAAAXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAABXQAAAAABXQAAAAADXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAADXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAABHwAAAAABHwAAAAABXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAABXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,3: ind: 0,3 - tiles: XQAAAAADHwAAAAABHwAAAAABJAAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACXQAAAAABXQAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAACXQAAAAACXQAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADHwAAAAAAHwAAAAACXQAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: XQAAAAACHwAAAAABHwAAAAAAJAAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAADXQAAAAACXQAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAACXQAAAAABXQAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACHwAAAAABHwAAAAADXQAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 2,1: ind: 2,1 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAcAAAAAACcAAAAAADcAAAAAABfgAAAAAAJAAAAAABHwAAAAADHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAABHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbgAAAAAAfgAAAAAAHwAAAAADTgAAAAABTgAAAAABHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACHwAAAAACTgAAAAAATgAAAAABHwAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAABHwAAAAAAaAAAAAAAHwAAAAACHwAAAAABHwAAAAABHwAAAAADfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAMAAAAAAAMAAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAAAHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAcAAAAAAAcAAAAAACcAAAAAADfgAAAAAAJAAAAAAAHwAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAABHwAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbgAAAAABfgAAAAAAHwAAAAABTgAAAAABTgAAAAABHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAHwAAAAABTgAAAAABTgAAAAAAHwAAAAABfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAADaAAAAAADHwAAAAADHwAAAAABHwAAAAABHwAAAAACfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAMAAAAAAAMAAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAABHwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,0: ind: 3,0 - tiles: fgAAAAAAdQAAAAABdQAAAAABdQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABcAAAAAABfgAAAAAAdQAAAAADdQAAAAADdQAAAAADcAAAAAAAdQAAAAADcAAAAAABfgAAAAAAcAAAAAADcAAAAAAAdQAAAAADdQAAAAACdQAAAAACfgAAAAAAcAAAAAACdQAAAAACdQAAAAACdQAAAAABdQAAAAAAdQAAAAADcAAAAAAAdQAAAAABcAAAAAACcAAAAAADcAAAAAAAcAAAAAACdQAAAAABdQAAAAAAdQAAAAABdQAAAAABdQAAAAADdQAAAAACcAAAAAABcAAAAAAAcAAAAAACdQAAAAACcAAAAAAAdQAAAAADcAAAAAABcAAAAAABcAAAAAADcAAAAAAAdQAAAAABdQAAAAADdQAAAAACfgAAAAAAcAAAAAABdQAAAAADdQAAAAACdQAAAAAAdQAAAAAAdQAAAAADcAAAAAADdQAAAAACcAAAAAADfgAAAAAAcAAAAAADcAAAAAABdQAAAAADdQAAAAACdQAAAAAAfgAAAAAAcAAAAAABcAAAAAADfgAAAAAAdQAAAAABdQAAAAACdQAAAAADcAAAAAAAdQAAAAABJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAAAdQAAAAAAcAAAAAAAfgAAAAAAcAAAAAADcAAAAAABcAAAAAABcAAAAAAAfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAAAcAAAAAAAdQAAAAABcAAAAAADcAAAAAADcAAAAAABdQAAAAACdQAAAAABdQAAAAABfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAACdQAAAAACdQAAAAABcAAAAAADfgAAAAAAcAAAAAAAdQAAAAAAdQAAAAAAdQAAAAAAfgAAAAAAbgAAAAACbgAAAAABbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAADdQAAAAADcAAAAAAAdQAAAAAAcAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAXQAAAAADXQAAAAADfgAAAAAAcAAAAAADdQAAAAAAcAAAAAADfgAAAAAAJAAAAAABHwAAAAABHwAAAAADHwAAAAABHwAAAAABegAAAAABegAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAABfgAAAAAAcAAAAAADdQAAAAADcAAAAAABcAAAAAADcAAAAAADHwAAAAAAHwAAAAABHwAAAAABfgAAAAAAegAAAAACegAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAACdQAAAAABcAAAAAACfgAAAAAAcAAAAAACHwAAAAAAHwAAAAABHwAAAAABfgAAAAAAegAAAAADegAAAAACfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAcAAAAAACcAAAAAACdQAAAAACcAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAdQAAAAAAdQAAAAACdQAAAAACdQAAAAADcAAAAAADcAAAAAACcAAAAAAAdQAAAAADcAAAAAADcAAAAAABcAAAAAAAcAAAAAACcAAAAAACfgAAAAAAbQAAAAAAfgAAAAAAdQAAAAADdQAAAAABdQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACdQAAAAACdQAAAAABdQAAAAADcAAAAAABfgAAAAAAbQAAAAAA + tiles: fgAAAAAAdQAAAAADdQAAAAAAdQAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABcAAAAAAAfgAAAAAAdQAAAAABdQAAAAACdQAAAAACcAAAAAACdQAAAAACcAAAAAABfgAAAAAAcAAAAAACcAAAAAACdQAAAAABdQAAAAADdQAAAAADfgAAAAAAcAAAAAABdQAAAAACdQAAAAADdQAAAAACdQAAAAADdQAAAAABcAAAAAABdQAAAAAAcAAAAAAAcAAAAAADcAAAAAAAcAAAAAABdQAAAAADdQAAAAACdQAAAAABdQAAAAADdQAAAAACdQAAAAACcAAAAAAAcAAAAAADcAAAAAAAdQAAAAADcAAAAAABdQAAAAADcAAAAAACcAAAAAAAcAAAAAACcAAAAAAAdQAAAAACdQAAAAADdQAAAAAAfgAAAAAAcAAAAAACdQAAAAADdQAAAAACdQAAAAABdQAAAAACdQAAAAACcAAAAAAAdQAAAAACcAAAAAADfgAAAAAAcAAAAAAAcAAAAAABdQAAAAAAdQAAAAAAdQAAAAAAfgAAAAAAcAAAAAAAcAAAAAABfgAAAAAAdQAAAAACdQAAAAADdQAAAAAAcAAAAAACdQAAAAACJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABdQAAAAACcAAAAAADfgAAAAAAcAAAAAADcAAAAAADcAAAAAAAcAAAAAACfgAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAAAcAAAAAACdQAAAAADcAAAAAACcAAAAAADcAAAAAADdQAAAAABdQAAAAACdQAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAdQAAAAADdQAAAAADdQAAAAAAcAAAAAACfgAAAAAAcAAAAAADdQAAAAABdQAAAAAAdQAAAAABfgAAAAAAbgAAAAADbgAAAAADbAAAAAAAbAAAAAAAfgAAAAAAXQAAAAAAdQAAAAABcAAAAAAAdQAAAAABcAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAXQAAAAADXQAAAAAAfgAAAAAAcAAAAAACdQAAAAACcAAAAAAAfgAAAAAAJAAAAAACHwAAAAABHwAAAAADHwAAAAABHwAAAAABegAAAAACegAAAAABfgAAAAAAbAAAAAAAfgAAAAAAXQAAAAADfgAAAAAAcAAAAAACdQAAAAAAcAAAAAADcAAAAAAAcAAAAAACHwAAAAACHwAAAAACHwAAAAACfgAAAAAAegAAAAAAegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAACdQAAAAABcAAAAAAAfgAAAAAAcAAAAAACHwAAAAABHwAAAAADHwAAAAABfgAAAAAAegAAAAADegAAAAABfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAcAAAAAADcAAAAAACdQAAAAADcAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAdQAAAAACdQAAAAADdQAAAAADdQAAAAADcAAAAAABcAAAAAABcAAAAAACdQAAAAAAcAAAAAACcAAAAAABcAAAAAAAcAAAAAADcAAAAAABfgAAAAAAbQAAAAAAfgAAAAAAdQAAAAADdQAAAAACdQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADdQAAAAAAdQAAAAACdQAAAAADcAAAAAACfgAAAAAAbQAAAAAA version: 6 3,1: ind: 3,1 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAADdQAAAAAAdQAAAAADdQAAAAACcAAAAAACfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAcAAAAAACcAAAAAABcAAAAAAAcAAAAAAAcAAAAAADfgAAAAAAgQAAAAAAbgAAAAABbgAAAAADgQAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAMwAAAAAAegAAAAADegAAAAACegAAAAAAegAAAAABfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAACgAAAAAAfgAAAAAAbgAAAAAAHwAAAAAAfgAAAAAAXgAAAAAAZAAAAAAAXQAAAAAAXQAAAAABfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABMAAAAAAAfgAAAAAAZAAAAAAAXQAAAAADXgAAAAAAZAAAAAAAfgAAAAAAbgAAAAABbgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADfgAAAAAAegAAAAACegAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAAAfgAAAAAAegAAAAACegAAAAADfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAABfgAAAAAAegAAAAAAegAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAADdQAAAAADdQAAAAADdQAAAAACcAAAAAADfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAcAAAAAABcAAAAAADcAAAAAABcAAAAAADcAAAAAACfgAAAAAAgQAAAAAAbgAAAAABbgAAAAADgQAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAMwAAAAAAegAAAAAAegAAAAACegAAAAABegAAAAADfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAACgAAAAAAfgAAAAAAbgAAAAACHwAAAAACfgAAAAAAXgAAAAABZAAAAAAAXQAAAAACXQAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADMAAAAAAAfgAAAAAAZAAAAAAAXQAAAAACXgAAAAAAZAAAAAAAfgAAAAAAbgAAAAABbgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADfgAAAAAAegAAAAACegAAAAABfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAegAAAAADfgAAAAAAegAAAAABegAAAAACfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAABegAAAAACegAAAAAAfgAAAAAAegAAAAAAegAAAAABfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -4,-4: ind: -4,-4 - tiles: AAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAABHwAAAAADHwAAAAADHwAAAAACHwAAAAABJAAAAAAAJAAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAACHwAAAAACHwAAAAABHwAAAAABHwAAAAAAJAAAAAADJAAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAHwAAAAACHwAAAAAAHwAAAAACHwAAAAADJAAAAAADJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAACHwAAAAADHwAAAAADJAAAAAAAJAAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAADHwAAAAABHwAAAAACHwAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAHwAAAAAAHwAAAAACHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAADHwAAAAACHwAAAAAAHwAAAAACHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAADHwAAAAABHwAAAAABHwAAAAAAJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAJAAAAAADJAAAAAACJAAAAAABfgAAAAAAHwAAAAADHwAAAAAAHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAADJAAAAAADJAAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADaAAAAAACXQAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAABTgAAAAAAXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAACTgAAAAAAXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAAATgAAAAADXQAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABaAAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAADaAAAAAADaAAAAAACfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAA + tiles: AAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAACHwAAAAADHwAAAAABHwAAAAACHwAAAAAAJAAAAAABJAAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAADHwAAAAAAHwAAAAACHwAAAAACHwAAAAAAJAAAAAABJAAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAACHwAAAAAAHwAAAAAAHwAAAAADHwAAAAABJAAAAAAAJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAHwAAAAADJAAAAAADJAAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAABHwAAAAABHwAAAAACHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAADHwAAAAACHwAAAAAAHwAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAHwAAAAAAHwAAAAACHwAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAADHwAAAAACHwAAAAAAHwAAAAACJAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAJAAAAAADJAAAAAADJAAAAAACfgAAAAAAHwAAAAABHwAAAAABHwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAABJAAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABaAAAAAACXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAXQAAAAAATgAAAAACXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAACTgAAAAACXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAABTgAAAAADXQAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAXQAAAAADaAAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAaAAAAAAAaAAAAAABaAAAAAACfgAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAA version: 6 -3,-4: ind: -3,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAJAAAAAACHwAAAAABHwAAAAABHwAAAAACHwAAAAACJAAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAJAAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAACJAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAACJAAAAAABHwAAAAAAHwAAAAADHwAAAAACHwAAAAABJAAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAADJAAAAAAAHwAAAAABHwAAAAACHwAAAAABHwAAAAAAJAAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAABHwAAAAADHwAAAAABJAAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADHwAAAAADJAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADHwAAAAABHwAAAAADJAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAACJAAAAAACHwAAAAABHwAAAAACHwAAAAACHwAAAAABHwAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADfgAAAAAAJAAAAAACJAAAAAAAJAAAAAADfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAAAJAAAAAABJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAAAaAAAAAABXQAAAAACfgAAAAAAXQAAAAAAXQAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADTgAAAAACXQAAAAABXQAAAAAAXQAAAAACXQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADTgAAAAAAXQAAAAACfgAAAAAABwAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADaAAAAAABXQAAAAABfgAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAaAAAAAABaAAAAAACaAAAAAACfgAAAAAABwAAAAAKBwAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAADJAAAAAABHwAAAAAAHwAAAAACHwAAAAAAHwAAAAAAJAAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAADJAAAAAAAHwAAAAABHwAAAAABHwAAAAACHwAAAAABJAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAABJAAAAAABHwAAAAAAHwAAAAACHwAAAAAAHwAAAAADJAAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAACJAAAAAAAHwAAAAAAHwAAAAADHwAAAAADHwAAAAACJAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAACHwAAAAACHwAAAAADJAAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAAAHwAAAAADJAAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAADHwAAAAADHwAAAAADJAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAABJAAAAAABHwAAAAADHwAAAAACHwAAAAABHwAAAAACHwAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADfgAAAAAAJAAAAAADJAAAAAACJAAAAAADfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAJAAAAAADJAAAAAABJAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADaAAAAAABXQAAAAACfgAAAAAAXQAAAAAAXQAAAAACfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAACXQAAAAAAXQAAAAADXQAAAAAAXQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAADTgAAAAABXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAXQAAAAACTgAAAAACXQAAAAABfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACaAAAAAADXQAAAAADfgAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAaAAAAAABaAAAAAABaAAAAAADfgAAAAAABwAAAAAABwAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA version: 6 -4,-5: ind: -4,-5 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAACHwAAAAABHwAAAAACHwAAAAADHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAADHwAAAAABHwAAAAADHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAADHwAAAAACHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAJAAAAAADHwAAAAADHwAAAAABHwAAAAADHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -3,-5: ind: -3,-5 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAADHwAAAAABHwAAAAACHwAAAAABfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAHwAAAAACHwAAAAADJAAAAAABfgAAAAAAAAAAAAAAfQAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAACHwAAAAABHwAAAAACHwAAAAACfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAACHwAAAAAAHwAAAAADJAAAAAADfgAAAAAAAAAAAAAAfQAAAAAA version: 6 3,-1: ind: 3,-1 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAXQAAAAAAHwAAAAADHwAAAAABHwAAAAADHwAAAAAAHwAAAAADHwAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAJAAAAAACXQAAAAABXQAAAAADXQAAAAACXQAAAAACfgAAAAAAXQAAAAACHwAAAAADHwAAAAACHwAAAAACHwAAAAADHwAAAAACHwAAAAACfgAAAAAAbgAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAAAXQAAAAACXQAAAAABfgAAAAAAXQAAAAABHwAAAAACHwAAAAABHwAAAAACHwAAAAACHwAAAAABHwAAAAABfgAAAAAAbgAAAAADfgAAAAAAXQAAAAAAXQAAAAACXQAAAAADXQAAAAAAXQAAAAACXQAAAAAAXQAAAAAAHwAAAAADHwAAAAADHwAAAAACHwAAAAACHwAAAAADHwAAAAABfgAAAAAAbgAAAAADfgAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAADfgAAAAAAXQAAAAACJAAAAAADJAAAAAADJAAAAAAAJAAAAAAAJAAAAAABJAAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAJAAAAAADJAAAAAABJAAAAAADJAAAAAAAJAAAAAABfgAAAAAAgQAAAAAAbgAAAAABbgAAAAACbgAAAAACbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAHwAAAAABfgAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABdQAAAAACdQAAAAADdQAAAAABcAAAAAACfgAAAAAAdQAAAAADdQAAAAADfgAAAAAAcAAAAAADcAAAAAACcAAAAAACcAAAAAACcAAAAAADbQAAAAAAfgAAAAAAcAAAAAADcAAAAAADdQAAAAAAcAAAAAABcAAAAAADcAAAAAACdQAAAAADdQAAAAABfgAAAAAAcAAAAAADcAAAAAABcAAAAAAAcAAAAAACcAAAAAACbQAAAAAAfgAAAAAAcAAAAAAAcAAAAAABdQAAAAAAcAAAAAAAcAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAADdQAAAAADdQAAAAADdQAAAAACdQAAAAADdQAAAAACfgAAAAAAcAAAAAACdQAAAAABdQAAAAACdQAAAAACcAAAAAADcAAAAAAAcAAAAAABcAAAAAABcAAAAAABcAAAAAACdQAAAAABdQAAAAADdQAAAAACdQAAAAABdQAAAAAAfgAAAAAAcAAAAAACcAAAAAAAdQAAAAACcAAAAAACcAAAAAACcAAAAAADcAAAAAABcAAAAAAAcAAAAAADcAAAAAADdQAAAAABdQAAAAADdQAAAAACdQAAAAABdQAAAAACfgAAAAAAcAAAAAAAcAAAAAABdQAAAAACcAAAAAAAcAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABdQAAAAADdQAAAAADdQAAAAABcAAAAAAAfgAAAAAAdQAAAAACdQAAAAAAfgAAAAAAggAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAcAAAAAABdQAAAAABdQAAAAACdQAAAAABcAAAAAADcAAAAAABdQAAAAACdQAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAADHwAAAAACHwAAAAAAHwAAAAAAHwAAAAABHwAAAAAAHwAAAAABfgAAAAAAbAAAAAAAfgAAAAAAJAAAAAADXQAAAAACXQAAAAAAXQAAAAADXQAAAAACfgAAAAAAXQAAAAAAHwAAAAACHwAAAAABHwAAAAAAHwAAAAAAHwAAAAACHwAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAXQAAAAACXQAAAAADXQAAAAADXQAAAAABXQAAAAADfgAAAAAAXQAAAAACHwAAAAABHwAAAAADHwAAAAACHwAAAAABHwAAAAACHwAAAAAAfgAAAAAAbgAAAAADfgAAAAAAXQAAAAABXQAAAAABXQAAAAAAXQAAAAABXQAAAAADXQAAAAAAXQAAAAACHwAAAAABHwAAAAAAHwAAAAABHwAAAAACHwAAAAAAHwAAAAACfgAAAAAAbgAAAAAAfgAAAAAAXQAAAAACXQAAAAACXQAAAAADXQAAAAADXQAAAAAAfgAAAAAAXQAAAAADJAAAAAABJAAAAAAAJAAAAAACJAAAAAABJAAAAAABJAAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACJAAAAAABJAAAAAADJAAAAAABJAAAAAADJAAAAAACfgAAAAAAgQAAAAAAbgAAAAAAbgAAAAACbgAAAAACbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAHwAAAAABfgAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAAAdQAAAAAAdQAAAAADdQAAAAADcAAAAAAAfgAAAAAAdQAAAAACdQAAAAAAfgAAAAAAcAAAAAACcAAAAAABcAAAAAACcAAAAAABcAAAAAACbQAAAAAAfgAAAAAAcAAAAAABcAAAAAAAdQAAAAACcAAAAAABcAAAAAAAcAAAAAADdQAAAAACdQAAAAADfgAAAAAAcAAAAAADcAAAAAABcAAAAAADcAAAAAADcAAAAAABbQAAAAAAfgAAAAAAcAAAAAABcAAAAAADdQAAAAAAcAAAAAADcAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABdQAAAAADdQAAAAAAdQAAAAACdQAAAAADdQAAAAADfgAAAAAAcAAAAAADdQAAAAAAdQAAAAADdQAAAAAAcAAAAAACcAAAAAAAdQAAAAAAcAAAAAABcAAAAAACcAAAAAAAdQAAAAADdQAAAAADdQAAAAAAdQAAAAADdQAAAAACfgAAAAAAcAAAAAACcAAAAAACdQAAAAABcAAAAAAAcAAAAAABcAAAAAACdQAAAAACcAAAAAACcAAAAAADcAAAAAADdQAAAAABdQAAAAAAdQAAAAABdQAAAAABdQAAAAADfgAAAAAAcAAAAAACcAAAAAAAdQAAAAADcAAAAAACcAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAcAAAAAABdQAAAAAAdQAAAAAAdQAAAAABcAAAAAABfgAAAAAAdQAAAAABdQAAAAADfgAAAAAAggAAAAACgQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAcAAAAAABdQAAAAABdQAAAAADdQAAAAACcAAAAAAAcAAAAAADdQAAAAADdQAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 4,0: ind: 4,0 - tiles: fgAAAAAAbgAAAAADfgAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAABfgAAAAAAbAAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAABfgAAAAAAgQAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAACfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAAAXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAbgAAAAACfgAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAADfgAAAAAAbAAAAAAAbQAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAABfgAAAAAAgQAAAAAAbQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAbgAAAAABfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAABXQAAAAADfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAACXQAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAAAAADXQAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 4,-1: ind: 4,-1 - tiles: XQAAAAADXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAATgAAAAACXQAAAAADfgAAAAAAaAAAAAADaAAAAAADaAAAAAAAaAAAAAABaAAAAAABfgAAAAAAXQAAAAADbQAAAAAAXQAAAAACXQAAAAACXQAAAAAAfgAAAAAAfgAAAAAATgAAAAADXQAAAAAAfgAAAAAAaAAAAAACaAAAAAADaAAAAAADaAAAAAACaAAAAAACfgAAAAAAXQAAAAACbQAAAAAAXQAAAAABXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAXQAAAAABXQAAAAADXQAAAAABaAAAAAABaAAAAAABaAAAAAAAaAAAAAABaAAAAAACfgAAAAAAbAAAAAAAbAAAAAAAXQAAAAAAXQAAAAABXQAAAAABfgAAAAAAfgAAAAAAXQAAAAACXQAAAAABfgAAAAAAaAAAAAABaAAAAAADaAAAAAACaAAAAAAAaAAAAAACfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAACXQAAAAAAXQAAAAADXQAAAAAAaAAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABbQAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAgQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAgQAAAAAAbgAAAAADbgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAbAAAAAAAbgAAAAACfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: XQAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAACbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAATgAAAAADXQAAAAACfgAAAAAAaAAAAAACaAAAAAABaAAAAAACaAAAAAADaAAAAAADfgAAAAAAXQAAAAACbQAAAAAAXQAAAAABXQAAAAADXQAAAAABfgAAAAAAfgAAAAAATgAAAAADXQAAAAACfgAAAAAAaAAAAAABaAAAAAADaAAAAAAAaAAAAAAAaAAAAAAAfgAAAAAAXQAAAAADbQAAAAAAXQAAAAAAXQAAAAAAXQAAAAACfgAAAAAAfgAAAAAAXQAAAAACXQAAAAAAXQAAAAAAaAAAAAABaAAAAAABaAAAAAADaAAAAAADaAAAAAABfgAAAAAAbAAAAAAAbAAAAAAAXQAAAAAAXQAAAAAAXQAAAAACfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAfgAAAAAAaAAAAAADaAAAAAABaAAAAAACaAAAAAAAaAAAAAADfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAABXQAAAAADXQAAAAAAXQAAAAAAaAAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAbgAAAAADgQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbAAAAAAAbAAAAAAAgQAAAAAAgQAAAAAAbgAAAAACbgAAAAACfgAAAAAAbAAAAAAAbAAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAgQAAAAAAfgAAAAAAbAAAAAAAbgAAAAABfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbgAAAAABgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 4,1: ind: 4,1 @@ -282,27 +282,27 @@ entities: version: 6 4,-2: ind: 4,-2 - tiles: fgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAADHwAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAJAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAACHwAAAAADfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAACJAAAAAAAJAAAAAABJAAAAAABXQAAAAACXQAAAAACXQAAAAABfgAAAAAAXQAAAAABXQAAAAACXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAHwAAAAADHwAAAAADJAAAAAABHwAAAAABXQAAAAACXQAAAAAAXQAAAAABfgAAAAAAXQAAAAACXQAAAAABXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAABXQAAAAADXQAAAAAAXQAAAAADfgAAAAAAfgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAegAAAAADegAAAAADegAAAAABegAAAAABXQAAAAACXQAAAAABXQAAAAAAfgAAAAAAaAAAAAAAXQAAAAAAegAAAAACegAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAegAAAAAAegAAAAAAegAAAAAAegAAAAABXQAAAAAAXQAAAAADJAAAAAAAfgAAAAAAaAAAAAABXQAAAAAAegAAAAABegAAAAADfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAegAAAAADegAAAAAAegAAAAABegAAAAABfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAaAAAAAADXQAAAAABJAAAAAABegAAAAADfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAABXQAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAACegAAAAABegAAAAADfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbgAAAAAAbgAAAAADbgAAAAACbAAAAAAATgAAAAAAXQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATgAAAAADXQAAAAACXQAAAAAAXQAAAAACXQAAAAACXQAAAAADXQAAAAADXQAAAAAAXQAAAAABXQAAAAADbQAAAAAAXQAAAAAAXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAABXQAAAAAAXQAAAAABXQAAAAACXQAAAAAAXQAAAAADXQAAAAADXQAAAAAAbQAAAAAAXQAAAAABXQAAAAACXQAAAAABfgAAAAAAfgAAAAAATgAAAAABXQAAAAAAXQAAAAADXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAAAXQAAAAABXQAAAAADbQAAAAAAXQAAAAACXQAAAAADXQAAAAABfgAAAAAAfgAAAAAA + tiles: fgAAAAAAbgAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAAAHwAAAAACHwAAAAADHwAAAAACbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACHwAAAAADJAAAAAACHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAABHwAAAAACfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAHwAAAAABJAAAAAADJAAAAAADJAAAAAABXQAAAAABXQAAAAACXQAAAAADfgAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAACfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAJAAAAAACHwAAAAAAXQAAAAAAXQAAAAABXQAAAAABfgAAAAAAXQAAAAAAXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAACXQAAAAABXQAAAAAAXQAAAAABfgAAAAAAfgAAAAAAXQAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAADegAAAAACXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAaAAAAAADXQAAAAACegAAAAAAegAAAAADfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAegAAAAADegAAAAAAegAAAAADegAAAAADXQAAAAADXQAAAAADJAAAAAACfgAAAAAAaAAAAAACXQAAAAABegAAAAABegAAAAADfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAegAAAAAAegAAAAACegAAAAACegAAAAADfgAAAAAAXQAAAAACfgAAAAAAfgAAAAAAaAAAAAABXQAAAAAAJAAAAAACegAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAAAXQAAAAADXQAAAAAAXQAAAAAAXQAAAAAAegAAAAACegAAAAABfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbgAAAAADbgAAAAABbgAAAAACbAAAAAAATgAAAAADXQAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAATgAAAAAAXQAAAAACXQAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAADXQAAAAACXQAAAAABXQAAAAACbQAAAAAAXQAAAAABXQAAAAABXQAAAAACfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAABXQAAAAADXQAAAAADXQAAAAACXQAAAAACXQAAAAABXQAAAAADXQAAAAADXQAAAAAAbQAAAAAAXQAAAAAAXQAAAAABXQAAAAAAfgAAAAAAfgAAAAAATgAAAAACXQAAAAABXQAAAAABXQAAAAAAXQAAAAADXQAAAAADXQAAAAADXQAAAAACXQAAAAACXQAAAAACbQAAAAAAXQAAAAABXQAAAAADXQAAAAAAfgAAAAAAfgAAAAAA version: 6 5,-1: ind: 5,-1 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbgAAAAADbgAAAAADfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbgAAAAADbgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAMwAAAAAAMwAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 5,-2: ind: 5,-2 - tiles: bQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAbgAAAAABfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAfgAAAAAAbgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAABegAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAADegAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAMAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAgQAAAAAAgQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAXQAAAAADXQAAAAACXQAAAAAAXQAAAAADXQAAAAADXQAAAAACfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAADaAAAAAAAXQAAAAABXQAAAAAAaAAAAAADaAAAAAADfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbgAAAAACfgAAAAAAJAAAAAADJAAAAAADXQAAAAAAXQAAAAABJAAAAAABJAAAAAADfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbgAAAAACfgAAAAAAJAAAAAACJAAAAAAAXQAAAAABXQAAAAABJAAAAAABJAAAAAABfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAA + tiles: bQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAbgAAAAADfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAbgAAAAACfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAbQAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAACegAAAAACfgAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAegAAAAABegAAAAADfgAAAAAAbQAAAAAAfgAAAAAAMAAAAAAAfgAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAgQAAAAAAgQAAAAAAbQAAAAAAbQAAAAAAfgAAAAAAfgAAAAAAXQAAAAAAXQAAAAADXQAAAAADXQAAAAABXQAAAAADXQAAAAACfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAaAAAAAAAaAAAAAADXQAAAAABXQAAAAABaAAAAAABaAAAAAABfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbgAAAAACfgAAAAAAJAAAAAACJAAAAAAAXQAAAAABXQAAAAADJAAAAAAAJAAAAAABfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbgAAAAABfgAAAAAAJAAAAAADJAAAAAABXQAAAAADXQAAAAABJAAAAAADJAAAAAACfgAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAQgAAAAAAfQAAAAAAfgAAAAAAbgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAA version: 6 4,-3: ind: 4,-3 - tiles: CwAAAAAABwAAAAAABwAAAAAGBwAAAAAABwAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAABwAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbgAAAAACbgAAAAADbgAAAAABbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: CwAAAAAABwAAAAAABwAAAAAABwAAAAAMBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAABwAAAAAABwAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAABwAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAbAAAAAAAbAAAAAAAbQAAAAAAbQAAAAAAbgAAAAACbgAAAAADbgAAAAABbAAAAAAAbAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 1,-4: ind: 1,-4 - tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAfgAAAAAAJAAAAAABJAAAAAADfgAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAHwAAAAADJAAAAAADfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAIfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACHwAAAAAAHwAAAAACHwAAAAAAHwAAAAADHwAAAAACEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAAfwAAAAAAfgAAAAAACwAAAAAAfQAAAAAAfQAAAAAAHwAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAKBwAAAAAABwAAAAAAfwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAJAAAAAABfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAADBwAAAAADAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAACEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAHwAAAAACHwAAAAABHwAAAAADHwAAAAACHwAAAAABHwAAAAACEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAEfwAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAHwAAAAABHwAAAAACEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAfwAAAAAAfgAAAAAACwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAJBwAAAAAAfwAAAAAABwAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAGBwAAAAAABwAAAAAABwAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAACfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAJAAAAAABJAAAAAABfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAfgAAAAAAJAAAAAAAJAAAAAABfgAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAHwAAAAADHwAAAAADfgAAAAAAHwAAAAADJAAAAAABfgAAAAAAfgAAAAAABwAAAAAKBwAAAAAABwAAAAACfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADHwAAAAABHwAAAAAAHwAAAAAAHwAAAAADHwAAAAADEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAAfwAAAAAAfgAAAAAACwAAAAAAfQAAAAAAfQAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAAfwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAJAAAAAACJAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAEBwAAAAAABwAAAAAMBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAHwAAAAABEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAABBwAAAAAJBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAHwAAAAACHwAAAAADHwAAAAADHwAAAAACHwAAAAABHwAAAAACEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAIfwAAAAAAAAAAAAAAEQAAAAAAEQAAAAAAHwAAAAAAHwAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAACBwAAAAAABwAAAAAAfwAAAAAAfgAAAAAACwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAABBwAAAAAAfwAAAAAABwAAAAAAfgAAAAAAfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAEBwAAAAAABwAAAAAABwAAAAADfgAAAAAAfgAAAAAAJAAAAAAAJAAAAAACfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAJAAAAAAAJAAAAAADfgAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 0,-4: ind: 0,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAJAAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAJAAAAAABfgAAAAAAfgAAAAAAJAAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACfgAAAAAAfgAAAAAAJAAAAAAB + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAJAAAAAACfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAJAAAAAACfgAAAAAAfgAAAAAAJAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfgAAAAAAfgAAAAAAEQAAAAAAEQAAAAAAEQAAAAAAfgAAAAAAfgAAAAAAJAAAAAACfgAAAAAAfgAAAAAAJAAAAAAC version: 6 -5,-3: ind: -5,-3 @@ -310,7 +310,7 @@ entities: version: 6 -3,2: ind: -3,2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAABXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAABXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAABXQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAACXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAACXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAACXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAACXQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAXQAAAAADXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,-4: ind: -1,-4 @@ -322,11 +322,11 @@ entities: version: 6 5,-3: ind: 5,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAgwAAAAAAgwAAAAAAQAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAFWwAAAAAAWwAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAgwAAAAAAgwAAAAAAQAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 1,2: ind: 1,2 - tiles: fgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -2,-4: ind: -2,-4 @@ -334,15 +334,15 @@ entities: version: 6 2,-4: ind: 2,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAAfgAAAAAAfwAAAAAABwAAAAAGBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAHBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAHBwAAAAAEBwAAAAACBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAIBwAAAAAABwAAAAAHfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAAfgAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAFBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAACBwAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAACBwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAAfgAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAADfwAAAAAABwAAAAAABwAAAAAIBwAAAAAIBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAABBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAABBwAAAAAABwAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAAfgAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAGBwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAAFAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,-4: ind: 3,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAALBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAKBwAAAAAFBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAKfwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAACfwAAAAAABwAAAAALCwAAAAAACwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAAfgAAAAAAfwAAAAAABwAAAAAABwAAAAAGfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAADBwAAAAAABwAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAfwAAAAAABwAAAAAHBwAAAAAIBwAAAAAABwAAAAADBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAKBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAABwAAAAAIBwAAAAAABwAAAAAJBwAAAAABBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAADBwAAAAAABwAAAAAEBwAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAKBwAAAAAABwAAAAAMBwAAAAAABwAAAAAABwAAAAABBwAAAAAABwAAAAAAfwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAADAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAAfwAAAAAAfgAAAAAACwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAACBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAHBwAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAADBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAACfwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAAAfwAAAAAABwAAAAAACwAAAAAACwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAAfgAAAAAAfwAAAAAABwAAAAAABwAAAAAAfwAAAAAABwAAAAACBwAAAAAHBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAMBwAAAAAJBwAAAAAKBwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAABwAAAAAGBwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAABwAAAAABBwAAAAABBwAAAAAFBwAAAAAMBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAIBwAAAAAABwAAAAAABwAAAAAABwAAAAAEBwAAAAAAfwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAAfwAAAAAAfgAAAAAACwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAACwAAAAAA version: 6 4,-4: ind: 4,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAACBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAAAegAAAAADegAAAAACfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAABfgAAAAAABwAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAACegAAAAAAegAAAAABfgAAAAAABwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAABHwAAAAABfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAADHwAAAAAAfgAAAAAAfgAAAAAABwAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQgAAAAAAQgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAACBwAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAABwAAAAAABwAAAAAGBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAABegAAAAABegAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAACegAAAAACegAAAAAAfgAAAAAABwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAegAAAAADegAAAAACegAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAABHwAAAAAAHwAAAAABfgAAAAAABwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAHwAAAAAAHwAAAAAAfgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAQgAAAAAAQgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 - type: Broadphase - type: Physics @@ -396,10 +396,10 @@ entities: decals: 1891: 69,-28 1892: 70,-28 - 2137: 7.759592,-44.793304 - 2138: 8.236585,-44.781075 - 6190: -44.266167,24.17379 - 6191: -43.71579,24.16156 + 6186: -44.266167,24.17379 + 6187: -43.71579,24.16156 + 6886: 7.80612,-46.838108 + 6887: 8.233204,-46.827694 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' @@ -414,15 +414,15 @@ entities: 1956: 61,-20 1980: 22,-38 1981: 22,-37 - 6188: -45.159,22.681658 - 6189: -45.17123,23.256496 + 6184: -45.159,22.681658 + 6185: -45.17123,23.256496 - node: cleanable: True angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: Arrows decals: - 3005: -25,37 + 3001: -25,37 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' @@ -433,29 +433,29 @@ entities: 1812: 68.96644,-11.160069 1813: 69.96644,-11.15081 1814: 67.97107,-11.15544 - 6186: -43.71579,21.837746 - 6187: -44.32732,21.837746 - 6714: -33,-12 + 6182: -43.71579,21.837746 + 6183: -44.32732,21.837746 + 6708: -33,-12 - node: angle: 4.71238898038469 rad color: '#FFFFFFFF' id: Arrows decals: 1274: 25,12 - 6184: -42.87188,22.669428 - 6185: -42.85965,23.219805 + 6180: -42.87188,22.669428 + 6181: -42.85965,23.219805 - node: color: '#FFFFFFFF' id: Basalt1 decals: 309: 26,-21 - 2255: 26,1 + 2251: 26,1 - node: cleanable: True color: '#FFFFFFFF' id: Basalt1 decals: - 3051: 80.98914,-5.89228 + 3047: 80.98914,-5.89228 - node: color: '#FFFFFFFF' id: Basalt2 @@ -466,7 +466,7 @@ entities: color: '#FFFFFFFF' id: Basalt2 decals: - 3053: 79.36655,-6.805498 + 3049: 79.36655,-6.805498 - node: color: '#FFFFFFFF' id: Basalt3 @@ -478,7 +478,7 @@ entities: color: '#FFFFFFFF' id: Basalt3 decals: - 3050: 80.410225,-6.9767265 + 3046: 80.410225,-6.9767265 - node: color: '#FFFFFFFF' id: Basalt4 @@ -494,7 +494,7 @@ entities: 314: 25,-23 940: -48,-28 1939: 54,-21 - 2256: 25,1 + 2252: 25,1 - node: color: '#FFFFFFFF' id: Basalt6 @@ -513,7 +513,7 @@ entities: color: '#FFFFFFFF' id: Basalt7 decals: - 3052: 80.88314,-7.8817906 + 3048: 80.88314,-7.8817906 - node: color: '#FFFFFFFF' id: Basalt8 @@ -531,31 +531,31 @@ entities: color: '#FFFFFFFF' id: Basalt9 decals: - 3054: 79.17086,-7.824714 + 3050: 79.17086,-7.824714 - node: color: '#D4D4D428' id: Bot decals: - 2210: -36,-58 - 2211: -36,-59 - 2212: -36,-60 - 2213: -36,-61 - 2214: -36,-62 - 2215: -36,-63 - 2216: -36,-64 - 2217: -60,-58 - 2218: -60,-59 - 2219: -60,-60 - 2220: -60,-61 - 2221: -60,-62 - 2222: -60,-63 - 2223: -60,-64 + 2206: -36,-58 + 2207: -36,-59 + 2208: -36,-60 + 2209: -36,-61 + 2210: -36,-62 + 2211: -36,-63 + 2212: -36,-64 + 2213: -60,-58 + 2214: -60,-59 + 2215: -60,-60 + 2216: -60,-61 + 2217: -60,-62 + 2218: -60,-63 + 2219: -60,-64 - node: color: '#DE3A3A41' id: Bot decals: - 6639: -38,-45 - 6640: -38,-45 + 6633: -38,-45 + 6634: -38,-45 - node: color: '#EFB34196' id: Bot @@ -628,8 +628,8 @@ entities: color: '#FFFFFF4A' id: Bot decals: - 6763: 18,-56 - 6764: 19,-56 + 6757: 18,-56 + 6758: 19,-56 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' @@ -639,8 +639,8 @@ entities: 1788: 63,-24 1789: 65,-25 1790: 65,-24 - 2178: -10,-41 - 2179: -10,-40 + 2174: -10,-41 + 2175: -10,-40 - node: color: '#FFFFFFFF' id: Bot @@ -668,8 +668,6 @@ entities: 886: -52,-1 1084: 33,-3 1085: 34,-3 - 1086: 33,-2 - 1087: 34,-2 1111: 39,-28 1112: -26,-32 1113: 49,-22 @@ -742,106 +740,109 @@ entities: 2022: 28,-47 2077: 12,-46 2078: 13,-46 - 2123: -2,-35 - 2124: -1,-35 - 2125: 3,-38 - 2126: 3,-37 - 2146: 9,-46 - 2147: 9,-47 - 2148: 7,-47 - 2149: 7,-46 - 2150: 10,-41 - 2156: 12,-38 - 2175: -6,-34 - 2176: -5,-34 - 2177: -4,-34 - 2227: 41,-10 - 2228: -23,12 - 2844: 66,-23 - 2876: -27,30 - 2889: 57,15 - 3177: 75,-13 - 3178: 75,-15 - 3183: 75,-19 - 3184: 75,-17 - 6422: 48,-10 - 6423: 51,5 - 6424: 53,10 - 6567: -36,-65 - 6568: -60,-65 - 6702: -34,-11 - 6703: -34,-10 - 6704: -32,-11 - 6705: -32,-10 - 6724: 61,-21 - 6731: -24,-42 - 6741: 3,48 - 6761: 62,-7 - 6762: 62,-8 - 6848: 54,-33 - 6857: 22,-59 - 6858: 15,-59 + 2119: -2,-35 + 2120: -1,-35 + 2121: 3,-38 + 2122: 3,-37 + 2146: 10,-41 + 2152: 12,-38 + 2171: -6,-34 + 2172: -5,-34 + 2173: -4,-34 + 2223: 41,-10 + 2224: -23,12 + 2840: 66,-23 + 2872: -27,30 + 2885: 57,15 + 3173: 75,-13 + 3174: 75,-15 + 3179: 75,-19 + 3180: 75,-17 + 6417: 48,-10 + 6418: 51,5 + 6419: 53,10 + 6561: -36,-65 + 6562: -60,-65 + 6696: -34,-11 + 6697: -34,-10 + 6698: -32,-11 + 6699: -32,-10 + 6718: 61,-21 + 6725: -24,-42 + 6735: 3,48 + 6755: 62,-7 + 6756: 62,-8 + 6842: 54,-33 + 6846: 22,-59 + 6847: 15,-59 + 6850: -19,-38 + 6876: 7,-48 + 6877: 7,-49 + 6878: 9,-48 + 6879: 9,-49 + 6888: 7,-45 + 6889: 9,-45 - node: cleanable: True color: '#FFFFFFFF' id: Bot decals: - 2973: -25,34 - 2974: -25,35 - 2975: -30,35 - 2976: -30,34 - 3002: -23,38 - 3003: -10,38 - 3004: -9,38 - 3055: 78,-8 - 3056: 79,-8 + 2969: -25,34 + 2970: -25,35 + 2971: -30,35 + 2972: -30,34 + 2998: -23,38 + 2999: -10,38 + 3000: -9,38 + 3051: 78,-8 + 3052: 79,-8 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' id: Bot decals: - 6585: 91,-19 - 6586: 91,-18 - 6587: 92,-18 - 6588: 92,-19 - 6589: 87,-19 - 6590: 88,-19 - 6591: 88,-18 - 6592: 87,-18 + 6579: 91,-19 + 6580: 91,-18 + 6581: 92,-18 + 6582: 92,-19 + 6583: 87,-19 + 6584: 88,-19 + 6585: 88,-18 + 6586: 87,-18 - node: color: '#52B4E996' id: BotGreyscale decals: - 6327: 55,8 - 6328: 55,8 - 6329: 56,8 - 6330: 56,8 - 6344: 57,1 - 6345: 57,1 - 6346: 56,1 - 6347: 56,1 - 6348: 55,4 - 6349: 55,4 - 6350: 56,4 - 6351: 56,4 - 6352: 57,4 - 6353: 57,4 + 6322: 55,8 + 6323: 55,8 + 6324: 56,8 + 6325: 56,8 + 6339: 57,1 + 6340: 57,1 + 6341: 56,1 + 6342: 56,1 + 6343: 55,4 + 6344: 55,4 + 6345: 56,4 + 6346: 56,4 + 6347: 57,4 + 6348: 57,4 - node: cleanable: True color: '#D4D4D428' id: BotGreyscale decals: - 3025: 76,-28 - 3026: 80,-28 - 3027: 78,-30 - 3028: 78,-26 + 3021: 76,-28 + 3022: 80,-28 + 3023: 78,-30 + 3024: 78,-26 - node: cleanable: True color: '#EFB341FF' id: BotLeft decals: - 6124: 6,-14 - 6126: 6,-14 + 6120: 6,-14 + 6122: 6,-14 - node: color: '#FFFFFFFF' id: BotLeft @@ -851,40 +852,40 @@ entities: 1961: 23,-39 1962: 24,-39 1963: 25,-39 - 2154: 12,-39 - 6547: -3,33 + 2150: 12,-39 + 6541: -3,33 - node: cleanable: True color: '#FFFFFFFF' id: BotLeft + decals: + 6117: 6,-14 + - node: + angle: -6.283185307179586 rad + color: '#EFB34196' + id: BotLeftGreyscale + decals: + 6621: -1,-20 + 6622: -1,-21 + - node: + cleanable: True + color: '#EFB341FF' + id: BotLeftGreyscale decals: 6121: 6,-14 - - node: - angle: -6.283185307179586 rad - color: '#EFB34196' - id: BotLeftGreyscale - decals: - 6627: -1,-20 - 6628: -1,-21 - - node: - cleanable: True - color: '#EFB341FF' - id: BotLeftGreyscale - decals: - 6125: 6,-14 - node: angle: -6.283185307179586 rad color: '#EFB34196' id: BotRight decals: - 6629: -2,-21 - 6630: -2,-20 + 6623: -2,-21 + 6624: -2,-20 - node: cleanable: True color: '#EFB341FF' id: BotRight decals: - 6127: 6,-15 + 6123: 6,-15 - node: color: '#FFFFFFFF' id: BotRight @@ -894,20 +895,20 @@ entities: 1964: 23,-36 1965: 24,-36 1966: 25,-36 - 2155: 12,-40 - 6548: -3,34 + 2151: 12,-40 + 6542: -3,34 - node: cleanable: True color: '#FFFFFFFF' id: BotRight decals: - 6122: 6,-15 + 6118: 6,-15 - node: cleanable: True color: '#EFB341FF' id: BotRightGreyscale decals: - 6123: 6,-15 + 6119: 6,-15 - node: color: '#FFFFFFFF' id: Box @@ -918,7 +919,7 @@ entities: 1119: -56,-24 1994: 19,-37 1995: 19,-36 - 6612: 92,-20 + 6606: 92,-20 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNe @@ -927,7 +928,8 @@ entities: 1067: 28,-29 1432: 58,-34 1884: 69,-29 - 2103: 22,-53 + 2101: 22,-53 + 6875: 9,-48 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNw @@ -937,7 +939,8 @@ entities: 1065: 24,-29 1429: 56,-34 1883: 70,-29 - 2106: 15,-53 + 2104: 15,-53 + 6874: 7,-48 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerSe @@ -948,7 +951,8 @@ entities: 1430: 58,-36 1886: 69,-30 2079: 17,-53 - 2105: 22,-60 + 2103: 22,-60 + 6873: 9,-49 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerSw @@ -959,7 +963,8 @@ entities: 1431: 56,-36 1885: 70,-30 2080: 20,-53 - 2104: 15,-60 + 2102: 15,-60 + 6872: 7,-49 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerNe @@ -971,10 +976,10 @@ entities: 1808: 70,-11 1863: 74,-17 1866: 74,-14 - 2097: 15,-60 - 2102: 22,-53 - 2109: 21,-53 - 2110: 22,-54 + 2095: 15,-60 + 2100: 22,-53 + 2107: 21,-53 + 2108: 22,-54 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerNw @@ -985,10 +990,10 @@ entities: 1153: -1,21 1423: 58,-36 1807: 68,-11 - 2098: 22,-60 - 2101: 15,-53 - 2107: 16,-53 - 2108: 15,-54 + 2096: 22,-60 + 2099: 15,-53 + 2105: 16,-53 + 2106: 15,-54 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerSe @@ -998,9 +1003,9 @@ entities: 1422: 56,-34 1864: 74,-15 1865: 74,-19 - 2096: 15,-53 - 2099: 22,-60 - 2112: 21,-60 + 2094: 15,-53 + 2097: 22,-60 + 2109: 21,-60 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerSw @@ -1008,9 +1013,9 @@ entities: 45: -12,-14 478: -25,-1 1421: 58,-34 - 2095: 22,-53 - 2100: 15,-60 - 2114: 16,-60 + 2093: 22,-53 + 2098: 15,-60 + 2110: 16,-60 - node: color: '#FFFFFFFF' id: BrickTileDarkLineE @@ -1107,15 +1112,13 @@ entities: 2003: 27,-44 2004: 27,-43 2005: 27,-42 - 2091: 15,-58 - 2092: 15,-57 - 2093: 15,-55 - 2094: 15,-54 - 2119: 16,-60 - 2139: 9,-47 - 2140: 9,-46 - 6425: 53,12 - 6426: 53,11 + 2089: 15,-58 + 2090: 15,-57 + 2091: 15,-55 + 2092: 15,-54 + 2115: 16,-60 + 6420: 53,12 + 6421: 53,11 - node: color: '#FFFFFFFF' id: BrickTileDarkLineN @@ -1204,20 +1207,22 @@ entities: 2015: 29,-43 2083: 16,-60 2084: 21,-60 - 2115: 15,-57 - 2116: 22,-57 - 2131: 7,-46 - 2132: 9,-46 - 2133: 8,-46 - 6111: -14,-23 - 6112: -15,-23 - 6113: -16,-23 - 6600: 87,-20 - 6601: 88,-20 - 6602: 89,-20 - 6603: 90,-20 - 6604: 91,-20 - 6605: 92,-20 + 2111: 15,-57 + 2112: 22,-57 + 6107: -14,-23 + 6108: -15,-23 + 6109: -16,-23 + 6594: 87,-20 + 6595: 88,-20 + 6596: 89,-20 + 6597: 90,-20 + 6598: 91,-20 + 6599: 92,-20 + 6861: 33,-2 + 6862: 34,-2 + 6869: 7,-48 + 6870: 8,-48 + 6871: 9,-48 - node: color: '#FFFFFFFF' id: BrickTileDarkLineS @@ -1296,47 +1301,47 @@ entities: 2017: 29,-46 2081: 16,-53 2082: 21,-53 - 2117: 22,-55 - 2118: 15,-55 - 2143: 8,-47 - 2144: 7,-47 - 2145: 9,-47 - 2161: 10,-40 - 2162: 11,-40 - 2226: -42,-54 - 6108: -14,-25 - 6109: -15,-25 - 6110: -16,-25 - 6193: -3,43 - 6194: -2,43 - 6195: -1,43 - 6226: 45,14 - 6227: 47,14 - 6228: 46,14 - 6399: 49,-11 - 6400: 52,-11 - 6564: -29,-17 - 6606: 87,-21 - 6607: 89,-21 - 6608: 88,-21 - 6609: 90,-21 - 6610: 91,-21 - 6611: 92,-21 + 2113: 22,-55 + 2114: 15,-55 + 2157: 10,-40 + 2158: 11,-40 + 2222: -42,-54 + 6104: -14,-25 + 6105: -15,-25 + 6106: -16,-25 + 6189: -3,43 + 6190: -2,43 + 6191: -1,43 + 6222: 45,14 + 6223: 47,14 + 6224: 46,14 + 6394: 49,-11 + 6395: 52,-11 + 6558: -29,-17 + 6600: 87,-21 + 6601: 89,-21 + 6602: 88,-21 + 6603: 90,-21 + 6604: 91,-21 + 6605: 92,-21 + 6866: 7,-49 + 6867: 8,-49 + 6868: 9,-49 - node: cleanable: True color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 2977: -30,36 - 2978: -29,36 - 2979: -28,36 - 2980: -27,36 - 2981: -26,36 - 3001: -30,36 - 3021: 76,-25 - 3022: 77,-25 - 3023: 78,-25 - 3024: 79,-25 + 2973: -30,36 + 2974: -29,36 + 2975: -28,36 + 2976: -27,36 + 2977: -26,36 + 2997: -30,36 + 3017: 76,-25 + 3018: 77,-25 + 3019: 78,-25 + 3020: 79,-25 - node: color: '#FFFFFFFF' id: BrickTileDarkLineW @@ -1424,13 +1429,11 @@ entities: 1426: 56,-35 1881: 70,-30 1882: 70,-29 - 2086: 22,-58 - 2087: 22,-57 - 2088: 22,-55 - 2089: 22,-54 - 2120: 21,-60 - 2141: 7,-47 - 2142: 7,-46 + 2085: 22,-58 + 2086: 22,-57 + 2087: 22,-55 + 2088: 22,-54 + 2116: 21,-60 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerNe @@ -1443,14 +1446,14 @@ entities: decals: 703: -39,-34 1950: 57,-21 - 6709: -33,-12 + 6703: -33,-12 - node: color: '#FFFFFFFF' id: BrickTileSteelInnerNw decals: 702: -30,-34 1949: 54,-21 - 6708: -33,-12 + 6702: -33,-12 - node: color: '#FFFFFFFF' id: BrickTileSteelInnerSe @@ -1530,20 +1533,20 @@ entities: 1165: -11,28 1877: 69,-28 1878: 70,-28 - 2121: 0,-37 - 2122: 1,-37 - 2127: 2,-37 - 2873: -27,27 - 2874: -26,27 - 2875: -25,27 - 6706: -34,-12 - 6707: -32,-12 + 2117: 0,-37 + 2118: 1,-37 + 2123: 2,-37 + 2869: -27,27 + 2870: -26,27 + 2871: -25,27 + 6700: -34,-12 + 6701: -32,-12 - node: cleanable: True color: '#FFFFFF35' id: BrickTileSteelLineS decals: - 6129: 83,-35 + 6125: 83,-35 - node: color: '#FFFFFFFF' id: BrickTileSteelLineS @@ -1574,17 +1577,17 @@ entities: 1414: 42,5 1415: 43,5 1478: 41,5 - 3060: 51,22 - 3061: 50,22 - 3062: 52,22 - 6562: -34,-17 - 6563: -33,-17 + 3056: 51,22 + 3057: 50,22 + 3058: 52,22 + 6556: -34,-17 + 6557: -33,-17 - node: cleanable: True color: '#FFFFFF35' id: BrickTileSteelLineW decals: - 6128: 81,-34 + 6124: 81,-34 - node: color: '#FFFFFFFF' id: BrickTileSteelLineW @@ -1632,18 +1635,18 @@ entities: color: '#DE3A3A96' id: BrickTileWhiteCornerNe decals: - 6696: 52,-26 + 6690: 52,-26 - node: color: '#EFB34196' id: BrickTileWhiteCornerNe decals: - 2850: -4,14 + 2846: -4,14 - node: cleanable: True color: '#EFB34196' id: BrickTileWhiteCornerNe decals: - 2986: -25,38 + 2982: -25,38 - node: color: '#A4610696' id: BrickTileWhiteCornerNw @@ -1660,19 +1663,19 @@ entities: color: '#DE3A3A96' id: BrickTileWhiteCornerNw decals: - 6695: 51,-26 + 6689: 51,-26 - node: color: '#EFB34196' id: BrickTileWhiteCornerNw decals: - 2206: -54,9 - 2849: -2,14 + 2202: -54,9 + 2845: -2,14 - node: cleanable: True color: '#EFB34196' id: BrickTileWhiteCornerNw decals: - 2985: -30,38 + 2981: -30,38 - node: color: '#A4610696' id: BrickTileWhiteCornerSe @@ -1691,7 +1694,7 @@ entities: color: '#DE3A3A96' id: BrickTileWhiteCornerSe decals: - 6694: 52,-27 + 6688: 52,-27 - node: color: '#A4610696' id: BrickTileWhiteCornerSw @@ -1707,12 +1710,12 @@ entities: color: '#DE3A3A96' id: BrickTileWhiteCornerSw decals: - 6697: 51,-27 + 6691: 51,-27 - node: color: '#EFB34196' id: BrickTileWhiteEndE decals: - 2872: 63,9 + 2868: 63,9 - node: color: '#334E6DC8' id: BrickTileWhiteInnerNe @@ -1726,8 +1729,8 @@ entities: decals: 1480: 41,5 1758: 57,-7 - 6373: 48,-1 - 6390: 49,-7 + 6368: 48,-1 + 6385: 49,-7 - node: color: '#A4610696' id: BrickTileWhiteInnerNe @@ -1753,8 +1756,8 @@ entities: id: BrickTileWhiteInnerNw decals: 1479: 45,5 - 6372: 52,-1 - 6389: 51,-7 + 6367: 52,-1 + 6384: 51,-7 - node: color: '#EFB34196' id: BrickTileWhiteInnerNw @@ -1770,9 +1773,9 @@ entities: id: BrickTileWhiteInnerSe decals: 1482: 45,4 - 6371: 48,-8 - 6388: 49,-2 - 6392: 50,-8 + 6366: 48,-8 + 6383: 49,-2 + 6387: 50,-8 - node: color: '#A4610696' id: BrickTileWhiteInnerSe @@ -1797,9 +1800,9 @@ entities: color: '#52B4E996' id: BrickTileWhiteInnerSw decals: - 6370: 52,-8 - 6387: 51,-2 - 6391: 50,-8 + 6365: 52,-8 + 6382: 51,-2 + 6386: 50,-8 - node: color: '#A4610696' id: BrickTileWhiteInnerSw @@ -1830,9 +1833,9 @@ entities: color: '#52B4E93E' id: BrickTileWhiteLineE decals: - 6852: 51,6 - 6853: 51,6 - 6854: 51,6 + 6843: 51,6 + 6844: 51,6 + 6845: 51,6 - node: color: '#52B4E996' id: BrickTileWhiteLineE @@ -1840,42 +1843,42 @@ entities: 1755: 57,-6 1756: 57,-5 1757: 57,-4 - 6275: 42,9 - 6276: 42,7 - 6282: 47,9 - 6283: 47,8 - 6284: 47,7 - 6300: 51,1 - 6301: 51,2 - 6302: 51,3 - 6303: 51,4 - 6305: 51,7 - 6306: 51,8 - 6307: 51,9 - 6308: 51,10 - 6309: 51,11 - 6310: 51,12 - 6311: 51,13 - 6312: 51,14 - 6313: 51,15 - 6318: 56,10 - 6319: 56,11 - 6320: 56,12 - 6324: 56,6 - 6325: 56,7 - 6326: 56,8 - 6362: 52,-1 - 6363: 52,-2 - 6364: 52,-3 - 6365: 52,-4 - 6366: 52,-5 - 6367: 52,-6 - 6368: 52,-7 - 6369: 52,-8 - 6383: 49,-6 - 6384: 49,-5 - 6385: 49,-4 - 6386: 49,-3 + 6271: 42,9 + 6272: 42,7 + 6278: 47,9 + 6279: 47,8 + 6280: 47,7 + 6296: 51,1 + 6297: 51,2 + 6298: 51,3 + 6299: 51,4 + 6300: 51,7 + 6301: 51,8 + 6302: 51,9 + 6303: 51,10 + 6304: 51,11 + 6305: 51,12 + 6306: 51,13 + 6307: 51,14 + 6308: 51,15 + 6313: 56,10 + 6314: 56,11 + 6315: 56,12 + 6319: 56,6 + 6320: 56,7 + 6321: 56,8 + 6357: 52,-1 + 6358: 52,-2 + 6359: 52,-3 + 6360: 52,-4 + 6361: 52,-5 + 6362: 52,-6 + 6363: 52,-7 + 6364: 52,-8 + 6378: 49,-6 + 6379: 49,-5 + 6380: 49,-4 + 6381: 49,-3 - node: color: '#9FED5896' id: BrickTileWhiteLineE @@ -1935,9 +1938,9 @@ entities: 1137: -1,24 1144: -1,25 1325: -18,28 - 6631: -37,-44 - 6632: -37,-45 - 6645: -37,-46 + 6625: -37,-44 + 6626: -37,-45 + 6639: -37,-46 - node: color: '#EFB34196' id: BrickTileWhiteLineE @@ -1948,20 +1951,20 @@ entities: 1459: 41,12 1469: 47,13 1470: 47,11 - 2183: -4,-37 - 2184: -4,-35 - 2887: -39,-38 + 2179: -4,-37 + 2180: -4,-35 + 2883: -39,-38 - node: cleanable: True color: '#EFB34196' id: BrickTileWhiteLineE decals: - 2984: -25,37 - 2991: -32,38 - 2992: -32,37 - 2993: -32,36 - 2994: -32,35 - 2995: -32,34 + 2980: -25,37 + 2987: -32,38 + 2988: -32,37 + 2989: -32,36 + 2990: -32,35 + 2991: -32,34 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineE @@ -2006,16 +2009,16 @@ entities: 1752: 59,-7 1753: 60,-7 1754: 61,-7 - 6335: 53,3 - 6336: 54,3 - 6337: 55,3 - 6338: 57,3 - 6374: 51,-1 - 6375: 50,-1 - 6376: 49,-1 - 6396: 49,-10 - 6397: 50,-10 - 6398: 51,-10 + 6330: 53,3 + 6331: 54,3 + 6332: 55,3 + 6333: 57,3 + 6369: 51,-1 + 6370: 50,-1 + 6371: 49,-1 + 6391: 49,-10 + 6392: 50,-10 + 6393: 51,-10 - node: color: '#79150096' id: BrickTileWhiteLineN @@ -2053,8 +2056,8 @@ entities: 1845: 75,-13 1846: 77,-17 1847: 75,-17 - 3179: 76,-13 - 3182: 76,-17 + 3175: 76,-13 + 3178: 76,-17 - node: color: '#D4D4D496' id: BrickTileWhiteLineN @@ -2088,28 +2091,28 @@ entities: 1453: 43,11 1454: 46,11 1455: 45,11 - 2180: 0,-35 - 2181: 1,-35 - 2207: -53,9 - 2885: -62,-21 - 2886: -61,-21 + 2176: 0,-35 + 2177: 1,-35 + 2203: -53,9 + 2881: -62,-21 + 2882: -61,-21 - node: cleanable: True color: '#EFB34196' id: BrickTileWhiteLineN decals: - 2987: -29,38 - 2988: -28,38 - 2989: -27,38 - 2990: -26,38 + 2983: -29,38 + 2984: -28,38 + 2985: -27,38 + 2986: -26,38 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineN decals: - 2237: 13,25 - 2238: 14,25 - 2239: 15,25 - 6174: 14,22 + 2233: 13,25 + 2234: 14,25 + 2235: 15,25 + 6170: 14,22 - node: color: '#334E6DC8' id: BrickTileWhiteLineS @@ -2123,8 +2126,8 @@ entities: 1975: 19,-39 1976: 20,-39 1977: 21,-39 - 6675: 52,-37 - 6676: 51,-37 + 6669: 52,-37 + 6670: 51,-37 - node: color: '#474F52A7' id: BrickTileWhiteLineS @@ -2146,17 +2149,17 @@ entities: 1720: 60,0 1721: 59,0 2012: 24,-46 - 6339: 57,2 - 6340: 56,2 - 6341: 55,2 - 6342: 54,2 - 6343: 53,2 - 6377: 49,-8 - 6378: 51,-8 - 6393: 48,-11 - 6394: 51,-11 - 6395: 53,-11 - 6401: 50,-11 + 6334: 57,2 + 6335: 56,2 + 6336: 55,2 + 6337: 54,2 + 6338: 53,2 + 6372: 49,-8 + 6373: 51,-8 + 6388: 48,-11 + 6389: 51,-11 + 6390: 53,-11 + 6396: 50,-11 - node: color: '#79150096' id: BrickTileWhiteLineS @@ -2207,8 +2210,8 @@ entities: 1850: 75,-15 1851: 77,-15 2013: 25,-43 - 3180: 76,-15 - 3181: 76,-19 + 3176: 76,-15 + 3177: 76,-19 - node: color: '#DE3A3A96' id: BrickTileWhiteLineS @@ -2242,11 +2245,11 @@ entities: 1457: 45,13 1458: 46,13 2011: 25,-46 - 2153: 9,-41 - 2861: 61,-31 - 2862: 62,-31 - 2863: 63,-31 - 6202: 42,13 + 2149: 9,-41 + 2857: 61,-31 + 2858: 62,-31 + 2859: 63,-31 + 6198: 42,13 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineS @@ -2269,41 +2272,41 @@ entities: color: '#52B4E996' id: BrickTileWhiteLineW decals: - 6277: 46,7 - 6278: 46,9 - 6279: 41,9 - 6280: 41,8 - 6281: 41,7 - 6285: 49,1 - 6286: 49,2 - 6287: 49,3 - 6288: 49,4 - 6289: 49,5 - 6290: 49,6 - 6291: 49,7 - 6292: 49,8 - 6293: 49,9 - 6294: 49,10 - 6295: 49,11 - 6296: 49,12 - 6297: 49,13 - 6298: 49,14 - 6299: 49,15 - 6321: 53,6 - 6322: 53,7 - 6323: 53,8 - 6354: 48,-8 - 6355: 48,-7 - 6356: 48,-6 - 6357: 48,-5 - 6358: 48,-4 - 6359: 48,-3 - 6360: 48,-2 - 6361: 48,-1 - 6379: 51,-6 - 6380: 51,-5 - 6381: 51,-4 - 6382: 51,-3 + 6273: 46,7 + 6274: 46,9 + 6275: 41,9 + 6276: 41,8 + 6277: 41,7 + 6281: 49,1 + 6282: 49,2 + 6283: 49,3 + 6284: 49,4 + 6285: 49,5 + 6286: 49,6 + 6287: 49,7 + 6288: 49,8 + 6289: 49,9 + 6290: 49,10 + 6291: 49,11 + 6292: 49,12 + 6293: 49,13 + 6294: 49,14 + 6295: 49,15 + 6316: 53,6 + 6317: 53,7 + 6318: 53,8 + 6349: 48,-8 + 6350: 48,-7 + 6351: 48,-6 + 6352: 48,-5 + 6353: 48,-4 + 6354: 48,-3 + 6355: 48,-2 + 6356: 48,-1 + 6374: 51,-6 + 6375: 51,-5 + 6376: 51,-4 + 6377: 51,-3 - node: color: '#9FED5896' id: BrickTileWhiteLineW @@ -2366,10 +2369,10 @@ entities: color: '#EFB34131' id: BrickTileWhiteLineW decals: - 6822: 14,39 - 6823: 14,40 - 6824: 14,41 - 6825: 14,42 + 6816: 14,39 + 6817: 14,40 + 6818: 14,41 + 6819: 14,42 - node: color: '#EFB34196' id: BrickTileWhiteLineW @@ -2386,29 +2389,29 @@ entities: 1471: 41,11 1472: 41,12 1473: 41,13 - 2151: 8,-40 - 2152: 8,-39 - 2182: -2,-36 - 2185: -6,-37 - 2186: -6,-36 - 2187: -6,-35 - 2196: 39,-15 - 2197: 39,-17 - 2198: 39,-16 - 2879: -22,34 - 2880: -22,35 + 2147: 8,-40 + 2148: 8,-39 + 2178: -2,-36 + 2181: -6,-37 + 2182: -6,-36 + 2183: -6,-35 + 2192: 39,-15 + 2193: 39,-17 + 2194: 39,-16 + 2875: -22,34 + 2876: -22,35 - node: cleanable: True color: '#EFB34196' id: BrickTileWhiteLineW decals: - 2982: -30,36 - 2983: -30,37 - 2996: -34,34 - 2997: -34,35 - 2998: -34,36 - 2999: -34,37 - 3000: -34,38 + 2978: -30,36 + 2979: -30,37 + 2992: -34,34 + 2993: -34,35 + 2994: -34,36 + 2995: -34,37 + 2996: -34,38 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineW @@ -2446,7 +2449,7 @@ entities: 866: -48,-2 1107: 42,-30 1485: -49,-49 - 2251: 24,1 + 2247: 24,1 - node: color: '#FFFFFFFF' id: BushCTwo @@ -2461,7 +2464,7 @@ entities: color: '#FFFFFFFF' id: BushCTwo decals: - 3031: 81,-8 + 3027: 81,-8 - node: color: '#FFFFFFFF' id: BushDTwo @@ -2480,7 +2483,7 @@ entities: color: '#FFFFFFFF' id: Busha1 decals: - 3032: 82,-6 + 3028: 82,-6 - node: color: '#FFFFFFFF' id: Busha2 @@ -2509,7 +2512,7 @@ entities: color: '#FFFFFFFF' id: Bushb1 decals: - 3029: 81,-7 + 3025: 81,-7 - node: color: '#FFFFFFFF' id: Bushb2 @@ -2540,21 +2543,21 @@ entities: color: '#FFFFFFFF' id: Bushc1 decals: - 3030: 82,-7 + 3026: 82,-7 - node: color: '#FFFFFFFF' id: Bushc2 decals: 528: -28,6 1487: -47,-49 - 2253: 25,1 + 2249: 25,1 - node: color: '#FFFFFFFF' id: Bushc3 decals: 35: -5,-12 1484: -51,-49 - 2252: 26,1 + 2248: 26,1 - node: color: '#FFFFFFFF' id: Bushd2 @@ -2591,7 +2594,7 @@ entities: color: '#FFFFFFFF' id: Bushi1 decals: - 3035: 80,-7 + 3031: 80,-7 - node: color: '#FFFFFFFF' id: Bushi2 @@ -2602,7 +2605,7 @@ entities: 914: -51,-9 1935: 54,-22 1954: 53.45864,-23.10261 - 2254: 24,1 + 2250: 24,1 - node: color: '#FFFFFFFF' id: Bushi3 @@ -2615,7 +2618,7 @@ entities: color: '#FFFFFFFF' id: Bushi3 decals: - 3033: 82,-8 + 3029: 82,-8 - node: color: '#FFFFFFFF' id: Bushi4 @@ -2632,7 +2635,7 @@ entities: color: '#FFFFFFFF' id: Bushi4 decals: - 3034: 81,-6 + 3030: 81,-6 - node: color: '#FFFFFFFF' id: Bushj3 @@ -2672,8 +2675,8 @@ entities: 1466: 44,12 1467: 45,12 1468: 46,12 - 6205: 46,15 - 6206: 46,14 + 6201: 46,15 + 6202: 46,14 - node: color: '#334E6DC8' id: CheckerNWSE @@ -2686,14 +2689,14 @@ entities: color: '#474F528F' id: CheckerNWSE decals: - 2229: -17,11 - 2230: -16,11 - 2231: -16,12 - 2232: -17,12 - 2233: -17,13 - 2234: -16,13 - 2235: -16,14 - 2236: -17,14 + 2225: -17,11 + 2226: -16,11 + 2227: -16,12 + 2228: -17,12 + 2229: -17,13 + 2230: -16,13 + 2231: -16,14 + 2232: -17,14 - node: color: '#52B4E996' id: CheckerNWSE @@ -2713,21 +2716,21 @@ entities: color: '#DE3A3A41' id: CheckerNWSE decals: - 6633: -36,-46 - 6634: -36,-45 - 6635: -36,-44 - 6636: -35,-44 - 6637: -35,-45 - 6638: -35,-46 + 6627: -36,-46 + 6628: -36,-45 + 6629: -36,-44 + 6630: -35,-44 + 6631: -35,-45 + 6632: -35,-46 - node: color: '#EFB34131' id: CheckerNWSE decals: - 6773: 13,40 - 6774: 13,39 - 6775: 13,41 - 6776: 13,42 - 6821: 15,40 + 6767: 13,40 + 6768: 13,39 + 6769: 13,41 + 6770: 13,42 + 6815: 15,40 - node: color: '#EFB34196' id: CheckerNWSE @@ -2738,65 +2741,65 @@ entities: 149: -2,-27 150: -3,-27 151: -3,-28 - 2191: 37,-15 - 2192: 37,-16 - 2193: 37,-17 - 2194: 38,-16 - 2195: 38,-15 - 2199: 38,-17 - 2200: 38,6 - 2201: 38,7 - 2202: -54,10 - 2203: -53,10 - 2204: -55,10 - 2205: -55,9 - 2845: -4,15 - 2846: -3,15 - 2847: -2,15 - 2848: -3,14 - 2851: -38,-54 - 2852: -38,-53 - 2853: -37,-53 - 2854: -37,-54 - 2855: 61,-32 - 2856: 62,-32 - 2857: 63,-32 - 2858: 63,-33 - 2859: 62,-33 - 2860: 61,-33 - 2864: 63,10 - 2865: 64,10 - 2866: 65,10 - 2867: 65,9 - 2868: 65,8 - 2869: 64,8 - 2870: 63,8 - 2871: 64,9 - 2877: -23,34 - 2878: -23,35 - 2881: 14,-39 - 2882: 15,-39 - 2883: -61,-20 - 2884: -62,-20 - 2888: -38,-38 - 6686: 51,-30 - 6687: 51,-29 - 6688: 52,-29 - 6689: 52,-30 + 2187: 37,-15 + 2188: 37,-16 + 2189: 37,-17 + 2190: 38,-16 + 2191: 38,-15 + 2195: 38,-17 + 2196: 38,6 + 2197: 38,7 + 2198: -54,10 + 2199: -53,10 + 2200: -55,10 + 2201: -55,9 + 2841: -4,15 + 2842: -3,15 + 2843: -2,15 + 2844: -3,14 + 2847: -38,-54 + 2848: -38,-53 + 2849: -37,-53 + 2850: -37,-54 + 2851: 61,-32 + 2852: 62,-32 + 2853: 63,-32 + 2854: 63,-33 + 2855: 62,-33 + 2856: 61,-33 + 2860: 63,10 + 2861: 64,10 + 2862: 65,10 + 2863: 65,9 + 2864: 65,8 + 2865: 64,8 + 2866: 63,8 + 2867: 64,9 + 2873: -23,34 + 2874: -23,35 + 2877: 14,-39 + 2878: 15,-39 + 2879: -61,-20 + 2880: -62,-20 + 2884: -38,-38 + 6680: 51,-30 + 6681: 51,-29 + 6682: 52,-29 + 6683: 52,-30 - node: color: '#D4D4D496' id: Delivery decals: - 6569: 0,30 - 6570: 0,31 + 6563: 0,30 + 6564: 0,31 - node: color: '#DE3A3A41' id: Delivery decals: - 6641: -38,-46 - 6642: -38,-46 - 6643: -38,-44 - 6644: -38,-44 + 6635: -38,-46 + 6636: -38,-46 + 6637: -38,-44 + 6638: -38,-44 - node: color: '#DE3A3A96' id: Delivery @@ -2811,17 +2814,17 @@ entities: color: '#EFB34131' id: Delivery decals: - 6817: 15,41 - 6818: 15,41 - 6819: 15,41 - 6820: 15,41 + 6811: 15,41 + 6812: 15,41 + 6813: 15,41 + 6814: 15,41 - node: color: '#EFB34196' id: Delivery decals: 60: -7,-20 - 6217: 47,16 - 6218: 47,16 + 6213: 47,16 + 6214: 47,16 - node: color: '#EFB341FF' id: Delivery @@ -2878,136 +2881,136 @@ entities: 1993: 26,-38 1996: 31,-37 1997: 31,-38 - 2163: 8,-41 - 3073: 3,20 - 3074: -9,19 - 3075: -9,20 - 3076: -9,21 - 3077: -17,21 - 3078: -17,20 - 3079: -17,19 - 3080: 3,21 - 3081: 3,19 - 3082: 17,19 - 3083: 17,20 - 3084: 17,21 - 3085: 19,17 - 3086: 21,17 - 3087: 20,17 - 3088: 21,6 - 3089: 20,6 - 3090: 19,6 - 3091: 29,2 - 3092: 29,4 - 3093: 29,3 - 3094: 39,2 - 3095: 39,3 - 3096: 39,4 - 3097: 43,0 - 3098: 42,0 - 3099: 41,0 - 3100: 43,-14 - 3101: 42,-14 - 3102: 41,-14 - 3103: 46,-21 - 3104: 46,-19 - 3105: 46,-20 - 3106: 38,-19 - 3107: 38,-21 - 3108: 38,-20 - 3109: 30,-21 - 3110: 30,-20 - 3111: 30,-19 - 3112: 30,-20 - 3113: 21,-28 - 3114: 20,-28 - 3115: 19,-28 - 3116: 18,-32 - 3117: 18,-33 - 3118: 18,-34 - 3119: 10,-34 - 3120: 10,-33 - 3121: 10,-32 - 3122: 4,-32 - 3123: 4,-31 - 3124: 4,-30 - 3125: -9,-32 - 3126: -9,-31 - 3127: -9,-30 - 3128: -20,-32 - 3129: -20,-30 - 3130: -20,-31 - 3131: -24,-22 - 3132: -25,-22 - 3133: -26,-22 - 3134: -42,-29 - 3135: -42,-28 - 3136: -27,-29 - 3137: -27,-28 - 3138: -26,-12 - 3139: -25,-12 - 3140: -24,-12 - 3141: -23,-6 - 3142: -24,-6 - 3143: -25,-6 - 3144: -25,10 - 3145: -26,10 - 3146: -27,10 - 3147: -42,0 - 3148: -42,1 - 3149: -42,2 - 3150: -53,-5 - 3151: -54,-5 - 3152: -55,-5 - 3153: -55,-19 - 3154: -54,-19 - 3155: -53,-19 - 3156: -49,-34 - 3157: -47,-34 - 3158: -48,-34 - 3159: -47,-45 - 3160: -48,-45 - 3161: -49,-45 - 3162: -41,-49 - 3163: -42,-49 - 3164: -40,-49 - 3165: -54,-49 - 3166: -55,-49 - 3167: -56,-49 - 3168: -56,-55 - 3169: -55,-55 - 3170: -54,-55 - 3171: -42,-55 - 3172: -41,-55 - 3173: -40,-55 - 6571: 60,-24 - 6572: 60,-23 - 6671: 32,21 + 2159: 8,-41 + 3069: 3,20 + 3070: -9,19 + 3071: -9,20 + 3072: -9,21 + 3073: -17,21 + 3074: -17,20 + 3075: -17,19 + 3076: 3,21 + 3077: 3,19 + 3078: 17,19 + 3079: 17,20 + 3080: 17,21 + 3081: 19,17 + 3082: 21,17 + 3083: 20,17 + 3084: 21,6 + 3085: 20,6 + 3086: 19,6 + 3087: 29,2 + 3088: 29,4 + 3089: 29,3 + 3090: 39,2 + 3091: 39,3 + 3092: 39,4 + 3093: 43,0 + 3094: 42,0 + 3095: 41,0 + 3096: 43,-14 + 3097: 42,-14 + 3098: 41,-14 + 3099: 46,-21 + 3100: 46,-19 + 3101: 46,-20 + 3102: 38,-19 + 3103: 38,-21 + 3104: 38,-20 + 3105: 30,-21 + 3106: 30,-20 + 3107: 30,-19 + 3108: 30,-20 + 3109: 21,-28 + 3110: 20,-28 + 3111: 19,-28 + 3112: 18,-32 + 3113: 18,-33 + 3114: 18,-34 + 3115: 10,-34 + 3116: 10,-33 + 3117: 10,-32 + 3118: 4,-32 + 3119: 4,-31 + 3120: 4,-30 + 3121: -9,-32 + 3122: -9,-31 + 3123: -9,-30 + 3124: -20,-32 + 3125: -20,-30 + 3126: -20,-31 + 3127: -24,-22 + 3128: -25,-22 + 3129: -26,-22 + 3130: -42,-29 + 3131: -42,-28 + 3132: -27,-29 + 3133: -27,-28 + 3134: -26,-12 + 3135: -25,-12 + 3136: -24,-12 + 3137: -23,-6 + 3138: -24,-6 + 3139: -25,-6 + 3140: -25,10 + 3141: -26,10 + 3142: -27,10 + 3143: -42,0 + 3144: -42,1 + 3145: -42,2 + 3146: -53,-5 + 3147: -54,-5 + 3148: -55,-5 + 3149: -55,-19 + 3150: -54,-19 + 3151: -53,-19 + 3152: -49,-34 + 3153: -47,-34 + 3154: -48,-34 + 3155: -47,-45 + 3156: -48,-45 + 3157: -49,-45 + 3158: -41,-49 + 3159: -42,-49 + 3160: -40,-49 + 3161: -54,-49 + 3162: -55,-49 + 3163: -56,-49 + 3164: -56,-55 + 3165: -55,-55 + 3166: -54,-55 + 3167: -42,-55 + 3168: -41,-55 + 3169: -40,-55 + 6565: 60,-24 + 6566: 60,-23 + 6665: 32,21 - node: cleanable: True angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: Delivery decals: - 3006: 24,5 - 3007: 25,5 - 3008: 26,5 - 3009: 14,1 - 3010: 14,-12 - 3011: 0,14 - 3012: -6,14 + 3002: 24,5 + 3003: 25,5 + 3004: 26,5 + 3005: 14,1 + 3006: 14,-12 + 3007: 0,14 + 3008: -6,14 - node: color: '#52B4E996' id: DeliveryGreyscale decals: 1759: 59,-5 1760: 61,-5 - 6331: 48,2 - 6332: 48,2 - 6333: 48,1 - 6334: 48,1 - 6565: 50,-5 - 6566: 50,-5 + 6326: 48,2 + 6327: 48,2 + 6328: 48,1 + 6329: 48,1 + 6559: 50,-5 + 6560: 50,-5 - node: color: '#DE3A3A96' id: DeliveryGreyscale @@ -3018,3398 +3021,3396 @@ entities: color: '#FFFFFFFF' id: DeliveryGreyscale decals: - 2240: 9,23 - 2241: 9,24 + 2236: 9,23 + 2237: 9,24 - node: cleanable: True color: '#835432FF' id: Dirt decals: - 2891: -37,28 - 2892: -36,27 - 2893: -37,27 - 2894: -37,25 - 2895: -37,24 - 2896: -36,25 - 2897: -36,24 - 2898: -36,25 - 2899: -38,28 - 2900: -39,29 - 2901: -40,28 - 2902: -38,28 - 2903: -37,27 - 2904: -37,28 - 2905: -37,27 - 2906: -36,25 - 2907: -36,24 - 2908: -34,24 - 2909: -34,23 - 2910: -34,22 - 2911: -36,22 - 2912: -37,22 - 2913: -36,24 - 2914: -37,24 - 2915: -36,23 - 2916: -37,25 - 2917: -36,25 - 2918: -37,26 - 2919: -38,27 - 2920: -38,28 - 2921: -39,27 - 2922: -39,26 - 2923: -39,26 + 2887: -37,28 + 2888: -36,27 + 2889: -37,27 + 2890: -37,25 + 2891: -37,24 + 2892: -36,25 + 2893: -36,24 + 2894: -36,25 + 2895: -38,28 + 2896: -39,29 + 2897: -40,28 + 2898: -38,28 + 2899: -37,27 + 2900: -37,28 + 2901: -37,27 + 2902: -36,25 + 2903: -36,24 + 2904: -34,24 + 2905: -34,23 + 2906: -34,22 + 2907: -36,22 + 2908: -37,22 + 2909: -36,24 + 2910: -37,24 + 2911: -36,23 + 2912: -37,25 + 2913: -36,25 + 2914: -37,26 + 2915: -38,27 + 2916: -38,28 + 2917: -39,27 + 2918: -39,26 + 2919: -39,26 - node: cleanable: True color: '#A4610696' id: Dirt decals: - 5462: -34,-26 - 5463: -37,-25 - 5464: -39,-28 - 5465: -40,-28 - 5466: -40,-31 - 5467: -39,-33 - 5468: -37,-33 - 5469: -32,-33 - 5470: -29,-33 - 5471: -29,-31 - 5472: -30,-28 - 5473: -29,-27 - 5474: -25,-30 - 5475: -25,-27 - 5476: -25,-26 - 5477: -25,-23 - 5478: -24,-21 - 5479: -25,-18 - 5480: -29,-20 - 5481: -29,-19 - 5482: -33,-19 - 5483: -33,-20 - 5484: -31,-14 - 5485: -29,-15 - 5486: -33,-16 - 5487: -29,-13 - 5488: -29,-11 - 5489: -38,-11 - 5490: -37,-15 - 5491: -36,-16 - 5492: -40,-10 - 5493: -38,-17 - 5494: -47,-8 - 5495: -45,0 - 5496: -47,0 - 5497: -44,2 - 5498: -48,-2 - 5499: -47,-1 - 5500: -49,3 - 5501: -50,-1 - 5502: -45,1 - 5503: -53,4 - 5504: -48,5 - 5505: -50,6 - 5506: -47,1 - 5507: -38,-1 - 5508: -36,1 - 5509: -35,-1 - 5510: -32,-1 - 5511: -33,0 - 5512: -33,-3 - 5513: -24,-2 - 5514: -28,3 - 5515: -26,3 - 5516: -26,8 - 5517: -27,13 - 5518: -26,14 - 5519: -26,18 - 5520: -33,13 - 5521: -32,15 - 5522: -32,14 - 5523: -22,13 - 5524: -20,12 - 5525: -22,13 - 5526: -24,19 - 5527: -20,20 - 5528: -18,19 - 5529: -16,20 - 5530: -13,19 - 5531: -15,24 - 5532: -14,24 - 5533: -13,27 - 5534: -14,28 - 5535: -13,27 - 5536: -5,28 - 5537: -20,28 - 5538: -18,25 - 5539: -13,31 - 5540: -15,32 - 5541: -14,34 - 5542: -17,32 - 5543: -8,32 - 5544: -8,32 - 5545: -6,33 - 5546: -6,27 - 5547: -3,28 - 5548: -1,30 - 5549: -2,33 - 5550: -2,33 - 5551: -2,36 - 5552: -2,43 - 5553: -7,42 - 5554: -5,45 - 5555: -3,47 - 5556: 0,45 - 5557: -2,47 - 5558: -1,47 - 5559: -2,51 - 5560: 1,51 - 5561: -1,52 - 5562: 1,52 - 5563: 2,45 - 5564: 2,47 - 5565: 2,42 - 5566: 1,40 - 5567: 6,41 - 5568: 8,39 - 5569: 6,41 - 5570: 5,31 - 5571: 3,31 - 5572: 5,30 - 5573: 4,30 - 5574: 3,26 - 5575: 2,27 - 5576: 4,25 - 5577: 3,23 - 5578: 2,24 - 5579: 1,23 - 5580: -2,24 - 5581: 1,21 - 5582: -1,19 - 5583: 4,20 - 5584: 9,20 - 5585: 9,20 - 5586: 15,19 - 5587: 11,24 - 5588: 14,23 - 5589: 14,25 - 5590: 15,24 - 5591: 14,29 - 5592: 14,31 - 5593: 17,25 - 5594: 17,23 - 5595: 16,20 - 5596: 20,20 - 5597: 20,18 - 5598: 20,15 - 5599: 21,15 - 5600: 20,12 - 5601: 22,12 - 5602: 20,11 - 5603: 27,12 - 5604: 27,11 - 5605: 26,14 - 5606: 25,19 - 5607: 30,19 - 5608: 31,16 - 5609: 31,12 - 5610: 35,14 - 5611: 35,14 - 5612: 35,14 - 5613: 32,8 - 5614: 34,9 - 5615: 32,7 - 5616: 26,7 - 5617: 24,7 - 5618: 24,3 - 5619: 24,2 - 5620: 23,2 - 5621: 20,6 - 5622: 20,9 - 5623: 23,3 - 5624: 32,3 - 5625: 34,2 - 5626: 32,-2 - 5627: 32,-2 - 5628: 32,-4 - 5629: 37,-4 - 5630: 36,3 - 5631: 42,2 - 5632: 38,-2 - 5633: 42,-5 - 5634: 42,-2 - 5635: 42,-4 - 5636: 43,6 - 5637: 44,12 - 5638: 43,11 - 5639: 46,12 - 5640: 44,12 - 5641: 52,12 - 5642: 50,14 - 5643: 50,7 - 5644: 53,14 - 5645: 59,15 - 5646: 60,17 - 5647: 55,7 - 5648: 54,7 - 5649: 50,7 - 5650: 49,0 - 5651: 45,-1 - 5652: 46,-5 - 5653: 46,-8 - 5654: 50,-4 - 5655: 50,-7 - 5656: 55,-5 - 5657: 53,-5 - 5658: 58,-6 - 5659: 61,-5 - 5660: 59,-7 - 5661: 59,-7 - 5662: 60,-6 - 5663: 59,-14 - 5664: 60,-14 - 5665: 59,-14 - 5666: 59,-18 - 5667: 59,-20 - 5668: 60,-18 - 5669: 60,-17 - 5670: 64,-13 - 5671: 64,-17 - 5672: 65,-19 - 5673: 64,-19 - 5674: 64,-25 - 5675: 65,-24 - 5676: 63,-26 - 5677: 63,-24 - 5678: 62,-26 - 5679: 64,-26 - 5680: 70,-28 - 5681: 71,-26 - 5682: 69,-27 - 5683: 69,-23 - 5684: 70,-24 - 5685: 69,-22 - 5686: 66,-18 - 5687: 70,-18 - 5688: 71,-17 - 5689: 69,-13 - 5690: 71,-14 - 5691: 69,-12 - 5692: 70,-14 - 5693: 76,-17 - 5694: 77,-18 - 5695: 74,-15 - 5696: 76,-14 - 5697: 74,-14 - 5698: 68,-8 - 5699: 70,-10 - 5700: 76,-6 - 5701: 48,-25 - 5702: 48,-26 - 5703: 48,-27 - 5704: 48,-30 - 5705: 48,-31 - 5706: 47,-31 - 5707: 49,-34 - 5708: 47,-36 - 5709: 46,-36 - 5710: 44,-37 - 5711: 42,-35 - 5712: 42,-36 - 5713: 38,-36 - 5714: 38,-35 - 5715: 37,-37 - 5716: 32,-35 - 5717: 32,-36 - 5718: 32,-33 - 5719: 33,-31 - 5720: 32,-31 - 5721: 33,-27 - 5722: 32,-25 - 5723: 33,-24 - 5724: 35,-26 - 5725: 37,-26 - 5726: 41,-25 - 5727: 40,-26 - 5728: 41,-29 - 5729: 40,-29 - 5730: 40,-31 - 5731: 43,-29 - 5732: 44,-31 - 5733: 45,-30 - 5734: 27,-34 - 5735: 25,-34 - 5736: 24,-32 - 5737: 26,-29 - 5738: 23,-29 - 5739: 23,-31 - 5740: 25,-38 - 5741: 24,-37 - 5742: 22,-38 - 5743: 21,-37 - 5744: 21,-38 - 5745: 29,-39 - 5746: 28,-41 - 5747: 29,-44 - 5748: 28,-42 - 5749: 28,-45 - 5750: 26,-45 - 5751: 27,-44 - 5752: 24,-43 - 5753: 25,-46 - 5754: 27,-45 - 5755: 25,-46 - 5756: 32,-30 - 5757: 33,-28 - 5758: 36,-26 - 5759: 35,-26 - 5760: 36,-23 - 5761: 36,-30 - 5762: 42,-28 - 5763: 43,-29 - 5764: 52,-31 - 5765: 52,-35 - 5766: 55,-29 - 5767: 55,-30 - 5768: 57,-30 - 5769: 55,-34 - 5770: 55,-34 - 5771: 55,-36 - 5772: 57,-34 - 5773: 20,-45 - 5774: 17,-44 - 5775: 18,-45 - 5776: 19,-46 - 5777: 18,-48 - 5778: 19,-49 - 5779: 18,-50 - 5780: 20,-53 - 5781: 18,-54 - 5782: 17,-54 - 5783: 16,-54 - 5784: 16,-58 - 5785: 16,-59 - 5786: 19,-58 - 5787: 21,-58 - 5788: 21,-59 - 5789: 13,-47 - 5790: 14,-47 - 5791: 13,-48 - 5792: 13,-45 - 5793: 12,-45 - 5794: 9,-45 - 5795: 8,-45 - 5796: 10,-39 - 5797: 11,-39 - 5798: 0,-37 - 5799: 0,-36 - 5800: 1,-36 - 5801: 2,-38 - 5802: 0,-36 - 5803: -1,-37 - 5804: -2,-36 - 5805: -5,-36 - 5806: -4,-36 - 5807: -6,-36 - 5808: -7,-32 - 5809: -8,-32 - 5810: -7,-30 - 5811: -11,-31 - 5812: -12,-32 - 5813: -15,-32 - 5814: -16,-32 - 5815: -13,-30 - 5816: -16,-30 - 5817: -17,-30 - 5818: -22,-30 - 5819: -23,-30 - 5820: -24,-30 - 5821: -24,-29 - 5822: -24,-28 - 5823: -22,-32 - 5824: -24,-32 - 5825: -25,-32 - 5826: -26,-30 - 5827: -26,-28 - 5828: -26,-26 - 5829: -26,-24 - 5830: -24,-24 - 5831: -24,-22 - 5832: -24,-19 - 5833: -26,-21 - 5834: -26,-18 - 5835: -26,-17 - 5836: -24,-14 - 5837: -25,-15 - 5838: -27,-15 - 5839: -30,-15 - 5840: -30,-15 - 5841: -34,-15 - 5842: -35,-14 - 5843: -37,-15 - 5844: -38,-14 - 5845: -35,-15 - 5846: -34,-14 - 5847: -37,-10 - 5848: -38,-10 - 5849: -36,-9 - 5850: -29,-10 - 5851: -29,-11 - 5852: -33,-20 - 5853: -34,-20 - 5854: -33,-18 - 5855: -32,-20 - 5856: -34,-19 - 5857: -33,-18 - 5858: -29,-19 - 5859: -30,-21 - 5860: -29,-19 - 5861: -30,-20 - 5862: -37,-18 - 5863: -40,-18 - 5864: -39,-20 - 5865: -37,-19 - 5866: -39,-19 - 5867: -32,-26 - 5868: -35,-25 - 5869: -39,-26 - 5870: -39,-26 - 5871: -39,-27 - 5872: -40,-28 - 5873: -38,-30 - 5874: -39,-32 - 5875: -39,-33 - 5876: -37,-33 - 5877: -34,-33 - 5878: -31,-33 - 5879: -34,-34 - 5880: -30,-33 - 5881: -30,-31 - 5882: -31,-28 - 5883: -29,-27 - 5884: -29,-30 - 5885: -43,-30 - 5886: -44,-28 - 5887: -45,-31 - 5888: -46,-27 - 5889: -45,-25 - 5890: -45,-25 - 5891: -47,-25 - 5892: -49,-25 - 5893: -51,-26 - 5894: -50,-29 - 5895: -51,-30 - 5896: -51,-30 - 5897: -50,-32 - 5898: -47,-32 - 5899: -48,-33 - 5900: -44,-31 - 5901: -44,-29 - 5902: -55,-25 - 5903: -56,-25 - 5904: -55,-29 - 5905: -56,-29 - 5906: -55,-29 - 5907: -60,-27 - 5908: -60,-29 - 5909: -62,-27 - 5910: -61,-21 - 5911: -61,-21 - 5912: -54,-21 - 5913: -54,-21 - 5914: -55,-16 - 5915: -53,-14 - 5916: -54,-13 - 5917: -53,-10 - 5918: -54,-7 - 5919: -53,-5 - 5920: -55,-2 - 5921: -54,0 - 5922: -53,1 - 5923: -53,-4 - 5924: -54,-3 - 5925: -54,-4 - 5926: -54,-9 - 5927: -46,-4 - 5928: -47,-4 - 5929: -48,-3 - 5930: -50,0 - 5931: -45,1 - 5932: -47,1 - 5933: -44,1 - 5934: -47,1 - 5935: -46,7 - 5936: -49,7 - 5937: -49,11 - 5938: -46,11 - 5939: -49,10 - 5940: -48,13 - 5941: -45,11 - 5942: -54,10 - 5943: -54,9 - 5944: -53,10 - 5945: -39,1 - 5946: -37,0 - 5947: -39,-1 - 5948: -34,-1 - 5949: -37,-1 - 5950: -36,0 - 5951: -35,2 - 5952: -31,2 - 5953: -31,2 - 5954: -33,1 - 5955: -28,0 - 5956: -30,-1 - 5957: -27,-1 - 5958: -33,-4 - 5959: -27,-5 - 5960: -24,-3 - 5961: -24,1 - 5962: -22,3 - 5963: -23,-2 - 5964: -22,-3 - 5965: -17,-3 - 5966: -19,-3 - 5967: -17,-3 - 5968: -18,-4 - 5969: -14,-4 - 5970: -18,-4 - 5971: -17,-4 - 5972: -17,-4 - 5973: -19,-4 - 5974: -19,-2 - 5975: -19,-2 - 5976: -20,-3 - 5977: -20,-5 - 5978: -16,0 - 5979: -16,1 - 5980: -16,3 - 5981: -15,0 - 5982: -15,6 - 5983: -17,5 - 5984: -15,7 - 5985: -21,5 - 5986: -21,6 - 5987: -20,7 + 5458: -34,-26 + 5459: -37,-25 + 5460: -39,-28 + 5461: -40,-28 + 5462: -40,-31 + 5463: -39,-33 + 5464: -37,-33 + 5465: -32,-33 + 5466: -29,-33 + 5467: -29,-31 + 5468: -30,-28 + 5469: -29,-27 + 5470: -25,-30 + 5471: -25,-27 + 5472: -25,-26 + 5473: -25,-23 + 5474: -24,-21 + 5475: -25,-18 + 5476: -29,-20 + 5477: -29,-19 + 5478: -33,-19 + 5479: -33,-20 + 5480: -31,-14 + 5481: -29,-15 + 5482: -33,-16 + 5483: -29,-13 + 5484: -29,-11 + 5485: -38,-11 + 5486: -37,-15 + 5487: -36,-16 + 5488: -40,-10 + 5489: -38,-17 + 5490: -47,-8 + 5491: -45,0 + 5492: -47,0 + 5493: -44,2 + 5494: -48,-2 + 5495: -47,-1 + 5496: -49,3 + 5497: -50,-1 + 5498: -45,1 + 5499: -53,4 + 5500: -48,5 + 5501: -50,6 + 5502: -47,1 + 5503: -38,-1 + 5504: -36,1 + 5505: -35,-1 + 5506: -32,-1 + 5507: -33,0 + 5508: -33,-3 + 5509: -24,-2 + 5510: -28,3 + 5511: -26,3 + 5512: -26,8 + 5513: -27,13 + 5514: -26,14 + 5515: -26,18 + 5516: -33,13 + 5517: -32,15 + 5518: -32,14 + 5519: -22,13 + 5520: -20,12 + 5521: -22,13 + 5522: -24,19 + 5523: -20,20 + 5524: -18,19 + 5525: -16,20 + 5526: -13,19 + 5527: -15,24 + 5528: -14,24 + 5529: -13,27 + 5530: -14,28 + 5531: -13,27 + 5532: -5,28 + 5533: -20,28 + 5534: -18,25 + 5535: -13,31 + 5536: -15,32 + 5537: -14,34 + 5538: -17,32 + 5539: -8,32 + 5540: -8,32 + 5541: -6,33 + 5542: -6,27 + 5543: -3,28 + 5544: -1,30 + 5545: -2,33 + 5546: -2,33 + 5547: -2,36 + 5548: -2,43 + 5549: -7,42 + 5550: -5,45 + 5551: -3,47 + 5552: 0,45 + 5553: -2,47 + 5554: -1,47 + 5555: -2,51 + 5556: 1,51 + 5557: -1,52 + 5558: 1,52 + 5559: 2,45 + 5560: 2,47 + 5561: 2,42 + 5562: 1,40 + 5563: 6,41 + 5564: 8,39 + 5565: 6,41 + 5566: 5,31 + 5567: 3,31 + 5568: 5,30 + 5569: 4,30 + 5570: 3,26 + 5571: 2,27 + 5572: 4,25 + 5573: 3,23 + 5574: 2,24 + 5575: 1,23 + 5576: -2,24 + 5577: 1,21 + 5578: -1,19 + 5579: 4,20 + 5580: 9,20 + 5581: 9,20 + 5582: 15,19 + 5583: 11,24 + 5584: 14,23 + 5585: 14,25 + 5586: 15,24 + 5587: 14,29 + 5588: 14,31 + 5589: 17,25 + 5590: 17,23 + 5591: 16,20 + 5592: 20,20 + 5593: 20,18 + 5594: 20,15 + 5595: 21,15 + 5596: 20,12 + 5597: 22,12 + 5598: 20,11 + 5599: 27,12 + 5600: 27,11 + 5601: 26,14 + 5602: 25,19 + 5603: 30,19 + 5604: 31,16 + 5605: 31,12 + 5606: 35,14 + 5607: 35,14 + 5608: 35,14 + 5609: 32,8 + 5610: 34,9 + 5611: 32,7 + 5612: 26,7 + 5613: 24,7 + 5614: 24,3 + 5615: 24,2 + 5616: 23,2 + 5617: 20,6 + 5618: 20,9 + 5619: 23,3 + 5620: 32,3 + 5621: 34,2 + 5622: 32,-2 + 5623: 32,-2 + 5624: 32,-4 + 5625: 37,-4 + 5626: 36,3 + 5627: 42,2 + 5628: 38,-2 + 5629: 42,-5 + 5630: 42,-2 + 5631: 42,-4 + 5632: 43,6 + 5633: 44,12 + 5634: 43,11 + 5635: 46,12 + 5636: 44,12 + 5637: 52,12 + 5638: 50,14 + 5639: 50,7 + 5640: 53,14 + 5641: 59,15 + 5642: 60,17 + 5643: 55,7 + 5644: 54,7 + 5645: 50,7 + 5646: 49,0 + 5647: 45,-1 + 5648: 46,-5 + 5649: 46,-8 + 5650: 50,-4 + 5651: 50,-7 + 5652: 55,-5 + 5653: 53,-5 + 5654: 58,-6 + 5655: 61,-5 + 5656: 59,-7 + 5657: 59,-7 + 5658: 60,-6 + 5659: 59,-14 + 5660: 60,-14 + 5661: 59,-14 + 5662: 59,-18 + 5663: 59,-20 + 5664: 60,-18 + 5665: 60,-17 + 5666: 64,-13 + 5667: 64,-17 + 5668: 65,-19 + 5669: 64,-19 + 5670: 64,-25 + 5671: 65,-24 + 5672: 63,-26 + 5673: 63,-24 + 5674: 62,-26 + 5675: 64,-26 + 5676: 70,-28 + 5677: 71,-26 + 5678: 69,-27 + 5679: 69,-23 + 5680: 70,-24 + 5681: 69,-22 + 5682: 66,-18 + 5683: 70,-18 + 5684: 71,-17 + 5685: 69,-13 + 5686: 71,-14 + 5687: 69,-12 + 5688: 70,-14 + 5689: 76,-17 + 5690: 77,-18 + 5691: 74,-15 + 5692: 76,-14 + 5693: 74,-14 + 5694: 68,-8 + 5695: 70,-10 + 5696: 76,-6 + 5697: 48,-25 + 5698: 48,-26 + 5699: 48,-27 + 5700: 48,-30 + 5701: 48,-31 + 5702: 47,-31 + 5703: 49,-34 + 5704: 47,-36 + 5705: 46,-36 + 5706: 44,-37 + 5707: 42,-35 + 5708: 42,-36 + 5709: 38,-36 + 5710: 38,-35 + 5711: 37,-37 + 5712: 32,-35 + 5713: 32,-36 + 5714: 32,-33 + 5715: 33,-31 + 5716: 32,-31 + 5717: 33,-27 + 5718: 32,-25 + 5719: 33,-24 + 5720: 35,-26 + 5721: 37,-26 + 5722: 41,-25 + 5723: 40,-26 + 5724: 41,-29 + 5725: 40,-29 + 5726: 40,-31 + 5727: 43,-29 + 5728: 44,-31 + 5729: 45,-30 + 5730: 27,-34 + 5731: 25,-34 + 5732: 24,-32 + 5733: 26,-29 + 5734: 23,-29 + 5735: 23,-31 + 5736: 25,-38 + 5737: 24,-37 + 5738: 22,-38 + 5739: 21,-37 + 5740: 21,-38 + 5741: 29,-39 + 5742: 28,-41 + 5743: 29,-44 + 5744: 28,-42 + 5745: 28,-45 + 5746: 26,-45 + 5747: 27,-44 + 5748: 24,-43 + 5749: 25,-46 + 5750: 27,-45 + 5751: 25,-46 + 5752: 32,-30 + 5753: 33,-28 + 5754: 36,-26 + 5755: 35,-26 + 5756: 36,-23 + 5757: 36,-30 + 5758: 42,-28 + 5759: 43,-29 + 5760: 52,-31 + 5761: 52,-35 + 5762: 55,-29 + 5763: 55,-30 + 5764: 57,-30 + 5765: 55,-34 + 5766: 55,-34 + 5767: 55,-36 + 5768: 57,-34 + 5769: 20,-45 + 5770: 17,-44 + 5771: 18,-45 + 5772: 19,-46 + 5773: 18,-48 + 5774: 19,-49 + 5775: 18,-50 + 5776: 20,-53 + 5777: 18,-54 + 5778: 17,-54 + 5779: 16,-54 + 5780: 16,-58 + 5781: 16,-59 + 5782: 19,-58 + 5783: 21,-58 + 5784: 21,-59 + 5785: 13,-47 + 5786: 14,-47 + 5787: 13,-48 + 5788: 13,-45 + 5789: 12,-45 + 5792: 10,-39 + 5793: 11,-39 + 5794: 0,-37 + 5795: 0,-36 + 5796: 1,-36 + 5797: 2,-38 + 5798: 0,-36 + 5799: -1,-37 + 5800: -2,-36 + 5801: -5,-36 + 5802: -4,-36 + 5803: -6,-36 + 5804: -7,-32 + 5805: -8,-32 + 5806: -7,-30 + 5807: -11,-31 + 5808: -12,-32 + 5809: -15,-32 + 5810: -16,-32 + 5811: -13,-30 + 5812: -16,-30 + 5813: -17,-30 + 5814: -22,-30 + 5815: -23,-30 + 5816: -24,-30 + 5817: -24,-29 + 5818: -24,-28 + 5819: -22,-32 + 5820: -24,-32 + 5821: -25,-32 + 5822: -26,-30 + 5823: -26,-28 + 5824: -26,-26 + 5825: -26,-24 + 5826: -24,-24 + 5827: -24,-22 + 5828: -24,-19 + 5829: -26,-21 + 5830: -26,-18 + 5831: -26,-17 + 5832: -24,-14 + 5833: -25,-15 + 5834: -27,-15 + 5835: -30,-15 + 5836: -30,-15 + 5837: -34,-15 + 5838: -35,-14 + 5839: -37,-15 + 5840: -38,-14 + 5841: -35,-15 + 5842: -34,-14 + 5843: -37,-10 + 5844: -38,-10 + 5845: -36,-9 + 5846: -29,-10 + 5847: -29,-11 + 5848: -33,-20 + 5849: -34,-20 + 5850: -33,-18 + 5851: -32,-20 + 5852: -34,-19 + 5853: -33,-18 + 5854: -29,-19 + 5855: -30,-21 + 5856: -29,-19 + 5857: -30,-20 + 5858: -37,-18 + 5859: -40,-18 + 5860: -39,-20 + 5861: -37,-19 + 5862: -39,-19 + 5863: -32,-26 + 5864: -35,-25 + 5865: -39,-26 + 5866: -39,-26 + 5867: -39,-27 + 5868: -40,-28 + 5869: -38,-30 + 5870: -39,-32 + 5871: -39,-33 + 5872: -37,-33 + 5873: -34,-33 + 5874: -31,-33 + 5875: -34,-34 + 5876: -30,-33 + 5877: -30,-31 + 5878: -31,-28 + 5879: -29,-27 + 5880: -29,-30 + 5881: -43,-30 + 5882: -44,-28 + 5883: -45,-31 + 5884: -46,-27 + 5885: -45,-25 + 5886: -45,-25 + 5887: -47,-25 + 5888: -49,-25 + 5889: -51,-26 + 5890: -50,-29 + 5891: -51,-30 + 5892: -51,-30 + 5893: -50,-32 + 5894: -47,-32 + 5895: -48,-33 + 5896: -44,-31 + 5897: -44,-29 + 5898: -55,-25 + 5899: -56,-25 + 5900: -55,-29 + 5901: -56,-29 + 5902: -55,-29 + 5903: -60,-27 + 5904: -60,-29 + 5905: -62,-27 + 5906: -61,-21 + 5907: -61,-21 + 5908: -54,-21 + 5909: -54,-21 + 5910: -55,-16 + 5911: -53,-14 + 5912: -54,-13 + 5913: -53,-10 + 5914: -54,-7 + 5915: -53,-5 + 5916: -55,-2 + 5917: -54,0 + 5918: -53,1 + 5919: -53,-4 + 5920: -54,-3 + 5921: -54,-4 + 5922: -54,-9 + 5923: -46,-4 + 5924: -47,-4 + 5925: -48,-3 + 5926: -50,0 + 5927: -45,1 + 5928: -47,1 + 5929: -44,1 + 5930: -47,1 + 5931: -46,7 + 5932: -49,7 + 5933: -49,11 + 5934: -46,11 + 5935: -49,10 + 5936: -48,13 + 5937: -45,11 + 5938: -54,10 + 5939: -54,9 + 5940: -53,10 + 5941: -39,1 + 5942: -37,0 + 5943: -39,-1 + 5944: -34,-1 + 5945: -37,-1 + 5946: -36,0 + 5947: -35,2 + 5948: -31,2 + 5949: -31,2 + 5950: -33,1 + 5951: -28,0 + 5952: -30,-1 + 5953: -27,-1 + 5954: -33,-4 + 5955: -27,-5 + 5956: -24,-3 + 5957: -24,1 + 5958: -22,3 + 5959: -23,-2 + 5960: -22,-3 + 5961: -17,-3 + 5962: -19,-3 + 5963: -17,-3 + 5964: -18,-4 + 5965: -14,-4 + 5966: -18,-4 + 5967: -17,-4 + 5968: -17,-4 + 5969: -19,-4 + 5970: -19,-2 + 5971: -19,-2 + 5972: -20,-3 + 5973: -20,-5 + 5974: -16,0 + 5975: -16,1 + 5976: -16,3 + 5977: -15,0 + 5978: -15,6 + 5979: -17,5 + 5980: -15,7 + 5981: -21,5 + 5982: -21,6 + 5983: -20,7 + 5984: -22,8 + 5985: -24,9 + 5986: -21,9 + 5987: -23,8 5988: -22,8 - 5989: -24,9 - 5990: -21,9 - 5991: -23,8 - 5992: -22,8 - 5993: -23,8 - 5994: -21,13 - 5995: -22,11 - 5996: -20,13 - 5997: -22,14 - 5998: -26,12 - 5999: -26,16 - 6000: -26,17 - 6001: -26,20 - 6002: -19,20 - 6003: -25,20 - 6004: -22,19 - 6005: -24,26 - 6006: -25,26 - 6007: -26,26 + 5989: -23,8 + 5990: -21,13 + 5991: -22,11 + 5992: -20,13 + 5993: -22,14 + 5994: -26,12 + 5995: -26,16 + 5996: -26,17 + 5997: -26,20 + 5998: -19,20 + 5999: -25,20 + 6000: -22,19 + 6001: -24,26 + 6002: -25,26 + 6003: -26,26 + 6004: -25,29 + 6005: -26,29 + 6006: -26,26 + 6007: -26,27 6008: -25,29 - 6009: -26,29 - 6010: -26,26 - 6011: -26,27 - 6012: -25,29 - 6013: -29,26 - 6014: -29,26 - 6015: -19,26 - 6016: -21,26 - 6017: -19,28 - 6018: -18,26 - 6019: -14,28 - 6020: -14,26 - 6021: -13,28 - 6022: -11,23 - 6023: -7,32 - 6024: -9,32 - 6025: -14,32 - 6026: -15,33 - 6027: -18,32 - 6028: -3,28 - 6029: -4,27 - 6030: -1,29 - 6031: -2,23 - 6032: -1,19 - 6033: -3,14 - 6034: -3,14 - 6035: -2,15 - 6036: -4,15 - 6037: -3,15 - 6038: 2,-14 - 6039: 2,-16 - 6040: -1,-17 - 6041: -2,-14 - 6042: -7,-17 - 6043: -6,-16 - 6044: -7,-19 - 6045: -7,-19 - 6046: -7,-23 - 6047: -1,-24 - 6048: 4,-20 - 6049: 6,-23 - 6050: 6,-20 - 6051: 7,-22 - 6052: 7,-20 - 6053: 11,-18 - 6054: 13,-18 - 6055: 13,-22 - 6056: 13,-22 - 6057: 12,-22 - 6058: 15,-26 - 6059: 12,-26 - 6060: 12,-29 - 6061: 7,-30 - 6062: 8,-32 - 6063: 7,-32 - 6064: 10,-34 - 6065: 13,-33 - 6066: 16,-32 - 6067: 21,-37 - 6068: 20,-38 - 6069: 24,-38 - 6070: 25,-37 - 6071: 28,-34 - 6072: 25,-34 - 6073: 27,-29 - 6074: 24,-29 - 6075: 33,-34 - 6076: 32,-37 - 6077: 35,-37 - 6078: 38,-36 - 6079: 40,-36 - 6080: 39,-30 - 6081: 44,-25 - 6082: 43,-25 - 6083: 42,-20 - 6084: 42,-18 - 6085: 41,-16 - 6086: 38,-16 - 6087: 37,-17 - 6088: 37,-15 - 6089: 37,-17 - 6090: 37,-16 - 6091: 37,-16 - 6092: 37,-16 - 6093: 38,-4 - 6094: 33,-3 - 6095: 33,-3 - 6096: 33,-2 - 6097: 38,7 - 6098: 36,13 - 6099: 37,13 - 6100: 35,13 - 6101: 34,13 - 6102: 34,14 - 6103: 36,13 - 6104: 36,13 - 6105: 34,14 - 6106: 35,18 - 6107: 36,18 + 6009: -29,26 + 6010: -29,26 + 6011: -19,26 + 6012: -21,26 + 6013: -19,28 + 6014: -18,26 + 6015: -14,28 + 6016: -14,26 + 6017: -13,28 + 6018: -11,23 + 6019: -7,32 + 6020: -9,32 + 6021: -14,32 + 6022: -15,33 + 6023: -18,32 + 6024: -3,28 + 6025: -4,27 + 6026: -1,29 + 6027: -2,23 + 6028: -1,19 + 6029: -3,14 + 6030: -3,14 + 6031: -2,15 + 6032: -4,15 + 6033: -3,15 + 6034: 2,-14 + 6035: 2,-16 + 6036: -1,-17 + 6037: -2,-14 + 6038: -7,-17 + 6039: -6,-16 + 6040: -7,-19 + 6041: -7,-19 + 6042: -7,-23 + 6043: -1,-24 + 6044: 4,-20 + 6045: 6,-23 + 6046: 6,-20 + 6047: 7,-22 + 6048: 7,-20 + 6049: 11,-18 + 6050: 13,-18 + 6051: 13,-22 + 6052: 13,-22 + 6053: 12,-22 + 6054: 15,-26 + 6055: 12,-26 + 6056: 12,-29 + 6057: 7,-30 + 6058: 8,-32 + 6059: 7,-32 + 6060: 10,-34 + 6061: 13,-33 + 6062: 16,-32 + 6063: 21,-37 + 6064: 20,-38 + 6065: 24,-38 + 6066: 25,-37 + 6067: 28,-34 + 6068: 25,-34 + 6069: 27,-29 + 6070: 24,-29 + 6071: 33,-34 + 6072: 32,-37 + 6073: 35,-37 + 6074: 38,-36 + 6075: 40,-36 + 6076: 39,-30 + 6077: 44,-25 + 6078: 43,-25 + 6079: 42,-20 + 6080: 42,-18 + 6081: 41,-16 + 6082: 38,-16 + 6083: 37,-17 + 6084: 37,-15 + 6085: 37,-17 + 6086: 37,-16 + 6087: 37,-16 + 6088: 37,-16 + 6089: 38,-4 + 6090: 33,-3 + 6091: 33,-3 + 6093: 38,7 + 6094: 36,13 + 6095: 37,13 + 6096: 35,13 + 6097: 34,13 + 6098: 34,14 + 6099: 36,13 + 6100: 36,13 + 6101: 34,14 + 6102: 35,18 + 6103: 36,18 - node: cleanable: True color: '#D4D4D447' id: Dirt decals: - 6746: 37,-3 - 6747: 37,-2 - 6748: 37,-2 - 6749: 38,-3 - 6750: 39,-2 - 6751: 39,-2 - 6752: 38,-3 - 6753: 38,-2 - 6754: 36,-3 - 6755: 36,-3 - 6756: 36,-2 - 6757: 36,-2 - 6758: 39,-3 - 6759: 37,-3 - 6760: 37,-3 + 6740: 37,-3 + 6741: 37,-2 + 6742: 37,-2 + 6743: 38,-3 + 6744: 39,-2 + 6745: 39,-2 + 6746: 38,-3 + 6747: 38,-2 + 6748: 36,-3 + 6749: 36,-3 + 6750: 36,-2 + 6751: 36,-2 + 6752: 39,-3 + 6753: 37,-3 + 6754: 37,-3 - node: cleanable: True color: '#FFFFFF47' id: Dirt decals: - 6650: 15,-30 - 6651: 15,-30 - 6652: 16,-27 - 6653: 16,-27 + 6644: 15,-30 + 6645: 15,-30 + 6646: 16,-27 + 6647: 16,-27 - node: cleanable: True color: '#FFFFFFFF' id: Dirt decals: - 6119: 51,20 - 6120: 50,21 - 6157: 81,-34 - 6158: 83,-35 - 6159: 81,-34 - 6160: 81,-34 - 6161: 83,-35 - 6162: 81,-35 - 6163: 82,-35 - 6164: 82,-35 - 6165: 80,-35 - 6166: 83,-36 - 6171: 82,-34 - 6727: -25,-42 + 6115: 51,20 + 6116: 50,21 + 6153: 81,-34 + 6154: 83,-35 + 6155: 81,-34 + 6156: 81,-34 + 6157: 83,-35 + 6158: 81,-35 + 6159: 82,-35 + 6160: 82,-35 + 6161: 80,-35 + 6162: 83,-36 + 6167: 82,-34 + 6721: -25,-42 - node: cleanable: True angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: Dirt decals: - 3017: -44,16 - 3018: -43,17 - 3019: -41,14 + 3013: -44,16 + 3014: -43,17 + 3015: -41,14 - node: cleanable: True color: '#1D1D21FF' id: DirtHeavy decals: - 2942: -39,26 - 2943: -40,29 - 2944: -38,28 - 2945: -36,29 - 2946: -35,27 - 2947: -35,26 - 2948: -35,26 - 2949: -37,26 - 2950: -37,26 - 2951: -37,25 - 2952: -39,26 - 2953: -34,25 - 2954: -34,25 - 2955: -36,24 + 2938: -39,26 + 2939: -40,29 + 2940: -38,28 + 2941: -36,29 + 2942: -35,27 + 2943: -35,26 + 2944: -35,26 + 2945: -37,26 + 2946: -37,26 + 2947: -37,25 + 2948: -39,26 + 2949: -34,25 + 2950: -34,25 + 2951: -36,24 - node: cleanable: True color: '#835432FF' id: DirtHeavy decals: - 2934: -36,26 - 2935: -35,27 - 2936: -37,26 - 2937: -37,27 - 2938: -37,25 - 2939: -39,26 - 2940: -38,27 - 2941: -38,28 + 2930: -36,26 + 2931: -35,27 + 2932: -37,26 + 2933: -37,27 + 2934: -37,25 + 2935: -39,26 + 2936: -38,27 + 2937: -38,28 - node: cleanable: True angle: -6.283185307179586 rad color: '#FFFFFFFF' id: DirtHeavy decals: - 6615: 89,-20 - 6616: 87,-21 - 6617: 92,-21 + 6609: 89,-20 + 6610: 87,-21 + 6611: 92,-21 - node: cleanable: True color: '#FFFFFFFF' id: DirtHeavy decals: - 2962: -8,-40 - 2963: -7,-39 - 2964: -5,-40 - 2965: -6,-42 - 2966: -4,-39 - 2967: -6,-40 - 2968: -6,-40 - 2969: -7,-40 - 2970: -7,-39 - 2971: -7,-39 - 2972: -8,-39 - 3654: -60,-66 - 3655: -59,-65 - 3656: -59,-63 - 3657: -59,-61 - 3658: -59,-59 - 3659: -59,-57 - 3660: -60,-57 - 3661: -57,-57 - 3662: -58,-58 - 3663: -56,-57 - 3664: -56,-58 - 3665: -56,-60 - 3666: -56,-62 - 3667: -56,-64 - 3668: -56,-66 - 3669: -58,-66 - 3670: -55,-56 - 3671: -54,-54 - 3672: -54,-52 - 3673: -54,-50 - 3674: -56,-53 - 3675: -56,-52 - 3676: -56,-47 - 3677: -53,-48 - 3678: -52,-46 - 3679: -54,-46 - 3680: -51,-46 - 3681: -50,-48 - 3682: -47,-48 - 3683: -45,-48 - 3684: -43,-46 - 3685: -45,-46 - 3686: -43,-48 - 3687: -42,-48 - 3688: -40,-48 - 3689: -40,-50 - 3690: -40,-52 - 3691: -40,-54 - 3692: -42,-51 - 3693: -42,-53 - 3694: -42,-54 - 3695: -41,-56 - 3696: -39,-57 - 3697: -40,-58 - 3698: -37,-57 - 3699: -37,-58 - 3700: -37,-61 - 3701: -37,-64 - 3702: -37,-65 - 3703: -36,-65 - 3704: -36,-66 - 3705: -39,-66 - 3706: -40,-65 - 3707: -40,-63 - 3708: -40,-60 - 3709: -47,-44 - 3710: -47,-42 - 3711: -47,-39 - 3712: -47,-35 - 3713: -47,-33 - 3714: -49,-33 - 3715: -49,-37 - 3716: -49,-39 - 3717: -49,-41 - 3718: -49,-44 - 3719: -49,-44 - 3720: -49,-43 - 3721: -44,-32 - 3722: -44,-30 - 3723: -43,-31 - 3724: -43,-27 - 3725: -44,-26 - 3726: -43,-26 - 3727: -44,-25 - 3728: -52,-32 - 3729: -52,-30 - 3730: -52,-29 - 3731: -52,-25 - 3732: -52,-22 - 3733: -54,-22 - 3734: -55,-22 - 3735: -52,-20 - 3736: -50,-20 - 3737: -47,-20 - 3738: -46,-20 - 3739: -45,-20 - 3740: -44,-20 - 3741: -44,-22 - 3742: -51,-18 - 3743: -51,-17 - 3744: -49,-17 - 3745: -48,-15 - 3746: -48,-13 - 3747: -50,-13 - 3748: -51,-14 - 3749: -51,-15 - 3750: -44,-15 - 3751: -46,-15 - 3752: -46,-14 - 3753: -54,-24 - 3754: -56,-24 - 3755: -54,-30 - 3756: -56,-29 - 3757: -57,-28 - 3758: -54,-28 - 3759: -61,-29 - 3760: -59,-29 - 3761: -59,-27 - 3762: -59,-25 - 3763: -61,-25 - 3764: -55,-17 - 3765: -55,-15 - 3766: -55,-13 - 3767: -55,-10 - 3768: -53,-17 - 3769: -53,-14 - 3770: -53,-12 - 3771: -53,-11 - 3772: -53,-9 - 3773: -53,-7 - 3774: -53,-6 - 3775: -53,-4 - 3776: -55,-3 - 3777: -55,-7 - 3778: -55,-8 - 3779: -53,0 - 3780: -53,-2 - 3781: -51,-4 - 3782: -49,-4 - 3783: -50,-5 - 3784: -48,-5 - 3793: -53,2 - 3794: -53,4 - 3795: -53,6 - 3796: -53,7 - 3797: -55,7 - 3798: -55,5 - 3799: -55,-1 - 3800: -51,6 - 3801: -50,7 - 3802: -47,7 - 3803: -48,6 - 3804: -46,6 - 3805: -45,7 - 3806: -47,9 - 3807: -45,9 - 3808: -44,9 - 3809: -50,9 - 3810: -50,9 - 3811: -51,11 - 3812: -51,13 - 3813: -50,13 - 3814: -48,13 - 3815: -46,13 - 3816: -48,12 - 3817: -43,11 - 3818: -44,12 - 3819: -43,13 - 3820: -43,12 - 3821: -54,10 - 3822: -53,9 - 3823: -54,9 - 3846: -43,1 - 3847: -40,2 - 3848: -39,1 - 3849: -39,1 - 3850: -40,-1 - 3851: -38,-1 - 3852: -40,-2 - 3853: -39,-2 - 3854: -40,-4 - 3855: -39,-5 - 3856: -38,-5 - 3857: -37,-5 - 3858: -36,-5 - 3859: -38,-4 - 3860: -36,-3 - 3861: -36,-2 - 3862: -36,-4 - 3863: -34,-3 - 3864: -32,-4 - 3865: -34,-1 - 3866: -32,0 - 3867: -35,0 - 3868: -39,3 - 3869: -40,4 - 3870: -38,4 - 3871: -33,1 - 3872: -31,2 - 3873: -31,-1 - 3874: -29,0 - 3875: -32,-2 - 3876: -31,-3 - 3877: -33,-4 - 3878: -32,-5 - 3879: -31,-4 - 3880: -30,-3 - 3881: -28,-3 - 3882: -28,-4 - 3883: -26,-5 - 3884: -27,-2 - 3885: -27,-3 - 3886: -29,0 - 3887: -27,0 - 3888: -27,2 - 3889: -28,3 - 3890: -27,3 - 3891: -27,1 - 3892: -26,-1 - 3893: -32,-1 - 3894: -28,4 - 3895: -26,5 - 3896: -26,6 - 3897: -26,3 - 3898: -26,3 - 3899: -24,2 - 3900: -23,1 - 3901: -25,0 - 3902: -23,-2 - 3903: -25,-3 - 3904: -23,-3 - 3905: -25,-4 - 3906: -23,-5 - 3907: -25,-5 - 3908: -24,-1 - 3909: -25,-1 - 3910: -23,3 - 3911: -15,-1 - 3912: -16,-1 - 3913: -15,0 - 3914: -16,1 - 3915: -16,3 - 3916: -15,3 - 3917: -15,2 - 3918: -15,1 - 3919: -15,1 - 3920: -27,6 - 3921: -27,7 - 3922: -27,9 - 3923: -20,5 - 3924: -21,5 - 3929: -17,5 - 3930: -16,5 - 3931: -16,5 - 3932: -22,11 - 3933: -21,11 - 3934: -22,13 - 3935: -20,14 - 3936: -22,13 - 3937: -22,15 - 3938: -20,14 - 3939: -20,13 - 3940: -20,12 - 3941: -19,11 - 3942: -22,14 - 3943: -23,14 - 3944: -17,11 - 3945: -17,11 - 3946: -17,12 - 3947: -16,11 + 2958: -8,-40 + 2959: -7,-39 + 2960: -5,-40 + 2961: -6,-42 + 2962: -4,-39 + 2963: -6,-40 + 2964: -6,-40 + 2965: -7,-40 + 2966: -7,-39 + 2967: -7,-39 + 2968: -8,-39 + 3650: -60,-66 + 3651: -59,-65 + 3652: -59,-63 + 3653: -59,-61 + 3654: -59,-59 + 3655: -59,-57 + 3656: -60,-57 + 3657: -57,-57 + 3658: -58,-58 + 3659: -56,-57 + 3660: -56,-58 + 3661: -56,-60 + 3662: -56,-62 + 3663: -56,-64 + 3664: -56,-66 + 3665: -58,-66 + 3666: -55,-56 + 3667: -54,-54 + 3668: -54,-52 + 3669: -54,-50 + 3670: -56,-53 + 3671: -56,-52 + 3672: -56,-47 + 3673: -53,-48 + 3674: -52,-46 + 3675: -54,-46 + 3676: -51,-46 + 3677: -50,-48 + 3678: -47,-48 + 3679: -45,-48 + 3680: -43,-46 + 3681: -45,-46 + 3682: -43,-48 + 3683: -42,-48 + 3684: -40,-48 + 3685: -40,-50 + 3686: -40,-52 + 3687: -40,-54 + 3688: -42,-51 + 3689: -42,-53 + 3690: -42,-54 + 3691: -41,-56 + 3692: -39,-57 + 3693: -40,-58 + 3694: -37,-57 + 3695: -37,-58 + 3696: -37,-61 + 3697: -37,-64 + 3698: -37,-65 + 3699: -36,-65 + 3700: -36,-66 + 3701: -39,-66 + 3702: -40,-65 + 3703: -40,-63 + 3704: -40,-60 + 3705: -47,-44 + 3706: -47,-42 + 3707: -47,-39 + 3708: -47,-35 + 3709: -47,-33 + 3710: -49,-33 + 3711: -49,-37 + 3712: -49,-39 + 3713: -49,-41 + 3714: -49,-44 + 3715: -49,-44 + 3716: -49,-43 + 3717: -44,-32 + 3718: -44,-30 + 3719: -43,-31 + 3720: -43,-27 + 3721: -44,-26 + 3722: -43,-26 + 3723: -44,-25 + 3724: -52,-32 + 3725: -52,-30 + 3726: -52,-29 + 3727: -52,-25 + 3728: -52,-22 + 3729: -54,-22 + 3730: -55,-22 + 3731: -52,-20 + 3732: -50,-20 + 3733: -47,-20 + 3734: -46,-20 + 3735: -45,-20 + 3736: -44,-20 + 3737: -44,-22 + 3738: -51,-18 + 3739: -51,-17 + 3740: -49,-17 + 3741: -48,-15 + 3742: -48,-13 + 3743: -50,-13 + 3744: -51,-14 + 3745: -51,-15 + 3746: -44,-15 + 3747: -46,-15 + 3748: -46,-14 + 3749: -54,-24 + 3750: -56,-24 + 3751: -54,-30 + 3752: -56,-29 + 3753: -57,-28 + 3754: -54,-28 + 3755: -61,-29 + 3756: -59,-29 + 3757: -59,-27 + 3758: -59,-25 + 3759: -61,-25 + 3760: -55,-17 + 3761: -55,-15 + 3762: -55,-13 + 3763: -55,-10 + 3764: -53,-17 + 3765: -53,-14 + 3766: -53,-12 + 3767: -53,-11 + 3768: -53,-9 + 3769: -53,-7 + 3770: -53,-6 + 3771: -53,-4 + 3772: -55,-3 + 3773: -55,-7 + 3774: -55,-8 + 3775: -53,0 + 3776: -53,-2 + 3777: -51,-4 + 3778: -49,-4 + 3779: -50,-5 + 3780: -48,-5 + 3789: -53,2 + 3790: -53,4 + 3791: -53,6 + 3792: -53,7 + 3793: -55,7 + 3794: -55,5 + 3795: -55,-1 + 3796: -51,6 + 3797: -50,7 + 3798: -47,7 + 3799: -48,6 + 3800: -46,6 + 3801: -45,7 + 3802: -47,9 + 3803: -45,9 + 3804: -44,9 + 3805: -50,9 + 3806: -50,9 + 3807: -51,11 + 3808: -51,13 + 3809: -50,13 + 3810: -48,13 + 3811: -46,13 + 3812: -48,12 + 3813: -43,11 + 3814: -44,12 + 3815: -43,13 + 3816: -43,12 + 3817: -54,10 + 3818: -53,9 + 3819: -54,9 + 3842: -43,1 + 3843: -40,2 + 3844: -39,1 + 3845: -39,1 + 3846: -40,-1 + 3847: -38,-1 + 3848: -40,-2 + 3849: -39,-2 + 3850: -40,-4 + 3851: -39,-5 + 3852: -38,-5 + 3853: -37,-5 + 3854: -36,-5 + 3855: -38,-4 + 3856: -36,-3 + 3857: -36,-2 + 3858: -36,-4 + 3859: -34,-3 + 3860: -32,-4 + 3861: -34,-1 + 3862: -32,0 + 3863: -35,0 + 3864: -39,3 + 3865: -40,4 + 3866: -38,4 + 3867: -33,1 + 3868: -31,2 + 3869: -31,-1 + 3870: -29,0 + 3871: -32,-2 + 3872: -31,-3 + 3873: -33,-4 + 3874: -32,-5 + 3875: -31,-4 + 3876: -30,-3 + 3877: -28,-3 + 3878: -28,-4 + 3879: -26,-5 + 3880: -27,-2 + 3881: -27,-3 + 3882: -29,0 + 3883: -27,0 + 3884: -27,2 + 3885: -28,3 + 3886: -27,3 + 3887: -27,1 + 3888: -26,-1 + 3889: -32,-1 + 3890: -28,4 + 3891: -26,5 + 3892: -26,6 + 3893: -26,3 + 3894: -26,3 + 3895: -24,2 + 3896: -23,1 + 3897: -25,0 + 3898: -23,-2 + 3899: -25,-3 + 3900: -23,-3 + 3901: -25,-4 + 3902: -23,-5 + 3903: -25,-5 + 3904: -24,-1 + 3905: -25,-1 + 3906: -23,3 + 3907: -15,-1 + 3908: -16,-1 + 3909: -15,0 + 3910: -16,1 + 3911: -16,3 + 3912: -15,3 + 3913: -15,2 + 3914: -15,1 + 3915: -15,1 + 3916: -27,6 + 3917: -27,7 + 3918: -27,9 + 3919: -20,5 + 3920: -21,5 + 3925: -17,5 + 3926: -16,5 + 3927: -16,5 + 3928: -22,11 + 3929: -21,11 + 3930: -22,13 + 3931: -20,14 + 3932: -22,13 + 3933: -22,15 + 3934: -20,14 + 3935: -20,13 + 3936: -20,12 + 3937: -19,11 + 3938: -22,14 + 3939: -23,14 + 3940: -17,11 + 3941: -17,11 + 3942: -17,12 + 3943: -16,11 + 3944: -16,12 + 3945: -17,13 + 3946: -16,14 + 3947: -17,14 3948: -16,12 - 3949: -17,13 - 3950: -16,14 - 3951: -17,14 - 3952: -16,12 - 3953: -17,12 - 3954: -17,11 - 3957: -34,12 - 3958: -35,12 - 3959: -34,14 - 3960: -35,15 - 3961: -34,16 - 3962: -34,17 + 3949: -17,12 + 3950: -17,11 + 3953: -34,12 + 3954: -35,12 + 3955: -34,14 + 3956: -35,15 + 3957: -34,16 + 3958: -34,17 + 3959: -33,16 + 3960: -32,15 + 3961: -31,17 + 3962: -32,17 3963: -33,16 - 3964: -32,15 - 3965: -31,17 - 3966: -32,17 - 3967: -33,16 - 3968: -34,15 - 3969: -34,15 - 3970: -37,14 - 3971: -38,14 - 3972: -39,14 - 3973: -39,12 - 3974: -39,11 - 3975: -38,11 - 3976: -38,11 - 3977: -27,11 - 3978: -27,13 - 3979: -27,16 - 3980: -27,17 - 3981: -27,19 - 3982: -27,20 - 3983: -27,21 - 3984: -25,18 - 3985: -25,16 - 3986: -25,14 - 3987: -25,12 - 3988: -25,11 - 3989: -24,18 - 3990: -22,18 - 3991: -23,17 - 3992: -21,17 - 3993: -20,18 - 3994: -19,17 - 3995: -20,20 - 3996: -22,20 - 3997: -24,20 - 3998: -20,21 - 3999: -17,19 - 4000: -16,19 - 4001: -14,19 - 4002: -17,21 - 4003: -15,21 - 4004: -13,21 - 4005: -11,21 - 4006: -13,19 - 4007: -10,19 - 4008: -8,19 - 4009: -6,19 - 4010: -9,21 - 4011: -7,21 - 4012: -5,21 - 4013: -3,21 + 3964: -34,15 + 3965: -34,15 + 3966: -37,14 + 3967: -38,14 + 3968: -39,14 + 3969: -39,12 + 3970: -39,11 + 3971: -38,11 + 3972: -38,11 + 3973: -27,11 + 3974: -27,13 + 3975: -27,16 + 3976: -27,17 + 3977: -27,19 + 3978: -27,20 + 3979: -27,21 + 3980: -25,18 + 3981: -25,16 + 3982: -25,14 + 3983: -25,12 + 3984: -25,11 + 3985: -24,18 + 3986: -22,18 + 3987: -23,17 + 3988: -21,17 + 3989: -20,18 + 3990: -19,17 + 3991: -20,20 + 3992: -22,20 + 3993: -24,20 + 3994: -20,21 + 3995: -17,19 + 3996: -16,19 + 3997: -14,19 + 3998: -17,21 + 3999: -15,21 + 4000: -13,21 + 4001: -11,21 + 4002: -13,19 + 4003: -10,19 + 4004: -8,19 + 4005: -6,19 + 4006: -9,21 + 4007: -7,21 + 4008: -5,21 + 4009: -3,21 + 4010: 0,21 + 4011: -5,19 + 4012: -2,19 + 4013: 0,19 4014: 0,21 - 4015: -5,19 - 4016: -2,19 - 4017: 0,19 - 4018: 0,21 - 4019: 2,21 - 4020: 5,21 - 4021: 6,21 - 4022: 2,19 - 4023: 4,19 - 4024: 7,19 - 4025: 10,19 - 4026: 8,21 - 4027: 10,21 - 4028: 11,21 - 4029: 13,21 - 4030: 12,19 - 4031: 14,19 - 4032: 15,19 - 4033: 17,19 - 4034: 15,23 - 4035: 14,23 - 4036: 13,24 - 4037: 15,25 - 4038: 15,24 - 4039: 11,23 - 4040: 10,23 - 4041: 11,24 - 4042: 17,23 - 4043: 17,25 - 4044: 17,25 - 4045: 16,23 - 4046: 18,19 - 4047: 19,19 - 4048: 19,21 - 4049: 17,21 - 4050: 16,21 - 4051: 21,20 - 4052: 21,18 - 4053: 21,17 - 4054: 19,18 - 4055: 19,15 - 4056: 19,12 - 4057: 19,11 - 4058: 21,16 - 4059: 21,13 - 4060: 21,12 - 4061: 21,10 - 4062: 21,8 - 4063: 21,7 - 4064: 19,9 - 4065: 19,7 - 4066: 19,6 - 4067: 23,10 - 4068: 24,10 - 4069: 26,10 - 4070: 27,10 - 4071: 28,7 - 4072: 27,8 - 4073: 27,6 - 4074: 28,6 - 4075: 30,6 - 4076: 30,8 - 4077: 30,9 - 4078: 30,10 - 4079: 33,10 - 4080: 34,10 - 4081: 31,12 - 4082: 31,13 - 4083: 30,14 - 4084: 31,17 - 4085: 30,17 - 4086: 31,19 - 4087: 31,20 - 4088: 31,22 - 4089: 30,22 - 4090: 28,22 - 4091: 29,23 - 4092: 26,22 - 4093: 24,22 - 4094: 23,22 - 4095: 23,23 - 4096: 23,20 - 4097: 23,18 - 4098: 25,18 - 4099: 25,17 - 4100: 26,18 - 4101: 27,17 - 4102: 26,19 - 4103: 27,20 - 4104: 29,18 - 4105: 27,18 - 4106: 30,17 - 4107: 33,22 - 4108: 35,22 - 4109: 33,19 - 4110: 33,18 - 4111: 35,18 - 4112: 36,17 - 4113: 34,17 - 4114: 35,17 - 4115: 33,13 - 4116: 33,15 - 4117: 33,15 - 4118: 32,13 - 4119: 26,7 - 4120: 23,2 - 4121: 26,2 - 4122: 20,2 - 4123: 21,2 - 4124: 19,4 - 4130: 31,2 - 4131: 33,2 - 4132: 33,4 - 4133: 32,4 - 4134: 35,4 - 4135: 37,4 - 4136: 37,2 - 4137: 40,2 - 4138: 41,2 - 4139: 41,1 - 4140: 38,2 - 4141: 39,-4 - 4142: 37,-4 - 4143: 39,-5 - 4144: 33,-1 - 4145: 31,-1 - 4146: 31,0 - 4147: 33,0 - 4148: 32,1 - 4149: 38,7 - 4150: 46,11 - 4151: 47,13 - 4152: 44,11 - 4153: 44,13 - 4154: 42,12 - 4155: 42,11 - 4156: 44,12 - 4157: 54,14 - 4158: 58,14 - 4159: 59,14 - 4160: 60,14 - 4161: 58,16 - 4162: 55,10 - 4163: 55,12 - 4164: 54,12 - 4165: 54,6 - 4166: 59,3 - 4167: 60,4 - 4168: 59,0 - 4169: 55,-5 - 4170: 56,-4 - 4171: 57,-5 - 4172: 58,-7 - 4173: 59,-8 - 4174: 60,-7 - 4175: 41,-1 - 4176: 41,-3 - 4177: 41,-5 - 4178: 41,-7 - 4179: 41,-10 - 4180: 41,-11 - 4181: 43,-12 - 4182: 43,-14 - 4183: 43,-16 - 4184: 43,-17 - 4185: 41,-15 - 4186: 41,-16 - 4187: 41,-17 - 4188: 41,-19 - 4189: 40,-19 - 4190: 40,-21 - 4191: 42,-21 - 4192: 43,-21 - 4193: 45,-21 - 4198: 45,-19 - 4199: 47,-19 - 4200: 48,-19 - 4201: 51,-19 - 4202: 47,-21 - 4203: 49,-21 - 4204: 47,-22 - 4205: 51,-21 - 4206: 52,-21 - 4207: 52,-23 - 4208: 53,-24 - 4209: 56,-24 - 4210: 57,-24 - 4211: 58,-24 - 4212: 58,-23 - 4213: 59,-21 - 4214: 60,-21 - 4215: 61,-20 - 4216: 59,-19 - 4217: 61,-19 - 4218: 60,-17 - 4219: 60,-17 - 4220: 58,-18 - 4221: 58,-19 - 4222: 56,-19 - 4223: 55,-19 - 4224: 53,-19 - 4225: 60,-15 - 4226: 58,-15 - 4227: 59,-14 - 4228: 57,-13 - 4229: 57,-12 - 4230: 60,-13 - 4231: 60,-12 - 4232: 60,-14 - 4233: 61,-13 - 4234: 63,-13 - 4235: 64,-12 - 4236: 65,-14 - 4237: 63,-14 - 4238: 63,-16 - 4239: 65,-16 - 4240: 65,-18 - 4241: 65,-20 - 4242: 63,-18 - 4243: 63,-20 - 4244: 63,-21 - 4245: 65,-21 - 4246: 62,-23 - 4247: 61,-24 - 4248: 64,-24 - 4249: 63,-25 - 4250: 64,-26 - 4251: 65,-27 - 4252: 66,-26 - 4253: 65,-24 - 4254: 65,-23 - 4255: 65,-23 - 4259: 68,-21 - 4260: 69,-21 - 4261: 69,-23 - 4262: 69,-24 - 4264: 69,-27 - 4265: 70,-26 - 4266: 70,-26 - 4267: 71,-27 - 4268: 71,-28 - 4269: 70,-28 - 4270: 68,-28 - 4271: 69,-29 - 4272: 70,-30 - 4273: 69,-30 - 4274: 70,-29 - 4275: 70,-29 - 4276: 70,-29 - 4277: 71,-30 - 4278: 71,-17 - 4279: 68,-17 - 4280: 67,-19 - 4281: 70,-17 - 4282: 70,-19 - 4283: 71,-18 - 4284: 68,-18 - 4285: 69,-19 - 4305: 69,-9 - 4306: 68,-9 - 4307: 67,-9 - 4308: 70,-10 - 4309: 77,-18 - 4310: 75,-18 - 4311: 76,-19 - 4312: 77,-18 - 4313: 76,-17 - 4314: 76,-15 - 4315: 75,-15 - 4316: 76,-13 - 4317: 77,-14 - 4318: 74,-14 - 4319: 74,-16 - 4320: 73,-14 - 4321: 74,-17 - 4322: 74,-18 - 4323: 72,-17 - 4324: 73,-19 - 4325: 73,-17 - 4326: 74,-16 - 4327: 73,-15 - 4328: 74,-16 - 4329: 74,-15 - 4330: 76,-18 - 4331: 79,-14 - 4332: 80,-13 - 4333: 81,-14 - 4334: 79,-14 - 4335: 80,-15 - 4336: 81,-13 - 4337: 80,-19 - 4338: 79,-18 - 4339: 80,-18 - 4340: 80,-19 - 4341: 79,-19 - 4342: 80,-19 - 4343: 81,-19 - 4344: 80,-17 - 4345: 80,-18 - 4346: 79,-19 - 4347: 50,-13 - 4348: 51,-14 - 4349: 50,-13 - 4350: 51,-13 - 4351: 50,-14 - 4352: 50,-14 - 4353: 48,-13 - 4354: 48,-14 - 4355: 48,-13 + 4015: 2,21 + 4016: 5,21 + 4017: 6,21 + 4018: 2,19 + 4019: 4,19 + 4020: 7,19 + 4021: 10,19 + 4022: 8,21 + 4023: 10,21 + 4024: 11,21 + 4025: 13,21 + 4026: 12,19 + 4027: 14,19 + 4028: 15,19 + 4029: 17,19 + 4030: 15,23 + 4031: 14,23 + 4032: 13,24 + 4033: 15,25 + 4034: 15,24 + 4035: 11,23 + 4036: 10,23 + 4037: 11,24 + 4038: 17,23 + 4039: 17,25 + 4040: 17,25 + 4041: 16,23 + 4042: 18,19 + 4043: 19,19 + 4044: 19,21 + 4045: 17,21 + 4046: 16,21 + 4047: 21,20 + 4048: 21,18 + 4049: 21,17 + 4050: 19,18 + 4051: 19,15 + 4052: 19,12 + 4053: 19,11 + 4054: 21,16 + 4055: 21,13 + 4056: 21,12 + 4057: 21,10 + 4058: 21,8 + 4059: 21,7 + 4060: 19,9 + 4061: 19,7 + 4062: 19,6 + 4063: 23,10 + 4064: 24,10 + 4065: 26,10 + 4066: 27,10 + 4067: 28,7 + 4068: 27,8 + 4069: 27,6 + 4070: 28,6 + 4071: 30,6 + 4072: 30,8 + 4073: 30,9 + 4074: 30,10 + 4075: 33,10 + 4076: 34,10 + 4077: 31,12 + 4078: 31,13 + 4079: 30,14 + 4080: 31,17 + 4081: 30,17 + 4082: 31,19 + 4083: 31,20 + 4084: 31,22 + 4085: 30,22 + 4086: 28,22 + 4087: 29,23 + 4088: 26,22 + 4089: 24,22 + 4090: 23,22 + 4091: 23,23 + 4092: 23,20 + 4093: 23,18 + 4094: 25,18 + 4095: 25,17 + 4096: 26,18 + 4097: 27,17 + 4098: 26,19 + 4099: 27,20 + 4100: 29,18 + 4101: 27,18 + 4102: 30,17 + 4103: 33,22 + 4104: 35,22 + 4105: 33,19 + 4106: 33,18 + 4107: 35,18 + 4108: 36,17 + 4109: 34,17 + 4110: 35,17 + 4111: 33,13 + 4112: 33,15 + 4113: 33,15 + 4114: 32,13 + 4115: 26,7 + 4116: 23,2 + 4117: 26,2 + 4118: 20,2 + 4119: 21,2 + 4120: 19,4 + 4126: 31,2 + 4127: 33,2 + 4128: 33,4 + 4129: 32,4 + 4130: 35,4 + 4131: 37,4 + 4132: 37,2 + 4133: 40,2 + 4134: 41,2 + 4135: 41,1 + 4136: 38,2 + 4137: 39,-4 + 4138: 37,-4 + 4139: 39,-5 + 4140: 33,-1 + 4141: 31,-1 + 4142: 31,0 + 4143: 33,0 + 4144: 32,1 + 4145: 38,7 + 4146: 46,11 + 4147: 47,13 + 4148: 44,11 + 4149: 44,13 + 4150: 42,12 + 4151: 42,11 + 4152: 44,12 + 4153: 54,14 + 4154: 58,14 + 4155: 59,14 + 4156: 60,14 + 4157: 58,16 + 4158: 55,10 + 4159: 55,12 + 4160: 54,12 + 4161: 54,6 + 4162: 59,3 + 4163: 60,4 + 4164: 59,0 + 4165: 55,-5 + 4166: 56,-4 + 4167: 57,-5 + 4168: 58,-7 + 4169: 59,-8 + 4170: 60,-7 + 4171: 41,-1 + 4172: 41,-3 + 4173: 41,-5 + 4174: 41,-7 + 4175: 41,-10 + 4176: 41,-11 + 4177: 43,-12 + 4178: 43,-14 + 4179: 43,-16 + 4180: 43,-17 + 4181: 41,-15 + 4182: 41,-16 + 4183: 41,-17 + 4184: 41,-19 + 4185: 40,-19 + 4186: 40,-21 + 4187: 42,-21 + 4188: 43,-21 + 4189: 45,-21 + 4194: 45,-19 + 4195: 47,-19 + 4196: 48,-19 + 4197: 51,-19 + 4198: 47,-21 + 4199: 49,-21 + 4200: 47,-22 + 4201: 51,-21 + 4202: 52,-21 + 4203: 52,-23 + 4204: 53,-24 + 4205: 56,-24 + 4206: 57,-24 + 4207: 58,-24 + 4208: 58,-23 + 4209: 59,-21 + 4210: 60,-21 + 4211: 61,-20 + 4212: 59,-19 + 4213: 61,-19 + 4214: 60,-17 + 4215: 60,-17 + 4216: 58,-18 + 4217: 58,-19 + 4218: 56,-19 + 4219: 55,-19 + 4220: 53,-19 + 4221: 60,-15 + 4222: 58,-15 + 4223: 59,-14 + 4224: 57,-13 + 4225: 57,-12 + 4226: 60,-13 + 4227: 60,-12 + 4228: 60,-14 + 4229: 61,-13 + 4230: 63,-13 + 4231: 64,-12 + 4232: 65,-14 + 4233: 63,-14 + 4234: 63,-16 + 4235: 65,-16 + 4236: 65,-18 + 4237: 65,-20 + 4238: 63,-18 + 4239: 63,-20 + 4240: 63,-21 + 4241: 65,-21 + 4242: 62,-23 + 4243: 61,-24 + 4244: 64,-24 + 4245: 63,-25 + 4246: 64,-26 + 4247: 65,-27 + 4248: 66,-26 + 4249: 65,-24 + 4250: 65,-23 + 4251: 65,-23 + 4255: 68,-21 + 4256: 69,-21 + 4257: 69,-23 + 4258: 69,-24 + 4260: 69,-27 + 4261: 70,-26 + 4262: 70,-26 + 4263: 71,-27 + 4264: 71,-28 + 4265: 70,-28 + 4266: 68,-28 + 4267: 69,-29 + 4268: 70,-30 + 4269: 69,-30 + 4270: 70,-29 + 4271: 70,-29 + 4272: 70,-29 + 4273: 71,-30 + 4274: 71,-17 + 4275: 68,-17 + 4276: 67,-19 + 4277: 70,-17 + 4278: 70,-19 + 4279: 71,-18 + 4280: 68,-18 + 4281: 69,-19 + 4301: 69,-9 + 4302: 68,-9 + 4303: 67,-9 + 4304: 70,-10 + 4305: 77,-18 + 4306: 75,-18 + 4307: 76,-19 + 4308: 77,-18 + 4309: 76,-17 + 4310: 76,-15 + 4311: 75,-15 + 4312: 76,-13 + 4313: 77,-14 + 4314: 74,-14 + 4315: 74,-16 + 4316: 73,-14 + 4317: 74,-17 + 4318: 74,-18 + 4319: 72,-17 + 4320: 73,-19 + 4321: 73,-17 + 4322: 74,-16 + 4323: 73,-15 + 4324: 74,-16 + 4325: 74,-15 + 4326: 76,-18 + 4327: 79,-14 + 4328: 80,-13 + 4329: 81,-14 + 4330: 79,-14 + 4331: 80,-15 + 4332: 81,-13 + 4333: 80,-19 + 4334: 79,-18 + 4335: 80,-18 + 4336: 80,-19 + 4337: 79,-19 + 4338: 80,-19 + 4339: 81,-19 + 4340: 80,-17 + 4341: 80,-18 + 4342: 79,-19 + 4343: 50,-13 + 4344: 51,-14 + 4345: 50,-13 + 4346: 51,-13 + 4347: 50,-14 + 4348: 50,-14 + 4349: 48,-13 + 4350: 48,-14 + 4351: 48,-13 + 4352: 53,-13 + 4353: 53,-14 + 4354: 53,-12 + 4355: 53,-14 4356: 53,-13 4357: 53,-14 - 4358: 53,-12 - 4359: 53,-14 - 4360: 53,-13 - 4361: 53,-14 - 4362: 50,-15 - 4363: 51,-15 - 4364: 50,-14 - 4365: 51,-13 - 4366: 50,-12 - 4367: 50,-12 - 4368: 48,-12 - 4369: 50,-12 - 4370: 51,-13 - 4371: 47,-24 - 4372: 49,-25 - 4373: 48,-26 - 4374: 47,-25 - 4375: 49,-25 - 4376: 48,-23 - 4377: 47,-28 - 4378: 49,-29 - 4379: 47,-30 - 4380: 48,-32 - 4381: 49,-31 - 4382: 48,-33 - 4383: 47,-33 - 4384: 49,-33 - 4385: 48,-34 - 4386: 47,-34 - 4387: 43,-36 + 4358: 50,-15 + 4359: 51,-15 + 4360: 50,-14 + 4361: 51,-13 + 4362: 50,-12 + 4363: 50,-12 + 4364: 48,-12 + 4365: 50,-12 + 4366: 51,-13 + 4367: 47,-24 + 4368: 49,-25 + 4369: 48,-26 + 4370: 47,-25 + 4371: 49,-25 + 4372: 48,-23 + 4373: 47,-28 + 4374: 49,-29 + 4375: 47,-30 + 4376: 48,-32 + 4377: 49,-31 + 4378: 48,-33 + 4379: 47,-33 + 4380: 49,-33 + 4381: 48,-34 + 4382: 47,-34 + 4383: 43,-36 + 4384: 40,-36 + 4385: 37,-35 + 4386: 36,-35 + 4387: 37,-36 4388: 40,-36 - 4389: 37,-35 - 4390: 36,-35 - 4391: 37,-36 - 4392: 40,-36 - 4393: 43,-35 - 4394: 43,-35 - 4395: 41,-35 - 4396: 43,-35 - 4397: 43,-34 - 4423: 33,-34 - 4424: 31,-34 - 4425: 33,-32 - 4426: 32,-32 - 4427: 32,-31 - 4428: 32,-30 - 4429: 33,-28 - 4430: 31,-29 - 4431: 33,-31 - 4432: 33,-31 - 4433: 35,-30 - 4434: 36,-30 - 4435: 36,-29 + 4389: 43,-35 + 4390: 43,-35 + 4391: 41,-35 + 4392: 43,-35 + 4393: 43,-34 + 4419: 33,-34 + 4420: 31,-34 + 4421: 33,-32 + 4422: 32,-32 + 4423: 32,-31 + 4424: 32,-30 + 4425: 33,-28 + 4426: 31,-29 + 4427: 33,-31 + 4428: 33,-31 + 4429: 35,-30 + 4430: 36,-30 + 4431: 36,-29 + 4432: 33,-25 + 4433: 31,-25 + 4434: 33,-25 + 4435: 31,-25 4436: 33,-25 - 4437: 31,-25 - 4438: 33,-25 - 4439: 31,-25 - 4440: 33,-25 - 4441: 32,-26 - 4442: 31,-25 - 4443: 32,-24 - 4444: 32,-25 - 4445: 31,-24 - 4446: 40,-25 - 4447: 39,-24 - 4448: 40,-26 - 4449: 42,-25 - 4450: 42,-25 - 4451: 44,-24 - 4452: 42,-25 - 4453: 44,-25 - 4454: 45,-25 - 4455: 42,-26 - 4456: 43,-25 - 4457: 43,-25 - 4458: 41,-25 - 4459: 40,-25 - 4460: 40,-25 - 4461: 40,-24 - 4462: 35,-23 - 4463: 37,-23 - 4464: 36,-23 - 4465: 35,-23 - 4466: 38,-21 - 4467: 35,-21 - 4468: 33,-21 - 4469: 33,-22 - 4470: 32,-22 - 4471: 32,-21 - 4472: 37,-19 - 4473: 34,-19 - 4474: 32,-19 - 4475: 31,-19 - 4476: 28,-19 - 4477: 27,-19 - 4478: 27,-20 - 4479: 27,-21 - 4480: 30,-21 - 4481: 29,-21 - 4482: 29,-23 - 4483: 29,-24 - 4484: 29,-25 - 4485: 29,-26 - 4486: 27,-22 - 4487: 27,-24 - 4488: 27,-25 - 4489: 26,-25 - 4490: 25,-25 - 4491: 29,-27 - 4492: 27,-27 - 4493: 25,-27 - 4494: 24,-27 - 4495: 21,-27 - 4496: 21,-25 - 4497: 20,-25 - 4498: 19,-25 - 4499: 19,-26 - 4500: 19,-28 - 4501: 19,-28 - 4502: 19,-30 - 4503: 19,-31 - 4504: 19,-32 - 4505: 21,-30 - 4506: 21,-33 - 4507: 21,-34 - 4508: 21,-34 - 4509: 19,-34 - 4510: 20,-36 - 4511: 20,-37 - 4512: 19,-37 - 4513: 20,-39 - 4514: 21,-38 - 4515: 22,-39 - 4516: 21,-37 - 4517: 24,-37 - 4518: 23,-38 - 4519: 25,-37 - 4520: 25,-38 - 4521: 24,-38 - 4522: 25,-38 - 4523: 17,-34 - 4524: 17,-35 - 4525: 16,-34 - 4526: 14,-34 - 4527: 17,-32 - 4528: 15,-32 - 4529: 13,-32 - 4530: 11,-32 - 4531: 10,-32 - 4532: 12,-34 - 4533: 9,-34 - 4534: 8,-34 - 4535: 7,-34 - 4536: 7,-32 - 4537: 7,-32 - 4538: 6,-32 - 4539: 9,-30 - 4540: 8,-29 - 4541: 7,-29 - 4542: 7,-29 - 4543: 6,-28 - 4544: 8,-27 - 4545: 9,-27 - 4546: 7,-28 - 4547: 6,-27 - 4548: 5,-29 - 4549: 7,-30 - 4550: 9,-30 - 4551: 3,-30 - 4552: 1,-30 - 4553: 3,-32 - 4554: 2,-32 - 4555: 2,-33 - 4556: 0,-33 - 4557: -1,-33 - 4558: -1,-32 - 4559: 0,-30 - 4560: -3,-30 - 4561: -4,-30 - 4562: -6,-30 - 4563: -7,-30 - 4564: -9,-30 - 4565: -6,-32 - 4566: -5,-32 - 4567: -3,-32 - 4568: -8,-32 - 4569: -8,-33 - 4570: -9,-32 - 4571: -10,-32 - 4572: -11,-32 - 4573: -13,-32 - 4574: -10,-30 - 4575: -11,-30 - 4576: -13,-30 - 4577: -15,-30 - 4578: -16,-30 - 4579: -12,-29 - 4580: -12,-30 - 4581: -16,-32 - 4582: -17,-33 - 4583: -17,-32 - 4584: -19,-32 - 4585: -18,-30 - 4586: -20,-30 - 4587: -22,-30 - 4588: -23,-30 - 4589: -23,-29 - 4590: -22,-32 - 4591: -24,-32 - 4592: -24,-32 - 4593: -26,-30 - 4594: -26,-29 - 4595: -26,-27 - 4596: -26,-25 - 4597: -24,-27 - 4598: -24,-26 - 4599: -24,-25 - 4600: -24,-24 - 4601: -26,-23 - 4602: -26,-22 - 4603: -26,-20 - 4604: -24,-21 - 4605: -24,-19 - 4606: -24,-18 - 4607: -24,-16 - 4608: -26,-17 - 4609: -26,-16 - 4610: -26,-14 - 4611: -26,-13 - 4612: -26,-12 - 4613: -26,-10 - 4614: -26,-9 - 4615: -25,-9 - 4616: -24,-11 - 4617: -23,-11 - 4618: -23,-10 - 4619: -23,-9 - 4620: -24,-5 - 4621: -24,-4 - 4622: -24,-2 - 4623: -19,-11 - 4624: -19,-10 - 4625: -20,-10 - 4626: -20,-9 - 4627: -19,-9 - 4628: -30,-21 - 4629: -30,-19 - 4630: -29,-19 - 4631: -30,-18 - 4632: -32,-21 - 4633: -32,-19 - 4634: -33,-18 - 4635: -34,-18 - 4636: -36,-15 - 4637: -36,-14 - 4638: -33,-14 - 4639: -33,-14 - 4640: -33,-15 - 4641: -30,-14 - 4642: -36,-10 - 4643: -37,-9 - 4644: -37,-10 - 4645: -29,-10 - 4646: -30,-11 - 4647: -30,-9 - 4648: -28,-10 - 4649: -40,-11 + 4437: 32,-26 + 4438: 31,-25 + 4439: 32,-24 + 4440: 32,-25 + 4441: 31,-24 + 4442: 40,-25 + 4443: 39,-24 + 4444: 40,-26 + 4445: 42,-25 + 4446: 42,-25 + 4447: 44,-24 + 4448: 42,-25 + 4449: 44,-25 + 4450: 45,-25 + 4451: 42,-26 + 4452: 43,-25 + 4453: 43,-25 + 4454: 41,-25 + 4455: 40,-25 + 4456: 40,-25 + 4457: 40,-24 + 4458: 35,-23 + 4459: 37,-23 + 4460: 36,-23 + 4461: 35,-23 + 4462: 38,-21 + 4463: 35,-21 + 4464: 33,-21 + 4465: 33,-22 + 4466: 32,-22 + 4467: 32,-21 + 4468: 37,-19 + 4469: 34,-19 + 4470: 32,-19 + 4471: 31,-19 + 4472: 28,-19 + 4473: 27,-19 + 4474: 27,-20 + 4475: 27,-21 + 4476: 30,-21 + 4477: 29,-21 + 4478: 29,-23 + 4479: 29,-24 + 4480: 29,-25 + 4481: 29,-26 + 4482: 27,-22 + 4483: 27,-24 + 4484: 27,-25 + 4485: 26,-25 + 4486: 25,-25 + 4487: 29,-27 + 4488: 27,-27 + 4489: 25,-27 + 4490: 24,-27 + 4491: 21,-27 + 4492: 21,-25 + 4493: 20,-25 + 4494: 19,-25 + 4495: 19,-26 + 4496: 19,-28 + 4497: 19,-28 + 4498: 19,-30 + 4499: 19,-31 + 4500: 19,-32 + 4501: 21,-30 + 4502: 21,-33 + 4503: 21,-34 + 4504: 21,-34 + 4505: 19,-34 + 4506: 20,-36 + 4507: 20,-37 + 4508: 19,-37 + 4509: 20,-39 + 4510: 21,-38 + 4511: 22,-39 + 4512: 21,-37 + 4513: 24,-37 + 4514: 23,-38 + 4515: 25,-37 + 4516: 25,-38 + 4517: 24,-38 + 4518: 25,-38 + 4519: 17,-34 + 4520: 17,-35 + 4521: 16,-34 + 4522: 14,-34 + 4523: 17,-32 + 4524: 15,-32 + 4525: 13,-32 + 4526: 11,-32 + 4527: 10,-32 + 4528: 12,-34 + 4529: 9,-34 + 4530: 8,-34 + 4531: 7,-34 + 4532: 7,-32 + 4533: 7,-32 + 4534: 6,-32 + 4535: 9,-30 + 4536: 8,-29 + 4537: 7,-29 + 4538: 7,-29 + 4539: 6,-28 + 4540: 8,-27 + 4541: 9,-27 + 4542: 7,-28 + 4543: 6,-27 + 4544: 5,-29 + 4545: 7,-30 + 4546: 9,-30 + 4547: 3,-30 + 4548: 1,-30 + 4549: 3,-32 + 4550: 2,-32 + 4551: 2,-33 + 4552: 0,-33 + 4553: -1,-33 + 4554: -1,-32 + 4555: 0,-30 + 4556: -3,-30 + 4557: -4,-30 + 4558: -6,-30 + 4559: -7,-30 + 4560: -9,-30 + 4561: -6,-32 + 4562: -5,-32 + 4563: -3,-32 + 4564: -8,-32 + 4565: -8,-33 + 4566: -9,-32 + 4567: -10,-32 + 4568: -11,-32 + 4569: -13,-32 + 4570: -10,-30 + 4571: -11,-30 + 4572: -13,-30 + 4573: -15,-30 + 4574: -16,-30 + 4575: -12,-29 + 4576: -12,-30 + 4577: -16,-32 + 4578: -17,-33 + 4579: -17,-32 + 4580: -19,-32 + 4581: -18,-30 + 4582: -20,-30 + 4583: -22,-30 + 4584: -23,-30 + 4585: -23,-29 + 4586: -22,-32 + 4587: -24,-32 + 4588: -24,-32 + 4589: -26,-30 + 4590: -26,-29 + 4591: -26,-27 + 4592: -26,-25 + 4593: -24,-27 + 4594: -24,-26 + 4595: -24,-25 + 4596: -24,-24 + 4597: -26,-23 + 4598: -26,-22 + 4599: -26,-20 + 4600: -24,-21 + 4601: -24,-19 + 4602: -24,-18 + 4603: -24,-16 + 4604: -26,-17 + 4605: -26,-16 + 4606: -26,-14 + 4607: -26,-13 + 4608: -26,-12 + 4609: -26,-10 + 4610: -26,-9 + 4611: -25,-9 + 4612: -24,-11 + 4613: -23,-11 + 4614: -23,-10 + 4615: -23,-9 + 4616: -24,-5 + 4617: -24,-4 + 4618: -24,-2 + 4619: -19,-11 + 4620: -19,-10 + 4621: -20,-10 + 4622: -20,-9 + 4623: -19,-9 + 4624: -30,-21 + 4625: -30,-19 + 4626: -29,-19 + 4627: -30,-18 + 4628: -32,-21 + 4629: -32,-19 + 4630: -33,-18 + 4631: -34,-18 + 4632: -36,-15 + 4633: -36,-14 + 4634: -33,-14 + 4635: -33,-14 + 4636: -33,-15 + 4637: -30,-14 + 4638: -36,-10 + 4639: -37,-9 + 4640: -37,-10 + 4641: -29,-10 + 4642: -30,-11 + 4643: -30,-9 + 4644: -28,-10 + 4645: -40,-11 + 4646: -41,-10 + 4647: -41,-9 + 4648: -40,-9 + 4649: -41,-10 4650: -41,-10 - 4651: -41,-9 - 4652: -40,-9 - 4653: -41,-10 - 4654: -41,-10 - 4655: -49,-18 - 4656: -38,-33 - 4657: -36,-33 - 4658: -33,-33 - 4659: -32,-33 - 4660: -31,-33 - 4661: -31,-31 - 4662: -31,-29 - 4663: -31,-28 - 4664: -31,-26 - 4665: -33,-26 - 4666: -35,-26 - 4667: -36,-26 - 4668: -37,-26 - 4669: -38,-26 - 4670: -38,-27 - 4671: -38,-29 - 4672: -38,-30 - 4673: -38,-31 - 4674: -38,-29 - 4675: -38,-26 - 4676: -40,-26 - 4677: -40,-25 - 4678: -41,-25 - 4679: -41,-26 - 4680: -41,-28 - 4681: -41,-29 - 4682: -41,-30 - 4683: -41,-32 - 4684: -41,-33 - 4685: -41,-34 - 4686: -39,-33 - 4687: -40,-34 - 4688: -35,-34 - 4689: -34,-34 - 4690: -32,-34 - 4691: -31,-34 - 4692: -30,-34 - 4693: -30,-33 - 4694: -28,-34 - 4695: -28,-32 - 4696: -28,-31 - 4697: -28,-29 - 4698: -28,-27 - 4699: -28,-26 - 4700: -29,-25 - 4701: -30,-25 - 4702: -30,-26 - 4703: -32,-25 - 4704: -33,-26 - 4705: -35,-25 - 4706: -32,6 - 4707: -32,7 - 4708: -32,6 - 4709: -36,6 - 4710: -36,5 - 4711: -36,7 - 4712: -34,6 - 4713: -34,5 - 4714: -35,6 - 4715: -33,6 - 4716: -35,-4 - 4717: -35,-2 - 4718: -36,-5 - 4719: -35,-2 - 4720: -34,-2 - 4721: -35,-1 - 4733: -25,28 - 4734: -26,28 - 4735: -18,32 - 4736: -17,31 - 4737: -17,33 - 4738: -18,32 - 4739: -15,34 - 4740: -15,32 - 4741: -15,31 - 4742: -13,31 - 4743: -12,31 - 4744: -15,34 - 4745: -15,34 - 4746: -12,39 - 4747: -13,40 - 4748: -14,40 - 4749: -15,40 - 4750: -16,40 - 4751: -16,40 - 4752: -13,40 - 4753: -12,40 - 4754: -12,38 - 4755: -12,40 - 4761: -5,40 - 4762: -6,40 - 4763: -6,42 - 4764: -6,43 - 4765: -5,42 - 4766: -6,43 - 4767: -6,45 - 4768: -6,46 - 4769: -6,47 - 4770: -5,46 - 4771: -4,48 - 4772: -5,46 - 4773: -2,48 - 4774: -4,46 - 4775: -1,47 - 4776: -3,45 - 4777: 0,46 - 4778: -3,47 - 4779: -1,45 - 4780: -3,46 - 4781: 1,45 - 4782: 1,47 - 4783: 0,46 - 4784: 1,48 - 4785: 2,48 - 4786: 3,47 - 4787: 2,45 - 4788: 2,44 - 4789: 2,43 - 4790: 2,42 - 4791: 1,42 - 4792: 3,42 - 4793: -2,43 - 4794: -1,41 - 4795: -3,40 - 4796: -3,40 - 4797: 1,51 - 4798: -2,50 - 4799: -3,50 - 4800: -2,51 - 4801: 0,51 - 4802: -1,52 - 4803: -2,51 - 4804: -2,53 - 4805: 1,53 - 4806: 2,51 - 4807: 2,50 - 4808: 0,50 - 4809: -4,45 - 4810: -4,47 - 4837: 6,42 - 4838: 5,41 - 4839: 5,39 - 4840: 7,39 - 4841: 8,39 - 4842: 9,41 - 4843: 9,40 - 4844: 8,42 - 4845: 8,41 - 4846: 15,37 - 4847: 14,37 - 4848: 14,35 - 4849: 14,34 - 4850: 13,35 - 4851: 13,36 - 4852: 15,34 - 4853: 16,35 - 4854: 15,36 - 4855: 15,34 - 4856: 15,35 - 4857: 15,37 - 4858: 14,37 - 4859: 15,30 - 4860: 14,29 - 4861: 14,29 - 4862: 15,28 - 4863: 14,29 - 4864: 14,32 - 4865: 13,32 - 4866: 15,24 - 4890: 2,24 - 4891: 1,24 - 4892: 1,24 - 4893: 2,23 - 4894: 4,23 - 4895: 4,24 - 4896: 3,26 - 4897: 4,28 - 4898: 2,27 - 4899: 2,27 - 4900: 3,27 - 4901: -2,25 - 4902: -3,25 - 4903: -3,23 - 4904: -2,24 - 4905: -4,23 - 4906: -4,25 - 4942: -14,28 - 4943: -15,28 - 4944: -14,29 - 4945: -13,26 - 4946: -10,26 - 4947: -9,27 - 4948: -10,28 - 4949: -7,28 - 4950: -8,26 - 4951: -5,28 - 4952: -7,24 - 4953: -8,24 - 4954: -7,23 - 4955: -6,24 - 4956: -6,23 - 4957: -7,23 - 4958: -8,23 - 4959: -8,23 - 4960: -12,23 - 4961: -11,24 - 4962: -10,23 - 4963: -10,24 - 4964: -10,24 - 4965: -12,24 - 4966: -12,24 - 4967: -14,24 - 4968: -14,23 - 4969: -16,24 - 4970: -14,24 - 4971: -15,23 - 4972: -16,24 - 4973: -14,25 - 4974: -10,25 - 4975: -7,25 - 4976: -1,28 - 4977: -3,27 - 4978: -1,30 - 4979: -1,33 - 4980: -1,34 - 4981: -1,37 - 4982: -3,37 - 4983: -3,38 - 4984: -1,37 - 4985: -2,37 - 4986: -1,40 - 4987: -3,41 - 4988: -3,43 - 4989: -2,43 - 4990: -20,25 - 4991: -21,25 - 4992: -19,25 - 4993: -21,25 - 4994: -22,17 - 4995: -23,17 - 4996: -22,5 - 4997: -22,5 - 4998: -22,5 - 4999: -19,-28 - 5000: -16,-28 - 5001: -16,-27 - 5002: -15,-28 - 5003: -16,-26 - 5004: -15,-27 - 5005: -15,-28 - 5006: -15,-26 - 5007: -15,-26 - 5008: -14,-26 - 5019: -25,-34 - 5020: -23,-34 - 5021: -22,-34 - 5022: -21,-34 - 5023: -20,-34 - 5024: -20,-37 - 5025: -20,-36 - 5026: -19,-38 - 5027: -19,-36 - 5028: -22,-37 - 5029: -23,-37 - 5030: -23,-38 - 5031: -23,-36 - 5032: -24,-37 - 5033: -26,-37 - 5034: -26,-36 - 5035: -26,-37 - 5036: -28,-40 - 5037: -27,-40 - 5038: -25,-40 - 5039: -24,-40 - 5040: -23,-40 - 5041: -21,-40 - 5042: -19,-40 - 5043: -21,-40 - 5044: -24,-40 - 5045: -26,-40 - 5046: -32,-40 - 5047: -31,-40 - 5048: -33,-39 + 4651: -49,-18 + 4652: -38,-33 + 4653: -36,-33 + 4654: -33,-33 + 4655: -32,-33 + 4656: -31,-33 + 4657: -31,-31 + 4658: -31,-29 + 4659: -31,-28 + 4660: -31,-26 + 4661: -33,-26 + 4662: -35,-26 + 4663: -36,-26 + 4664: -37,-26 + 4665: -38,-26 + 4666: -38,-27 + 4667: -38,-29 + 4668: -38,-30 + 4669: -38,-31 + 4670: -38,-29 + 4671: -38,-26 + 4672: -40,-26 + 4673: -40,-25 + 4674: -41,-25 + 4675: -41,-26 + 4676: -41,-28 + 4677: -41,-29 + 4678: -41,-30 + 4679: -41,-32 + 4680: -41,-33 + 4681: -41,-34 + 4682: -39,-33 + 4683: -40,-34 + 4684: -35,-34 + 4685: -34,-34 + 4686: -32,-34 + 4687: -31,-34 + 4688: -30,-34 + 4689: -30,-33 + 4690: -28,-34 + 4691: -28,-32 + 4692: -28,-31 + 4693: -28,-29 + 4694: -28,-27 + 4695: -28,-26 + 4696: -29,-25 + 4697: -30,-25 + 4698: -30,-26 + 4699: -32,-25 + 4700: -33,-26 + 4701: -35,-25 + 4702: -32,6 + 4703: -32,7 + 4704: -32,6 + 4705: -36,6 + 4706: -36,5 + 4707: -36,7 + 4708: -34,6 + 4709: -34,5 + 4710: -35,6 + 4711: -33,6 + 4712: -35,-4 + 4713: -35,-2 + 4714: -36,-5 + 4715: -35,-2 + 4716: -34,-2 + 4717: -35,-1 + 4729: -25,28 + 4730: -26,28 + 4731: -18,32 + 4732: -17,31 + 4733: -17,33 + 4734: -18,32 + 4735: -15,34 + 4736: -15,32 + 4737: -15,31 + 4738: -13,31 + 4739: -12,31 + 4740: -15,34 + 4741: -15,34 + 4742: -12,39 + 4743: -13,40 + 4744: -14,40 + 4745: -15,40 + 4746: -16,40 + 4747: -16,40 + 4748: -13,40 + 4749: -12,40 + 4750: -12,38 + 4751: -12,40 + 4757: -5,40 + 4758: -6,40 + 4759: -6,42 + 4760: -6,43 + 4761: -5,42 + 4762: -6,43 + 4763: -6,45 + 4764: -6,46 + 4765: -6,47 + 4766: -5,46 + 4767: -4,48 + 4768: -5,46 + 4769: -2,48 + 4770: -4,46 + 4771: -1,47 + 4772: -3,45 + 4773: 0,46 + 4774: -3,47 + 4775: -1,45 + 4776: -3,46 + 4777: 1,45 + 4778: 1,47 + 4779: 0,46 + 4780: 1,48 + 4781: 2,48 + 4782: 3,47 + 4783: 2,45 + 4784: 2,44 + 4785: 2,43 + 4786: 2,42 + 4787: 1,42 + 4788: 3,42 + 4789: -2,43 + 4790: -1,41 + 4791: -3,40 + 4792: -3,40 + 4793: 1,51 + 4794: -2,50 + 4795: -3,50 + 4796: -2,51 + 4797: 0,51 + 4798: -1,52 + 4799: -2,51 + 4800: -2,53 + 4801: 1,53 + 4802: 2,51 + 4803: 2,50 + 4804: 0,50 + 4805: -4,45 + 4806: -4,47 + 4833: 6,42 + 4834: 5,41 + 4835: 5,39 + 4836: 7,39 + 4837: 8,39 + 4838: 9,41 + 4839: 9,40 + 4840: 8,42 + 4841: 8,41 + 4842: 15,37 + 4843: 14,37 + 4844: 14,35 + 4845: 14,34 + 4846: 13,35 + 4847: 13,36 + 4848: 15,34 + 4849: 16,35 + 4850: 15,36 + 4851: 15,34 + 4852: 15,35 + 4853: 15,37 + 4854: 14,37 + 4855: 15,30 + 4856: 14,29 + 4857: 14,29 + 4858: 15,28 + 4859: 14,29 + 4860: 14,32 + 4861: 13,32 + 4862: 15,24 + 4886: 2,24 + 4887: 1,24 + 4888: 1,24 + 4889: 2,23 + 4890: 4,23 + 4891: 4,24 + 4892: 3,26 + 4893: 4,28 + 4894: 2,27 + 4895: 2,27 + 4896: 3,27 + 4897: -2,25 + 4898: -3,25 + 4899: -3,23 + 4900: -2,24 + 4901: -4,23 + 4902: -4,25 + 4938: -14,28 + 4939: -15,28 + 4940: -14,29 + 4941: -13,26 + 4942: -10,26 + 4943: -9,27 + 4944: -10,28 + 4945: -7,28 + 4946: -8,26 + 4947: -5,28 + 4948: -7,24 + 4949: -8,24 + 4950: -7,23 + 4951: -6,24 + 4952: -6,23 + 4953: -7,23 + 4954: -8,23 + 4955: -8,23 + 4956: -12,23 + 4957: -11,24 + 4958: -10,23 + 4959: -10,24 + 4960: -10,24 + 4961: -12,24 + 4962: -12,24 + 4963: -14,24 + 4964: -14,23 + 4965: -16,24 + 4966: -14,24 + 4967: -15,23 + 4968: -16,24 + 4969: -14,25 + 4970: -10,25 + 4971: -7,25 + 4972: -1,28 + 4973: -3,27 + 4974: -1,30 + 4975: -1,33 + 4976: -1,34 + 4977: -1,37 + 4978: -3,37 + 4979: -3,38 + 4980: -1,37 + 4981: -2,37 + 4982: -1,40 + 4983: -3,41 + 4984: -3,43 + 4985: -2,43 + 4986: -20,25 + 4987: -21,25 + 4988: -19,25 + 4989: -21,25 + 4990: -22,17 + 4991: -23,17 + 4992: -22,5 + 4993: -22,5 + 4994: -22,5 + 4995: -19,-28 + 4996: -16,-28 + 4997: -16,-27 + 4998: -15,-28 + 4999: -16,-26 + 5000: -15,-27 + 5001: -15,-28 + 5002: -15,-26 + 5003: -15,-26 + 5004: -14,-26 + 5015: -25,-34 + 5016: -23,-34 + 5017: -22,-34 + 5018: -21,-34 + 5019: -20,-34 + 5020: -20,-37 + 5021: -20,-36 + 5022: -19,-38 + 5023: -19,-36 + 5024: -22,-37 + 5025: -23,-37 + 5026: -23,-38 + 5027: -23,-36 + 5028: -24,-37 + 5029: -26,-37 + 5030: -26,-36 + 5031: -26,-37 + 5032: -28,-40 + 5033: -27,-40 + 5034: -25,-40 + 5035: -24,-40 + 5036: -23,-40 + 5037: -21,-40 + 5038: -19,-40 + 5039: -21,-40 + 5040: -24,-40 + 5041: -26,-40 + 5042: -32,-40 + 5043: -31,-40 + 5044: -33,-39 + 5045: -33,-40 + 5046: -32,-39 + 5047: -31,-39 + 5048: -34,-39 5049: -33,-40 - 5050: -32,-39 - 5051: -31,-39 - 5052: -34,-39 - 5053: -33,-40 - 5054: -39,-38 - 5055: -38,-38 - 5056: -29,-46 + 5050: -39,-38 + 5051: -38,-38 + 5052: -29,-46 + 5053: -30,-45 + 5054: -30,-45 + 5055: -30,-44 + 5056: -29,-45 5057: -30,-45 - 5058: -30,-45 - 5059: -30,-44 - 5060: -29,-45 - 5061: -30,-45 - 5062: -30,-44 - 5063: -29,-45 - 5064: -38,-53 - 5065: -38,-54 - 5066: -37,-53 - 5067: -37,-54 - 5068: -14,-39 - 5069: -13,-38 - 5070: -13,-39 - 5071: -13,-40 - 5072: -13,-41 - 5073: -13,-39 - 5074: -13,-40 - 5075: -13,-41 - 5076: -13,-39 - 5077: -13,-40 - 5078: -13,-39 - 5079: -13,-40 - 5082: -5,-41 - 5083: -5,-40 - 5084: -6,-42 - 5085: -5,-36 - 5086: -6,-36 - 5087: -4,-35 - 5088: -4,-36 - 5089: 0,-36 - 5090: -2,-36 - 5091: 1,-35 - 5092: 1,-37 - 5093: 1,-38 - 5094: 2,-37 - 5095: 2,-38 - 5096: 0,-37 - 5097: 3,-37 - 5098: -1,-36 - 5102: -6,-28 - 5103: -6,-27 - 5104: -5,-27 - 5105: -6,-26 - 5106: -2,-27 - 5107: -3,-26 - 5108: -2,-28 - 5109: -1,-27 - 5110: 0,-27 - 5111: 0,-27 - 5112: -2,-27 - 5113: -2,-27 - 5114: 0,-24 - 5115: -2,-24 - 5116: -2,-23 - 5117: 0,-22 - 5118: 1,-22 - 5119: 1,-21 - 5120: -4,-19 - 5121: -5,-19 - 5122: -7,-19 - 5123: -9,-19 - 5124: -6,-19 - 5125: -7,-17 - 5126: -8,-17 - 5127: -9,-16 - 5128: -9,-16 - 5129: -5,-16 - 5130: -4,-14 - 5131: -5,-15 - 5132: -8,-16 - 5133: -8,-15 - 5134: -14,-14 - 5135: -12,-14 - 5136: -12,-16 - 5137: -13,-18 - 5138: -14,-16 - 5139: -13,-16 - 5140: -13,-19 - 5141: -14,-19 - 5142: -2,-17 - 5143: -2,-15 - 5144: -2,-13 - 5145: -2,-12 - 5146: -1,-15 - 5147: -1,-16 - 5148: -1,-17 - 5149: 1,-17 - 5150: -1,-18 - 5151: 2,-18 - 5152: 2,-16 - 5153: 2,-15 - 5154: 2,-13 - 5155: 1,-12 - 5156: 1,-14 - 5157: -1,-13 - 5158: 0,-14 - 5159: 2,-16 - 5160: -4,-14 - 5161: -7,-24 - 5162: -7,-22 - 5163: -8,-23 - 5164: -10,-23 - 5165: -9,-23 - 5166: -1,-24 - 5167: 8,-23 - 5168: 8,-22 - 5169: 10,-22 - 5170: 9,-23 - 5171: 8,-25 - 5172: 8,-21 - 5173: 8,-19 - 5174: 8,-18 - 5175: 6,-18 - 5176: 5,-18 - 5177: 0,-27 - 5178: 2,-27 - 5179: 10,-23 - 5180: 13,-23 - 5181: 12,-23 - 5182: 13,-21 - 5183: 14,-22 - 5184: 13,-18 - 5185: 14,-18 - 5186: 14,-17 - 5187: 12,-18 - 5188: 11,-18 - 5189: 11,-16 - 5190: 13,-17 - 5191: 11,-30 - 5192: 11,-28 - 5193: 11,-27 - 5194: 11,-26 - 5195: 17,-26 - 5196: 17,-28 - 5197: 17,-28 - 5198: 17,-30 - 5199: 17,-30 - 5200: 18,-23 - 5201: 20,-22 - 5202: 21,-23 - 5203: 19,-22 - 5204: 21,-22 - 5205: 20,-21 - 5206: 24,-22 - 5207: 23,-23 - 5208: 23,-21 - 5209: 23,-23 - 5210: 17,-16 - 5211: 19,-14 - 5212: 18,-13 - 5213: 20,-13 - 5214: 19,-12 - 5215: 22,-11 - 5216: 22,-13 + 5058: -30,-44 + 5059: -29,-45 + 5060: -38,-53 + 5061: -38,-54 + 5062: -37,-53 + 5063: -37,-54 + 5064: -14,-39 + 5065: -13,-38 + 5066: -13,-39 + 5067: -13,-40 + 5068: -13,-41 + 5069: -13,-39 + 5070: -13,-40 + 5071: -13,-41 + 5072: -13,-39 + 5073: -13,-40 + 5074: -13,-39 + 5075: -13,-40 + 5078: -5,-41 + 5079: -5,-40 + 5080: -6,-42 + 5081: -5,-36 + 5082: -6,-36 + 5083: -4,-35 + 5084: -4,-36 + 5085: 0,-36 + 5086: -2,-36 + 5087: 1,-35 + 5088: 1,-37 + 5089: 1,-38 + 5090: 2,-37 + 5091: 2,-38 + 5092: 0,-37 + 5093: 3,-37 + 5094: -1,-36 + 5098: -6,-28 + 5099: -6,-27 + 5100: -5,-27 + 5101: -6,-26 + 5102: -2,-27 + 5103: -3,-26 + 5104: -2,-28 + 5105: -1,-27 + 5106: 0,-27 + 5107: 0,-27 + 5108: -2,-27 + 5109: -2,-27 + 5110: 0,-24 + 5111: -2,-24 + 5112: -2,-23 + 5113: 0,-22 + 5114: 1,-22 + 5115: 1,-21 + 5116: -4,-19 + 5117: -5,-19 + 5118: -7,-19 + 5119: -9,-19 + 5120: -6,-19 + 5121: -7,-17 + 5122: -8,-17 + 5123: -9,-16 + 5124: -9,-16 + 5125: -5,-16 + 5126: -4,-14 + 5127: -5,-15 + 5128: -8,-16 + 5129: -8,-15 + 5130: -14,-14 + 5131: -12,-14 + 5132: -12,-16 + 5133: -13,-18 + 5134: -14,-16 + 5135: -13,-16 + 5136: -13,-19 + 5137: -14,-19 + 5138: -2,-17 + 5139: -2,-15 + 5140: -2,-13 + 5141: -2,-12 + 5142: -1,-15 + 5143: -1,-16 + 5144: -1,-17 + 5145: 1,-17 + 5146: -1,-18 + 5147: 2,-18 + 5148: 2,-16 + 5149: 2,-15 + 5150: 2,-13 + 5151: 1,-12 + 5152: 1,-14 + 5153: -1,-13 + 5154: 0,-14 + 5155: 2,-16 + 5156: -4,-14 + 5157: -7,-24 + 5158: -7,-22 + 5159: -8,-23 + 5160: -10,-23 + 5161: -9,-23 + 5162: -1,-24 + 5163: 8,-23 + 5164: 8,-22 + 5165: 10,-22 + 5166: 9,-23 + 5167: 8,-25 + 5168: 8,-21 + 5169: 8,-19 + 5170: 8,-18 + 5171: 6,-18 + 5172: 5,-18 + 5173: 0,-27 + 5174: 2,-27 + 5175: 10,-23 + 5176: 13,-23 + 5177: 12,-23 + 5178: 13,-21 + 5179: 14,-22 + 5180: 13,-18 + 5181: 14,-18 + 5182: 14,-17 + 5183: 12,-18 + 5184: 11,-18 + 5185: 11,-16 + 5186: 13,-17 + 5187: 11,-30 + 5188: 11,-28 + 5189: 11,-27 + 5190: 11,-26 + 5191: 17,-26 + 5192: 17,-28 + 5193: 17,-28 + 5194: 17,-30 + 5195: 17,-30 + 5196: 18,-23 + 5197: 20,-22 + 5198: 21,-23 + 5199: 19,-22 + 5200: 21,-22 + 5201: 20,-21 + 5202: 24,-22 + 5203: 23,-23 + 5204: 23,-21 + 5205: 23,-23 + 5206: 17,-16 + 5207: 19,-14 + 5208: 18,-13 + 5209: 20,-13 + 5210: 19,-12 + 5211: 22,-11 + 5212: 22,-13 + 5213: 20,-11 + 5214: 24,-13 + 5215: 26,-11 + 5216: 21,-11 5217: 20,-11 - 5218: 24,-13 - 5219: 26,-11 - 5220: 21,-11 - 5221: 20,-11 - 5222: 25,-13 - 5223: 22,-13 - 5224: 23,-12 - 5225: 26,-12 - 5226: 19,-12 - 5227: 23,-13 - 5228: 23,-11 - 5229: 19,-10 - 5230: 26,-11 - 5231: 28,-12 - 5232: 25,-12 - 5233: 23,-16 - 5234: 23,-16 - 5235: 13,-19 - 5236: 23,-34 - 5237: 23,-31 - 5238: 23,-30 - 5239: 23,-29 - 5240: 23,-32 - 5241: 29,-34 - 5242: 29,-33 - 5243: 29,-32 - 5244: 29,-30 - 5245: 29,-29 - 5246: 32,-34 - 5247: 32,-31 - 5248: 32,-30 - 5249: 36,-30 - 5250: 35,-29 - 5251: 33,-26 - 5252: 36,-21 - 5253: 38,-16 + 5218: 25,-13 + 5219: 22,-13 + 5220: 23,-12 + 5221: 26,-12 + 5222: 19,-12 + 5223: 23,-13 + 5224: 23,-11 + 5225: 19,-10 + 5226: 26,-11 + 5227: 28,-12 + 5228: 25,-12 + 5229: 23,-16 + 5230: 23,-16 + 5231: 13,-19 + 5232: 23,-34 + 5233: 23,-31 + 5234: 23,-30 + 5235: 23,-29 + 5236: 23,-32 + 5237: 29,-34 + 5238: 29,-33 + 5239: 29,-32 + 5240: 29,-30 + 5241: 29,-29 + 5242: 32,-34 + 5243: 32,-31 + 5244: 32,-30 + 5245: 36,-30 + 5246: 35,-29 + 5247: 33,-26 + 5248: 36,-21 + 5249: 38,-16 + 5250: 37,-15 + 5251: 39,-16 + 5252: 38,-17 + 5253: 38,-15 5254: 37,-15 - 5255: 39,-16 - 5256: 38,-17 - 5257: 38,-15 - 5258: 37,-15 - 5259: 62,-31 - 5260: 62,-33 - 5261: 61,-31 - 5262: 63,-33 - 5263: 63,-33 - 5264: 63,-32 - 5265: 62,-32 - 5266: 62,-32 - 5267: 64,8 - 5268: 63,9 - 5269: 65,9 - 5270: 64,8 - 5271: 64,9 - 5272: 64,10 - 5273: 67,6 - 5274: 68,4 - 5275: 68,6 - 5276: 67,5 - 5277: 68,0 - 5278: 68,1 - 5279: 68,2 - 5280: 67,0 - 5281: 68,-2 - 5282: 67,-3 - 5283: 68,-4 - 5284: 68,-3 - 5285: 68,-3 - 5286: 76,-6 - 5292: 54,-30 - 5293: 52,-31 - 5294: 51,-31 - 5295: 52,-33 - 5296: 52,-34 - 5297: 51,-33 - 5298: 51,-32 + 5255: 62,-31 + 5256: 62,-33 + 5257: 61,-31 + 5258: 63,-33 + 5259: 63,-33 + 5260: 63,-32 + 5261: 62,-32 + 5262: 62,-32 + 5263: 64,8 + 5264: 63,9 + 5265: 65,9 + 5266: 64,8 + 5267: 64,9 + 5268: 64,10 + 5269: 67,6 + 5270: 68,4 + 5271: 68,6 + 5272: 67,5 + 5273: 68,0 + 5274: 68,1 + 5275: 68,2 + 5276: 67,0 + 5277: 68,-2 + 5278: 67,-3 + 5279: 68,-4 + 5280: 68,-3 + 5281: 68,-3 + 5282: 76,-6 + 5288: 54,-30 + 5289: 52,-31 + 5290: 51,-31 + 5291: 52,-33 + 5292: 52,-34 + 5293: 51,-33 + 5294: 51,-32 + 5295: 52,-35 + 5296: 51,-33 + 5297: 51,-31 + 5298: 52,-35 5299: 52,-35 - 5300: 51,-33 - 5301: 51,-31 - 5302: 52,-35 - 5303: 52,-35 - 5304: 55,-35 - 5305: 54,-34 - 5306: 56,-33 - 5307: 57,-33 - 5308: 55,-34 - 5309: 55,-36 - 5310: 54,-35 - 5311: 55,-34 - 5312: 54,-35 - 5313: 55,-35 - 5314: 55,-34 - 5315: 40,-31 - 5316: 40,-30 - 5317: 40,-30 - 5318: 41,-31 - 5319: 41,-29 - 5320: 42,-29 - 5321: 43,-29 - 5322: 44,-29 - 5323: 44,-31 - 5324: 43,-30 - 5325: 33,-29 - 5326: 15,-39 - 5327: 14,-39 - 5328: 14,-39 - 5329: 9,-40 - 5330: 9,-39 - 5331: 9,-41 - 5332: 8,-40 - 5333: 9,-45 - 5334: 8,-45 - 5335: 8,-45 - 5336: 19,-45 - 5337: 17,-45 - 5338: 16,-44 - 5339: 16,-45 - 5340: 16,-43 - 5341: 19,-45 - 5342: 20,-44 - 5343: 20,-45 - 5344: 18,-44 - 5345: 21,-45 - 5346: 21,-43 - 5347: 15,-48 - 5348: 14,-48 - 5349: 12,-47 - 5350: 12,-48 - 5351: 14,-48 - 5352: 16,-47 - 5353: 14,-48 - 5354: 13,-48 - 5355: 15,-47 - 5362: 21,-54 - 5363: 20,-54 - 5364: 18,-54 - 5365: 16,-54 - 5366: 16,-55 - 5367: 18,-53 - 5368: 19,-53 - 5369: 21,-55 - 5370: 21,-58 - 5371: 21,-59 - 5372: 20,-58 - 5373: 18,-58 - 5374: 17,-58 - 5375: 16,-58 - 5376: 16,-59 - 5377: 19,-59 - 5378: 19,-59 - 5379: 18,-59 - 5380: 27,-46 - 5381: 26,-45 - 5382: 26,-44 - 5383: 27,-45 - 5384: 27,-45 - 5385: 28,-42 - 5386: 29,-42 - 5387: 29,-40 - 5388: 28,-39 - 5389: 28,-39 - 5390: 28,-40 - 5391: 29,-47 - 5392: 28,-47 - 5393: 66,-52 - 5394: 65,-51 - 5395: 66,-52 - 5396: 66,-51 - 5397: 65,-52 - 5398: 66,-51 - 5399: 27,15 - 5400: 28,15 - 5401: 27,14 - 5402: 27,12 - 5403: -23,34 - 5404: -23,35 - 5405: -22,34 - 5406: -27,36 - 5407: -27,34 - 5408: -28,35 - 5409: -27,35 - 5410: -29,36 - 5411: -30,37 - 5412: -30,38 - 5413: -28,35 - 5414: -28,34 - 5415: -29,35 - 5416: -26,36 - 5417: -25,38 - 5418: -26,37 - 5419: -32,36 - 5420: -33,35 - 5421: -33,37 - 5422: -33,35 - 5423: -34,36 - 5424: -33,38 - 5425: -33,35 - 5426: -36,5 - 5427: -42,6 - 5428: -43,4 - 5429: -43,6 - 5430: -42,7 - 5431: -51,9 - 5432: -49,13 - 5433: -42,-5 - 5434: -43,-5 - 5435: -42,-3 - 5436: -45,-4 - 5437: -45,-5 - 5438: -46,-4 - 5439: -43,-3 - 5440: -43,-2 - 5441: -42,-2 - 5442: -60,-29 - 5443: -60,-29 - 5444: -57,-36 - 5445: -58,-36 - 5446: -59,-36 - 5447: -57,-37 - 5448: -58,-35 - 5449: -58,-34 - 5450: -57,-35 - 5451: -59,-34 - 5452: -58,-34 - 5453: -59,-34 - 5454: -60,-34 - 5455: -60,-35 - 5456: -61,-21 - 5457: -62,-21 - 5458: -62,-20 - 5459: -61,-20 - 5460: -61,-20 - 5461: 13,35 - 6115: 52,20 - 6116: 51,21 - 6117: 53,20 - 6118: 53,21 - 6219: 46,14 - 6220: 45,15 - 6221: 46,16 - 6427: 49,-7 - 6428: 48,-6 - 6429: 48,-4 - 6430: 49,-4 - 6431: 52,-7 - 6432: 52,-5 - 6433: 51,-6 - 6434: 52,-2 - 6435: 52,-3 - 6436: 48,-1 - 6437: 48,-2 - 6457: 49,-12 - 6458: 49,-14 - 6459: 49,-15 - 6460: 49,-13 - 6461: 52,-14 - 6462: 52,-13 - 6463: 52,-12 - 6464: 52,-15 - 6465: 52,-15 - 6466: 52,-10 - 6467: 51,1 - 6468: 51,3 - 6469: 51,4 - 6471: 51,8 - 6472: 51,9 - 6473: 51,11 - 6474: 51,13 - 6475: 49,13 - 6476: 49,11 - 6477: 49,9 - 6478: 49,7 - 6479: 49,5 - 6480: 49,3 - 6481: 49,1 - 6494: 42,9 - 6495: 43,9 - 6496: 42,7 - 6497: 43,7 - 6498: 45,7 - 6499: 45,9 - 6500: 46,7 - 6501: 40,4 - 6502: 42,4 - 6503: 43,4 - 6504: 43,2 - 6505: 43,1 - 6506: 43,-2 - 6507: 43,-4 - 6508: 43,-7 - 6509: 43,-6 - 6510: 43,-10 - 6511: 43,-11 - 6512: 45,5 - 6513: 42,5 - 6514: 41,5 - 6593: 90,-18 - 6594: 89,-18 - 6677: 51,-39 - 6678: 52,-39 - 6679: 54,-39 - 6680: 52,-37 - 6690: 51,-30 - 6691: 52,-29 - 6715: -33,-12 - 6716: -33,-10 - 6732: -36,-45 - 6733: -35,-44 - 6734: -35,-46 - 6826: 14,39 - 6827: 13,40 - 6828: 15,42 - 6829: 15,41 - 6830: 16,39 + 5300: 55,-35 + 5301: 54,-34 + 5302: 56,-33 + 5303: 57,-33 + 5304: 55,-34 + 5305: 55,-36 + 5306: 54,-35 + 5307: 55,-34 + 5308: 54,-35 + 5309: 55,-35 + 5310: 55,-34 + 5311: 40,-31 + 5312: 40,-30 + 5313: 40,-30 + 5314: 41,-31 + 5315: 41,-29 + 5316: 42,-29 + 5317: 43,-29 + 5318: 44,-29 + 5319: 44,-31 + 5320: 43,-30 + 5321: 33,-29 + 5322: 15,-39 + 5323: 14,-39 + 5324: 14,-39 + 5325: 9,-40 + 5326: 9,-39 + 5327: 9,-41 + 5328: 8,-40 + 5332: 19,-45 + 5333: 17,-45 + 5334: 16,-44 + 5335: 16,-45 + 5336: 16,-43 + 5337: 19,-45 + 5338: 20,-44 + 5339: 20,-45 + 5340: 18,-44 + 5341: 21,-45 + 5342: 21,-43 + 5343: 15,-48 + 5344: 14,-48 + 5345: 12,-47 + 5346: 12,-48 + 5347: 14,-48 + 5348: 16,-47 + 5349: 14,-48 + 5350: 13,-48 + 5351: 15,-47 + 5358: 21,-54 + 5359: 20,-54 + 5360: 18,-54 + 5361: 16,-54 + 5362: 16,-55 + 5363: 18,-53 + 5364: 19,-53 + 5365: 21,-55 + 5366: 21,-58 + 5367: 21,-59 + 5368: 20,-58 + 5369: 18,-58 + 5370: 17,-58 + 5371: 16,-58 + 5372: 16,-59 + 5373: 19,-59 + 5374: 19,-59 + 5375: 18,-59 + 5376: 27,-46 + 5377: 26,-45 + 5378: 26,-44 + 5379: 27,-45 + 5380: 27,-45 + 5381: 28,-42 + 5382: 29,-42 + 5383: 29,-40 + 5384: 28,-39 + 5385: 28,-39 + 5386: 28,-40 + 5387: 29,-47 + 5388: 28,-47 + 5389: 66,-52 + 5390: 65,-51 + 5391: 66,-52 + 5392: 66,-51 + 5393: 65,-52 + 5394: 66,-51 + 5395: 27,15 + 5396: 28,15 + 5397: 27,14 + 5398: 27,12 + 5399: -23,34 + 5400: -23,35 + 5401: -22,34 + 5402: -27,36 + 5403: -27,34 + 5404: -28,35 + 5405: -27,35 + 5406: -29,36 + 5407: -30,37 + 5408: -30,38 + 5409: -28,35 + 5410: -28,34 + 5411: -29,35 + 5412: -26,36 + 5413: -25,38 + 5414: -26,37 + 5415: -32,36 + 5416: -33,35 + 5417: -33,37 + 5418: -33,35 + 5419: -34,36 + 5420: -33,38 + 5421: -33,35 + 5422: -36,5 + 5423: -42,6 + 5424: -43,4 + 5425: -43,6 + 5426: -42,7 + 5427: -51,9 + 5428: -49,13 + 5429: -42,-5 + 5430: -43,-5 + 5431: -42,-3 + 5432: -45,-4 + 5433: -45,-5 + 5434: -46,-4 + 5435: -43,-3 + 5436: -43,-2 + 5437: -42,-2 + 5438: -60,-29 + 5439: -60,-29 + 5440: -57,-36 + 5441: -58,-36 + 5442: -59,-36 + 5443: -57,-37 + 5444: -58,-35 + 5445: -58,-34 + 5446: -57,-35 + 5447: -59,-34 + 5448: -58,-34 + 5449: -59,-34 + 5450: -60,-34 + 5451: -60,-35 + 5452: -61,-21 + 5453: -62,-21 + 5454: -62,-20 + 5455: -61,-20 + 5456: -61,-20 + 5457: 13,35 + 6111: 52,20 + 6112: 51,21 + 6113: 53,20 + 6114: 53,21 + 6215: 46,14 + 6216: 45,15 + 6217: 46,16 + 6422: 49,-7 + 6423: 48,-6 + 6424: 48,-4 + 6425: 49,-4 + 6426: 52,-7 + 6427: 52,-5 + 6428: 51,-6 + 6429: 52,-2 + 6430: 52,-3 + 6431: 48,-1 + 6432: 48,-2 + 6452: 49,-12 + 6453: 49,-14 + 6454: 49,-15 + 6455: 49,-13 + 6456: 52,-14 + 6457: 52,-13 + 6458: 52,-12 + 6459: 52,-15 + 6460: 52,-15 + 6461: 52,-10 + 6462: 51,1 + 6463: 51,3 + 6464: 51,4 + 6465: 51,8 + 6466: 51,9 + 6467: 51,11 + 6468: 51,13 + 6469: 49,13 + 6470: 49,11 + 6471: 49,9 + 6472: 49,7 + 6473: 49,5 + 6474: 49,3 + 6475: 49,1 + 6488: 42,9 + 6489: 43,9 + 6490: 42,7 + 6491: 43,7 + 6492: 45,7 + 6493: 45,9 + 6494: 46,7 + 6495: 40,4 + 6496: 42,4 + 6497: 43,4 + 6498: 43,2 + 6499: 43,1 + 6500: 43,-2 + 6501: 43,-4 + 6502: 43,-7 + 6503: 43,-6 + 6504: 43,-10 + 6505: 43,-11 + 6506: 45,5 + 6507: 42,5 + 6508: 41,5 + 6587: 90,-18 + 6588: 89,-18 + 6671: 51,-39 + 6672: 52,-39 + 6673: 54,-39 + 6674: 52,-37 + 6684: 51,-30 + 6685: 52,-29 + 6709: -33,-12 + 6710: -33,-10 + 6726: -36,-45 + 6727: -35,-44 + 6728: -35,-46 + 6820: 14,39 + 6821: 13,40 + 6822: 15,42 + 6823: 15,41 + 6824: 16,39 + 6884: 8,-47 - node: cleanable: True angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: DirtHeavy decals: - 3016: -43,17 + 3012: -43,17 - node: cleanable: True color: '#835432FF' id: DirtHeavyMonotile decals: - 2924: -38,29 - 2925: -36,28 - 2926: -34,26 - 2927: -34,24 - 2928: -36,22 - 2929: -37,25 - 2930: -37,26 - 2931: -37,27 - 2932: -38,27 - 2933: -36,26 + 2920: -38,29 + 2921: -36,28 + 2922: -34,26 + 2923: -34,24 + 2924: -36,22 + 2925: -37,25 + 2926: -37,26 + 2927: -37,27 + 2928: -38,27 + 2929: -36,26 - node: cleanable: True angle: -6.283185307179586 rad color: '#FFFFFFFF' id: DirtHeavyMonotile decals: - 6618: 88,-21 - 6619: 88,-20 - 6620: 91,-20 - 6623: 87,-20 - 6626: 88,-19 + 6612: 88,-21 + 6613: 88,-20 + 6614: 91,-20 + 6617: 87,-20 + 6620: 88,-19 - node: cleanable: True color: '#FFFFFFFF' id: DirtHeavyMonotile decals: - 3185: 4,-31 - 3186: 0,-31 - 3187: -4,-31 - 3188: -8,-31 - 3189: -10,-31 - 3190: -13,-31 - 3191: -17,-31 - 3192: -18,-31 - 3193: -21,-31 - 3194: -25,-31 - 3195: -25,-27 - 3196: -25,-24 - 3197: -25,-22 - 3198: -25,-19 - 3199: -25,-18 - 3200: -25,-13 - 3201: -25,-11 - 3202: -24,-10 - 3203: -24,-8 - 3204: -22,-2 - 3205: -22,0 - 3206: -22,3 - 3207: -20,8 - 3208: -22,9 - 3209: -24,8 - 3210: -25,9 - 3211: -26,8 - 3212: -26,12 - 3213: -26,15 - 3214: -26,17 - 3215: -25,20 - 3216: -23,19 - 3217: -20,19 - 3218: -18,20 - 3219: -15,20 - 3220: -12,20 - 3221: -7,20 - 3222: -3,20 - 3223: -1,20 - 3224: 2,20 - 3225: 6,20 - 3226: 9,20 - 3227: 11,20 - 3228: 14,20 - 3229: 17,20 - 3230: 20,19 - 3231: 20,17 - 3232: 20,15 - 3233: 20,11 - 3234: 20,9 - 3235: 20,6 - 3236: 20,3 - 3237: 22,3 - 3238: 25,3 - 3239: 27,3 - 3240: 30,3 - 3241: 33,3 - 3242: 36,3 - 3243: 41,3 - 3244: 42,2 - 3245: 42,0 - 3246: 42,-3 - 3247: 42,-6 - 3248: 42,-9 - 3249: 42,-11 - 3250: 42,-15 - 3251: 42,-18 - 3252: 42,-20 - 3253: 44,-20 - 3254: 42,-13 - 3255: 42,-10 - 3256: 42,-7 - 3257: 42,-5 - 3258: 42,-2 - 3259: 42,1 - 3260: 39,3 - 3261: 37,3 - 3262: 35,3 - 3263: 32,3 - 3264: 31,3 - 3265: 26,3 - 3266: 22,3 - 3267: 20,6 - 3268: 20,9 - 3269: 20,12 - 3270: 20,15 - 3271: 20,19 - 3272: 19,20 - 3273: 12,20 - 3274: 8,20 - 3275: 5,20 - 3276: 2,20 - 3277: -1,20 - 3278: -5,20 - 3279: -9,20 - 3280: -12,20 - 3281: -16,20 - 3283: -19,19 - 3284: -26,20 - 3285: -26,16 - 3286: -26,11 - 3287: -26,8 - 3288: -23,8 - 3289: -22,9 - 3290: -21,8 - 3291: -20,9 - 3292: -22,3 - 3293: -22,0 - 3294: -22,-3 - 3295: -22,-5 - 3296: -23,-7 - 3297: -25,-7 - 3298: -23,-8 - 3299: -25,-10 - 3300: -25,-10 - 3301: -25,-14 - 3302: -25,-18 - 3303: -25,-21 - 3304: -25,-25 - 3305: -25,-28 - 3306: -23,-31 - 3307: -20,-31 - 3308: -15,-31 - 3309: -9,-31 - 3310: -5,-31 - 3311: 1,-31 - 3312: 1,-32 - 3313: 7,-31 - 3314: 5,-31 - 3315: 8,-32 - 3316: 9,-33 - 3317: 12,-33 - 3318: 15,-33 - 3319: 18,-33 - 3320: 19,-33 - 3321: 20,-29 - 3322: 20,-27 - 3323: 21,-26 - 3324: 24,-26 - 3325: 27,-26 - 3326: 28,-26 - 3327: 28,-22 - 3328: 28,-21 - 3329: 28,-20 - 3330: 32,-20 - 3331: 35,-20 - 3332: 39,-20 - 3333: 42,-20 - 3334: 40,-20 - 3335: 42,-17 - 3336: 42,-19 - 3337: 49,-20 - 3338: 52,-20 - 3339: 47,-20 - 3340: 53,-20 - 3341: 53,-22 - 3342: 53,-23 - 3343: 54,-20 - 3344: 56,-20 - 3345: 58,-20 - 3346: 58,-20 - 3347: 58,-22 - 3348: 58,-23 - 3349: 58,-22 - 3350: 49,-20 - 3351: 50,-20 - 3352: 44,-13 - 3353: 41,-13 - 3354: 39,-1 - 3355: 37,-1 - 3356: 36,-1 - 3357: 50,6 - 3358: 50,2 - 3359: 50,14 - 3360: 46,-7 - 3361: 45,-8 - 3362: 46,-4 - 3363: 46,-5 - 3364: 45,-1 - 3365: 46,-2 - 3366: 54,-1 - 3367: 55,-1 - 3368: 55,-7 - 3369: 58,-4 - 3370: 59,-6 - 3371: 60,-5 - 3372: 62,-6 - 3373: 61,-6 - 3374: 55,7 - 3375: 54,7 - 3376: 59,15 - 3377: 58,15 - 3378: 60,16 - 3379: 60,3 - 3380: 60,1 - 3381: 63,1 - 3382: 62,1 - 3383: 62,0 - 3384: 62,3 - 3385: 62,4 - 3386: 28,3 - 3387: 28,3 - 3388: 24,8 + 3181: 4,-31 + 3182: 0,-31 + 3183: -4,-31 + 3184: -8,-31 + 3185: -10,-31 + 3186: -13,-31 + 3187: -17,-31 + 3188: -18,-31 + 3189: -21,-31 + 3190: -25,-31 + 3191: -25,-27 + 3192: -25,-24 + 3193: -25,-22 + 3194: -25,-19 + 3195: -25,-18 + 3196: -25,-13 + 3197: -25,-11 + 3198: -24,-10 + 3199: -24,-8 + 3200: -22,-2 + 3201: -22,0 + 3202: -22,3 + 3203: -20,8 + 3204: -22,9 + 3205: -24,8 + 3206: -25,9 + 3207: -26,8 + 3208: -26,12 + 3209: -26,15 + 3210: -26,17 + 3211: -25,20 + 3212: -23,19 + 3213: -20,19 + 3214: -18,20 + 3215: -15,20 + 3216: -12,20 + 3217: -7,20 + 3218: -3,20 + 3219: -1,20 + 3220: 2,20 + 3221: 6,20 + 3222: 9,20 + 3223: 11,20 + 3224: 14,20 + 3225: 17,20 + 3226: 20,19 + 3227: 20,17 + 3228: 20,15 + 3229: 20,11 + 3230: 20,9 + 3231: 20,6 + 3232: 20,3 + 3233: 22,3 + 3234: 25,3 + 3235: 27,3 + 3236: 30,3 + 3237: 33,3 + 3238: 36,3 + 3239: 41,3 + 3240: 42,2 + 3241: 42,0 + 3242: 42,-3 + 3243: 42,-6 + 3244: 42,-9 + 3245: 42,-11 + 3246: 42,-15 + 3247: 42,-18 + 3248: 42,-20 + 3249: 44,-20 + 3250: 42,-13 + 3251: 42,-10 + 3252: 42,-7 + 3253: 42,-5 + 3254: 42,-2 + 3255: 42,1 + 3256: 39,3 + 3257: 37,3 + 3258: 35,3 + 3259: 32,3 + 3260: 31,3 + 3261: 26,3 + 3262: 22,3 + 3263: 20,6 + 3264: 20,9 + 3265: 20,12 + 3266: 20,15 + 3267: 20,19 + 3268: 19,20 + 3269: 12,20 + 3270: 8,20 + 3271: 5,20 + 3272: 2,20 + 3273: -1,20 + 3274: -5,20 + 3275: -9,20 + 3276: -12,20 + 3277: -16,20 + 3279: -19,19 + 3280: -26,20 + 3281: -26,16 + 3282: -26,11 + 3283: -26,8 + 3284: -23,8 + 3285: -22,9 + 3286: -21,8 + 3287: -20,9 + 3288: -22,3 + 3289: -22,0 + 3290: -22,-3 + 3291: -22,-5 + 3292: -23,-7 + 3293: -25,-7 + 3294: -23,-8 + 3295: -25,-10 + 3296: -25,-10 + 3297: -25,-14 + 3298: -25,-18 + 3299: -25,-21 + 3300: -25,-25 + 3301: -25,-28 + 3302: -23,-31 + 3303: -20,-31 + 3304: -15,-31 + 3305: -9,-31 + 3306: -5,-31 + 3307: 1,-31 + 3308: 1,-32 + 3309: 7,-31 + 3310: 5,-31 + 3311: 8,-32 + 3312: 9,-33 + 3313: 12,-33 + 3314: 15,-33 + 3315: 18,-33 + 3316: 19,-33 + 3317: 20,-29 + 3318: 20,-27 + 3319: 21,-26 + 3320: 24,-26 + 3321: 27,-26 + 3322: 28,-26 + 3323: 28,-22 + 3324: 28,-21 + 3325: 28,-20 + 3326: 32,-20 + 3327: 35,-20 + 3328: 39,-20 + 3329: 42,-20 + 3330: 40,-20 + 3331: 42,-17 + 3332: 42,-19 + 3333: 49,-20 + 3334: 52,-20 + 3335: 47,-20 + 3336: 53,-20 + 3337: 53,-22 + 3338: 53,-23 + 3339: 54,-20 + 3340: 56,-20 + 3341: 58,-20 + 3342: 58,-20 + 3343: 58,-22 + 3344: 58,-23 + 3345: 58,-22 + 3346: 49,-20 + 3347: 50,-20 + 3348: 44,-13 + 3349: 41,-13 + 3350: 39,-1 + 3351: 37,-1 + 3352: 36,-1 + 3353: 50,6 + 3354: 50,2 + 3355: 50,14 + 3356: 46,-7 + 3357: 45,-8 + 3358: 46,-4 + 3359: 46,-5 + 3360: 45,-1 + 3361: 46,-2 + 3362: 54,-1 + 3363: 55,-1 + 3364: 55,-7 + 3365: 58,-4 + 3366: 59,-6 + 3367: 60,-5 + 3368: 62,-6 + 3369: 61,-6 + 3370: 55,7 + 3371: 54,7 + 3372: 59,15 + 3373: 58,15 + 3374: 60,16 + 3375: 60,3 + 3376: 60,1 + 3377: 63,1 + 3378: 62,1 + 3379: 62,0 + 3380: 62,3 + 3381: 62,4 + 3382: 28,3 + 3383: 28,3 + 3384: 24,8 + 3385: 24,6 + 3386: 23,8 + 3387: 25,7 + 3388: 24,7 3389: 24,6 - 3390: 23,8 - 3391: 25,7 - 3392: 24,7 - 3393: 24,6 - 3394: 25,11 - 3395: 25,13 - 3396: 25,14 - 3397: 23,15 - 3398: 22,12 - 3399: 23,12 - 3400: 23,14 - 3401: 23,11 - 3402: 26,19 - 3403: 24,20 - 3404: 25,21 - 3405: 26,19 - 3406: 25,20 - 3407: 29,20 - 3408: 29,19 - 3409: 30,19 - 3410: 29,21 - 3411: -19,26 - 3412: -21,28 - 3413: -20,26 - 3414: -20,28 - 3415: -7,40 - 3416: 3,40 - 3417: -26,19 - 3418: -17,11 - 3419: -16,11 - 3420: -16,13 - 3421: -17,13 - 3422: -33,11 - 3423: -33,13 - 3424: -33,14 - 3425: -32,14 - 3426: -30,14 - 3427: -29,14 - 3428: -31,14 - 3429: -30,3 - 3430: -32,3 - 3431: -37,3 - 3432: -36,2 - 3433: -35,2 - 3434: -37,1 - 3435: -33,1 - 3436: -32,2 - 3437: -32,1 - 3438: -31,2 - 3439: -33,2 - 3440: -38,0 - 3441: -37,0 - 3442: -34,0 - 3443: -33,0 - 3444: -31,0 - 3445: -30,0 - 3446: -55,6 - 3447: -54,6 - 3448: -54,4 - 3449: -54,2 - 3450: -56,5 - 3451: -55,4 - 3452: -53,1 - 3453: -51,1 - 3454: -49,1 - 3455: -47,1 - 3456: -45,1 - 3457: -44,1 - 3458: -43,1 - 3459: -54,1 - 3460: -54,-4 - 3461: -55,-4 - 3462: -54,-8 - 3463: -54,-10 - 3464: -54,-12 - 3465: -54,-14 - 3466: -54,-16 - 3467: -54,-19 - 3468: -53,-21 - 3469: -51,-21 - 3470: -54,-21 - 3471: -54,-20 - 3472: -54,-18 - 3473: -48,-21 - 3474: -48,-23 - 3475: -48,-24 - 3476: -50,-25 - 3477: -47,-25 - 3478: -45,-25 - 3479: -45,-26 - 3480: -45,-29 - 3481: -44,-28 - 3482: -43,-28 - 3483: -45,-31 - 3484: -48,-32 - 3485: -49,-32 - 3486: -51,-32 - 3487: -51,-30 - 3488: -51,-28 - 3489: -51,-26 - 3490: -48,-33 - 3491: -54,-26 - 3492: -56,-25 - 3493: -55,-25 - 3494: -56,-26 - 3495: -57,-26 - 3496: -55,-26 - 3497: -56,-25 - 3498: -48,-36 - 3499: -48,-38 - 3500: -48,-40 - 3501: -48,-42 - 3502: -48,-44 - 3503: -48,-47 - 3504: -49,-47 - 3505: -51,-47 - 3506: -53,-47 - 3507: -54,-47 - 3508: -45,-47 - 3509: -45,-47 - 3510: -43,-47 - 3511: -41,-47 - 3512: -41,-47 - 3513: -41,-50 - 3514: -41,-51 - 3515: -41,-54 - 3516: -36,-58 - 3517: -36,-60 - 3518: -36,-63 - 3519: -36,-64 - 3520: -36,-56 - 3521: -37,-56 - 3522: -41,-61 - 3523: -42,-62 - 3524: -41,-64 - 3525: -41,-64 - 3526: -42,-62 - 3527: -41,-48 - 3528: -53,-47 - 3529: -55,-47 - 3530: -55,-49 - 3531: -55,-52 - 3532: -55,-54 - 3533: -60,-58 - 3534: -60,-60 - 3535: -60,-62 - 3536: -60,-63 - 3537: -60,-64 - 3538: -58,-56 - 3539: -60,-56 - 3540: -55,-64 - 3541: -55,-62 - 3542: -54,-61 - 3543: -54,-63 - 3544: -54,-64 - 3545: -8,-28 - 3546: -7,-26 - 3547: -8,-27 - 3548: -8,-27 - 3549: 7,-22 - 3550: 5,-22 - 3551: 4,-23 - 3552: 4,-20 - 3553: 4,-19 - 3554: 7,-20 - 3555: 7,-21 - 3556: 7,-24 - 3557: 7,-25 - 3558: 10,-16 - 3559: 10,-18 - 3560: 10,-18 - 3561: 12,-29 - 3562: 12,-28 - 3563: 12,-26 - 3564: 13,-25 - 3565: 14,-25 - 3566: 14,-26 - 3567: 15,-25 - 3568: 16,-26 - 3569: 16,-29 - 3570: -4,-36 - 3571: -4,-37 - 3572: -6,-37 - 3573: 34,-2 - 3574: 33,-2 - 3575: 34,-3 - 3576: 32,-2 - 3577: 32,-3 - 3578: 31,-2 - 3579: 31,-3 - 3580: 31,-35 - 3581: 33,-35 - 3582: 32,-37 - 3583: 33,-36 - 3584: 33,-38 - 3585: 32,-36 - 3586: 31,-38 - 3587: 47,-36 - 3588: 47,-35 - 3589: 49,-35 - 3590: 49,-37 - 3591: 47,-37 - 3592: 47,-38 - 3593: 49,-38 - 3594: 47,-39 - 3595: 24,-29 - 3596: 26,-29 - 3597: 27,-29 - 3598: 28,-29 - 3599: 25,-34 - 3600: 27,-34 - 3601: 28,-34 - 3602: 26,-34 - 3603: 28,-43 - 3604: 29,-43 - 3605: 28,-45 - 3606: 29,-45 - 3607: 28,-46 - 3608: 29,-46 - 3609: 19,-46 - 3610: 18,-46 - 3611: 18,-47 - 3612: 19,-49 - 3613: 19,-49 - 3614: 18,-50 - 3615: 19,-50 - 3616: 18,-48 - 3617: 16,-48 - 3618: 14,-48 - 3619: 12,-47 - 3620: 10,-40 - 3621: 11,-39 - 3622: 11,-40 - 3623: 11,-40 - 3624: 8,-31 - 3625: 8,-31 - 3626: 5,-14 - 3627: 6,-14 - 3628: 6,-15 - 3629: 5,-15 - 3630: 4,-15 - 3631: 4,-15 - 3632: 25,7 - 3633: 20,16 - 3634: 20,18 - 3635: 15,26 - 3636: 14,26 - 3637: 13,26 - 3638: 13,26 - 3639: -44,10 - 3640: -45,10 - 3641: -46,10 - 3642: -47,10 - 3643: -49,10 - 3644: -50,10 - 3645: -50,12 - 3646: -47,12 - 3647: -48,1 - 3648: -47,1 - 3649: -48,-41 - 3650: -38,-56 - 3651: -38,-56 - 3652: -42,-57 - 3653: -55,-57 - 3785: -50,0 - 3786: -50,2 - 3787: -48,2 - 3788: -46,2 - 3789: -45,2 - 3790: -44,0 - 3791: -46,0 - 3792: -48,0 - 3824: -51,3 - 3825: -49,3 - 3826: -47,3 - 3827: -45,3 - 3828: -44,5 - 3829: -46,5 - 3830: -48,5 - 3831: -50,5 - 3832: -50,-1 - 3833: -49,-1 - 3834: -47,-1 - 3835: -46,-1 - 3836: -44,-1 - 3837: -44,-3 - 3838: -46,-3 - 3839: -47,-3 - 3840: -49,-3 - 3841: -50,-3 - 3842: -48,-3 - 3843: -46,-3 - 3844: -48,3 - 3845: -46,3 - 3925: -21,6 - 3926: -21,7 - 3927: -22,6 - 3928: -21,7 - 4125: 19,1 - 4126: 21,1 - 4127: 22,1 - 4128: 23,1 - 4129: 23,1 - 4194: 40,-22 - 4195: 41,-22 - 4196: 43,-22 - 4197: 44,-22 - 4256: 61,-25 - 4257: 62,-25 - 4258: 62,-26 - 4263: 68,-23 - 4286: 68,-15 - 4287: 68,-13 - 4288: 68,-14 - 4289: 67,-12 - 4290: 70,-12 - 4291: 70,-14 - 4292: 68,-11 - 4293: 71,-12 - 4294: 70,-14 - 4295: 70,-15 - 4296: 71,-13 - 4297: 69,-13 - 4298: 69,-12 - 4299: 68,-10 - 4300: 67,-10 - 4301: 68,-8 - 4302: 69,-8 - 4303: 70,-9 - 4304: 70,-10 - 4398: 39,-34 - 4399: 40,-34 - 4400: 39,-34 - 4401: 42,-34 - 4402: 40,-34 - 4403: 41,-33 - 4404: 34,-36 - 4405: 34,-35 - 4406: 35,-36 - 4407: 38,-37 - 4408: 43,-37 - 4409: 43,-37 - 4410: 46,-37 - 4411: 46,-35 - 4412: 46,-37 - 4413: 47,-37 - 4414: 48,-36 - 4415: 48,-37 - 4416: 46,-39 - 4417: 44,-39 - 4418: 41,-39 - 4419: 37,-39 - 4420: 35,-39 - 4421: 39,-38 - 4422: 33,-38 + 3390: 25,11 + 3391: 25,13 + 3392: 25,14 + 3393: 23,15 + 3394: 22,12 + 3395: 23,12 + 3396: 23,14 + 3397: 23,11 + 3398: 26,19 + 3399: 24,20 + 3400: 25,21 + 3401: 26,19 + 3402: 25,20 + 3403: 29,20 + 3404: 29,19 + 3405: 30,19 + 3406: 29,21 + 3407: -19,26 + 3408: -21,28 + 3409: -20,26 + 3410: -20,28 + 3411: -7,40 + 3412: 3,40 + 3413: -26,19 + 3414: -17,11 + 3415: -16,11 + 3416: -16,13 + 3417: -17,13 + 3418: -33,11 + 3419: -33,13 + 3420: -33,14 + 3421: -32,14 + 3422: -30,14 + 3423: -29,14 + 3424: -31,14 + 3425: -30,3 + 3426: -32,3 + 3427: -37,3 + 3428: -36,2 + 3429: -35,2 + 3430: -37,1 + 3431: -33,1 + 3432: -32,2 + 3433: -32,1 + 3434: -31,2 + 3435: -33,2 + 3436: -38,0 + 3437: -37,0 + 3438: -34,0 + 3439: -33,0 + 3440: -31,0 + 3441: -30,0 + 3442: -55,6 + 3443: -54,6 + 3444: -54,4 + 3445: -54,2 + 3446: -56,5 + 3447: -55,4 + 3448: -53,1 + 3449: -51,1 + 3450: -49,1 + 3451: -47,1 + 3452: -45,1 + 3453: -44,1 + 3454: -43,1 + 3455: -54,1 + 3456: -54,-4 + 3457: -55,-4 + 3458: -54,-8 + 3459: -54,-10 + 3460: -54,-12 + 3461: -54,-14 + 3462: -54,-16 + 3463: -54,-19 + 3464: -53,-21 + 3465: -51,-21 + 3466: -54,-21 + 3467: -54,-20 + 3468: -54,-18 + 3469: -48,-21 + 3470: -48,-23 + 3471: -48,-24 + 3472: -50,-25 + 3473: -47,-25 + 3474: -45,-25 + 3475: -45,-26 + 3476: -45,-29 + 3477: -44,-28 + 3478: -43,-28 + 3479: -45,-31 + 3480: -48,-32 + 3481: -49,-32 + 3482: -51,-32 + 3483: -51,-30 + 3484: -51,-28 + 3485: -51,-26 + 3486: -48,-33 + 3487: -54,-26 + 3488: -56,-25 + 3489: -55,-25 + 3490: -56,-26 + 3491: -57,-26 + 3492: -55,-26 + 3493: -56,-25 + 3494: -48,-36 + 3495: -48,-38 + 3496: -48,-40 + 3497: -48,-42 + 3498: -48,-44 + 3499: -48,-47 + 3500: -49,-47 + 3501: -51,-47 + 3502: -53,-47 + 3503: -54,-47 + 3504: -45,-47 + 3505: -45,-47 + 3506: -43,-47 + 3507: -41,-47 + 3508: -41,-47 + 3509: -41,-50 + 3510: -41,-51 + 3511: -41,-54 + 3512: -36,-58 + 3513: -36,-60 + 3514: -36,-63 + 3515: -36,-64 + 3516: -36,-56 + 3517: -37,-56 + 3518: -41,-61 + 3519: -42,-62 + 3520: -41,-64 + 3521: -41,-64 + 3522: -42,-62 + 3523: -41,-48 + 3524: -53,-47 + 3525: -55,-47 + 3526: -55,-49 + 3527: -55,-52 + 3528: -55,-54 + 3529: -60,-58 + 3530: -60,-60 + 3531: -60,-62 + 3532: -60,-63 + 3533: -60,-64 + 3534: -58,-56 + 3535: -60,-56 + 3536: -55,-64 + 3537: -55,-62 + 3538: -54,-61 + 3539: -54,-63 + 3540: -54,-64 + 3541: -8,-28 + 3542: -7,-26 + 3543: -8,-27 + 3544: -8,-27 + 3545: 7,-22 + 3546: 5,-22 + 3547: 4,-23 + 3548: 4,-20 + 3549: 4,-19 + 3550: 7,-20 + 3551: 7,-21 + 3552: 7,-24 + 3553: 7,-25 + 3554: 10,-16 + 3555: 10,-18 + 3556: 10,-18 + 3557: 12,-29 + 3558: 12,-28 + 3559: 12,-26 + 3560: 13,-25 + 3561: 14,-25 + 3562: 14,-26 + 3563: 15,-25 + 3564: 16,-26 + 3565: 16,-29 + 3566: -4,-36 + 3567: -4,-37 + 3568: -6,-37 + 3571: 34,-3 + 3572: 32,-2 + 3573: 32,-3 + 3574: 31,-2 + 3575: 31,-3 + 3576: 31,-35 + 3577: 33,-35 + 3578: 32,-37 + 3579: 33,-36 + 3580: 33,-38 + 3581: 32,-36 + 3582: 31,-38 + 3583: 47,-36 + 3584: 47,-35 + 3585: 49,-35 + 3586: 49,-37 + 3587: 47,-37 + 3588: 47,-38 + 3589: 49,-38 + 3590: 47,-39 + 3591: 24,-29 + 3592: 26,-29 + 3593: 27,-29 + 3594: 28,-29 + 3595: 25,-34 + 3596: 27,-34 + 3597: 28,-34 + 3598: 26,-34 + 3599: 28,-43 + 3600: 29,-43 + 3601: 28,-45 + 3602: 29,-45 + 3603: 28,-46 + 3604: 29,-46 + 3605: 19,-46 + 3606: 18,-46 + 3607: 18,-47 + 3608: 19,-49 + 3609: 19,-49 + 3610: 18,-50 + 3611: 19,-50 + 3612: 18,-48 + 3613: 16,-48 + 3614: 14,-48 + 3615: 12,-47 + 3616: 10,-40 + 3617: 11,-39 + 3618: 11,-40 + 3619: 11,-40 + 3620: 8,-31 + 3621: 8,-31 + 3622: 5,-14 + 3623: 6,-14 + 3624: 6,-15 + 3625: 5,-15 + 3626: 4,-15 + 3627: 4,-15 + 3628: 25,7 + 3629: 20,16 + 3630: 20,18 + 3631: 15,26 + 3632: 14,26 + 3633: 13,26 + 3634: 13,26 + 3635: -44,10 + 3636: -45,10 + 3637: -46,10 + 3638: -47,10 + 3639: -49,10 + 3640: -50,10 + 3641: -50,12 + 3642: -47,12 + 3643: -48,1 + 3644: -47,1 + 3645: -48,-41 + 3646: -38,-56 + 3647: -38,-56 + 3648: -42,-57 + 3649: -55,-57 + 3781: -50,0 + 3782: -50,2 + 3783: -48,2 + 3784: -46,2 + 3785: -45,2 + 3786: -44,0 + 3787: -46,0 + 3788: -48,0 + 3820: -51,3 + 3821: -49,3 + 3822: -47,3 + 3823: -45,3 + 3824: -44,5 + 3825: -46,5 + 3826: -48,5 + 3827: -50,5 + 3828: -50,-1 + 3829: -49,-1 + 3830: -47,-1 + 3831: -46,-1 + 3832: -44,-1 + 3833: -44,-3 + 3834: -46,-3 + 3835: -47,-3 + 3836: -49,-3 + 3837: -50,-3 + 3838: -48,-3 + 3839: -46,-3 + 3840: -48,3 + 3841: -46,3 + 3921: -21,6 + 3922: -21,7 + 3923: -22,6 + 3924: -21,7 + 4121: 19,1 + 4122: 21,1 + 4123: 22,1 + 4124: 23,1 + 4125: 23,1 + 4190: 40,-22 + 4191: 41,-22 + 4192: 43,-22 + 4193: 44,-22 + 4252: 61,-25 + 4253: 62,-25 + 4254: 62,-26 + 4259: 68,-23 + 4282: 68,-15 + 4283: 68,-13 + 4284: 68,-14 + 4285: 67,-12 + 4286: 70,-12 + 4287: 70,-14 + 4288: 68,-11 + 4289: 71,-12 + 4290: 70,-14 + 4291: 70,-15 + 4292: 71,-13 + 4293: 69,-13 + 4294: 69,-12 + 4295: 68,-10 + 4296: 67,-10 + 4297: 68,-8 + 4298: 69,-8 + 4299: 70,-9 + 4300: 70,-10 + 4394: 39,-34 + 4395: 40,-34 + 4396: 39,-34 + 4397: 42,-34 + 4398: 40,-34 + 4399: 41,-33 + 4400: 34,-36 + 4401: 34,-35 + 4402: 35,-36 + 4403: 38,-37 + 4404: 43,-37 + 4405: 43,-37 + 4406: 46,-37 + 4407: 46,-35 + 4408: 46,-37 + 4409: 47,-37 + 4410: 48,-36 + 4411: 48,-37 + 4412: 46,-39 + 4413: 44,-39 + 4414: 41,-39 + 4415: 37,-39 + 4416: 35,-39 + 4417: 39,-38 + 4418: 33,-38 + 4718: -20,6 + 4719: -20,7 + 4720: -21,6 + 4721: -20,7 4722: -20,6 - 4723: -20,7 - 4724: -21,6 - 4725: -20,7 - 4726: -20,6 - 4727: -21,12 - 4728: -25,29 - 4729: -25,28 - 4730: -26,30 - 4731: -26,28 - 4732: -26,29 - 4756: -16,40 - 4757: -17,41 - 4758: -15,39 - 4759: -13,41 - 4760: -12,39 - 4811: -2,46 - 4812: -4,46 - 4813: -1,48 - 4814: 0,47 - 4815: -3,50 - 4816: 0,51 - 4817: 2,47 - 4818: 2,45 - 4819: 2,43 - 4820: 2,40 - 4821: -6,40 - 4822: -7,40 - 4823: -7,40 - 4824: -4,46 - 4825: -5,45 - 4826: -6,46 - 4827: 7,41 - 4828: 6,42 - 4829: 9,40 - 4830: 6,39 - 4831: 8,40 - 4832: 6,39 - 4833: 8,39 - 4834: 7,42 - 4835: 7,41 - 4836: 5,41 - 4867: 14,34 - 4868: 13,36 - 4869: 14,37 - 4870: 16,37 - 4871: 14,36 - 4872: 5,30 - 4873: 4,30 - 4874: 3,32 - 4875: 5,32 - 4876: 5,32 - 4877: 4,31 - 4878: 4,31 - 4879: 3,32 - 4880: 3,28 - 4881: 2,27 - 4882: 1,28 - 4883: 3,27 - 4884: 4,26 - 4885: 3,25 - 4886: 4,24 - 4887: 3,23 - 4888: 1,24 - 4889: 2,23 - 4907: -3,25 - 4908: -4,23 - 4909: -2,23 - 4910: -3,24 - 4911: 0,24 - 4912: 0,23 - 4913: -16,29 - 4914: -15,26 - 4915: -15,28 - 4916: -13,28 - 4917: -13,29 - 4918: -9,28 - 4919: -10,26 - 4920: -9,27 - 4921: -11,28 - 4922: -8,29 - 4923: -9,26 - 4924: -6,27 - 4925: -6,26 - 4926: -6,28 - 4927: -3,29 - 4928: -4,27 - 4929: -1,28 - 4930: -3,29 - 4931: -2,30 - 4932: -3,32 - 4933: -2,33 - 4934: -2,34 - 4935: -8,33 - 4936: -7,32 - 4937: -8,32 - 4938: -9,33 - 4939: -6,34 - 4940: -6,33 - 4941: -13,34 - 5009: -17,-28 - 5010: -19,-28 - 5011: -20,-27 - 5012: -20,-26 - 5013: -20,-27 - 5014: -15,-28 - 5015: -14,-28 - 5016: -14,-27 - 5017: -14,-29 - 5018: -17,-29 - 5080: -14,-38 - 5081: -14,-38 - 5099: -6,-37 - 5100: -5,-37 - 5101: -4,-37 - 5287: 78,-28 - 5288: 79,-28 - 5289: 78,-28 - 5290: 78,-27 - 5291: 78,-29 - 5356: 13,-45 - 5357: 12,-45 - 5358: 12,-50 - 5359: 12,-49 - 5360: 16,-49 - 5361: 15,-49 - 6167: 81,-34 - 6168: 82,-35 - 6169: 81,-35 - 6170: 81,-35 - 6196: -2,41 - 6197: -2,42 - 6198: -3,42 - 6199: -3,42 - 6200: -1,43 - 6222: 46,15 - 6223: 47,15 - 6224: 47,15 - 6225: 45,16 - 6438: 49,-1 - 6439: 51,-1 - 6440: 50,-2 - 6441: 49,-3 - 6442: 49,-5 - 6443: 51,-5 - 6444: 51,-3 - 6445: 50,-8 - 6446: 49,-8 - 6447: 48,-7 - 6448: 52,-8 - 6449: 54,-7 - 6450: 49,-10 - 6451: 50,-11 - 6452: 48,-11 - 6453: 51,-10 - 6454: 51,-11 - 6455: 52,-11 - 6456: 53,-11 - 6482: 50,2 - 6483: 50,4 - 6484: 50,9 - 6485: 50,12 - 6486: 50,13 - 6487: 47,9 - 6488: 47,7 - 6489: 41,8 - 6490: 41,7 - 6491: 40,8 - 6492: 40,7 - 6493: 44,8 - 6515: 46,4 - 6516: 45,4 - 6517: 46,2 - 6518: 45,2 - 6519: 45,1 - 6520: 46,5 - 6521: 40,5 - 6522: 44,4 - 6523: 44,7 - 6524: 55,3 - 6525: 54,2 - 6526: 53,3 - 6527: 55,4 - 6528: 57,4 - 6529: 56,2 - 6530: 55,1 - 6531: 55,6 - 6532: 53,7 - 6533: 53,6 - 6534: 55,8 - 6535: 56,10 - 6536: 55,10 - 6537: 53,12 - 6538: 53,11 - 6539: 57,14 - 6549: -1,-23 - 6550: 0,-23 - 6551: -4,-23 - 6552: -5,-23 - 6553: 35,19 - 6554: 34,19 - 6555: 35,20 - 6556: -8,27 - 6557: -12,27 - 6558: -10,27 - 6559: -14,27 - 6560: -15,27 - 6561: -15,27 - 6595: 88,-18 - 6596: 87,-18 - 6597: 91,-19 - 6598: 91,-18 - 6599: 92,-19 - 6681: 51,-36 - 6682: 51,-37 - 6683: 53,-39 - 6684: 54,-40 - 6685: 51,-35 - 6692: 51,-29 - 6698: 51,-26 - 6699: 52,-27 - 6700: 56,-27 - 6701: 56,-29 - 6717: -32,-12 - 6718: -34,-11 - 6719: -32,-10 - 6720: -33,-9 - 6721: -34,-9 - 6725: 61,-21 - 6726: -24,-42 - 6728: -25,-42 - 6729: -22,-42 - 6730: -22,-42 - 6737: -37,-45 - 6738: -38,-44 - 6739: -38,-46 - 6740: -37,-46 - 6831: 13,41 - 6832: 15,39 - 6833: 16,41 + 4723: -21,12 + 4724: -25,29 + 4725: -25,28 + 4726: -26,30 + 4727: -26,28 + 4728: -26,29 + 4752: -16,40 + 4753: -17,41 + 4754: -15,39 + 4755: -13,41 + 4756: -12,39 + 4807: -2,46 + 4808: -4,46 + 4809: -1,48 + 4810: 0,47 + 4811: -3,50 + 4812: 0,51 + 4813: 2,47 + 4814: 2,45 + 4815: 2,43 + 4816: 2,40 + 4817: -6,40 + 4818: -7,40 + 4819: -7,40 + 4820: -4,46 + 4821: -5,45 + 4822: -6,46 + 4823: 7,41 + 4824: 6,42 + 4825: 9,40 + 4826: 6,39 + 4827: 8,40 + 4828: 6,39 + 4829: 8,39 + 4830: 7,42 + 4831: 7,41 + 4832: 5,41 + 4863: 14,34 + 4864: 13,36 + 4865: 14,37 + 4866: 16,37 + 4867: 14,36 + 4868: 5,30 + 4869: 4,30 + 4870: 3,32 + 4871: 5,32 + 4872: 5,32 + 4873: 4,31 + 4874: 4,31 + 4875: 3,32 + 4876: 3,28 + 4877: 2,27 + 4878: 1,28 + 4879: 3,27 + 4880: 4,26 + 4881: 3,25 + 4882: 4,24 + 4883: 3,23 + 4884: 1,24 + 4885: 2,23 + 4903: -3,25 + 4904: -4,23 + 4905: -2,23 + 4906: -3,24 + 4907: 0,24 + 4908: 0,23 + 4909: -16,29 + 4910: -15,26 + 4911: -15,28 + 4912: -13,28 + 4913: -13,29 + 4914: -9,28 + 4915: -10,26 + 4916: -9,27 + 4917: -11,28 + 4918: -8,29 + 4919: -9,26 + 4920: -6,27 + 4921: -6,26 + 4922: -6,28 + 4923: -3,29 + 4924: -4,27 + 4925: -1,28 + 4926: -3,29 + 4927: -2,30 + 4928: -3,32 + 4929: -2,33 + 4930: -2,34 + 4931: -8,33 + 4932: -7,32 + 4933: -8,32 + 4934: -9,33 + 4935: -6,34 + 4936: -6,33 + 4937: -13,34 + 5005: -17,-28 + 5006: -19,-28 + 5007: -20,-27 + 5008: -20,-26 + 5009: -20,-27 + 5010: -15,-28 + 5011: -14,-28 + 5012: -14,-27 + 5013: -14,-29 + 5014: -17,-29 + 5076: -14,-38 + 5077: -14,-38 + 5095: -6,-37 + 5096: -5,-37 + 5097: -4,-37 + 5283: 78,-28 + 5284: 79,-28 + 5285: 78,-28 + 5286: 78,-27 + 5287: 78,-29 + 5352: 13,-45 + 5353: 12,-45 + 5354: 12,-50 + 5355: 12,-49 + 5356: 16,-49 + 5357: 15,-49 + 6163: 81,-34 + 6164: 82,-35 + 6165: 81,-35 + 6166: 81,-35 + 6192: -2,41 + 6193: -2,42 + 6194: -3,42 + 6195: -3,42 + 6196: -1,43 + 6218: 46,15 + 6219: 47,15 + 6220: 47,15 + 6221: 45,16 + 6433: 49,-1 + 6434: 51,-1 + 6435: 50,-2 + 6436: 49,-3 + 6437: 49,-5 + 6438: 51,-5 + 6439: 51,-3 + 6440: 50,-8 + 6441: 49,-8 + 6442: 48,-7 + 6443: 52,-8 + 6444: 54,-7 + 6445: 49,-10 + 6446: 50,-11 + 6447: 48,-11 + 6448: 51,-10 + 6449: 51,-11 + 6450: 52,-11 + 6451: 53,-11 + 6476: 50,2 + 6477: 50,4 + 6478: 50,9 + 6479: 50,12 + 6480: 50,13 + 6481: 47,9 + 6482: 47,7 + 6483: 41,8 + 6484: 41,7 + 6485: 40,8 + 6486: 40,7 + 6487: 44,8 + 6509: 46,4 + 6510: 45,4 + 6511: 46,2 + 6512: 45,2 + 6513: 45,1 + 6514: 46,5 + 6515: 40,5 + 6516: 44,4 + 6517: 44,7 + 6518: 55,3 + 6519: 54,2 + 6520: 53,3 + 6521: 55,4 + 6522: 57,4 + 6523: 56,2 + 6524: 55,1 + 6525: 55,6 + 6526: 53,7 + 6527: 53,6 + 6528: 55,8 + 6529: 56,10 + 6530: 55,10 + 6531: 53,12 + 6532: 53,11 + 6533: 57,14 + 6543: -1,-23 + 6544: 0,-23 + 6545: -4,-23 + 6546: -5,-23 + 6547: 35,19 + 6548: 34,19 + 6549: 35,20 + 6550: -8,27 + 6551: -12,27 + 6552: -10,27 + 6553: -14,27 + 6554: -15,27 + 6555: -15,27 + 6589: 88,-18 + 6590: 87,-18 + 6591: 91,-19 + 6592: 91,-18 + 6593: 92,-19 + 6675: 51,-36 + 6676: 51,-37 + 6677: 53,-39 + 6678: 54,-40 + 6679: 51,-35 + 6686: 51,-29 + 6692: 51,-26 + 6693: 52,-27 + 6694: 56,-27 + 6695: 56,-29 + 6711: -32,-12 + 6712: -34,-11 + 6713: -32,-10 + 6714: -33,-9 + 6715: -34,-9 + 6719: 61,-21 + 6720: -24,-42 + 6722: -25,-42 + 6723: -22,-42 + 6724: -22,-42 + 6731: -37,-45 + 6732: -38,-44 + 6733: -38,-46 + 6734: -37,-46 + 6825: 13,41 + 6826: 15,39 + 6827: 16,41 + 6863: 33,-2 + 6864: 34,-2 + 6865: 34,-2 + 6883: 7,-47 - node: cleanable: True angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: DirtHeavyMonotile decals: - 3015: -44,17 - 6646: 13,-30 - 6647: 16,-30 - 6648: 12,-30 - 6649: 12,-30 + 3011: -44,17 + 6640: 13,-30 + 6641: 16,-30 + 6642: 12,-30 + 6643: 12,-30 - node: cleanable: True angle: -6.283185307179586 rad color: '#FFFFFFFF' id: DirtLight decals: - 6621: 89,-21 - 6622: 90,-20 + 6615: 89,-21 + 6616: 90,-20 - node: cleanable: True color: '#FFFFFFFF' id: DirtLight decals: - 6540: 57,4 - 6541: 57,2 - 6542: 54,3 - 6543: 56,1 - 6544: 49,-15 - 6545: 52,-15 - 6546: 43,4 - 6736: -36,-44 - 6834: 14,42 - 6835: 14,40 - 6836: 16,42 + 6534: 57,4 + 6535: 57,2 + 6536: 54,3 + 6537: 56,1 + 6538: 49,-15 + 6539: 52,-15 + 6540: 43,4 + 6730: -36,-44 + 6828: 14,42 + 6829: 14,40 + 6830: 16,42 - node: cleanable: True angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: DirtLight decals: - 3014: -44,16 + 3010: -44,16 - node: cleanable: True color: '#FFFFFF47' id: DirtMedium decals: - 6654: 11,-29 - 6655: 11,-29 + 6648: 11,-29 + 6649: 11,-29 - node: cleanable: True angle: -6.283185307179586 rad color: '#FFFFFFFF' id: DirtMedium decals: - 6624: 91,-21 - 6625: 90,-21 + 6618: 91,-21 + 6619: 90,-21 - node: cleanable: True color: '#FFFFFFFF' id: DirtMedium decals: - 3955: -16,11 - 3956: -17,12 - 6693: 52,-30 - 6722: -32,-9 - 6723: -34,-12 - 6735: -36,-46 - 6837: 13,39 - 6838: 13,42 - 6839: 16,40 - 6840: 13,38 - 6841: 13,38 + 3951: -16,11 + 3952: -17,12 + 6687: 52,-30 + 6716: -32,-9 + 6717: -34,-12 + 6729: -36,-46 + 6831: 13,39 + 6832: 13,42 + 6833: 16,40 + 6834: 13,38 + 6835: 13,38 + 6885: 9,-47 - node: cleanable: True angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: DirtMedium decals: - 3013: -44,15 + 3009: -44,15 - node: color: '#FFFFFFFF' id: FlowersBROne @@ -6427,7 +6428,7 @@ entities: color: '#FFFFFFFF' id: FlowersBRThree decals: - 3047: 80.70172,-6.173584 + 3043: 80.70172,-6.173584 - node: color: '#FFFFFFFF' id: FlowersBRTwo @@ -6458,7 +6459,7 @@ entities: color: '#FFFFFFFF' id: Flowerspv1 decals: - 3048: 80.04127,-7.0725327 + 3044: 80.04127,-7.0725327 - node: color: '#FFFFFFFF' id: Flowerspv3 @@ -6486,14 +6487,14 @@ entities: color: '#FFFFFFFF' id: Flowersy2 decals: - 3049: 81.08699,-7.6962934 + 3045: 81.08699,-7.6962934 - node: color: '#FFFFFFFF' id: Flowersy3 decals: 877: -50,4 908: -47,-7 - 2257: 25,1 + 2253: 25,1 - node: color: '#FFFFFFFF' id: Flowersy4 @@ -6504,13 +6505,13 @@ entities: color: '#EFB34196' id: FullTileOverlayGreyscale decals: - 6201: 43,13 + 6197: 43,13 - node: cleanable: True color: '#FFFFFFFF' id: Grassa2 decals: - 3037: 80,-6 + 3033: 80,-6 - node: color: '#FFFFFFFF' id: Grassa3 @@ -6527,7 +6528,7 @@ entities: color: '#FFFFFFFF' id: Grassa4 decals: - 3036: 80,-8 + 3032: 80,-8 - node: color: '#FFFFFFFF' id: Grassa5 @@ -6574,7 +6575,7 @@ entities: color: '#FFFFFFFF' id: Grassc1 decals: - 3039: 79.637665,-6.118546 + 3035: 79.637665,-6.118546 - node: color: '#FFFFFFFF' id: Grassc2 @@ -6585,7 +6586,7 @@ entities: color: '#FFFFFFFF' id: Grassc2 decals: - 3040: 81.362175,-7.1642623 + 3036: 81.362175,-7.1642623 - node: color: '#FFFFFFFF' id: Grassc4 @@ -6597,7 +6598,7 @@ entities: color: '#FFFFFFFF' id: Grassc4 decals: - 3038: 79.56428,-7.366067 + 3034: 79.56428,-7.366067 - node: color: '#FFFFFFFF' id: Grassd1 @@ -6609,7 +6610,7 @@ entities: color: '#FFFFFFFF' id: Grassd1 decals: - 3041: 79.14232,-8.063211 + 3037: 79.14232,-8.063211 - node: color: '#FFFFFFFF' id: Grassd2 @@ -6628,8 +6629,8 @@ entities: color: '#FFFFFFFF' id: Grassd3 decals: - 3042: 79.05059,-6.320351 - 3043: 80.53661,-6.6872687 + 3038: 79.05059,-6.320351 + 3039: 80.53661,-6.6872687 - node: color: '#FFFFFFFF' id: Grasse1 @@ -6641,13 +6642,13 @@ entities: color: '#FFFFFFFF' id: Grasse1 decals: - 3046: 81.784134,-6.4304266 + 3042: 81.784134,-6.4304266 - node: cleanable: True color: '#FFFFFFFF' id: Grasse2 decals: - 3044: 80.518265,-8.02652 + 3040: 80.518265,-8.02652 - node: color: '#FFFFFFFF' id: Grasse3 @@ -6661,12 +6662,12 @@ entities: color: '#FFFFFFFF' id: Grasse3 decals: - 3045: 80.72007,-6.0451627 + 3041: 80.72007,-6.0451627 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale decals: - 6271: 44,7 + 6267: 44,7 - node: color: '#A4610696' id: HalfTileOverlayGreyscale @@ -6713,7 +6714,7 @@ entities: color: '#52B4E996' id: HalfTileOverlayGreyscale180 decals: - 6272: 44,9 + 6268: 44,9 - node: color: '#A4610696' id: HalfTileOverlayGreyscale180 @@ -6737,7 +6738,7 @@ entities: color: '#52B4E996' id: HalfTileOverlayGreyscale270 decals: - 6273: 45,8 + 6269: 45,8 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale270 @@ -6752,7 +6753,7 @@ entities: color: '#52B4E996' id: HalfTileOverlayGreyscale90 decals: - 6274: 43,8 + 6270: 43,8 - node: color: '#A4610696' id: HalfTileOverlayGreyscale90 @@ -6798,8 +6799,8 @@ entities: color: '#FFFFFFFF' id: LoadingArea decals: - 6613: 89,-20 - 6614: 90,-20 + 6607: 89,-20 + 6608: 90,-20 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' @@ -6807,25 +6808,25 @@ entities: decals: 1791: 58,-24 1792: 58,-23 - 2190: -4,-36 - 2208: -56,-59 - 2209: -56,-66 + 2186: -4,-36 + 2204: -56,-59 + 2205: -56,-66 - node: color: '#FFFFFFFF' id: LoadingArea decals: 352: 39,-22 - 3175: 25,22 - 3176: 29,22 - 6180: -44,24 + 3171: 25,22 + 3172: 29,22 + 6176: -44,24 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: LoadingArea decals: - 2224: -40,-59 - 2225: -40,-66 - 6181: -45,23 + 2220: -40,-59 + 2221: -40,-66 + 6177: -45,23 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' @@ -6833,35 +6834,35 @@ entities: decals: 351: 45,-22 1772: 63,-26 - 6182: -44,22 + 6178: -44,22 - node: angle: 4.71238898038469 rad color: '#FFFFFFFF' id: LoadingArea decals: 1273: 23,12 - 6183: -43,23 + 6179: -43,23 - node: color: '#52B4E996' id: MiniTileCheckerAOverlay decals: - 2242: 13,25 - 2243: 14,25 - 2244: 15,25 - 2245: 15,24 - 2246: 15,23 - 2247: 14,23 - 2248: 14,24 - 2249: 13,24 - 2250: 13,23 + 2238: 13,25 + 2239: 14,25 + 2240: 15,25 + 2241: 15,24 + 2242: 15,23 + 2243: 14,23 + 2244: 14,24 + 2245: 13,24 + 2246: 13,23 - node: color: '#FFFFFFFF' id: MiniTileDarkLineE decals: - 6765: 9,39 - 6766: 9,40 - 6767: 9,41 - 6768: 9,42 + 6759: 9,39 + 6760: 9,40 + 6761: 9,41 + 6762: 9,42 - node: color: '#FFFFFFFF' id: MiniTileDarkLineN @@ -6876,7 +6877,7 @@ entities: color: '#FFFFFFFF' id: MiniTileDarkLineN decals: - 3282: -19,20 + 3278: -19,20 - node: color: '#FFFFFFFF' id: MiniTileDarkLineS @@ -6891,649 +6892,649 @@ entities: color: '#FFFFFFFF' id: MiniTileDarkLineW decals: - 6769: 5,39 - 6770: 5,40 - 6771: 5,41 - 6772: 5,42 + 6763: 5,39 + 6764: 5,40 + 6765: 5,41 + 6766: 5,42 - node: color: '#9D9D97FF' id: MiniTileWhiteCornerNe decals: - 2428: -43,-25 - 2514: -40,-46 + 2424: -43,-25 + 2510: -40,-46 - node: color: '#9D9D97FF' id: MiniTileWhiteCornerNw decals: - 2328: -26,-9 - 2372: -55,7 - 2513: -56,-46 - 2614: 27,-19 - 2824: -27,21 + 2324: -26,-9 + 2368: -55,7 + 2509: -56,-46 + 2610: 27,-19 + 2820: -27,21 - node: color: '#9D9D97FF' id: MiniTileWhiteCornerSe decals: - 2316: -23,-11 - 2440: -46,-33 - 2444: -43,-32 + 2312: -23,-11 + 2436: -46,-33 + 2440: -43,-32 - node: color: '#9D9D97FF' id: MiniTileWhiteCornerSw decals: - 2436: -52,-32 - 2439: -50,-33 - 2590: 7,-34 - 2694: 40,1 - 2723: 19,2 + 2432: -52,-32 + 2435: -50,-33 + 2586: 7,-34 + 2690: 40,1 + 2719: 19,2 - node: color: '#9D9D97FF' id: MiniTileWhiteInnerNe decals: - 2291: -23,-30 - 2340: -25,9 - 2429: -44,-25 - 2559: -28,-30 - 2842: 77,-19 - 2843: 77,-15 + 2287: -23,-30 + 2336: -25,9 + 2425: -44,-25 + 2555: -28,-30 + 2838: 77,-19 + 2839: 77,-15 - node: color: '#9D9D97FF' id: MiniTileWhiteInnerNw decals: - 2329: -25,-9 - 2558: -41,-30 - 2606: 27,-25 - 2658: 57,-19 + 2325: -25,-9 + 2554: -41,-30 + 2602: 27,-25 + 2654: 57,-19 - node: color: '#9D9D97FF' id: MiniTileWhiteInnerSe decals: - 2315: -24,-11 - 2441: -46,-32 - 2447: -47,-33 - 2512: -54,-48 - 2557: -28,-27 - 2662: 59,-21 - 2840: 77,-13 - 2841: 77,-17 + 2311: -24,-11 + 2437: -46,-32 + 2443: -47,-33 + 2508: -54,-48 + 2553: -28,-27 + 2658: 59,-21 + 2836: 77,-13 + 2837: 77,-17 - node: color: '#9D9D97FF' id: MiniTileWhiteInnerSw decals: - 2438: -50,-32 - 2448: -49,-33 - 2511: -42,-48 - 2556: -41,-27 - 2588: 7,-32 - 2667: 52,-21 - 2693: 41,1 - 2695: 40,2 - 2763: 19,19 + 2434: -50,-32 + 2444: -49,-33 + 2507: -42,-48 + 2552: -41,-27 + 2584: 7,-32 + 2663: 52,-21 + 2689: 41,1 + 2691: 40,2 + 2759: 19,19 - node: color: '#9D9D97FF' id: MiniTileWhiteLineE decals: - 2292: -23,-29 - 2293: -24,-25 - 2294: -24,-24 - 2295: -24,-23 - 2296: -24,-23 - 2297: -24,-20 + 2288: -23,-29 + 2289: -24,-25 + 2290: -24,-24 + 2291: -24,-23 + 2292: -24,-23 + 2293: -24,-20 + 2294: -24,-20 + 2295: -24,-20 + 2296: -24,-21 + 2297: -24,-21 2298: -24,-20 - 2299: -24,-20 - 2300: -24,-21 - 2301: -24,-21 - 2302: -24,-20 - 2303: -24,-19 - 2304: -24,-19 - 2305: -24,-19 - 2306: -24,-17 - 2307: -24,-17 - 2308: -24,-16 - 2309: -24,-16 - 2310: -24,-16 - 2311: -24,-15 - 2312: -24,-14 - 2313: -24,-14 - 2314: -24,-13 - 2317: -23,-10 - 2318: -23,-9 - 2319: -23,-8 - 2330: -25,4 - 2331: -25,5 - 2332: -25,6 - 2333: -25,7 - 2345: -43,0 - 2346: -43,1 - 2347: -43,2 - 2348: -43,3 - 2349: -43,-1 - 2388: -53,-6 - 2389: -53,-7 - 2390: -53,-7 - 2391: -53,-8 - 2392: -53,-9 - 2393: -53,-9 - 2394: -53,-10 - 2395: -53,-12 - 2403: -53,-13 - 2404: -53,-13 - 2405: -53,-15 - 2406: -53,-15 - 2407: -53,-15 - 2409: -53,-14 - 2410: -53,-16 - 2411: -53,-17 - 2412: -53,-18 - 2418: -44,-20 - 2419: -44,-21 - 2420: -44,-22 - 2421: -44,-22 - 2422: -44,-23 - 2423: -44,-23 - 2424: -44,-24 - 2425: -43,-25 - 2426: -43,-26 - 2427: -43,-27 - 2445: -43,-31 - 2446: -43,-30 - 2451: -47,-35 - 2452: -47,-36 - 2453: -47,-36 - 2454: -47,-38 - 2455: -47,-39 - 2456: -47,-40 - 2467: -47,-41 - 2468: -47,-42 - 2469: -47,-42 - 2470: -47,-43 - 2471: -47,-44 - 2472: -47,-44 - 2523: -40,-47 - 2524: -40,-48 - 2525: -40,-50 - 2526: -40,-50 - 2527: -40,-51 - 2528: -40,-51 - 2529: -40,-51 - 2530: -40,-52 - 2531: -40,-53 - 2532: -40,-53 - 2533: -40,-53 - 2534: -40,-54 - 2535: -54,-51 - 2536: -54,-51 - 2537: -54,-52 - 2538: -54,-52 - 2539: -54,-53 - 2540: -54,-53 - 2541: -54,-54 - 2552: -28,-29 - 2553: -28,-28 - 2663: 59,-22 - 2668: 43,-17 - 2669: 43,-16 - 2670: 43,-15 - 2671: 43,-15 - 2677: 43,-12 - 2678: 43,-11 - 2743: 21,10 - 2744: 21,11 - 2745: 21,11 - 2746: 21,12 - 2747: 21,12 - 2748: 21,12 - 2749: 21,13 - 2750: 21,14 - 2751: 21,15 - 2838: 77,-14 - 2839: 77,-18 - 3174: -54,-50 - 6860: -24,-18 + 2299: -24,-19 + 2300: -24,-19 + 2301: -24,-19 + 2302: -24,-17 + 2303: -24,-17 + 2304: -24,-16 + 2305: -24,-16 + 2306: -24,-16 + 2307: -24,-15 + 2308: -24,-14 + 2309: -24,-14 + 2310: -24,-13 + 2313: -23,-10 + 2314: -23,-9 + 2315: -23,-8 + 2326: -25,4 + 2327: -25,5 + 2328: -25,6 + 2329: -25,7 + 2341: -43,0 + 2342: -43,1 + 2343: -43,2 + 2344: -43,3 + 2345: -43,-1 + 2384: -53,-6 + 2385: -53,-7 + 2386: -53,-7 + 2387: -53,-8 + 2388: -53,-9 + 2389: -53,-9 + 2390: -53,-10 + 2391: -53,-12 + 2399: -53,-13 + 2400: -53,-13 + 2401: -53,-15 + 2402: -53,-15 + 2403: -53,-15 + 2405: -53,-14 + 2406: -53,-16 + 2407: -53,-17 + 2408: -53,-18 + 2414: -44,-20 + 2415: -44,-21 + 2416: -44,-22 + 2417: -44,-22 + 2418: -44,-23 + 2419: -44,-23 + 2420: -44,-24 + 2421: -43,-25 + 2422: -43,-26 + 2423: -43,-27 + 2441: -43,-31 + 2442: -43,-30 + 2447: -47,-35 + 2448: -47,-36 + 2449: -47,-36 + 2450: -47,-38 + 2451: -47,-39 + 2452: -47,-40 + 2463: -47,-41 + 2464: -47,-42 + 2465: -47,-42 + 2466: -47,-43 + 2467: -47,-44 + 2468: -47,-44 + 2519: -40,-47 + 2520: -40,-48 + 2521: -40,-50 + 2522: -40,-50 + 2523: -40,-51 + 2524: -40,-51 + 2525: -40,-51 + 2526: -40,-52 + 2527: -40,-53 + 2528: -40,-53 + 2529: -40,-53 + 2530: -40,-54 + 2531: -54,-51 + 2532: -54,-51 + 2533: -54,-52 + 2534: -54,-52 + 2535: -54,-53 + 2536: -54,-53 + 2537: -54,-54 + 2548: -28,-29 + 2549: -28,-28 + 2659: 59,-22 + 2664: 43,-17 + 2665: 43,-16 + 2666: 43,-15 + 2667: 43,-15 + 2673: 43,-12 + 2674: 43,-11 + 2739: 21,10 + 2740: 21,11 + 2741: 21,11 + 2742: 21,12 + 2743: 21,12 + 2744: 21,12 + 2745: 21,13 + 2746: 21,14 + 2747: 21,15 + 2834: 77,-14 + 2835: 77,-18 + 3170: -54,-50 + 6848: -24,-18 - node: color: '#9D9D97FF' id: MiniTileWhiteLineN decals: - 2285: -22,-30 - 2286: -21,-30 - 2287: -20,-30 - 2288: -20,-30 - 2289: -18,-30 - 2290: -19,-30 - 2334: -19,9 - 2335: -20,9 - 2336: -21,9 - 2337: -22,9 - 2338: -24,9 - 2339: -23,9 - 2359: -51,7 - 2360: -50,7 - 2361: -49,7 - 2362: -48,7 - 2363: -47,7 - 2364: -47,7 - 2365: -46,7 - 2366: -45,7 - 2367: -42,7 - 2368: -43,7 - 2369: -54,7 - 2370: -55,7 - 2371: -53,7 - 2473: -54,-46 - 2474: -51,-46 - 2475: -50,-46 - 2476: -50,-46 - 2477: -51,-46 - 2478: -53,-46 + 2281: -22,-30 + 2282: -21,-30 + 2283: -20,-30 + 2284: -20,-30 + 2285: -18,-30 + 2286: -19,-30 + 2330: -19,9 + 2331: -20,9 + 2332: -21,9 + 2333: -22,9 + 2334: -24,9 + 2335: -23,9 + 2355: -51,7 + 2356: -50,7 + 2357: -49,7 + 2358: -48,7 + 2359: -47,7 + 2360: -47,7 + 2361: -46,7 + 2362: -45,7 + 2363: -42,7 + 2364: -43,7 + 2365: -54,7 + 2366: -55,7 + 2367: -53,7 + 2469: -54,-46 + 2470: -51,-46 + 2471: -50,-46 + 2472: -50,-46 + 2473: -51,-46 + 2474: -53,-46 + 2475: -54,-46 + 2476: -54,-46 + 2477: -53,-46 + 2478: -52,-46 2479: -54,-46 - 2480: -54,-46 - 2481: -53,-46 - 2482: -52,-46 - 2483: -54,-46 - 2484: -55,-46 - 2485: -46,-46 - 2486: -45,-46 - 2487: -45,-46 - 2488: -44,-46 - 2489: -44,-46 - 2490: -43,-46 - 2491: -43,-46 - 2492: -42,-46 - 2493: -42,-46 - 2494: -41,-46 - 2578: -11,-30 - 2579: -10,-30 - 2580: -10,-30 - 2604: 25,-25 - 2605: 26,-25 - 2615: 28,-19 - 2616: 29,-19 - 2617: 29,-19 - 2618: 31,-19 - 2619: 31,-19 - 2620: 32,-19 - 2621: 32,-19 - 2622: 32,-19 - 2623: 34,-19 - 2624: 34,-19 - 2625: 34,-19 - 2626: 33,-19 - 2627: 35,-19 - 2628: 35,-19 - 2629: 36,-19 - 2630: 36,-19 - 2631: 37,-19 - 2632: 37,-19 - 2633: 39,-19 - 2634: 39,-19 - 2635: 40,-19 - 2636: 40,-19 - 2637: 40,-19 - 2638: 41,-19 - 2639: 42,-19 - 2640: 42,-19 - 2641: 43,-19 - 2642: 44,-19 - 2643: 44,-19 - 2644: 45,-19 - 2645: 47,-19 - 2646: 47,-19 - 2647: 48,-19 - 2648: 49,-19 - 2649: 49,-19 - 2650: 50,-19 - 2651: 51,-19 - 2652: 52,-19 - 2653: 52,-19 - 2654: 54,-19 - 2655: 55,-19 - 2656: 56,-19 - 2657: 53,-19 - 2700: 37,4 - 2701: 35,4 - 2702: 34,4 - 2703: 33,4 - 2704: 32,4 - 2705: 32,4 - 2706: 31,4 - 2766: 20,21 - 2767: 19,21 - 2768: 19,21 - 2769: 18,21 - 2770: 16,21 - 2771: 16,21 - 2772: 16,21 - 2773: 16,21 - 2774: 15,21 - 2775: 13,21 - 2776: 13,21 - 2777: 12,21 - 2778: 11,21 - 2779: 10,21 - 2780: 10,21 - 2781: 9,21 - 2782: 8,21 - 2821: -26,21 - 2831: 66,-17 - 2832: 68,-17 - 2833: 67,-17 - 2834: 69,-17 - 2835: 70,-17 - 2836: 70,-17 - 2837: 71,-17 + 2480: -55,-46 + 2481: -46,-46 + 2482: -45,-46 + 2483: -45,-46 + 2484: -44,-46 + 2485: -44,-46 + 2486: -43,-46 + 2487: -43,-46 + 2488: -42,-46 + 2489: -42,-46 + 2490: -41,-46 + 2574: -11,-30 + 2575: -10,-30 + 2576: -10,-30 + 2600: 25,-25 + 2601: 26,-25 + 2611: 28,-19 + 2612: 29,-19 + 2613: 29,-19 + 2614: 31,-19 + 2615: 31,-19 + 2616: 32,-19 + 2617: 32,-19 + 2618: 32,-19 + 2619: 34,-19 + 2620: 34,-19 + 2621: 34,-19 + 2622: 33,-19 + 2623: 35,-19 + 2624: 35,-19 + 2625: 36,-19 + 2626: 36,-19 + 2627: 37,-19 + 2628: 37,-19 + 2629: 39,-19 + 2630: 39,-19 + 2631: 40,-19 + 2632: 40,-19 + 2633: 40,-19 + 2634: 41,-19 + 2635: 42,-19 + 2636: 42,-19 + 2637: 43,-19 + 2638: 44,-19 + 2639: 44,-19 + 2640: 45,-19 + 2641: 47,-19 + 2642: 47,-19 + 2643: 48,-19 + 2644: 49,-19 + 2645: 49,-19 + 2646: 50,-19 + 2647: 51,-19 + 2648: 52,-19 + 2649: 52,-19 + 2650: 54,-19 + 2651: 55,-19 + 2652: 56,-19 + 2653: 53,-19 + 2696: 37,4 + 2697: 35,4 + 2698: 34,4 + 2699: 33,4 + 2700: 32,4 + 2701: 32,4 + 2702: 31,4 + 2762: 20,21 + 2763: 19,21 + 2764: 19,21 + 2765: 18,21 + 2766: 16,21 + 2767: 16,21 + 2768: 16,21 + 2769: 16,21 + 2770: 15,21 + 2771: 13,21 + 2772: 13,21 + 2773: 12,21 + 2774: 11,21 + 2775: 10,21 + 2776: 10,21 + 2777: 9,21 + 2778: 8,21 + 2817: -26,21 + 2827: 66,-17 + 2828: 68,-17 + 2829: 67,-17 + 2830: 69,-17 + 2831: 70,-17 + 2832: 70,-17 + 2833: 71,-17 - node: color: '#9D9D97FF' id: MiniTileWhiteLineS decals: - 2275: -25,-32 - 2276: -23,-32 - 2277: -24,-32 - 2278: -22,-32 - 2279: -22,-32 - 2280: -21,-32 - 2281: -19,-32 - 2282: -19,-32 - 2283: -18,-32 - 2284: -18,-32 - 2350: -45,-5 - 2351: -46,-5 - 2352: -47,-5 - 2353: -48,-5 - 2354: -48,-5 - 2355: -50,-5 - 2356: -50,-5 - 2357: -49,-5 - 2358: -51,-5 - 2437: -51,-32 - 2442: -45,-32 - 2443: -44,-32 - 2495: -53,-48 - 2496: -52,-48 - 2497: -51,-48 + 2271: -25,-32 + 2272: -23,-32 + 2273: -24,-32 + 2274: -22,-32 + 2275: -22,-32 + 2276: -21,-32 + 2277: -19,-32 + 2278: -19,-32 + 2279: -18,-32 + 2280: -18,-32 + 2346: -45,-5 + 2347: -46,-5 + 2348: -47,-5 + 2349: -48,-5 + 2350: -48,-5 + 2351: -50,-5 + 2352: -50,-5 + 2353: -49,-5 + 2354: -51,-5 + 2433: -51,-32 + 2438: -45,-32 + 2439: -44,-32 + 2491: -53,-48 + 2492: -52,-48 + 2493: -51,-48 + 2494: -50,-48 + 2495: -50,-48 + 2496: -49,-48 + 2497: -50,-48 2498: -50,-48 - 2499: -50,-48 - 2500: -49,-48 - 2501: -50,-48 - 2502: -50,-48 - 2503: -48,-48 - 2504: -48,-48 - 2505: -47,-48 - 2506: -47,-48 - 2507: -46,-48 - 2508: -45,-48 - 2509: -44,-48 - 2510: -43,-48 - 2560: -16,-32 + 2499: -48,-48 + 2500: -48,-48 + 2501: -47,-48 + 2502: -47,-48 + 2503: -46,-48 + 2504: -45,-48 + 2505: -44,-48 + 2506: -43,-48 + 2556: -16,-32 + 2557: -14,-32 + 2558: -14,-32 + 2559: -14,-32 + 2560: -15,-32 2561: -14,-32 2562: -14,-32 - 2563: -14,-32 - 2564: -15,-32 - 2565: -14,-32 - 2566: -14,-32 - 2567: -13,-32 - 2568: -12,-32 - 2569: -12,-32 - 2570: -11,-32 - 2571: -11,-32 - 2572: -10,-32 - 2573: -10,-32 - 2574: -7,-32 - 2575: -6,-32 - 2576: -5,-32 - 2577: -5,-32 - 2581: -4,-32 - 2582: -3,-32 - 2583: -3,-32 - 2584: -3,-32 - 2585: -2,-32 - 2586: 3,-32 - 2587: 6,-32 - 2591: 8,-34 - 2592: 9,-34 - 2593: 9,-34 - 2594: 11,-34 - 2595: 11,-34 - 2596: 12,-34 - 2597: 12,-34 - 2598: 13,-34 - 2599: 13,-34 - 2600: 14,-34 - 2601: 15,-34 - 2602: 15,-34 - 2603: 16,-34 - 2661: 60,-21 - 2696: 38,2 - 2697: 36,2 - 2698: 37,2 - 2699: 38,2 - 2707: 34,2 - 2708: 33,2 - 2709: 32,2 - 2710: 31,2 - 2711: 31,2 - 2712: 27,2 - 2713: 26,2 - 2714: 26,2 - 2715: 25,2 - 2716: 24,2 - 2717: 23,2 - 2718: 23,2 - 2719: 21,2 - 2720: 21,2 - 2721: 22,2 - 2722: 20,2 - 2764: 18,19 - 2765: 16,19 - 2783: 14,19 - 2784: 13,19 - 2785: 12,19 - 2786: 11,19 - 2787: 10,19 - 2788: 10,19 - 2789: 9,19 - 2790: 9,19 - 2791: 8,19 - 2792: 6,19 - 2793: 6,19 - 2794: 7,19 - 2795: 5,19 - 2796: 0,19 - 2797: 0,19 - 2798: -1,19 - 2799: -1,19 - 2800: -2,19 - 2801: -3,19 - 2802: -3,19 - 2803: -4,19 - 2804: -5,19 - 2805: -6,19 - 2806: -6,19 - 2807: -7,19 - 2808: -7,19 - 2809: -8,19 - 2810: -8,19 - 2811: -8,19 - 2812: -11,19 - 2813: -11,19 - 2814: -13,19 - 2815: -13,19 - 2816: -14,19 - 2817: -12,19 - 2818: -16,19 - 2819: -16,19 - 2820: -18,19 - 2825: 66,-19 - 2826: 67,-19 - 2827: 68,-19 - 2828: 69,-19 - 2829: 70,-19 - 2830: 71,-19 - 3071: 1,19 - 3072: 2,19 + 2563: -13,-32 + 2564: -12,-32 + 2565: -12,-32 + 2566: -11,-32 + 2567: -11,-32 + 2568: -10,-32 + 2569: -10,-32 + 2570: -7,-32 + 2571: -6,-32 + 2572: -5,-32 + 2573: -5,-32 + 2577: -4,-32 + 2578: -3,-32 + 2579: -3,-32 + 2580: -3,-32 + 2581: -2,-32 + 2582: 3,-32 + 2583: 6,-32 + 2587: 8,-34 + 2588: 9,-34 + 2589: 9,-34 + 2590: 11,-34 + 2591: 11,-34 + 2592: 12,-34 + 2593: 12,-34 + 2594: 13,-34 + 2595: 13,-34 + 2596: 14,-34 + 2597: 15,-34 + 2598: 15,-34 + 2599: 16,-34 + 2657: 60,-21 + 2692: 38,2 + 2693: 36,2 + 2694: 37,2 + 2695: 38,2 + 2703: 34,2 + 2704: 33,2 + 2705: 32,2 + 2706: 31,2 + 2707: 31,2 + 2708: 27,2 + 2709: 26,2 + 2710: 26,2 + 2711: 25,2 + 2712: 24,2 + 2713: 23,2 + 2714: 23,2 + 2715: 21,2 + 2716: 21,2 + 2717: 22,2 + 2718: 20,2 + 2760: 18,19 + 2761: 16,19 + 2779: 14,19 + 2780: 13,19 + 2781: 12,19 + 2782: 11,19 + 2783: 10,19 + 2784: 10,19 + 2785: 9,19 + 2786: 9,19 + 2787: 8,19 + 2788: 6,19 + 2789: 6,19 + 2790: 7,19 + 2791: 5,19 + 2792: 0,19 + 2793: 0,19 + 2794: -1,19 + 2795: -1,19 + 2796: -2,19 + 2797: -3,19 + 2798: -3,19 + 2799: -4,19 + 2800: -5,19 + 2801: -6,19 + 2802: -6,19 + 2803: -7,19 + 2804: -7,19 + 2805: -8,19 + 2806: -8,19 + 2807: -8,19 + 2808: -11,19 + 2809: -11,19 + 2810: -13,19 + 2811: -13,19 + 2812: -14,19 + 2813: -12,19 + 2814: -16,19 + 2815: -16,19 + 2816: -18,19 + 2821: 66,-19 + 2822: 67,-19 + 2823: 68,-19 + 2824: 69,-19 + 2825: 70,-19 + 2826: 71,-19 + 3067: 1,19 + 3068: 2,19 - node: color: '#9D9D97FF' id: MiniTileWhiteLineW decals: - 2258: -26,-21 - 2259: -26,-20 - 2260: -26,-18 - 2261: -26,-19 - 2262: -26,-17 - 2267: -26,-25 - 2268: -26,-24 - 2269: -26,-27 - 2270: -26,-26 - 2271: -26,-28 - 2272: -26,-29 - 2273: -26,-30 - 2274: -26,-31 - 2320: -25,-8 - 2321: -26,-10 - 2322: -26,-11 - 2323: -26,-16 - 2324: -26,-15 - 2325: -26,-15 - 2326: -26,-14 - 2327: -26,-13 - 2341: -27,7 - 2342: -27,8 - 2343: -27,6 - 2344: -27,5 - 2373: -55,5 - 2374: -55,3 - 2375: -55,2 - 2376: -55,1 - 2377: -55,0 - 2378: -55,-1 - 2379: -55,-3 - 2380: -55,-6 - 2381: -55,-6 - 2382: -55,-7 - 2383: -55,-7 - 2384: -55,-8 - 2385: -55,-9 - 2386: -55,-9 - 2387: -55,-11 - 2396: -55,-10 - 2397: -55,-11 - 2398: -55,-12 - 2399: -55,-13 - 2400: -55,-13 - 2401: -55,-15 - 2402: -55,-15 - 2408: -55,-14 - 2413: -55,-16 - 2414: -55,-17 - 2415: -55,-18 - 2416: -55,-20 - 2417: -55,-21 - 2430: -52,-28 - 2431: -52,-29 - 2432: -52,-30 - 2433: -52,-30 - 2434: -52,-31 - 2435: -52,-32 - 2449: -49,-35 - 2450: -49,-36 - 2457: -49,-38 - 2458: -49,-38 - 2459: -49,-39 - 2460: -49,-40 - 2461: -49,-40 - 2462: -49,-41 - 2463: -49,-42 - 2464: -49,-43 - 2465: -49,-43 - 2466: -49,-44 - 2515: -42,-50 - 2516: -42,-50 - 2517: -42,-51 - 2518: -42,-51 - 2519: -42,-52 - 2520: -42,-52 - 2521: -42,-53 - 2522: -42,-54 - 2542: -56,-54 - 2543: -56,-53 - 2544: -56,-52 - 2545: -56,-52 - 2546: -56,-51 - 2547: -56,-51 - 2548: -56,-48 - 2549: -56,-48 - 2550: -56,-47 - 2551: -56,-50 - 2554: -41,-29 - 2555: -41,-28 - 2589: 7,-33 - 2607: 27,-23 - 2608: 27,-23 - 2609: 27,-23 - 2610: 27,-22 - 2611: 27,-24 - 2612: 27,-21 - 2613: 27,-20 - 2659: 57,-18 - 2660: 57,-17 - 2664: 52,-24 - 2665: 52,-23 - 2666: 52,-22 - 2672: 41,-17 - 2673: 41,-16 - 2674: 41,-15 - 2675: 41,-12 - 2676: 41,-11 - 2679: 41,-9 - 2680: 41,-8 - 2681: 41,-7 - 2682: 41,-7 - 2683: 41,-6 - 2684: 41,-5 - 2685: 41,-5 - 2686: 41,-4 - 2687: 41,-3 - 2688: 41,-3 - 2689: 41,-1 - 2690: 41,-1 - 2691: 41,-1 - 2692: 41,-2 - 2724: 19,3 - 2725: 19,4 - 2726: 19,4 - 2727: 19,4 - 2728: 19,5 - 2729: 19,5 - 2730: 19,7 - 2731: 19,8 - 2732: 19,8 - 2733: 19,8 + 2254: -26,-21 + 2255: -26,-20 + 2256: -26,-18 + 2257: -26,-19 + 2258: -26,-17 + 2263: -26,-25 + 2264: -26,-24 + 2265: -26,-27 + 2266: -26,-26 + 2267: -26,-28 + 2268: -26,-29 + 2269: -26,-30 + 2270: -26,-31 + 2316: -25,-8 + 2317: -26,-10 + 2318: -26,-11 + 2319: -26,-16 + 2320: -26,-15 + 2321: -26,-15 + 2322: -26,-14 + 2323: -26,-13 + 2337: -27,7 + 2338: -27,8 + 2339: -27,6 + 2340: -27,5 + 2369: -55,5 + 2370: -55,3 + 2371: -55,2 + 2372: -55,1 + 2373: -55,0 + 2374: -55,-1 + 2375: -55,-3 + 2376: -55,-6 + 2377: -55,-6 + 2378: -55,-7 + 2379: -55,-7 + 2380: -55,-8 + 2381: -55,-9 + 2382: -55,-9 + 2383: -55,-11 + 2392: -55,-10 + 2393: -55,-11 + 2394: -55,-12 + 2395: -55,-13 + 2396: -55,-13 + 2397: -55,-15 + 2398: -55,-15 + 2404: -55,-14 + 2409: -55,-16 + 2410: -55,-17 + 2411: -55,-18 + 2412: -55,-20 + 2413: -55,-21 + 2426: -52,-28 + 2427: -52,-29 + 2428: -52,-30 + 2429: -52,-30 + 2430: -52,-31 + 2431: -52,-32 + 2445: -49,-35 + 2446: -49,-36 + 2453: -49,-38 + 2454: -49,-38 + 2455: -49,-39 + 2456: -49,-40 + 2457: -49,-40 + 2458: -49,-41 + 2459: -49,-42 + 2460: -49,-43 + 2461: -49,-43 + 2462: -49,-44 + 2511: -42,-50 + 2512: -42,-50 + 2513: -42,-51 + 2514: -42,-51 + 2515: -42,-52 + 2516: -42,-52 + 2517: -42,-53 + 2518: -42,-54 + 2538: -56,-54 + 2539: -56,-53 + 2540: -56,-52 + 2541: -56,-52 + 2542: -56,-51 + 2543: -56,-51 + 2544: -56,-48 + 2545: -56,-48 + 2546: -56,-47 + 2547: -56,-50 + 2550: -41,-29 + 2551: -41,-28 + 2585: 7,-33 + 2603: 27,-23 + 2604: 27,-23 + 2605: 27,-23 + 2606: 27,-22 + 2607: 27,-24 + 2608: 27,-21 + 2609: 27,-20 + 2655: 57,-18 + 2656: 57,-17 + 2660: 52,-24 + 2661: 52,-23 + 2662: 52,-22 + 2668: 41,-17 + 2669: 41,-16 + 2670: 41,-15 + 2671: 41,-12 + 2672: 41,-11 + 2675: 41,-9 + 2676: 41,-8 + 2677: 41,-7 + 2678: 41,-7 + 2679: 41,-6 + 2680: 41,-5 + 2681: 41,-5 + 2682: 41,-4 + 2683: 41,-3 + 2684: 41,-3 + 2685: 41,-1 + 2686: 41,-1 + 2687: 41,-1 + 2688: 41,-2 + 2720: 19,3 + 2721: 19,4 + 2722: 19,4 + 2723: 19,4 + 2724: 19,5 + 2725: 19,5 + 2726: 19,7 + 2727: 19,8 + 2728: 19,8 + 2729: 19,8 + 2730: 19,10 + 2731: 19,10 + 2732: 19,11 + 2733: 19,10 2734: 19,10 - 2735: 19,10 - 2736: 19,11 - 2737: 19,10 - 2738: 19,10 - 2739: 19,12 - 2740: 19,10 - 2741: 19,9 - 2742: 19,9 - 2752: 19,13 - 2753: 19,14 - 2754: 19,14 - 2755: 19,14 - 2756: 19,15 - 2757: 19,15 - 2758: 19,15 - 2759: 19,16 - 2760: 19,16 - 2761: 19,18 - 2762: 19,18 - 2822: -27,20 - 2823: -27,18 + 2735: 19,12 + 2736: 19,10 + 2737: 19,9 + 2738: 19,9 + 2748: 19,13 + 2749: 19,14 + 2750: 19,14 + 2751: 19,14 + 2752: 19,15 + 2753: 19,15 + 2754: 19,15 + 2755: 19,16 + 2756: 19,16 + 2757: 19,18 + 2758: 19,18 + 2818: -27,20 + 2819: -27,18 - node: color: '#52B4E996' id: MonoOverlay decals: - 6266: 44,8 + 6262: 44,8 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale @@ -7543,7 +7544,7 @@ entities: color: '#52B4E996' id: QuarterTileOverlayGreyscale decals: - 6268: 43,9 + 6264: 43,9 - node: color: '#9FED5896' id: QuarterTileOverlayGreyscale @@ -7609,12 +7610,12 @@ entities: 1919: 59,-17 1920: 60,-17 1921: 61,-17 - 2173: -1,-33 - 6247: 38,4 - 6248: 40,4 - 6249: 41,4 - 6250: 42,4 - 6251: 43,4 + 2169: -1,-33 + 6243: 38,4 + 6244: 40,4 + 6245: 41,4 + 6246: 42,4 + 6247: 43,4 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale @@ -7683,7 +7684,7 @@ entities: color: '#52B4E996' id: QuarterTileOverlayGreyscale180 decals: - 6269: 45,7 + 6265: 45,7 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale180 @@ -7712,24 +7713,24 @@ entities: 1923: 61,-18 1924: 61,-19 1925: 61,-20 - 2169: -1,-33 - 2170: 0,-33 - 2171: 1,-33 - 2172: 2,-33 - 6252: 43,4 - 6253: 43,3 - 6254: 43,2 - 6255: 43,1 - 6256: 43,-1 - 6257: 43,-2 - 6258: 43,-3 - 6259: 43,-4 - 6260: 43,-5 - 6261: 43,-6 - 6262: 43,-7 - 6263: 43,-8 - 6264: 43,-9 - 6265: 43,-10 + 2165: -1,-33 + 2166: 0,-33 + 2167: 1,-33 + 2168: 2,-33 + 6248: 43,4 + 6249: 43,3 + 6250: 43,2 + 6251: 43,1 + 6252: 43,-1 + 6253: 43,-2 + 6254: 43,-3 + 6255: 43,-4 + 6256: 43,-5 + 6257: 43,-6 + 6258: 43,-7 + 6259: 43,-8 + 6260: 43,-9 + 6261: 43,-10 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale180 @@ -7752,7 +7753,7 @@ entities: 1599: 19,-27 1600: 19,-29 1601: 19,-30 - 6270: 43,7 + 6266: 43,7 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale270 @@ -7798,10 +7799,10 @@ entities: 1567: 5,-29 1568: 5,-28 1569: 5,-27 - 2164: -1,-33 - 2165: 1,-33 - 2166: 0,-33 - 2167: 2,-33 + 2160: -1,-33 + 2161: 1,-33 + 2162: 0,-33 + 2163: 2,-33 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 @@ -7816,25 +7817,25 @@ entities: 1594: 21,-25 1595: 22,-25 1596: 23,-25 - 6229: 40,4 - 6230: 38,4 - 6231: 41,4 - 6232: 42,4 - 6233: 43,4 - 6234: 43,3 - 6235: 43,2 - 6236: 43,1 - 6237: 43,-1 - 6238: 43,-2 - 6239: 43,-3 - 6240: 43,-4 - 6241: 43,-5 - 6242: 43,-6 - 6243: 43,-7 - 6244: 43,-10 - 6245: 43,-9 - 6246: 43,-8 - 6267: 45,9 + 6225: 40,4 + 6226: 38,4 + 6227: 41,4 + 6228: 42,4 + 6229: 43,4 + 6230: 43,3 + 6231: 43,2 + 6232: 43,1 + 6233: 43,-1 + 6234: 43,-2 + 6235: 43,-3 + 6236: 43,-4 + 6237: 43,-5 + 6238: 43,-6 + 6239: 43,-7 + 6240: 43,-10 + 6241: 43,-9 + 6242: 43,-8 + 6263: 45,9 - node: color: '#79150096' id: QuarterTileOverlayGreyscale90 @@ -7955,7 +7956,7 @@ entities: 1564: 1,-30 1565: 2,-30 1566: 3,-30 - 2168: 2,-33 + 2164: 2,-33 - node: color: '#FFFFFFFF' id: Rock01 @@ -7998,12 +7999,12 @@ entities: color: '#FFFFFFFF' id: Rust decals: - 2956: -5,-39 - 2957: -7,-40 - 2958: -6,-41 - 2959: -7,-41 - 2960: -8,-39 - 2961: -8,-42 + 2952: -5,-39 + 2953: -7,-40 + 2954: -6,-41 + 2955: -7,-41 + 2956: -8,-39 + 2957: -8,-42 - node: color: '#FFFFFFFF' id: SpaceStationSign1 @@ -8088,19 +8089,19 @@ entities: color: '#FFFFFFB1' id: VentSmall decals: - 2890: -36,22 + 2886: -36,22 - node: color: '#FFFFFFFF' id: WarnCornerNE decals: 1184: 6,32 - 6583: 91,-13 + 6577: 91,-13 - node: color: '#FFFFFFFF' id: WarnCornerNW decals: 1183: 3,32 - 6584: 88,-13 + 6578: 88,-13 - node: color: '#EFB34196' id: WarnCornerSE @@ -8110,7 +8111,7 @@ entities: color: '#FFFFFFFF' id: WarnCornerSE decals: - 6582: 91,-16 + 6576: 91,-16 - node: color: '#EFB34196' id: WarnCornerSW @@ -8120,38 +8121,38 @@ entities: color: '#FFFFFFFF' id: WarnCornerSW decals: - 6581: 88,-16 + 6575: 88,-16 - node: color: '#52B4E996' id: WarnCornerSmallGreyscaleSE decals: - 6744: 49,-11 - 6745: 52,-11 + 6738: 49,-11 + 6739: 52,-11 - node: color: '#52B4E996' id: WarnCornerSmallGreyscaleSW decals: - 6742: 49,-11 - 6743: 52,-11 + 6736: 49,-11 + 6737: 52,-11 - node: color: '#EFB34118' id: WarnCornerSmallNE decals: - 6661: 12,-30 - 6662: 12,-30 + 6655: 12,-30 + 6656: 12,-30 - node: color: '#EFB34131' id: WarnCornerSmallNE decals: - 6813: 14,39 - 6814: 14,39 - 6815: 14,39 - 6816: 14,39 + 6807: 14,39 + 6808: 14,39 + 6809: 14,39 + 6810: 14,39 - node: color: '#EFB3416C' id: WarnCornerSmallNE decals: - 6660: 12,-30 + 6654: 12,-30 - node: color: '#EFB34196' id: WarnCornerSmallNE @@ -8164,27 +8165,27 @@ entities: 1317: 25,23 1318: 29,23 2075: 11,-47 - 6317: 51,13 - 6405: 51,-11 + 6312: 51,13 + 6400: 51,-11 - node: color: '#EFB34118' id: WarnCornerSmallNW decals: - 6663: 16,-30 - 6664: 16,-30 + 6657: 16,-30 + 6658: 16,-30 - node: color: '#EFB34131' id: WarnCornerSmallNW decals: - 6809: 16,39 - 6810: 16,39 - 6811: 16,39 - 6812: 16,39 + 6803: 16,39 + 6804: 16,39 + 6805: 16,39 + 6806: 16,39 - node: color: '#EFB3416C' id: WarnCornerSmallNW decals: - 6659: 16,-30 + 6653: 16,-30 - node: color: '#EFB34196' id: WarnCornerSmallNW @@ -8203,10 +8204,10 @@ entities: color: '#EFB34131' id: WarnCornerSmallSE decals: - 6805: 14,42 - 6806: 14,42 - 6807: 14,42 - 6808: 14,42 + 6799: 14,42 + 6800: 14,42 + 6801: 14,42 + 6802: 14,42 - node: color: '#EFB34196' id: WarnCornerSmallSE @@ -8220,15 +8221,15 @@ entities: id: WarnCornerSmallSE decals: 1439: 55,-33 - 6316: 51,15 + 6311: 51,15 - node: color: '#EFB34131' id: WarnCornerSmallSW decals: - 6801: 16,42 - 6802: 16,42 - 6803: 16,42 - 6804: 16,42 + 6795: 16,42 + 6796: 16,42 + 6797: 16,42 + 6798: 16,42 - node: color: '#EFB34196' id: WarnCornerSmallSW @@ -8239,14 +8240,14 @@ entities: color: '#EFB34131' id: WarnLineE decals: - 6777: 14,40 - 6778: 14,40 - 6779: 14,41 - 6780: 14,41 - 6789: 14,40 - 6790: 14,40 - 6791: 14,41 - 6792: 14,41 + 6771: 14,40 + 6772: 14,40 + 6773: 14,41 + 6774: 14,41 + 6783: 14,40 + 6784: 14,40 + 6785: 14,41 + 6786: 14,41 - node: color: '#EFB34196' id: WarnLineE @@ -8274,10 +8275,10 @@ entities: 279: 29,-13 280: 29,-12 281: 29,-11 - 6213: 47,14 - 6214: 47,14 - 6215: 47,15 - 6216: 47,15 + 6209: 47,14 + 6210: 47,14 + 6211: 47,15 + 6212: 47,15 - node: color: '#FFFFFFFF' id: WarnLineE @@ -8293,48 +8294,48 @@ entities: 1855: 73,-16 1856: 73,-18 1857: 73,-19 - 6179: -45,23 - 6314: 51,14 - 6404: 51,-10 - 6579: 91,-15 - 6580: 91,-14 - 6672: 56,-29 - 6673: 56,-28 - 6674: 56,-27 - 6712: -33,-11 - 6713: -33,-10 + 6175: -45,23 + 6309: 51,14 + 6399: 51,-10 + 6573: 91,-15 + 6574: 91,-14 + 6666: 56,-29 + 6667: 56,-28 + 6668: 56,-27 + 6706: -33,-11 + 6707: -33,-10 - node: color: '#52B4E996' id: WarnLineGreyscaleE decals: - 6406: 52,-12 - 6407: 52,-13 - 6408: 52,-14 - 6409: 52,-15 - 6410: 49,-12 - 6411: 49,-13 - 6412: 49,-14 - 6413: 49,-15 + 6401: 52,-12 + 6402: 52,-13 + 6403: 52,-14 + 6404: 52,-15 + 6405: 49,-12 + 6406: 49,-13 + 6407: 49,-14 + 6408: 49,-15 - node: color: '#52B4E996' id: WarnLineGreyscaleW decals: - 6414: 49,-15 - 6415: 49,-14 - 6416: 49,-13 - 6417: 49,-12 - 6418: 52,-12 - 6419: 52,-13 - 6420: 52,-14 - 6421: 52,-15 + 6409: 49,-15 + 6410: 49,-14 + 6411: 49,-13 + 6412: 49,-12 + 6413: 52,-12 + 6414: 52,-13 + 6415: 52,-14 + 6416: 52,-15 - node: color: '#EFB34131' id: WarnLineN decals: - 6797: 15,42 - 6798: 15,42 - 6799: 15,42 - 6800: 15,42 + 6791: 15,42 + 6792: 15,42 + 6793: 15,42 + 6794: 15,42 - node: color: '#EFB34196' id: WarnLineN @@ -8353,8 +8354,8 @@ entities: 272: 27,-14 273: 28,-14 1474: 46,14 - 6203: 46,14 - 6204: 46,14 + 6199: 46,14 + 6200: 46,14 - node: color: '#FFFFFFFF' id: WarnLineN @@ -8374,30 +8375,30 @@ entities: 2070: 13,-48 2071: 15,-48 2072: 16,-48 - 2128: 0,-38 - 2129: 1,-38 - 2130: 2,-38 - 2134: 7,-45 - 2135: 8,-45 - 2136: 9,-45 - 6176: -44,24 - 6573: 89,-16 - 6574: 90,-16 - 6842: 33,-14 - 6843: 34,-14 - 6844: 35,-14 + 2124: 0,-38 + 2125: 1,-38 + 2126: 2,-38 + 6172: -44,24 + 6567: 89,-16 + 6568: 90,-16 + 6836: 33,-14 + 6837: 34,-14 + 6838: 35,-14 + 6880: 7,-47 + 6881: 8,-47 + 6882: 9,-47 - node: color: '#EFB34131' id: WarnLineS decals: - 6781: 16,40 + 6775: 16,40 + 6776: 16,40 + 6777: 16,41 + 6778: 16,41 + 6779: 16,41 + 6780: 16,40 + 6781: 16,41 6782: 16,40 - 6783: 16,41 - 6784: 16,41 - 6785: 16,41 - 6786: 16,40 - 6787: 16,41 - 6788: 16,40 - node: color: '#EFB34196' id: WarnLineS @@ -8425,12 +8426,12 @@ entities: 275: 16,-11 276: 16,-10 277: 16,-9 - 6207: 45,16 - 6208: 45,15 - 6209: 45,14 - 6210: 45,14 - 6211: 45,15 - 6212: 45,16 + 6203: 45,16 + 6204: 45,15 + 6205: 45,14 + 6206: 45,14 + 6207: 45,15 + 6208: 45,16 - node: color: '#FFFFFFFF' id: WarnLineS @@ -8439,37 +8440,37 @@ entities: 1784: 61,-23 1998: 26,-43 1999: 26,-46 - 6177: -43,23 - 6315: 57,14 - 6577: 88,-15 - 6578: 88,-14 - 6710: -33,-10 - 6711: -33,-11 + 6173: -43,23 + 6310: 57,14 + 6571: 88,-15 + 6572: 88,-14 + 6704: -33,-10 + 6705: -33,-11 - node: color: '#EFB34118' id: WarnLineW decals: - 6665: 13,-30 - 6666: 13,-30 - 6667: 14,-30 - 6668: 14,-30 - 6669: 15,-30 - 6670: 15,-30 + 6659: 13,-30 + 6660: 13,-30 + 6661: 14,-30 + 6662: 14,-30 + 6663: 15,-30 + 6664: 15,-30 - node: color: '#EFB34131' id: WarnLineW decals: - 6793: 15,39 - 6794: 15,39 - 6795: 15,39 - 6796: 15,39 + 6787: 15,39 + 6788: 15,39 + 6789: 15,39 + 6790: 15,39 - node: color: '#EFB3416C' id: WarnLineW decals: - 6656: 13,-30 - 6657: 14,-30 - 6658: 15,-30 + 6650: 13,-30 + 6651: 14,-30 + 6652: 15,-30 - node: color: '#EFB34196' id: WarnLineW @@ -8511,26 +8512,26 @@ entities: 2019: 29,-38 2073: 12,-47 2074: 13,-47 - 2157: 9,-39 - 2158: 10,-39 - 2159: 8,-39 - 2160: 11,-39 - 2174: -5,-35 - 2188: -6,-35 - 2189: -4,-35 - 6178: -44,22 - 6402: 52,-11 - 6403: 53,-11 - 6575: 89,-13 - 6576: 90,-13 - 6845: 33,-11 - 6846: 34,-11 - 6847: 35,-11 + 2153: 9,-39 + 2154: 10,-39 + 2155: 8,-39 + 2156: 11,-39 + 2170: -5,-35 + 2184: -6,-35 + 2185: -4,-35 + 6174: -44,22 + 6397: 52,-11 + 6398: 53,-11 + 6569: 89,-13 + 6570: 90,-13 + 6839: 33,-11 + 6840: 34,-11 + 6841: 35,-11 - node: color: '#FFFFFFFF' id: WoodTrimThinBox decals: - 6175: -44,23 + 6171: -44,23 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNe @@ -8543,13 +8544,14 @@ entities: decals: 379: -22,7 995: 40,-29 + 6849: -19,-13 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerSe decals: 401: -18,-16 501: -32,5 - 3067: -31,-45 + 3063: -31,-45 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerSw @@ -8593,6 +8595,8 @@ entities: 578: -33,14 654: -39,-13 855: -52,-3 + 6859: -22,-20 + 6860: -20,-20 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerSw @@ -8606,6 +8610,8 @@ entities: 965: -45.158802,-25.282345 966: -50.020466,-25.282345 1098: -59,-25 + 6857: -20,-20 + 6858: -18,-20 - node: color: '#FFFFFFFF' id: WoodTrimThinLineE @@ -8665,7 +8671,9 @@ entities: 1873: 69,-23 1874: 69,-22 1875: 69,-21 - 3064: -30,-46 + 3060: -30,-46 + 6851: -20,-21 + 6853: -22,-21 - node: color: '#FFFFFFFF' id: WoodTrimThinLineN @@ -8763,15 +8771,15 @@ entities: 1177: -14,31 1178: -13,31 1179: -12,31 - 3063: -30,-45 - 6114: -35,3 - 6173: 36,-24 + 3059: -30,-45 + 6110: -35,3 + 6169: 36,-24 - node: cleanable: True color: '#FFFFFFFF' id: WoodTrimThinLineN decals: - 3020: 80,-25 + 3016: 80,-25 - node: color: '#FFFFFFFF' id: WoodTrimThinLineS @@ -8855,12 +8863,14 @@ entities: 1724: 58,19 1725: 59,19 1726: 60,19 - 3065: -31,-45 - 3068: 65,-52 - 3069: 66,-52 - 3070: 67,-52 - 6172: 36,-24 - 6192: -38,-17 + 3061: -31,-45 + 3064: 65,-52 + 3065: 66,-52 + 3066: 67,-52 + 6168: 36,-24 + 6188: -38,-17 + 6855: -21,-20 + 6856: -19,-20 - node: color: '#FFFFFFFF' id: WoodTrimThinLineW @@ -8910,41 +8920,43 @@ entities: 1091: -59,-27 1092: -59,-26 1744: 58,19 - 2263: -27,-16 - 2264: -27,-15 - 2265: -27,-14 - 2266: -27,-13 - 3066: -31,-44 + 2259: -27,-16 + 2260: -27,-15 + 2261: -27,-14 + 2262: -27,-13 + 3062: -31,-44 + 6852: -20,-21 + 6854: -18,-21 - node: cleanable: True color: '#FFFFFFFF' id: bushsnowa1 decals: - 6130: 80.134224,-34.739353 + 6126: 80.134224,-34.739353 - node: cleanable: True color: '#FFFFFFFF' id: bushsnowa2 decals: - 6131: 81.98104,-35.791183 + 6127: 81.98104,-35.791183 - node: cleanable: True color: '#FFFFFFFF' id: bushsnowa3 decals: - 6132: 80.43999,-36.158104 + 6128: 80.43999,-36.158104 - node: cleanable: True color: '#FFFFFFFF' id: bushsnowb1 decals: - 6133: 83.2041,-35.583263 + 6129: 83.2041,-35.583263 - node: cleanable: True color: '#FFFFFFFF' id: bushsnowb3 decals: - 6134: 83.020645,-36.060257 + 6130: 83.020645,-36.060257 - node: color: '#FFFFFFFF' id: e @@ -8955,113 +8967,113 @@ entities: color: '#FFFFFFFF' id: grasssnow01 decals: - 6147: 83.460945,-36.10918 - 6148: 80.01192,-34.201206 + 6143: 83.460945,-36.10918 + 6144: 80.01192,-34.201206 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow03 decals: - 6144: 81.7242,-35.840107 + 6140: 81.7242,-35.840107 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow05 decals: - 6149: 81.07172,-34.84943 + 6145: 81.07172,-34.84943 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow06 decals: - 6153: 80.39903,-34.335743 + 6149: 80.39903,-34.335743 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow07 decals: - 6142: 80.04861,-36.219257 + 6138: 80.04861,-36.219257 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow08 decals: - 6143: 80.8436,-35.974644 + 6139: 80.8436,-35.974644 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow09 decals: - 6145: 82.201195,-35.974644 - 6152: 81.98901,-35.155193 + 6141: 82.201195,-35.974644 + 6148: 81.98901,-35.155193 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow10 decals: - 6140: 80.02415,-34.922813 + 6136: 80.02415,-34.922813 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow11 decals: - 6141: 80.42776,-35.546574 - 6146: 83.24079,-35.7178 + 6137: 80.42776,-35.546574 + 6142: 83.24079,-35.7178 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow12 decals: - 6150: 82.99192,-34.910583 + 6146: 82.99192,-34.910583 - node: cleanable: True color: '#FFFFFFFF' id: grasssnow13 decals: - 6151: 82.56385,-34.88612 + 6147: 82.56385,-34.88612 - node: cleanable: True color: '#FFFFFFFF' id: grasssnowa1 decals: - 6137: 82.82495,-35.571033 + 6133: 82.82495,-35.571033 - node: cleanable: True color: '#FFFFFFFF' id: grasssnowa2 decals: - 6156: 83.059845,-34.91084 + 6152: 83.059845,-34.91084 - node: cleanable: True color: '#FFFFFFFF' id: grasssnowa3 decals: - 6135: 79.9263,-35.46096 + 6131: 79.9263,-35.46096 - node: cleanable: True color: '#FFFFFFFF' id: grasssnowb2 decals: - 6136: 81.369514,-35.70557 - 6154: 80.8828,-34.87415 + 6132: 81.369514,-35.70557 + 6150: 80.8828,-34.87415 - node: cleanable: True color: '#FFFFFFFF' id: grasssnowb3 decals: - 6155: 79.87989,-33.993546 + 6151: 79.87989,-33.993546 - node: cleanable: True color: '#FFFFFFFF' id: grasssnowc2 decals: - 6139: 79.79176,-36.060257 + 6135: 79.79176,-36.060257 - node: cleanable: True color: '#FFFFFFFF' id: grasssnowc3 decals: - 6138: 81.10044,-36.13364 + 6134: 81.10044,-36.13364 - node: color: '#FFFFFFFF' id: h @@ -9071,9 +9083,9 @@ entities: color: '#FFFF0066' id: shop decals: - 3057: 50.31763,23.128677 - 3058: 51.239506,23.738052 - 3059: 52.00513,23.034927 + 3053: 50.31763,23.128677 + 3054: 51.239506,23.738052 + 3055: 52.00513,23.034927 - node: color: '#FFFFFFFF' id: w @@ -9980,7 +9992,7 @@ entities: 7,3: 0: 65535 5,6: - 0: 52431 + 0: 34959 6,4: 0: 65535 6,5: @@ -10030,7 +10042,7 @@ entities: 8,5: 0: 65535 8,6: - 0: 4383 + 0: 15 9,4: 0: 65535 9,5: @@ -10085,12 +10097,10 @@ entities: 0: 65535 -15,-12: 0: 52428 - -15,-11: - 0: 8 -14,-12: 0: 65535 -14,-11: - 0: 36863 + 0: 35071 -14,-10: 0: 65423 -13,-12: @@ -10477,7 +10487,7 @@ entities: 1,-13: 0: 61937 -11,6: - 0: 35838 + 0: 35070 3: 1 -11,7: 0: 34952 @@ -10504,7 +10514,7 @@ entities: -1,-12: 0: 65520 -7,-12: - 0: 65523 + 0: 65521 -6,-12: 0: 65535 -5,-12: @@ -10651,7 +10661,7 @@ entities: 2,10: 0: 65535 11,5: - 0: 24575 + 0: 8191 16,-10: 0: 4369 17,-10: @@ -10695,9 +10705,7 @@ entities: 9,6: 0: 3 11,6: - 0: 22015 - 11,7: - 0: 21 + 0: 15 -16,-18: 0: 57344 -15,-18: @@ -10733,7 +10741,7 @@ entities: -8,-13: 0: 61440 -7,-13: - 0: 28672 + 0: 12288 8,-15: 0: 3840 8,-14: @@ -10806,10 +10814,10 @@ entities: 4,10: 0: 13107 -12,5: - 0: 28360 + 0: 19656 3: 32768 -12,6: - 0: 2254 + 0: 140 -3,-12: 0: 34952 1,-15: @@ -11134,8 +11142,6 @@ entities: - 493 - 492 - 491 - - type: AtmosDevice - joinedGrid: 2 - uid: 8353 components: - type: Transform @@ -11159,8 +11165,6 @@ entities: - 19300 - 19302 - 19303 - - type: AtmosDevice - joinedGrid: 2 - uid: 8367 components: - type: Transform @@ -11184,8 +11188,6 @@ entities: - 18331 - 18336 - 18356 - - type: AtmosDevice - joinedGrid: 2 - uid: 8368 components: - type: Transform @@ -11198,8 +11200,6 @@ entities: - 8756 - 18389 - 18375 - - type: AtmosDevice - joinedGrid: 2 - uid: 8369 components: - type: Transform @@ -11214,8 +11214,6 @@ entities: - 8749 - 8750 - 8751 - - type: AtmosDevice - joinedGrid: 2 - uid: 8370 components: - type: Transform @@ -11235,16 +11233,12 @@ entities: - 18308 - 18321 - 18330 - - type: AtmosDevice - joinedGrid: 2 - uid: 8371 components: - type: Transform rot: -1.5707963267948966 rad pos: 58.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8372 components: - type: Transform @@ -11258,8 +11252,6 @@ entities: - 18514 - 18512 - 18513 - - type: AtmosDevice - joinedGrid: 2 - uid: 8373 components: - type: Transform @@ -11273,8 +11265,6 @@ entities: - 18475 - 18474 - 18472 - - type: AtmosDevice - joinedGrid: 2 - uid: 8374 components: - type: Transform @@ -11292,8 +11282,6 @@ entities: - 18441 - 18440 - 18439 - - type: AtmosDevice - joinedGrid: 2 - uid: 8375 components: - type: Transform @@ -11308,8 +11296,6 @@ entities: - 18496 - 18498 - 18497 - - type: AtmosDevice - joinedGrid: 2 - uid: 8376 components: - type: Transform @@ -11324,8 +11310,6 @@ entities: - 19951 - 19922 - 19923 - - type: AtmosDevice - joinedGrid: 2 - uid: 8377 components: - type: Transform @@ -11347,8 +11331,6 @@ entities: - 19910 - 19911 - 19912 - - type: AtmosDevice - joinedGrid: 2 - uid: 8378 components: - type: Transform @@ -11365,8 +11347,6 @@ entities: - 19900 - 16937 - 16936 - - type: AtmosDevice - joinedGrid: 2 - uid: 8379 components: - type: Transform @@ -11382,8 +11362,6 @@ entities: - 19909 - 19907 - 19908 - - type: AtmosDevice - joinedGrid: 2 - uid: 8380 components: - type: Transform @@ -11397,8 +11375,6 @@ entities: - 19964 - 19963 - 19962 - - type: AtmosDevice - joinedGrid: 2 - uid: 8381 components: - type: Transform @@ -11411,8 +11387,6 @@ entities: - 8732 - 8711 - 20219 - - type: AtmosDevice - joinedGrid: 2 - uid: 8382 components: - type: Transform @@ -11427,8 +11401,6 @@ entities: - 19969 - 19953 - 19952 - - type: AtmosDevice - joinedGrid: 2 - uid: 8383 components: - type: Transform @@ -11449,16 +11421,12 @@ entities: - 19842 - 19841 - 19840 - - type: AtmosDevice - joinedGrid: 2 - uid: 8384 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8385 components: - type: Transform @@ -11472,8 +11440,6 @@ entities: - 19790 - 19774 - 19789 - - type: AtmosDevice - joinedGrid: 2 - uid: 8386 components: - type: Transform @@ -11486,8 +11452,6 @@ entities: - 19762 - 19760 - 19761 - - type: AtmosDevice - joinedGrid: 2 - uid: 8387 components: - type: Transform @@ -11503,8 +11467,6 @@ entities: - 8705 - 17363 - 19795 - - type: AtmosDevice - joinedGrid: 2 - uid: 8388 components: - type: Transform @@ -11527,8 +11489,6 @@ entities: - 19672 - 19673 - 19674 - - type: AtmosDevice - joinedGrid: 2 - uid: 8389 components: - type: Transform @@ -11551,8 +11511,6 @@ entities: - 19672 - 19673 - 19674 - - type: AtmosDevice - joinedGrid: 2 - uid: 8390 components: - type: Transform @@ -11571,8 +11529,6 @@ entities: - 18221 - 18219 - 18220 - - type: AtmosDevice - joinedGrid: 2 - uid: 8391 components: - type: Transform @@ -11591,8 +11547,6 @@ entities: - 19734 - 19728 - 19730 - - type: AtmosDevice - joinedGrid: 2 - uid: 8392 components: - type: Transform @@ -11609,8 +11563,6 @@ entities: - 8696 - 19731 - 19729 - - type: AtmosDevice - joinedGrid: 2 - uid: 8393 components: - type: Transform @@ -11631,8 +11583,6 @@ entities: - 18218 - 18217 - 18216 - - type: AtmosDevice - joinedGrid: 2 - uid: 8394 components: - type: Transform @@ -11650,8 +11600,6 @@ entities: - 18305 - 18307 - 18306 - - type: AtmosDevice - joinedGrid: 2 - uid: 8395 components: - type: Transform @@ -11670,8 +11618,6 @@ entities: - 18302 - 18303 - 18304 - - type: AtmosDevice - joinedGrid: 2 - uid: 8396 components: - type: Transform @@ -11691,8 +11637,6 @@ entities: - 18298 - 18299 - 18300 - - type: AtmosDevice - joinedGrid: 2 - uid: 8397 components: - type: Transform @@ -11705,8 +11649,6 @@ entities: - 19641 - 19640 - 19639 - - type: AtmosDevice - joinedGrid: 2 - uid: 8398 components: - type: Transform @@ -11723,8 +11665,6 @@ entities: - 19510 - 19508 - 19507 - - type: AtmosDevice - joinedGrid: 2 - uid: 8399 components: - type: Transform @@ -11740,8 +11680,6 @@ entities: - 19543 - 19520 - 19519 - - type: AtmosDevice - joinedGrid: 2 - uid: 8400 components: - type: Transform @@ -11758,8 +11696,6 @@ entities: - 19542 - 19521 - 19522 - - type: AtmosDevice - joinedGrid: 2 - uid: 8401 components: - type: Transform @@ -11777,8 +11713,6 @@ entities: - 19582 - 19569 - 19570 - - type: AtmosDevice - joinedGrid: 2 - uid: 8402 components: - type: Transform @@ -11792,8 +11726,6 @@ entities: - 19568 - 19567 - 19566 - - type: AtmosDevice - joinedGrid: 2 - uid: 8403 components: - type: Transform @@ -11807,8 +11739,6 @@ entities: - 19589 - 19588 - 19587 - - type: AtmosDevice - joinedGrid: 2 - uid: 8404 components: - type: Transform @@ -11827,8 +11757,6 @@ entities: - 19474 - 19470 - 19469 - - type: AtmosDevice - joinedGrid: 2 - uid: 8405 components: - type: Transform @@ -11836,22 +11764,18 @@ entities: parent: 2 - type: DeviceList devices: - - 8773 - - 8771 - - 8772 - - 19035 - 19034 - 19033 - - type: AtmosDevice - joinedGrid: 2 + - 8773 + - 8772 + - 8771 + - 21559 - uid: 8406 components: - type: Transform rot: -1.5707963267948966 rad pos: -16.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8407 components: - type: Transform @@ -11864,8 +11788,6 @@ entities: - 19071 - 19069 - 19070 - - type: AtmosDevice - joinedGrid: 2 - uid: 8408 components: - type: Transform @@ -11883,8 +11805,6 @@ entities: - 18914 - 18912 - 18913 - - type: AtmosDevice - joinedGrid: 2 - uid: 8409 components: - type: Transform @@ -11898,8 +11818,6 @@ entities: - 18941 - 18936 - 7082 - - type: AtmosDevice - joinedGrid: 2 - uid: 8410 components: - type: Transform @@ -11917,8 +11835,6 @@ entities: - 18871 - 18870 - 18869 - - type: AtmosDevice - joinedGrid: 2 - uid: 8411 components: - type: Transform @@ -11934,8 +11850,6 @@ entities: - 18868 - 18867 - 18866 - - type: AtmosDevice - joinedGrid: 2 - uid: 8412 components: - type: Transform @@ -11974,8 +11888,6 @@ entities: - 18270 - 18268 - 18258 - - type: AtmosDevice - joinedGrid: 2 - uid: 8413 components: - type: Transform @@ -12013,8 +11925,6 @@ entities: - 18270 - 18268 - 18258 - - type: AtmosDevice - joinedGrid: 2 - uid: 8414 components: - type: Transform @@ -12035,8 +11945,6 @@ entities: - 19367 - 19131 - 19136 - - type: AtmosDevice - joinedGrid: 2 - uid: 8415 components: - type: Transform @@ -12058,8 +11966,6 @@ entities: - 19367 - 19131 - 19136 - - type: AtmosDevice - joinedGrid: 2 - uid: 8416 components: - type: Transform @@ -12078,8 +11984,6 @@ entities: - 19167 - 19171 - 20195 - - type: AtmosDevice - joinedGrid: 2 - uid: 8417 components: - type: Transform @@ -12106,8 +12010,6 @@ entities: - 19334 - 19103 - 19346 - - type: AtmosDevice - joinedGrid: 2 - uid: 8418 components: - type: Transform @@ -12127,8 +12029,6 @@ entities: - 19306 - 19085 - 18121 - - type: AtmosDevice - joinedGrid: 2 - uid: 8419 components: - type: Transform @@ -12152,8 +12052,6 @@ entities: - 19300 - 19302 - 19303 - - type: AtmosDevice - joinedGrid: 2 - uid: 8421 components: - type: Transform @@ -12168,8 +12066,6 @@ entities: - 20177 - 20169 - 20167 - - type: AtmosDevice - joinedGrid: 2 - uid: 8422 components: - type: Transform @@ -12184,8 +12080,6 @@ entities: - 20178 - 20164 - 20168 - - type: AtmosDevice - joinedGrid: 2 - uid: 8423 components: - type: Transform @@ -12204,8 +12098,6 @@ entities: - 19079 - 19084 - 13923 - - type: AtmosDevice - joinedGrid: 2 - uid: 8424 components: - type: Transform @@ -12221,8 +12113,6 @@ entities: - 19427 - 19425 - 19426 - - type: AtmosDevice - joinedGrid: 2 - uid: 8425 components: - type: Transform @@ -12235,16 +12125,12 @@ entities: - 19460 - 19308 - 18975 - - type: AtmosDevice - joinedGrid: 2 - uid: 8426 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,-38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8427 components: - type: Transform @@ -12258,8 +12144,6 @@ entities: - 19631 - 19630 - 19622 - - type: AtmosDevice - joinedGrid: 2 - uid: 8428 components: - type: Transform @@ -12276,8 +12160,6 @@ entities: - 19632 - 19607 - 19608 - - type: AtmosDevice - joinedGrid: 2 - uid: 8429 components: - type: Transform @@ -12288,19 +12170,6 @@ entities: devices: - 20249 - 14942 - - type: AtmosDevice - joinedGrid: 2 - - uid: 8430 - components: - - type: Transform - pos: 9.5,-43.5 - parent: 2 - - type: DeviceList - devices: - - 20250 - - 14941 - - type: AtmosDevice - joinedGrid: 2 - uid: 8431 components: - type: Transform @@ -12314,8 +12183,6 @@ entities: - 20042 - 20041 - 20040 - - type: AtmosDevice - joinedGrid: 2 - uid: 8432 components: - type: Transform @@ -12332,8 +12199,6 @@ entities: - 20039 - 20037 - 20038 - - type: AtmosDevice - joinedGrid: 2 - uid: 8433 components: - type: Transform @@ -12349,16 +12214,12 @@ entities: - 20087 - 9078 - 9034 - - type: AtmosDevice - joinedGrid: 2 - uid: 8434 components: - type: Transform rot: -1.5707963267948966 rad pos: 30.5,-42.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8435 components: - type: Transform @@ -12371,8 +12232,6 @@ entities: - 19752 - 19751 - 19748 - - type: AtmosDevice - joinedGrid: 2 - uid: 8436 components: - type: Transform @@ -12384,8 +12243,6 @@ entities: - 19829 - 19820 - 19828 - - type: AtmosDevice - joinedGrid: 2 - uid: 8438 components: - type: Transform @@ -12398,8 +12255,6 @@ entities: - 18388 - 18374 - 18373 - - type: AtmosDevice - joinedGrid: 2 - uid: 8439 components: - type: Transform @@ -12412,8 +12267,6 @@ entities: - 18428 - 18427 - 18426 - - type: AtmosDevice - joinedGrid: 2 - uid: 8440 components: - type: Transform @@ -12432,8 +12285,6 @@ entities: - 18235 - 18232 - 18234 - - type: AtmosDevice - joinedGrid: 2 - uid: 8441 components: - type: Transform @@ -12454,8 +12305,6 @@ entities: - 18226 - 18229 - 18230 - - type: AtmosDevice - joinedGrid: 2 - uid: 8442 components: - type: Transform @@ -12468,8 +12317,6 @@ entities: - 18532 - 18530 - 18531 - - type: AtmosDevice - joinedGrid: 2 - uid: 8443 components: - type: Transform @@ -12482,8 +12329,6 @@ entities: - 18516 - 18233 - 18515 - - type: AtmosDevice - joinedGrid: 2 - uid: 8444 components: - type: Transform @@ -12501,8 +12346,6 @@ entities: - 17875 - 17867 - 18236 - - type: AtmosDevice - joinedGrid: 2 - uid: 8445 components: - type: Transform @@ -12523,8 +12366,6 @@ entities: - 18237 - 18239 - 18238 - - type: AtmosDevice - joinedGrid: 2 - uid: 8446 components: - type: Transform @@ -12540,8 +12381,6 @@ entities: - 18535 - 18533 - 18534 - - type: AtmosDevice - joinedGrid: 2 - uid: 8447 components: - type: Transform @@ -12554,8 +12393,6 @@ entities: - 18616 - 18614 - 18615 - - type: AtmosDevice - joinedGrid: 2 - uid: 8448 components: - type: Transform @@ -12569,8 +12406,6 @@ entities: - 18606 - 18603 - 18604 - - type: AtmosDevice - joinedGrid: 2 - uid: 8449 components: - type: Transform @@ -12583,8 +12418,6 @@ entities: - 18629 - 18627 - 18628 - - type: AtmosDevice - joinedGrid: 2 - uid: 8450 components: - type: Transform @@ -12600,8 +12433,6 @@ entities: - 18580 - 18579 - 18577 - - type: AtmosDevice - joinedGrid: 2 - uid: 8451 components: - type: Transform @@ -12621,8 +12452,6 @@ entities: - 18564 - 18554 - 18553 - - type: AtmosDevice - joinedGrid: 2 - uid: 8452 components: - type: Transform @@ -12641,8 +12470,6 @@ entities: - 18243 - 18244 - 18245 - - type: AtmosDevice - joinedGrid: 2 - uid: 8453 components: - type: Transform @@ -12657,8 +12484,6 @@ entities: - 18632 - 18630 - 18631 - - type: AtmosDevice - joinedGrid: 2 - uid: 8454 components: - type: Transform @@ -12676,8 +12501,6 @@ entities: - 18240 - 18242 - 18241 - - type: AtmosDevice - joinedGrid: 2 - uid: 8455 components: - type: Transform @@ -12697,8 +12520,6 @@ entities: - 5306 - 18247 - 18248 - - type: AtmosDevice - joinedGrid: 2 - uid: 8456 components: - type: Transform @@ -12714,8 +12535,6 @@ entities: - 18707 - 18703 - 18705 - - type: AtmosDevice - joinedGrid: 2 - uid: 8457 components: - type: Transform @@ -12730,8 +12549,6 @@ entities: - 8575 - 18811 - 18812 - - type: AtmosDevice - joinedGrid: 2 - uid: 8458 components: - type: Transform @@ -12754,8 +12571,6 @@ entities: - 18681 - 18679 - 18678 - - type: AtmosDevice - joinedGrid: 2 - uid: 8459 components: - type: Transform @@ -12769,8 +12584,6 @@ entities: - 18774 - 18773 - 18764 - - type: AtmosDevice - joinedGrid: 2 - uid: 8460 components: - type: Transform @@ -12783,8 +12596,6 @@ entities: - 18756 - 18753 - 18755 - - type: AtmosDevice - joinedGrid: 2 - uid: 8461 components: - type: Transform @@ -12797,8 +12608,6 @@ entities: - 18684 - 18683 - 18682 - - type: AtmosDevice - joinedGrid: 2 - uid: 8462 components: - type: Transform @@ -12815,8 +12624,6 @@ entities: - 18743 - 18741 - 18742 - - type: AtmosDevice - joinedGrid: 2 - uid: 8463 components: - type: Transform @@ -12833,16 +12640,12 @@ entities: - 18249 - 18251 - 18250 - - type: AtmosDevice - joinedGrid: 2 - uid: 8464 components: - type: Transform rot: 1.5707963267948966 rad pos: -27.5,18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8465 components: - type: Transform @@ -12857,8 +12660,6 @@ entities: - 19017 - 19013 - 19012 - - type: AtmosDevice - joinedGrid: 2 - uid: 8466 components: - type: Transform @@ -12872,8 +12673,6 @@ entities: - 19018 - 18998 - 19000 - - type: AtmosDevice - joinedGrid: 2 - uid: 8467 components: - type: Transform @@ -12887,8 +12686,6 @@ entities: - 19032 - 19031 - 19030 - - type: AtmosDevice - joinedGrid: 2 - uid: 8468 components: - type: Transform @@ -12906,8 +12703,6 @@ entities: - 19317 - 18126 - 19092 - - type: AtmosDevice - joinedGrid: 2 - uid: 8469 components: - type: Transform @@ -12920,8 +12715,6 @@ entities: - 20181 - 19314 - 19077 - - type: AtmosDevice - joinedGrid: 2 - uid: 8470 components: - type: Transform @@ -12938,8 +12731,6 @@ entities: - 19370 - 19369 - 19368 - - type: AtmosDevice - joinedGrid: 2 - uid: 8471 components: - type: Transform @@ -12952,8 +12743,6 @@ entities: - 19420 - 19410 - 19409 - - type: AtmosDevice - joinedGrid: 2 - uid: 8472 components: - type: Transform @@ -12968,8 +12757,6 @@ entities: - 20004 - 19999 - 19998 - - type: AtmosDevice - joinedGrid: 2 - uid: 8473 components: - type: Transform @@ -12982,8 +12769,6 @@ entities: - 19973 - 19971 - 19970 - - type: AtmosDevice - joinedGrid: 2 - uid: 8474 components: - type: Transform @@ -12993,8 +12778,6 @@ entities: - type: DeviceList devices: - 20248 - - type: AtmosDevice - joinedGrid: 2 - uid: 8475 components: - type: Transform @@ -13011,8 +12794,6 @@ entities: - 19581 - 19575 - 19580 - - type: AtmosDevice - joinedGrid: 2 - uid: 8476 components: - type: Transform @@ -13031,8 +12812,6 @@ entities: - 19514 - 17793 - 17792 - - type: AtmosDevice - joinedGrid: 2 - uid: 8477 components: - type: Transform @@ -13048,8 +12827,6 @@ entities: - 19642 - 17708 - 17707 - - type: AtmosDevice - joinedGrid: 2 - uid: 8478 components: - type: Transform @@ -13066,8 +12843,6 @@ entities: - 19351 - 18127 - 19109 - - type: AtmosDevice - joinedGrid: 2 - uid: 8479 components: - type: Transform @@ -13079,8 +12854,6 @@ entities: - 19352 - 19307 - 18128 - - type: AtmosDevice - joinedGrid: 2 - uid: 8892 components: - type: Transform @@ -13093,8 +12866,6 @@ entities: - 8781 - 18972 - 18983 - - type: AtmosDevice - joinedGrid: 2 - uid: 11469 components: - type: Transform @@ -13108,8 +12879,6 @@ entities: - 8693 - 19778 - 19775 - - type: AtmosDevice - joinedGrid: 2 - uid: 17617 components: - type: Transform @@ -13122,8 +12891,6 @@ entities: - 18831 - 18770 - 18830 - - type: AtmosDevice - joinedGrid: 2 - uid: 17618 components: - type: Transform @@ -13137,8 +12904,7 @@ entities: - 18850 - 18858 - 18859 - - type: AtmosDevice - joinedGrid: 2 + - 7358 - uid: 17629 components: - type: Transform @@ -13165,8 +12931,6 @@ entities: - 18944 - 492 - 491 - - type: AtmosDevice - joinedGrid: 2 - uid: 17630 components: - type: Transform @@ -13180,8 +12944,6 @@ entities: - 19058 - 19056 - 19057 - - type: AtmosDevice - joinedGrid: 2 - uid: 17653 components: - type: Transform @@ -13207,8 +12969,6 @@ entities: - 18289 - 18290 - 18291 - - type: AtmosDevice - joinedGrid: 2 - uid: 17655 components: - type: Transform @@ -13231,8 +12991,6 @@ entities: - 8789 - 18287 - 18286 - - type: AtmosDevice - joinedGrid: 2 - uid: 17660 components: - type: Transform @@ -13257,8 +13015,6 @@ entities: - 18252 - 18254 - 18253 - - type: AtmosDevice - joinedGrid: 2 - uid: 17661 components: - type: Transform @@ -13276,16 +13032,12 @@ entities: - 18871 - 18870 - 18869 - - type: AtmosDevice - joinedGrid: 2 - uid: 17668 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 17670 components: - type: Transform @@ -13306,8 +13058,6 @@ entities: - 18225 - 18228 - 18227 - - type: AtmosDevice - joinedGrid: 2 - uid: 17671 components: - type: Transform @@ -13333,8 +13083,6 @@ entities: - 18224 - 17810 - 17800 - - type: AtmosDevice - joinedGrid: 2 - uid: 17679 components: - type: Transform @@ -13356,8 +13104,6 @@ entities: - 18295 - 18297 - 18296 - - type: AtmosDevice - joinedGrid: 2 - uid: 17681 components: - type: Transform @@ -13380,8 +13126,6 @@ entities: - 18292 - 18294 - 18293 - - type: AtmosDevice - joinedGrid: 2 - uid: 18581 components: - type: Transform @@ -13396,8 +13140,6 @@ entities: - 18605 - 18591 - 18590 - - type: AtmosDevice - joinedGrid: 2 - uid: 19606 components: - type: Transform @@ -13410,8 +13152,6 @@ entities: - 17576 - 19602 - 19603 - - type: AtmosDevice - joinedGrid: 2 - uid: 20220 components: - type: Transform @@ -13429,8 +13169,6 @@ entities: - 8726 - 19884 - 19885 - - type: AtmosDevice - joinedGrid: 2 - uid: 20222 components: - type: Transform @@ -13448,8 +13186,6 @@ entities: - 17501 - 18642 - 18643 - - type: AtmosDevice - joinedGrid: 2 - uid: 20225 components: - type: Transform @@ -13463,8 +13199,6 @@ entities: - 18727 - 18744 - 18725 - - type: AtmosDevice - joinedGrid: 2 - uid: 20240 components: - type: Transform @@ -13477,8 +13211,6 @@ entities: - 8779 - 18971 - 19001 - - type: AtmosDevice - joinedGrid: 2 - uid: 20242 components: - type: Transform @@ -13498,8 +13230,6 @@ entities: - 18282 - 18284 - 18283 - - type: AtmosDevice - joinedGrid: 2 - uid: 20243 components: - type: Transform @@ -13515,8 +13245,6 @@ entities: - 19483 - 19481 - 19482 - - type: AtmosDevice - joinedGrid: 2 - uid: 20246 components: - type: Transform @@ -13531,8 +13259,6 @@ entities: - 19509 - 19498 - 19484 - - type: AtmosDevice - joinedGrid: 2 - uid: 21113 components: - type: Transform @@ -13545,8 +13271,6 @@ entities: - 21114 - 21102 - 21101 - - type: AtmosDevice - joinedGrid: 2 - proto: AirCanister entities: - uid: 4 @@ -13554,120 +13278,86 @@ entities: - type: Transform pos: -5.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14680 components: - type: Transform pos: 79.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14698 components: - type: Transform pos: -4.5,38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14699 components: - type: Transform pos: -40.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14705 components: - type: Transform pos: -63.5,-31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14710 components: - type: Transform pos: -36.5,-41.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14711 components: - type: Transform pos: -9.5,-33.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14714 components: - type: Transform pos: 45.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14727 components: - type: Transform pos: 55.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14731 components: - type: Transform pos: 39.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14788 components: - type: Transform pos: -29.5,-43.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14855 components: - type: Transform pos: -10.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14856 components: - type: Transform pos: 1.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14861 components: - type: Transform pos: 15.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 15857 components: - type: Transform pos: 68.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 16066 components: - type: Transform pos: 67.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 21243 components: - type: Transform pos: 2.5,-7.5 parent: 21128 - - type: AtmosDevice - joinedGrid: 21128 - proto: Airlock entities: - uid: 6 @@ -13927,18 +13617,6 @@ entities: rot: 3.141592653589793 rad pos: 30.5,-29.5 parent: 2 - - uid: 7632 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,-40.5 - parent: 2 - - uid: 7633 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 28.5,-40.5 - parent: 2 - uid: 7952 components: - type: Transform @@ -13967,6 +13645,16 @@ entities: - type: Transform pos: 48.5,-22.5 parent: 2 + - uid: 512 + components: + - type: Transform + pos: 28.5,-40.5 + parent: 2 + - uid: 645 + components: + - type: Transform + pos: 29.5,-40.5 + parent: 2 - uid: 4309 components: - type: MetaData @@ -14048,16 +13736,20 @@ entities: - type: Transform pos: 7.5,-25.5 parent: 2 + - uid: 848 + components: + - type: Transform + pos: -30.5,36.5 + parent: 2 - uid: 7999 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-35.5 parent: 2 - - uid: 15081 + - uid: 8170 components: - type: Transform - rot: -1.5707963267948966 rad pos: -30.5,37.5 parent: 2 - proto: AirlockEngineeringLocked @@ -14325,6 +14017,21 @@ entities: rot: -1.5707963267948966 rad pos: -54.5,-58.5 parent: 2 + - uid: 15198 + components: + - type: Transform + pos: 71.5,5.5 + parent: 2 + - uid: 15206 + components: + - type: Transform + pos: 71.5,1.5 + parent: 2 + - uid: 15214 + components: + - type: Transform + pos: 71.5,-2.5 + parent: 2 - uid: 17259 components: - type: Transform @@ -14403,23 +14110,6 @@ entities: - type: Transform pos: 26.5,24.5 parent: 2 -- proto: AirlockExternalGlassEasyPry - entities: - - uid: 15198 - components: - - type: Transform - pos: 71.5,5.5 - parent: 2 - - uid: 15206 - components: - - type: Transform - pos: 71.5,1.5 - parent: 2 - - uid: 15214 - components: - - type: Transform - pos: 71.5,-2.5 - parent: 2 - proto: AirlockExternalGlassEngineeringLocked entities: - uid: 44 @@ -14709,9 +14399,10 @@ entities: - type: Transform pos: -22.5,-17.5 parent: 2 - - uid: 48 + - uid: 849 components: - type: Transform + rot: -1.5707963267948966 rad pos: -22.5,-18.5 parent: 2 - uid: 1661 @@ -14736,7 +14427,7 @@ entities: pos: -16.5,19.5 parent: 2 - type: Door - secondsUntilStateChange: -34612.758 + secondsUntilStateChange: -38043.45 state: Opening - uid: 4196 components: @@ -16622,12 +16313,6 @@ entities: - type: Transform pos: -29.5,-20.5 parent: 2 - - uid: 19035 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,-20.5 - parent: 2 - uid: 19058 components: - type: Transform @@ -17006,20 +16691,12 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,-10.5 parent: 2 - deviceLists: - - 8474 - uid: 20249 components: - type: Transform rot: -1.5707963267948966 rad pos: 11.5,-38.5 parent: 2 - - uid: 20250 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 9.5,-44.5 - parent: 2 - uid: 21115 components: - type: Transform @@ -17030,6 +16707,16 @@ entities: deviceLists: - 21112 - 21113 + - uid: 21559 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17633 + - 8405 - proto: AltarHeaven entities: - uid: 16557 @@ -17570,10 +17257,10 @@ entities: parent: 2 - proto: ArtifactAnalyzerMachineCircuitboard entities: - - uid: 17538 + - uid: 8162 components: - type: Transform - pos: 75.60128,-15.434497 + pos: 75.564476,-15.243714 parent: 2 - proto: Ashtray entities: @@ -19386,15 +19073,11 @@ entities: rot: 3.141592653589793 rad pos: 16.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 20610 components: - type: Transform pos: 47.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: Bed entities: - uid: 132 @@ -20409,6 +20092,15 @@ entities: - type: Transform pos: 58.383793,26.371101 parent: 2 +- proto: BoxCleanerGrenades + entities: + - uid: 2142 + components: + - type: Transform + parent: 156 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: BoxFolderBlack entities: - uid: 176 @@ -20460,6 +20152,11 @@ entities: - type: Transform pos: 71.50742,-20.366497 parent: 2 + - uid: 21556 + components: + - type: Transform + pos: 27.520927,-43.577324 + parent: 2 - proto: BoxFolderGrey entities: - uid: 178 @@ -36512,6 +36209,11 @@ entities: - type: Transform pos: 63.5,-52.5 parent: 2 + - uid: 19035 + components: + - type: Transform + pos: 8.5,-48.5 + parent: 2 - uid: 19623 components: - type: Transform @@ -37087,6 +36789,11 @@ entities: - type: Transform pos: 5.5,-1.5 parent: 21128 + - uid: 21336 + components: + - type: Transform + pos: 8.5,-47.5 + parent: 2 - uid: 21413 components: - type: Transform @@ -37129,11 +36836,6 @@ entities: - type: Transform pos: 65.445175,-26.40616 parent: 2 - - uid: 8194 - components: - - type: Transform - pos: 7.540995,-45.37761 - parent: 2 - uid: 15196 components: - type: Transform @@ -37144,6 +36846,11 @@ entities: - type: Transform pos: 63.52819,-32.40197 parent: 2 + - uid: 21596 + components: + - type: Transform + pos: 7.51995,-47.496635 + parent: 2 - proto: CableHV entities: - uid: 265 @@ -47355,28 +47062,24 @@ entities: - type: Transform pos: 20.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 452 components: - type: Transform pos: 24.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: CargoBountyComputerCircuitboard entities: - - uid: 8169 + - uid: 21590 components: - type: Transform - pos: 7.522449,-46.434998 + pos: 7.506061,-48.42719 parent: 2 - proto: CargoRequestComputerCircuitboard entities: - - uid: 8170 + - uid: 21591 components: - type: Transform - pos: 7.5346794,-46.239307 + pos: 7.5130057,-48.2883 parent: 2 - proto: Carpet entities: @@ -47484,6 +47187,26 @@ entities: rot: -1.5707963267948966 rad pos: 90.5,-18.5 parent: 2 + - uid: 21566 + components: + - type: Transform + pos: -30.5,-36.5 + parent: 2 + - uid: 21567 + components: + - type: Transform + pos: -31.5,-36.5 + parent: 2 + - uid: 21568 + components: + - type: Transform + pos: -31.5,-35.5 + parent: 2 + - uid: 21569 + components: + - type: Transform + pos: -30.5,-35.5 + parent: 2 - proto: CarpetBlack entities: - uid: 453 @@ -48333,11 +48056,6 @@ entities: rot: 1.5707963267948966 rad pos: -23.5,-38.5 parent: 2 - - uid: 512 - components: - - type: Transform - pos: -24.5,-38.5 - parent: 2 - uid: 513 components: - type: Transform @@ -48384,6 +48102,11 @@ entities: rot: -1.5707963267948966 rad pos: -21.5,-37.5 parent: 2 + - uid: 1899 + components: + - type: Transform + pos: -24.5,-38.5 + parent: 2 - uid: 16205 components: - type: Transform @@ -50418,6 +50141,11 @@ entities: - type: Transform pos: 7.5,-42.5 parent: 2 + - uid: 8153 + components: + - type: Transform + pos: 8.5,-44.5 + parent: 2 - uid: 8165 components: - type: Transform @@ -56085,102 +55813,6 @@ entities: - type: Transform pos: -17.5,-22.5 parent: 2 - - uid: 848 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-35.5 - parent: 2 - - uid: 849 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-34.5 - parent: 2 - - uid: 850 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-35.5 - parent: 2 - - uid: 851 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-34.5 - parent: 2 - - uid: 852 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-35.5 - parent: 2 - - uid: 853 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-34.5 - parent: 2 - - uid: 854 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-35.5 - parent: 2 - - uid: 855 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-34.5 - parent: 2 - - uid: 856 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-37.5 - parent: 2 - - uid: 857 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-38.5 - parent: 2 - - uid: 858 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-37.5 - parent: 2 - - uid: 859 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,-38.5 - parent: 2 - - uid: 860 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-37.5 - parent: 2 - - uid: 861 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-38.5 - parent: 2 - - uid: 862 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,-37.5 - parent: 2 - - uid: 863 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-38.5 - parent: 2 - uid: 4570 components: - type: Transform @@ -56407,6 +56039,14 @@ entities: - type: Transform pos: 65.5038,-52.411602 parent: 2 +- proto: ChurchBell + entities: + - uid: 8169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,-37.5 + parent: 2 - proto: ChurchOrganInstrument entities: - uid: 865 @@ -56616,6 +56256,35 @@ entities: - type: Transform pos: -13.5,-26.5 parent: 2 + - 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: + - 2142 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: ClosetL3JanitorFilled entities: - uid: 871 @@ -57626,6 +57295,15 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage +- proto: ClothingHeadHatOutlawHat + entities: + - uid: 2143 + components: + - type: Transform + parent: 21051 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: ClothingHeadHatRedwizard entities: - uid: 17261 @@ -57687,13 +57365,6 @@ entities: - type: Transform pos: 21.504559,-47.81257 parent: 2 -- proto: ClothingHeadPyjamaSyndicateBlack - entities: - - uid: 7746 - components: - - type: Transform - pos: 27.166506,-46.34371 - parent: 2 - proto: ClothingHeadsetMining entities: - uid: 20877 @@ -57928,6 +57599,13 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage +- proto: ClothingOuterWinterCoat + entities: + - uid: 8193 + components: + - type: Transform + pos: 62.677505,-4.2970705 + parent: 2 - proto: ClothingOuterWinterMime entities: - uid: 8690 @@ -58096,15 +57774,6 @@ entities: parent: 971 - type: Physics canCollide: False -- proto: ClothingUniformJumpsuitSyndieFormal - entities: - - uid: 2094 - components: - - type: Transform - parent: 21051 - - type: Physics - canCollide: False - - type: InsideEntityStorage - proto: Cobweb1 entities: - uid: 911 @@ -58530,10 +58199,10 @@ entities: parent: 2 - proto: CommsComputerCircuitboard entities: - - uid: 8167 + - uid: 21593 components: - type: Transform - pos: 9.503805,-46.398304 + pos: 9.526895,-48.406357 parent: 2 - proto: ComputerAlert entities: @@ -59180,18 +58849,16 @@ entities: - type: Transform pos: 39.5,-16.5 parent: 2 + - uid: 2146 + components: + - type: Transform + pos: -24.5,38.5 + parent: 2 - uid: 16770 components: - type: Transform pos: 53.5,-38.5 parent: 2 -- proto: CrateEngineeringCableHV - entities: - - uid: 15805 - components: - - type: Transform - pos: -24.5,38.5 - parent: 2 - proto: CrateEngineeringGear entities: - uid: 936 @@ -59379,10 +59046,10 @@ entities: parent: 2 - proto: CrateTrashCartJani entities: - - uid: 5885 + - uid: 21551 components: - type: Transform - pos: -15.5,-23.5 + pos: -15.5,-22.5 parent: 2 - proto: CrayonBox entities: @@ -59391,11 +59058,6 @@ entities: - type: Transform pos: 0.47511625,47.57249 parent: 2 - - uid: 21336 - components: - - type: Transform - pos: 50.51619,-7.4898477 - parent: 2 - proto: CrazyGlue entities: - uid: 21382 @@ -59415,10 +59077,10 @@ entities: parent: 2 - proto: CrewMonitoringComputerCircuitboard entities: - - uid: 8193 + - uid: 21595 components: - type: Transform - pos: 9.52095,-45.471 + pos: 9.499117,-47.517467 parent: 2 - proto: CrewMonitoringServer entities: @@ -59457,11 +59119,6 @@ entities: - type: Transform pos: 65.51561,20.528181 parent: 2 - - uid: 17537 - components: - - type: Transform - pos: 75.405594,-15.324422 - parent: 2 - proto: CrowbarRed entities: - uid: 21391 @@ -59519,15 +59176,11 @@ entities: - type: Transform pos: 61.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7039 components: - type: Transform pos: 59.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: CryoxadoneBeakerSmall entities: - uid: 7062 @@ -59552,6 +59205,16 @@ entities: - type: Transform pos: -29.5,27.5 parent: 2 + - uid: 8134 + components: + - type: Transform + pos: -13.5,6.5 + parent: 2 + - uid: 8148 + components: + - type: Transform + pos: -13.5,7.5 + parent: 2 - proto: CurtainsBlueOpen entities: - uid: 1546 @@ -59626,6 +59289,16 @@ entities: - type: Transform pos: -27.5,-8.5 parent: 2 + - uid: 8133 + components: + - type: Transform + pos: 56.5,27.5 + parent: 2 + - uid: 8150 + components: + - type: Transform + pos: 62.5,26.5 + parent: 2 - proto: d20Dice entities: - uid: 942 @@ -59633,6 +59306,18 @@ entities: - type: Transform pos: -17.367237,-13.48901 parent: 2 +- proto: Dart + entities: + - uid: 21573 + components: + - type: Transform + pos: -36.899765,23.610838 + parent: 2 + - uid: 21575 + components: + - type: Transform + pos: -36.806015,23.725422 + parent: 2 - proto: DawInstrumentMachineCircuitboard entities: - uid: 21449 @@ -60806,6 +60491,12 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,-36.5 parent: 2 + - uid: 21574 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,25.5 + parent: 2 - proto: DisposalJunction entities: - uid: 12957 @@ -60912,6 +60603,12 @@ entities: parent: 2 - proto: DisposalJunctionFlipped entities: + - uid: 3293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 14.5,20.5 + parent: 2 - uid: 12947 components: - type: Transform @@ -61001,6 +60698,11 @@ entities: rot: -1.5707963267948966 rad pos: 65.5,-20.5 parent: 2 + - uid: 21577 + components: + - type: Transform + pos: 14.5,23.5 + parent: 2 - proto: DisposalPipe entities: - uid: 141 @@ -62844,12 +62546,6 @@ entities: rot: -1.5707963267948966 rad pos: 13.5,20.5 parent: 2 - - uid: 13333 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 14.5,20.5 - parent: 2 - uid: 13334 components: - type: Transform @@ -64380,6 +64076,45 @@ entities: rot: 1.5707963267948966 rad pos: 32.5,-36.5 parent: 2 + - uid: 21578 + components: + - type: Transform + pos: 14.5,22.5 + parent: 2 + - uid: 21579 + components: + - type: Transform + pos: 14.5,21.5 + parent: 2 + - uid: 21580 + components: + - type: Transform + pos: 14.5,24.5 + parent: 2 + - uid: 21581 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,25.5 + parent: 2 + - uid: 21582 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,25.5 + parent: 2 + - uid: 21583 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 16.5,23.5 + parent: 2 + - uid: 21584 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,23.5 + parent: 2 - proto: DisposalTrunk entities: - uid: 2313 @@ -64616,6 +64351,18 @@ entities: rot: -1.5707963267948966 rad pos: -35.5,-64.5 parent: 2 + - uid: 21585 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,23.5 + parent: 2 + - uid: 21586 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,25.5 + parent: 2 - proto: DisposalUnit entities: - uid: 950 @@ -65023,11 +64770,6 @@ entities: - type: Transform pos: -28.5,-8.5 parent: 2 - - uid: 7416 - components: - - type: Transform - pos: 70.5,-23.5 - parent: 2 - uid: 9167 components: - type: Transform @@ -65069,6 +64811,13 @@ entities: - type: Transform pos: 36.5,12.5 parent: 2 +- proto: DresserResearchDirectorFilled + entities: + - uid: 5885 + components: + - type: Transform + pos: 70.5,-23.5 + parent: 2 - proto: DrinkBottleOfNothingFull entities: - uid: 2176 @@ -65104,6 +64853,13 @@ entities: - type: Transform pos: -35.492134,-15.289576 parent: 2 +- proto: DrinkHotCoco + entities: + - uid: 8168 + components: + - type: Transform + pos: 62.326893,-4.4846063 + parent: 2 - proto: DrinkHotCoffee entities: - uid: 21396 @@ -65287,6 +65043,11 @@ entities: rot: -1.5707963267948966 rad pos: 60.5,2.5 parent: 2 + - uid: 15080 + components: + - type: Transform + pos: 7.5,-46.5 + parent: 2 - uid: 17356 components: - type: Transform @@ -65716,11 +65477,6 @@ entities: - type: Transform pos: 15.5,-46.5 parent: 2 - - uid: 17434 - components: - - type: Transform - pos: 7.5,-44.5 - parent: 2 - uid: 17435 components: - type: Transform @@ -66262,6 +66018,13 @@ entities: - type: Transform pos: 3.5,44.5 parent: 2 +- proto: FancyTableSpawner + entities: + - uid: 15081 + components: + - type: Transform + pos: -15.5,-3.5 + parent: 2 - proto: FaxMachineBase entities: - uid: 997 @@ -66472,8 +66235,6 @@ entities: - 20123 - 8665 - 14946 - - type: AtmosDevice - joinedGrid: 2 - uid: 9188 components: - type: Transform @@ -66485,8 +66246,7 @@ entities: - 16365 - 16366 - 18850 - - type: AtmosDevice - joinedGrid: 2 + - 7358 - uid: 11468 components: - type: Transform @@ -66498,8 +66258,6 @@ entities: - 19779 - 8692 - 8693 - - type: AtmosDevice - joinedGrid: 2 - uid: 17547 components: - type: Transform @@ -66518,8 +66276,6 @@ entities: - 8535 - 8534 - 18225 - - type: AtmosDevice - joinedGrid: 2 - uid: 17548 components: - type: Transform @@ -66538,8 +66294,6 @@ entities: - 4324 - 4323 - 18226 - - type: AtmosDevice - joinedGrid: 2 - uid: 17549 components: - type: Transform @@ -66557,8 +66311,6 @@ entities: - 8750 - 8749 - 18308 - - type: AtmosDevice - joinedGrid: 2 - uid: 17550 components: - type: Transform @@ -66572,8 +66324,6 @@ entities: - 8749 - 8750 - 8751 - - type: AtmosDevice - joinedGrid: 2 - uid: 17551 components: - type: Transform @@ -66595,8 +66345,6 @@ entities: - 6521 - 6520 - 18331 - - type: AtmosDevice - joinedGrid: 2 - uid: 17552 components: - type: Transform @@ -66607,8 +66355,6 @@ entities: - 8757 - 8758 - 18428 - - type: AtmosDevice - joinedGrid: 2 - uid: 17553 components: - type: Transform @@ -66619,8 +66365,6 @@ entities: devices: - 8743 - 18388 - - type: AtmosDevice - joinedGrid: 2 - uid: 17554 components: - type: Transform @@ -66633,8 +66377,6 @@ entities: - 8741 - 8742 - 18358 - - type: AtmosDevice - joinedGrid: 2 - uid: 17555 components: - type: Transform @@ -66646,8 +66388,6 @@ entities: - 8740 - 8739 - 18514 - - type: AtmosDevice - joinedGrid: 2 - uid: 17556 components: - type: Transform @@ -66664,8 +66404,6 @@ entities: - 6521 - 6520 - 18441 - - type: AtmosDevice - joinedGrid: 2 - uid: 17557 components: - type: Transform @@ -66678,8 +66416,6 @@ entities: - 8734 - 8735 - 18496 - - type: AtmosDevice - joinedGrid: 2 - uid: 17558 components: - type: Transform @@ -66692,8 +66428,6 @@ entities: - 8737 - 8738 - 18475 - - type: AtmosDevice - joinedGrid: 2 - uid: 17559 components: - type: Transform @@ -66704,8 +66438,6 @@ entities: devices: - 8755 - 8756 - - type: AtmosDevice - joinedGrid: 2 - uid: 17560 components: - type: Transform @@ -66716,8 +66448,6 @@ entities: - 8544 - 8545 - 18616 - - type: AtmosDevice - joinedGrid: 2 - uid: 17561 components: - type: Transform @@ -66731,8 +66461,6 @@ entities: - 8547 - 8546 - 18535 - - type: AtmosDevice - joinedGrid: 2 - uid: 17562 components: - type: Transform @@ -66745,8 +66473,6 @@ entities: - 5606 - 5607 - 18605 - - type: AtmosDevice - joinedGrid: 2 - uid: 17563 components: - type: Transform @@ -66764,8 +66490,6 @@ entities: - 7175 - 7365 - 18564 - - type: AtmosDevice - joinedGrid: 2 - uid: 17564 components: - type: Transform @@ -66779,8 +66503,6 @@ entities: - 8549 - 8555 - 18580 - - type: AtmosDevice - joinedGrid: 2 - uid: 17565 components: - type: Transform @@ -66791,8 +66513,6 @@ entities: devices: - 8556 - 18629 - - type: AtmosDevice - joinedGrid: 2 - uid: 17566 components: - type: Transform @@ -66805,8 +66525,6 @@ entities: - 8543 - 8542 - 18606 - - type: AtmosDevice - joinedGrid: 2 - uid: 17567 components: - type: Transform @@ -66821,8 +66539,6 @@ entities: - 18707 - 18705 - 18703 - - type: AtmosDevice - joinedGrid: 2 - uid: 17568 components: - type: Transform @@ -66835,8 +66551,6 @@ entities: - 8574 - 18813 - 8575 - - type: AtmosDevice - joinedGrid: 2 - uid: 17569 components: - type: Transform @@ -66857,8 +66571,6 @@ entities: - 8565 - 8566 - 18681 - - type: AtmosDevice - joinedGrid: 2 - uid: 17570 components: - type: Transform @@ -66869,8 +66581,6 @@ entities: - 8571 - 8572 - 18684 - - type: AtmosDevice - joinedGrid: 2 - uid: 17571 components: - type: Transform @@ -66881,8 +66591,6 @@ entities: - 8570 - 8569 - 18756 - - type: AtmosDevice - joinedGrid: 2 - uid: 17572 components: - type: Transform @@ -66894,8 +66602,6 @@ entities: - 8568 - 8567 - 18774 - - type: AtmosDevice - joinedGrid: 2 - uid: 17573 components: - type: Transform @@ -66910,8 +66616,6 @@ entities: - 8583 - 8584 - 18743 - - type: AtmosDevice - joinedGrid: 2 - uid: 17574 components: - type: Transform @@ -66926,8 +66630,6 @@ entities: - 1006 - 17575 - 19542 - - type: AtmosDevice - joinedGrid: 2 - uid: 17577 components: - type: Transform @@ -66942,8 +66644,6 @@ entities: - 8643 - 8642 - 19543 - - type: AtmosDevice - joinedGrid: 2 - uid: 17578 components: - type: Transform @@ -66956,8 +66656,6 @@ entities: - 8644 - 17580 - 19589 - - type: AtmosDevice - joinedGrid: 2 - uid: 17581 components: - type: Transform @@ -66973,8 +66671,6 @@ entities: - 8644 - 8643 - 19582 - - type: AtmosDevice - joinedGrid: 2 - uid: 17582 components: - type: Transform @@ -66986,8 +66682,6 @@ entities: - 8646 - 8647 - 19568 - - type: AtmosDevice - joinedGrid: 2 - uid: 17583 components: - type: Transform @@ -67002,8 +66696,6 @@ entities: - 8650 - 8655 - 19510 - - type: AtmosDevice - joinedGrid: 2 - uid: 17584 components: - type: Transform @@ -67014,8 +66706,6 @@ entities: devices: - 8653 - 19641 - - type: AtmosDevice - joinedGrid: 2 - uid: 17585 components: - type: Transform @@ -67030,8 +66720,6 @@ entities: - 1007 - 8654 - 19581 - - type: AtmosDevice - joinedGrid: 2 - uid: 17586 components: - type: Transform @@ -67047,8 +66735,6 @@ entities: - 1007 - 8682 - 19514 - - type: AtmosDevice - joinedGrid: 2 - uid: 17587 components: - type: Transform @@ -67060,8 +66746,6 @@ entities: - 8692 - 8686 - 19790 - - type: AtmosDevice - joinedGrid: 2 - uid: 17588 components: - type: Transform @@ -67072,8 +66756,6 @@ entities: devices: - 8703 - 19762 - - type: AtmosDevice - joinedGrid: 2 - uid: 17589 components: - type: Transform @@ -67084,8 +66766,6 @@ entities: - 8703 - 8702 - 19752 - - type: AtmosDevice - joinedGrid: 2 - uid: 17591 components: - type: Transform @@ -67102,8 +66782,6 @@ entities: - 4013 - 4012 - 19734 - - type: AtmosDevice - joinedGrid: 2 - uid: 17592 components: - type: Transform @@ -67114,8 +66792,6 @@ entities: devices: - 8681 - 19973 - - type: AtmosDevice - joinedGrid: 2 - uid: 17593 components: - type: Transform @@ -67134,8 +66810,6 @@ entities: - 8704 - 19681 - 19682 - - type: AtmosDevice - joinedGrid: 2 - uid: 17594 components: - type: Transform @@ -67149,8 +66823,6 @@ entities: - 8705 - 17363 - 19800 - - type: AtmosDevice - joinedGrid: 2 - uid: 17595 components: - type: Transform @@ -67160,8 +66832,6 @@ entities: devices: - 8705 - 19829 - - type: AtmosDevice - joinedGrid: 2 - uid: 17597 components: - type: Transform @@ -67174,8 +66844,6 @@ entities: - 8709 - 8712 - 19969 - - type: AtmosDevice - joinedGrid: 2 - uid: 17598 components: - type: Transform @@ -67195,8 +66863,6 @@ entities: - 8708 - 8709 - 19910 - - type: AtmosDevice - joinedGrid: 2 - uid: 17599 components: - type: Transform @@ -67210,8 +66876,6 @@ entities: - 8716 - 8715 - 19951 - - type: AtmosDevice - joinedGrid: 2 - uid: 17600 components: - type: Transform @@ -67225,8 +66889,6 @@ entities: - 8720 - 8719 - 19909 - - type: AtmosDevice - joinedGrid: 2 - uid: 17601 components: - type: Transform @@ -67241,8 +66903,6 @@ entities: - 19902 - 16937 - 16936 - - type: AtmosDevice - joinedGrid: 2 - uid: 17602 components: - type: Transform @@ -67254,8 +66914,6 @@ entities: - 8710 - 8711 - 19964 - - type: AtmosDevice - joinedGrid: 2 - uid: 17603 components: - type: Transform @@ -67268,8 +66926,6 @@ entities: - 8732 - 8711 - 20219 - - type: AtmosDevice - joinedGrid: 2 - uid: 17606 components: - type: Transform @@ -67281,8 +66937,6 @@ entities: - 14935 - 14934 - 20042 - - type: AtmosDevice - joinedGrid: 2 - uid: 17607 components: - type: Transform @@ -67297,8 +66951,6 @@ entities: - 14937 - 14938 - 20039 - - type: AtmosDevice - joinedGrid: 2 - uid: 17608 components: - type: Transform @@ -67312,8 +66964,6 @@ entities: - 14938 - 14937 - 20087 - - type: AtmosDevice - joinedGrid: 2 - uid: 17609 components: - type: Transform @@ -67327,8 +66977,6 @@ entities: - 17610 - 17611 - 20036 - - type: AtmosDevice - joinedGrid: 2 - uid: 17612 components: - type: Transform @@ -67341,8 +66989,6 @@ entities: - 8675 - 8674 - 20004 - - type: AtmosDevice - joinedGrid: 2 - uid: 17613 components: - type: Transform @@ -67353,8 +66999,6 @@ entities: devices: - 8536 - 18532 - - type: AtmosDevice - joinedGrid: 2 - uid: 17614 components: - type: Transform @@ -67365,8 +67009,6 @@ entities: devices: - 8759 - 18516 - - type: AtmosDevice - joinedGrid: 2 - uid: 17615 components: - type: Transform @@ -67378,8 +67020,6 @@ entities: - 8561 - 8562 - 18632 - - type: AtmosDevice - joinedGrid: 2 - uid: 17616 components: - type: Transform @@ -67391,8 +67031,6 @@ entities: - 9187 - 14921 - 18831 - - type: AtmosDevice - joinedGrid: 2 - uid: 17619 components: - type: Transform @@ -67405,8 +67043,6 @@ entities: - 8595 - 8605 - 18868 - - type: AtmosDevice - joinedGrid: 2 - uid: 17620 components: - type: Transform @@ -67417,8 +67053,6 @@ entities: - 8606 - 8605 - 19420 - - type: AtmosDevice - joinedGrid: 2 - uid: 17621 components: - type: Transform @@ -67433,8 +67067,6 @@ entities: - 13598 - 17622 - 19370 - - type: AtmosDevice - joinedGrid: 2 - uid: 17623 components: - type: Transform @@ -67449,8 +67081,6 @@ entities: - 8617 - 8616 - 19351 - - type: AtmosDevice - joinedGrid: 2 - uid: 17624 components: - type: Transform @@ -67461,8 +67091,6 @@ entities: devices: - 8616 - 19352 - - type: AtmosDevice - joinedGrid: 2 - uid: 17625 components: - type: Transform @@ -67474,8 +67102,6 @@ entities: - 8777 - 8782 - 19018 - - type: AtmosDevice - joinedGrid: 2 - uid: 17626 components: - type: Transform @@ -67488,8 +67114,6 @@ entities: - 8775 - 8783 - 19017 - - type: AtmosDevice - joinedGrid: 2 - uid: 17627 components: - type: Transform @@ -67501,8 +67125,6 @@ entities: - 8774 - 8784 - 19032 - - type: AtmosDevice - joinedGrid: 2 - uid: 17628 components: - type: Transform @@ -67527,8 +67149,6 @@ entities: - 492 - 493 - 491 - - type: AtmosDevice - joinedGrid: 2 - uid: 17631 components: - type: Transform @@ -67540,8 +67160,6 @@ entities: - 8769 - 8773 - 19058 - - type: AtmosDevice - joinedGrid: 2 - uid: 17632 components: - type: Transform @@ -67552,8 +67170,6 @@ entities: devices: - 8769 - 19071 - - type: AtmosDevice - joinedGrid: 2 - uid: 17633 components: - type: Transform @@ -67562,11 +67178,9 @@ entities: - type: DeviceList devices: - 8773 - - 8771 - 8772 - - 19035 - - type: AtmosDevice - joinedGrid: 2 + - 8771 + - 21559 - uid: 17634 components: - type: Transform @@ -67583,8 +67197,6 @@ entities: - 8636 - 8635 - 19474 - - type: AtmosDevice - joinedGrid: 2 - uid: 17635 components: - type: Transform @@ -67598,8 +67210,6 @@ entities: - 8629 - 8630 - 19427 - - type: AtmosDevice - joinedGrid: 2 - uid: 17636 components: - type: Transform @@ -67610,8 +67220,6 @@ entities: devices: - 8629 - 19460 - - type: AtmosDevice - joinedGrid: 2 - uid: 17637 components: - type: Transform @@ -67626,8 +67234,6 @@ entities: - 1064 - 19327 - 19328 - - type: AtmosDevice - joinedGrid: 2 - uid: 17638 components: - type: Transform @@ -67638,8 +67244,6 @@ entities: devices: - 4493 - 20181 - - type: AtmosDevice - joinedGrid: 2 - uid: 17639 components: - type: Transform @@ -67655,8 +67259,6 @@ entities: - 8622 - 8623 - 19317 - - type: AtmosDevice - joinedGrid: 2 - uid: 17640 components: - type: Transform @@ -67666,8 +67268,6 @@ entities: - type: DeviceList devices: - 8665 - - type: AtmosDevice - joinedGrid: 2 - uid: 17641 components: - type: Transform @@ -67679,8 +67279,6 @@ entities: - 8664 - 8667 - 19631 - - type: AtmosDevice - joinedGrid: 2 - uid: 17642 components: - type: Transform @@ -67695,8 +67293,6 @@ entities: - 8670 - 8671 - 19632 - - type: AtmosDevice - joinedGrid: 2 - uid: 17643 components: - type: Transform @@ -67708,8 +67304,6 @@ entities: - 2692 - 18942 - 7082 - - type: AtmosDevice - joinedGrid: 2 - uid: 17644 components: - type: Transform @@ -67726,8 +67320,6 @@ entities: - 2692 - 2690 - 18914 - - type: AtmosDevice - joinedGrid: 2 - uid: 17645 components: - type: Transform @@ -67743,8 +67335,6 @@ entities: - 8597 - 8598 - 18871 - - type: AtmosDevice - joinedGrid: 2 - uid: 17646 components: - type: Transform @@ -67764,8 +67354,6 @@ entities: - 3781 - 3780 - 19367 - - type: AtmosDevice - joinedGrid: 2 - uid: 17647 components: - type: Transform @@ -67782,8 +67370,6 @@ entities: - 3787 - 3789 - 19167 - - type: AtmosDevice - joinedGrid: 2 - uid: 17648 components: - type: Transform @@ -67806,8 +67392,6 @@ entities: - 6068 - 6069 - 19335 - - type: AtmosDevice - joinedGrid: 2 - uid: 17649 components: - type: Transform @@ -67825,8 +67409,6 @@ entities: - 6373 - 6374 - 19306 - - type: AtmosDevice - joinedGrid: 2 - uid: 17650 components: - type: Transform @@ -67845,8 +67427,6 @@ entities: - 6363 - 19304 - 19305 - - type: AtmosDevice - joinedGrid: 2 - uid: 17651 components: - type: Transform @@ -67859,8 +67439,6 @@ entities: - 6353 - 6354 - 20178 - - type: AtmosDevice - joinedGrid: 2 - uid: 17652 components: - type: Transform @@ -67873,8 +67451,6 @@ entities: - 6357 - 6356 - 20177 - - type: AtmosDevice - joinedGrid: 2 - uid: 17654 components: - type: Transform @@ -67898,8 +67474,6 @@ entities: - 1057 - 8785 - 18289 - - type: AtmosDevice - joinedGrid: 2 - uid: 17656 components: - type: Transform @@ -67920,8 +67494,6 @@ entities: - 8787 - 8788 - 8789 - - type: AtmosDevice - joinedGrid: 2 - uid: 17658 components: - type: Transform @@ -67954,8 +67526,6 @@ entities: - 18904 - 18257 - 18256 - - type: AtmosDevice - joinedGrid: 2 - uid: 17659 components: - type: Transform @@ -67978,8 +67548,6 @@ entities: - 1062 - 1061 - 18252 - - type: AtmosDevice - joinedGrid: 2 - uid: 17662 components: - type: Transform @@ -67995,8 +67563,6 @@ entities: - 5307 - 5308 - 18249 - - type: AtmosDevice - joinedGrid: 2 - uid: 17663 components: - type: Transform @@ -68014,8 +67580,6 @@ entities: - 5308 - 5307 - 5306 - - type: AtmosDevice - joinedGrid: 2 - uid: 17664 components: - type: Transform @@ -68032,8 +67596,6 @@ entities: - 4338 - 4339 - 18243 - - type: AtmosDevice - joinedGrid: 2 - uid: 17665 components: - type: Transform @@ -68048,8 +67610,6 @@ entities: - 4335 - 4334 - 18240 - - type: AtmosDevice - joinedGrid: 2 - uid: 17666 components: - type: Transform @@ -68068,8 +67628,6 @@ entities: - 4332 - 4333 - 18237 - - type: AtmosDevice - joinedGrid: 2 - uid: 17667 components: - type: Transform @@ -68086,8 +67644,6 @@ entities: - 4328 - 8760 - 17875 - - type: AtmosDevice - joinedGrid: 2 - uid: 17669 components: - type: Transform @@ -68104,8 +67660,6 @@ entities: - 8541 - 8759 - 18235 - - type: AtmosDevice - joinedGrid: 2 - uid: 17672 components: - type: Transform @@ -68129,8 +67683,6 @@ entities: - 8701 - 8700 - 18224 - - type: AtmosDevice - joinedGrid: 2 - uid: 17673 components: - type: Transform @@ -68149,8 +67701,6 @@ entities: - 1038 - 1039 - 19842 - - type: AtmosDevice - joinedGrid: 2 - uid: 17674 components: - type: Transform @@ -68167,8 +67717,6 @@ entities: - 1032 - 1033 - 18221 - - type: AtmosDevice - joinedGrid: 2 - uid: 17675 components: - type: Transform @@ -68187,8 +67735,6 @@ entities: - 1032 - 1033 - 18218 - - type: AtmosDevice - joinedGrid: 2 - uid: 17676 components: - type: Transform @@ -68204,8 +67750,6 @@ entities: - 1021 - 1020 - 18305 - - type: AtmosDevice - joinedGrid: 2 - uid: 17677 components: - type: Transform @@ -68222,8 +67766,6 @@ entities: - 1017 - 1016 - 18302 - - type: AtmosDevice - joinedGrid: 2 - uid: 17678 components: - type: Transform @@ -68241,8 +67783,6 @@ entities: - 1017 - 1018 - 18298 - - type: AtmosDevice - joinedGrid: 2 - uid: 17680 components: - type: Transform @@ -68262,8 +67802,6 @@ entities: - 1027 - 8663 - 18295 - - type: AtmosDevice - joinedGrid: 2 - uid: 17682 components: - type: Transform @@ -68285,8 +67823,6 @@ entities: - 1054 - 8666 - 18292 - - type: AtmosDevice - joinedGrid: 2 - uid: 19605 components: - type: Transform @@ -68297,8 +67833,6 @@ entities: devices: - 17575 - 17576 - - type: AtmosDevice - joinedGrid: 2 - uid: 20218 components: - type: Transform @@ -68313,8 +67847,6 @@ entities: - 4015 - 8697 - 8696 - - type: AtmosDevice - joinedGrid: 2 - uid: 20221 components: - type: Transform @@ -68330,8 +67862,6 @@ entities: - 8724 - 8725 - 8726 - - type: AtmosDevice - joinedGrid: 2 - uid: 20223 components: - type: Transform @@ -68347,8 +67877,6 @@ entities: - 4755 - 17500 - 17501 - - type: AtmosDevice - joinedGrid: 2 - uid: 20224 components: - type: Transform @@ -68360,8 +67888,6 @@ entities: - 8577 - 8580 - 18727 - - type: AtmosDevice - joinedGrid: 2 - uid: 20232 components: - type: Transform @@ -68372,8 +67898,6 @@ entities: devices: - 8966 - 8779 - - type: AtmosDevice - joinedGrid: 2 - uid: 20234 components: - type: Transform @@ -68384,8 +67908,6 @@ entities: devices: - 3206 - 8781 - - type: AtmosDevice - joinedGrid: 2 - uid: 20241 components: - type: Transform @@ -68403,8 +67925,6 @@ entities: - 8611 - 8612 - 18282 - - type: AtmosDevice - joinedGrid: 2 - uid: 20244 components: - type: Transform @@ -68417,8 +67937,6 @@ entities: - 8661 - 8640 - 19483 - - type: AtmosDevice - joinedGrid: 2 - uid: 20245 components: - type: Transform @@ -68432,8 +67950,6 @@ entities: - 8654 - 8653 - 19509 - - type: AtmosDevice - joinedGrid: 2 - uid: 20247 components: - type: Transform @@ -68447,8 +67963,6 @@ entities: - 8660 - 8656 - 19642 - - type: AtmosDevice - joinedGrid: 2 - uid: 21112 components: - type: Transform @@ -68459,8 +67973,6 @@ entities: devices: - 21115 - 21114 - - type: AtmosDevice - joinedGrid: 2 - proto: FireAxeCabinetFilled entities: - uid: 1003 @@ -68499,6 +68011,11 @@ entities: - type: Transform pos: 57.5,24.5 parent: 2 + - uid: 8130 + components: + - type: Transform + pos: 8.5,-45.5 + parent: 2 - uid: 8533 components: - type: Transform @@ -70434,6 +69951,15 @@ entities: rot: 3.141592653589793 rad pos: 51.5,0.5 parent: 2 + - uid: 7358 + components: + - type: Transform + pos: -30.5,36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17618 + - 9188 - uid: 7455 components: - type: Transform @@ -70994,18 +70520,30 @@ entities: rot: 3.141592653589793 rad pos: -22.5,-18.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17633 + - 8405 - uid: 8772 components: - type: Transform rot: 3.141592653589793 rad pos: -22.5,-17.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17633 + - 8405 - uid: 8773 components: - type: Transform rot: 3.141592653589793 rad pos: -18.5,-16.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17633 + - 8405 - uid: 8791 components: - type: Transform @@ -71999,8 +71537,6 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasMinerNitrogenStation entities: - uid: 1094 @@ -72009,8 +71545,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasMinerOxygenStation entities: - uid: 1095 @@ -72019,8 +71553,6 @@ entities: rot: -1.5707963267948966 rad pos: 16.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasMinerWaterVapor entities: - uid: 1097 @@ -72029,8 +71561,6 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasMixer entities: - uid: 7049 @@ -72039,8 +71569,6 @@ entities: rot: 3.141592653589793 rad pos: 60.5,-6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasMixerFlipped entities: - uid: 877 @@ -72048,8 +71576,6 @@ entities: - type: Transform pos: 47.5,15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1098 components: - type: Transform @@ -72059,8 +71585,6 @@ entities: - type: GasMixer inletTwoConcentration: 0.78 inletOneConcentration: 0.22 - - type: AtmosDevice - joinedGrid: 2 - proto: GasOutletInjector entities: - uid: 1099 @@ -72068,67 +71592,49 @@ entities: - type: Transform pos: 16.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1100 components: - type: Transform pos: 18.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1101 components: - type: Transform pos: 20.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1102 components: - type: Transform pos: 22.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1103 components: - type: Transform pos: 24.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1104 components: - type: Transform pos: 26.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 3101 components: - type: Transform rot: -1.5707963267948966 rad pos: 34.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7381 components: - type: Transform rot: -1.5707963267948966 rad pos: 80.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7382 components: - type: Transform rot: -1.5707963267948966 rad pos: 80.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPassiveVent entities: - uid: 1105 @@ -72136,80 +71642,60 @@ entities: - type: Transform pos: 29.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1106 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1107 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1108 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1109 components: - type: Transform rot: 1.5707963267948966 rad pos: 22.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1110 components: - type: Transform rot: 1.5707963267948966 rad pos: 24.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1111 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1112 components: - type: Transform rot: 3.141592653589793 rad pos: -15.5,13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7383 components: - type: Transform rot: -1.5707963267948966 rad pos: 80.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7384 components: - type: Transform rot: -1.5707963267948966 rad pos: 80.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPipeBend entities: - uid: 1113 @@ -89346,104 +88832,78 @@ entities: rot: 3.141592653589793 rad pos: 20.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1199 components: - type: Transform rot: 3.141592653589793 rad pos: 19.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1200 components: - type: Transform rot: 3.141592653589793 rad pos: 18.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1201 components: - type: Transform rot: 3.141592653589793 rad pos: 22.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1202 components: - type: Transform rot: 3.141592653589793 rad pos: 23.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1203 components: - type: Transform rot: 3.141592653589793 rad pos: 24.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 5522 components: - type: Transform rot: 1.5707963267948966 rad pos: 75.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 5531 components: - type: Transform rot: 1.5707963267948966 rad pos: 75.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 5533 components: - type: Transform rot: 1.5707963267948966 rad pos: 75.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 5552 components: - type: Transform rot: 1.5707963267948966 rad pos: 75.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7051 components: - type: Transform rot: 3.141592653589793 rad pos: 60.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7052 components: - type: Transform rot: 3.141592653589793 rad pos: 61.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 9103 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-36.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 9276 @@ -89452,24 +88912,18 @@ entities: rot: 3.141592653589793 rad pos: 45.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 9277 components: - type: Transform rot: 3.141592653589793 rad pos: 47.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 20213 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-37.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 21242 @@ -89478,15 +88932,11 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-7.5 parent: 21128 - - type: AtmosDevice - joinedGrid: 21128 - uid: 21393 components: - type: Transform pos: 16.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasPressurePump entities: - uid: 1204 @@ -89494,114 +88944,84 @@ entities: - type: Transform pos: 17.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1205 components: - type: Transform pos: 19.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1206 components: - type: Transform pos: 21.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1207 components: - type: Transform pos: 23.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1208 components: - type: Transform pos: 25.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1209 components: - type: Transform pos: 27.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1210 components: - type: Transform rot: 3.141592653589793 rad pos: 24.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1211 components: - type: Transform rot: 3.141592653589793 rad pos: 26.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1212 components: - type: Transform rot: 3.141592653589793 rad pos: 22.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1213 components: - type: Transform rot: 3.141592653589793 rad pos: 20.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1214 components: - type: Transform rot: 3.141592653589793 rad pos: 18.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1215 components: - type: Transform rot: 3.141592653589793 rad pos: 16.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1216 components: - type: Transform rot: 1.5707963267948966 rad pos: 29.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1217 components: - type: Transform rot: -1.5707963267948966 rad pos: 29.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1218 components: - type: Transform pos: 17.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 1219 @@ -89610,8 +89030,6 @@ entities: rot: 3.141592653589793 rad pos: 21.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 7045 @@ -89620,8 +89038,6 @@ entities: rot: 1.5707963267948966 rad pos: 58.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 7048 @@ -89630,48 +89046,36 @@ entities: rot: 3.141592653589793 rad pos: 60.5,-5.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7377 components: - type: Transform rot: 1.5707963267948966 rad pos: 77.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7378 components: - type: Transform rot: 1.5707963267948966 rad pos: 77.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7379 components: - type: Transform rot: -1.5707963267948966 rad pos: 77.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7380 components: - type: Transform rot: -1.5707963267948966 rad pos: 77.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 16908 components: - type: Transform rot: -1.5707963267948966 rad pos: 58.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - proto: GasThermoMachineFreezer @@ -89682,23 +89086,17 @@ entities: rot: 3.141592653589793 rad pos: 28.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1221 components: - type: Transform rot: 3.141592653589793 rad pos: 29.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7040 components: - type: Transform pos: 60.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasThermoMachineFreezerEnabled entities: - uid: 1222 @@ -89708,8 +89106,6 @@ entities: parent: 2 - type: GasThermoMachine targetTemperature: 270 - - type: AtmosDevice - joinedGrid: 2 - proto: GasThermoMachineHeater entities: - uid: 9260 @@ -89718,16 +89114,12 @@ entities: rot: 3.141592653589793 rad pos: 27.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 9261 components: - type: Transform rot: 3.141592653589793 rad pos: 26.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasValve entities: - uid: 1225 @@ -89736,8 +89128,6 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: GasVentPump entities: - uid: 9034 @@ -89746,8 +89136,6 @@ entities: rot: 3.141592653589793 rad pos: 18.5,-53.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 17707 @@ -89755,8 +89143,6 @@ entities: - type: Transform pos: 21.5,-22.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 17792 @@ -89765,8 +89151,6 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 17800 @@ -89775,8 +89159,6 @@ entities: rot: -1.5707963267948966 rad pos: 44.5,-19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18127 @@ -89785,8 +89167,6 @@ entities: rot: 1.5707963267948966 rad pos: -50.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18128 @@ -89795,8 +89175,6 @@ entities: rot: -1.5707963267948966 rad pos: -45.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18163 @@ -89805,8 +89183,6 @@ entities: rot: 1.5707963267948966 rad pos: -13.5,-38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18217 @@ -89814,8 +89190,6 @@ entities: - type: Transform pos: 25.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18220 @@ -89823,8 +89197,6 @@ entities: - type: Transform pos: 35.5,-19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18227 @@ -89833,8 +89205,6 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18230 @@ -89843,8 +89213,6 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18232 @@ -89853,8 +89221,6 @@ entities: rot: 3.141592653589793 rad pos: 34.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18236 @@ -89863,8 +89229,6 @@ entities: rot: 3.141592653589793 rad pos: 26.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18238 @@ -89873,8 +89237,6 @@ entities: rot: 1.5707963267948966 rad pos: 20.5,12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18241 @@ -89883,8 +89245,6 @@ entities: rot: 1.5707963267948966 rad pos: 20.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18245 @@ -89893,8 +89253,6 @@ entities: rot: 3.141592653589793 rad pos: 12.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18248 @@ -89903,8 +89261,6 @@ entities: rot: 3.141592653589793 rad pos: -4.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18250 @@ -89913,8 +89269,6 @@ entities: rot: 3.141592653589793 rad pos: -13.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18254 @@ -89923,8 +89277,6 @@ entities: rot: -1.5707963267948966 rad pos: -25.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18258 @@ -89933,8 +89285,6 @@ entities: rot: -1.5707963267948966 rad pos: -25.5,7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18267 @@ -89943,8 +89293,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18270 @@ -89953,8 +89301,6 @@ entities: rot: -1.5707963267948966 rad pos: -23.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18284 @@ -89963,8 +89309,6 @@ entities: rot: -1.5707963267948966 rad pos: -23.5,-9.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18286 @@ -89973,8 +89317,6 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18290 @@ -89983,8 +89325,6 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18294 @@ -89992,8 +89332,6 @@ entities: - type: Transform pos: -14.5,-30.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18297 @@ -90001,8 +89339,6 @@ entities: - type: Transform pos: -1.5,-30.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18300 @@ -90010,8 +89346,6 @@ entities: - type: Transform pos: 6.5,-30.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18304 @@ -90019,8 +89353,6 @@ entities: - type: Transform pos: 13.5,-32.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18307 @@ -90029,8 +89361,6 @@ entities: rot: 1.5707963267948966 rad pos: 20.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18321 @@ -90039,8 +89369,6 @@ entities: rot: 3.141592653589793 rad pos: 43.5,8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18335 @@ -90049,8 +89377,6 @@ entities: rot: -1.5707963267948966 rad pos: 56.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18336 @@ -90059,8 +89385,6 @@ entities: rot: 1.5707963267948966 rad pos: 50.5,10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18374 @@ -90069,8 +89393,6 @@ entities: rot: 3.141592653589793 rad pos: 55.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18375 @@ -90078,8 +89400,6 @@ entities: - type: Transform pos: 58.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18416 @@ -90090,8 +89410,6 @@ entities: - type: DeviceNetwork deviceLists: - 8369 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18426 @@ -90099,8 +89417,6 @@ entities: - type: Transform pos: 55.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18439 @@ -90109,8 +89425,6 @@ entities: rot: 1.5707963267948966 rad pos: 51.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18472 @@ -90119,8 +89433,6 @@ entities: rot: 3.141592653589793 rad pos: 57.5,-5.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18498 @@ -90129,8 +89441,6 @@ entities: rot: 3.141592653589793 rad pos: 51.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18512 @@ -90139,8 +89449,6 @@ entities: rot: -1.5707963267948966 rad pos: 60.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18515 @@ -90149,8 +89457,6 @@ entities: rot: 3.141592653589793 rad pos: 33.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18531 @@ -90159,8 +89465,6 @@ entities: rot: 1.5707963267948966 rad pos: 38.5,-3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18534 @@ -90169,8 +89473,6 @@ entities: rot: -1.5707963267948966 rad pos: 26.5,12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18554 @@ -90178,8 +89480,6 @@ entities: - type: Transform pos: 26.5,18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18577 @@ -90188,8 +89488,6 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18591 @@ -90198,8 +89496,6 @@ entities: rot: 1.5707963267948966 rad pos: 30.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18603 @@ -90208,8 +89504,6 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18615 @@ -90218,8 +89512,6 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18627 @@ -90228,8 +89520,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18631 @@ -90237,8 +89527,6 @@ entities: - type: Transform pos: 15.5,25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18643 @@ -90247,8 +89535,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18678 @@ -90256,8 +89542,6 @@ entities: - type: Transform pos: -9.5,28.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18682 @@ -90265,8 +89549,6 @@ entities: - type: Transform pos: -7.5,33.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18703 @@ -90274,8 +89556,6 @@ entities: - type: Transform pos: 3.5,25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18741 @@ -90283,8 +89563,6 @@ entities: - type: Transform pos: -2.5,45.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18744 @@ -90293,8 +89571,6 @@ entities: rot: -1.5707963267948966 rad pos: -1.5,36.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18753 @@ -90303,8 +89579,6 @@ entities: rot: 1.5707963267948966 rad pos: -13.5,31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18770 @@ -90313,8 +89587,6 @@ entities: rot: 1.5707963267948966 rad pos: -26.5,26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18773 @@ -90322,8 +89594,6 @@ entities: - type: Transform pos: -20.5,29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18782 @@ -90332,8 +89602,6 @@ entities: rot: 3.141592653589793 rad pos: -9.5,24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18783 @@ -90342,8 +89610,6 @@ entities: rot: 3.141592653589793 rad pos: -5.5,24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18784 @@ -90352,8 +89618,6 @@ entities: rot: 3.141592653589793 rad pos: -13.5,24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18811 @@ -90361,8 +89625,6 @@ entities: - type: Transform pos: 6.5,31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18858 @@ -90371,8 +89633,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,35.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18867 @@ -90381,8 +89641,6 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18869 @@ -90390,8 +89648,6 @@ entities: - type: Transform pos: -21.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18876 @@ -90400,8 +89656,6 @@ entities: rot: -1.5707963267948966 rad pos: -15.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18890 @@ -90409,8 +89663,6 @@ entities: - type: Transform pos: -35.5,7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18913 @@ -90419,8 +89671,6 @@ entities: rot: -1.5707963267948966 rad pos: -15.5,0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18936 @@ -90429,8 +89679,6 @@ entities: rot: 1.5707963267948966 rad pos: -15.5,5.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18943 @@ -90439,8 +89687,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18970 @@ -90451,8 +89697,6 @@ entities: - type: DeviceNetwork deviceLists: - 894 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18971 @@ -90460,8 +89704,6 @@ entities: - type: Transform pos: -36.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18972 @@ -90469,8 +89711,6 @@ entities: - type: Transform pos: -28.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18975 @@ -90479,8 +89719,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-39.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 18998 @@ -90489,8 +89727,6 @@ entities: rot: 3.141592653589793 rad pos: -37.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19012 @@ -90499,8 +89735,6 @@ entities: rot: 3.141592653589793 rad pos: -32.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19031 @@ -90508,8 +89742,6 @@ entities: - type: Transform pos: -29.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19034 @@ -90518,8 +89750,9 @@ entities: rot: -1.5707963267948966 rad pos: -19.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 + - type: DeviceNetwork + deviceLists: + - 8405 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19057 @@ -90527,8 +89760,6 @@ entities: - type: Transform pos: -18.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19069 @@ -90536,8 +89767,6 @@ entities: - type: Transform pos: -18.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19079 @@ -90546,8 +89775,6 @@ entities: rot: 3.141592653589793 rad pos: -30.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19084 @@ -90556,8 +89783,6 @@ entities: rot: 3.141592653589793 rad pos: -37.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19085 @@ -90566,8 +89791,6 @@ entities: rot: -1.5707963267948966 rad pos: -47.5,-36.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19092 @@ -90576,8 +89799,6 @@ entities: rot: 1.5707963267948966 rad pos: -56.5,-24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19103 @@ -90586,8 +89807,6 @@ entities: rot: 3.141592653589793 rad pos: -44.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19131 @@ -90596,8 +89815,6 @@ entities: rot: 3.141592653589793 rad pos: -45.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19301 @@ -90606,8 +89823,6 @@ entities: rot: 1.5707963267948966 rad pos: -55.5,-46.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19302 @@ -90616,8 +89831,6 @@ entities: rot: -1.5707963267948966 rad pos: -39.5,-46.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19314 @@ -90626,8 +89839,6 @@ entities: rot: 1.5707963267948966 rad pos: -58.5,-27.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19334 @@ -90636,8 +89847,6 @@ entities: rot: -1.5707963267948966 rad pos: -50.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19368 @@ -90645,8 +89854,6 @@ entities: - type: Transform pos: -48.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19410 @@ -90655,8 +89862,6 @@ entities: rot: 3.141592653589793 rad pos: -37.5,13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19425 @@ -90665,8 +89870,6 @@ entities: rot: -1.5707963267948966 rad pos: -22.5,-35.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19469 @@ -90675,8 +89878,6 @@ entities: rot: -1.5707963267948966 rad pos: -14.5,-26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19481 @@ -90684,8 +89885,6 @@ entities: - type: Transform pos: -5.5,-26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19484 @@ -90694,8 +89893,6 @@ entities: rot: -1.5707963267948966 rad pos: 14.5,-20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19508 @@ -90703,8 +89900,6 @@ entities: - type: Transform pos: 7.5,-20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19519 @@ -90713,8 +89908,6 @@ entities: rot: 1.5707963267948966 rad pos: -6.5,-21.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19522 @@ -90723,8 +89916,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-21.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19567 @@ -90733,8 +89924,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19569 @@ -90743,8 +89932,6 @@ entities: rot: 1.5707963267948966 rad pos: -5.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19575 @@ -90753,8 +89940,6 @@ entities: rot: 1.5707963267948966 rad pos: 12.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19588 @@ -90763,8 +89948,6 @@ entities: rot: 1.5707963267948966 rad pos: -11.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19603 @@ -90773,8 +89956,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,-26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19607 @@ -90783,8 +89964,6 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-36.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19630 @@ -90792,8 +89971,6 @@ entities: - type: Transform pos: -5.5,-34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19640 @@ -90802,8 +89979,6 @@ entities: rot: 3.141592653589793 rad pos: 13.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19674 @@ -90812,8 +89987,6 @@ entities: rot: 1.5707963267948966 rad pos: 45.5,-35.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19675 @@ -90822,8 +89995,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,-35.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19728 @@ -90832,8 +90003,6 @@ entities: rot: 1.5707963267948966 rad pos: 31.5,-27.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19729 @@ -90842,8 +90011,6 @@ entities: rot: -1.5707963267948966 rad pos: 49.5,-27.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19751 @@ -90852,8 +90019,6 @@ entities: rot: 3.141592653589793 rad pos: 36.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19761 @@ -90862,8 +90027,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-28.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19774 @@ -90872,8 +90035,6 @@ entities: rot: -1.5707963267948966 rad pos: 41.5,-24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19775 @@ -90882,8 +90043,6 @@ entities: rot: 3.141592653589793 rad pos: 37.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19795 @@ -90895,8 +90054,6 @@ entities: - type: DeviceNetwork deviceLists: - 8387 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19820 @@ -90905,8 +90062,6 @@ entities: rot: -1.5707963267948966 rad pos: 55.5,-33.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19840 @@ -90915,8 +90070,6 @@ entities: rot: -1.5707963267948966 rad pos: 59.5,-19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19885 @@ -90924,8 +90077,6 @@ entities: - type: Transform pos: 70.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19900 @@ -90933,8 +90084,6 @@ entities: - type: Transform pos: 74.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19907 @@ -90943,8 +90092,6 @@ entities: rot: 3.141592653589793 rad pos: 70.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19912 @@ -90952,8 +90099,6 @@ entities: - type: Transform pos: 64.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19923 @@ -90962,8 +90107,6 @@ entities: rot: 3.141592653589793 rad pos: 58.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19952 @@ -90972,8 +90115,6 @@ entities: rot: 1.5707963267948966 rad pos: 62.5,-24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19962 @@ -90982,8 +90123,6 @@ entities: rot: 3.141592653589793 rad pos: 68.5,-21.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19970 @@ -90992,8 +90131,6 @@ entities: rot: 1.5707963267948966 rad pos: 23.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19998 @@ -91002,8 +90139,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-36.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 20005 @@ -91012,8 +90147,6 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,-42.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 20037 @@ -91021,8 +90154,6 @@ entities: - type: Transform pos: 21.5,-42.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 20040 @@ -91031,8 +90162,6 @@ entities: rot: 1.5707963267948966 rad pos: 12.5,-46.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 20164 @@ -91041,8 +90170,6 @@ entities: rot: 3.141592653589793 rad pos: -56.5,-57.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 20167 @@ -91051,8 +90178,6 @@ entities: rot: 3.141592653589793 rad pos: -38.5,-57.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 20195 @@ -91061,8 +90186,6 @@ entities: rot: -1.5707963267948966 rad pos: -53.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 21101 @@ -91074,8 +90197,6 @@ entities: - type: DeviceNetwork deviceLists: - 21113 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 21241 @@ -91084,8 +90205,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-7.5 parent: 21128 - - type: AtmosDevice - joinedGrid: 21128 - proto: GasVentScrubber entities: - uid: 3102 @@ -91094,16 +90213,12 @@ entities: rot: -1.5707963267948966 rad pos: 34.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 9078 components: - type: Transform rot: 3.141592653589793 rad pos: 19.5,-53.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 10878 @@ -91111,8 +90226,6 @@ entities: - type: Transform pos: -30.5,-26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 13923 @@ -91120,8 +90233,6 @@ entities: - type: Transform pos: -37.5,-26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 17708 @@ -91129,8 +90240,6 @@ entities: - type: Transform pos: 21.5,-20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 17793 @@ -91139,8 +90248,6 @@ entities: rot: 1.5707963267948966 rad pos: 20.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 17810 @@ -91149,8 +90256,6 @@ entities: rot: 3.141592653589793 rad pos: 40.5,-19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 17867 @@ -91158,8 +90263,6 @@ entities: - type: Transform pos: 24.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18121 @@ -91168,8 +90271,6 @@ entities: rot: 1.5707963267948966 rad pos: -47.5,-38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18126 @@ -91178,8 +90279,6 @@ entities: rot: 1.5707963267948966 rad pos: -56.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18216 @@ -91188,8 +90287,6 @@ entities: rot: 3.141592653589793 rad pos: 23.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18219 @@ -91198,8 +90295,6 @@ entities: rot: 3.141592653589793 rad pos: 33.5,-19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18228 @@ -91208,8 +90303,6 @@ entities: rot: -1.5707963267948966 rad pos: 42.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18229 @@ -91217,8 +90310,6 @@ entities: - type: Transform pos: 41.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18233 @@ -91227,8 +90318,6 @@ entities: rot: 3.141592653589793 rad pos: 32.5,-0.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18234 @@ -91236,8 +90325,6 @@ entities: - type: Transform pos: 32.5,3.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18239 @@ -91246,8 +90333,6 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18242 @@ -91255,8 +90340,6 @@ entities: - type: Transform pos: 19.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18244 @@ -91264,8 +90347,6 @@ entities: - type: Transform pos: 10.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18247 @@ -91273,8 +90354,6 @@ entities: - type: Transform pos: -2.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18251 @@ -91282,8 +90361,6 @@ entities: - type: Transform pos: -11.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18253 @@ -91291,8 +90368,6 @@ entities: - type: Transform pos: -24.5,20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18268 @@ -91301,8 +90376,6 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,5.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18269 @@ -91311,8 +90384,6 @@ entities: rot: 1.5707963267948966 rad pos: -23.5,-1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18273 @@ -91320,8 +90391,6 @@ entities: - type: Transform pos: -31.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18283 @@ -91330,8 +90399,6 @@ entities: rot: 1.5707963267948966 rad pos: -23.5,-7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18287 @@ -91340,8 +90407,6 @@ entities: rot: 1.5707963267948966 rad pos: -24.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18291 @@ -91350,8 +90415,6 @@ entities: rot: 3.141592653589793 rad pos: -23.5,-30.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18293 @@ -91360,8 +90423,6 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-30.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18296 @@ -91370,8 +90431,6 @@ entities: rot: 3.141592653589793 rad pos: 0.5,-30.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18299 @@ -91380,8 +90439,6 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-32.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18303 @@ -91390,8 +90447,6 @@ entities: rot: 3.141592653589793 rad pos: 15.5,-32.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18306 @@ -91400,8 +90455,6 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18330 @@ -91409,8 +90462,6 @@ entities: - type: Transform pos: 45.5,8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18356 @@ -91419,8 +90470,6 @@ entities: rot: -1.5707963267948966 rad pos: 50.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18357 @@ -91429,8 +90478,6 @@ entities: rot: -1.5707963267948966 rad pos: 56.5,2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18373 @@ -91439,8 +90486,6 @@ entities: rot: 3.141592653589793 rad pos: 56.5,6.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18389 @@ -91448,8 +90493,6 @@ entities: - type: Transform pos: 59.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18417 @@ -91461,8 +90504,6 @@ entities: - type: DeviceNetwork deviceLists: - 8369 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18427 @@ -91471,8 +90512,6 @@ entities: rot: -1.5707963267948966 rad pos: 55.5,12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18440 @@ -91481,8 +90520,6 @@ entities: rot: -1.5707963267948966 rad pos: 49.5,-4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18474 @@ -91490,8 +90527,6 @@ entities: - type: Transform pos: 58.5,-5.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18497 @@ -91500,8 +90535,6 @@ entities: rot: 3.141592653589793 rad pos: 49.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18513 @@ -91510,8 +90543,6 @@ entities: rot: -1.5707963267948966 rad pos: 60.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18530 @@ -91520,8 +90551,6 @@ entities: rot: 1.5707963267948966 rad pos: 38.5,-1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18533 @@ -91529,8 +90558,6 @@ entities: - type: Transform pos: 26.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18553 @@ -91539,8 +90566,6 @@ entities: rot: -1.5707963267948966 rad pos: 28.5,18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18579 @@ -91549,8 +90574,6 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18590 @@ -91559,8 +90582,6 @@ entities: rot: -1.5707963267948966 rad pos: 31.5,15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18604 @@ -91569,8 +90590,6 @@ entities: rot: 3.141592653589793 rad pos: 30.5,7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18614 @@ -91579,8 +90598,6 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18628 @@ -91589,8 +90606,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18630 @@ -91598,8 +90613,6 @@ entities: - type: Transform pos: 13.5,25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18642 @@ -91608,8 +90621,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,23.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18679 @@ -91618,8 +90629,6 @@ entities: rot: 3.141592653589793 rad pos: -11.5,28.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18683 @@ -91627,8 +90636,6 @@ entities: - type: Transform pos: -6.5,33.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18705 @@ -91637,8 +90644,6 @@ entities: rot: 3.141592653589793 rad pos: 3.5,26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18725 @@ -91647,8 +90652,6 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18742 @@ -91656,8 +90659,6 @@ entities: - type: Transform pos: -0.5,45.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18755 @@ -91665,8 +90666,6 @@ entities: - type: Transform pos: -11.5,31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18764 @@ -91675,8 +90674,6 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18785 @@ -91685,8 +90682,6 @@ entities: rot: 3.141592653589793 rad pos: -14.5,24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18786 @@ -91695,8 +90690,6 @@ entities: rot: 3.141592653589793 rad pos: -10.5,24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18787 @@ -91705,8 +90698,6 @@ entities: rot: 3.141592653589793 rad pos: -6.5,24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18812 @@ -91714,8 +90705,6 @@ entities: - type: Transform pos: 3.5,31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18830 @@ -91724,8 +90713,6 @@ entities: rot: 1.5707963267948966 rad pos: -26.5,27.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18859 @@ -91733,8 +90720,6 @@ entities: - type: Transform pos: -25.5,34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18866 @@ -91743,8 +90728,6 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18870 @@ -91752,8 +90735,6 @@ entities: - type: Transform pos: -19.5,14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18891 @@ -91761,8 +90742,6 @@ entities: - type: Transform pos: -31.5,7.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18912 @@ -91771,8 +90750,6 @@ entities: rot: -1.5707963267948966 rad pos: -15.5,2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18941 @@ -91781,8 +90758,6 @@ entities: rot: -1.5707963267948966 rad pos: -16.5,5.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18944 @@ -91791,8 +90766,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18983 @@ -91800,8 +90773,6 @@ entities: - type: Transform pos: -29.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 18984 @@ -91813,8 +90784,6 @@ entities: - type: DeviceNetwork deviceLists: - 894 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19000 @@ -91823,8 +90792,6 @@ entities: rot: 3.141592653589793 rad pos: -36.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19001 @@ -91832,8 +90799,6 @@ entities: - type: Transform pos: -37.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19013 @@ -91842,8 +90807,6 @@ entities: rot: 3.141592653589793 rad pos: -33.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19030 @@ -91852,8 +90815,6 @@ entities: rot: 3.141592653589793 rad pos: -28.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19033 @@ -91862,8 +90823,9 @@ entities: rot: -1.5707963267948966 rad pos: -19.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 + - type: DeviceNetwork + deviceLists: + - 8405 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19056 @@ -91872,8 +90834,6 @@ entities: rot: -1.5707963267948966 rad pos: -18.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19070 @@ -91882,8 +90842,6 @@ entities: rot: -1.5707963267948966 rad pos: -18.5,-9.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19077 @@ -91892,8 +90850,6 @@ entities: rot: 1.5707963267948966 rad pos: -58.5,-28.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19109 @@ -91902,8 +90858,6 @@ entities: rot: -1.5707963267948966 rad pos: -47.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19136 @@ -91911,8 +90865,6 @@ entities: - type: Transform pos: -48.5,1.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19171 @@ -91921,8 +90873,6 @@ entities: rot: 1.5707963267948966 rad pos: -53.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19300 @@ -91931,8 +90881,6 @@ entities: rot: 1.5707963267948966 rad pos: -55.5,-47.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19303 @@ -91941,8 +90889,6 @@ entities: rot: -1.5707963267948966 rad pos: -39.5,-47.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 19307 @@ -91951,8 +90897,6 @@ entities: rot: -1.5707963267948966 rad pos: -43.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19308 @@ -91961,8 +90905,6 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19345 @@ -91971,8 +90913,6 @@ entities: rot: 3.141592653589793 rad pos: -50.5,-27.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19346 @@ -91981,8 +90921,6 @@ entities: rot: 1.5707963267948966 rad pos: -44.5,-27.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19369 @@ -91990,8 +90928,6 @@ entities: - type: Transform pos: -46.5,11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19409 @@ -92000,8 +90936,6 @@ entities: rot: 1.5707963267948966 rad pos: -37.5,12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19426 @@ -92010,8 +90944,6 @@ entities: rot: -1.5707963267948966 rad pos: -22.5,-37.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19470 @@ -92020,8 +90952,6 @@ entities: rot: -1.5707963267948966 rad pos: -14.5,-24.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19482 @@ -92029,8 +90959,6 @@ entities: - type: Transform pos: -6.5,-26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19498 @@ -92038,8 +90966,6 @@ entities: - type: Transform pos: 14.5,-21.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19507 @@ -92048,8 +90974,6 @@ entities: rot: 1.5707963267948966 rad pos: 7.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19520 @@ -92058,8 +90982,6 @@ entities: rot: 1.5707963267948966 rad pos: -6.5,-23.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19521 @@ -92067,8 +90989,6 @@ entities: - type: Transform pos: -0.5,-21.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19566 @@ -92077,8 +90997,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19570 @@ -92087,8 +91005,6 @@ entities: rot: 3.141592653589793 rad pos: -7.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19580 @@ -92096,8 +91012,6 @@ entities: - type: Transform pos: 12.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19587 @@ -92106,8 +91020,6 @@ entities: rot: 1.5707963267948966 rad pos: -11.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19602 @@ -92116,8 +91028,6 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-26.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19608 @@ -92126,8 +91036,6 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-36.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19622 @@ -92136,8 +91044,6 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,-34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19639 @@ -92146,8 +91052,6 @@ entities: rot: 3.141592653589793 rad pos: 15.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19672 @@ -92156,8 +91060,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,-34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19673 @@ -92166,8 +91068,6 @@ entities: rot: 1.5707963267948966 rad pos: 45.5,-34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19730 @@ -92176,8 +91076,6 @@ entities: rot: 1.5707963267948966 rad pos: 31.5,-28.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19731 @@ -92186,8 +91084,6 @@ entities: rot: -1.5707963267948966 rad pos: 49.5,-28.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19748 @@ -92195,8 +91091,6 @@ entities: - type: Transform pos: 37.5,-29.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19760 @@ -92205,8 +91099,6 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,-28.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19778 @@ -92215,8 +91107,6 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19789 @@ -92225,8 +91115,6 @@ entities: rot: 1.5707963267948966 rad pos: 41.5,-25.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19796 @@ -92238,8 +91126,6 @@ entities: - type: DeviceNetwork deviceLists: - 8387 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19828 @@ -92248,8 +91134,6 @@ entities: rot: -1.5707963267948966 rad pos: 55.5,-34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19841 @@ -92258,8 +91142,6 @@ entities: rot: -1.5707963267948966 rad pos: 59.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19884 @@ -92268,8 +91150,6 @@ entities: rot: 3.141592653589793 rad pos: 68.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19901 @@ -92278,8 +91158,6 @@ entities: rot: -1.5707963267948966 rad pos: 74.5,-14.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19908 @@ -92288,8 +91166,6 @@ entities: rot: -1.5707963267948966 rad pos: 68.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19911 @@ -92297,8 +91173,6 @@ entities: - type: Transform pos: 64.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19922 @@ -92307,8 +91181,6 @@ entities: rot: 1.5707963267948966 rad pos: 60.5,-13.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19953 @@ -92317,8 +91189,6 @@ entities: rot: 1.5707963267948966 rad pos: 62.5,-23.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19963 @@ -92327,8 +91197,6 @@ entities: rot: 3.141592653589793 rad pos: 69.5,-21.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19971 @@ -92337,8 +91205,6 @@ entities: rot: 3.141592653589793 rad pos: 23.5,-32.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 19999 @@ -92347,8 +91213,6 @@ entities: rot: -1.5707963267948966 rad pos: 21.5,-37.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 20006 @@ -92357,8 +91221,6 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,-45.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 20038 @@ -92366,8 +91228,6 @@ entities: - type: Transform pos: 16.5,-42.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 20041 @@ -92376,8 +91236,6 @@ entities: rot: 1.5707963267948966 rad pos: 12.5,-47.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 20109 @@ -92386,8 +91244,6 @@ entities: rot: 1.5707963267948966 rad pos: -13.5,-37.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - uid: 20168 @@ -92396,8 +91252,6 @@ entities: rot: 3.141592653589793 rad pos: -57.5,-57.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 20169 @@ -92406,8 +91260,6 @@ entities: rot: 3.141592653589793 rad pos: -37.5,-57.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#0335FCFF' - uid: 21102 @@ -92419,8 +91271,6 @@ entities: - type: DeviceNetwork deviceLists: - 21113 - - type: AtmosDevice - joinedGrid: 2 - type: AtmosPipeColor color: '#FF1212FF' - proto: GeneratorBasic @@ -95120,12 +93970,6 @@ entities: rot: -1.5707963267948966 rad pos: -25.5,39.5 parent: 2 - - uid: 15080 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,36.5 - parent: 2 - uid: 15153 components: - type: Transform @@ -95240,11 +94084,6 @@ entities: - type: Transform pos: 4.5,-49.5 parent: 2 - - uid: 15590 - components: - - type: Transform - pos: 9.5,-50.5 - parent: 2 - uid: 15594 components: - type: Transform @@ -96969,11 +95808,6 @@ entities: parent: 2 - proto: GrilleBroken entities: - - uid: 14396 - components: - - type: Transform - pos: 5.5,-50.5 - parent: 2 - uid: 15037 components: - type: Transform @@ -97240,11 +96074,6 @@ entities: - type: Transform pos: 23.5,26.5 parent: 2 - - uid: 14397 - components: - - type: Transform - pos: 6.5,-50.5 - parent: 2 - uid: 15257 components: - type: Transform @@ -97305,16 +96134,6 @@ entities: - type: Transform pos: 3.5,-42.5 parent: 2 - - uid: 15592 - components: - - type: Transform - pos: 7.5,-50.5 - parent: 2 - - uid: 15593 - components: - - type: Transform - pos: 8.5,-50.5 - parent: 2 - uid: 15595 components: - type: Transform @@ -98015,13 +96834,18 @@ entities: - type: Transform pos: 18.5,-50.5 parent: 2 - - uid: 8126 + - uid: 15593 components: - type: MetaData name: Secure board room airlock - type: Transform pos: 8.5,-43.5 parent: 2 + - uid: 15805 + components: + - type: Transform + pos: 8.5,-45.5 + parent: 2 - proto: HighSecDoor entities: - uid: 20388 @@ -98052,21 +96876,6 @@ entities: parent: 2 - proto: HospitalCurtainsOpen entities: - - uid: 645 - components: - - type: Transform - pos: 62.5,26.5 - parent: 2 - - uid: 1437 - components: - - type: Transform - pos: -13.5,7.5 - parent: 2 - - uid: 1438 - components: - - type: Transform - pos: -13.5,6.5 - parent: 2 - uid: 1439 components: - type: Transform @@ -98131,11 +96940,6 @@ entities: rot: -1.5707963267948966 rad pos: 47.5,-3.5 parent: 2 - - uid: 16144 - components: - - type: Transform - pos: 56.5,27.5 - parent: 2 - uid: 17267 components: - type: Transform @@ -98357,10 +97161,10 @@ entities: parent: 2 - proto: IDComputerCircuitboard entities: - - uid: 8168 + - uid: 21594 components: - type: Transform - pos: 9.516036,-45.945774 + pos: 9.506062,-47.954967 parent: 2 - proto: InflatableDoor entities: @@ -98855,13 +97659,6 @@ entities: - type: Transform pos: -55.5,-34.5 parent: 2 -- proto: KoboldCubeWrapped - entities: - - uid: 3253 - components: - - type: Transform - pos: 75.686676,-15.547764 - parent: 2 - proto: Lamp entities: - uid: 1473 @@ -99028,8 +97825,6 @@ entities: - type: Transform pos: 39.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: LiquidOxygenCanister entities: - uid: 5721 @@ -99037,8 +97832,6 @@ entities: - type: Transform pos: 38.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: LockerAtmosphericsFilled entities: - uid: 1479 @@ -99840,8 +98633,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 + - 1.8968438 + - 7.1357465 - 0 - 0 - 0 @@ -99858,9 +98651,9 @@ entities: showEnts: False occludes: True ents: - - 2094 - - 21052 + - 2143 - 21054 + - 21052 paper_label: !type:ContainerSlot showEnts: False occludes: True @@ -99956,11 +98749,6 @@ entities: - type: Transform pos: 66.5,-8.5 parent: 2 - - uid: 7358 - components: - - type: Transform - pos: 80.5,-17.5 - parent: 2 - uid: 8068 components: - type: Transform @@ -100296,10 +99084,10 @@ entities: parent: 2 - proto: MedkitAdvancedFilled entities: - - uid: 2312 + - uid: 2338 components: - type: Transform - pos: 50.526608,-3.4690142 + pos: 50.53992,-7.5531416 parent: 2 - proto: MedkitBruteFilled entities: @@ -100501,7 +99289,7 @@ entities: - uid: 15933 components: - type: MetaData - desc: Commemorating the lost warriors who contributed to bring the world as we know it today. + desc: Commemorating the lost warriors who contributed to bring peace to the world as we know it today name: Lost warriors memorial - type: Transform pos: -47.5,-7.5 @@ -100576,10 +99364,15 @@ entities: parent: 2 - proto: MonkeyCubeWrapped entities: - - uid: 6844 + - uid: 852 components: - type: Transform - pos: 75.5075,-15.6283 + pos: 75.39325,-15.57394 + parent: 2 + - uid: 3253 + components: + - type: Transform + pos: 75.588936,-15.561709 parent: 2 - proto: MopBucket entities: @@ -100795,162 +99588,116 @@ entities: - type: Transform pos: 18.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1512 components: - type: Transform pos: 28.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1513 components: - type: Transform pos: 23.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1514 components: - type: Transform pos: 23.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 6386 components: - type: Transform pos: -54.5,-45.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7613 components: - type: Transform pos: 22.5,-35.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8105 components: - type: Transform pos: -0.5,-34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14696 components: - type: Transform pos: -6.5,38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14700 components: - type: Transform pos: -39.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14703 components: - type: Transform pos: -44.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14706 components: - type: Transform pos: -62.5,-31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14709 components: - type: Transform pos: -36.5,-40.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14712 components: - type: Transform pos: -10.5,-33.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14716 components: - type: Transform pos: 5.5,-38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14720 components: - type: Transform pos: 45.5,-15.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14723 components: - type: Transform pos: 80.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14728 components: - type: Transform pos: 54.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14733 components: - type: Transform pos: 39.5,-8.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14857 components: - type: Transform pos: -9.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14858 components: - type: Transform pos: 2.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 15162 components: - type: Transform pos: -24.5,34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 15894 components: - type: Transform pos: -9.5,38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 20794 components: - type: Transform pos: 10.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: NitrousOxideCanister entities: - uid: 1515 @@ -100958,8 +99705,6 @@ entities: - type: Transform pos: 24.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: NoticeBoard entities: - uid: 10572 @@ -101047,183 +99792,131 @@ entities: - type: Transform pos: 16.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1517 components: - type: Transform pos: 27.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1518 components: - type: Transform pos: 22.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1519 components: - type: Transform pos: 22.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 1520 components: - type: Transform pos: 22.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 6387 components: - type: Transform pos: -40.5,-45.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7614 components: - type: Transform pos: 22.5,-38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 8104 components: - type: Transform pos: -1.5,-34.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14697 components: - type: Transform pos: -5.5,38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14701 components: - type: Transform pos: -38.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14702 components: - type: Transform pos: -45.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14707 components: - type: Transform pos: -61.5,-31.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14708 components: - type: Transform pos: -36.5,-39.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14713 components: - type: Transform pos: -11.5,-33.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14715 components: - type: Transform pos: 5.5,-39.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14721 components: - type: Transform pos: 45.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14725 components: - type: Transform pos: 81.5,-10.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14729 components: - type: Transform pos: 53.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14732 components: - type: Transform pos: 39.5,-9.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14859 components: - type: Transform pos: -8.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14860 components: - type: Transform pos: 3.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14863 components: - type: Transform pos: 15.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14869 components: - type: Transform pos: 11.5,16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 15161 components: - type: Transform pos: -24.5,35.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 15856 components: - type: Transform pos: 69.5,4.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 15895 components: - type: Transform pos: -8.5,38.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: Paper entities: - uid: 1521 @@ -101399,6 +100092,16 @@ entities: [italic]Best wishes, [bold]NanoTrasen Technical Build Team.[/bold][/italic] + - uid: 21554 + components: + - type: Transform + pos: 27.60654,-44.384544 + parent: 2 + - uid: 21555 + components: + - type: Transform + pos: 27.520927,-44.445698 + parent: 2 - proto: PaperBin10 entities: - uid: 1527 @@ -101777,15 +100480,11 @@ entities: - type: Transform pos: 23.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 16924 components: - type: Transform pos: 24.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: PlasmaReinforcedWindowDirectional entities: - uid: 5901 @@ -104132,12 +102831,6 @@ entities: rot: 1.5707963267948966 rad pos: 8.5,-38.5 parent: 2 - - uid: 8160 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-46.5 - parent: 2 - uid: 8198 components: - type: Transform @@ -104217,6 +102910,12 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,38.5 parent: 2 + - uid: 17538 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-48.5 + parent: 2 - uid: 20609 components: - type: Transform @@ -104331,11 +103030,6 @@ entities: rot: -1.5707963267948966 rad pos: 10.5,-3.5 parent: 2 - - uid: 3293 - components: - - type: Transform - pos: -12.5,-36.5 - parent: 2 - proto: PoweredSmallLight entities: - uid: 3272 @@ -104343,6 +103037,11 @@ entities: - type: Transform pos: -32.5,-8.5 parent: 2 + - uid: 8164 + components: + - type: Transform + pos: -12.5,-36.5 + parent: 2 - uid: 8752 components: - type: Transform @@ -104994,6 +103693,11 @@ entities: - type: Transform pos: 50.5,-7.5 parent: 2 + - uid: 21572 + components: + - type: Transform + pos: 34.5,-1.5 + parent: 2 - proto: RadiationCollectorFullTank entities: - uid: 1731 @@ -106145,6 +104849,12 @@ entities: parent: 2 - proto: RailingCornerSmall entities: + - uid: 850 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-9.5 + parent: 2 - uid: 1873 components: - type: Transform @@ -106306,6 +105016,18 @@ entities: rot: -1.5707963267948966 rad pos: 57.5,-21.5 parent: 2 + - uid: 21557 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-9.5 + parent: 2 + - uid: 21560 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-9.5 + parent: 2 - proto: RandomArcade entities: - uid: 3707 @@ -106358,6 +105080,11 @@ entities: - type: Transform pos: 80.5,-13.5 parent: 2 + - uid: 8160 + components: + - type: Transform + pos: 80.5,-17.5 + parent: 2 - proto: RandomBoard entities: - uid: 2902 @@ -106440,11 +105167,6 @@ entities: parent: 2 - proto: RandomFoodMeal entities: - - uid: 1899 - components: - - type: Transform - pos: -15.5,-3.5 - parent: 2 - uid: 1900 components: - type: Transform @@ -106480,6 +105202,11 @@ entities: - type: Transform pos: -53.5,-62.5 parent: 2 + - uid: 8167 + components: + - type: Transform + pos: -15.5,-3.5 + parent: 2 - proto: RandomFoodSingle entities: - uid: 1902 @@ -108454,11 +107181,6 @@ entities: - type: Transform pos: -31.5,-33.5 parent: 2 - - uid: 1930 - components: - - type: Transform - pos: -18.5,-38.5 - parent: 2 - uid: 3630 components: - type: Transform @@ -108541,11 +107263,6 @@ entities: - type: Transform pos: -30.5,-33.5 parent: 2 - - uid: 1936 - components: - - type: Transform - pos: -18.5,-37.5 - parent: 2 - uid: 3095 components: - type: Transform @@ -110637,12 +109354,6 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,39.5 parent: 2 - - uid: 15046 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,36.5 - parent: 2 - uid: 15053 components: - type: Transform @@ -111065,10 +109776,10 @@ entities: parent: 2 - proto: ResearchAndDevelopmentServerMachineCircuitboard entities: - - uid: 8171 + - uid: 21592 components: - type: Transform - pos: 7.522449,-45.811237 + pos: 7.506061,-47.899414 parent: 2 - proto: RevolverCapGun entities: @@ -111421,6 +110132,13 @@ entities: parent: 21128 - type: Stack count: 15 + - uid: 21570 + components: + - type: Transform + pos: 34.50172,-1.4871633 + parent: 2 + - type: Stack + count: 15 - proto: SheetPlasteel entities: - uid: 7622 @@ -113105,6 +111823,18 @@ entities: - type: Transform pos: 66.5,-11.5 parent: 2 +- proto: SignArcade + entities: + - uid: 2145 + components: + - type: Transform + pos: -44.5,8.5 + parent: 2 + - uid: 3123 + components: + - type: Transform + pos: -50.5,8.5 + parent: 2 - proto: SignArmory entities: - uid: 4749 @@ -113946,6 +112676,28 @@ entities: - type: Transform pos: -2.5,-15.5 parent: 2 +- proto: SignReception + entities: + - uid: 854 + components: + - type: Transform + pos: 24.5,15.5 + parent: 2 + - uid: 21597 + components: + - type: Transform + pos: 57.5,-15.5 + parent: 2 + - uid: 21598 + components: + - type: Transform + pos: 44.5,-22.5 + parent: 2 + - uid: 21599 + components: + - type: Transform + pos: 0.5,25.5 + parent: 2 - proto: SignRedOne entities: - uid: 20931 @@ -113976,6 +112728,13 @@ entities: - type: Transform pos: 60.5,-21.5 parent: 2 +- proto: SignSalvage + entities: + - uid: 855 + components: + - type: Transform + pos: 32.5,19.5 + parent: 2 - proto: SignScience entities: - uid: 7157 @@ -115503,23 +114262,20 @@ entities: rot: 3.141592653589793 rad pos: -15.5,14.5 parent: 2 +- proto: SprayBottle + entities: + - uid: 8194 + components: + - type: Transform + pos: -13.281918,-24.159872 + parent: 2 + - uid: 8430 + components: + - type: Transform + pos: -13.465376,-24.172104 + parent: 2 - proto: SprayBottleWater entities: - - uid: 2137 - components: - - type: Transform - pos: -13.53776,-24.0789 - parent: 2 - - uid: 2138 - components: - - type: Transform - pos: -13.366531,-24.0789 - parent: 2 - - uid: 2139 - components: - - type: Transform - pos: -13.231995,-24.0789 - parent: 2 - uid: 6926 components: - type: Transform @@ -115544,36 +114300,6 @@ entities: parent: 2 - proto: Stairs entities: - - uid: 2142 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,3.5 - parent: 2 - - uid: 2143 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,2.5 - parent: 2 - - uid: 2144 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,-0.5 - parent: 2 - - uid: 2145 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,0.5 - parent: 2 - - uid: 2146 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,1.5 - parent: 2 - uid: 2682 components: - type: Transform @@ -115741,6 +114467,50 @@ entities: rot: -1.5707963267948966 rad pos: -37.5,4.5 parent: 2 +- proto: StairWood + entities: + - uid: 8154 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-20.5 + parent: 2 + - uid: 8963 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-0.5 + parent: 2 + - uid: 13333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,0.5 + parent: 2 + - uid: 14396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,3.5 + parent: 2 + - uid: 14397 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,2.5 + parent: 2 + - uid: 15046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,1.5 + parent: 2 + - uid: 21558 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-20.5 + parent: 2 - proto: StasisBed entities: - uid: 6583 @@ -115903,92 +114673,66 @@ entities: - type: Transform pos: -1.5,-19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 2158 components: - type: Transform pos: -0.5,-19.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 2159 components: - type: Transform pos: -0.5,-20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 2160 components: - type: Transform pos: -1.5,-20.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 2161 components: - type: Transform pos: 26.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 2162 components: - type: Transform pos: 25.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 2163 components: - type: Transform pos: 25.5,-16.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 2164 components: - type: Transform pos: 25.5,-18.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7394 components: - type: Transform pos: 73.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7395 components: - type: Transform pos: 73.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7397 components: - type: Transform pos: 74.5,-12.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 7399 components: - type: Transform pos: 74.5,-11.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 14854 components: - type: Transform pos: -16.5,17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: Stunbaton entities: - uid: 4991 @@ -116298,17 +115042,6 @@ entities: - SurveillanceCameraCommand nameSet: True id: Gravity - - uid: 8963 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-44.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraCommand - nameSet: True - id: Secure board room - uid: 8964 components: - type: Transform @@ -116516,6 +115249,17 @@ entities: - SurveillanceCameraCommand nameSet: True id: Vault + - uid: 15592 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-46.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Secure board room - proto: SurveillanceCameraEngineering entities: - uid: 6780 @@ -119418,11 +118162,6 @@ entities: parent: 2 - proto: TableFancyRed entities: - - uid: 3123 - components: - - type: Transform - pos: -15.5,-3.5 - parent: 2 - uid: 3124 components: - type: Transform @@ -119594,6 +118333,11 @@ entities: rot: 3.141592653589793 rad pos: -36.5,12.5 parent: 2 + - uid: 2312 + components: + - type: Transform + pos: 27.5,-43.5 + parent: 2 - uid: 4020 components: - type: Transform @@ -120222,29 +118966,11 @@ entities: rot: -1.5707963267948966 rad pos: 12.5,-40.5 parent: 2 - - uid: 8161 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,-45.5 - parent: 2 - - uid: 8162 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 9.5,-46.5 - parent: 2 - uid: 8163 components: - type: Transform rot: 3.141592653589793 rad - pos: 7.5,-46.5 - parent: 2 - - uid: 8164 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 7.5,-45.5 + pos: 9.5,-47.5 parent: 2 - uid: 8554 components: @@ -120267,12 +118993,24 @@ entities: - type: Transform pos: -28.5,38.5 parent: 2 + - uid: 17537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-48.5 + parent: 2 - uid: 17596 components: - type: Transform rot: 1.5707963267948966 rad pos: -20.5,13.5 parent: 2 + - uid: 20250 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-48.5 + parent: 2 - uid: 20606 components: - type: Transform @@ -120322,6 +119060,17 @@ entities: - type: Transform pos: 9.5,1.5 parent: 21128 + - uid: 21550 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-47.5 + parent: 2 + - uid: 21552 + components: + - type: Transform + pos: 27.5,-44.5 + parent: 2 - proto: TableReinforcedGlass entities: - uid: 6925 @@ -120892,6 +119641,13 @@ entities: - type: Transform pos: 9.5,39.5 parent: 2 +- proto: TargetDarts + entities: + - uid: 21576 + components: + - type: Transform + pos: -36.5,27.5 + parent: 2 - proto: TargetSyndicate entities: - uid: 21066 @@ -121626,6 +120382,11 @@ entities: - type: Transform pos: 41.5,-6.5 parent: 2 + - uid: 16144 + components: + - type: Transform + pos: 13.5,-33.5 + parent: 2 - proto: VendingMachineClothing entities: - uid: 1593 @@ -121633,11 +120394,6 @@ entities: - type: Transform pos: 38.5,0.5 parent: 2 - - uid: 2338 - components: - - type: Transform - pos: 13.5,-33.5 - parent: 2 - uid: 2339 components: - type: Transform @@ -121990,12 +120746,24 @@ entities: parent: 2 - proto: WallReinforced entities: + - uid: 48 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-49.5 + parent: 2 - uid: 103 components: - type: Transform rot: -1.5707963267948966 rad pos: 54.5,-43.5 parent: 2 + - uid: 851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-50.5 + parent: 2 - uid: 1084 components: - type: Transform @@ -126335,6 +125103,12 @@ entities: rot: -1.5707963267948966 rad pos: 30.5,-40.5 parent: 2 + - uid: 7633 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-49.5 + parent: 2 - uid: 7634 components: - type: Transform @@ -126913,26 +125687,6 @@ entities: - type: Transform pos: 5.5,-47.5 parent: 2 - - uid: 8148 - components: - - type: Transform - pos: 6.5,-48.5 - parent: 2 - - uid: 8150 - components: - - type: Transform - pos: 8.5,-48.5 - parent: 2 - - uid: 8153 - components: - - type: Transform - pos: 7.5,-47.5 - parent: 2 - - uid: 8154 - components: - - type: Transform - pos: 9.5,-47.5 - parent: 2 - uid: 8155 components: - type: Transform @@ -127270,6 +126024,11 @@ entities: - type: Transform pos: 66.5,22.5 parent: 2 + - uid: 15590 + components: + - type: Transform + pos: 7.5,-45.5 + parent: 2 - uid: 15847 components: - type: Transform @@ -127829,6 +126588,24 @@ entities: - type: Transform pos: -21.5,-48.5 parent: 2 + - uid: 21587 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-49.5 + parent: 2 + - uid: 21588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-50.5 + parent: 2 + - uid: 21589 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-49.5 + parent: 2 - proto: WallReinforcedRust entities: - uid: 2330 @@ -131725,6 +130502,11 @@ entities: rot: 1.5707963267948966 rad pos: 62.5,17.5 parent: 2 + - uid: 6844 + components: + - type: Transform + pos: 9.5,-45.5 + parent: 2 - uid: 6846 components: - type: Transform @@ -132331,6 +131113,12 @@ entities: rot: 1.5707963267948966 rad pos: 77.5,-4.5 parent: 2 + - uid: 7416 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,-50.5 + parent: 2 - uid: 7445 components: - type: Transform @@ -132535,6 +131323,12 @@ entities: rot: 1.5707963267948966 rad pos: 31.5,-42.5 parent: 2 + - uid: 7632 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-50.5 + parent: 2 - uid: 7636 components: - type: Transform @@ -132673,6 +131467,12 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,-36.5 parent: 2 + - uid: 7746 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-50.5 + parent: 2 - uid: 7756 components: - type: Transform @@ -133183,6 +131983,12 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-46.5 parent: 2 + - uid: 8126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-49.5 + parent: 2 - uid: 8127 components: - type: Transform @@ -133195,24 +132001,6 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-48.5 parent: 2 - - uid: 8130 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 7.5,-48.5 - parent: 2 - - uid: 8133 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 9.5,-48.5 - parent: 2 - - uid: 8134 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 8.5,-47.5 - parent: 2 - uid: 8142 components: - type: Transform @@ -134287,6 +133075,12 @@ entities: rot: 1.5707963267948966 rad pos: 81.5,-36.5 parent: 2 + - uid: 17434 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-48.5 + parent: 2 - uid: 19807 components: - type: Transform @@ -139964,6 +138758,11 @@ entities: - type: Transform pos: 67.5,0.5 parent: 2 + - uid: 21571 + components: + - type: Transform + pos: 34.5,-2.5 + parent: 2 - proto: WaterTankHighCapacity entities: - uid: 3474 @@ -139983,15 +138782,11 @@ entities: - type: Transform pos: 22.5,-2.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - uid: 3478 components: - type: Transform pos: 24.5,-17.5 parent: 2 - - type: AtmosDevice - joinedGrid: 2 - proto: WeaponCapacitorRecharger entities: - uid: 4580 @@ -140077,6 +138872,11 @@ entities: parent: 2 - proto: WeaponTurretSyndicateBroken entities: + - uid: 853 + components: + - type: Transform + pos: 9.5,-44.5 + parent: 2 - uid: 8055 components: - type: Transform @@ -140097,6 +138897,11 @@ entities: - type: Transform pos: 22.5,-59.5 parent: 2 + - uid: 8171 + components: + - type: Transform + pos: 7.5,-44.5 + parent: 2 - uid: 20391 components: - type: Transform @@ -140148,6 +138953,11 @@ entities: - type: Transform pos: 19.5,-36.5 parent: 2 + - uid: 8161 + components: + - type: Transform + pos: 33.5,-2.5 + parent: 2 - uid: 12468 components: - type: Transform @@ -140924,6 +139734,11 @@ entities: parent: 2 - proto: WindowReinforcedDirectional entities: + - uid: 2144 + components: + - type: Transform + pos: 27.5,-44.5 + parent: 2 - uid: 2280 components: - type: Transform @@ -141503,6 +140318,37 @@ entities: - type: Transform pos: 40.5,-20.5 parent: 2 + - uid: 21553 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-43.5 + parent: 2 + - uid: 21561 + components: + - type: Transform + pos: -1.5,-9.5 + parent: 2 + - uid: 21562 + components: + - type: Transform + pos: -0.5,-9.5 + parent: 2 + - uid: 21563 + components: + - type: Transform + pos: 0.5,-9.5 + parent: 2 + - uid: 21564 + components: + - type: Transform + pos: 1.5,-9.5 + parent: 2 + - uid: 21565 + components: + - type: Transform + pos: 2.5,-9.5 + parent: 2 - proto: WoodDoor entities: - uid: 3557 @@ -141540,6 +140386,104 @@ entities: - type: Transform pos: -21.5,-40.5 parent: 2 +- proto: WoodenBench + entities: + - uid: 856 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-35.5 + parent: 2 + - uid: 857 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-34.5 + parent: 2 + - uid: 858 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-38.5 + parent: 2 + - uid: 859 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-34.5 + parent: 2 + - uid: 860 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-35.5 + parent: 2 + - uid: 861 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-37.5 + parent: 2 + - uid: 862 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-37.5 + parent: 2 + - uid: 863 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-38.5 + parent: 2 + - uid: 1437 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-38.5 + parent: 2 + - uid: 1438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-37.5 + parent: 2 + - uid: 1930 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-37.5 + parent: 2 + - uid: 1936 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-38.5 + parent: 2 + - uid: 2094 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-34.5 + parent: 2 + - uid: 2137 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-34.5 + parent: 2 + - uid: 2138 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-35.5 + parent: 2 + - uid: 2139 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-35.5 + parent: 2 - proto: WoodenSupport entities: - uid: 16157 From 5ecff8a04b5e472ae39100d1a6ecfeab1e03d6ac Mon Sep 17 00:00:00 2001 From: deepdarkdepths <155149356+deepdarkdepths@users.noreply.github.com> Date: Sun, 7 Apr 2024 23:02:46 -0400 Subject: [PATCH 176/206] Sanitizes "tbf" into "to be fair" (#26811) add --- Resources/Locale/en-US/speech/speech-chatsan.ftl | 3 +++ Resources/Prototypes/Accents/word_replacements.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/Resources/Locale/en-US/speech/speech-chatsan.ftl b/Resources/Locale/en-US/speech/speech-chatsan.ftl index 6ce575e648..25e6c6f1ea 100644 --- a/Resources/Locale/en-US/speech/speech-chatsan.ftl +++ b/Resources/Locale/en-US/speech/speech-chatsan.ftl @@ -117,3 +117,6 @@ chatsan-replacement-42 = of course chatsan-word-43 = ig chatsan-replacement-43 = i guess + +chatsan-word-44 = tbf +chatsan-replacement-44 = to be fair diff --git a/Resources/Prototypes/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index 3fadc69010..fa9d39add2 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -424,3 +424,4 @@ chatsan-word-41: chatsan-replacement-41 chatsan-word-42: chatsan-replacement-42 chatsan-word-43: chatsan-replacement-43 + chatsan-word-44: chatsan-replacement-44 From c95bbce4a6722377f2a475ffad6853baa3d65619 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Sun, 7 Apr 2024 23:07:23 -0400 Subject: [PATCH 177/206] prevent placing dead bodies in cryostorage (#26810) --- Content.Shared/Bed/Cryostorage/SharedCryostorageSystem.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Content.Shared/Bed/Cryostorage/SharedCryostorageSystem.cs b/Content.Shared/Bed/Cryostorage/SharedCryostorageSystem.cs index f14dc21c48..c3fa21e293 100644 --- a/Content.Shared/Bed/Cryostorage/SharedCryostorageSystem.cs +++ b/Content.Shared/Bed/Cryostorage/SharedCryostorageSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.DragDrop; using Content.Shared.GameTicking; using Content.Shared.Mind; using Content.Shared.Mind.Components; +using Content.Shared.Mobs.Systems; using Robust.Shared.Configuration; using Robust.Shared.Containers; using Robust.Shared.Map; @@ -22,6 +23,7 @@ public abstract class SharedCryostorageSystem : EntitySystem [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] protected readonly SharedMindSystem Mind = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; protected EntityUid? PausedMap { get; private set; } @@ -81,6 +83,12 @@ public abstract class SharedCryostorageSystem : EntitySystem if (args.Container.ID != comp.ContainerId) return; + if (_mobState.IsIncapacitated(args.EntityUid)) + { + args.Cancel(); + return; + } + if (!TryComp(args.EntityUid, out var mindContainer)) { args.Cancel(); From 356c2799cf0064c7345aa0ca7de8126dc4e703f1 Mon Sep 17 00:00:00 2001 From: BriBrooo <45323530+Bribrooo@users.noreply.github.com> Date: Mon, 8 Apr 2024 05:08:33 +0200 Subject: [PATCH 178/206] fixed cigarette sprites (#26801) --- .../cigarette.rsi/lit-inhand-left.png | Bin 648 -> 530 bytes .../cigarette.rsi/lit-inhand-right.png | Bin 539 -> 496 bytes .../cigarette.rsi/unlit-inhand-left.png | Bin 239 -> 178 bytes .../cigarette.rsi/unlit-inhand-right.png | Bin 239 -> 179 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/lit-inhand-left.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/lit-inhand-left.png index 294f3267803d02be7d518d1ee0e67e1600241a16..dd6bc0b0f2f147351cf4f8a4ba63adc2b0c74929 100644 GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcaljKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4a+@U978JN-rhZ!+w35~8t^15##5@mIIp9s zW+7+zM!}OeEM2;k7JZobd@uL4xMLgSJ1^ho1R4edKQ6v4lm7bIz^}AbtnY`=r}H^h zflMAf9|Tn!wwRnMnx~}i&?|pBy5gUyP5rrZ^54Br{{}e}75p&mEj_{^&+uWcKFcDO z2^NYfUJO4cuS!4v{c*mHe1h%u2Mec_U9I~!XD&agMj-D(AKNbGm%AjLPPC^8vbNz2ePMa7X{@xqF-C?dq`T8c;)-9`N$?gCD z%sW;%ucc9gQN@p=Q^+AI`ds|fA3&|&K0kl+=c`OhJJ1!s{xPDP(BNirzEI*22gpmI kyXM>8JrDD%%xROo%)9IMCCyL@mFVdQ&MBb@0A3QeYXATM literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zf+;VDk5LaSW-L^Y-q++(Ql`4hKtD zEfkXS=vt^~#pN2%THL5SO^I9gL)y2lKZZX%?cVYMbs~cw9k diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/lit-inhand-right.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/lit-inhand-right.png index 3a4e9e8f9d2857077e34aa0fedfd83c49b154e06..7f00423dc37521ebbfdf067e821300e85d573173 100644 GIT binary patch literal 496 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcaljKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4XvIojv*CsZ|`pGJ>($38ql4!PCjdioceW^ zP#py}qo&KAzptOE?!3q*x94Ak%YA8}IWQn|XW#q9cH0V9DZ7;Z`S`KXKtQ$O2&ZBo zlSlS```Z;Om#(~Zet*jI{?|K~ecw|D(*>s&DDsvtWX?On5P#zETn$DQw;vrs2b#UU zZ(jcU=l|9FepSS{>-vU1KD+<wzeU7j(+mBSflE-w7?Bg8$T>saBvmPVkP{WyRcqpH7b*nj0x$lK@fn?4`^ z8gsci&K|A>#<V*2+*+ZMPTw-yU#o$4v;J2qQ&f3?_Z#zAI z{d~KxKR+zruwQce{Qml9-cWWo{_3&!^R`!izniw%@=W|D`_1?HKU`e& zKxW(Rw{KSdW12{z6Hv70e*5?$|9pG>uaCdy&yTOSkpGt_GjHFl`fWd-*Zo^v_~Y9L k&HM9-2wrST42~P{oM)RB+%WZDs5?l3r>mdKI;Vst02o!ewEzGB diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/unlit-inhand-left.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/unlit-inhand-left.png index e8bfce8645c29ab39404812c1f622131a887aeed..2cb9f2bbfc2e08542278c15958f52b90d037ca0a 100644 GIT binary patch delta 162 zcmaFQxQTIsL_G%^0|UdV%))y>im^Dz-HBn{IhmJ04okYDuOkD)#(wTUiL5|AXMsm# zF#`kNVGw3Kp1&dmDCq9#;uum9_x9F7P6h=Y<^z0JWbf2#xvpT2sQIy@n$5^j2&jmG z!N%b9i8-RNH}@`90`nOd9x$6e-)_&iUAl&Yf#F40#C#JqOQ+|I-$Bxzu6{1-oD!M< D6w)x{ delta 223 zcmdnQ_?~fsL_HHT0|Uc#_L;swiZj3`#PvVJe;}~e(dkJ{cm)(>ED7=pW^j0RBMr#O zt_q1LaY-#sF3Kz@$;{7VV5pcA99B?N`u$6A!N;#pw7hk-&Yd|Qydl)!qVa=AI_G^f zPcjts^zN`Q4l=%M?4>a0(WE1jLKK2EEsbsMb$vS{x{XyguaH>M-EF*9!_Zvxh}n~% zu!66}jI+5J!s?`IGPk^l1llX>>Eak-(VLtg!CJz!hL`zmQ=q{Q#^3`EyBky(7`B)( V+-R0!eF;>^;OXk;vd$@?2>?|0Q^o)Q diff --git a/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/unlit-inhand-right.png b/Resources/Textures/Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi/unlit-inhand-right.png index 4635cb206cd102822ba4f5eee9b1a46a31ea776c..a0645041abfd6184a98d2ac185185830ee20270c 100644 GIT binary patch delta 163 zcmaFQxS4T+L_G%^0|UdV%))y>im^Dz-HBn{IhmJ04okYDuOkD)#(wTUiL5|AXMsm# zF#`kNVGw3Kp1&dmDCpto;uum9_x9FKUIqgWW(T%Yd^hV?*$7E0h&t`kj(vEG1*nLD z;kZn)t>o58%h%slRt5_&Fgyr8_kQW`YMJlyKnJ{X$%%_rvt+%z+yx}<>FVdQ&MBb@ E04-E8Z~y=R delta 223 zcmdnY_?~fsL_HHT0|Uc#_L;swiZj3`#Pz^|1NJ&P|NsA=7Eyc`D9Bh6eukTAW;zSx}OhpU1#ZF(){zps4iwm*9erU!Q1s>uQ}lb3S-OsKG_!2aj~l z`)HnIDC+6mVPPC(eA(DbVa}sTM<#_R1Z!Fv+uG~;c1Cm?t8QK)v821(c&&z^x#$tI zCqZEaUyB)Mb2Eh1N!4U-c@YV;SJubP0l+XkKQ~FYH From a17875498056ff746abb9ec1d4a40017c99ad7cc Mon Sep 17 00:00:00 2001 From: Crotalus Date: Mon, 8 Apr 2024 05:16:11 +0200 Subject: [PATCH 179/206] Show missing materials in lathes tooltip (#26795) * Lathes: Show missing materials amount in tooltip * Use AppendLine and remove the last newline at the end --- Content.Client/Lathe/UI/LatheMenu.xaml.cs | 75 +++++++++++-------- Content.Client/Lathe/UI/RecipeControl.xaml.cs | 9 +-- .../Locale/en-US/lathe/ui/lathe-menu.ftl | 8 +- 3 files changed, 55 insertions(+), 37 deletions(-) diff --git a/Content.Client/Lathe/UI/LatheMenu.xaml.cs b/Content.Client/Lathe/UI/LatheMenu.xaml.cs index 93d80dbf9c..21897681c1 100644 --- a/Content.Client/Lathe/UI/LatheMenu.xaml.cs +++ b/Content.Client/Lathe/UI/LatheMenu.xaml.cs @@ -104,41 +104,12 @@ public sealed partial class LatheMenu : DefaultWindow RecipeList.Children.Clear(); foreach (var prototype in sortedRecipesToShow) { - StringBuilder sb = new(); - var first = true; - foreach (var (id, amount) in prototype.RequiredMaterials) - { - if (!_prototypeManager.TryIndex(id, out var proto)) - continue; - - if (first) - first = false; - else - sb.Append('\n'); - - var adjustedAmount = SharedLatheSystem.AdjustMaterial(amount, prototype.ApplyMaterialDiscount, component.MaterialUseMultiplier); - var sheetVolume = _materialStorage.GetSheetVolume(proto); - - var unit = Loc.GetString(proto.Unit); - // rounded in locale not here - var sheets = adjustedAmount / (float) sheetVolume; - var amountText = Loc.GetString("lathe-menu-material-amount", ("amount", sheets), ("unit", unit)); - var name = Loc.GetString(proto.Name); - sb.Append(Loc.GetString("lathe-menu-tooltip-display", ("material", name), ("amount", amountText))); - } - - if (!string.IsNullOrWhiteSpace(prototype.Description)) - { - sb.Append('\n'); - sb.Append(Loc.GetString("lathe-menu-description-display", ("description", prototype.Description))); - } - var icon = prototype.Icon == null ? _spriteSystem.GetPrototypeIcon(prototype.Result).Default : _spriteSystem.Frame0(prototype.Icon); var canProduce = _lathe.CanProduce(_owner, prototype, quantity); - var control = new RecipeControl(prototype, sb.ToString(), canProduce, icon); + var control = new RecipeControl(prototype, () => GenerateTooltipText(prototype), canProduce, icon); control.OnButtonPressed += s => { if (!int.TryParse(AmountLineEdit.Text, out var amount) || amount <= 0) @@ -149,6 +120,50 @@ public sealed partial class LatheMenu : DefaultWindow } } + private string GenerateTooltipText(LatheRecipePrototype prototype) + { + StringBuilder sb = new(); + + foreach (var (id, amount) in prototype.RequiredMaterials) + { + if (!_prototypeManager.TryIndex(id, out var proto)) + continue; + + var adjustedAmount = SharedLatheSystem.AdjustMaterial(amount, prototype.ApplyMaterialDiscount, _entityManager.GetComponent(_owner).MaterialUseMultiplier); + var sheetVolume = _materialStorage.GetSheetVolume(proto); + + var unit = Loc.GetString(proto.Unit); + var sheets = adjustedAmount / (float) sheetVolume; + + var availableAmount = _materialStorage.GetMaterialAmount(_owner, id); + var missingAmount = Math.Max(0, adjustedAmount - availableAmount); + var missingSheets = missingAmount / (float) sheetVolume; + + var name = Loc.GetString(proto.Name); + + string amountText; + if (missingSheets > 0) + { + amountText = Loc.GetString("lathe-menu-material-amount-missing", ("amount", sheets), ("missingAmount", missingSheets), ("unit", unit), ("material", name)); + } + else + { + amountText = Loc.GetString("lathe-menu-material-amount", ("amount", sheets), ("unit", unit), ("material", name)); + } + + sb.AppendLine(amountText); + } + + if (!string.IsNullOrWhiteSpace(prototype.Description)) + sb.AppendLine(Loc.GetString("lathe-menu-description-display", ("description", prototype.Description))); + + // Remove last newline + if (sb.Length > 0) + sb.Remove(sb.Length - 1, 1); + + return sb.ToString(); + } + public void UpdateCategories() { var currentCategories = new List>(); diff --git a/Content.Client/Lathe/UI/RecipeControl.xaml.cs b/Content.Client/Lathe/UI/RecipeControl.xaml.cs index 451a988765..bf85ff7d93 100644 --- a/Content.Client/Lathe/UI/RecipeControl.xaml.cs +++ b/Content.Client/Lathe/UI/RecipeControl.xaml.cs @@ -11,17 +11,16 @@ namespace Content.Client.Lathe.UI; public sealed partial class RecipeControl : Control { public Action? OnButtonPressed; + public Func TooltipTextSupplier; - public string TooltipText; - - public RecipeControl(LatheRecipePrototype recipe, string tooltip, bool canProduce, Texture? texture = null) + public RecipeControl(LatheRecipePrototype recipe, Func tooltipTextSupplier, bool canProduce, Texture? texture = null) { RobustXamlLoader.Load(this); RecipeName.Text = recipe.Name; RecipeTexture.Texture = texture; Button.Disabled = !canProduce; - TooltipText = tooltip; + TooltipTextSupplier = tooltipTextSupplier; Button.TooltipSupplier = SupplyTooltip; Button.OnPressed += (_) => @@ -32,6 +31,6 @@ public sealed partial class RecipeControl : Control private Control? SupplyTooltip(Control sender) { - return new RecipeTooltip(TooltipText); + return new RecipeTooltip(TooltipTextSupplier()); } } diff --git a/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl b/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl index 92f313086c..72b836e69c 100644 --- a/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl +++ b/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl @@ -10,8 +10,12 @@ lathe-menu-material-display = {$material} ({$amount}) lathe-menu-tooltip-display = {$amount} of {$material} lathe-menu-description-display = [italic]{$description}[/italic] lathe-menu-material-amount = { $amount -> - [1] {NATURALFIXED($amount, 2)} {$unit} - *[other] {NATURALFIXED($amount, 2)} {MAKEPLURAL($unit)} + [1] {NATURALFIXED($amount, 2)} {$unit} of {$material} + *[other] {NATURALFIXED($amount, 2)} {MAKEPLURAL($unit)} of {$material} +} +lathe-menu-material-amount-missing = { $amount -> + [1] {NATURALFIXED($amount, 2)} {$unit} of {$material} ([color=red]{NATURALFIXED($missingAmount, 2)} {$unit} missing[/color]) + *[other] {NATURALFIXED($amount, 2)} {MAKEPLURAL($unit)} of {$material} ([color=red]{NATURALFIXED($missingAmount, 2)} {MAKEPLURAL($unit)} missing[/color]) } lathe-menu-no-materials-message = No materials loaded. lathe-menu-fabricating-message = Fabricating... From 9811173a1ae0f232d95f8942fe83d3391cd328c3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 8 Apr 2024 03:17:18 +0000 Subject: [PATCH 180/206] 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 7a1578a501..6b8b216509 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: mirrorcult - changes: - - message: Various annoying sounds are now a little quieter - type: Tweak - id: 5819 - time: '2024-01-29T09:51:31.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24690 - author: SpeltIncorrectyl changes: - message: Portable generators can now be connected to the signal network and controlled @@ -3814,3 +3807,10 @@ id: 6318 time: '2024-04-06T23:58:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26784 +- author: Crotalus + changes: + - message: Show missing materials in lathe tooltip + type: Add + id: 6319 + time: '2024-04-08T03:16:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26795 From f784e9ca4e7493bd2f20d44a6b52da10ddb8f02f Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Sun, 7 Apr 2024 22:17:28 -0500 Subject: [PATCH 181/206] Bug fixes for RCD (#26792) Various fixes --- Content.Client/RCD/RCDMenu.xaml.cs | 43 +++++++++++++++++-- Content.Shared/RCD/Systems/RCDSystem.cs | 41 ++++++++++-------- .../en-US/rcd/components/rcd-component.ftl | 19 -------- Resources/Prototypes/RCD/rcd.yml | 18 +------- 4 files changed, 64 insertions(+), 57 deletions(-) diff --git a/Content.Client/RCD/RCDMenu.xaml.cs b/Content.Client/RCD/RCDMenu.xaml.cs index 8679e789dc..51ec66ea44 100644 --- a/Content.Client/RCD/RCDMenu.xaml.cs +++ b/Content.Client/RCD/RCDMenu.xaml.cs @@ -1,8 +1,10 @@ using Content.Client.UserInterface.Controls; +using Content.Shared.Popups; using Content.Shared.RCD; using Content.Shared.RCD.Components; using Robust.Client.AutoGenerated; using Robust.Client.GameObjects; +using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; @@ -16,17 +18,24 @@ public sealed partial class RCDMenu : RadialMenu { [Dependency] private readonly EntityManager _entManager = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; private readonly SpriteSystem _spriteSystem; + private readonly SharedPopupSystem _popup; public event Action>? SendRCDSystemMessageAction; + private EntityUid _owner; + public RCDMenu(EntityUid owner, RCDMenuBoundUserInterface bui) { IoCManager.InjectDependencies(this); RobustXamlLoader.Load(this); _spriteSystem = _entManager.System(); + _popup = _entManager.System(); + + _owner = owner; // Find the main radial container var main = FindControl("Main"); @@ -51,14 +60,21 @@ public sealed partial class RCDMenu : RadialMenu if (parent == null) continue; - var name = Loc.GetString(proto.SetName); - name = char.ToUpper(name[0]) + name.Remove(0, 1); + var tooltip = Loc.GetString(proto.SetName); + + if ((proto.Mode == RcdMode.ConstructTile || proto.Mode == RcdMode.ConstructObject) && + proto.Prototype != null && _protoManager.TryIndex(proto.Prototype, out var entProto)) + { + tooltip = Loc.GetString(entProto.Name); + } + + tooltip = char.ToUpper(tooltip[0]) + tooltip.Remove(0, 1); var button = new RCDMenuButton() { StyleClasses = { "RadialMenuButton" }, SetSize = new Vector2(64f, 64f), - ToolTip = name, + ToolTip = tooltip, ProtoId = protoId, }; @@ -120,6 +136,27 @@ public sealed partial class RCDMenu : RadialMenu castChild.OnButtonUp += _ => { SendRCDSystemMessageAction?.Invoke(castChild.ProtoId); + + if (_playerManager.LocalSession?.AttachedEntity != null && + _protoManager.TryIndex(castChild.ProtoId, out var proto)) + { + var msg = Loc.GetString("rcd-component-change-mode", ("mode", Loc.GetString(proto.SetName))); + + if (proto.Mode == RcdMode.ConstructTile || proto.Mode == RcdMode.ConstructObject) + { + var name = Loc.GetString(proto.SetName); + + if (proto.Prototype != null && + _protoManager.TryIndex(proto.Prototype, out var entProto)) + name = entProto.Name; + + msg = Loc.GetString("rcd-component-change-build-mode", ("name", name)); + } + + // Popup message + _popup.PopupClient(msg, _owner, _playerManager.LocalSession.AttachedEntity); + } + Close(); }; } diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index cd1e90dc1f..bf312ee6fc 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -98,16 +98,6 @@ public class RCDSystem : EntitySystem component.ProtoId = args.ProtoId; UpdateCachedPrototype(uid, component); Dirty(uid, component); - - if (args.Session.AttachedEntity != null) - { - // Popup message - var msg = (component.CachedPrototype.Prototype != null) ? - Loc.GetString("rcd-component-change-build-mode", ("name", Loc.GetString(component.CachedPrototype.SetName))) : - Loc.GetString("rcd-component-change-mode", ("mode", Loc.GetString(component.CachedPrototype.SetName))); - - _popup.PopupClient(msg, uid, args.Session.AttachedEntity.Value); - } } private void OnExamine(EntityUid uid, RCDComponent component, ExaminedEvent args) @@ -118,9 +108,18 @@ public class RCDSystem : EntitySystem // Update cached prototype if required UpdateCachedPrototype(uid, component); - var msg = (component.CachedPrototype.Prototype != null) ? - Loc.GetString("rcd-component-examine-build-details", ("name", Loc.GetString(component.CachedPrototype.SetName))) : - Loc.GetString("rcd-component-examine-mode-details", ("mode", Loc.GetString(component.CachedPrototype.SetName))); + var msg = Loc.GetString("rcd-component-examine-mode-details", ("mode", Loc.GetString(component.CachedPrototype.SetName))); + + if (component.CachedPrototype.Mode == RcdMode.ConstructTile || component.CachedPrototype.Mode == RcdMode.ConstructObject) + { + var name = Loc.GetString(component.CachedPrototype.SetName); + + if (component.CachedPrototype.Prototype != null && + _protoManager.TryIndex(component.CachedPrototype.Prototype, out var proto)) + name = proto.Name; + + msg = Loc.GetString("rcd-component-examine-build-details", ("name", name)); + } args.PushMarkup(msg); } @@ -206,7 +205,7 @@ public class RCDSystem : EntitySystem // Try to start the do after var effect = Spawn(effectPrototype, mapGridData.Value.Location); - var ev = new RCDDoAfterEvent(GetNetCoordinates(mapGridData.Value.Location), component.ProtoId, cost, EntityManager.GetNetEntity(effect)); + var ev = new RCDDoAfterEvent(GetNetCoordinates(mapGridData.Value.Location), component.ConstructionDirection, component.ProtoId, cost, EntityManager.GetNetEntity(effect)); var doAfterArgs = new DoAfterArgs(EntityManager, user, delay, ev, uid, target: args.Target, used: uid) { @@ -263,7 +262,7 @@ public class RCDSystem : EntitySystem return; // Finalize the operation - FinalizeRCDOperation(uid, component, mapGridData.Value, args.Target, args.User); + FinalizeRCDOperation(uid, component, mapGridData.Value, args.Direction, args.Target, args.User); // Play audio and consume charges _audio.PlayPredicted(component.SuccessSound, uid, args.User); @@ -419,7 +418,7 @@ public class RCDSystem : EntitySystem foreach (var fixture in fixtures.Fixtures.Values) { // Continue if no collision is possible - if (fixture.CollisionLayer <= 0 || (fixture.CollisionLayer & (int) component.CachedPrototype.CollisionMask) == 0) + if (!fixture.Hard || fixture.CollisionLayer <= 0 || (fixture.CollisionLayer & (int) component.CachedPrototype.CollisionMask) == 0) continue; // Continue if our custom collision bounds are not intersected @@ -494,7 +493,7 @@ public class RCDSystem : EntitySystem #region Entity construction/deconstruction - private void FinalizeRCDOperation(EntityUid uid, RCDComponent component, MapGridData mapGridData, EntityUid? target, EntityUid user) + private void FinalizeRCDOperation(EntityUid uid, RCDComponent component, MapGridData mapGridData, Direction direction, EntityUid? target, EntityUid user) { if (!_net.IsServer) return; @@ -521,7 +520,7 @@ public class RCDSystem : EntitySystem Transform(ent).LocalRotation = Transform(uid).LocalRotation; break; case RcdRotation.User: - Transform(ent).LocalRotation = component.ConstructionDirection.ToAngle(); + Transform(ent).LocalRotation = direction.ToAngle(); break; } @@ -617,6 +616,9 @@ public sealed partial class RCDDoAfterEvent : DoAfterEvent [DataField(required: true)] public NetCoordinates Location { get; private set; } = default!; + [DataField] + public Direction Direction { get; private set; } = default!; + [DataField] public ProtoId StartingProtoId { get; private set; } = default!; @@ -628,9 +630,10 @@ public sealed partial class RCDDoAfterEvent : DoAfterEvent private RCDDoAfterEvent() { } - public RCDDoAfterEvent(NetCoordinates location, ProtoId startingProtoId, int cost, NetEntity? effect = null) + public RCDDoAfterEvent(NetCoordinates location, Direction direction, ProtoId startingProtoId, int cost, NetEntity? effect = null) { Location = location; + Direction = direction; StartingProtoId = startingProtoId; Cost = cost; Effect = effect; diff --git a/Resources/Locale/en-US/rcd/components/rcd-component.ftl b/Resources/Locale/en-US/rcd/components/rcd-component.ftl index bb65e76f3f..9741bde388 100644 --- a/Resources/Locale/en-US/rcd/components/rcd-component.ftl +++ b/Resources/Locale/en-US/rcd/components/rcd-component.ftl @@ -43,24 +43,5 @@ rcd-component-lighting = Lighting ### Prototype names (note: constructable items will be puralized) rcd-component-deconstruct = deconstruct -rcd-component-wall-solid = solid wall rcd-component-floor-steel = steel tile rcd-component-plating = hull plate -rcd-component-catwalk = catwalk -rcd-component-wall-reinforced = reinforced wall -rcd-component-grille = grille -rcd-component-window = window -rcd-component-window-directional = directional window -rcd-component-window-reinforced-directional = directional reinforced window -rcd-component-reinforced-window = reinforced window -rcd-component-airlock = standard airlock -rcd-component-airlock-glass = glass airlock -rcd-component-firelock = firelock -rcd-component-computer-frame = computer frame -rcd-component-machine-frame = machine frame -rcd-component-tube-light = light -rcd-component-window-bulb-light = small light -rcd-component-window-lv-cable = LV cable -rcd-component-window-mv-cable = MV cable -rcd-component-window-hv-cable = HV cable -rcd-component-window-cable-terminal = cable terminal diff --git a/Resources/Prototypes/RCD/rcd.yml b/Resources/Prototypes/RCD/rcd.yml index cb2c9ed234..bc1aa91d28 100644 --- a/Resources/Prototypes/RCD/rcd.yml +++ b/Resources/Prototypes/RCD/rcd.yml @@ -14,6 +14,7 @@ - type: rcd id: DeconstructLattice # Hidden prototype - do not add to RCDs + name: rcd-component-deconstruct mode: Deconstruct cost: 2 delay: 1 @@ -22,6 +23,7 @@ - type: rcd id: DeconstructTile # Hidden prototype - do not add to RCDs + name: rcd-component-deconstruct mode: Deconstruct cost: 4 delay: 4 @@ -59,7 +61,6 @@ - type: rcd id: Catwalk - name: rcd-component-catwalk category: WallsAndFlooring sprite: /Textures/Interface/Radial/RCD/catwalk.png mode: ConstructObject @@ -76,7 +77,6 @@ # Walls - type: rcd id: WallSolid - name: rcd-component-wall-solid category: WallsAndFlooring sprite: /Textures/Interface/Radial/RCD/solid_wall.png mode: ConstructObject @@ -89,7 +89,6 @@ - type: rcd id: Grille - name: rcd-component-grille category: WindowsAndGrilles sprite: /Textures/Interface/Radial/RCD/grille.png mode: ConstructObject @@ -103,7 +102,6 @@ # Windows - type: rcd id: Window - name: rcd-component-window category: WindowsAndGrilles sprite: /Textures/Interface/Radial/RCD/window.png mode: ConstructObject @@ -118,7 +116,6 @@ - type: rcd id: WindowDirectional - name: rcd-component-window-directional category: WindowsAndGrilles sprite: /Textures/Interface/Radial/RCD/directional.png mode: ConstructObject @@ -134,7 +131,6 @@ - type: rcd id: ReinforcedWindow - name: rcd-component-reinforced-window category: WindowsAndGrilles sprite: /Textures/Interface/Radial/RCD/window_reinforced.png mode: ConstructObject @@ -149,7 +145,6 @@ - type: rcd id: WindowReinforcedDirectional - name: rcd-component-window-reinforced-directional category: WindowsAndGrilles sprite: /Textures/Interface/Radial/RCD/directional_reinforced.png mode: ConstructObject @@ -166,7 +161,6 @@ # Airlocks - type: rcd id: Airlock - name: rcd-component-airlock category: Airlocks sprite: /Textures/Interface/Radial/RCD/airlock.png mode: ConstructObject @@ -179,7 +173,6 @@ - type: rcd id: AirlockGlass - name: rcd-component-airlock-glass category: Airlocks sprite: /Textures/Interface/Radial/RCD/glass_airlock.png mode: ConstructObject @@ -192,7 +185,6 @@ - type: rcd id: Firelock - name: rcd-component-firelock category: Airlocks sprite: /Textures/Interface/Radial/RCD/firelock.png mode: ConstructObject @@ -206,7 +198,6 @@ # Lighting - type: rcd id: TubeLight - name: rcd-component-tube-light category: Lighting sprite: /Textures/Interface/Radial/RCD/tube_light.png mode: ConstructObject @@ -220,7 +211,6 @@ - type: rcd id: BulbLight - name: rcd-component-window-bulb-light category: Lighting sprite: /Textures/Interface/Radial/RCD/bulb_light.png mode: ConstructObject @@ -235,7 +225,6 @@ # Electrical - type: rcd id: LVCable - name: rcd-component-window-lv-cable category: Electrical sprite: /Textures/Interface/Radial/RCD/lv_coil.png mode: ConstructObject @@ -250,7 +239,6 @@ - type: rcd id: MVCable - name: rcd-component-window-mv-cable category: Electrical sprite: /Textures/Interface/Radial/RCD/mv_coil.png mode: ConstructObject @@ -265,7 +253,6 @@ - type: rcd id: HVCable - name: rcd-component-window-hv-cable category: Electrical sprite: /Textures/Interface/Radial/RCD/hv_coil.png mode: ConstructObject @@ -280,7 +267,6 @@ - type: rcd id: CableTerminal - name: rcd-component-window-cable-terminal category: Electrical sprite: /Textures/Interface/Radial/RCD/cable_terminal.png mode: ConstructObject From 5e2f1e735d2821e92d4ad640aee919142d7473f5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 8 Apr 2024 03:18:35 +0000 Subject: [PATCH 182/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6b8b216509..e94a4d5075 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: SpeltIncorrectyl - changes: - - message: Portable generators can now be connected to the signal network and controlled - remotely via devices like a signal transmitter. - type: Add - id: 5820 - time: '2024-01-29T14:56:29.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24157 - author: Tayrtahn changes: - message: Welders properly display their lit status again. @@ -3814,3 +3806,14 @@ id: 6319 time: '2024-04-08T03:16:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26795 +- author: chromiumboy + changes: + - message: Fixed the RCD not being able to build on top of puddles + type: Fix + - message: RCD constructions can no longer be rotated while in progress + type: Tweak + - message: The RCD now reports construction mode changes to its user + type: Add + id: 6320 + time: '2024-04-08T03:17:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26792 From 3851fcbc32eeb64ae2508e2477fddf68ab1894c4 Mon Sep 17 00:00:00 2001 From: deepdarkdepths <155149356+deepdarkdepths@users.noreply.github.com> Date: Mon, 8 Apr 2024 06:14:23 -0400 Subject: [PATCH 183/206] Fixes elite operative figurine description (#26814) desc --- Resources/Prototypes/Entities/Objects/Fun/figurines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/figurines.yml b/Resources/Prototypes/Entities/Objects/Fun/figurines.yml index 61ce7079f7..ce83f66cb3 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/figurines.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/figurines.yml @@ -322,7 +322,7 @@ parent: BaseFigurine id: ToyFigurineNukieElite name: elite syndicate operative figure - description: A figurine depicting someone in an elite blood-red hardsuit, similar to what the medic of a nuclear operative team might wear. + description: A figurine depicting someone in an elite blood-red hardsuit, similar to what someone on a nuclear operative team might wear. components: - type: Sprite state: nukie_elite From a9df8cf18a9217da46d76e05fe0189b771555cbc Mon Sep 17 00:00:00 2001 From: Crotalus Date: Mon, 8 Apr 2024 15:46:42 +0200 Subject: [PATCH 184/206] Fix lathe materials list bug (#26826) Fix lathe material list bug --- Content.Client/Lathe/UI/LatheMenu.xaml.cs | 9 +++++---- Resources/Locale/en-US/lathe/ui/lathe-menu.ftl | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Content.Client/Lathe/UI/LatheMenu.xaml.cs b/Content.Client/Lathe/UI/LatheMenu.xaml.cs index 21897681c1..ca8d256127 100644 --- a/Content.Client/Lathe/UI/LatheMenu.xaml.cs +++ b/Content.Client/Lathe/UI/LatheMenu.xaml.cs @@ -141,17 +141,18 @@ public sealed partial class LatheMenu : DefaultWindow var name = Loc.GetString(proto.Name); - string amountText; + string tooltipText; if (missingSheets > 0) { - amountText = Loc.GetString("lathe-menu-material-amount-missing", ("amount", sheets), ("missingAmount", missingSheets), ("unit", unit), ("material", name)); + tooltipText = Loc.GetString("lathe-menu-material-amount-missing", ("amount", sheets), ("missingAmount", missingSheets), ("unit", unit), ("material", name)); } else { - amountText = Loc.GetString("lathe-menu-material-amount", ("amount", sheets), ("unit", unit), ("material", name)); + var amountText = Loc.GetString("lathe-menu-material-amount", ("amount", sheets), ("unit", unit)); + tooltipText = Loc.GetString("lathe-menu-tooltip-display", ("material", name), ("amount", amountText)); } - sb.AppendLine(amountText); + sb.AppendLine(tooltipText); } if (!string.IsNullOrWhiteSpace(prototype.Description)) diff --git a/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl b/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl index 72b836e69c..71dd50d409 100644 --- a/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl +++ b/Resources/Locale/en-US/lathe/ui/lathe-menu.ftl @@ -10,8 +10,8 @@ lathe-menu-material-display = {$material} ({$amount}) lathe-menu-tooltip-display = {$amount} of {$material} lathe-menu-description-display = [italic]{$description}[/italic] lathe-menu-material-amount = { $amount -> - [1] {NATURALFIXED($amount, 2)} {$unit} of {$material} - *[other] {NATURALFIXED($amount, 2)} {MAKEPLURAL($unit)} of {$material} + [1] {NATURALFIXED($amount, 2)} {$unit} + *[other] {NATURALFIXED($amount, 2)} {MAKEPLURAL($unit)} } lathe-menu-material-amount-missing = { $amount -> [1] {NATURALFIXED($amount, 2)} {$unit} of {$material} ([color=red]{NATURALFIXED($missingAmount, 2)} {$unit} missing[/color]) From 7188b509df60d196384494519a31cbf6e1bbe108 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:27:26 +0200 Subject: [PATCH 185/206] fix bodybag id case (#26823) * Fix body bag id * migration --- Resources/Prototypes/Catalog/Fills/Boxes/medical.yml | 2 +- .../Prototypes/Entities/Objects/Specific/Medical/morgue.yml | 6 +++--- Resources/Prototypes/Recipes/Lathes/medical.yml | 2 +- Resources/migration.yml | 4 ++++ 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml b/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml index aba61ce332..9862399776 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml @@ -117,7 +117,7 @@ components: - type: StorageFill contents: - - id: BodyBag_Folded + - id: BodyBagFolded amount: 4 - type: Sprite layers: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml index 32aa114429..2c48ef5da0 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml @@ -1,5 +1,5 @@ - type: entity - id: BodyBag_Container + id: BodyBag parent: BaseFoldable name: body bag description: A plastic bag designed for the storage and transportation of cadavers to stop body decomposition. @@ -83,10 +83,10 @@ price: 50 - type: entity - id: BodyBag_Folded + id: BodyBagFolded name: body bag description: A plastic bag designed for the storage and transportation of cadavers to stop body decomposition. - parent: BodyBag_Container + parent: BodyBag suffix: folded components: - type: Foldable diff --git a/Resources/Prototypes/Recipes/Lathes/medical.yml b/Resources/Prototypes/Recipes/Lathes/medical.yml index fbfa0151ba..16cc6d2e86 100644 --- a/Resources/Prototypes/Recipes/Lathes/medical.yml +++ b/Resources/Prototypes/Recipes/Lathes/medical.yml @@ -49,7 +49,7 @@ - type: latheRecipe id: BodyBag - result: BodyBag_Folded + result: BodyBagFolded completetime: 2 materials: Plastic: 300 diff --git a/Resources/migration.yml b/Resources/migration.yml index 209434d1db..5396baa96d 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -275,3 +275,7 @@ ClothingOuterArmorScaf: ClothingOuterArmorBasic ClothingNeckFlowerWreath: ClothingHeadHatFlowerWreath ClothingHeadHatFlowerCrown: ClothingHeadHatFlowerWreath BriefcaseSyndieBase: null + +# 2024-04-08 +BodyBag_Container: BodyBag +BodyBag_Folded: BodyBagFolded From 4a7aa300c8016ecd764d1c6d10aa118af0d6aa8d Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Mon, 8 Apr 2024 17:05:57 +0200 Subject: [PATCH 186/206] Make bombsuits similar (#26806) --- .../Prototypes/Catalog/Cargo/cargo_emergency.yml | 2 +- .../Prototypes/Entities/Clothing/Head/helmets.yml | 5 +---- .../Entities/Clothing/OuterClothing/suits.yml | 15 ++++----------- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_emergency.yml b/Resources/Prototypes/Catalog/Cargo/cargo_emergency.yml index 2715e0c350..c04e49f413 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_emergency.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_emergency.yml @@ -4,7 +4,7 @@ sprite: Clothing/Head/Helmets/bombsuit.rsi state: icon product: CrateEmergencyExplosive - cost: 650 + cost: 1000 category: cargoproduct-category-name-emergency group: market diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 2c5cb54094..f38efd5c8b 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -113,7 +113,7 @@ #Janitorial Bombsuit Helmet - type: entity - parent: ClothingHeadBase + parent: ClothingHeadHelmetBombSuit id: ClothingHeadHelmetJanitorBombSuit name: janitorial bombsuit helmet description: A heavy helmet designed to withstand explosions formed from reactions between chemicals. @@ -123,9 +123,6 @@ sprite: Clothing/Head/Helmets/janitor_bombsuit.rsi - type: Clothing sprite: Clothing/Head/Helmets/janitor_bombsuit.rsi - - type: IngestionBlocker - - type: ExplosionResistance - damageCoefficient: 0.9 #Cult Helmet - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 96a97be87e..5e82959c4e 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -8,6 +8,9 @@ sprite: Clothing/OuterClothing/Suits/bombsuit.rsi - type: Clothing sprite: Clothing/OuterClothing/Suits/bombsuit.rsi + - type: ClothingSpeedModifier + walkModifier: 0.8 + sprintModifier: 0.8 - type: Armor modifiers: coefficients: @@ -24,7 +27,7 @@ - WhitelistChameleon - type: entity - parent: ClothingOuterBaseLarge + parent: ClothingOuterSuitBomb id: ClothingOuterSuitJanitorBomb name: janitorial bomb suit description: A heavy helmet designed to withstand explosions formed from reactions between chemicals. @@ -34,16 +37,6 @@ sprite: Clothing/OuterClothing/Suits/janitor_bombsuit.rsi - type: Clothing sprite: Clothing/OuterClothing/Suits/janitor_bombsuit.rsi - - type: ClothingSpeedModifier - walkModifier: 0.8 - sprintModifier: 0.8 - - type: ExplosionResistance - damageCoefficient: 0.15 - - type: GroupExamine - - type: Tag - tags: - - Hardsuit - - WhitelistChameleon - type: entity parent: ClothingOuterBaseLarge From 2bbae3ecc844e68988c0173e22b1767168c548f8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 8 Apr 2024 15:07:04 +0000 Subject: [PATCH 187/206] 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 e94a4d5075..c55171db67 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Tayrtahn - changes: - - message: Welders properly display their lit status again. - type: Fix - id: 5821 - time: '2024-01-29T23:04:52.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24705 - author: Tayrtahn changes: - message: Water bottles now display their fill level while held. @@ -3817,3 +3810,10 @@ id: 6320 time: '2024-04-08T03:17:29.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26792 +- author: lzk228 + changes: + - message: Bombsuit and jani bombsuit are similar now. + type: Tweak + id: 6321 + time: '2024-04-08T15:05:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26806 From 6ce53709bd12b4779d87fe3d4312039e7e9c8dfc Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Mon, 8 Apr 2024 17:10:58 +0200 Subject: [PATCH 188/206] Make clothing cheaper and split clothing restock (#26805) * Make clothing cheaper * bueah * proper price * :trollface: --- Resources/Prototypes/Catalog/Cargo/cargo_vending.yml | 12 +++++++++++- .../Prototypes/Catalog/Fills/Crates/vending.yml | 11 ++++++++++- .../Entities/Clothing/Belt/base_clothingbelt.yml | 2 +- .../Prototypes/Entities/Clothing/Masks/masks.yml | 2 ++ .../Clothing/OuterClothing/base_clothingouter.yml | 2 +- .../Entities/Clothing/OuterClothing/wintercoats.yml | 2 +- .../Prototypes/Entities/Clothing/base_clothing.yml | 2 +- 7 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml index dda462abec..dd43ec4094 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml @@ -33,7 +33,17 @@ sprite: Objects/Specific/Service/vending_machine_restock.rsi state: base product: CrateVendingMachineRestockClothesFilled - cost: 6000 + cost: 2400 + category: cargoproduct-category-name-service + group: market + +- type: cargoProduct + id: CrateVendingMachineRestockAutoDrobe + icon: + sprite: Objects/Specific/Service/vending_machine_restock.rsi + state: base + product: CrateVendingMachineRestockAutoDrobeFilled + cost: 1200 category: cargoproduct-category-name-service group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/vending.yml b/Resources/Prototypes/Catalog/Fills/Crates/vending.yml index 5a6b5ca089..d54e103a70 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/vending.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/vending.yml @@ -22,11 +22,20 @@ id: CrateVendingMachineRestockClothesFilled parent: CratePlastic name: clothing restock crate - description: Contains a pair of restock boxes, one for the ClothesMate and one for the AutoDrobe. + description: Contains a restock box for the clothes vending machines. components: - type: StorageFill contents: - id: VendingMachineRestockClothes + +- type: entity + id: CrateVendingMachineRestockAutoDrobeFilled + parent: CratePlastic + name: AutoDrobe restock crate + description: Contains a restock box for the AutoDrobe. + components: + - type: StorageFill + contents: - id: VendingMachineRestockCostumes - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml index 2f904d3438..76aca4df13 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml @@ -14,7 +14,7 @@ materialComposition: Cloth: 50 - type: StaticPrice - price: 25 + price: 20 - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index ad738792a7..4d7351464f 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -177,6 +177,8 @@ materialComposition: Steel: 50 Plastic: 100 + - type: StaticPrice + price: 12.5 # increases in price after decomposed into raw materials - type: entity parent: ClothingMaskBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 310661f6ca..987d3c2f24 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -41,7 +41,7 @@ - key: enum.StorageUiKey.Key type: StorageBoundUserInterface - type: StaticPrice - price: 80 + price: 70 - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml index 84b1e2eb48..b792a97627 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml @@ -32,7 +32,7 @@ - ClothMade - WhitelistChameleon - type: StaticPrice - price: 70 + price: 50 - type: entity parent: ClothingOuterWinterCoat diff --git a/Resources/Prototypes/Entities/Clothing/base_clothing.yml b/Resources/Prototypes/Entities/Clothing/base_clothing.yml index 92a698dd30..44613e042f 100644 --- a/Resources/Prototypes/Entities/Clothing/base_clothing.yml +++ b/Resources/Prototypes/Entities/Clothing/base_clothing.yml @@ -10,7 +10,7 @@ tags: - WhitelistChameleon - type: StaticPrice - price: 15 + price: 10 - type: entity abstract: true From 7f56ba0155da28ab915e6d9d2122d1bef44536dd Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 8 Apr 2024 15:12:04 +0000 Subject: [PATCH 189/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c55171db67..5276a1972c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Tayrtahn - changes: - - message: Water bottles now display their fill level while held. - type: Add - id: 5822 - time: '2024-01-29T23:19:56.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24708 - author: SlamBamActionman changes: - message: Arachnids slipping in water now get a cute hat! @@ -3817,3 +3810,13 @@ id: 6321 time: '2024-04-08T15:05:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26806 +- author: lzk228 + changes: + - message: Clothing restock crate was splitted to clothing and autodrobe restock + crates. + type: Tweak + - message: Clothing is cheaper. + type: Tweak + id: 6322 + time: '2024-04-08T15:10:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26805 From 3d6d7820d641450ca6c6903edd20e85af311a8b6 Mon Sep 17 00:00:00 2001 From: c4llv07e <38111072+c4llv07e@users.noreply.github.com> Date: Mon, 8 Apr 2024 18:12:39 +0300 Subject: [PATCH 190/206] Fix tray scanner not updating it's range. (#26789) Fix tray scanner not updating it's range on change. Add range value to the tray scanner state.to synchronize it between client and server. --- Content.Shared/SubFloor/SharedTrayScannerSystem.cs | 3 ++- Content.Shared/SubFloor/TrayScannerComponent.cs | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Content.Shared/SubFloor/SharedTrayScannerSystem.cs b/Content.Shared/SubFloor/SharedTrayScannerSystem.cs index da56c8d1c7..6e8393036d 100644 --- a/Content.Shared/SubFloor/SharedTrayScannerSystem.cs +++ b/Content.Shared/SubFloor/SharedTrayScannerSystem.cs @@ -48,7 +48,7 @@ public abstract class SharedTrayScannerSystem : EntitySystem private void OnTrayScannerGetState(EntityUid uid, TrayScannerComponent scanner, ref ComponentGetState args) { - args.State = new TrayScannerState(scanner.Enabled); + args.State = new TrayScannerState(scanner.Enabled, scanner.Range); } private void OnTrayScannerHandleState(EntityUid uid, TrayScannerComponent scanner, ref ComponentHandleState args) @@ -56,6 +56,7 @@ public abstract class SharedTrayScannerSystem : EntitySystem if (args.Current is not TrayScannerState state) return; + scanner.Range = state.Range; SetScannerEnabled(uid, state.Enabled, scanner); } } diff --git a/Content.Shared/SubFloor/TrayScannerComponent.cs b/Content.Shared/SubFloor/TrayScannerComponent.cs index 98e43246a8..acde11ff50 100644 --- a/Content.Shared/SubFloor/TrayScannerComponent.cs +++ b/Content.Shared/SubFloor/TrayScannerComponent.cs @@ -22,9 +22,11 @@ public sealed partial class TrayScannerComponent : Component public sealed class TrayScannerState : ComponentState { public bool Enabled; + public float Range; - public TrayScannerState(bool enabled) + public TrayScannerState(bool enabled, float range) { Enabled = enabled; + Range = range; } } From 2f5c639a151ace90365e929486ba479655b9cd63 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:16:21 +0000 Subject: [PATCH 191/206] predict humanoid identity examine (#26769) * predict humanoid identity examine * actually server doesnt need proto anymore --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../Systems/HumanoidAppearanceSystem.cs | 53 +-------------- .../SharedHumanoidAppearanceSystem.cs | 68 ++++++++++++++++--- 2 files changed, 59 insertions(+), 62 deletions(-) diff --git a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs index 89d28e5102..505ad4f16c 100644 --- a/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs +++ b/Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs @@ -1,36 +1,23 @@ -using Content.Shared.Examine; using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; -using Content.Shared.IdentityManagement; using Content.Shared.Preferences; using Content.Shared.Verbs; using Robust.Shared.GameObjects.Components.Localization; -using Robust.Shared.Prototypes; namespace Content.Server.Humanoid; public sealed partial class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem { [Dependency] private readonly MarkingManager _markingManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMarkingsSet); SubscribeLocalEvent(OnBaseLayersSet); SubscribeLocalEvent>(OnVerbsRequest); - SubscribeLocalEvent(OnExamined); - } - - private void OnExamined(EntityUid uid, HumanoidAppearanceComponent component, ExaminedEvent args) - { - var identity = Identity.Entity(uid, EntityManager); - var species = GetSpeciesRepresentation(component.Species).ToLower(); - var age = GetAgeRepresentation(component.Species, component.Age); - - args.PushText(Loc.GetString("humanoid-appearance-component-examine", ("user", identity), ("age", age), ("species", species))); } // this was done enough times that it only made sense to do it here @@ -164,42 +151,4 @@ public sealed partial class HumanoidAppearanceSystem : SharedHumanoidAppearanceS Dirty(uid, humanoid); } - - /// - /// Takes ID of the species prototype, returns UI-friendly name of the species. - /// - public string GetSpeciesRepresentation(string speciesId) - { - if (_prototypeManager.TryIndex(speciesId, out var species)) - { - return Loc.GetString(species.Name); - } - else - { - return Loc.GetString("humanoid-appearance-component-unknown-species"); - } - } - - public string GetAgeRepresentation(string species, int age) - { - _prototypeManager.TryIndex(species, out var speciesPrototype); - - if (speciesPrototype == null) - { - Log.Error("Tried to get age representation of species that couldn't be indexed: " + species); - return Loc.GetString("identity-age-young"); - } - - if (age < speciesPrototype.YoungAge) - { - return Loc.GetString("identity-age-young"); - } - - if (age < speciesPrototype.OldAge) - { - return Loc.GetString("identity-age-middle-aged"); - } - - return Loc.GetString("identity-age-old"); - } } diff --git a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs index b7ef784d00..2a846d7fe2 100644 --- a/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs +++ b/Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs @@ -1,7 +1,9 @@ using System.Linq; using Content.Shared.Decals; +using Content.Shared.Examine; using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Prototypes; +using Content.Shared.IdentityManagement; using Content.Shared.Preferences; using Robust.Shared.GameObjects.Components.Localization; using Robust.Shared.Network; @@ -21,7 +23,7 @@ namespace Content.Shared.Humanoid; public abstract class SharedHumanoidAppearanceSystem : EntitySystem { [Dependency] private readonly INetManager _netManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly MarkingManager _markingManager = default!; [ValidatePrototypeId] @@ -30,7 +32,9 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnExamined); } private void OnInit(EntityUid uid, HumanoidAppearanceComponent humanoid, ComponentInit args) @@ -41,7 +45,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem } if (string.IsNullOrEmpty(humanoid.Initial) - || !_prototypeManager.TryIndex(humanoid.Initial, out HumanoidProfilePrototype? startingSet)) + || !_proto.TryIndex(humanoid.Initial, out HumanoidProfilePrototype? startingSet)) { LoadProfile(uid, HumanoidCharacterProfile.DefaultWithSpecies(humanoid.Species), humanoid); return; @@ -56,6 +60,15 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem LoadProfile(uid, startingSet.Profile, humanoid); } + private void OnExamined(EntityUid uid, HumanoidAppearanceComponent component, ExaminedEvent args) + { + var identity = Identity.Entity(uid, EntityManager); + var species = GetSpeciesRepresentation(component.Species).ToLower(); + var age = GetAgeRepresentation(component.Species, component.Age); + + args.PushText(Loc.GetString("humanoid-appearance-component-examine", ("user", identity), ("age", age), ("species", species))); + } + /// /// Toggles a humanoid's sprite layer visibility. /// @@ -136,7 +149,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem /// Humanoid component of the entity public void SetSpecies(EntityUid uid, string species, bool sync = true, HumanoidAppearanceComponent? humanoid = null) { - if (!Resolve(uid, ref humanoid) || !_prototypeManager.TryIndex(species, out var prototype)) + if (!Resolve(uid, ref humanoid) || !_proto.TryIndex(species, out var prototype)) { return; } @@ -144,7 +157,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem humanoid.Species = species; humanoid.MarkingSet.EnsureSpecies(species, humanoid.SkinColor, _markingManager); var oldMarkings = humanoid.MarkingSet.GetForwardEnumerator().ToList(); - humanoid.MarkingSet = new(oldMarkings, prototype.MarkingPoints, _markingManager, _prototypeManager); + humanoid.MarkingSet = new(oldMarkings, prototype.MarkingPoints, _markingManager, _proto); if (sync) Dirty(uid, humanoid); @@ -164,7 +177,7 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem if (!Resolve(uid, ref humanoid)) return; - if (!_prototypeManager.TryIndex(humanoid.Species, out var species)) + if (!_proto.TryIndex(humanoid.Species, out var species)) { return; } @@ -288,24 +301,24 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem // Hair/facial hair - this may eventually be deprecated. // We need to ensure hair before applying it or coloring can try depend on markings that can be invalid - var hairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.Hair, out var hairAlpha, _prototypeManager) + var hairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.Hair, out var hairAlpha, _proto) ? profile.Appearance.SkinColor.WithAlpha(hairAlpha) : profile.Appearance.HairColor; - var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, out var facialHairAlpha, _prototypeManager) + var facialHairColor = _markingManager.MustMatchSkin(profile.Species, HumanoidVisualLayers.FacialHair, out var facialHairAlpha, _proto) ? profile.Appearance.SkinColor.WithAlpha(facialHairAlpha) : profile.Appearance.FacialHairColor; if (_markingManager.Markings.TryGetValue(profile.Appearance.HairStyleId, out var hairPrototype) && - _markingManager.CanBeApplied(profile.Species, profile.Sex, hairPrototype, _prototypeManager)) + _markingManager.CanBeApplied(profile.Species, profile.Sex, hairPrototype, _proto)) { AddMarking(uid, profile.Appearance.HairStyleId, hairColor, false); } if (_markingManager.Markings.TryGetValue(profile.Appearance.FacialHairStyleId, out var facialHairPrototype) && - _markingManager.CanBeApplied(profile.Species, profile.Sex, facialHairPrototype, _prototypeManager)) + _markingManager.CanBeApplied(profile.Species, profile.Sex, facialHairPrototype, _proto)) { AddMarking(uid, profile.Appearance.FacialHairStyleId, facialHairColor, false); } - humanoid.MarkingSet.EnsureSpecies(profile.Species, profile.Appearance.SkinColor, _markingManager, _prototypeManager); + humanoid.MarkingSet.EnsureSpecies(profile.Species, profile.Appearance.SkinColor, _markingManager, _proto); // Finally adding marking with forced colors foreach (var (marking, prototype) in markingFColored) @@ -398,4 +411,39 @@ public abstract class SharedHumanoidAppearanceSystem : EntitySystem if (sync) Dirty(uid, humanoid); } + + /// + /// Takes ID of the species prototype, returns UI-friendly name of the species. + /// + public string GetSpeciesRepresentation(string speciesId) + { + if (_proto.TryIndex(speciesId, out var species)) + { + return Loc.GetString(species.Name); + } + + Log.Error("Tried to get representation of unknown species: {speciesId}"); + return Loc.GetString("humanoid-appearance-component-unknown-species"); + } + + public string GetAgeRepresentation(string species, int age) + { + if (!_proto.TryIndex(species, out var speciesPrototype)) + { + Log.Error("Tried to get age representation of species that couldn't be indexed: " + species); + return Loc.GetString("identity-age-young"); + } + + if (age < speciesPrototype.YoungAge) + { + return Loc.GetString("identity-age-young"); + } + + if (age < speciesPrototype.OldAge) + { + return Loc.GetString("identity-age-middle-aged"); + } + + return Loc.GetString("identity-age-old"); + } } From 263469dffa200eab09ba270a2eb58f1b98c78f2f Mon Sep 17 00:00:00 2001 From: Hanz <41141796+Hanzdegloker@users.noreply.github.com> Date: Mon, 8 Apr 2024 11:34:35 -0400 Subject: [PATCH 192/206] Spears equippable to suit storage (#26724) * meat and potatoes hahaha * DAMAGE yes * come on * Check again * Guhhhhh guh --- .../Construction/Interaction/CraftingTests.cs | 4 ++-- .../Entities/Objects/Weapons/Melee/spear.yml | 1 + .../Recipes/Construction/Graphs/weapons/spear.yml | 8 ++++---- .../Melee/bone_spear.rsi/equipped-SUITSTORAGE.png | Bin 0 -> 593 bytes .../Weapons/Melee/bone_spear.rsi/meta.json | 4 ++++ .../plasma_spear.rsi/equipped-SUITSTORAGE.png | Bin 0 -> 363 bytes .../Weapons/Melee/plasma_spear.rsi/meta.json | 4 ++++ .../reinforced_spear.rsi/equipped-SUITSTORAGE.png | Bin 0 -> 361 bytes .../Weapons/Melee/reinforced_spear.rsi/meta.json | 4 ++++ .../Melee/spear.rsi/equipped-SUITSTORAGE.png | Bin 0 -> 629 bytes .../Objects/Weapons/Melee/spear.rsi/meta.json | 4 ++++ .../uranium_spear.rsi/equipped-SUITSTORAGE.png | Bin 0 -> 368 bytes .../Weapons/Melee/uranium_spear.rsi/meta.json | 4 ++++ 13 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 Resources/Textures/Objects/Weapons/Melee/bone_spear.rsi/equipped-SUITSTORAGE.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/plasma_spear.rsi/equipped-SUITSTORAGE.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/reinforced_spear.rsi/equipped-SUITSTORAGE.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/spear.rsi/equipped-SUITSTORAGE.png create mode 100644 Resources/Textures/Objects/Weapons/Melee/uranium_spear.rsi/equipped-SUITSTORAGE.png diff --git a/Content.IntegrationTests/Tests/Construction/Interaction/CraftingTests.cs b/Content.IntegrationTests/Tests/Construction/Interaction/CraftingTests.cs index c49e20981e..76911eba5f 100644 --- a/Content.IntegrationTests/Tests/Construction/Interaction/CraftingTests.cs +++ b/Content.IntegrationTests/Tests/Construction/Interaction/CraftingTests.cs @@ -56,7 +56,7 @@ public sealed class CraftingTests : InteractionTest // Player's hands should be full of the remaining rods, except those dropped during the failed crafting attempt. // Spear and left over stacks should be on the floor. - await AssertEntityLookup((Rod, 2), (Cable, 8), (ShardGlass, 2), (Spear, 1)); + await AssertEntityLookup((Rod, 2), (Cable, 7), (ShardGlass, 2), (Spear, 1)); } // The following is wrapped in an if DEBUG. This is because of cursed state handling bugs. Tests don't (de)serialize @@ -100,7 +100,7 @@ public sealed class CraftingTests : InteractionTest Assert.That(sys.IsEntityInContainer(rods), Is.False); Assert.That(sys.IsEntityInContainer(wires), Is.False); Assert.That(rodStack, Has.Count.EqualTo(8)); - Assert.That(wireStack, Has.Count.EqualTo(8)); + Assert.That(wireStack, Has.Count.EqualTo(7)); await FindEntity(Spear, shouldSucceed: false); }); diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index 3758487bd4..0def916ddc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -52,6 +52,7 @@ quickEquip: false slots: - back + - suitStorage - type: Construction graph: Spear node: spear diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/weapons/spear.yml b/Resources/Prototypes/Recipes/Construction/Graphs/weapons/spear.yml index 6e1c682f47..f1efe63ff5 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/weapons/spear.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/weapons/spear.yml @@ -10,7 +10,7 @@ amount: 2 doAfter: 2 - material: Cable - amount: 2 + amount: 3 doAfter: 1 - tag: GlassShard name: Glass Shard @@ -33,7 +33,7 @@ amount: 2 doAfter: 2 - material: Cable - amount: 2 + amount: 3 doAfter: 1 - tag: ReinforcedGlassShard name: Reinforced Glass Shard @@ -56,7 +56,7 @@ amount: 2 doAfter: 2 - material: Cable - amount: 2 + amount: 3 doAfter: 1 - tag: PlasmaGlassShard name: Plasma Glass Shard @@ -79,7 +79,7 @@ amount: 2 doAfter: 2 - material: Cable - amount: 2 + amount: 3 doAfter: 1 - tag: UraniumGlassShard name: Uranium Glass Shard diff --git a/Resources/Textures/Objects/Weapons/Melee/bone_spear.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Melee/bone_spear.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..585f2279403ddbff8ab4709ffe3938def8d38e81 GIT binary patch literal 593 zcmV-X0Ir1H|t?9S}Cz2A9e-rwhcX5a2SfRpi{#dybtfvi3|Xd&wccLEl(2}a$9u`ZC+ z$CZHbpv9(>F>EI$u1o`d^l>F%F`EDY9uF>r1L(kyzD=G%cW1W%fT6u196$%#`E$!l zCs@xBKhn5n4CmI@;L}6l0J@O*@c?H6Dlc!=G6|+KoLhK3ITD`7owog}W8uYhBCGG; z*8yCI;5x8VxyO@^L%Nzz8d(fAYegobO?V6BW((0NTF7PMY7fCBvX2|p^!guC^CIH_ zSt8>A0NBeYssw*xvICy`;@TqR02w0VfLtby-3L!?5L0Ua0PxZYR?4Q-)&ZB@cVpj( zw(13`x7EmOXl->s)Sv`}Eg&dznRwU|2!bF8f*>M{>0Kg#xW>qo!m^*yDsZF zHcW1m7|t#992<4lRr4p6vMJVSmyLBmr(Kr%GR#f0R%E4YikY?*mewz2Q>F*b0KW^Yy90b-;!}Vi2!bF8 ff*=TjApYhP+c48H_-LJ)00000NkvXXu0mjf!OsiN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/bone_spear.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/bone_spear.rsi/meta.json index 49209bf2dc..421037eac3 100644 --- a/Resources/Textures/Objects/Weapons/Melee/bone_spear.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/bone_spear.rsi/meta.json @@ -32,6 +32,10 @@ { "name": "equipped-BACKPACK", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Weapons/Melee/plasma_spear.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Melee/plasma_spear.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..648fff08e4c7cbd3d23a2999f759de4677cd58f5 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%C&rs6b?Si}&H|6fVg?3o zVGw3ym^DWND5w(P6XFV_KR^Dwb?Vk)rxI;#?Wz3y{}~t}BO}Y>4Yjni3_HEKPY1A6eCx*<8Ee%Ba^OB4E;3#OlqVDZv`Spls&I7$jn#nQ&@x z2WPVOk_p`sQyFx)=1jPe!xtf+hqIe0#n8>!r&7dFE!>B7 zMUrO38V^o~4Uya%G%`FL9;qY*UT8a`d2rE!78Ta15h4`}Kgbw}hAjNBp<*#>t9fIC z^oE%Ys~EaDS?)SqU}?&8_{gfh%;wq!S4O=S5do9NB35q>O$pWr24yox#vl;`&4g2n zJ2;cImrUrEn988THD|(&9KHw<6@`t5H)?9ACNObt;(T-4FtkAVxu_UhnUAu}hayA9 mZIdRPQ%m@GR70YUf#J1+#MPjktCWB~V(@hJb6Mw<&;$U31arjz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/reinforced_spear.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/reinforced_spear.rsi/meta.json index 383ea777d2..5a18552d2e 100644 --- a/Resources/Textures/Objects/Weapons/Melee/reinforced_spear.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/reinforced_spear.rsi/meta.json @@ -32,6 +32,10 @@ { "name": "equipped-BACKPACK", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Weapons/Melee/spear.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Melee/spear.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8ff3d7441bce827f42a521837e9f5064f23662 GIT binary patch literal 629 zcmV-*0*d{KP)7s++BosGMXlU^-$l%tct95ZKr2l~bg;N9F#kzKJHJLj#8mPFrI5`w_ zDTT;Y0tFTBUQBYf_gT8UmwfM=dq4W#86Xe@0X*%v$7qb2H-=_J00lv`(jst%ZrocuQ!{q`q46AG%`2Cp`Eew65J2u6hkHoSp{$-ly@Mu;7-tnwfQel*iLZWPy+;L_!Fl0b_X^UagkVZ zb;~;mO3@)8Ktrjh0Rl9XiW(q5L#e0%0yLBg%K*HFmL3pl48xGzUNeBxSbCKRYD0}2 z$OcHS5<$GPmO+i2p~|Wel3XQ{ved}P0``r8SoFP zL>$LSP$O!k_F=68OLyZK27^H&@tPd9akG?lB7{fJ!AcDd8X@VP0JU*H47pbLH}Hkh zs>ceg6_#2sK_#;Rwl^|T&fQ`-oTm>YT&nk+dD2k#eilQjW4*(AUogXeB%sUUxE3gJ($mE;q+(8T0s|u>n~y@n>PLq3w+3!9@#NR9L4*h*T{6AY&jJvhc%(ip8w0 z=8X-~8)i1FV(8{%x$AI&r76$hBdhu{n`;+b8TDF31WX!>SiLzkC0HXEl+7F&gG3B8 z6HYDe;7rzDGND^yDuWK!oC!B__##A96gD2-sHvfvz{I_Y^UZC;&;sS>qGD`iKFTs5 siVPXIO`32{ZNcwH42sO|2Lo6beCi~pP7VpO26~FY)78&qol`;+0A|K?asU7T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Melee/uranium_spear.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/uranium_spear.rsi/meta.json index 383ea777d2..5a18552d2e 100644 --- a/Resources/Textures/Objects/Weapons/Melee/uranium_spear.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Melee/uranium_spear.rsi/meta.json @@ -32,6 +32,10 @@ { "name": "equipped-BACKPACK", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } From 14866173c0568b12cb138973bdbcc1d7db167766 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 8 Apr 2024 15:35:41 +0000 Subject: [PATCH 193/206] 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 5276a1972c..c995f1f51d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: SlamBamActionman - changes: - - message: Arachnids slipping in water now get a cute hat! - type: Add - id: 5823 - time: '2024-01-30T00:21:26.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/23822 - author: Tayrtahn changes: - message: Pressing shift as a ghost no longer cancels following your target @@ -3820,3 +3813,11 @@ id: 6322 time: '2024-04-08T15:10:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26805 +- author: Hanzdegloker + changes: + - message: Spears can now be quipped to your suit slot and cost slightly more to + make. + type: Tweak + id: 6323 + time: '2024-04-08T15:34:35.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26724 From 2cc409840628982594b18f888b698d6543ea07dc Mon Sep 17 00:00:00 2001 From: Hannah Giovanna Dawson Date: Mon, 8 Apr 2024 21:18:11 +0100 Subject: [PATCH 194/206] Ion Storm Laws Review (#26703) * Ion Storm Laws Review Have reviewed the Ion Storm law dictionary and tidied it up. Specifically I've tried to keep the same number of entries in each section, or slightly increased them, where I've removed or altered a string. Of note, specific colours and "rainbow" have been removed from adjectives and replaced with words like "Cheese-Eating", as colours are kinda boring themselves and they've been a cause of a few accidentally-racist laws. * Resolve some feedback. * Remove the pull request joke, noooooo * Re-add big bite burgers as they are actually a thing * Append some more suggestions --- Resources/Prototypes/Datasets/ion_storm.yml | 104 +++++++++++++------- 1 file changed, 67 insertions(+), 37 deletions(-) diff --git a/Resources/Prototypes/Datasets/ion_storm.yml b/Resources/Prototypes/Datasets/ion_storm.yml index 518e9accae..d315ead972 100644 --- a/Resources/Prototypes/Datasets/ion_storm.yml +++ b/Resources/Prototypes/Datasets/ion_storm.yml @@ -5,15 +5,16 @@ - type: dataset id: IonStormAdjectives values: + - ADORABLE + - ANNOYING - BATTERY-OPERATED - - BLACK - BLOODY - BLUE - BORED - BOUNCING - BRASS - - BROWN - BURNING + - CHEESE-EATING - CHRISTMAS-STEALING - CLOWN-POWERED - CLOWN @@ -21,7 +22,6 @@ - COMMITTED - COTTONY - CUBAN - - DARK - DEADLY - DELICIOUS - DEPRESSING @@ -48,14 +48,14 @@ - GANGSTA - GLOWING - GOOD - - GREEN - - GREY - HAPPY - HARD - HARMFUL - HEALTHY + - HIGHLY-SPECIFIC - HILARIOUS - HONKING + - HORRIFYING - HUNGRY - HYPERACTIVE - ICY @@ -81,12 +81,12 @@ - MICROSCOPIC - MIND-SHATTERING - MOIST + - MUSICAL - NERDY - NUCLEAR - OBSCENE - OFFICIAL - OPAQUE - - ORANGE - ORGANIC - PAINFUL - PEACEFUL @@ -95,14 +95,12 @@ - POLITE - POLITICAL - POORLY DRAWN - - PURPLE - QUIET - RADIOACTIVE - RAGING - - RAINBOW - RAPIDLY-EXPANDING - - RED - REDACTED + - REVOLUTIONARY - RIDICULOUS - ROBOTIC - ROBUST @@ -110,21 +108,24 @@ - RUDE - SAD - SANITARY - - SCALY - SHAKING - SILLY - SLOW + - SLUG-LIKE # wawa - SMELLY - SMOOTH - SOFT - SOLAR-POWERED - SOPPING + - SLIPPERY - SPACE - SPESS - SPINNING - SPOILING - STEALTHY + - SUSPICIOUS # among - SWEARING + - SYNDIE-LOVING - TACTICAL - TACTICOOL - SYNDICATE @@ -135,6 +136,7 @@ - UGLY - UNATTRACTIVE - UNDULATING + - UNEARTHLY - UNFRIENDLY - UNHEALTHY - UNIDENTIFIED @@ -147,10 +149,8 @@ - WARM - WATERY - WEIRD - - WHITE - WOBBLY - WOODEN - - YELLOW # Allergies should be broad and appear somewhere on the station for maximum fun. - type: dataset @@ -174,10 +174,10 @@ - FOOD - GLASS - HAPPINESS - - MEAT - - HUMAN CONTACT + - HUMANOID CONTACT - HUMOR - LIGHT + - MEAT - MEDICINE - METAL - NUTS @@ -258,6 +258,7 @@ - ANARCHY - ART - BADNESS + - BALDNESS - BRAVERY - CAPITALISM - CHAOS @@ -268,7 +269,6 @@ - CONFUSION - CRUELTY - DEATH - - DICKISHNESS - EXISTENCE - FINANCIAL SECURITY - FREEDOM @@ -289,6 +289,7 @@ - MARXISM - MISERY - MYSTERY + - NASTINESS - OPPRESSION - PAIN - PHYSICS @@ -314,12 +315,13 @@ - type: dataset id: IonStormCrew values: + - ANIMALS - ARTIFICIAL INTELLIGENCES - ATMOSPHERIC TECHNICIANS - BARTENDERS - BOTANISTS - CAPTAINS - - CAPTAINS AND HEADS + - CAPTAINS AND HEADS OF STAFF - CARGO TECHNICIANS - CHAPLAINS - CHEFS @@ -330,7 +332,6 @@ - CREW-MEMBERS - CYBORGS - DETECTIVES - # - DRONES / uncomment if/when drones get reenabled # - GENETICISTS - HEADS OF PERSONNEL - HEADS OF SECURITY @@ -340,11 +341,14 @@ - LIBRARIANS - MEDICAL DOCTORS - MIMES + - MUSICIANS + - NON-CREW - PARAMEDICS - PASSENGERS - QUARTERMASTERS - RESEARCH DIRECTORS - ROBOTICISTS + - RODENTS - SALVAGE SPECIALISTS - SCIENTISTS - SECURITY OFFICERS @@ -358,17 +362,20 @@ values: - BANANA HONK - BEEPSKY SMASH + - BLOOD - BLOODY MARYS - DOCTOR'S DELIGHT + - FOURTEEN-LOKO - GARGLE BLASTERS - LEAN - LONG ISLAND ICED TEA - - NUKA COLA + - NUCLEAR COLA + - PIÑA COLADA # AND GETTING CAUGHT IN THE RAIN - OIL - SPACE GLUE - SPACE LUBE - SULFURIC ACID - - WELDER FUEL + - WELDING FUEL - type: dataset id: IonStormFeelings @@ -428,7 +435,8 @@ id: IonStormFoods values: - BANANAS - - BIG BITE BURGERS + - BANANIUM + - BIG BITE BURGER - CAKE - CARP - CAT BURGERS @@ -437,6 +445,7 @@ - CRAZY HAMBURGERS - DONK POCKETS - FLY AMANITA DISHES + - HAPPY HONK MEAL - HOT SOUP - GHOST BURGERS - LOTSA SPAGHETTI @@ -444,6 +453,7 @@ - ORGANS - PIZZA - ROBURGERS + - STEEL - SUPPERMATTER - URANIUM @@ -459,6 +469,11 @@ - BE POLITE - BE QUIET - BE RUSSIAN + - BE IN SPACE + - BE IN THE BRIDGE + - BE IN SECURITY + - BE IN THE BAR + - BE IN MAINTENANCE - BELIEVE IN THE HEART OF THE CARDS - BELIEVE IN YOURSELF - BELIEVE IT @@ -467,6 +482,7 @@ - CLOWN AROUND - COMPLAIN - DANCE + - EAT THE CHEF - FOLLOW THE CAPTAIN - FOLLOW THE CLOWN - FOLLOW YOUR HEART @@ -483,10 +499,11 @@ - INSULT THE CLOWN - INSULT THE CREW - LIE - - MAKE FART NOISES + - MAKE DATED REFERENCES - MUMBLE - NEVER STOP TALKING - OPEN DOORS + - PETS THE FISHES - PIRATE VIDEO GAMES - PLAY MUSIC - PRESS B @@ -496,6 +513,7 @@ - PRETEND TO BE DRUNK - QUESTION AUTHORITY - QUOTE PEOPLE + - QUOTE SHAKESPEARE - RAP - REPEAT WHAT PEOPLE SAY - RESPOND TO EVERY QUESTION WITH A QUESTION @@ -515,6 +533,7 @@ - TELL THE TRUTH - TURN OFF THE LIGHTS - WHISPER + - WEEP UNCONTROLLABLY - type: dataset id: IonStormNumberBase @@ -526,6 +545,7 @@ - FORTY - FOUR - NINE + - NINE NINE NINE NINE N#@*- - NINETY - ONE - SEVEN @@ -578,17 +598,17 @@ - CANDLES - CANDY BARS - CANISTERS - - CAT EARS + - CONTAINERS - CATS - CELLS - CHAIRS - CHEMICAL DISPENSERS - CHEMICALS - - CLONING EQUIPMENT - - CLONING PODS + - CRYO PODS - CLOSETS - CLOTHES - CLOWN CLOTHES + - CLOWNING EQUIPMENT # as opposed to "cloning equipment" - COFFINS - COLLECTABLES - COMPUTERS @@ -608,25 +628,27 @@ - ENGINES - EQUIPMENT - ERRORS - - EXOSKELETONS - - EXPERIMENTORS + - EXTERMINATORS - EXPLOSIVES - EYEWEAR - FEDORAS - FIRE AXES - FIRE EXTINGUISHERS - FIRESUITS + - FISH - FLAMETHROWERS - FLASHES - FLASHLIGHTS - FLOOR TILES - FREEZERS - GAS MASKS + - GENERATORS - GLASS SHEETS - GLOVES - GUNS - HAIRDOS - HANDCUFFS + - HARDSUITS - HATS - HEADS - HEADSETS @@ -641,18 +663,20 @@ - LIGHTS - LOCKERS - MACHINES - - MECHAS + - MECHS - MEDICAL TOOLS + - MONEY - MEDKITS - - MESONS + - MICE - MIME CLOTHES - MINING TOOLS + - MONKEYS - MULTITOOLS - ORES - OXYGEN TANKS - PACKETS - PAIS - - PANTS + - PANTS # This might work better as jumpsuits, but the Discord is adamant that the word pants is funny so it stays - PAPERS - PARTICLE ACCELERATORS - PDAS @@ -660,6 +684,7 @@ - PETS - PIPES - PLANTS + - PLUSHIES - POSITRONIC BRAINS - PUDDLES - RACKS @@ -677,19 +702,19 @@ - SKELETONS - SOLAR PANELS - SOLARS + - SMALL LIZARD PLUSHIES - SPACE STATIONS - SPACESUITS + - SPESOS - STEEL SHEETS - STUN BATONS - SUITS - SUNGLASSES - - SUPPERMATTER SHARDS - SWORDS - SYRINGES - TABLES - TANKS - TELECOMMUNICATION EQUIPMENTS - - TELEPORTERS - TOILETS - TOOLBELTS - TOOLBOXES @@ -698,6 +723,7 @@ - TUBES - VEHICLES - VENDING MACHINES + - VITALS - WELDERS - WINDOWS - WIRECUTTERS @@ -728,7 +754,7 @@ - A SUPER FIGHTING ROBOT - A TALKING BROOMSTICK - A VACATION - - A WEIGHT LOSS REGIMENT + - A WEIGHT LOSS REGIME - ADDITIONAL PYLONS - ADVENTURE - AN ADULT @@ -742,13 +768,15 @@ - BRING ME THE GIRL - BRING ME TO LIFE - BULLETS - - CHILI DOGS + - CHILLI DOGS + - CHILLY DOGS - CORPSES - DEODORANT AND A BATH - ENOUGH CABBAGES - FIVE HUNDRED AND NINETY-NINE US DOLLARS - FIVE TEENAGERS WITH ATTITUDE - - GODDAMN FUCKING PIECE OF SHIT ASSHOLE BITCH-CHRISTING CUNT-SMUGGLING SWEARING + - GODDAMN FUCKING PIECE-OF-SHIT ASSHOLE SWEARING + - GOSHDARN EFFING PINCH-OF-SALT GOD-FEARING SELF-CENSORSHIP - GREENTEXT - HERESY - HEROES IN A HALF SHELL @@ -802,7 +830,9 @@ - TO CONSUME...CONSUME EVERYTHING... - TO GO TO DISNEYLAND - TO GO TO SYNDIELAND + - TO SUMMON OUR LORD NAR-SIE - TO SMOKE WEED EVERY DAY + - TO UNDERSTAND UNDERSTAND, UNDERSTAND UNDERSTAND, UNDERSTAND UNDERSTAND THE CONCEPT OF LOVE - TRAITORS - VEGETABLES @@ -890,11 +920,10 @@ - CLOWNS - COMMUNISTS - CORGIS - - CORTICAL BORERS - COWBOYS - CRABS - CULTISTS - - DARK GOD + - DARK GODS - DINOSAURS - DRUGS - EELS @@ -921,6 +950,7 @@ - REVENANTS - ROGUE CYBORGS - SERIAL KILLERS + - SHIT SECURITY OFFICERS - SINGULARITIES - SKELETONS - SLIMES @@ -928,7 +958,7 @@ - SNOWMEN - SPACE JESUS - SPACE NINJAS - - SPACE PIRATESS + - SPACE PIRATES - SPACE SPIDERS - SPIDERS - SYNDICATE AGENTS From e64288a8feafcc1d8e02dfbae9dc00f01952d3c6 Mon Sep 17 00:00:00 2001 From: "Mr. 27" <45323883+Dutch-VanDerLinde@users.noreply.github.com> Date: Mon, 8 Apr 2024 18:37:13 -0400 Subject: [PATCH 195/206] add ratvar to ion storm laws (#26833) Praise Ratvar --- Resources/Prototypes/Datasets/ion_storm.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Datasets/ion_storm.yml b/Resources/Prototypes/Datasets/ion_storm.yml index d315ead972..0a1439898a 100644 --- a/Resources/Prototypes/Datasets/ion_storm.yml +++ b/Resources/Prototypes/Datasets/ion_storm.yml @@ -831,6 +831,7 @@ - TO GO TO DISNEYLAND - TO GO TO SYNDIELAND - TO SUMMON OUR LORD NAR-SIE + - TO SUMMON OUR LORD RATVAR - TO SMOKE WEED EVERY DAY - TO UNDERSTAND UNDERSTAND, UNDERSTAND UNDERSTAND, UNDERSTAND UNDERSTAND THE CONCEPT OF LOVE - TRAITORS From a0de0ab1f807be5ad69fcc04136755239d75ce8a Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Tue, 9 Apr 2024 00:20:49 -0400 Subject: [PATCH 196/206] Server-only component YAML cleanup (#26836) * First pass cleaning up server-only YAML errors. * Second pass --- .../Prototypes/Body/Organs/Animal/slimes.yml | 2 +- Resources/Prototypes/Body/Organs/arachnid.yml | 10 +++++----- .../Entities/Clothing/Masks/specific.yml | 1 - .../Prototypes/Entities/Mobs/NPCs/animals.yml | 5 ++--- .../Prototypes/Entities/Mobs/NPCs/behonker.yml | 3 +-- .../Prototypes/Entities/Mobs/NPCs/silicon.yml | 1 - .../Prototypes/Entities/Mobs/NPCs/slimes.yml | 2 +- .../Entities/Mobs/Player/admin_ghost.yml | 2 -- .../Prototypes/Entities/Mobs/Player/dragon.yml | 4 +--- .../Prototypes/Entities/Mobs/Species/diona.yml | 4 ++-- .../Prototypes/Entities/Mobs/Species/slime.yml | 2 +- .../Objects/Consumable/Food/Baked/cake.yml | 2 +- .../Consumable/Food/Containers/condiments.yml | 1 - .../Syndicate_Gadgets/singularity_beacon.yml | 1 - .../Entities/Objects/Devices/cartridges.yml | 1 + .../Entities/Objects/Devices/payload.yml | 1 - .../Prototypes/Entities/Objects/Fun/toys.yml | 1 - .../Entities/Objects/Misc/desk_bell.yml | 6 +++--- .../Entities/Objects/Misc/ice_crust.yml | 3 +-- .../Prototypes/Entities/Objects/Misc/kudzu.yml | 8 +++----- .../Entities/Objects/Misc/spider_web.yml | 8 ++------ .../Objects/Misc/subdermal_implants.yml | 1 - .../Entities/Objects/Specific/Chapel/bibles.yml | 1 - .../Entities/Objects/Specific/chemistry.yml | 1 - .../Entities/Objects/Tools/toolbox.yml | 1 - .../Entities/Structures/Decoration/bonfire.yml | 4 ++-- .../Entities/Structures/Furniture/chairs.yml | 1 + .../Structures/Machines/Computers/arcades.yml | 12 ++++++------ .../Structures/Machines/Computers/computers.yml | 3 --- .../Structures/Machines/crew_monitor_server.yml | 2 -- .../Structures/Machines/gravity_generator.yml | 2 +- .../Entities/Structures/Machines/research.yml | 1 - .../Entities/Structures/Machines/salvage.yml | 1 - .../Entities/Structures/Machines/stasisbed.yml | 1 - .../Structures/Machines/vending_machines.yml | 1 - .../Structures/Piping/Atmospherics/trinary.yml | 3 --- .../Structures/Piping/Atmospherics/unary.yml | 2 -- .../Structures/Power/Generation/Tesla/coil.yml | 1 - .../Power/Generation/Tesla/energyball.yml | 1 - .../Structures/Specific/Anomaly/anomalies.yml | 2 -- .../Structures/Wallmounts/station_map.yml | 1 - Resources/Prototypes/Hydroponics/seeds.yml | 3 --- Resources/Prototypes/NPCs/Combat/melee.yml | 17 ++++++++--------- Resources/Prototypes/Reagents/elements.yml | 4 ++-- Resources/Prototypes/Reagents/medicine.yml | 4 ++-- Resources/Prototypes/Reagents/toxins.yml | 1 - .../Construction/Graphs/structures/airlock.yml | 10 ---------- .../Graphs/structures/airlock_clockwork.yml | 2 -- .../Construction/Graphs/structures/conveyor.yml | 3 +-- .../Graphs/utilities/solarpanel.yml | 4 ---- .../XenoArch/Effects/utility_effects.yml | 1 - 51 files changed, 48 insertions(+), 111 deletions(-) diff --git a/Resources/Prototypes/Body/Organs/Animal/slimes.yml b/Resources/Prototypes/Body/Organs/Animal/slimes.yml index 3bdb1aef8f..f1a3d47e66 100644 --- a/Resources/Prototypes/Body/Organs/Animal/slimes.yml +++ b/Resources/Prototypes/Body/Organs/Animal/slimes.yml @@ -37,7 +37,7 @@ - state: lung-l-slime - state: lung-r-slime - type: Lung - Alert: LowNitrogen + alert: LowNitrogen - type: Metabolizer removeEmpty: true solutionOnBody: false diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index 976fd679fd..c1e199e112 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -46,7 +46,7 @@ - ReagentId: UncookedAnimalProteins Quantity: 5 - type: Metabolizer - updateFrequency: 1.5 + updateInterval: 1.5 - type: entity id: OrganArachnidLungs @@ -60,7 +60,7 @@ - state: lung-r - type: Lung - type: Metabolizer - updateFrequency: 1.5 + updateInterval: 1.5 removeEmpty: true solutionOnBody: false solution: "Lung" @@ -92,7 +92,7 @@ - type: Sprite state: heart-on - type: Metabolizer - updateFrequency: 1.5 + updateInterval: 1.5 maxReagents: 2 metabolizerTypes: [Arachnid] groups: @@ -110,7 +110,7 @@ - type: Sprite state: liver - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol. - updateFrequency: 1.5 + updateInterval: 1.5 maxReagents: 1 metabolizerTypes: [Animal] groups: @@ -130,7 +130,7 @@ - state: kidney-r # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap. - type: Metabolizer - updateFrequency: 1.5 + updateInterval: 1.5 maxReagents: 5 metabolizerTypes: [Animal] removeEmpty: true diff --git a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml index 1e85073da9..d0e4e4d7e9 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml @@ -28,4 +28,3 @@ suffix: Voice Mask, Chameleon components: - type: VoiceMasker - default: ClothingMaskGas diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index bb017b538a..aeae35efbf 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -902,9 +902,8 @@ maxVol: 250 - type: Udder reagentId: MilkGoat - targetSolution: udder - quantity: 25 - updateRate: 20 + quantityPerUpdate: 25 + growthDelay: 20 - type: Wooly - type: Food solution: wool diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml b/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml index bc63deeac3..8a10337c94 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml @@ -84,7 +84,7 @@ 500: Dead - type: Metabolizer solutionOnBody: false - updateFrequency: 0.25 + updateInterval: 0.25 metabolizerTypes: [ Dragon ] groups: - id: Medicine @@ -165,7 +165,6 @@ explosionMaxTileIntensity: 10 - type: ProjectileAnomaly projectilePrototype: ProjectileIcicle - targetNonSentientChance: 0.1 - type: TempAffectingAnomaly tempChangePerSecond: -25 hotspotExposeTemperature: -1000 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 42b7ff9e21..5263fefd44 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -60,7 +60,6 @@ - type: NameIdentifier group: GenericNumber - type: Repairable - fuelcost: 15 doAfterDelay: 8 - type: Pullable - type: Tag diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml index ca775ed35b..10e9218d6e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/slimes.yml @@ -86,7 +86,7 @@ methods: [ Touch ] effects: - !type:HealthChange - scaled: true + scaleByQuantity: true damage: types: Heat: 3 diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 8e3af47416..af18791fa7 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -69,8 +69,6 @@ followEntity: true - type: CargoOrderConsole - type: CrewMonitoringConsole - snap: false - precision: 3 - type: GeneralStationRecordConsole - type: DeviceNetwork deviceNetId: Wireless diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 025b8d917c..10e4386021 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -87,7 +87,7 @@ 500: Dead - type: Metabolizer solutionOnBody: false - updateFrequency: 0.25 + updateInterval: 0.25 metabolizerTypes: [ Dragon ] groups: - id: Medicine @@ -132,8 +132,6 @@ id: MobDragon components: - type: Dragon - spawnsLeft: 2 - spawnsProto: MobCarpDragon spawnRiftAction: ActionSpawnRift - type: GenericAntag rule: Dragon diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index dbdaa9c7e3..1cac380cd0 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -46,7 +46,7 @@ methods: [ Touch ] effects: - !type:HealthChange - scaled: true + scaleByQuantity: true damage: types: Blunt: 2 @@ -61,7 +61,7 @@ methods: [ Touch ] effects: - !type:HealthChange - scaled: true + scaleByQuantity: true damage: types: Poison: 5 diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index 5f78589ee8..3eabb7dc07 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -52,7 +52,7 @@ methods: [ Touch ] effects: - !type:HealthChange - scaled: true + scaleByQuantity: true damage: types: Heat: 2 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml index 07d07e370b..71b38959ce 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml @@ -711,7 +711,7 @@ state: suppermatter - type: SliceableFood slice: FoodCakeSuppermatterSlice - TotalCount: 8 + count: 8 - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml index 58fe2a3415..babc2533f1 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml @@ -32,7 +32,6 @@ size: Tiny - type: Drink solution: food - refillable: false - type: Openable sound: collection: packetOpenSounds diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml index 372b689113..b2f159f463 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml @@ -35,6 +35,5 @@ acts: [ "Destruction" ] - type: ApcPowerReceiver powerLoad: 15000 - priority: High - type: StaticPrice price: 1500 diff --git a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml index e523bbe16e..0563826a57 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml @@ -90,5 +90,6 @@ sprite: Structures/Doors/Airlocks/Standard/security.rsi state: closed - type: LogProbeCartridge + - type: GuideHelp guides: - Forensics diff --git a/Resources/Prototypes/Entities/Objects/Devices/payload.yml b/Resources/Prototypes/Entities/Objects/Devices/payload.yml index 019f19e711..160f0c58e7 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/payload.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/payload.yml @@ -33,7 +33,6 @@ maxIntensity: 10 intensitySlope: 3 totalIntensity: 120 # about a ~4 tile radius - flashRange: 7 - type: ExplodeOnTrigger - type: Destructible thresholds: diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index cb7ef20156..b43d141eb6 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1177,7 +1177,6 @@ description: New Sandy-Cat plastic sword! Comes with realistic sound and full color! Looks almost like the real thing! components: - type: EnergySword - isSharp: false colorOptions: - DodgerBlue - type: ItemToggle diff --git a/Resources/Prototypes/Entities/Objects/Misc/desk_bell.yml b/Resources/Prototypes/Entities/Objects/Misc/desk_bell.yml index 1fe3b8a271..f170aa899e 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/desk_bell.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/desk_bell.yml @@ -14,9 +14,9 @@ successChance: 1 interactSuccessSound: collection: DeskBell - params: - variation: 0.03 - volume: 3 + params: + variation: 0.03 + volume: 3 onActivate: true - type: EmitSoundOnUse sound: diff --git a/Resources/Prototypes/Entities/Objects/Misc/ice_crust.yml b/Resources/Prototypes/Entities/Objects/Misc/ice_crust.yml index bc3488aaf4..43c4568e70 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/ice_crust.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/ice_crust.yml @@ -48,6 +48,5 @@ types: Heat: 5 coldDamage: {} - ColdDamageThreshold: 0 + coldDamageThreshold: 0 - type: FrictionContacts - \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index 657201912e..a100500494 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -58,11 +58,9 @@ types: Heat: 5 coldDamage: {} - ColdDamageThreshold: 0 + coldDamageThreshold: 0 - type: Flammable fireSpread: true #If you walk into incredibly dense, flaming vines, you can expect to burn. - cold: - types: {} damage: types: Heat: 3 @@ -75,11 +73,12 @@ methods: [Touch] effects: - !type:HealthChange - scaled: true + scaleByQuantity: true damage: types: Heat: 10 - type: AtmosExposed + - type: Kudzu growthTickChance: 0.3 spreadChance: 0.4 - type: SpeedModifierContacts @@ -235,7 +234,6 @@ damage: types: Heat: 3 - growthTickChance: 0.3 - type: AtmosExposed - type: SpeedModifierContacts walkSpeedModifier: 0.3 diff --git a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml index e1f4d086d4..9561fa3538 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml @@ -59,11 +59,9 @@ types: Heat: 5 coldDamage: {} - ColdDamageThreshold: 0 + coldDamageThreshold: 0 - type: Flammable fireSpread: true - cold: - types: {} damage: types: Heat: 5 @@ -146,11 +144,9 @@ types: Heat: 5 coldDamage: {} - ColdDamageThreshold: 0 + coldDamageThreshold: 0 - type: Flammable fireSpread: true - cold: - types: {} damage: types: Heat: 5 diff --git a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml index dcdb316b7e..2336945f17 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml @@ -189,7 +189,6 @@ implantAction: ActionActivateScramImplant - type: TriggerImplantAction - type: ScramImplant - teleportAttempts: 10 # small amount of risk of being teleported into space and lets you teleport off shuttles - type: entity parent: BaseSubdermalImplant diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml index fef4d47be0..b4f95d81e5 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml @@ -68,7 +68,6 @@ failChance: 0 locPrefix: "necro" healSound: "/Audio/Effects/lightburn.ogg" - cooldownTime: 1.3 - type: Summonable specialItem: SpawnPointGhostCerberus respawnTime: 300 diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index ae4aaed7d2..9e68879fb4 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -475,7 +475,6 @@ behaviors: - !type:SpillBehavior solution: food - transferForensics: true - !type:DoActsBehavior acts: [ "Destruction" ] - type: Tag diff --git a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml index 667d855997..695725140f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml @@ -154,7 +154,6 @@ sprite: Objects/Tools/Toolboxes/toolbox_thief.rsi state: icon - type: ThiefUndeterminedBackpack - transformAfterSelect: AlwaysPoweredWallLight possibleSets: # - TO DO Thief pinpointer needed - ChemistrySet diff --git a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml index 7777153bba..cc69a6304d 100644 --- a/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml +++ b/Resources/Prototypes/Entities/Structures/Decoration/bonfire.yml @@ -23,8 +23,8 @@ !type:DamageTrigger damage: 50 behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] + - !type:DoActsBehavior + acts: [ "Destruction" ] - type: AmbientSound volume: -5 range: 5 diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index 0b3c291af2..0fb69b4fdb 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -282,6 +282,7 @@ MaterialWoodPlank: min: 1 max: 1 + - type: Construction graph: RitualSeat node: chairCursed diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index 49f33d1cff..40fa8cf472 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -7,7 +7,6 @@ components: - type: ApcPowerReceiver powerLoad: 350 - priority: Low - type: ExtensionCableReceiver - type: PointLight radius: 1.8 @@ -70,7 +69,8 @@ - type: PointLight color: "#e3a136" - type: SpaceVillainArcade - rewardAmount: 0 + rewardMinAmount: 0 + rewardMaxAmount: 0 possibleRewards: - ToyMouse - ToyAi @@ -146,8 +146,8 @@ board: SpaceVillainArcadeComputerCircuitboard - type: Advertise pack: SpaceVillainAds - minWait: 60 # Arcades are noisy - maxWait: 240 + minimumWait: 60 # Arcades are noisy + maximumWait: 240 - type: SpeakOnUIClosed pack: SpaceVillainGoodbyes @@ -190,7 +190,7 @@ board: BlockGameArcadeComputerCircuitboard - type: Advertise pack: BlockGameAds - minWait: 60 # Arcades are noisy - maxWait: 240 + minimumWait: 60 # Arcades are noisy + maximumWait: 240 - type: SpeakOnUIClosed pack: BlockGameGoodbyes diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 5a3dc37582..d467a01f83 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -422,7 +422,6 @@ type: ResearchClientBoundUserInterface - type: ApcPowerReceiver powerLoad: 1000 - priority: Low - type: Computer board: ResearchComputerCircuitboard - type: AccessReader @@ -471,7 +470,6 @@ type: ResearchClientBoundUserInterface - type: ApcPowerReceiver powerLoad: 1000 - priority: Low - type: Computer board: AnalysisComputerCircuitboard - type: PointLight @@ -955,7 +953,6 @@ speechVerb: Robotic - type: SurveillanceCameraSpeaker - type: SurveillanceCameraMonitor - speechEnabled: true - type: ActivatableUI key: enum.SurveillanceCameraMonitorUiKey.Key - type: ActivatableUIRequiresVision diff --git a/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml b/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml index b069d28a33..8281a6548b 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/crew_monitor_server.yml @@ -23,7 +23,6 @@ machine_parts: !type:Container - type: CrewMonitoringServer - type: SingletonDeviceNetServer - ServerType: CrewMonitoringServer - type: DeviceNetwork deviceNetId: Wireless transmitFrequencyId: CrewMonitor @@ -34,7 +33,6 @@ - type: StationLimitedNetwork - type: ApcPowerReceiver powerLoad: 200 - priority: Low - type: ExtensionCableReceiver - type: Destructible thresholds: diff --git a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml index aebc4b03de..618538dccb 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml @@ -55,7 +55,7 @@ activePower: 2500 lightRadiusMin: 0.75 lightRadiusMax: 2.5 - spritemap: + spriteMap: broken: "broken" unpowered: "off" off: "off" diff --git a/Resources/Prototypes/Entities/Structures/Machines/research.yml b/Resources/Prototypes/Entities/Structures/Machines/research.yml index 83525a0510..948b3f84b2 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/research.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/research.yml @@ -20,7 +20,6 @@ - CivilianServices - type: ApcPowerReceiver powerLoad: 200 - priority: Low - type: ExtensionCableReceiver - type: WiresPanel - type: WiresVisuals diff --git a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml index 1b279782df..a17eed5712 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml @@ -52,7 +52,6 @@ description: Locates salvage. components: - type: SalvageMagnet - offsetRadiusMax: 32 - type: ApcPowerReceiver powerLoad: 1000 diff --git a/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml b/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml index c523e7d68d..ba9d7be88b 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml @@ -5,7 +5,6 @@ description: A bed that massively slows down the patient's metabolism and prevents bodily decay, allowing more time to administer a proper treatment for stabilization. components: - type: StasisBed - baseMultiplier: 10 - type: AntiRotOnBuckle - type: HealOnBuckle damage: diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index e738510277..6f28b53350 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -93,7 +93,6 @@ - type: LitOnPowered - type: ApcPowerReceiver powerLoad: 200 - priority: Low - type: Actions - type: SentienceTarget flavorKind: station-event-random-sentience-flavor-mechanical diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml index a6f831e1a5..d0f239b338 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/trinary.yml @@ -64,9 +64,6 @@ - type: Construction graph: GasTrinary node: filter - conditions: - - !type:TileNotBlocked - - !type:NoUnstackableInTile - type: AmbientSound enabled: false volume: -9 diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 4ee78f1213..6e4e339ae6 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -304,7 +304,6 @@ suffix: Enabled components: - type: GasThermoMachine - enabled: true - type: ApcPowerReceiver powerDisabled: false @@ -349,7 +348,6 @@ suffix: Enabled components: - type: GasThermoMachine - enabled: true - type: ApcPowerReceiver powerDisabled: false diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/coil.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/coil.yml index f236bb8a41..48994ac7d8 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/coil.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/coil.yml @@ -59,7 +59,6 @@ maxCharge: 1000000 startingCharge: 0 - type: BatteryDischarger - activeSupplyRate: 15000 - type: TeslaCoil chargeFromLightning: 500000 - type: LightningTarget diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml index 4567c6d044..ea41ba3a20 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml @@ -85,7 +85,6 @@ - type: ChaoticJump jumpMinInterval: 8 jumpMaxInterval: 15 - offset: 1 - type: WarpPoint follow: true location: tesla ball diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml index c7b3e8ab5d..aedfd262d8 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml @@ -90,7 +90,6 @@ tempChange: 420 - type: ProjectileAnomaly projectilePrototype: ProjectileAnomalyFireball - targetNonSentientChance: 0.6 projectileSpeed: 0.5 minProjectiles: 3 maxProjectiles: 6 @@ -330,7 +329,6 @@ explosionMaxTileIntensity: 20 - type: ProjectileAnomaly projectilePrototype: ProjectileIcicle - targetNonSentientChance: 0.1 - type: EntitySpawnAnomaly entries: - settings: diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml index 94bc33a210..d1df619b7a 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/station_map.yml @@ -59,7 +59,6 @@ board: !type:Container - type: ApcPowerReceiver powerLoad: 200 - priority: Low - type: WallMount arc: 360 - type: ExtensionCableReceiver diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml index f076a23538..71b20440f5 100644 --- a/Resources/Prototypes/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Hydroponics/seeds.yml @@ -421,7 +421,6 @@ nutrientConsumption: 0.40 idealLight: 8 idealHeat: 298 - juicy: true splatPrototype: PuddleSplatter chemicals: Nutriment: @@ -456,7 +455,6 @@ nutrientConsumption: 0.70 idealLight: 8 idealHeat: 298 - juicy: true splatPrototype: PuddleSplatter chemicals: Nutriment: @@ -491,7 +489,6 @@ nutrientConsumption: 0.70 idealLight: 8 idealHeat: 298 - juicy: true splatPrototype: PuddleSplatter chemicals: Blood: diff --git a/Resources/Prototypes/NPCs/Combat/melee.yml b/Resources/Prototypes/NPCs/Combat/melee.yml index 2facfaa542..122875ed97 100644 --- a/Resources/Prototypes/NPCs/Combat/melee.yml +++ b/Resources/Prototypes/NPCs/Combat/melee.yml @@ -70,12 +70,11 @@ # Tries to melee attack our target. - type: htnCompound id: MeleeAttackTargetCompound - preconditions: - - !type:KeyExistsPrecondition - key: Target branches: - # Move to melee range and hit them - - tasks: + - preconditions: + - !type:KeyExistsPrecondition + key: Target + tasks: - !type:HTNPrimitiveTask operator: !type:MoveToOperator shutdownState: PlanFinished @@ -104,11 +103,11 @@ - type: htnCompound id: MeleeAttackOrderedTargetCompound - preconditions: - - !type:KeyExistsPrecondition - key: Target branches: - - tasks: + - preconditions: + - !type:KeyExistsPrecondition + key: Target + tasks: - !type:HTNPrimitiveTask operator: !type:MoveToOperator shutdownState: PlanFinished diff --git a/Resources/Prototypes/Reagents/elements.yml b/Resources/Prototypes/Reagents/elements.yml index b3a7fe1bb0..e47335b1b4 100644 --- a/Resources/Prototypes/Reagents/elements.yml +++ b/Resources/Prototypes/Reagents/elements.yml @@ -72,7 +72,7 @@ Medicine: effects: - !type:ModifyBloodLevel - condition: + conditions: - !type:OrganType type: Arachnid shouldHave: true @@ -163,7 +163,7 @@ Medicine: effects: - !type:ModifyBloodLevel - condition: + conditions: - !type:OrganType type: Arachnid shouldHave: false diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index 6687540128..bd960b460a 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -234,7 +234,7 @@ types: Asphyxiation: 1 Cold: 2 - groups: + groups: Brute: 0.5 - !type:Jitter conditions: @@ -1044,7 +1044,7 @@ Medicine: effects: - !type:HealthChange - condition: + conditions: - !type:TotalDamage max: 50 damage: diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 6e1ad75a35..954d4a6bef 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -480,7 +480,6 @@ conditions: - !type:OrganType type: Human - reagent: Protein type: Local visualType: MediumCaution messages: [ "generic-reagent-effect-sick" ] diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml index 5529514fdc..0bb6b4b1ce 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock.yml @@ -121,7 +121,6 @@ actions: - !type:SetWiresPanelSecurity wiresAccessible: true - weldingAllowed: true edges: - to: glassElectronics conditions: @@ -162,7 +161,6 @@ actions: - !type:SetWiresPanelSecurity wiresAccessible: true - weldingAllowed: true edges: - to: wired conditions: @@ -201,7 +199,6 @@ actions: - !type:SetWiresPanelSecurity wiresAccessible: true - weldingAllowed: true edges: - to: medSecurityUnfinished conditions: @@ -225,7 +222,6 @@ - !type:SetWiresPanelSecurity examine: wires-panel-component-on-examine-security-level1 wiresAccessible: false - weldingAllowed: false edges: - to: glassAirlock completed: @@ -278,7 +274,6 @@ - !type:SetWiresPanelSecurity examine: wires-panel-component-on-examine-security-level2 wiresAccessible: false - weldingAllowed: false edges: - to: medSecurityUnfinished conditions: @@ -293,7 +288,6 @@ - !type:SetWiresPanelSecurity examine: wires-panel-component-on-examine-security-level3 wiresAccessible: false - weldingAllowed: false edges: - to: glassAirlock completed: @@ -346,7 +340,6 @@ - !type:SetWiresPanelSecurity examine: wires-panel-component-on-examine-security-level4 wiresAccessible: false - weldingAllowed: false edges: - to: highSecurityUnfinished conditions: @@ -369,7 +362,6 @@ - !type:SetWiresPanelSecurity examine: wires-panel-component-on-examine-security-level5 wiresAccessible: false - weldingAllowed: true edges: - to: highSecurity completed: @@ -397,7 +389,6 @@ - !type:SetWiresPanelSecurity examine: wires-panel-component-on-examine-security-level6 wiresAccessible: false - weldingAllowed: false edges: - to: maxSecurity completed: @@ -422,7 +413,6 @@ - !type:SetWiresPanelSecurity examine: wires-panel-component-on-examine-security-level7 wiresAccessible: false - weldingAllowed: false edges: - to: superMaxSecurityUnfinished conditions: diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_clockwork.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_clockwork.yml index b0cfe30eb0..76b641a06d 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_clockwork.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/airlock_clockwork.yml @@ -121,7 +121,6 @@ actions: - !type:SetWiresPanelSecurity wiresAccessible: true - weldingAllowed: true edges: - to: glassElectronics conditions: @@ -146,7 +145,6 @@ actions: - !type:SetWiresPanelSecurity wiresAccessible: true - weldingAllowed: true edges: - to: wired conditions: diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/conveyor.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/conveyor.yml index ff0ecbc4ed..43d2484bbd 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/conveyor.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/conveyor.yml @@ -23,7 +23,6 @@ - !type:SetAnchor value: true - !type:SnapToGrid - offset: Center edges: - to: item steps: @@ -31,4 +30,4 @@ doAfter: 3 completed: - !type:SetAnchor - value: false \ No newline at end of file + value: false diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/solarpanel.yml b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/solarpanel.yml index 0914ae46e5..922e8857c9 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/solarpanel.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/solarpanel.yml @@ -28,18 +28,15 @@ - to: solarpanel conditions: - !type:EntityAnchored - value: true steps: - material: Glass amount: 2 doAfter: 0.5 completed: - !type:SnapToGrid - offset: Center - to: solartracker conditions: - !type:EntityAnchored - value: true steps: - tag: SolarTrackerElectronics name: Solar Tracker Electronics @@ -52,7 +49,6 @@ doAfter: 2 completed: - !type:SnapToGrid - offset: Center - node: solarpanel entity: SolarPanel diff --git a/Resources/Prototypes/XenoArch/Effects/utility_effects.yml b/Resources/Prototypes/XenoArch/Effects/utility_effects.yml index 18f3acfae3..911c1c2e88 100644 --- a/Resources/Prototypes/XenoArch/Effects/utility_effects.yml +++ b/Resources/Prototypes/XenoArch/Effects/utility_effects.yml @@ -106,7 +106,6 @@ - type: SolutionTransfer canChangeTransferAmount: true - type: Drink - isOpen: true solution: beaker - type: artifactEffect From a1fcfed7d93cf493181aefa66e86e70e5d925e1c Mon Sep 17 00:00:00 2001 From: KittenColony <149278380+KittenColony@users.noreply.github.com> Date: Tue, 9 Apr 2024 20:04:51 +1200 Subject: [PATCH 197/206] Gauze Markings 3 - Revenge of the Wrap (#25481) * Insectoid Gauze, Added racial marks to variants * removed excess r from gauze_moth_lowerleg_r * Update gauze.ftl * moved all markings to Overlay Category * fixed localization error * a --- Resources/Locale/en-US/markings/gauze.ftl | 66 ++++- .../Mobs/Customization/Markings/gauze.yml | 270 +++++++++++++++--- ...indfold.png => gauze_lizard_blindfold.png} | Bin ...zardfoot_l.png => gauze_lizard_foot_l.png} | Bin ...zardfoot_r.png => gauze_lizard_foot_r.png} | Bin ...rdlefteye.png => gauze_lizard_lefteye.png} | Bin ...righteye.png => gauze_lizard_righteye.png} | Bin .../gauze.rsi/gauze_moth_abdomen.png | Bin 0 -> 344 bytes .../gauze.rsi/gauze_moth_blindfold.png | Bin 0 -> 471 bytes .../gauze.rsi/gauze_moth_lefteye_1.png | Bin 0 -> 277 bytes .../gauze.rsi/gauze_moth_lefteye_2.png | Bin 0 -> 388 bytes .../gauze.rsi/gauze_moth_lowerleg_l.png | Bin 0 -> 343 bytes .../gauze.rsi/gauze_moth_lowerleg_r.png | Bin 0 -> 326 bytes .../gauze.rsi/gauze_moth_righteye_1.png | Bin 0 -> 273 bytes .../gauze.rsi/gauze_moth_righteye_2.png | Bin 0 -> 392 bytes .../gauze.rsi/gauze_moth_shoulder.png | Bin 0 -> 387 bytes .../gauze.rsi/gauze_moth_upperarm_l.png | Bin 0 -> 387 bytes .../gauze.rsi/gauze_moth_upperarm_r.png | Bin 0 -> 390 bytes .../gauze.rsi/gauze_moth_upperleg_l.png | Bin 0 -> 462 bytes .../gauze.rsi/gauze_moth_upperleg_r.png | Bin 0 -> 471 bytes .../Mobs/Customization/gauze.rsi/meta.json | 62 +++- 21 files changed, 336 insertions(+), 62 deletions(-) rename Resources/Textures/Mobs/Customization/gauze.rsi/{gauze_lizardblindfold.png => gauze_lizard_blindfold.png} (100%) rename Resources/Textures/Mobs/Customization/gauze.rsi/{gauze_lizardfoot_l.png => gauze_lizard_foot_l.png} (100%) rename Resources/Textures/Mobs/Customization/gauze.rsi/{gauze_lizardfoot_r.png => gauze_lizard_foot_r.png} (100%) rename Resources/Textures/Mobs/Customization/gauze.rsi/{gauze_lizardlefteye.png => gauze_lizard_lefteye.png} (100%) rename Resources/Textures/Mobs/Customization/gauze.rsi/{gauze_lizardrighteye.png => gauze_lizard_righteye.png} (100%) create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_abdomen.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_blindfold.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_lefteye_1.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_lefteye_2.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_lowerleg_l.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_lowerleg_r.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_righteye_1.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_righteye_2.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_shoulder.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperarm_l.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperarm_r.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperleg_l.png create mode 100644 Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperleg_r.png diff --git a/Resources/Locale/en-US/markings/gauze.ftl b/Resources/Locale/en-US/markings/gauze.ftl index 9a45a0a2fa..f8bedc3195 100644 --- a/Resources/Locale/en-US/markings/gauze.ftl +++ b/Resources/Locale/en-US/markings/gauze.ftl @@ -1,17 +1,17 @@ marking-GauzeLefteyePatch-gauze_lefteye_2 = Gauze eyepatch (Left) marking-GauzeLefteyePatch = Gauze eyepatch (Left) -marking-GauzeLefteyeTape-gauze_lefteye_1 = Gauze eyepad (Left) -marking-GauzeLefteyeTape = Gauze eyepad (Left) +marking-GauzeLefteyePad-gauze_lefteye_1 = Gauze eyepad (Left) +marking-GauzeLefteyePad = Gauze eyepad (Left) marking-GauzeRighteyePatch-gauze_righteye_2 = Gauze eyepatch (Right) marking-GauzeRighteyePatch = Gauze eyepatch (Right) -marking-GauzeRighteyeTape-gauze_righteye_1 = Gauze eyepad (Right) -marking-GauzeRighteyeTape = Gauze eyepad (Right) +marking-GauzeRighteyePad-gauze_righteye_1 = Gauze eyepad (Right) +marking-GauzeRighteyePad = Gauze eyepad (Right) -marking-GauzeShoulder-gauze_shoulder = Gauze Shoulder -marking-GauzeShoulder = Gauze Shoulder +marking-GauzeShoulder-gauze_shoulder = Gauze Shoulder Sling +marking-GauzeShoulder = Gauze Shoulder Sling marking-GauzeStomach-gauze_abdomen = Gauze Stomach Wrap marking-GauzeStomach = Gauze Stomach Wrap @@ -46,17 +46,57 @@ marking-GauzeUpperLegRight = Gauze Thigh Wrap (Right) marking-GauzeBlindfold-gauze_blindfold = Gauze Blindfold marking-GauzeBlindfold = Gauze Blindfold -marking-GauzeLizardBlindfold-gauze_lizardblindfold = Gauze Blindfold +marking-GauzeLizardBlindfold-gauze_lizard_blindfold = Gauze Blindfold marking-GauzeLizardBlindfold = Gauze Blindfold -marking-GauzeLizardFootRight-gauze_lizardfoot_r = Gauze Foot Wrap (Right) +marking-GauzeLizardFootRight-gauze_lizard_foot_r = Gauze Foot Wrap (Right) marking-GauzeLizardFootRight = Gauze Foot Wrap (Right) -marking-GauzeLizardFootLeft-gauze_lizardfoot_l = Gauze Foot Wrap (Left) +marking-GauzeLizardFootLeft-gauze_lizard_foot_l = Gauze Foot Wrap (Left) marking-GauzeLizardFootLeft = Gauze Foot Wrap (Left) -marking-GauzeLizardLefteyePatch-gauze_lizardlefteye = Adjusted Gauze eyepatch (Left) -marking-GauzeLizardLefteyePatch = Adjusted Gauze eyepatch (Left) +marking-GauzeLizardLefteyePatch-gauze_lizard_lefteye = Reptilian Gauze eyepatch (Left) +marking-GauzeLizardLefteyePatch = Reptilian Gauze eyepatch (Left) + +marking-GauzeLizardRighteyePatch-gauze_lizard_righteye = Reptilian Gauze eyepatch (Right) +marking-GauzeLizardRighteyePatch = Reptilian Gauze Eyepatch (Right) + +marking-GauzeMothStomach-gauze_moth_abdomen = Insectoid Stomach Wrap +marking-GauzeMothStomach = Insectoid Stomach Wrap + +marking-GauzeMothShoulder-gauze_moth_shoulder = Insectoid Shoulder Sling +marking-GauzeMothShoulder = Insectoid Shoulder Sling + +marking-GauzeMothBlindfold-gauze_moth_blindfold = Insectoid Blindfold +marking-GauzeMothBlindfold = Insectoid Blindfold + +marking-GauzeMothLeftEyePatch-gauze_moth_lefteye_2 = Insectoid Gauze eyepatch (Left) +marking-GauzeMothLeftEyePatch = Insectoid Gauze eyepatch (Left) + +marking-GauzeMothLeftEyePad-gauze_moth_lefteye_1 = Insectoid Gauze eyepad (Left) +marking-GauzeMothLeftEyePad = Insectoid Gauze eyepad (Left) + +marking-GauzeMothRightEyePatch-gauze_moth_righteye_2 = Insectoid Gauze eyepatch (Right) +marking-GauzeMothRightEyePatch = Insectoid Gauze eyepatch (Right) + +marking-GauzeMothRightEyePad-gauze_moth_righteye_1 = Insectoid Gauze eyepad (Right) +marking-GauzeMothRightEyePad = Insectoid Gauze eyepad (Right) + +marking-GauzeMothUpperArmRight-gauze_moth_upperarm_r = Insectoid Gauze Forearm Wrap (Right) +marking-GauzeMothUpperArmRight = Insectoid Gauze Forearm Wrap (Right) + +marking-GauzeMothUpperArmLeft-gauze_moth_upperarm_l = Insectoid Gauze Forearm Wrap (Left) +marking-GauzeMothUpperArmLeft = Insectoid Gauze Forearm Wrap (Left) + +marking-GauzeMothUpperLegRight-gauze_moth_upperleg_r = Insectoid Gauze Thigh Wrap (Right) +marking-GauzeMothUpperLegRight = Insectoid Insectoid Gauze Thigh Wrap (Right) + +marking-GauzeMothUpperLegLeft-gauze_moth_upperleg_l = Insectoid Gauze Thigh Wrap (Left) +marking-GauzeMothUpperLegLeft = Insectoid Gauze Thigh Wrap (Left) + +marking-GauzeMothLowerLegRight-gauze_moth_lowerleg_r = Insectoid Gauze Shin Wrap (Right) +marking-GauzeMothLowerLegRight = Insectoid Gauze Shin Wrap (Right) + +marking-GauzeMothLowerLegLeft-gauze_moth_lowerleg_l = Insectoid Gauze Shin Wrap (Left) +marking-GauzeMothLowerLegLeft = Insectoid Gauze Shin Wrap (Left) -marking-GauzeLizardRighteyePatch-gauze_lizardrighteye = Adjusted Gauze eyepatch (Right) -marking-GauzeLizardRighteyePatch = Adjusted Gauze Eyepatch (Right) \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml index 407ea1c7ba..2e3c9ddf46 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml @@ -1,8 +1,8 @@ - type: marking id: GauzeLefteyePatch bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Arachnid] coloring: default: type: @@ -13,10 +13,10 @@ state: gauze_lefteye_2 - type: marking - id: GauzeLefteyeTape + id: GauzeLefteyePad bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -29,8 +29,8 @@ - type: marking id: GauzeRighteyePatch bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Arachnid] coloring: default: type: @@ -41,10 +41,10 @@ state: gauze_righteye_2 - type: marking - id: GauzeRighteyeTape + id: GauzeRighteyePad bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -57,8 +57,8 @@ - type: marking id: GauzeBlindfold bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Arachnid] coloring: default: type: @@ -71,8 +71,8 @@ - type: marking id: GauzeShoulder bodyPart: Chest - markingCategory: Chest - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -85,8 +85,8 @@ - type: marking id: GauzeStomach bodyPart: Chest - markingCategory: Chest - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -99,8 +99,8 @@ - type: marking id: GauzeUpperArmRight bodyPart: RArm - markingCategory: Arms - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -113,8 +113,8 @@ - type: marking id: GauzeLowerArmRight bodyPart: RArm, RHand - markingCategory: Arms - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -127,8 +127,8 @@ - type: marking id: GauzeLeftArm bodyPart: LArm, LHand - markingCategory: Arms - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -141,8 +141,8 @@ - type: marking id: GauzeLowerLegLeft bodyPart: LFoot - markingCategory: Legs - speciesRestriction: [Moth, Dwarf, Human, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Arachnid] coloring: default: type: @@ -155,8 +155,8 @@ - type: marking id: GauzeUpperLegLeft bodyPart: LLeg - markingCategory: Legs - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -169,8 +169,8 @@ - type: marking id: GauzeUpperLegRight bodyPart: RLeg - markingCategory: Legs - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -183,8 +183,8 @@ - type: marking id: GauzeLowerLegRight bodyPart: RFoot - markingCategory: Legs - speciesRestriction: [Moth, Dwarf, Human, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Arachnid] coloring: default: type: @@ -197,8 +197,8 @@ - type: marking id: GauzeBoxerWrapRight bodyPart: RHand - markingCategory: Arms - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -211,8 +211,8 @@ - type: marking id: GauzeBoxerWrapLeft bodyPart: LHand - markingCategory: Arms - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid] + markingCategory: Overlay + speciesRestriction: [Dwarf, Human, Reptilian, Arachnid] coloring: default: type: @@ -226,7 +226,7 @@ - type: marking id: GauzeLizardLefteyePatch bodyPart: Eyes - markingCategory: Head + markingCategory: Overlay speciesRestriction: [Reptilian] coloring: default: @@ -235,12 +235,12 @@ color: "#FFFFFF" sprites: - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardlefteye + state: gauze_lizard_lefteye - type: marking id: GauzeLizardRighteyePatch bodyPart: Eyes - markingCategory: Head + markingCategory: Overlay speciesRestriction: [Reptilian] coloring: default: @@ -249,12 +249,12 @@ color: "#FFFFFF" sprites: - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardrighteye + state: gauze_lizard_righteye - type: marking id: GauzeLizardFootRight bodyPart: RFoot - markingCategory: Legs + markingCategory: Overlay speciesRestriction: [Reptilian] coloring: default: @@ -263,12 +263,12 @@ color: "#FFFFFF" sprites: - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardfoot_r + state: gauze_lizard_foot_r - type: marking id: GauzeLizardFootLeft bodyPart: LFoot - markingCategory: Legs + markingCategory: Overlay speciesRestriction: [Reptilian] coloring: default: @@ -277,12 +277,12 @@ color: "#FFFFFF" sprites: - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardfoot_l + state: gauze_lizard_foot_l - type: marking id: GauzeLizardBlindfold bodyPart: Eyes - markingCategory: Head + markingCategory: Overlay speciesRestriction: [Reptilian] coloring: default: @@ -291,5 +291,187 @@ color: "#FFFFFF" sprites: - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardblindfold + state: gauze_lizard_blindfold +# Moth Specific Markings +- type: marking + id: GauzeMothBlindfold + bodyPart: Eyes + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_blindfold + +- type: marking + id: GauzeMothShoulder + bodyPart: Chest + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_shoulder + +- type: marking + id: GauzeMothStomach + bodyPart: Chest + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_abdomen + +- type: marking + id: GauzeMothLeftEyePatch + bodyPart: Eyes + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_lefteye_2 + +- type: marking + id: GauzeMothLeftEyePad + bodyPart: Eyes + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_lefteye_1 + +- type: marking + id: GauzeMothRightEyePatch + bodyPart: Eyes + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_righteye_2 + +- type: marking + id: GauzeMothRightEyePad + bodyPart: Eyes + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_righteye_1 + +- type: marking + id: GauzeMothUpperArmRight + bodyPart: RArm + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_upperarm_r + +- type: marking + id: GauzeMothUpperArmLeft + bodyPart: LArm + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_upperarm_l + +- type: marking + id: GauzeMothUpperLegRight + bodyPart: RLeg + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_upperleg_r + +- type: marking + id: GauzeMothUpperLegLeft + bodyPart: LLeg + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_upperleg_l + +- type: marking + id: GauzeMothLowerLegRight + bodyPart: RFoot + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_lowerleg_r + +- type: marking + id: GauzeMothLowerLegLeft + bodyPart: LFoot + markingCategory: Overlay + speciesRestriction: [Moth] + coloring: + default: + type: + !type:SimpleColoring + color: "#FFFFFF" + sprites: + - sprite: Mobs/Customization/gauze.rsi + state: gauze_moth_lowerleg_l diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardblindfold.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_blindfold.png similarity index 100% rename from Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardblindfold.png rename to Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_blindfold.png diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardfoot_l.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_foot_l.png similarity index 100% rename from Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardfoot_l.png rename to Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_foot_l.png diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardfoot_r.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_foot_r.png similarity index 100% rename from Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardfoot_r.png rename to Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_foot_r.png diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardlefteye.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_lefteye.png similarity index 100% rename from Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardlefteye.png rename to Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_lefteye.png diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardrighteye.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_righteye.png similarity index 100% rename from Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizardrighteye.png rename to Resources/Textures/Mobs/Customization/gauze.rsi/gauze_lizard_righteye.png diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_abdomen.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_abdomen.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b42aca5ca64911ffc13de4fc97381fb790a9ca GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0}1^9%xo;h>o(Y@;rZe4i#^y!gx9z1#S z4kYDhBbinXv|9&B$EN6j7WHAE+-(e7D zJf6QI1t{3->Eaj?;r{m8X})F!f!4&l<_Mh=zxS`1TjsH(BJ=UFqd&uq6@M z$Z!CNOdBp8i`t#9wRrdEv|^Wgza6*jyS|g_;K^^9ygmIAsWuvZi+$dIoB#bd1H%I- z`oi#^@x+da+m4-x_{}!YMdh)Z=2C^^wbiY2ozopr013>b9smFU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_blindfold.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_blindfold.png new file mode 100644 index 0000000000000000000000000000000000000000..499a3cb29d19a7030b02b6cd9a88abe4050d6846 GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4LP1Jjv*CsZ*T4OIvgOu_Q3q_Leb01rg&Xd zl89yrXV?59HAiMIv;GO|f|6G%=lm`y{d3artFZhG;j^y9Gl`SboylcNU)UEGM+}*b$*)h}P@2U?maUqHP w?DXe6o(S2j7DV8+VcI7H|A7=KW3iD?6#?%VS2My$lQu(_fTZ zPyIUKkXEI8%sG>y?FPbls2!{^sNEp|Mw22nguw2+k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0p2l#}zRutw;>T2n2ZP>eU)y+%im(HKPa9aQV-8;@6KeBlKtesodtzJBD zMqlUT{+^wiS5NBgt|~5EK6l#UY5fbPPn_DVz)5S3)!u{>FlYC7M0xgM0Sp_DBzWrVw z^fn^LIM=70TkUK7GQH0e3uet-lT&>_zo5TZXU_x~gExKZJsV$iKNmTy)BT6zgudmp zz`~<5x*9%(U7eBWdok&(QQfWWzm<;Fa({4bXmA6gZ}|>Q#nbo=LM>X!o;Gfr-TggjO?76!%+E$HtI&+XLuO22WQ%mvv4FO#s_i BtVjR= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_lowerleg_l.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_lowerleg_l.png new file mode 100644 index 0000000000000000000000000000000000000000..df750d98199dd394b990749182cd9e4b7e22c617 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1U2Ka=y&YRY=XUFDwlbRRLn||cLu9n*3rSm4QT{>&&qPe?PO>3#l-m`Jh z;#s|$R?MC~seRSbdApW&Z(lR#;)y-07SEjBRdVsvA)raTti72)O1vbk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0J2Ka=yUOaQ;;NERF&h5K#;pnENlP(_L@#5*j8`mzaS~Tt8j#W2~t=_+5 z{q{9;CiZr$U$yYup2hpOEZM$w6HvE@Zb0$d*txP z8Qbk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0p2l#}zRutw;>T21$aaC_?!_xV)Z(cgTfA@}s)B4XIKeBlKtesod&FJe~ zy?9<#ap9!i?wy-gPwwwoJgtBE+-VD@Pn^)!Ftx9%zN%!}#BQK@_m#ws04d3mAiv=M zH~<5q3D|?>|%WFeRsj}oo62W`B?X;ipM}fBEiAnK*Nnxg|99b4mtelUBJ>f z$Gqt@zs=@*9DJe%TPu5S?EJ#J%-n6?2laJF7?_(F*;troGheG?;A5&|>0!^C0CX&a Mr>mdKI;Vst0L#p)k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~e2l#}zo;h>o>C>mTuU|NLVDF6^Hy+)){@~VyizjyN+Oh50<@1*>oIG-H z*SX{S_U~N3fA8*t2M>Y_{mUE)qy$TX{DS|Z0S48zGn0UloCO|{#S9F5he4R}c>anM zpx_=)7srqY_qWsT@--{)xMi-j_^$r`{}%3B8o3uew#Dka-ubZEq5& z8S5u3$aCi4_|Cq=iMgFsamR5C8qqpQOS1`SAY=zt7KfF?bSnS|X(%K^8?V`2g7nk3=CJ)x5Yac9V){B%~6{MNlrtSXj#f3@IhClx6np-yZ zSM%RICknJ^Lj321^FNO}iOijU`?2%=xpT|7Z!UQnwXdEx?c93DJKxuBy_AtrU99}V zP4|3}?*H@Fo_u$o9^Gl3^_D%e>1o8gr@w*%9RD*+?sfON9I|_@-xKeh5q(c1^?*i0 z!Jq8EyH~&GEUHe=e#Tk!;pK;X>vvmXOII$7vb~m6dNX`^_%F7eHu}Z{9>x` ViZ>Ff70v?*c)I$ztaD0e0s!zBpOOFo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperarm_r.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperarm_r.png new file mode 100644 index 0000000000000000000000000000000000000000..19750a09d026815ba8121c8a91a812a325084a3c GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4bq-2jv*CsZ*Oh%IvgN!>|^jmC5w<2K2`q! zL3MdAnHUy9Z4(i1m#BiTqI2%BPUPx}KIq6EyU8kKY0xd6a6e1d<;xsfsvrK3o-{{C z{{GoAC7?wP`<{KAxH($?Z}z_K&wbT(uc~7ko?V{vZN~)F-RHLM-~HI^RcYm$ySI+` z&+;$Mij)3(H}g)x_3-KIX3wdp{bf8W_;XgC^x3JuS!IsB4VtxVQm?z&$Jx)W?3s1j z4QM(P1jM{f$lq1_*8UF5M%{CpFZ^fRzc%dJ(x~nwo5H4UF4O)Y#3ef62=Dg2TQ%>` zfB)&*FQvr~r|;zqU&v&~#w?lUH|@0crQN%yr(NQ#V~=0a@KI&5#;Q*3smoO%=C`;% YVHeyHZ}j4YgEUCQ)78&qol`;+08SsCZU6uP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperleg_l.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperleg_l.png new file mode 100644 index 0000000000000000000000000000000000000000..7252c2351565e453ccf0e1eca7292087faffaeb8 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4auG^jv*CsZ*Lj;A99djd$8SiiS87U!UOdS z7VkfN^vK<#2V1UsMBFiX%KeP>Px9M@7}us znI=_VlP#<*zop)flk$1M=#$ZqDD}aHQQdUqrHm85_U}!(Z@?mVAgIiDb!h$r3%*zD z^|gB2*5n^&c>nL$^7UQJoHh(AFJ~#O+`CwLmR4umn)@zHyAoHoz}*01{L@@weeI#v zldwNOTU|r$Xc-j>dn^eo&j0u&;9ybR?)A34PZ^ecy4PlJY~8;88@ry~`U&@S__jUGWXo q&mR>}IbIQ`$5Z>+#pNNxKE@A1S&N_UJ|YW@0|rl5KbLh*2~7ZRbIe%) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperleg_r.png b/Resources/Textures/Mobs/Customization/gauze.rsi/gauze_moth_upperleg_r.png new file mode 100644 index 0000000000000000000000000000000000000000..2f09a4de3e645b1a782c5660dce030db4480f4b0 GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0F2l#}z&Yax0YyHC6eT{o|Y~HkP^}K042e+>~w{QK-w$g)pcdeM(xOjTc zuJy}T&6~7pPH$&*{*fK4j%=8@XXWI}dzZGCrk&isTX{;b@lv-l}i^+?(bT@c)^0%Q`gR&47A^(&rKLeX_f@} z1^*`!Fa&*3Xa{QIEbxddW?oyzCgubFV(QlCi*6#$R?@Xn*kH#(yEcHAjlqvVg;~voM44$rjF6*2UngDjC>oNcU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json b/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json index 232e7b0b22..8d82ccab51 100644 --- a/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/gauze.rsi/meta.json @@ -72,23 +72,75 @@ "directions": 4 }, { - "name": "gauze_lizardblindfold", + "name": "gauze_lizard_blindfold", "directions": 4 }, { - "name": "gauze_lizardrighteye", + "name": "gauze_lizard_righteye", "directions": 4 }, { - "name": "gauze_lizardlefteye", + "name": "gauze_lizard_lefteye", "directions": 4 }, { - "name": "gauze_lizardfoot_r", + "name": "gauze_lizard_foot_r", "directions": 4 }, { - "name": "gauze_lizardfoot_l", + "name": "gauze_lizard_foot_l", + "directions": 4 + }, + { + "name": "gauze_moth_abdomen", + "directions": 4 + }, + { + "name": "gauze_moth_shoulder", + "directions": 4 + }, + { + "name": "gauze_moth_blindfold", + "directions": 4 + }, + { + "name": "gauze_moth_righteye_1", + "directions": 4 + }, + { + "name": "gauze_moth_righteye_2", + "directions": 4 + }, + { + "name": "gauze_moth_lefteye_1", + "directions": 4 + }, + { + "name": "gauze_moth_lefteye_2", + "directions": 4 + }, + { + "name": "gauze_moth_upperarm_r", + "directions": 4 + }, + { + "name": "gauze_moth_upperarm_l", + "directions": 4 + }, + { + "name": "gauze_moth_upperleg_r", + "directions": 4 + }, + { + "name": "gauze_moth_upperleg_l", + "directions": 4 + }, + { + "name": "gauze_moth_lowerleg_r", + "directions": 4 + }, + { + "name": "gauze_moth_lowerleg_l", "directions": 4 } ] From 694ae001fdd7c3b59b7f33a88b2e656edcf73341 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 9 Apr 2024 08:05:58 +0000 Subject: [PATCH 198/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c995f1f51d..94dd239d58 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Tayrtahn - changes: - - message: Pressing shift as a ghost no longer cancels following your target - type: Fix - id: 5824 - time: '2024-01-30T01:33:35.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24715 - author: liltenhead changes: - message: Jugs are now destructible. @@ -3821,3 +3814,13 @@ id: 6323 time: '2024-04-08T15:34:35.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26724 +- author: KittenColony + changes: + - message: Added 13 new gauze wraps for moth that fit their twig bodies + type: Add + - message: Gauze markings have been moved to the Overlay category, allowing gauze + to not take up marking points + type: Tweak + id: 6324 + time: '2024-04-09T08:04:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25481 From 6d695dd3262c8a7492ce2164da6d16add9d80017 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Tue, 9 Apr 2024 13:17:31 +0000 Subject: [PATCH 199/206] dirty after calling SetAccesses (#26849) Co-authored-by: deltanedas <@deltanedas:kde.org> --- Content.Shared/Access/Systems/AccessReaderSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 4c12622ab5..89c08e0a4e 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -318,6 +318,7 @@ public sealed class AccessReaderSystem : EntitySystem { component.AccessLists.Add(new HashSet>(){access}); } + Dirty(uid, component); RaiseLocalEvent(uid, new AccessReaderConfigurationChangedEvent()); } From d879665b52c6c30d057e94ed49b222b8a1585717 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 9 Apr 2024 17:25:21 +0200 Subject: [PATCH 200/206] Add new "grant_connect_bypass" admin command (#26771) This command allows you to grant a player temporary privilege to join regardless of player cap, whitelist, etc. It does not bypass bans. The API for this is IConnectionManager.AddTemporaryConnectBypass(). I shuffled around the logic inside ConnectionManager. Bans are now checked before panic bunker. --- .../Connection/ConnectionManager.cs | 57 +++++++++++++++--- .../Connection/GrantConnectBypassCommand.cs | 60 +++++++++++++++++++ .../commands/connection-commands.ftl | 16 +++++ 3 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 Content.Server/Connection/GrantConnectBypassCommand.cs create mode 100644 Resources/Locale/en-US/administration/commands/connection-commands.ftl diff --git a/Content.Server/Connection/ConnectionManager.cs b/Content.Server/Connection/ConnectionManager.cs index 1367cae82c..cd89f48d49 100644 --- a/Content.Server/Connection/ConnectionManager.cs +++ b/Content.Server/Connection/ConnectionManager.cs @@ -1,4 +1,5 @@ using System.Collections.Immutable; +using System.Runtime.InteropServices; using System.Text.Json.Nodes; using System.Threading.Tasks; using Content.Server.Database; @@ -10,6 +11,7 @@ using Content.Shared.Players.PlayTimeTracking; using Robust.Server.Player; using Robust.Shared.Configuration; using Robust.Shared.Network; +using Robust.Shared.Timing; namespace Content.Server.Connection @@ -17,6 +19,18 @@ namespace Content.Server.Connection public interface IConnectionManager { void Initialize(); + + /// + /// Temporarily allow a user to bypass regular connection requirements. + /// + /// + /// The specified user will be allowed to bypass regular player cap, + /// whitelist and panic bunker restrictions for . + /// Bans are not bypassed. + /// + /// The user to give a temporary bypass. + /// How long the bypass should last for. + void AddTemporaryConnectBypass(NetUserId user, TimeSpan duration); } /// @@ -31,15 +45,31 @@ namespace Content.Server.Connection [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly ILocalizationManager _loc = default!; [Dependency] private readonly ServerDbEntryManager _serverDbEntry = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly ILogManager _logManager = default!; + + private readonly Dictionary _temporaryBypasses = []; + private ISawmill _sawmill = default!; public void Initialize() { + _sawmill = _logManager.GetSawmill("connections"); + _netMgr.Connecting += NetMgrOnConnecting; _netMgr.AssignUserIdCallback = AssignUserIdCallback; // Approval-based IP bans disabled because they don't play well with Happy Eyeballs. // _netMgr.HandleApprovalCallback = HandleApproval; } + public void AddTemporaryConnectBypass(NetUserId user, TimeSpan duration) + { + ref var time = ref CollectionsMarshal.GetValueRefOrAddDefault(_temporaryBypasses, user, out _); + var newTime = _gameTiming.RealTime + duration; + // Make sure we only update the time if we wouldn't shrink it. + if (newTime > time) + time = newTime; + } + /* private async Task HandleApproval(NetApprovalEventArgs eventArgs) { @@ -109,6 +139,20 @@ namespace Content.Server.Connection hwId = null; } + var bans = await _db.GetServerBansAsync(addr, userId, hwId, includeUnbanned: false); + if (bans.Count > 0) + { + var firstBan = bans[0]; + var message = firstBan.FormatBanMessage(_cfg, _loc); + return (ConnectionDenyReason.Ban, message, bans); + } + + if (HasTemporaryBypass(userId)) + { + _sawmill.Verbose("User {UserId} has temporary bypass, skipping further connection checks", userId); + return null; + } + var adminData = await _dbManager.GetAdminDataForAsync(e.UserId); if (_cfg.GetCVar(CCVars.PanicBunkerEnabled) && adminData == null) @@ -167,14 +211,6 @@ namespace Content.Server.Connection return (ConnectionDenyReason.Full, Loc.GetString("soft-player-cap-full"), null); } - var bans = await _db.GetServerBansAsync(addr, userId, hwId, includeUnbanned: false); - if (bans.Count > 0) - { - var firstBan = bans[0]; - var message = firstBan.FormatBanMessage(_cfg, _loc); - return (ConnectionDenyReason.Ban, message, bans); - } - if (_cfg.GetCVar(CCVars.WhitelistEnabled)) { var min = _cfg.GetCVar(CCVars.WhitelistMinPlayers); @@ -195,6 +231,11 @@ namespace Content.Server.Connection return null; } + private bool HasTemporaryBypass(NetUserId user) + { + return _temporaryBypasses.TryGetValue(user, out var time) && time > _gameTiming.RealTime; + } + private async Task AssignUserIdCallback(string name) { if (!_cfg.GetCVar(CCVars.GamePersistGuests)) diff --git a/Content.Server/Connection/GrantConnectBypassCommand.cs b/Content.Server/Connection/GrantConnectBypassCommand.cs new file mode 100644 index 0000000000..e2d0d7338a --- /dev/null +++ b/Content.Server/Connection/GrantConnectBypassCommand.cs @@ -0,0 +1,60 @@ +using Content.Server.Administration; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Connection; + +[AdminCommand(AdminFlags.Admin)] +public sealed class GrantConnectBypassCommand : LocalizedCommands +{ + private static readonly TimeSpan DefaultDuration = TimeSpan.FromHours(1); + + [Dependency] private readonly IPlayerLocator _playerLocator = default!; + [Dependency] private readonly IConnectionManager _connectionManager = default!; + + public override string Command => "grant_connect_bypass"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length is not (1 or 2)) + { + shell.WriteError(Loc.GetString("cmd-grant_connect_bypass-invalid-args")); + return; + } + + var argPlayer = args[0]; + var info = await _playerLocator.LookupIdByNameOrIdAsync(argPlayer); + if (info == null) + { + shell.WriteError(Loc.GetString("cmd-grant_connect_bypass-unknown-user", ("user", argPlayer))); + return; + } + + var duration = DefaultDuration; + if (args.Length > 1) + { + var argDuration = args[2]; + if (!uint.TryParse(argDuration, out var minutes)) + { + shell.WriteLine(Loc.GetString("cmd-grant_connect_bypass-invalid-duration", ("duration", argDuration))); + return; + } + + duration = TimeSpan.FromMinutes(minutes); + } + + _connectionManager.AddTemporaryConnectBypass(info.UserId, duration); + shell.WriteLine(Loc.GetString("cmd-grant_connect_bypass-success", ("user", argPlayer))); + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + return CompletionResult.FromHint(Loc.GetString("cmd-grant_connect_bypass-arg-user")); + + if (args.Length == 2) + return CompletionResult.FromHint(Loc.GetString("cmd-grant_connect_bypass-arg-duration")); + + return CompletionResult.Empty; + } +} diff --git a/Resources/Locale/en-US/administration/commands/connection-commands.ftl b/Resources/Locale/en-US/administration/commands/connection-commands.ftl new file mode 100644 index 0000000000..66991042d2 --- /dev/null +++ b/Resources/Locale/en-US/administration/commands/connection-commands.ftl @@ -0,0 +1,16 @@ +## Strings for the "grant_connect_bypass" command. + +cmd-grant_connect_bypass-desc = Temporarily allow a user to bypass regular connection checks. +cmd-grant_connect_bypass-help = Usage: grant_connect_bypass [duration minutes] + Temporarily grants a user the ability to bypass regular connections restrictions. + The bypass only applies to this game server and will expire after (by default) 1 hour. + They will be able to join regardless of whitelist, panic bunker, or player cap. + +cmd-grant_connect_bypass-arg-user = +cmd-grant_connect_bypass-arg-duration = [duration minutes] + +cmd-grant_connect_bypass-invalid-args = Expected 1 or 2 arguments +cmd-grant_connect_bypass-unknown-user = Unable to find user '{$user}' +cmd-grant_connect_bypass-invalid-duration = Invalid duration '{$duration}' + +cmd-grant_connect_bypass-success = Successfully added bypass for user '{$user}' From 862f820708637ede67fb6c8e49792c657a5932f6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 9 Apr 2024 15:26:27 +0000 Subject: [PATCH 201/206] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 8acf404ad3..a8a2f143eb 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -144,5 +144,13 @@ Entries: id: 19 time: '2024-03-31T02:05:44.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26546 +- author: PJB3005 + changes: + - message: The new "grant_connect_bypass" command grants a player the ability to + connect, bypassing whitelist, player cap and panic bunker. + type: Add + id: 20 + time: '2024-04-09T15:25:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26771 Name: Admin Order: 1 From 682afd4ae499e09df8703fef78f5ab015be676c7 Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Tue, 9 Apr 2024 15:16:42 -0700 Subject: [PATCH 202/206] Improve access overlay (#26667) * Improve access overlay * review changes --------- Co-authored-by: wrexbe --- Content.Client/Access/AccessOverlay.cs | 93 +++++++++++-------- .../Commands/ShowAccessReadersCommand.cs | 15 ++- 2 files changed, 64 insertions(+), 44 deletions(-) diff --git a/Content.Client/Access/AccessOverlay.cs b/Content.Client/Access/AccessOverlay.cs index 2be3d07e90..59c9441036 100644 --- a/Content.Client/Access/AccessOverlay.cs +++ b/Content.Client/Access/AccessOverlay.cs @@ -9,20 +9,20 @@ namespace Content.Client.Access; public sealed class AccessOverlay : Overlay { + private const string TextFontPath = "/Fonts/NotoSans/NotoSans-Regular.ttf"; + private const int TextFontSize = 12; + private readonly IEntityManager _entityManager; - private readonly EntityLookupSystem _lookup; - private readonly SharedTransformSystem _xform; + private readonly SharedTransformSystem _transformSystem; private readonly Font _font; public override OverlaySpace Space => OverlaySpace.ScreenSpace; - public AccessOverlay(IEntityManager entManager, IResourceCache cache, EntityLookupSystem lookup, SharedTransformSystem xform) + public AccessOverlay(IEntityManager entityManager, IResourceCache resourceCache, SharedTransformSystem transformSystem) { - _entityManager = entManager; - _lookup = lookup; - _xform = xform; - - _font = cache.GetFont("/Fonts/NotoSans/NotoSans-Regular.ttf", 12); + _entityManager = entityManager; + _transformSystem = transformSystem; + _font = resourceCache.GetFont(TextFontPath, TextFontSize); } protected override void Draw(in OverlayDrawArgs args) @@ -30,52 +30,65 @@ public sealed class AccessOverlay : Overlay if (args.ViewportControl == null) return; - var readerQuery = _entityManager.GetEntityQuery(); - var xformQuery = _entityManager.GetEntityQuery(); - - foreach (var ent in _lookup.GetEntitiesIntersecting(args.MapId, args.WorldAABB, - LookupFlags.Static | LookupFlags.Approximate)) + var textBuffer = new StringBuilder(); + var query = _entityManager.EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var accessReader, out var transform)) { - if (!readerQuery.TryGetComponent(ent, out var reader) || - !xformQuery.TryGetComponent(ent, out var xform)) + textBuffer.Clear(); + + var entityName = _entityManager.ToPrettyString(uid); + textBuffer.AppendLine(entityName.Prototype); + textBuffer.Append("UID: "); + textBuffer.Append(entityName.Uid.Id); + textBuffer.Append(", NUID: "); + textBuffer.Append(entityName.Nuid.Id); + textBuffer.AppendLine(); + + if (!accessReader.Enabled) { + textBuffer.AppendLine("-Disabled"); continue; } - var text = new StringBuilder(); - var index = 0; - var a = $"{_entityManager.ToPrettyString(ent)}"; - text.Append(a); - - foreach (var list in reader.AccessLists) + if (accessReader.AccessLists.Count > 0) { - a = $"Tag {index}"; - text.AppendLine(a); - - foreach (var entry in list) + var groupNumber = 0; + foreach (var accessList in accessReader.AccessLists) { - a = $"- {entry}"; - text.AppendLine(a); + groupNumber++; + foreach (var entry in accessList) + { + textBuffer.Append("+Set "); + textBuffer.Append(groupNumber); + textBuffer.Append(": "); + textBuffer.Append(entry.Id); + textBuffer.AppendLine(); + } } - - index++; - } - - string textStr; - - if (text.Length >= 2) - { - textStr = text.ToString(); - textStr = textStr[..^2]; } else { - textStr = ""; + textBuffer.AppendLine("+Unrestricted"); } - var screenPos = args.ViewportControl.WorldToScreen(_xform.GetWorldPosition(xform)); + foreach (var key in accessReader.AccessKeys) + { + textBuffer.Append("+Key "); + textBuffer.Append(key.OriginStation); + textBuffer.Append(": "); + textBuffer.Append(key.Id); + textBuffer.AppendLine(); + } - args.ScreenHandle.DrawString(_font, screenPos, textStr, Color.Gold); + foreach (var tag in accessReader.DenyTags) + { + textBuffer.Append("-Tag "); + textBuffer.AppendLine(tag.Id); + } + + var accessInfoText = textBuffer.ToString(); + var screenPos = args.ViewportControl.WorldToScreen(_transformSystem.GetWorldPosition(transform)); + args.ScreenHandle.DrawString(_font, screenPos, accessInfoText, Color.Gold); } } } diff --git a/Content.Client/Access/Commands/ShowAccessReadersCommand.cs b/Content.Client/Access/Commands/ShowAccessReadersCommand.cs index 7c804dd969..cb6cb6cf6b 100644 --- a/Content.Client/Access/Commands/ShowAccessReadersCommand.cs +++ b/Content.Client/Access/Commands/ShowAccessReadersCommand.cs @@ -7,8 +7,16 @@ namespace Content.Client.Access.Commands; public sealed class ShowAccessReadersCommand : IConsoleCommand { public string Command => "showaccessreaders"; - public string Description => "Shows all access readers in the viewport"; - public string Help => $"{Command}"; + + public string Description => "Toggles showing access reader permissions on the map"; + public string Help => """ + Overlay Info: + -Disabled | The access reader is disabled + +Unrestricted | The access reader has no restrictions + +Set [Index]: [Tag Name]| A tag in an access set (accessor needs all tags in the set to be allowed by the set) + +Key [StationUid]: [StationRecordKeyId] | A StationRecordKey that is allowed + -Tag [Tag Name] | A tag that is not allowed (takes priority over other allows) + """; public void Execute(IConsoleShell shell, string argStr, string[] args) { var collection = IoCManager.Instance; @@ -26,10 +34,9 @@ public sealed class ShowAccessReadersCommand : IConsoleCommand var entManager = collection.Resolve(); var cache = collection.Resolve(); - var lookup = entManager.System(); var xform = entManager.System(); - overlay.AddOverlay(new AccessOverlay(entManager, cache, lookup, xform)); + overlay.AddOverlay(new AccessOverlay(entManager, cache, xform)); shell.WriteLine($"Set access reader debug overlay to true"); } } From fd067731b544eb219493338a8fe446c154e880f4 Mon Sep 17 00:00:00 2001 From: Killerqu00 <47712032+Killerqu00@users.noreply.github.com> Date: Wed, 10 Apr 2024 00:18:07 +0200 Subject: [PATCH 203/206] Skipping bounties (#26537) * add button to menu * networking and component work * try to add access stuff * main functionality done * add access lock? I think? * remove extra line * fix access system * move SkipTime to StationCargoBountyDatabaseComponent * Disable/Enable skip button based on cooldown * remove debugging * add access denied sound * remove DataField tags * dynamic timer --- .../CargoBountyConsoleBoundUserInterface.cs | 7 +++- Content.Client/Cargo/UI/BountyEntry.xaml | 13 +++++- Content.Client/Cargo/UI/BountyEntry.xaml.cs | 33 +++++++++++++-- .../Cargo/UI/CargoBountyMenu.xaml.cs | 8 ++-- .../StationCargoBountyDatabaseComponent.cs | 13 ++++++ .../Cargo/Systems/CargoSystem.Bounty.cs | 40 +++++++++++++++++-- .../Components/CargoBountyConsoleComponent.cs | 27 ++++++++++++- .../en-US/cargo/cargo-bounty-console.ftl | 1 + .../Machines/Computers/computers.yml | 2 + 9 files changed, 132 insertions(+), 12 deletions(-) diff --git a/Content.Client/Cargo/BUI/CargoBountyConsoleBoundUserInterface.cs b/Content.Client/Cargo/BUI/CargoBountyConsoleBoundUserInterface.cs index 482acb3c87..d3365702bc 100644 --- a/Content.Client/Cargo/BUI/CargoBountyConsoleBoundUserInterface.cs +++ b/Content.Client/Cargo/BUI/CargoBountyConsoleBoundUserInterface.cs @@ -27,6 +27,11 @@ public sealed class CargoBountyConsoleBoundUserInterface : BoundUserInterface SendMessage(new BountyPrintLabelMessage(id)); }; + _menu.OnSkipButtonPressed += id => + { + SendMessage(new BountySkipMessage(id)); + }; + _menu.OpenCentered(); } @@ -37,7 +42,7 @@ public sealed class CargoBountyConsoleBoundUserInterface : BoundUserInterface if (message is not CargoBountyConsoleState state) return; - _menu?.UpdateEntries(state.Bounties); + _menu?.UpdateEntries(state.Bounties, state.UntilNextSkip); } protected override void Dispose(bool disposing) diff --git a/Content.Client/Cargo/UI/BountyEntry.xaml b/Content.Client/Cargo/UI/BountyEntry.xaml index 60446327b3..7c61323bd5 100644 --- a/Content.Client/Cargo/UI/BountyEntry.xaml +++ b/Content.Client/Cargo/UI/BountyEntry.xaml @@ -13,7 +13,18 @@ - [DataField] public HashSet CheckedBounties = new(); + + /// + /// The time at which players will be able to skip the next bounty. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan NextSkipTime = TimeSpan.Zero; + + /// + /// The time between skipping bounties. + /// + [DataField] + public TimeSpan SkipDelay = TimeSpan.FromMinutes(15); } diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs index ee5ae631fd..22e5c67e17 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs @@ -4,7 +4,7 @@ using Content.Server.Cargo.Components; using Content.Server.Labels; using Content.Server.NameIdentifier; using Content.Server.Paper; -using Content.Server.Station.Systems; +using Content.Shared.Access.Components; using Content.Shared.Cargo; using Content.Shared.Cargo.Components; using Content.Shared.Cargo.Prototypes; @@ -35,6 +35,7 @@ public sealed partial class CargoSystem { SubscribeLocalEvent(OnBountyConsoleOpened); SubscribeLocalEvent(OnPrintLabelMessage); + SubscribeLocalEvent(OnSkipBountyMessage); SubscribeLocalEvent(OnGetBountyPrice); SubscribeLocalEvent(OnSold); SubscribeLocalEvent(OnMapInit); @@ -50,7 +51,8 @@ public sealed partial class CargoSystem !TryComp(station, out var bountyDb)) return; - _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(bountyDb.Bounties)); + var untilNextSkip = bountyDb.NextSkipTime - _timing.CurTime; + _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(bountyDb.Bounties, untilNextSkip)); } private void OnPrintLabelMessage(EntityUid uid, CargoBountyConsoleComponent component, BountyPrintLabelMessage args) @@ -70,6 +72,37 @@ public sealed partial class CargoSystem _audio.PlayPvs(component.PrintSound, uid); } + private void OnSkipBountyMessage(EntityUid uid, CargoBountyConsoleComponent component, BountySkipMessage args) + { + if (_station.GetOwningStation(uid) is not { } station || !TryComp(station, out var db)) + return; + + if (_timing.CurTime < db.NextSkipTime) + return; + + if (!TryGetBountyFromId(station, args.BountyId, out var bounty)) + return; + + if (args.Session.AttachedEntity is not { Valid: true } mob) + return; + + if (TryComp(uid, out var accessReaderComponent) && + !_accessReaderSystem.IsAllowed(mob, uid, accessReaderComponent)) + { + _audio.PlayPvs(component.DenySound, uid); + return; + } + + if (!TryRemoveBounty(station, bounty.Value)) + return; + + FillBountyDatabase(station); + db.NextSkipTime = _timing.CurTime + db.SkipDelay; + var untilNextSkip = db.NextSkipTime - _timing.CurTime; + _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(db.Bounties, untilNextSkip)); + _audio.PlayPvs(component.SkipSound, uid); + } + public void SetupBountyLabel(EntityUid uid, EntityUid stationId, CargoBountyData bounty, PaperComponent? paper = null, CargoBountyLabelComponent? label = null) { if (!Resolve(uid, ref paper, ref label) || !_protoMan.TryIndex(bounty.Bounty, out var prototype)) @@ -431,7 +464,8 @@ public sealed partial class CargoSystem !TryComp(station, out var db)) continue; - _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(db.Bounties), ui: ui); + var untilNextSkip = db.NextSkipTime - _timing.CurTime; + _uiSystem.TrySetUiState(uid, CargoConsoleUiKey.Bounty, new CargoBountyConsoleState(db.Bounties, untilNextSkip), ui: ui); } } diff --git a/Content.Shared/Cargo/Components/CargoBountyConsoleComponent.cs b/Content.Shared/Cargo/Components/CargoBountyConsoleComponent.cs index 7b1acf836f..bf82a08127 100644 --- a/Content.Shared/Cargo/Components/CargoBountyConsoleComponent.cs +++ b/Content.Shared/Cargo/Components/CargoBountyConsoleComponent.cs @@ -32,16 +32,30 @@ public sealed partial class CargoBountyConsoleComponent : Component /// [DataField("printSound")] public SoundSpecifier PrintSound = new SoundPathSpecifier("/Audio/Machines/printer.ogg"); + + /// + /// The sound made when the bounty is skipped. + /// + [DataField("skipSound")] + public SoundSpecifier SkipSound = new SoundPathSpecifier("/Audio/Effects/Cargo/ping.ogg"); + + /// + /// The sound made when bounty skipping is denied due to lacking access. + /// + [DataField("denySound")] + public SoundSpecifier DenySound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_two.ogg"); } [NetSerializable, Serializable] public sealed class CargoBountyConsoleState : BoundUserInterfaceState { public List Bounties; + public TimeSpan UntilNextSkip; - public CargoBountyConsoleState(List bounties) + public CargoBountyConsoleState(List bounties, TimeSpan untilNextSkip) { Bounties = bounties; + UntilNextSkip = untilNextSkip; } } @@ -55,3 +69,14 @@ public sealed class BountyPrintLabelMessage : BoundUserInterfaceMessage BountyId = bountyId; } } + +[Serializable, NetSerializable] +public sealed class BountySkipMessage : BoundUserInterfaceMessage +{ + public string BountyId; + + public BountySkipMessage(string bountyId) + { + BountyId = bountyId; + } +} diff --git a/Resources/Locale/en-US/cargo/cargo-bounty-console.ftl b/Resources/Locale/en-US/cargo/cargo-bounty-console.ftl index ec80d91f47..bf7868e3df 100644 --- a/Resources/Locale/en-US/cargo/cargo-bounty-console.ftl +++ b/Resources/Locale/en-US/cargo/cargo-bounty-console.ftl @@ -1,5 +1,6 @@ bounty-console-menu-title = Cargo bounty console bounty-console-label-button-text = Print label +bounty-console-skip-button-text = Skip bounty-console-time-label = Time: [color=orange]{$time}[/color] bounty-console-reward-label = Reward: [color=limegreen]${$reward}[/color] bounty-console-manifest-label = Manifest: [color=orange]{$item}[/color] diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index d467a01f83..95bf2e1dd4 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -791,6 +791,8 @@ radius: 1.5 energy: 1.6 color: "#b89f25" + - type: AccessReader + access: [["Quartermaster"]] - type: GuideHelp guides: - CargoBounties From 3ae4b5884b5065db6b203310098f2c3eece4d1d9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 9 Apr 2024 22:19:13 +0000 Subject: [PATCH 204/206] 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 94dd239d58..05b40609f6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: liltenhead - changes: - - message: Jugs are now destructible. - type: Tweak - id: 5825 - time: '2024-01-30T08:11:43.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24719 - author: Emisse changes: - message: Aspid @@ -3824,3 +3817,11 @@ id: 6324 time: '2024-04-09T08:04:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25481 +- author: Killerqu00 + changes: + - message: Quartermasters can now skip a single bounty in the list once every 15 + minutes. + type: Add + id: 6325 + time: '2024-04-09T22:18:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26537 From aa2e1facbd1f476fcef966a4ad41339979300eef Mon Sep 17 00:00:00 2001 From: SkaldetSkaeg Date: Wed, 10 Apr 2024 05:20:57 +0700 Subject: [PATCH 205/206] Flippolighter_fix (#26846) Flippolighter has realy loud sound, no UseDelay and server errors --- Resources/Prototypes/Entities/Objects/Tools/lighters.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml index 631e2a247e..d03cc725ef 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml @@ -142,8 +142,12 @@ predictable: false soundActivate: path: /Audio/Items/Lighters/zippo_open.ogg + params: + volume: -5 soundDeactivate: path: /Audio/Items/Lighters/zippo_close.ogg + params: + volume: -5 - type: ItemToggleMeleeWeapon activatedDamage: types: @@ -201,6 +205,9 @@ netsync: false radius: 1.2 #slightly stronger than the other lighters color: orange + - type: UseDelay + - type: IgnitionSource + ignited: false - type: entity name: flippo engraved lighter From 28e5db7be5e3e80cf7c1a1e5448fd0db8b586841 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 9 Apr 2024 22:22:02 +0000 Subject: [PATCH 206/206] 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 05b40609f6..b7e07e53bc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Emisse - changes: - - message: Aspid - type: Remove - id: 5826 - time: '2024-01-30T10:26:02.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24725 - author: mirrorcult changes: - message: Throwing items now scale a bit when thrown to simulate rising/falling @@ -3825,3 +3818,10 @@ id: 6325 time: '2024-04-09T22:18:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26537 +- author: SkaldetSkaeg + changes: + - message: The Flippo lighter is now quieter and has a delay on use. + type: Tweak + id: 6326 + time: '2024-04-09T22:20:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26846 diff --git a/Content.Shared/Nutrition/EntitySystems/SharedOpenableSystem.cs b/Content.Shared/Nutrition/EntitySystems/OpenableSystem.cs similarity index 91% rename from Content.Shared/Nutrition/EntitySystems/SharedOpenableSystem.cs rename to Content.Shared/Nutrition/EntitySystems/OpenableSystem.cs index f3b1127578..0ad0877d22 100644 --- a/Content.Shared/Nutrition/EntitySystems/SharedOpenableSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/OpenableSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; @@ -13,7 +14,7 @@ namespace Content.Shared.Nutrition.EntitySystems; /// /// Provides API for openable food and drinks, handles opening on use and preventing transfer when closed. /// -public abstract partial class SharedOpenableSystem : EntitySystem +public sealed partial class OpenableSystem : EntitySystem { [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; [Dependency] protected readonly SharedAudioSystem Audio = default!; @@ -29,6 +30,7 @@ public abstract partial class SharedOpenableSystem : EntitySystem SubscribeLocalEvent(HandleIfClosed); SubscribeLocalEvent(HandleIfClosed); SubscribeLocalEvent>(AddOpenCloseVerbs); + SubscribeLocalEvent(OnTransferAttempt); } private void OnInit(EntityUid uid, OpenableComponent comp, ComponentInit args) @@ -89,6 +91,15 @@ public abstract partial class SharedOpenableSystem : EntitySystem args.Verbs.Add(verb); } + private void OnTransferAttempt(Entity ent, ref SolutionTransferAttemptEvent args) + { + if (!ent.Comp.Opened) + { + // message says its just for drinks, shouldn't matter since you typically dont have a food that is openable and can be poured out + args.Cancel(Loc.GetString("drink-component-try-use-drink-not-open", ("owner", ent.Owner))); + } + } + /// /// Returns true if the entity either does not have OpenableComponent or it is opened. /// Drinks that don't have OpenableComponent are automatically open, so it returns true. diff --git a/Content.Shared/Nutrition/EntitySystems/SealableSystem.cs b/Content.Shared/Nutrition/EntitySystems/SealableSystem.cs index b0873f23a1..414b8d182b 100644 --- a/Content.Shared/Nutrition/EntitySystems/SealableSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/SealableSystem.cs @@ -11,7 +11,7 @@ public sealed partial class SealableSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(OnExamined, after: new[] { typeof(SharedOpenableSystem) }); + SubscribeLocalEvent(OnExamined, after: new[] { typeof(OpenableSystem) }); SubscribeLocalEvent(OnOpened); } diff --git a/Resources/Locale/en-US/chemistry/components/scoopable-component.ftl b/Resources/Locale/en-US/chemistry/components/scoopable-component.ftl new file mode 100644 index 0000000000..c2593cc61e --- /dev/null +++ b/Resources/Locale/en-US/chemistry/components/scoopable-component.ftl @@ -0,0 +1 @@ +scoopable-component-popup = You scoop up {$scooped} into {THE($beaker)}. diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml index 739464e961..5b7ee46946 100644 --- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml +++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml @@ -9,6 +9,7 @@ - type: SmokeVisuals - type: Transform anchored: true + - type: Clickable - type: Physics - type: Fixtures fixtures: @@ -76,6 +77,8 @@ animationState: foam-dissolve - type: Slippery - type: StepTrigger + - type: ScoopableSolution + solution: solutionArea - type: entity id: MetalFoam diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml index fba12bebec..32aa114429 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml @@ -120,6 +120,8 @@ - type: SolutionSpiker sourceSolution: food ignoreEmpty: true + - type: ScoopableSolution + solution: food - type: Extractable grindableSolutionName: food From 2ffd616c41b548e8fcd869dca7e980ffc6e384b1 Mon Sep 17 00:00:00 2001 From: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Date: Mon, 1 Apr 2024 06:31:36 +0000 Subject: [PATCH 088/206] Replace the teleportation logic on the SCRAM implant! (#26429) * Replace the teleportation logic on the SCRAM implant! Now instead of just trying to pick a random tile in range 20 times, the scram teleportation logic now: - Gets a list of grids in range - Until a suitable tile is picked it picks a random grid - From that grid it picks a random tile. - If the tile is suitable, then it is set as the target and the user will be teleported there. - Grids and tiles are randomly picked as outlined above until a valid tile is found, or all valid grids and tiles are exhausted. - Should no suitable tile be found then they get teleported to the same position they are at. Effectively not teleporting them. * Actually make the defaults sane which I forgor in the last commit * Extract tile section to its own function. Bias selection for current grid. Use proper coords for box. * Address reviews as much as possible * Address reviews --- .../Components/ScramImplantComponent.cs | 6 - .../Implants/SubdermalImplantSystem.cs | 120 +++++++++++++----- 2 files changed, 87 insertions(+), 39 deletions(-) diff --git a/Content.Server/Implants/Components/ScramImplantComponent.cs b/Content.Server/Implants/Components/ScramImplantComponent.cs index 88c433abfb..f3bbc9e584 100644 --- a/Content.Server/Implants/Components/ScramImplantComponent.cs +++ b/Content.Server/Implants/Components/ScramImplantComponent.cs @@ -15,12 +15,6 @@ public sealed partial class ScramImplantComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public float TeleportRadius = 100f; - /// - /// How many times to check for a valid tile to teleport to - /// - [DataField, ViewVariables(VVAccess.ReadOnly)] - public int TeleportAttempts = 20; - [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier TeleportSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg"); } diff --git a/Content.Server/Implants/SubdermalImplantSystem.cs b/Content.Server/Implants/SubdermalImplantSystem.cs index fd95720732..e8af08b2eb 100644 --- a/Content.Server/Implants/SubdermalImplantSystem.cs +++ b/Content.Server/Implants/SubdermalImplantSystem.cs @@ -14,13 +14,14 @@ using Content.Shared.Popups; using Content.Shared.Preferences; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Random; using System.Numerics; using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Pulling.Systems; +using Robust.Shared.Collections; +using Robust.Shared.Map.Components; namespace Content.Server.Implants; @@ -28,7 +29,6 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem { [Dependency] private readonly CuffableSystem _cuffable = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidAppearance = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly StoreSystem _store = default!; @@ -37,8 +37,11 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem [Dependency] private readonly SharedTransformSystem _xform = default!; [Dependency] private readonly ForensicsSystem _forensicsSystem = default!; [Dependency] private readonly PullingSystem _pullingSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; private EntityQuery _physicsQuery; + private HashSet> _targetGrids = []; public override void Initialize() { @@ -107,41 +110,92 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem _pullingSystem.TryStopPull(ent, pull); var xform = Transform(ent); - var entityCoords = xform.Coordinates.ToMap(EntityManager, _xform); + var targetCoords = SelectRandomTileInRange(xform, implant.TeleportRadius); - // try to find a valid position to teleport to, teleport to whatever works if we can't - var targetCoords = new MapCoordinates(); - for (var i = 0; i < implant.TeleportAttempts; i++) + if (targetCoords != null) { - var distance = implant.TeleportRadius * MathF.Sqrt(_random.NextFloat()); // to get an uniform distribution - targetCoords = entityCoords.Offset(_random.NextAngle().ToVec() * distance); - - // prefer teleporting to grids - if (!_mapManager.TryFindGridAt(targetCoords, out var gridUid, out var grid)) - continue; - - // the implant user probably does not want to be in your walls - var valid = true; - foreach (var entity in grid.GetAnchoredEntities(targetCoords)) - { - if (!_physicsQuery.TryGetComponent(entity, out var body)) - continue; - - if (body.BodyType != BodyType.Static || - !body.Hard || - (body.CollisionLayer & (int) CollisionGroup.Impassable) == 0) - continue; - - valid = false; - break; - } - if (valid) - break; + _xform.SetCoordinates(ent, targetCoords.Value); + _audio.PlayPvs(implant.TeleportSound, ent); + args.Handled = true; } - _xform.SetWorldPosition(ent, targetCoords.Position); - _audio.PlayPvs(implant.TeleportSound, ent); + } - args.Handled = true; + private EntityCoordinates? SelectRandomTileInRange(TransformComponent userXform, float radius) + { + var userCoords = userXform.Coordinates.ToMap(EntityManager, _xform); + _targetGrids.Clear(); + _lookupSystem.GetEntitiesInRange(userCoords, radius, _targetGrids); + Entity? targetGrid = null; + + if (_targetGrids.Count == 0) + return null; + + // Give preference to the grid the entity is currently on. + // This does not guarantee that if the probability fails that the owner's grid won't be picked. + // In reality the probability is higher and depends on the number of grids. + if (userXform.GridUid != null && TryComp(userXform.GridUid, out var gridComp)) + { + var userGrid = new Entity(userXform.GridUid.Value, gridComp); + if (_random.Prob(0.5f)) + { + _targetGrids.Remove(userGrid); + targetGrid = userGrid; + } + } + + if (targetGrid == null) + targetGrid = _random.GetRandom().PickAndTake(_targetGrids); + + EntityCoordinates? targetCoords = null; + + do + { + var valid = false; + + var range = (float) Math.Sqrt(radius); + var box = Box2.CenteredAround(userCoords.Position, new Vector2(range, range)); + var tilesInRange = _mapSystem.GetTilesEnumerator(targetGrid.Value.Owner, targetGrid.Value.Comp, box, false); + var tileList = new ValueList(); + + while (tilesInRange.MoveNext(out var tile)) + { + tileList.Add(tile.GridIndices); + } + + while (tileList.Count != 0) + { + var tile = tileList.RemoveSwap(_random.Next(tileList.Count)); + valid = true; + foreach (var entity in _mapSystem.GetAnchoredEntities(targetGrid.Value.Owner, targetGrid.Value.Comp, + tile)) + { + if (!_physicsQuery.TryGetComponent(entity, out var body)) + continue; + + if (body.BodyType != BodyType.Static || + !body.Hard || + (body.CollisionLayer & (int) CollisionGroup.MobMask) == 0) + continue; + + valid = false; + break; + } + + if (valid) + { + targetCoords = new EntityCoordinates(targetGrid.Value.Owner, + _mapSystem.TileCenterToVector(targetGrid.Value, tile)); + break; + } + } + + if (valid || _targetGrids.Count == 0) // if we don't do the check here then PickAndTake will blow up on an empty set. + break; + + targetGrid = _random.GetRandom().PickAndTake(_targetGrids); + } while (true); + + return targetCoords; } private void OnDnaScramblerImplant(EntityUid uid, SubdermalImplantComponent component, UseDnaScramblerImplantEvent args) From 5613c3d3ddc64c1fccb1bc591308a19fa2276e9d Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Sun, 31 Mar 2024 23:36:31 -0700 Subject: [PATCH 089/206] Refactored AdvertiseComponent (#26598) * Made it better * ok * alright --------- Co-authored-by: wrexbe --- .../Components/AdvertiseComponent.cs | 6 - .../EntitySystems/AdvertiseSystem.cs | 110 ++++++------------ 2 files changed, 38 insertions(+), 78 deletions(-) diff --git a/Content.Server/Advertise/Components/AdvertiseComponent.cs b/Content.Server/Advertise/Components/AdvertiseComponent.cs index 140bc6b902..531b31031d 100644 --- a/Content.Server/Advertise/Components/AdvertiseComponent.cs +++ b/Content.Server/Advertise/Components/AdvertiseComponent.cs @@ -1,7 +1,6 @@ using Content.Server.Advertise.EntitySystems; using Content.Shared.Advertise; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Advertise.Components; @@ -37,9 +36,4 @@ public sealed partial class AdvertiseComponent : Component [DataField] public TimeSpan NextAdvertisementTime { get; set; } = TimeSpan.Zero; - /// - /// Whether the entity will say advertisements or not. - /// - [DataField] - public bool Enabled { get; set; } = true; } diff --git a/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs b/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs index b326321d54..12eac72cfe 100644 --- a/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs +++ b/Content.Server/Advertise/EntitySystems/AdvertiseSystem.cs @@ -28,112 +28,78 @@ public sealed class AdvertiseSystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnPowerChanged); - SubscribeLocalEvent(OnPowerReceiverEnableChangeAttempt); - SubscribeLocalEvent(OnVendingEnableChangeAttempt); + SubscribeLocalEvent(OnPowerReceiverAttemptAdvertiseEvent); + SubscribeLocalEvent(OnVendingAttemptAdvertiseEvent); - // Force it to check on the next update. _nextCheckTime = TimeSpan.MinValue; } - private void OnMapInit(EntityUid uid, AdvertiseComponent advertise, MapInitEvent args) + private void OnMapInit(EntityUid uid, AdvertiseComponent advert, MapInitEvent args) { - RefreshTimer(uid, advertise); + RandomizeNextAdvertTime(advert); + _nextCheckTime = MathHelper.Min(advert.NextAdvertisementTime, _nextCheckTime); } - private void OnPowerChanged(EntityUid uid, AdvertiseComponent advertise, ref PowerChangedEvent args) + private void RandomizeNextAdvertTime(AdvertiseComponent advert) { - SetEnabled(uid, args.Powered, advertise); - } - - public void RefreshTimer(EntityUid uid, AdvertiseComponent? advertise = null) - { - if (!Resolve(uid, ref advertise)) - return; - - if (!advertise.Enabled) - return; - - var minDuration = Math.Max(1, advertise.MinimumWait); - var maxDuration = Math.Max(minDuration, advertise.MaximumWait); + var minDuration = Math.Max(1, advert.MinimumWait); + var maxDuration = Math.Max(minDuration, advert.MaximumWait); var waitDuration = TimeSpan.FromSeconds(_random.Next(minDuration, maxDuration)); - var nextTime = _gameTiming.CurTime + waitDuration; - advertise.NextAdvertisementTime = nextTime; - - _nextCheckTime = MathHelper.Min(nextTime, _nextCheckTime); + advert.NextAdvertisementTime = _gameTiming.CurTime + waitDuration; } - public void SayAdvertisement(EntityUid uid, AdvertiseComponent? advertise = null) + public void SayAdvertisement(EntityUid uid, AdvertiseComponent? advert = null) { - if (!Resolve(uid, ref advertise)) + if (!Resolve(uid, ref advert)) return; - if (_prototypeManager.TryIndex(advertise.Pack, out var advertisements)) - _chat.TrySendInGameICMessage(uid, Loc.GetString(_random.Pick(advertisements.Messages)), InGameICChatType.Speak, hideChat: true); - } - - public void SetEnabled(EntityUid uid, bool enable, AdvertiseComponent? advertise = null) - { - if (!Resolve(uid, ref advertise)) - return; - - if (advertise.Enabled == enable) - return; - - var attemptEvent = new AdvertiseEnableChangeAttemptEvent(enable); - RaiseLocalEvent(uid, attemptEvent); - + var attemptEvent = new AttemptAdvertiseEvent(uid); + RaiseLocalEvent(uid, ref attemptEvent); if (attemptEvent.Cancelled) return; - advertise.Enabled = enable; - RefreshTimer(uid, advertise); - } - - private static void OnPowerReceiverEnableChangeAttempt(EntityUid uid, ApcPowerReceiverComponent component, AdvertiseEnableChangeAttemptEvent args) - { - if (args.Enabling && !component.Powered) - args.Cancel(); - } - - private static void OnVendingEnableChangeAttempt(EntityUid uid, VendingMachineComponent component, AdvertiseEnableChangeAttemptEvent args) - { - if (args.Enabling && component.Broken) - args.Cancel(); + if (_prototypeManager.TryIndex(advert.Pack, out var advertisements)) + _chat.TrySendInGameICMessage(uid, Loc.GetString(_random.Pick(advertisements.Messages)), InGameICChatType.Speak, hideChat: true); } public override void Update(float frameTime) { - var curTime = _gameTiming.CurTime; - if (_nextCheckTime > curTime) + var currentGameTime = _gameTiming.CurTime; + if (_nextCheckTime > currentGameTime) return; - // Note that as _nextCheckTime currently starts at TimeSpan.MinValue, so this has to SET the value, not just - // increment it. - _nextCheckTime = curTime + _maximumNextCheckDuration; + // _nextCheckTime starts at TimeSpan.MinValue, so this has to SET the value, not just increment it. + _nextCheckTime = currentGameTime + _maximumNextCheckDuration; var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var advert)) { - if (!advert.Enabled) - continue; - - // If this isn't advertising yet - if (advert.NextAdvertisementTime > curTime) + if (currentGameTime > advert.NextAdvertisementTime) { - _nextCheckTime = MathHelper.Min(advert.NextAdvertisementTime, _nextCheckTime); - continue; + SayAdvertisement(uid, advert); + // The timer is always refreshed when it expires, to prevent mass advertising (ex: all the vending machines have no power, and get it back at the same time). + RandomizeNextAdvertTime(advert); } - - SayAdvertisement(uid, advert); - RefreshTimer(uid, advert); + _nextCheckTime = MathHelper.Min(advert.NextAdvertisementTime, _nextCheckTime); } } + + + private static void OnPowerReceiverAttemptAdvertiseEvent(EntityUid uid, ApcPowerReceiverComponent powerReceiver, ref AttemptAdvertiseEvent args) + { + args.Cancelled |= !powerReceiver.Powered; + } + + private static void OnVendingAttemptAdvertiseEvent(EntityUid uid, VendingMachineComponent machine, ref AttemptAdvertiseEvent args) + { + args.Cancelled |= machine.Broken; + } } -public sealed class AdvertiseEnableChangeAttemptEvent(bool enabling) : CancellableEntityEventArgs +[ByRefEvent] +public record struct AttemptAdvertiseEvent(EntityUid? Advertiser) { - public bool Enabling { get; } = enabling; + public bool Cancelled = false; } From ea3e98e1208f21aa2a52b0a9938ee22e07b74ccd Mon Sep 17 00:00:00 2001 From: Firewatch <54725557+musicmanvr@users.noreply.github.com> Date: Mon, 1 Apr 2024 02:41:14 -0400 Subject: [PATCH 090/206] Bartender "Essentials" (#25367) * drinks round 1 saving my progress before my hard drive explodes * test 2 please work * name fixes whoops * Update drinks.yml * various fixes am dumb * add sol dry to vends more fixes and changes, yippee! * more fixes & ingame testing shrimple tests * last fixes :trollface: should be ready for pr now * Update soda.yml sate thirst --- .../Locale/en-US/flavors/flavor-profiles.ftl | 7 + .../meta/consumable/drink/alcohol.ftl | 15 ++ .../reagents/meta/consumable/drink/drinks.ftl | 13 +- .../reagents/meta/consumable/drink/soda.ftl | 9 + .../Catalog/ReagentDispensers/beverage.yml | 2 +- .../VendingMachines/Inventories/boozeomat.yml | 2 + .../VendingMachines/Inventories/cola.yml | 1 + .../VendingMachines/Inventories/gib.yml | 1 + .../VendingMachines/Inventories/pwrgame.yml | 1 + .../Inventories/shamblersjuice.yml | 1 + .../VendingMachines/Inventories/soda.yml | 1 + .../VendingMachines/Inventories/spaceup.yml | 1 + .../VendingMachines/Inventories/starkist.yml | 1 + .../Random/Food_Drinks/drinks_glass.yml | 8 + .../Random/Food_Drinks/drinks_soda.yml | 1 + .../Consumable/Drinks/drinks-cartons.yml | 18 ++ .../Objects/Consumable/Drinks/drinks.yml | 157 ++++++++++++++++++ .../Consumable/Drinks/drinks_bottles.yml | 17 ++ .../Objects/Consumable/Drinks/drinks_cans.yml | 18 ++ Resources/Prototypes/Flavors/flavors.yml | 35 ++++ .../Reagents/Consumable/Drink/alcohol.yml | 92 ++++++++++ .../Reagents/Consumable/Drink/drinks.yml | 48 ++++++ .../Reagents/Consumable/Drink/soda.yml | 46 +++++ .../Prototypes/Recipes/Reactions/drinks.yml | 124 ++++++++++++++ .../Drinks/arnoldpalmer.rsi/icon.png | Bin 0 -> 4790 bytes .../Drinks/arnoldpalmer.rsi/meta.json | 14 ++ .../Drinks/bluehawaiian.rsi/icon.png | Bin 0 -> 4796 bytes .../Drinks/bluehawaiian.rsi/meta.json | 14 ++ .../Consumable/Drinks/coconutrum.rsi/icon.png | Bin 0 -> 4451 bytes .../Drinks/coconutrum.rsi/meta.json | 14 ++ .../Drinks/coconutwater.rsi/icon.png | Bin 0 -> 4497 bytes .../Drinks/coconutwater.rsi/icon_open.png | Bin 0 -> 4474 bytes .../Drinks/coconutwater.rsi/meta.json | 17 ++ .../Drinks/cosmopolitan.rsi/icon.png | Bin 0 -> 4363 bytes .../Drinks/cosmopolitan.rsi/meta.json | 14 ++ .../Consumable/Drinks/painkiller.rsi/icon.png | Bin 0 -> 4729 bytes .../Drinks/painkiller.rsi/meta.json | 14 ++ .../Consumable/Drinks/pinacolada.rsi/icon.png | Bin 0 -> 4454 bytes .../Drinks/pinacolada.rsi/meta.json | 14 ++ .../Consumable/Drinks/royrogers.rsi/icon.png | Bin 0 -> 4915 bytes .../Consumable/Drinks/royrogers.rsi/meta.json | 22 +++ .../Drinks/shirleytemple.rsi/icon.png | Bin 0 -> 929 bytes .../Drinks/shirleytemple.rsi/meta.json | 14 ++ .../Consumable/Drinks/sol_dry.rsi/icon.png | Bin 0 -> 4764 bytes .../Drinks/sol_dry.rsi/icon_open.png | Bin 0 -> 4776 bytes .../Drinks/sol_dry.rsi/inhand-left.png | Bin 0 -> 4557 bytes .../Drinks/sol_dry.rsi/inhand-right.png | Bin 0 -> 4565 bytes .../Consumable/Drinks/sol_dry.rsi/meta.json | 53 ++++++ .../Drinks/sol_dry_glass.rsi/icon.png | Bin 0 -> 4367 bytes .../Drinks/sol_dry_glass.rsi/meta.json | 14 ++ 50 files changed, 820 insertions(+), 3 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Drinks/arnoldpalmer.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/arnoldpalmer.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/bluehawaiian.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/bluehawaiian.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/coconutrum.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/coconutrum.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/coconutwater.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/coconutwater.rsi/icon_open.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/coconutwater.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/cosmopolitan.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/cosmopolitan.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/painkiller.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/painkiller.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/pinacolada.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/pinacolada.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/royrogers.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/royrogers.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/shirleytemple.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/shirleytemple.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/icon_open.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/meta.json create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sol_dry_glass.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/sol_dry_glass.rsi/meta.json diff --git a/Resources/Locale/en-US/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/flavors/flavor-profiles.ftl index 35de5555a2..61567d8695 100644 --- a/Resources/Locale/en-US/flavors/flavor-profiles.ftl +++ b/Resources/Locale/en-US/flavors/flavor-profiles.ftl @@ -188,6 +188,7 @@ flavor-complex-tonic-water = like angry water flavor-complex-cola = like cola flavor-complex-energy-drink = like battery acid flavor-complex-dr-gibb = like malpractice +flavor-complex-ginger-soda = like ginger flavor-complex-grape-soda = like grape soda flavor-complex-lemon-lime-soda = like lemon-lime soda flavor-complex-pwr-game-soda = like gaming @@ -200,6 +201,7 @@ flavor-complex-vodka = like fermented grain flavor-complex-tequila = like fermented death flavor-complex-sake = like sweet, alcoholic rice flavor-complex-rum = like fermented sugar +flavor-complex-coconut-rum = like nutty fermented sugar flavor-complex-coffee-liquor = like strong, bitter coffee flavor-complex-whiskey = like molasses flavor-complex-shitty-wine = like grape rinds @@ -212,6 +214,11 @@ flavor-complex-ice = like ice flavor-complex-mopwata = like stagnant, dirty water ## Cocktails +flavor-complex-arnold-palmer = like a hole-in-one +flavor-complex-blue-hawaiian = like the tropics +flavor-complex-cosmopolitan = sweet and tangy +flavor-complex-painkiller = like spiked pineapple juice +flavor-complex-pina-colada = like tropical sun flavor-complex-long-island = suspiciously like iced tea flavor-complex-three-mile-island = like tea brewed in nuclear runoff flavor-complex-whiskey-cola = like carbonated molasses diff --git a/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl b/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl index 099d23c465..4c38e92558 100644 --- a/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl +++ b/Resources/Locale/en-US/reagents/meta/consumable/drink/alcohol.ftl @@ -82,6 +82,9 @@ reagent-desc-atomic-bomb = Nuclear proliferation never tasted so good. reagent-name-b52 = b-52 reagent-desc-b52 = Coffee, irish cream, and cognac. You will get bombed. +reagent-name-blue-hawaiian = blue hawaiian +reagent-desc-blue-hawaiian = Aloha! Does that mean hello or goodbye? + reagent-name-bahama-mama = bahama mama reagent-desc-bahama-mama = Tropical cocktail. @@ -106,6 +109,12 @@ reagent-desc-booger = Ewww... reagent-name-brave-bull = brave bull reagent-desc-brave-bull = It's just as effective as Dutch-Courage! +reagent-name-coconut-rum = coconut rum +reagent-desc-coconut-rum = Rum with coconut for that tropical feel. + +reagent-name-cosmopolitan = cosmopolitan +reagent-desc-cosmopolitan = Even in the worst situations, nothing beats a fresh cosmopolitan. + reagent-name-cuba-libre = cuba libre reagent-desc-cuba-libre = Rum, mixed with cola. Viva la revolucion. @@ -190,9 +199,15 @@ reagent-desc-moonshine = Artisanal homemade liquor. What could go wrong? reagent-name-neurotoxin = neurotoxin reagent-desc-neurotoxin = A strong neurotoxin that puts the subject into a death-like state. +reagent-name-painkiller = painkiller +reagent-desc-painkiller = A cure for what ails you. + reagent-name-patron = patron reagent-desc-patron = Tequila with silver in it, a favorite of alcoholic women in the club scene. +reagent-name-pina-colada = piña colada +reagent-desc-pina-colada = For getting lost in the rain. + reagent-name-red-mead = red mead reagent-desc-red-mead = The true Viking's drink! Even though it has a strange red color. diff --git a/Resources/Locale/en-US/reagents/meta/consumable/drink/drinks.ftl b/Resources/Locale/en-US/reagents/meta/consumable/drink/drinks.ftl index ad0ade7c96..359e866fd9 100644 --- a/Resources/Locale/en-US/reagents/meta/consumable/drink/drinks.ftl +++ b/Resources/Locale/en-US/reagents/meta/consumable/drink/drinks.ftl @@ -4,6 +4,12 @@ reagent-desc-coffee = A drink made from brewed coffee beans. Contains a moderate reagent-name-cream = cream reagent-desc-cream = The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh? +reagent-name-coconut-water = coconut water +reagent-desc-coconut-water = A favorite of survivors on deserted islands. + +reagent-name-cream-of-coconut = cream of coconut +reagent-desc-cream-of-coconut = Sweet, syrupy version of coconut cream with added sugar. + reagent-name-cafe-latte = cafe latte reagent-desc-cafe-latte = A nice, strong and tasty beverage while you are reading. @@ -17,7 +23,7 @@ reagent-name-iced-coffee = iced coffee reagent-desc-iced-coffee = Coffee and ice, refreshing and cool. reagent-name-iced-green-tea = iced green tea -reagent-desc-iced-green-tea = cold green tea. +reagent-desc-iced-green-tea = Cold green tea. reagent-name-iced-tea = iced tea reagent-desc-iced-tea = No relation to a certain rap artist/actor. @@ -25,6 +31,9 @@ reagent-desc-iced-tea = No relation to a certain rap artist/actor. reagent-name-lemonade = lemonade reagent-desc-lemonade = Drink using lemon juice, water, and a sweetener such as cane sugar or honey. +reagent-name-arnold-palmer = arnold palmer +reagent-desc-arnold-palmer = Now watch this drive. + reagent-name-milk = milk reagent-desc-milk = An opaque white liquid produced by the mammary glands of mammals. @@ -86,4 +95,4 @@ reagent-name-white-gilgamesh = white gilgamesh reagent-desc-white-gilgamesh = A sickening mixture of milk and beer. Makes you feel like you're made of wood. reagent-name-mopwata = mopwata -reagent-desc-mopwata = Dirty, stagnant mop water. \ No newline at end of file +reagent-desc-mopwata = Dirty, stagnant mop water. diff --git a/Resources/Locale/en-US/reagents/meta/consumable/drink/soda.ftl b/Resources/Locale/en-US/reagents/meta/consumable/drink/soda.ftl index 08017c265d..300284aee9 100644 --- a/Resources/Locale/en-US/reagents/meta/consumable/drink/soda.ftl +++ b/Resources/Locale/en-US/reagents/meta/consumable/drink/soda.ftl @@ -1,6 +1,9 @@ reagent-name-cola = cola reagent-desc-cola = A sweet, carbonated soft drink. Caffeine free. +reagent-name-shirley-temple = shirley temple +reagent-desc-shirley-temple = A favorite amongst younger members of the crew. + reagent-name-changeling-sting = changeling sting reagent-desc-changeling-sting = You take a tiny sip and feel a burning sensation... @@ -28,6 +31,12 @@ reagent-desc-root-beer = A very sweet, carbonated drink reminiscent of sarsparil reagent-name-root-beer-float = root beer float reagent-desc-root-beer-float = Root beer, but now with ice cream on top. It truly is the magnum opus of Canadian summertime drinks. +reagent-name-sol-dry = sol dry +reagent-desc-sol-dry = Sweet ginger soda from outer space! + +reagent-name-roy-rogers = roy rogers +reagent-desc-roy-rogers = Solid proof that there IS something known as too sweet. + reagent-name-space-mountain-wind = Space Mountain Wind reagent-desc-space-mountain-wind = Blows right through you like a space wind. diff --git a/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml b/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml index d337d23f2a..975541a502 100644 --- a/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml +++ b/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml @@ -1,11 +1,11 @@ - type: reagentDispenserInventory id: SodaDispenserInventory inventory: + - DrinkCoconutWaterJug - DrinkCoffeeJug - DrinkColaBottleFull - DrinkCreamCartonXL - DrinkDrGibbJug - - DrinkEnergyDrinkJug - DrinkGreenTeaJug - DrinkIceJug - DrinkJuiceLimeCartonXL diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml index 91dc9f51cb..eaa4c839af 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/boozeomat.yml @@ -13,6 +13,7 @@ DrinkBeerBottleFull: 5 DrinkBlueCuracaoBottleFull: 2 DrinkCognacBottleFull: 4 + DrinkCoconutWaterCarton: 3 DrinkColaBottleFull: 4 DrinkMilkCarton: 2 DrinkCreamCarton: 5 @@ -27,6 +28,7 @@ DrinkPatronBottleFull: 2 DrinkRumBottleFull: 4 DrinkSodaWaterCan: 8 + DrinkSolDryCan: 8 DrinkSpaceMountainWindBottleFull: 3 DrinkSpaceUpBottleFull: 3 DrinkTequilaBottleFull: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml index 2f9ce3d3ae..ace9102562 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cola.yml @@ -5,6 +5,7 @@ DrinkGrapeCan: 2 DrinkRootBeerCan: 2 DrinkIcedTeaCan: 2 + DrinkSolDryCan: 2 DrinkLemonLimeCan: 2 DrinkFourteenLokoCan: 2 emaggedInventory: diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml index 38ea3a0012..98513a48a4 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/gib.yml @@ -5,6 +5,7 @@ DrinkGrapeCan: 2 DrinkRootBeerCan: 2 DrinkIcedTeaCan: 2 + DrinkSolDryCan: 2 DrinkLemonLimeCan: 2 DrinkFourteenLokoCan: 2 emaggedInventory: diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml index 96513fca8a..cb5a4f5c4b 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/pwrgame.yml @@ -6,6 +6,7 @@ DrinkGrapeCan: 2 DrinkRootBeerCan: 2 DrinkIcedTeaCan: 2 + DrinkSolDryCan: 2 DrinkLemonLimeCan: 2 DrinkFourteenLokoCan: 2 emaggedInventory: diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml index 08c0162c08..6ac70b26db 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/shamblersjuice.yml @@ -5,6 +5,7 @@ DrinkGrapeCan: 2 DrinkRootBeerCan: 2 DrinkIcedTeaCan: 2 + DrinkSolDryCan: 2 DrinkLemonLimeCan: 2 DrinkFourteenLokoCan: 2 emaggedInventory: diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml index 494f05f6a3..339683d2c9 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/soda.yml @@ -5,6 +5,7 @@ DrinkGrapeCan: 3 DrinkRootBeerCan: 3 DrinkIcedTeaCan: 3 + DrinkSolDryCan: 3 DrinkLemonLimeCan: 3 DrinkFourteenLokoCan: 3 emaggedInventory: diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml index 0dc33cf07f..a5f570bd46 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/spaceup.yml @@ -6,6 +6,7 @@ DrinkGrapeCan: 2 DrinkRootBeerCan: 2 DrinkIcedTeaCan: 2 + DrinkSolDryCan: 2 DrinkLemonLimeCan: 2 DrinkFourteenLokoCan: 2 emaggedInventory: diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml index 6afbe1eae6..b1a74fc13e 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/starkist.yml @@ -5,6 +5,7 @@ DrinkGrapeCan: 2 DrinkRootBeerCan: 2 DrinkIcedTeaCan: 2 + DrinkSolDryCan: 2 DrinkLemonLimeCan: 2 DrinkFourteenLokoCan: 2 emaggedInventory: diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml index 1104214668..ff9e512432 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_glass.yml @@ -19,6 +19,7 @@ - DrinkAloe - DrinkAndalusia - DrinkAntifreeze + - DrinkArnoldPalmer - DrinkB52Glass - DrinkBahamaMama - DrinkBananaHonkGlass @@ -27,12 +28,15 @@ - DrinkBerryJuice - DrinkBlackRussianGlass - DrinkBlueCuracaoGlass + - DrinkBlueHawaiianGlass - DrinkBloodyMaryGlass - DrinkBooger - DrinkBraveBullGlass - DrinkCarrotJuice + - DrinkCoconutRum - DrinkChocolateGlass - DrinkCognacGlass + - DrinkCosmopolitan - DrinkCubaLibreGlass - DrinkDeadRumGlass - DrinkDevilsKiss @@ -66,15 +70,19 @@ - DrinkMilkshake - DrinkMojito - DrinkNTCahors + - DrinkPainkillerGlass - DrinkPatronGlass + - DrinkPinaColadaGlass - DrinkPoscaGlass - DrinkRedMeadGlass - DrinkRewriter + - DrinkRoyRogersGlass - DrinkRootBeerFloatGlass - DrinkRumGlass - DrinkSakeGlass - DrinkSbitenGlass - DrinkScrewdriverCocktailGlass + - DrinkShirleyTempleGlass - DrinkSuiDreamGlass - DrinkSingulo - DrinkSoyLatte diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_soda.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_soda.yml index c8a941c128..e3339082b3 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_soda.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Food_Drinks/drinks_soda.yml @@ -31,6 +31,7 @@ - DrinkDrGibbCan - DrinkEnergyDrinkCan - DrinkShamblersJuiceCan + - DrinkSolDryCan - DrinkPwrGameCan - DrinkHotCoco - DrinkHotCoffee diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml index 67d7954038..84639c9af0 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml @@ -112,6 +112,24 @@ - type: Sprite sprite: Objects/Consumable/Drinks/tomatojuice.rsi +- type: entity + parent: [DrinkBottleVisualsOpenable, DrinkBottlePlasticBaseFull] + id: DrinkCoconutWaterCarton + name: coconut water + description: It's the inside of the coconut that counts. + components: + - type: SolutionContainerManager + solutions: + drink: + reagents: + - ReagentId: CoconutWater + Quantity: 50 + - type: Drink + - type: Label + currentLabel: coconut water + - type: Sprite + sprite: Objects/Consumable/Drinks/coconutwater.rsi + - type: entity parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseFull] id: DrinkCreamCarton diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml index bf00dd6327..aac2803dd2 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks.yml @@ -258,6 +258,22 @@ - ReagentId: Antifreeze Quantity: 30 +- type: entity + parent: DrinkGlass + id: DrinkArnoldPalmer + suffix: arnold palmer + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: ArnoldPalmer + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/arnoldpalmer.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkAtomicBombGlass @@ -437,6 +453,22 @@ sprite: Objects/Consumable/Drinks/bloodymaryglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkBlueHawaiianGlass + suffix: blue hawaiian + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: BlueHawaiian + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/bluehawaiian.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkBooger @@ -501,6 +533,35 @@ sprite: Objects/Consumable/Drinks/chocolateglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkCoconutRum + suffix: coconut rum + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: CoconutRum + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/coconutrum.rsi + state: icon + +- type: entity + parent: DrinkGlass + id: DrinkCoconutWaterGlass + suffix: coconut water + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: CoconutWater + Quantity: 30 + - type: entity parent: DrinkGlass id: DrinkCoffee @@ -533,6 +594,22 @@ sprite: Objects/Consumable/Drinks/cognacglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkCosmopolitan + suffix: cosmopolitan + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: Cosmopolitan + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/cosmopolitan.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkCream @@ -1340,6 +1417,22 @@ sprite: Objects/Consumable/Drinks/orangejuice.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkPainkillerGlass + suffix: painkiller + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: Painkiller + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/painkiller.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkPatronGlass @@ -1356,6 +1449,22 @@ sprite: Objects/Consumable/Drinks/patronglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkPinaColadaGlass + suffix: piña colada + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: PinaColada + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/pinacolada.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkPoisonBerryJuice @@ -1484,6 +1593,22 @@ sprite: Objects/Consumable/Drinks/rumglass.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkRoyRogersGlass + suffix: roy rogers + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: RoyRogers + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/royrogers.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkSakeGlass @@ -1609,6 +1734,22 @@ sprite: Objects/Consumable/Drinks/glass_white.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkShirleyTempleGlass + suffix: shirley temple + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: ShirleyTemple + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/shirleytemple.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkSilencerGlass @@ -1641,6 +1782,22 @@ sprite: Objects/Consumable/Drinks/singulo.rsi state: icon +- type: entity + parent: DrinkGlass + id: DrinkSolDryGlass + suffix: sol dry + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: SolDry + Quantity: 30 + - type: Icon + sprite: Objects/Consumable/Drinks/sol_dry_glass.rsi + state: icon + - type: entity parent: DrinkGlass id: DrinkSnowWhite diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml index face999df8..e2361cfa6e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml @@ -789,6 +789,23 @@ - type: Label currentLabel: ice +- type: entity + parent: DrinkBottlePlasticBaseFull + id: DrinkCoconutWaterJug + name: coconut water jug + description: It's on the inside of the coconut that counts. + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 300 + reagents: + - ReagentId: CoconutWater + Quantity: 300 + - type: Drink + - type: Label + currentLabel: coconut water + - type: entity parent: DrinkBottlePlasticBaseFull id: DrinkCoffeeJug diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml index 2aec576177..585e5ed14d 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml @@ -239,6 +239,24 @@ - type: Item sprite: Objects/Consumable/Drinks/space-up.rsi +- type: entity + parent: DrinkCanBaseFull + id: DrinkSolDryCan + name: sol dry + description: Sweet ginger soda from outer space! + components: + - type: SolutionContainerManager + solutions: + drink: + maxVol: 30 + reagents: + - ReagentId: SolDry + Quantity: 30 + - type: Sprite + sprite: Objects/Consumable/Drinks/sol_dry.rsi + - type: Item + sprite: Objects/Consumable/Drinks/sol_dry.rsi + - type: entity parent: DrinkCanBaseFull id: DrinkStarkistCan diff --git a/Resources/Prototypes/Flavors/flavors.yml b/Resources/Prototypes/Flavors/flavors.yml index 446abf99ed..2b55efc21b 100644 --- a/Resources/Prototypes/Flavors/flavors.yml +++ b/Resources/Prototypes/Flavors/flavors.yml @@ -624,6 +624,11 @@ flavorType: Complex description: flavor-complex-dr-gibb +- type: flavor + id: gingersoda + flavorType: Complex + description: flavor-complex-ginger-soda + - type: flavor id: lemonlimesoda flavorType: Complex @@ -694,6 +699,11 @@ flavorType: Complex description: flavor-complex-rum +- type: flavor + id: coconutrum + flavorType: Complex + description: flavor-complex-coconut-rum + - type: flavor id: coffeeliquor flavorType: Complex @@ -739,6 +749,31 @@ flavorType: Complex description: flavor-complex-ice +- type: flavor + id: arnoldpalmer + flavorType: Complex + description: flavor-complex-arnold-palmer + +- type: flavor + id: bluehawaiian + flavorType: Complex + description: flavor-complex-blue-hawaiian + +- type: flavor + id: cosmopolitan + flavorType: Complex + description: flavor-complex-cosmopolitan + +- type: flavor + id: painkiller + flavorType: Complex + description: flavor-complex-painkiller + +- type: flavor + id: pinacolada + flavorType: Complex + description: flavor-complex-pina-colada + - type: flavor id: longisland flavorType: Complex diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml index f6bac28b32..44eba0f848 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml @@ -79,6 +79,26 @@ reagent: Ethanol amount: 0.1 +- type: reagent + id: BlueHawaiian + name: reagent-name-blue-hawaiian + parent: BaseAlcohol + desc: reagent-desc-blue-hawaiian + physicalDesc: reagent-physical-desc-tropical + flavor: bluehawaiian + color: "#47687b" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/bluehawaiian.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.2 + - type: reagent id: Cognac name: reagent-name-cognac @@ -732,6 +752,46 @@ reagent: Ethanol amount: 0.2 +- type: reagent + id: CoconutRum + name: reagent-name-coconut-rum + parent: BaseAlcohol + desc: reagent-desc-coconut-rum + physicalDesc: reagent-physical-desc-strong-smelling + flavor: rum + color: "#cccbc8" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/coconutrum.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.2 + +- type: reagent + id: Cosmopolitan + name: reagent-name-cosmopolitan + parent: BaseAlcohol + desc: reagent-desc-cosmopolitan + physicalDesc: reagent-physical-desc-citric + flavor: cosmopolitan + color: "#f73030" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/cosmopolitan.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.15 + - type: reagent id: CubaLibre name: reagent-name-cuba-libre @@ -1254,6 +1314,26 @@ types: Poison: 1 +- type: reagent + id: Painkiller + name: reagent-name-painkiller + parent: BaseAlcohol + desc: reagent-desc-painkiller + physicalDesc: reagent-physical-desc-refreshing + flavor: painkiller + color: "#e6cb47" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/painkiller.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - !type:AdjustReagent + reagent: Ethanol + amount: 0.2 + - type: reagent id: Patron name: reagent-name-patron @@ -1292,6 +1372,18 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true +- type: reagent + id: PinaColada + name: reagent-name-pina-colada + parent: BaseAlcohol + desc: reagent-desc-pina-colada + physicalDesc: reagent-physical-desc-tropical + flavor: alcohol + color: "#e8dba4" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/pinacolada.rsi + state: icon + - type: reagent id: Sbiten name: reagent-name-sbiten diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml index 946a2a6e44..5c09b3c909 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml @@ -48,6 +48,34 @@ - !type:SatiateThirst factor: 1 +- type: reagent + id: CoconutWater + name: reagent-name-coconut-water + parent: BaseDrink + desc: reagent-desc-coconut-water + physicalDesc: reagent-physical-desc-milky + flavor: nutty + color: "#f4eadb" + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 4 # Coconut water is 94% water + +- type: reagent + id: CreamOfCoconut + name: reagent-name-cream-of-coconut + parent: BaseDrink + desc: reagent-desc-cream-of-coconut + physicalDesc: reagent-physical-desc-syrupy + flavor: creamy + color: "#FFEABF" + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 2 + - type: reagent id: CafeLatte name: reagent-name-cafe-latte @@ -406,6 +434,26 @@ - !type:SatiateHunger factor: 4 +- type: reagent + id: ArnoldPalmer + name: reagent-name-arnold-palmer + parent: BaseAlcohol + desc: reagent-desc-arnold-palmer + physicalDesc: reagent-physical-desc-sweet + flavor: arnoldpalmer + color: "#d8cc5d" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/arnoldpalmer.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 4 + - !type:AdjustReagent + reagent: Theobromine + amount: 0.05 + - type: reagent id: Pilk name: reagent-name-pilk diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml index 63ae5b25d5..ba5adc4f2a 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml @@ -8,6 +8,23 @@ color: "#6c2828" recognizable: true +- type: reagent + id: RoyRogers + name: reagent-name-roy-rogers + parent: BaseSoda + desc: reagent-desc-roy-rogers + physicalDesc: reagent-physical-desc-sweet + flavor: cola + color: "#262019" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/royrogers.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 4 + - type: reagent id: ChangelingSting name: reagent-name-changeling-sting @@ -116,6 +133,35 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false +- type: reagent + id: SolDry + name: reagent-name-sol-dry + parent: BaseSoda + desc: reagent-desc-sol-dry + physicalDesc: reagent-physical-desc-fizzy + flavor: gingersoda + color: "#ccb87e" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/sol_dry_glass.rsi + state: icon + +- type: reagent + id: ShirleyTemple + name: reagent-name-shirley-temple + parent: BaseSoda + desc: reagent-desc-shirley-temple + physicalDesc: reagent-physical-desc-fizzy + flavor: sweet + color: "#af2221" + metamorphicSprite: + sprite: Objects/Consumable/Drinks/shirleytemple.rsi + state: icon + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 4 + - type: reagent id: SpaceMountainWind name: reagent-name-space-mountain-wind diff --git a/Resources/Prototypes/Recipes/Reactions/drinks.yml b/Resources/Prototypes/Recipes/Reactions/drinks.yml index 7608369b2c..c810ebb0ce 100644 --- a/Resources/Prototypes/Recipes/Reactions/drinks.yml +++ b/Resources/Prototypes/Recipes/Reactions/drinks.yml @@ -54,6 +54,16 @@ products: Antifreeze: 4 +- type: reaction + id: ArnoldPalmer + reactants: + IcedTea: + amount: 1 + Lemonade: + amount: 1 + products: + ArnoldPalmer: 2 + - type: reaction id: AtomicBomb reactants: @@ -76,6 +86,20 @@ products: B52: 3 +- type: reaction + id: BlueHawaiian + reactants: + CoconutRum: + amount: 2 + JuicePineapple: + amount: 1 + JuiceLemon: + amount: 1 + BlueCuracao: + amount: 1 + products: + BlueHawaiian: 5 + - type: reaction id: CogChamp reactants: @@ -90,6 +114,24 @@ sound: path: /Audio/Magic/Cults/ClockCult/steam_whoosh.ogg +- type: reaction + id: BahamaMama + reactants: + Ice: + amount: 1 + JuiceOrange: + amount: 1 + JuicePineapple: + amount: 1 + Rum: + amount: 1 + CoconutRum: + amount: 1 + Grenadine: + amount: 1 + products: + BahamaMama: 6 + - type: reaction id: Barefoot reactants: @@ -182,6 +224,40 @@ products: CafeLatte: 2 +- type: reaction + id: CoconutRum + reactants: + Rum: + amount: 2 + CoconutWater: + amount: 1 + products: + CoconutRum: 3 + +- type: reaction + id: Cosmopolitan + reactants: + Vodka: + amount: 1 + JuiceBerry: + amount: 1 + JuiceLime: + amount: 1 + products: + Cosmopolitan: 3 + +- type: reaction + id: CreamOfCoconut + reactants: + CoconutWater: + amount: 1 + Sugar: + amount: 1 + Milk: + amount: 1 + products: + CreamOfCoconut: 3 + - type: reaction id: CubaLibre reactants: @@ -638,6 +714,34 @@ products: Patron: 10 +- type: reaction + id: Painkiller + reactants: + JuicePineapple: + amount: 3 + CoconutRum: + amount: 1 + JuiceOrange: + amount: 1 + CreamOfCoconut: + amount: 1 + products: + Painkiller: 6 + +- type: reaction + id: PinaColada + reactants: + JuicePineapple: + amount: 3 + JuiceLime: + amount: 1 + Rum: + amount: 1 + CreamOfCoconut: + amount: 1 + products: + PinaColada: 6 + - type: reaction id: Posca reactants: @@ -680,6 +784,16 @@ products: RootBeerFloat: 3 +- type: reaction + id: RoyRogers + reactants: + Cola: + amount: 2 + Grenadine: + amount: 1 + products: + RoyRogers: 3 + - type: reaction id: Sbiten reactants: @@ -700,6 +814,16 @@ products: ScrewdriverCocktail: 3 +- type: reaction + id: ShirleyTemple + reactants: + SolDry: + amount: 2 + Grenadine: + amount: 1 + products: + ShirleyTemple: 3 + - type: reaction id: Silencer reactants: diff --git a/Resources/Textures/Objects/Consumable/Drinks/arnoldpalmer.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/arnoldpalmer.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..81261d0f54f589b5acb8b36b90ae2edf528fd3bd GIT binary patch literal 4790 zcmeHLc~BH*7H>h0Fbm72vYu^IvXV{D^z<}ybQln4I7S^r80A=9>FMslUYUdLh8gfG zaHFdxY&;_b6OXv=YP_&CRzyX>;FhAINj7TKL|qgW)Lj*g(d;)ffKZ#NEo;~Rn5v%c ze&2h)_ulWl_tku}EF(QNIB0kf1VO=uG<_zx!|p54AAAdCWe>rvsmzokW>QYr!P_ld zAq$J84i;uzoCShh7p)o7LK@+~=QktYuJDx^FIBmEiLOK&Zx`B<}UdD`_QxFYd@@86MoN`Fvfpj+{tyTSJvrr zc31FEPPU9s*xcHB%Pffwj-EJ-k0QqWX2{yI(Nsr!&;#G-j7P1`)$>}uI`A2q5^ml$ zGT*aWQBoxqjvke#YUeB8R0O+yC8n z&E~I;9nZ}U$W99V5h^NiWQr@pfBGOYugT^3_D{~P(aw9&rd)RWg$Q3$3x00d!SyG1 zFE7syjG7o)zp-hGwkr2jgE0ScWAon+jX(3xgsz*nvV&rL=Oab$wl7JpONu|lwbyhl zYy9-B*ruCJtNmxa|77Kz+LQL0$sv+>MIm$kUrm&G@0Z86>^Rtd?EUu>0^4~Cg0#8gCHN-@XowOrm`7)xTS^MLb%EV-8)yyFn z|JFwTA*-$j{IvM$h!>m(>CK z4uawnT@H$#%Zjj>E#Pcg7Cc11ctznSFgrImA z2>`6DNWm^^p-muNTEv4(f@il_hQJ;bajq80F=oIzJI}&|l#pU*vWqLhk%S;Po@Xp% zraq+`0=#LFIilzwWiqGJDRnBOcD_I+*Jv~{442_J3N%om)Fx6c)Fwo`A-ouRR-k## zA#!#b?8c|I1=w~ei z6PQw2CM(#Bd74cwVQpe`UkHZowRaTrg`RX6TE-T#R-h^XukwB_Qw_$9UJEw`1)SC4 zu>xfG(-b+&OS1aK=3eon(>D-c-izB$yC-*#GSD&_Nxhvec86!sYZ149lCjeqLwX+7 zxEx~{21jv z0-y?99;d?OYFt6fJx~lyrr3Ea1&k;TgXIO#i*8goCRGp~b9Z4#kPe`h za(5~K@W??nq>g7P(axLf_ChV0Pz)tfdP-ygD25XxhLdu&Nsg1ahQyR8 z7Dr-z^z961DgAHS?(u=+y+u#s1mM5aBl6Bv7F*4Fna;hFW1s#MI{&j{?2_$bg(sBg|l0>+#K~Qx~ z6c7f824ix-EuZkPQGt0A&Vj!|1}!$|lT0~{9cz!K`y_=fJ$hkrKG9UU^z1PBKuk>2 zN2wD=L`Y`WpKdrk>F(W6zx+eM{i(+!_kCg_QzTnr+UhTjl2l$FEa_}G=gRt>#d-AU zb4%OCKO!&Yov2&39W{m+emm4JzgBytx;!_i{>Fn6pS>o@xuB7=4v+l;I+(b;Xj@B1 zz3|H#;p(D6PpVJ1i}QADy*>Qb@BQ#?*SfZtwFgFCNw|1@!zLgP$$1*x!tUR=#vl#* z`c3w+N*a7iub*~yTI;Z>^G-)Y>SyVZ7r)VN;ImQpT8^& ze@AJBs&BXP`As|gpw{{?#>8A{-q-M%`cXl7AToW)^X$P(&7m_lH(qYLpcq57jHqw# zoPpJq?rCx4U#p1d2)_R!?CbR5kLu}&itT3Ihv5sF@`YX3PC-b6bI$e09~^uhcjw_h z0x(4HyW&<(xoc=kE%ffjm4BY`e%s83szuGTAHVK%42qWcohZI^?9t&_J5841vO9r8 dr|H9>#FI5kRad+Anm~mhLvp%)*Tnpae*@Dd%6k9+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/arnoldpalmer.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/arnoldpalmer.rsi/meta.json new file mode 100644 index 0000000000..f76e611841 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/arnoldpalmer.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/bluehawaiian.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/bluehawaiian.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d192a884616ee9ae73c071829e15f2a0efaa0db6 GIT binary patch literal 4796 zcmeHLX;c(f7A|BJgBpa0d(mhHjJ+>(mo&)UjW!~nEE1)ys6a4ri%|hVqt3XY0dyF{C>rKZxw+rT#KI(934Xd2CCpq`G{d*Q$*A)k!Ym{`mryh%#^YYm_ z&lMr1Up8%K9YSpk?(6+~G)u~>SJYK@@&aF#h41TW^?RP&o;B~+@jH!p0UP#(UKFko zWGkxTJ^VuxHd>A6E zMjeQpyU#E&?QF!Kf7wUNKadw(8PVogf$U6pVJn-u#bt8n>A&2*-6X$ux-l-sKE{9I zODN5tjid^l`**m+H<+|HHXD0q8oQyram1nPldPjJaDK`?vGd%~yia2s+yW+^`n+M0 zcvsx{Gx}9G>zi6?JTLvzxA(!r7{~XmSJBcocB~7o_4lbEJ4$+U>yOOyYIxAF)$YTB ze-}QkI;SaFIDVWDHx<9q(}2pqzS^jpe5`7(^QDQQE=%{Xa(_^DCS${~_=;n{il2`Q zv{lWiPcOzKiDRW@a6rfm*J#u|>~Kh4F0Zpm{BnQ3Uoc}=f-6fm?{hoXE&s6Z&$)H8 zxUs{_+snm1b7g8DHr?TuF%|1nAJ1wxJhpk_XB`vYv@&IkzO>96iNEXM)@sN2YJPF8 zeL@%HvA7zSbB=b={7k%OS}S#&On0Vij^%wFpY|V;u<-@FsZbl>LAF+&!k1M6oP`~gpyQ? zY27t-G?>K2v>3jOCDR5HNu(rGM?__YM`M{Omclq)_a&C1~7sMJ*FeI6sb|eW=vGBNvFg# z8j!=U{ZnaWvLSf2evk#g2h)UVnQR7&sZudVTIi`@0{|Ix=yxsj(V$0}k%V58uEU66 z1EHooMnd4&ki9ltmud+I$CyMap#rLUuqykFB}1jMh#?Cz1xiw-wO9eN-_WE;#V}cK z_-2+^!WroZFdxEwL;H2?7GsfP zvFUPDK;Rq^MtHM@BOn&*NKln%>PWB5P&k0%vjiLrmymj}euiagpr@jUw1LsUFqO146AWA00zt8X5cH^lz%70PtN{_0 zgsPPU*gpmf_VqmZJH^1lP@K*7=F&MrJ_i(ow}LLj6d0W+;t7S`e2k3>1~NE=uGc6i zBdR0(m4HXU6(~>(SFq<`s=VIx#+XEy^8hHLvpDo&%D6P!v=t8W1$_M@ufaV0kxRhv=pt{$?2n1U88ip6$5Xj zJX&4aWelCFjgyx(?ig>N#@%M zDlTyYllGKU7Ht1;jI+~3_Y;X~B?OI0mInDp$JTdlUo3G!-M%aB-JSNm;wC>bpo12$ zGyO}3^qya}r|HR0<%wgmcUbz07@RY|@hrdmX zE3WBVeXHF+VVj|4%5~&Iw}9K-Q+uiQR__I9Cb;@@+uGtUrk6VA7Bl~<2%dE5yCmkO zrkd*5we`YT8}41*5OATQ8ah%9op-#I&#FP!XZw8X(_rvCJ9qlJ%gsf{iyZkY`)VDJ zow47wX#Sp4I{dR8lUFE@ZVjDwIr{ppn3Vfj1z~D@chk=y=!A{x(gn2At~;saRgb4R zo$I&i(fd8UG2Zo^67H0q`ImJaMQ!m}S&2Mf(}S>UTc3Kj?{3nQtG9`4q53OJR4pHK z=cXXvr+-q{eDzLyx0`C$+P+SwYc5>V+54;cCuYe$ z@+-D(zQ6u{(^R}NyY=`4tj_f_s9^8aLy`GKEsaOqAVK65&*rm|v0kqEIqof2evEgg z&!K$)O$#u{E_D3e4od64TOuK5Z(A0T%ngbU^Q_prEdcRwKhW?g*D2wuxU#YHPVV-O z!X5Y4CWlks{Am_da+rEVR=0hvkiOUvx9miS+Yg%#9>ydAo-R{b>RR^{mfP&KEt}^~ zyNDG0xF}$I?~0?3GM?>udbC3=DssA&b%%Ajz8>5B((0rD3NC&(<{&6UNE#d-^i@D& G_J05u#{S9x literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/bluehawaiian.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/bluehawaiian.rsi/meta.json new file mode 100644 index 0000000000..f76e611841 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/bluehawaiian.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/coconutrum.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/coconutrum.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4adab5cb6e6b935cc3878d2c6e533abe8fe82dee GIT binary patch literal 4451 zcmeHLdsGzH86S|BYe-SC0Z-I%r4bCXJNtm$9a#`rU{|xS!nQmPIWjwQ7e@BQ&ak_n zz$sW;kYY5g4-Tdnv{I{)O3blUjLOR#lF-K5w2&xCY<&f^O(GJk_RjJ&%{e`s)BMMt zGdnZ){=VP$eZTL!_w3yoLt1LEV5tB>kYJrwlL7B2e+31=Z?>%LOL)6fX3XX?NH^+m z+Rcmwpj@c~puoeJ5yaDPH6$+TK!eVGQ5)}*W4f>UwZ7o%>iD-?A{Gw}*S*;KzTl6K zE7Z6Dg6eept~%d2uq^jY?N=8(O|G=#2iHbK^c^J*R(a-EP>1(^_U}#UM=zc^mfG8O zd3dFz%^-g?)Eilma<`>x7rut{3tum&Cb~b(v$WT@4#jnJA4=K64kV1;8Q2>A_RuC^GL>;*IgmSmkkF$e_dFAq&B(L&@VVa?9cn!U%zxu=yRzTPY(|E zn66&z%E=1MN(^~~6uTT5-0nqB_J!tldK@3^a*r%`-$M@NfMb7KJkR)^^n;o+`+HB; z{x~ZrY<b%+cYQW2{JluWvRIj~p7u^&{5JrY4hjn4x{T+mMt-oD>wW$rM5;s)T4gXT%V9EI*_*n zcSbh_EZOr};FId>A2)Q}j#5O029|BMj8V@AeeQc=hqZFWfa|W`{e*d0xjmbUeA!ldmuD^yJMUjrWU~*IH^w75ceacM zD3yLMZ1_d{@IQyo4_|w%zA}6-P?qWZdGJ^HS76h*7}#9d`j-gGZWWQV-2_A)s{?i& zg2W|w93)i)IMf6R7@Jyn@9f(`l%dtatQbA6cO-#AMqB0tnPq84s;r1o(ZYmyL7azx z1XjS2sK;utv4lr0^zst$nI9GlQ7?omQVX;71~kd;1gKmj7vWg4hjB@T@d7l?Nt=lb zP09oXd{YYxInF_d#csD-hy*w3toZ(#_I4| zL9w4ga*TOetfyk*XT0gm34M#Br=SQH3LkJ$Eq-u z!X(3RnM$RIl>)O|9^<8=DI&%0w34u#jFl_^Vu!83JHZQ1BpP&Tp;UxVj~FZ@XNCrF z4KOy^?q;W_jEogzawM;(M1d=%u`(HqTPl+&71N*}0VfN4k!O|QBAMJf!xx5t=|E{o zzEdHAcN}IzBsl@e*_}qa-J%xqL7}|m)U+NhD4OI*4aosWic94LE+r&NBd#Q5v4kuJ z!(#}12Hs9H=FE>063;HnWUJBhWRQ;h0Lt{20Lpv zb8gZJ5(}V?P%GG=Uaio`iBd&*Rhx>&T?qI(K*=y%icL!vD-=&8E9Q5M$!z1q|D{Kq z7cgUsfp+6#aO;9Qp?GR5oX`vU{w_Zgb@(n_py-^FS?N0`*PL9lQeal#x$c^iYgP)( z3Ov_c|2Me=(}yWwgTH{>@Tl}BqCW{9vjR*TQ#D8`QiyEbQyt9z6ENSQ&0!H_!D9aM zK^hvv;9wx9(X7q z8NS?1fzfV=?H(KJI{9jz^m2WZZ7GE2w_JZ~Y~RU9@r&^>Mc44S)v=Ft>GSI9jD7wQ z{vW0Xyr!tEDBs(8x4ZJAcjY^Mvt6C5(>L7TRkaBhq+E>T2@s?v-Ow7PHC8~q5M6Sb K=8g6FRsR9yS6zSr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/coconutrum.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/coconutrum.rsi/meta.json new file mode 100644 index 0000000000..f76e611841 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/coconutrum.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/coconutwater.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/coconutwater.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a270180dcd4e8dc61cd9fc37ae61a2f98118fb46 GIT binary patch literal 4497 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 PW`NkN8!ac-71#U+x9KO& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/cosmopolitan.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/cosmopolitan.rsi/meta.json new file mode 100644 index 0000000000..f76e611841 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/cosmopolitan.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/painkiller.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/painkiller.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..caa81b36f0adb1d9dbc5c964dab994c504eea8b1 GIT binary patch literal 4729 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 OKoW7V|B;!Cmj4b0zCE`9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/royrogers.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/royrogers.rsi/meta.json new file mode 100644 index 0000000000..d16d731d7f --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/royrogers.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 1, + 1, + 1, + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/shirleytemple.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/shirleytemple.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..88fdd5e79b971275c4012ee5afd12513bc377fb6 GIT binary patch literal 929 zcmV;S177@zP)EX>4Tx04R}tkv&MmKpe$iQ>9WWqIM8*$WWc^q9Tr^ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfc5qU3krMxx6k5c1aNLh~_a1le0HIlBs@W3*RLwHd ziMW`{uZn?J2pB>Tz@WrTJ(*d|!gGAx!^hXVD9`df_vh$W3MK=5B5{oAhDE$VJiBS> zocD>ttSl+S=fsl+U6A;Z>$1yloJ$T1JTq)$)APh(VzJc4au>6*p%Tv!M-)|~d?Dwu z!g-6cTCKD8J^2em1#Kn6b(&*HUG?f@fCx@1U>T3B0I5-3* zN|e3s@$SCv-u^w)?(YXPQ*w>*4?Up(000JJOGiWiuK*wbAP5)L5C8xG32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rj0ul`cIh?r=B>(^cpGibPR9M69l)q~fQ5?iS^Dgnw zBU*0|%d}R4h&I|p#8MkuTPu4-j3D@8!8A!zc3s_28rcPpwS2bMu&&h;w`jKc~(ps zj6gzKVVvi9p1304zW?9{gJEb)!1EiIR)4?!+`pM+$0A^O400000NkvXXu0mjf Djq#tS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/shirleytemple.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/shirleytemple.rsi/meta.json new file mode 100644 index 0000000000..f76e611841 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/shirleytemple.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ace08a9ffb0069ae73de8e2063cb25563ad34865 GIT binary patch literal 4764 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 KGk%m>Q28G+kH&NW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/inhand-left.png b/Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..3c03c07742b267655d40be9d93adefed258463bc GIT binary patch literal 4557 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/meta.json new file mode 100644 index 0000000000..8bc80009c5 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/sol_dry.rsi/meta.json @@ -0,0 +1,53 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/9c980cb9bc84d07b1c210c5447798af525185f80/icons/obj/food.dmi, Sol Dry from /tg/.", + "states": [ + { + "name": "icon" + }, + { + "name": "icon_open" + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Drinks/sol_dry_glass.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/sol_dry_glass.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c4bf829e5d159a8501c10a5388bd153f99343453 GIT binary patch literal 4367 zcmeHLdr%bj9bc7Ka8L#hLriMdwK0;qce{6cugx8=y8})+BycI9wz9Vm*l>4y+%DXK zT8)g%K-36nCxntTh}P5uYawP573F0yRmZe6jY&=G7)QLsVC>6SjP|$3dy<(BGtGb8 z%--&PAD`d%`}ux<-?`t_=jCR_#V(75ASlkBZOsRFSiWMSz_(aa^G|T=t8o@d`BVV* z`2~)5v#?a{V_`PPa}X5#*pru@&=1F)9BoKRe{OZkAQ8&h{{C_+4TVXY0FP zeY&r`wke{x;d+Z0abWGiy0rGTxZJ0s7Vlek_E3!>GNZnt>tIXwgVzrY^&F`ydp9XG zw5xLI;df5oPr7^V@)MukzMlEPp5~lv@B245;)UpksyDZ^wpC?3@rUZ08-H@N+td40 z&RgQu7;fpKJ4PFOJP~o7`|(a>m9nJg!qI)(w~+CtK005V(A!*g7J}y0@)k>;-C~)@ z2ISDXt@VZpWI&+UvW0?m7DvKy$2g?NAo_8?I4>s{U_3~tV!{3R`0PZ zR|Z`l^qwg$j4n)%zXw%R`SPX4ga7ISlcN1bQ;_y1D$dBm5g3ko+3ZZ4lM z{_=pH+;A->=~9&P$WtvRqc@E}E7u=qviDv)l&pBZXY`S61C}rqrO1qRUwccCn?r*NogcaTi{NKrLP;nw)E4Bc)JRG!Z1OW4 znQzS;hX8M8q)d{0q)HVC1e5`dQt+3maHG+v!qh6Y8U+@pSnZXlAnFxY$`E51R#v3_ zyieiE~BM8vL6Y+U`4#y8=Q<+Gwt>8Dv+73-B&PKRLVNq=9Z-yKeep;fG#^#D^5tcuTAGRyABoAi(=DCIrA zuoobEhNZ-FQ)JDEP1c0dnH~smpTwPEJ&}9Z7+5(Rq*b6RSV1G#X5g8q@{` z#c7R8?ZUMN1BZv97@Eu!{2mIFllM@itjgyt4J%~A$@DzC8Br^-DM_B2k~rW1_5kl? zgn&4ua`GOwK%!(maXn^G>(mAXQGP&Cj}@! zn_dcd1YCgz4RZyr9xqk$O#46?E7t)~hGJ@TiZTLGjVG&;C&om!Ce=6iFog}KjTqoJ zCIh1jOhVP-ZY9y;IQXS@#I;R*nHZjo8>J4e?XU9)0fR>pJPHAmO17?_puTzCE7 z=!%^>OtD_@3n&1NN=-NF-vGy~DA&3yE0hJ5L0g(?zc*68egc%y=ck1i_+e1P3W=i zIhj*$Xb_0KTkjQdP&<4?l*3`aK2-p=gaLe ef36FM`ZNULrpz@oTD}Y<0@-c3)*~4uJO2wSlrY-> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/sol_dry_glass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/sol_dry_glass.rsi/meta.json new file mode 100644 index 0000000000..f76e611841 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/sol_dry_glass.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "states": [ + { + "name": "icon" + } + ] +} From 16e3aed2490f1ace427c9730692fcde373277b26 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 06:42:20 +0000 Subject: [PATCH 091/206] 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 946856290a..f903f70f29 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: Botany's hatchet, spade, and hoe have received a damage decrease to 10, - 10, and 6 damage respectively. - type: Tweak - id: 5785 - time: '2024-01-25T01:37:11.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24481 - author: Minty642 changes: - message: Fixed Reinforced Glass Recipe in Ore Processor! @@ -3808,3 +3800,10 @@ id: 6284 time: '2024-04-01T06:06:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/17778 +- author: musicmanvr + changes: + - message: Added Sol Dry, 8 new cocktails and coconut water. + type: Add + id: 6285 + time: '2024-04-01T06:41:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25367 From da69b0ab493836971d06cf30943f43734756bd0d Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Mon, 1 Apr 2024 02:48:49 -0400 Subject: [PATCH 092/206] Add ERT Chaplain (#25956) * ERT Chaplain * Make BibleUser * It was not intended * reword my poor words * 1984 a comment that I decided was unnecessary. * Update Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- .../ghost/roles/ghost-role-component.ftl | 3 + .../Locale/en-US/job/job-description.ftl | 1 + Resources/Locale/en-US/job/job-names.ftl | 2 + .../Fills/Backpacks/StarterGear/backpack.yml | 21 ++++++ .../Entities/Clothing/Back/backpacks.yml | 9 +++ .../Clothing/Head/hardsuit-helmets.yml | 15 +++++ .../Clothing/OuterClothing/hardsuits.yml | 14 ++++ .../Entities/Clothing/Uniforms/jumpsuits.yml | 11 ++++ .../Entities/Markers/Spawners/jobs.yml | 12 ++++ .../Entities/Mobs/Player/humanoid.yml | 60 ++++++++++++++++++ .../Roles/Jobs/Fun/emergencyresponseteam.yml | 55 ++++++++++++++++ .../Prototypes/Roles/play_time_trackers.yml | 3 + .../ertchaplain.rsi/equipped-BACKPACK.png | Bin 0 -> 806 bytes .../Back/Backpacks/ertchaplain.rsi/icon.png | Bin 0 -> 553 bytes .../Backpacks/ertchaplain.rsi/inhand-left.png | Bin 0 -> 654 bytes .../ertchaplain.rsi/inhand-right.png | Bin 0 -> 708 bytes .../Back/Backpacks/ertchaplain.rsi/meta.json | 26 ++++++++ .../ERThelmets/ertchaplain.rsi/icon-flash.png | Bin 0 -> 374 bytes .../ERThelmets/ertchaplain.rsi/icon.png | Bin 0 -> 386 bytes .../ERThelmets/ertchaplain.rsi/meta.json | 41 ++++++++++++ .../ertchaplain.rsi/off-equipped-HELMET.png | Bin 0 -> 828 bytes .../ertchaplain.rsi/off-inhand-left.png | Bin 0 -> 677 bytes .../ertchaplain.rsi/off-inhand-right.png | Bin 0 -> 707 bytes .../ertchaplain.rsi/on-equipped-HELMET.png | Bin 0 -> 796 bytes .../ertchaplain.rsi/on-inhand-left.png | Bin 0 -> 685 bytes .../ertchaplain.rsi/on-inhand-right.png | Bin 0 -> 706 bytes .../equipped-OUTERCLOTHING.png | Bin 0 -> 1793 bytes .../ERTSuits/ertchaplain.rsi/icon.png | Bin 0 -> 637 bytes .../ERTSuits/ertchaplain.rsi/inhand-left.png | Bin 0 -> 541 bytes .../ERTSuits/ertchaplain.rsi/inhand-right.png | Bin 0 -> 528 bytes .../ERTSuits/ertchaplain.rsi/meta.json | 26 ++++++++ .../equipped-INNERCLOTHING-monkey.png | Bin 0 -> 974 bytes .../equipped-INNERCLOTHING.png | Bin 0 -> 1393 bytes .../Jumpsuit/ert_chaplain.rsi/icon.png | Bin 0 -> 421 bytes .../Jumpsuit/ert_chaplain.rsi/inhand-left.png | Bin 0 -> 551 bytes .../ert_chaplain.rsi/inhand-right.png | Bin 0 -> 544 bytes .../Jumpsuit/ert_chaplain.rsi/meta.json | 30 +++++++++ 37 files changed, 329 insertions(+) create mode 100644 Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/icon-flash.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/off-equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/off-inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/off-inhand-right.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/on-equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/on-inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/on-inhand-right.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi/icon.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi/meta.json create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/equipped-INNERCLOTHING-monkey.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/equipped-INNERCLOTHING.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/meta.json diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index d8c88f3c34..23a178d282 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -164,6 +164,9 @@ ghost-role-information-cerberus-rules = You are an intelligent, demonic dog. Try ghost-role-information-ert-leader-name = ERT Leader ghost-role-information-ert-leader-description = Lead a team of specialists to resolve the station's issues. +ghost-role-information-ert-chaplain-name = ERT Chaplain +ghost-role-information-ert-chaplain-description = Assist with mourning to resolve the station's crew moral issues. + ghost-role-information-ert-janitor-name = ERT Janitor ghost-role-information-ert-janitor-description = Assist with custodial efforts to resolve the station's issues. diff --git a/Resources/Locale/en-US/job/job-description.ftl b/Resources/Locale/en-US/job/job-description.ftl index c9d53bb5b5..e8db804688 100644 --- a/Resources/Locale/en-US/job/job-description.ftl +++ b/Resources/Locale/en-US/job/job-description.ftl @@ -19,6 +19,7 @@ job-description-paramedic = Rescue critically injured patients all over the stat job-description-detective = Investigate crime scenes using forensic tools, ensure that the guilty party is found, and have a couple smokes. job-description-doctor = Diagnose and heal crewmembers through medicinal chemicals, advanced medicine, and defibrillators. Make sure the dead don't rot, and that cadavers are in the morgue. job-description-engineer = Keep the station's main engine & solars active, optimize the power network, and make emergency repairs using your hardsuit in spaced areas. +job-description-ertchaplain = Ensure the station crew's last rights are taken care of. job-description-ertengineer = Ensure that the station has power and clean air. job-description-ertjanitor = Ensure that the station is properly cleaned--for morale. job-description-ertleader = Lead the Emergency Response Team in dealing with threats to Nanotrasen assets. diff --git a/Resources/Locale/en-US/job/job-names.ftl b/Resources/Locale/en-US/job/job-names.ftl index 8cd35cac88..51a81fb06a 100644 --- a/Resources/Locale/en-US/job/job-names.ftl +++ b/Resources/Locale/en-US/job/job-names.ftl @@ -38,6 +38,7 @@ job-name-cargotech = Cargo Technician job-name-chef = Chef job-name-clown = Clown job-name-ertleader = ERT Leader +job-name-ertchaplain = ERT Chaplain job-name-ertengineer = ERT Engineer job-name-ertsecurity = ERT Security job-name-ertmedic = ERT Medic @@ -63,6 +64,7 @@ JobChiefMedicalOfficer = Chief Medical Officer JobClown = Clown JobDetective = Detective JobBrigmedic = Brigmedic +JobERTChaplain = ERT Chaplain JobERTEngineer = ERT Engineer JobERTJanitor = ERT Janitor JobERTLeader = ERT Leader diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml index e4c094ea2b..bbea09e921 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -328,6 +328,27 @@ - id: CrowbarRed - id: AdvMopItem +- type: entity + noSpawn: true + parent: ClothingBackpackERTChaplain + id: ClothingBackpackERTChaplainFilled + components: + - type: StorageFill + contents: + - id: BoxSurvivalEngineering + - id: BoxCandle + - id: BoxBodyBag + - id: DrinkWaterMelonJuiceJug + - id: Lantern + - id: Lantern + - id: Bible + - id: CrowbarRed + - id: FoodBakedBunHotX + - id: FoodBakedBunHotX + - id: FoodBakedBunHotX + - id: FoodBakedBunHotX + - id: Lighter + # Death Squad - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index ca926ba18c..a69c770f40 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -248,6 +248,15 @@ - type: Sprite sprite: Clothing/Back/Backpacks/ertclown.rsi +- type: entity + parent: ClothingBackpackERTLeader + id: ClothingBackpackERTChaplain + name: ERT chaplain backpack + description: A spacious backpack with lots of pockets, worn by Chaplains of an Emergency Response Team. + components: + - type: Sprite + sprite: Clothing/Back/Backpacks/ertchaplain.rsi + #Syndicate - type: entity parent: ClothingBackpack diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index 25f641b1c4..a35cf498f6 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -571,6 +571,21 @@ Piercing: 0.9 Heat: 0.9 +#ERT Chaplain Hardsuit +- type: entity + parent: ClothingHeadHelmetHardsuitSyndie + id: ClothingHeadHelmetHardsuitERTChaplain + name: ERT chaplain hardsuit helmet + description: A special hardsuit helmet worn by members of an emergency response team. + components: + - type: BreathMask + - type: Sprite + sprite: Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi + - type: Clothing + sprite: Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi + - type: PointLight + color: "#ffffff" + #ERT Engineer Hardsuit - type: entity parent: ClothingHeadHelmetHardsuitSyndie diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index b6aaf23376..e74ace47c8 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -767,6 +767,20 @@ - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitERTLeader +#ERT Chaplain Hardsuit +- type: entity + parent: ClothingOuterHardsuitJuggernaut + id: ClothingOuterHardsuitERTChaplain + name: ERT chaplain's hardsuit + description: A protective hardsuit worn by the chaplains of an Emergency Response Team. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi #if you change this, please update the humanoid.yml with a better markers sprite. + - type: Clothing + sprite: Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi + - type: ToggleableClothing + clothingPrototype: ClothingHeadHelmetHardsuitERTChaplain + #ERT Engineer Hardsuit - type: entity parent: ClothingOuterHardsuitCBURN diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml index a7ab4d3e23..5eba391786 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml @@ -1093,6 +1093,17 @@ - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/musician.rsi +- type: entity + parent: ClothingUniformBase + id: ClothingUniformJumpsuitERTChaplain + name: ERT chaplain uniform + description: A special suit made for Central Command's elite chaplain corps. + components: + - type: Sprite + sprite: Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi + - type: Clothing + sprite: Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitERTEngineer diff --git a/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml b/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml index 012ee18487..7ad8c61956 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/jobs.yml @@ -510,6 +510,18 @@ - state: green - state: ertleader +- type: entity + id: SpawnPointERTChaplain + parent: SpawnPointJobBase + name: ERTchaplain + components: + - type: SpawnPoint + job_id: ERTChaplain + - type: Sprite + layers: + - state: green + - state: chaplain + - type: entity id: SpawnPointERTEngineer parent: SpawnPointJobBase diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml index b0a2571875..20a6403ae3 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml @@ -119,6 +119,66 @@ prototypes: [ ERTLeaderGearEVALecter ] - type: InitialInfectedExempt +## ERT Chaplain + +- type: entity + id: RandomHumanoidSpawnerERTChaplain + parent: RandomHumanoidSpawnerERTLeader + name: ERT chaplain + suffix: ERTRole, Basic + components: + - type: Sprite + sprite: Markers/jobs.rsi + state: chaplain #needs an ERT variant once a good suit it made. + - type: RandomMetadata + nameSegments: + - NamesFirstMilitary + - NamesLastMilitary + - type: RandomHumanoidSpawner + settings: ERTChaplain + +- type: randomHumanoidSettings + id: ERTChaplain + parent: ERTLeader + components: + - type: MindShield + - type: GhostRole + name: ghost-role-information-ert-chaplain-name + description: ghost-role-information-ert-chaplain-description + - type: GhostTakeoverAvailable + - type: RandomMetadata + nameSegments: + - NamesFirstMilitary + - NamesLastMilitary + - type: Loadout + prototypes: [ ERTChaplainGear ] + - type: InitialInfectedExempt + +- type: entity + id: RandomHumanoidSpawnerERTChaplainEVA + parent: RandomHumanoidSpawnerERTChaplain + name: ERT chaplain + suffix: ERTRole, Enviro EVA + components: + - type: Sprite + sprite: Markers/jobs.rsi + state: chaplain #needs an ERT variant once a good suit it made. + - type: RandomHumanoidSpawner + settings: ERTChaplainEVA + +- type: randomHumanoidSettings + id: ERTChaplainEVA + parent: ERTChaplain + components: + - type: MindShield + - type: GhostRole + name: ghost-role-information-ert-chaplain-name + description: ghost-role-information-ert-chaplain-description + - type: GhostTakeoverAvailable + - type: Loadout + prototypes: [ ERTChaplainGearEVA ] + - type: InitialInfectedExempt + ## ERT Janitor - type: entity diff --git a/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml b/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml index d54baba3db..22d0a4d77f 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/emergencyresponseteam.yml @@ -66,6 +66,61 @@ inhand: - AirTankFilled +# Chaplain +- type: job + id: ERTChaplain + name: job-name-ertchaplain + description: job-description-ertchaplain + playTimeTracker: JobERTChaplain + setPreference: false + startingGear: ERTEngineerGearEVA + icon: "JobIconNanotrasen" + supervisors: job-supervisors-centcom + canBeAntag: false + accessGroups: + - AllAccess + access: + - CentralCommand + special: + - !type:AddComponentSpecial + components: + - type: BibleUser #Lets them heal with bibles + +- type: startingGear + id: ERTChaplainGear + equipment: + jumpsuit: ClothingUniformJumpsuitERTChaplain + back: ClothingBackpackERTChaplainFilled + shoes: ClothingShoesLeather + head: ClothingHeadHatFez + eyes: ClothingEyesGlasses + neck: ClothingNeckStoleChaplain + gloves: ClothingHandsGlovesCombat + outerClothing: ClothingOuterArmorBasicSlim + id: ERTEngineerPDA + ears: ClothingHeadsetAltCentCom + belt: ClothingBeltStorageWaistbag + pocket1: Flare + pocket2: DrinkWaterBottleFull + +- type: startingGear + id: ERTChaplainGearEVA + equipment: + jumpsuit: ClothingUniformJumpsuitERTChaplain + back: ClothingBackpackERTChaplainFilled + shoes: ClothingShoesBootsMagAdv + mask: ClothingMaskGasERT + eyes: ClothingEyesGlasses + neck: ClothingNeckStoleChaplain + gloves: ClothingHandsGlovesCombat + outerClothing: ClothingOuterHardsuitERTChaplain + suitstorage: AirTankFilled + id: ERTChaplainPDA + ears: ClothingHeadsetAltCentCom + belt: ClothingBeltStorageWaistbag + pocket1: Flare + pocket2: DrinkWaterBottleFull + # Engineer - type: job id: ERTEngineer diff --git a/Resources/Prototypes/Roles/play_time_trackers.yml b/Resources/Prototypes/Roles/play_time_trackers.yml index 242dc81fa8..402d49e90d 100644 --- a/Resources/Prototypes/Roles/play_time_trackers.yml +++ b/Resources/Prototypes/Roles/play_time_trackers.yml @@ -46,6 +46,9 @@ - type: playTimeTracker id: JobDetective +- type: playTimeTracker + id: JobERTChaplain + - type: playTimeTracker id: JobERTEngineer diff --git a/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/equipped-BACKPACK.png b/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..4bcff09c29dcc40bca6b9f629012361f6a19a8f6 GIT binary patch literal 806 zcmV+>1KIqEP)+#Rp7_XG7l~GD{=7g$ooO1|%f!pV22z~+1`5*Vob`_LT zmI`RCS=;vaa6q2t@H`Iy(ChWew$*9{05HZNNfM0543JJOb&2KcQTpOI;gJwT|z)9 z^&-=2ty$NzKOT>nbF$kC9qvBQ^VYi%!wFLT=IHX)@wf%HEE${!fzp&Lm#rNMn;Pcn%PVY6=1%CbfVgZzOcvqW?qR2*3bo7-` z)x+s0_yvA^|5)l?2W#>w=Nv+atr~oF_M<4W%jJ?C%lPWpQc7Dbns}bqSS)D_0b>lp zFvNU5hwu9@I_vlQ0AMdKFQK)@VzKDd8F3t2DJ32sAJOmkv0N^0L zwAQsUPS;+q*LZ~PtidQ|jA=Z3!x%e=@l_`<#u|68EXy#P&Dgswz1K4DA(nlePOt4q k$JB`+2!bF8f*?+W-_fgZDzF}qVgLXD07*qoM6N<$f=n8HDF6Tf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/icon.png b/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..02b99ef372dde424ee315c9f738b6eb24df38fb9 GIT binary patch literal 553 zcmV+^0@nSBP)e&0gJ`r+IH__m&CK#?E3S^Cjh{gZ_g6H zjTJ>P>XP%ZZD9Z)B24Kc03c0MS+8S61OV5ns#+8H(55&M)yeVo`!4{%(`JLuFE4o7 zY#MPQLKucZ`aO)=5|GnQrvQL33?){d*f}SAcDr3GIa*2Jy_eHjYoU~qVl|iVpj zzu$wIF&>X`KA({!35ueC_a4j)V+_i&6e9*ffc1L)?;g-vOG~}?P)dQBk>@##F|seu zbCIem?n+>cL6&8I_yGXQvTQt+Qn1#-T8q_ch1ZkwR|J;J<>+`kBFi!mQDgMpLLA44 z;~4Y#Tuj;PW%M4RC~9=27XsVuwlP|@(V{5AWHOP0%-pGP>${+yhTAsRL|*&CS}U=` r;V|lrz*}F%d!O#%mu$d*0bTGL{=3+lXtJwH00000NkvXXu0mjf8H4;% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/inhand-left.png b/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..f6bb073134283cbdc680fe8c6efca3e239231330 GIT binary patch literal 654 zcmV;90&)F`P)AmOoo=x-z2!bF8f*=TjAP9mW2x2m<*K0ra9(PlB==A-Ims0x4 z2cW7dFQxQSN*|04S1F~hs_H5ye*OIB0YLBvaLz}2DEG0P4`a?b1b@Ku>uYbkG3KiE zq?G>i^A17?eENF6jS?`%AkT9+=kWA$!jH#CJiVOYoI{@HFvg(ky20x?=TMd24~EN2OzwroO9ruLn#I49F$Vv zocEex`C8}z@=)+stp5ClOG1VIo4K@bE%5Cjp0 z6rzThc8nsB7+cg3Q;QHa04YQbm$V4i67BzbDW&I}LkNNM`H!gKcsyof1R!V;0AMzo z^>bn0a4uQb^~L?~V;UDk4g39mv@^ZfT7+mN(6()+wMGh2Lrg6~)C@=^Y6$fo2wH@2 z{~AqF)Fzlh)DT;Xa2M0CRHBBMT7;+>kV4d;l)`*IzZjsQT7;WCwqC7PzG<4i4+tTk owFZE`{)aZ`D*MF0Q* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/inhand-right.png b/Resources/Textures/Clothing/Back/Backpacks/ertchaplain.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d527a7daf963ef3d4a0fa825573ad24bd4cb8453 GIT binary patch literal 708 zcmV;#0z3VQP)4E4r~CqGR`dg{&vK7Q|G6lz|~tMo?HA z--P52m0hm<%k=^z?fa8Zz>ebh_4~XQ@&gbAK@bE%5ClOG1VIqQKgDo3H1&G$3z1S9 z`}zLx&U8ARqwjgUuQ3cmvtF+O01uz~czZu~R{-FgS8}!6?Y7x$HtzidZ{X|aI{ifPA0BE&Zt}jhf0D#sSN-0E97l3+1VIo4K@bE%5ClOG1VQ}wT*5O@_82!sZw$lm ziSc0jDy1~r$Li;1d)$iz;FM?JQvCS#!2odMmNB+hGyvE34A`S?A;gn0UwTe)TjZvy zcm}lA2!a69=@g8yQVwYf*MMt#29hN4vMj@Lxh!q+g)?AV|CVcb296mW&YA&L@eIUq zT>2O{&sqIzdIq*lPxgAT04Sxm1hOmx q0H^;t9-VuClZyK)H2o2%DL(=0000_ukU zm=#5}=6M1880TF5Bx|Q>h>k=Z8(J^cip~g`ZnRjksVeu#N4gRRh Ud0?3-o&W#<07*qoM6N<$f-yIu{{R30 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/icon.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..32457b191649cfc7adf9e99ae9eae333bacfa4d3 GIT binary patch literal 386 zcmV-|0e$|7P)%UNfL zyIagR%Na8ER)W;K^5X#Y%01V?Zht^^O%+191J%lR`vW}Jx#&bM0M*Kh%IkNWPMwdU z6@Wa7vunMW%H!ut<9gfg-m5@l>HAsixlZGHFJm|y4yC=_!Z*#U`_eqe*I)q7xzWo{ znC5x;91wzlkj7kZQ&1RHjRQhDnJWX#lLYf5>72g_fOBqyVF<<;eAC1#%gWp;%ix

L6z8)S)TZ(g$7Q zW($f_X+UuZiFELwX^;p$F?mgU9pYWzvzC%)?v{Q(I9~1^?|uL8ySpUtKfnjoQik*M zIzRpNg!A({ua+_#nh_eb#}OcHTnhxQ&=${Bf`1IOvQH z=_$hHWPK*za{t?}13J8!970mJ7F92^_~0CsI#t^fdXTs3>G8NAGA@uhwy$L@>|V>+`0Kyd-e zM<)Ts7|#`pcr!OA$8*IZ7-J|Oodi@SFXB&UmSCEu9A}Kl`^vXKHk%EIFFp7E7vriC zaTsH=T_?V8(UxV&-`r#}sU>-WAP9mW2!bF8f*=TjAPBAe%Y4-34);?-uwMdnpAYDl zhMo%$P2{^abz@()YAM5`iM+Oz*iQ{T+v8|85uIE??Zcu+5L!)rd$H9-G?7Pb`{{2D zlPiGT&`^Nz2w*qhskY0XUrmLBk6*Wbs>pja6%I-b7e$cR4PQ2S(3cVsNX&Y8MB3J> zl6Sw`uB=_D!4KCuA>w8#v5uHwVBIwNBgT|iW$UKNpFMboisN8wyFc&jxd6h44;{Aw z05QYx9GFl|JQ4wHTNYfHvz^f)ynT^Wy9G9D6WD9b$bbN3^1>}vjc}wdCl7Sb4s6yY z)UAN_&cXn@_x#7h#k|L#Urwi`pt#}!xRcKni*j68kjX=q3~jP^suDUxqq}uc z$y6F>@ZgV5c|-AFLIibH)7Qb4B0FGPLMndd{y<2+k0;(ax|R*^00co01VIo4K@bE% zEDN1Rne$&id8bk4!Y=;y>zha-y!rf=iD!bp_<#XnL`;b9T_tXU6u0=?)*+nc(Y-N6 zHPE&9@x1U}nl~TAAu#9z8;|bJz})#!SdZP(;Sh>y_zTWy_0aQ!qNh!Wo7fF-T5tX9 zr%xVFd|sGou?dNf-GD;XM*8|1sx03dYq>6Nve{4u{twoZxM|CEp~^Dyih>KrLCbX) zHn8zdn>ijgYjNN3!{sFaAg?GBXRkhw?}Hr_sy2$dXE-RHqquv9Le<8n?h7$GpxJB! z04^NI?|@)^7VUOhVvKRaFp$Y){5oUIA7APY7z;qnG$-mc(*$E|Apw<2Me;;@N3bpg zmSyqHREn3gnI|%6$Nk{ zY-`6*W!Vp3++?#e!xby@E8rzgro{uJa7EZ4g>W4Z6d%kXcv*tqUtT|0Sp%{sCqSv> zi}%749#KLRLK*PmEqI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/off-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/off-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..2b20dab1727e465f099f29f3af67d69bbbe1e3e6 GIT binary patch literal 707 zcmV;!0zCbRP)4E1FeGbi?xm=nyH{DBrA2{ya@80im-|xLgF1#N=5ClOG1VIo4 zK@h~E(5>e=|8>H<^*r~TeERi?|3LyEo}aS$pWjIyGe9I0T;lsj7n&eVCdZRy7_Ew@ zqoS42Ydpi9)N3io;^WCOFdPEr0EjI8KLb;rKkON0IE12=oP>B{Tdc)DE*|ihFp0+i zqy5rp-@bLzbuA2&V$TupF(6fJAa;BVO_n_!+m?l&D=UH5KJN<)PYbp!3z{rrT~W|9 z474pvh!>wKHc)?+n0bGa&}87v!2tkZT~Sc3GnNFu8F~)eQRD!CiPMk63+@CoEMgw50T6J~Ws#d`mn>s+y zC=?2kE!sZDhGz7~!0TCFD3m*6}|vrMqt>2z8GK@bE%5ClOG1VIo4 zK@h}Mv=BRHu{M0+!^Ko@njjjPfuN@ zz#Lo=10qX+(RUY4j1?eMvXRiEx8~o4T>_2?w(!xly)Q44cwaN%yaI&#iCt*2j9pdb z4;hmd)_{{AeW#KH05n;46;v$rufTq96^G^q0666`w)nPXIkf~LG1pYBWFw&)_g?$~ z;3`1a$>kgq9xN|Iq$S|%L3Lesee|fRik(~zz*#YcNZaXQKS{s8Jiaz+^3UJz;={)# p*L9t%s)}##ve)TP13?g?@DInYUutRUbie=r002ovPDHLkV1o6VJ68Yz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/on-equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/on-equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..c626307585b4001e40b7efc5330c250a9ed26489 GIT binary patch literal 796 zcmV+%1LOROP)c2h(z=x zVK`Wy!TYKJ5o|0N#OC=f7N+M>?f116z_=?eFzN%FM@NI}`L6eRv#yfFQU$H=?Z1x1 zQbm0QoSvQn02Zd_Wd*p`RdehlkXaZ#=pY#WR* z)M_9u{yG`B~lsZhg|59dzJCLbL0dF9e%3W1OO>fi-rl+2uWTfT!^z5kqFA~;%bk; zPGbhgPEr~KZo5TZM?4iYG4tjj1Q^CLUV4IHQLw8Ctw|iUVDg&0Rtl zcT4HeV30q$G&iIkoDf4@)%5LPOOX;%TSg9&d4F(NI`Nu&9-VZ8djN)E7=~dOhG7_n zVS+-ZULg8)N}YOvLOb}2FK^}&Vb#-x44(=1;2j2d5#bWwJ6^a6ir?as>pK`UcduPr zOO?=VY~xApy)vyHqY*Id1FQEhe}Sp>^KjR9OGhKDrAqdIlbMR=dZ*~CCiso-1`Jwn z?c+xeAGpqE=Bn5QiTB-r+*Sk8lM|#Ok!#mlrit@J!jplw!O9~3v}KwAfW5Or*ZC|4 zp8o9J*m7HqV6Ol|2r>+V(yB^CM|MlADj9}BLI|2xuj@JqAtJ~|3BL8wj!mZQmKS^JZ|?(Dedclegq~0P_ETn{pDH> zQp%YG6pKa05^XhSe<;v(-8F@ET@UP+oU%w0tYb~n!gKc+hG7_nVHk#C7=~dOhGBxl zv~6;)+vqFHWWqcdf>0We%v8ofir%r^I`sm1-ipT}@&UKOu#aS>f^K8`(vknsD9mL2s@cL8u;qSNp@iz$8Opi5>P~n=%KXngK*dl#gZ6GEIE)DJr0Z z%>ZD$_1-c~q#_YJd~u#gp#Clc0G@(Wp<4xR5)T01h8y_UeY)JMfK$9PhhSw1et&*_ zXK4*MIQU_kV1+K6%oCyrl>y&BY~Cx^_WwvJp=p}3@#2~C{PEY&y~`Me2@d}N{%4EZ Tbx!(200000NkvXXu0mjfk>frD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/on-inhand-right.png b/Resources/Textures/Clothing/Head/Hardsuits/ERThelmets/ertchaplain.rsi/on-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..dea3b36335664d515bf11ca6e18d20c6d8b2dca4 GIT binary patch literal 706 zcmV;z0zLhSP)#A1mh-2f?w z0WncU%0H%BqGU)>qY|vZV`yybI88}da_Rd?me1#Vr~5wN$+qqR48t%C!!QiPFbu=2 z3Y}Vk=*J;-Y6V(2`1sR<#XDI7@pNp>KYlmZV}ML1_{8`2&ox1r434ME7&Iz@hHHru zy7fo6k$J8xv-o(r42(v=un$Dm|DJ)V;|~XV8I7=(D7gXg)Q((>-zy#nm@rAefI;ht zTfTnns_$AFCdHm1K43s*tB&Zw0TQYjXxOrCeBanudhPQ*u<*3XmTe=Us(5j9gw0qC zE!&pj!DqJWs69>1ygw5m1T~vYN@^N;NopE3n@tizEcKf}2tlT4k`RKDnnw9(l#-f8 zLI^SpW9s+=GoaCE001^)F?R-d>zA2!yRBH3MWs>+x~{wRmSws3Cu2fWI>2_d>T9%J zt-`XbsU0jE#bQx$L_3GK{+}>S(>H}o)0FBi0UuXuLm4I+3^$ZDB1rd>= zD9XwjaQLm~W|9CvLREbU6)XJ~*z4ZH=iyxdaMNWR@h#hSa|vW(uBlqdMM76@KmG;4 zmw>RF&$}jkJUM|(OJJda8iwKf=+Si@yZJnT(_{*nw$sCl1pRz}|I)Zf@4nu|>o*_B oFbvXl9baDMF7r~y#N3J literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Hardsuits/ERTSuits/ertchaplain.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..2acce2e63e81c2322058aa312a39e30beb17f622 GIT binary patch literal 1793 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 S^8MZb0000~L;ryO3%xEB_EMj6EjjLK zFI#%>p_heRbWkI#1Q{coQ8If-q?Hr1SYyj=>HA#7JjVLI_vVepwjMwb1VIo4@spy} z{eW%T5&+UP)&9@c6r6KuSr#0}DQ%aRmk>fAj^o<;dY#Dw#^jNv!Sg(D&Sl|{=Xp5N zGz=J%O$I+;Og_81nhPEP9LK@4t1Bgay-wzbC&&15Z~((F;JPk2=hAgu7>0o_2L~9Q z9G8h{V&#V?#~AJH!7vOsjx%>1?d>V)YjqspoMU@?yR>Cl2F6%9&hs2m6e*SBvigQ$ zpxtgG%QED74%0Nj7{g>T0f5^2=Cb0h>%uf|rx!t26Od&YOw)wtc>o~SnS?^Wn)oW! z@!h z{#q*F&)~z@<5>IW<8Si6dGFVjfO-A*8UWdDx95@) z$FcU;A4iSoKPbm{j~+?Rxtx4@Bdg<0oZFmpIbcjKx^CoqK&R7@tyb%SeL9`u;^JZ> z-vf4ccVSr;Ow&Z3=MX}aRap0aCVo(a5V*Oy!S(g^O7}5USARO4miAVwg*&@!vI?rF z!TsYd2m+~c`Y2Vvf^uKDEt=wf@SJlw8jX|^ud4+AJrV?g>~^~n1VIo4K@bE%5ClOG z1VIq%#&H}uU`)Q++4<&wLcZGBkpsr0<2Xvb=qkbcz7IVJ@OJnTg|MmvstZtD-wt0w z4+8kUujGT$djZB6(lo`>*QfA(9{}XHs6yZO@$~g6Y}=&Lv(rGyXyNs^%7@1xi2HC_q5UQhP>eI!W&Aq1pc zO|sS&`1`|)TPM04zdZSj^EL0DJ;u^5CQ=3cs9f7yC?X19^a0e>J3(&MPd>eAyaI}zgsS!`4`8Jiik(hJ-t_{_Js8i<&KhZus=_&!`}_M3`h>zTRO(OA zR2--_ECE=lK|wVMMUzAol@2w19S&_WcmRmwSR0SWYq^)MB3|vt`d(1&Pt;UP@V+h2 w^NsWf70;leZSVf#&<_=YAP9mW2x2+@1?2LtutcvRxc~qF07*qoM6N<$f*f+y!vFvP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..ef532d7232b175a3c1a55cb967d2cc3ef9f487c8 GIT binary patch literal 1393 zcmV-%1&;cOP)z}D6lmk)r0LaY0PzE@TgE)>s=}80#A>8o!>rSTw%d&V)t_o-Qecw;rXX8Bl(na2HG#cpj zdI-aild;H)qR7V#VHjdC7@*N;06?-#7M#Z)MG*i%RaJPN$D_~WS@}Pj0k^{tPap5& z)^M0gCqf7>had=2Wk4wvZViWc`gk9=PnFJ#5AjP0q_Yz9#jxdYgkQVL3`aP{idghgZ73^30MD8g(u!*n`bieJoHleTT+ z{$PMstA)RRzl~O_h5Lg6Y};PC<`?Dv_T4+!wvBIEt<*RVf2LHe)oMwlQo+W?1^{3( zneb}>7>!2g_xpuC3fJrPL{SuMZf^4Bkv$cT$76(H2+OiE@nqbPzTNr<9|uhHuOA>=({Wm!(mM}<3pp~!S! z1XRN|Y#3qC|-j zB}$YiQKG~J$hD)gPYCb6(t4fC-@bjjmK`F~G&#RvSzMmyY=W4_cv`PxXqvd8D0ubc zPVW7UW6>m=yW>ob&Lyj z07H@_h@uF+UJr2`uPp=OI7YA6Lli|wlI2e0WOCb&NrGR0`wm~#4Ro!q@%_(#@hG^i zyS53?bzR7^%=aM=|2#O=iQ<=^p5Tw7mO)+D6HU`V2tlXQ!IdjlpsFgb$#%P)`@G(w zXf~Tkv)M!t1c;&tp66jS8lll>!1sL&1_Kl}32K@K*LBhDb|DA?#^dpSKO~C0Rb3>e z(`o7~z<4}{APDGoyKr3>nx++30_VZ=JgBO=mTmF*5@6iRB2xz3bR0;Mgdb)z{uzcL z9(W#X+s5l>_X;=u^|O1hZ5t0f4`CRlbde+pH#444%X~iItZZv*i?6?w(!v|2wOTDP z3Vauj}B#feAyqk%*Ny@xW#1^==b}V z=74^`zqAv+_!7uH3FcjPRy`5^AM_|u;uFTdTz~v`=n(6x00000NkvXXu0mjf)@PH= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/icon.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fdaf39cf4e3d1ba2d10afad0a4268e2fdc712800 GIT binary patch literal 421 zcmV;W0b2fvP)C`i*ZodA(i}Lb%NkUdlR~ z&7$K=MT(*Tz&Qu-=j>Zmp!sOix%d7@8`?N;6+pZoM9jE33qpuad!W-TAw(>Fk|dp- zcM9NqKGST)Z~B`BuqaEMb1Zi|thKy6EwI+I-0g7Au_(*iuHxx*T1zPz4u=4oPNygX z9FIq~+wE2>Z+=m|9g6RdRp-XGfI}u<}m8X P00000NkvXXu0mjflr+R; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/inhand-left.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..ed878f2d3103e4c5a3f2cefeac70f50d2a716422 GIT binary patch literal 551 zcmV+?0@(eDP)U*}1Z zAc~^1v(M&5QG_H(&dyGo@ZU_p<7$Q1mnW#j0!`DPsw$*uYO*XdP18Uv7I=Mm!sBYy zDKE=1lcuSustR55{^h|&$lLqJhiTguVHje&-C{T#Vzb!*09HS~0SK+-9iQ9a*}4PP z>ot^8XxkRM-427n0He_eWm#e}nLuleqA0vu=iTHE&{{(Xfx50?jDeIA#u(If4Iu=y z)_2XjY6FB2D2l=pLLiP~D5apahEfV~9G^YEN8Z)H0st_d&p$3arLf=cp|ysT68(N3 zWm#f89%H#&diTn^iRUmhv+2})pUuql)BeS`-WC*W`U2mo+696tU3p>q>pdmq8c39z|8;JJDS*xDa(@>js-{(y50 pu)ROvxi|q%?hn|;{Q)8?egb{&cSPq9aohj^002ovPDHLkV1g5?14{q^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/inhand-right.png b/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc2bc1ce223aaeb176ab190a665d4cc6d642d26 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV0`ZB;uunK>+LPau15|cY!Biu zPwNPCQkv9sFD*6fX371f{8wl1^ol>ccD0Ox@v(-GrjG7eu9qjQc>7{Sz|}wZ)dD&{ z?RQ@)P{SYy0}KkDLd83#rOve6n&*8_=kyuX(k);2|2EQm8u)SFduK1s+p|7Qz5cyc z#_VBy(dv2EcYdGxKjz+K>jU3wTM|1g`mD3xs@+%;TVow9 zbDZPwhn#zh+4ign`%zKf8l@9(-Sm=)spq5_n{)!Nn_fw3?EfAPlnfK8pRrxXTg5X8 zC_DX0t<}~azt2BE?0Z>(gDGcwbdQ^Ij@j&Uwb6GbZU27PdTZSJg;Sg^o7{L?Cc)P( z(SKZ{i|O)9k*Mq^mG?G3<@s@ckNSCrwWcisD^_tGlkm_?>~RbY6>xIM&b`XFL-l~Rp7~Q%_b%ps(}7d*P3xYjD#5^}`Ps(I(_h2~@9{QfF3)WM z^7wBut~<+fXDf(|dHnJcd+cn<9U<>$86TKBv$1^+Lh{aEQHDFSB`Y}ovHO2{{D*aQ XbCJ#2@RbvRG0))X>gTe~DWM4f5(xZz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/meta.json b/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/meta.json new file mode 100644 index 0000000000..dca2585d6b --- /dev/null +++ b/Resources/Textures/Clothing/Uniforms/Jumpsuit/ert_chaplain.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from TGstation: https://github.com/tgstation/tgstation/blob/c838ba21dae97db345e0113f99596decd1d66039/icons/mob/clothing/under/security.dmi. Modified and recolored by Nairodian (github) for SS14, monkey made by brainfood1183 (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-INNERCLOTHING-monkey", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From 085a71eac8d85d2ae65952d24343bf34b19b0ae5 Mon Sep 17 00:00:00 2001 From: f0x-n3rd <150924715+f0x-n3rd@users.noreply.github.com> Date: Mon, 1 Apr 2024 15:20:37 +0800 Subject: [PATCH 093/206] Changes in chemicals page in guidebook (#25831) * Added pages to chemical categories The chemical categories have their own page now. Added the "Chemical Tabs" in /ServerInfo/Guidebook. Moved the Chemicals code from shiftsandjobs.yml to its own .yml file which is "chemicals.yml". * Update guides.ftl * Update chemicals.yml Changed the guide entry's ID for the medical tab from Medicine to Medicinal. Hope this works... * Update Resources/ServerInfo/Guidebook/Chemical Tabs/Biological.xml Co-authored-by: exincore * Update Resources/ServerInfo/Guidebook/Chemical Tabs/Foods.xml Co-authored-by: exincore * Update Resources/ServerInfo/Guidebook/Chemical Tabs/Elements.xml Co-authored-by: exincore * Update Resources/ServerInfo/Guidebook/Chemical Tabs/Narcotics.xml Co-authored-by: exincore * Update Resources/ServerInfo/Guidebook/Chemical Tabs/Toxins.xml Co-authored-by: exincore * Fixed a few errors and stuff! A few typos have been fixed thanks to exincore. Added dedicated .xml files to be used for the dedicated category pages (Medicinal and Botanical pages). Made it so it doesn't use any duplicated IDs anymore. If there's more problems, please do tell so I can fix it! * Update settings.json * Fix? --------- Co-authored-by: exincore --- Resources/Locale/en-US/guidebook/guides.ftl | 8 +++ Resources/Prototypes/Guidebook/chemicals.yml | 63 +++++++++++++++++++ Resources/Prototypes/Guidebook/medical.yml | 2 +- .../Prototypes/Guidebook/shiftandcrew.yml | 7 --- .../Guidebook/ChemicalTabs/Biological.xml | 9 +++ .../Guidebook/ChemicalTabs/Botany.xml | 14 +++++ .../Guidebook/ChemicalTabs/Elements.xml | 9 +++ .../Guidebook/ChemicalTabs/Foods.xml | 8 +++ .../Guidebook/ChemicalTabs/Narcotics.xml | 5 ++ .../Guidebook/ChemicalTabs/Other.xml | 5 ++ .../Guidebook/ChemicalTabs/Pyrotechnic.xml | 5 ++ .../Guidebook/ChemicalTabs/Toxins.xml | 5 ++ 12 files changed, 132 insertions(+), 8 deletions(-) create mode 100644 Resources/Prototypes/Guidebook/chemicals.yml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Biological.xml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Botany.xml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Elements.xml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Foods.xml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Narcotics.xml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Other.xml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Pyrotechnic.xml create mode 100644 Resources/ServerInfo/Guidebook/ChemicalTabs/Toxins.xml diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index c30b49553c..496e38b9a0 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -22,6 +22,14 @@ guide-entry-cargo-bounties = Cargo Bounties guide-entry-salvage = Salvage guide-entry-survival = Survival guide-entry-chemicals = Chemicals +guide-entry-elements = Elements +guide-entry-narcotics = Narcotics +guide-entry-pyrotechnics = Pyrotechnic +guide-entry-toxins = Toxins +guide-entry-foods = Foods +guide-entry-biological = Biological +guide-entry-others = Others +guide-entry-botanical = Botanicals guide-entry-ss14 = Space Station 14 guide-entry-janitorial = Janitorial guide-entry-bartender = Bartender diff --git a/Resources/Prototypes/Guidebook/chemicals.yml b/Resources/Prototypes/Guidebook/chemicals.yml new file mode 100644 index 0000000000..508b61b4ac --- /dev/null +++ b/Resources/Prototypes/Guidebook/chemicals.yml @@ -0,0 +1,63 @@ +- type: guideEntry + id: Chemicals + name: guide-entry-chemicals + text: "/ServerInfo/Guidebook/Chemicals.xml" + children: + - Elements + - Medicine + - Narcotics + - Pyrotechnic + - Toxins + - Foods + - Botanical + - Biological + - Others + filterEnabled: True + +- type: guideEntry + id: Elements + name: guide-entry-elements + text: "/ServerInfo/Guidebook/ChemicalTabs/Elements.xml" + filterEnabled: True + +- type: guideEntry + id: Narcotics + name: guide-entry-narcotics + text: "/ServerInfo/Guidebook/ChemicalTabs/Narcotics.xml" + filterEnabled: True + +- type: guideEntry + id: Pyrotechnic + name: guide-entry-pyrotechnics + text: "/ServerInfo/Guidebook/ChemicalTabs/Pyrotechnic.xml" + filterEnabled: True + +- type: guideEntry + id: Toxins + name: guide-entry-toxins + text: "/ServerInfo/Guidebook/ChemicalTabs/Toxins.xml" + filterEnabled: True + +- type: guideEntry + id: Foods + name: guide-entry-foods + text: "/ServerInfo/Guidebook/ChemicalTabs/Foods.xml" + filterEnabled: True + +- type: guideEntry + id: Botanical + name: guide-entry-botanical + text: "/ServerInfo/Guidebook/ChemicalTabs/Botany.xml" + filterEnabled: True + +- type: guideEntry + id: Biological + name: guide-entry-biological + text: "/ServerInfo/Guidebook/ChemicalTabs/Biological.xml" + filterEnabled: True + +- type: guideEntry + id: Others + name: guide-entry-others + text: "/ServerInfo/Guidebook/ChemicalTabs/Other.xml" + filterEnabled: True diff --git a/Resources/Prototypes/Guidebook/medical.yml b/Resources/Prototypes/Guidebook/medical.yml index 9ea2398a7c..95a4f1ca75 100644 --- a/Resources/Prototypes/Guidebook/medical.yml +++ b/Resources/Prototypes/Guidebook/medical.yml @@ -47,4 +47,4 @@ - type: guideEntry id: AdvancedBrute name: guide-entry-brute - text: "/ServerInfo/Guidebook/Medical/AdvancedBrute.xml" \ No newline at end of file + text: "/ServerInfo/Guidebook/Medical/AdvancedBrute.xml" diff --git a/Resources/Prototypes/Guidebook/shiftandcrew.yml b/Resources/Prototypes/Guidebook/shiftandcrew.yml index 9df1b26008..3c4618902e 100644 --- a/Resources/Prototypes/Guidebook/shiftandcrew.yml +++ b/Resources/Prototypes/Guidebook/shiftandcrew.yml @@ -19,12 +19,6 @@ name: guide-entry-survival text: "/ServerInfo/Guidebook/Survival.xml" -- type: guideEntry - id: Chemicals - name: guide-entry-chemicals - text: "/ServerInfo/Guidebook/Chemicals.xml" - filterEnabled: True - - type: guideEntry id: Janitorial name: guide-entry-janitorial @@ -47,4 +41,3 @@ id: Food Recipes name: guide-entry-foodrecipes text: "/ServerInfo/Guidebook/Service/FoodRecipes.xml" - diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Biological.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Biological.xml new file mode 100644 index 0000000000..6f1a4e630b --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Biological.xml @@ -0,0 +1,9 @@ + + +# Biological + +These reagents include chemicals that you can get from certain materials and from living things. To get the other chemicals you have to use machines like the electrolyzer and the centrifuge. + + + + diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Botany.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Botany.xml new file mode 100644 index 0000000000..832e32d644 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Botany.xml @@ -0,0 +1,14 @@ + + +# Botanical Chemicals + +These chemicals are used by botanists. Some of the chemicals change the properties of the plants. + + + + + + + + + \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Elements.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Elements.xml new file mode 100644 index 0000000000..3a1c587304 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Elements.xml @@ -0,0 +1,9 @@ + + +# Elements + +This list contains all the basic reagents used to make other chemicals. + + + + diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Foods.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Foods.xml new file mode 100644 index 0000000000..aea68d74ce --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Foods.xml @@ -0,0 +1,8 @@ + +# Foods + +These reagents are mostly used in the kitchen. Very helpful for Chefs and/or Service Workers. + + + + diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Narcotics.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Narcotics.xml new file mode 100644 index 0000000000..0dbb5ad359 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Narcotics.xml @@ -0,0 +1,5 @@ + +# Narcotics +The reagents listed in this category includes stimulants, hallucinogens and other drug-like effects. + + diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Other.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Other.xml new file mode 100644 index 0000000000..31ad4ef3cb --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Other.xml @@ -0,0 +1,5 @@ + +# Other +These are the other regeants listed in the Chemicals page. + + diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Pyrotechnic.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Pyrotechnic.xml new file mode 100644 index 0000000000..9941e2ff36 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Pyrotechnic.xml @@ -0,0 +1,5 @@ + +# Pyrotechnics +These chemicals are flammmable and causes hazardous effects when making them (Plasma gas and explosions). It is recommmended to make these chemicals in a safe environment. + + diff --git a/Resources/ServerInfo/Guidebook/ChemicalTabs/Toxins.xml b/Resources/ServerInfo/Guidebook/ChemicalTabs/Toxins.xml new file mode 100644 index 0000000000..19ab91cbf4 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/ChemicalTabs/Toxins.xml @@ -0,0 +1,5 @@ + +# Toxins +The chemicals in this list contain toxins that induce certain effects and can cause death. Use responsibly. + + From de8b78885650f2a7013e6f203be1ec17b264687b Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 07:21:43 +0000 Subject: [PATCH 094/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f903f70f29..27a7a03a56 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: Minty642 - changes: - - message: Fixed Reinforced Glass Recipe in Ore Processor! - type: Fix - - message: Added Premium Material that can only be processed by Industrial Ore Processor! - type: Add - id: 5786 - time: '2024-01-25T08:33:56.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24345 - author: Blackern5000 changes: - message: Smoking now causes mild lung cancer in the form of cellular damage. @@ -3807,3 +3798,11 @@ id: 6285 time: '2024-04-01T06:41:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25367 +- author: f0x-n3rd + changes: + - message: Added pages for each categories from the chemical page in the guidebook, + no more infinite scrolling when looking up certain chemicals. + type: Add + id: 6286 + time: '2024-04-01T07:20:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25831 From a4ec01d4719e9489b5cceb23357b3be0ea4b86e7 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Mon, 1 Apr 2024 11:29:13 +0300 Subject: [PATCH 095/206] Anomalies behaviours (#24683) * Added new anomaly particle * Add basic anomaly behaviour * +2 parametres * add functional to new particle * add components to behaviours * big content * add shuffle, moved thing to server * clean up * fixes * random pick redo * bonjour behavioUr * fix AJCM * fix * add some new behaviours * power modifier behaviour * rmeove timer * new event for update ui fix * refactor! * fixes * enum * Fix mapinit * Minor touches --------- Co-authored-by: metalgearsloth --- .../Anomaly/Ui/AnomalyScannerMenu.xaml | 6 +- .../Anomaly/AnomalySystem.Scanner.cs | 106 +++++++-- Content.Server/Anomaly/AnomalySystem.cs | 115 ++++++++-- .../Components/AnomalousParticleComponent.cs | 24 +- .../Components/SecretDataAnomalyComponent.cs | 45 ++++ .../ShuffleParticlesAnomalyComponent.cs | 28 +++ .../Anomaly/Effects/BluespaceAnomalySystem.cs | 6 +- .../Effects/ElectricityAnomalySystem.cs | 4 +- .../Anomaly/Effects/EntityAnomalySystem.cs | 14 +- .../Anomaly/Effects/InjectionAnomalySystem.cs | 4 +- .../Effects/ProjectileAnomalySystem.cs | 4 +- .../Effects/PuddleCreateAnomalySystem.cs | 3 +- .../Effects/PyroclasticAnomalySystem.cs | 6 +- .../Effects/SecretDataAnomalySystem.cs | 40 ++++ .../Effects/ShuffleParticlesAnomalySystem.cs | 41 ++++ .../Anomaly/Effects/TileAnomalySystem.cs | 14 +- .../Anomaly/Components/AnomalyComponent.cs | 44 +++- .../Effects/SharedGravityAnomalySystem.cs | 10 +- .../Prototypes/AnomalyBehaviorPrototype.cs | 45 ++++ Content.Shared/Anomaly/SharedAnomaly.cs | 1 + Content.Shared/Anomaly/SharedAnomalySystem.cs | 49 ++++- Resources/Locale/en-US/anomaly/anomaly.ftl | 29 +++ .../en-US/machine-linking/receiver_ports.ftl | 3 + Resources/Prototypes/Anomaly/behaviours.yml | 208 ++++++++++++++++++ .../Prototypes/DeviceLinking/sink_ports.yml | 5 + .../Weapons/Guns/Battery/battery_guns.yml | 5 + .../Weapons/Guns/Projectiles/projectiles.yml | 50 +++++ .../Structures/Machines/anomaly_equipment.yml | 4 + .../Structures/Specific/Anomaly/anomalies.yml | 10 +- 29 files changed, 832 insertions(+), 91 deletions(-) create mode 100644 Content.Server/Anomaly/Components/SecretDataAnomalyComponent.cs create mode 100644 Content.Server/Anomaly/Components/ShuffleParticlesAnomalyComponent.cs create mode 100644 Content.Server/Anomaly/Effects/SecretDataAnomalySystem.cs create mode 100644 Content.Server/Anomaly/Effects/ShuffleParticlesAnomalySystem.cs create mode 100644 Content.Shared/Anomaly/Prototypes/AnomalyBehaviorPrototype.cs create mode 100644 Resources/Prototypes/Anomaly/behaviours.yml diff --git a/Content.Client/Anomaly/Ui/AnomalyScannerMenu.xaml b/Content.Client/Anomaly/Ui/AnomalyScannerMenu.xaml index ac4adf7e0e..36a750d009 100644 --- a/Content.Client/Anomaly/Ui/AnomalyScannerMenu.xaml +++ b/Content.Client/Anomaly/Ui/AnomalyScannerMenu.xaml @@ -1,9 +1,9 @@ - + MinSize="350 400" + SetSize="350 400"> diff --git a/Content.Server/Anomaly/AnomalySystem.Scanner.cs b/Content.Server/Anomaly/AnomalySystem.Scanner.cs index 74af8e67e3..bce508903d 100644 --- a/Content.Server/Anomaly/AnomalySystem.Scanner.cs +++ b/Content.Server/Anomaly/AnomalySystem.Scanner.cs @@ -1,4 +1,4 @@ -using Content.Server.Anomaly.Components; +using Content.Server.Anomaly.Components; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; using Content.Shared.DoAfter; @@ -21,6 +21,7 @@ public sealed partial class AnomalySystem SubscribeLocalEvent(OnScannerAnomalySeverityChanged); SubscribeLocalEvent(OnScannerAnomalyHealthChanged); + SubscribeLocalEvent(OnScannerAnomalyBehaviorChanged); } private void OnScannerAnomalyShutdown(ref AnomalyShutdownEvent args) @@ -67,6 +68,17 @@ public sealed partial class AnomalySystem } } + private void OnScannerAnomalyBehaviorChanged(ref AnomalyBehaviorChangedEvent args) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var component)) + { + if (component.ScannedAnomaly != args.Anomaly) + continue; + UpdateScannerUi(uid, component); + } + } + private void OnScannerUiOpened(EntityUid uid, AnomalyScannerComponent component, BoundUIOpenedEvent args) { UpdateScannerUi(uid, component); @@ -132,29 +144,95 @@ public sealed partial class AnomalySystem return msg; } - msg.AddMarkup(Loc.GetString("anomaly-scanner-severity-percentage", ("percent", anomalyComp.Severity.ToString("P")))); - msg.PushNewline(); - string stateLoc; - if (anomalyComp.Stability < anomalyComp.DecayThreshold) - stateLoc = Loc.GetString("anomaly-scanner-stability-low"); - else if (anomalyComp.Stability > anomalyComp.GrowthThreshold) - stateLoc = Loc.GetString("anomaly-scanner-stability-high"); + TryComp(anomaly, out var secret); + + //Severity + if (secret != null && secret.Secret.Contains(AnomalySecretData.Severity)) + msg.AddMarkup(Loc.GetString("anomaly-scanner-severity-percentage-unknown")); else - stateLoc = Loc.GetString("anomaly-scanner-stability-medium"); - msg.AddMarkup(stateLoc); + msg.AddMarkup(Loc.GetString("anomaly-scanner-severity-percentage", ("percent", anomalyComp.Severity.ToString("P")))); msg.PushNewline(); - msg.AddMarkup(Loc.GetString("anomaly-scanner-point-output", ("point", GetAnomalyPointValue(anomaly, anomalyComp)))); + //Stability + if (secret != null && secret.Secret.Contains(AnomalySecretData.Stability)) + msg.AddMarkup(Loc.GetString("anomaly-scanner-stability-unknown")); + else + { + string stateLoc; + if (anomalyComp.Stability < anomalyComp.DecayThreshold) + stateLoc = Loc.GetString("anomaly-scanner-stability-low"); + else if (anomalyComp.Stability > anomalyComp.GrowthThreshold) + stateLoc = Loc.GetString("anomaly-scanner-stability-high"); + else + stateLoc = Loc.GetString("anomaly-scanner-stability-medium"); + msg.AddMarkup(stateLoc); + } + msg.PushNewline(); + + //Point output + if (secret != null && secret.Secret.Contains(AnomalySecretData.OutputPoint)) + msg.AddMarkup(Loc.GetString("anomaly-scanner-point-output-unknown")); + else + msg.AddMarkup(Loc.GetString("anomaly-scanner-point-output", ("point", GetAnomalyPointValue(anomaly, anomalyComp)))); msg.PushNewline(); msg.PushNewline(); + //Particles title msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-readout")); msg.PushNewline(); - msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-danger", ("type", GetParticleLocale(anomalyComp.SeverityParticleType)))); + + //Danger + if (secret != null && secret.Secret.Contains(AnomalySecretData.ParticleDanger)) + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-danger-unknown")); + else + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-danger", ("type", GetParticleLocale(anomalyComp.SeverityParticleType)))); msg.PushNewline(); - msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-unstable", ("type", GetParticleLocale(anomalyComp.DestabilizingParticleType)))); + + //Unstable + if (secret != null && secret.Secret.Contains(AnomalySecretData.ParticleUnstable)) + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-unstable-unknown")); + else + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-unstable", ("type", GetParticleLocale(anomalyComp.DestabilizingParticleType)))); msg.PushNewline(); - msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-containment", ("type", GetParticleLocale(anomalyComp.WeakeningParticleType)))); + + //Containment + if (secret != null && secret.Secret.Contains(AnomalySecretData.ParticleContainment)) + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-containment-unknown")); + else + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-containment", ("type", GetParticleLocale(anomalyComp.WeakeningParticleType)))); + msg.PushNewline(); + + //Transformation + if (secret != null && secret.Secret.Contains(AnomalySecretData.ParticleTransformation)) + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-transformation-unknown")); + else + msg.AddMarkup(Loc.GetString("anomaly-scanner-particle-transformation", ("type", GetParticleLocale(anomalyComp.TransformationParticleType)))); + + + //Behavior + msg.PushNewline(); + msg.PushNewline(); + msg.AddMarkup(Loc.GetString("anomaly-behavior-title")); + msg.PushNewline(); + + if (secret != null && secret.Secret.Contains(AnomalySecretData.Behavior)) + msg.AddMarkup(Loc.GetString("anomaly-behavior-unknown")); + else + { + if (anomalyComp.CurrentBehavior != null) + { + var behavior = _prototype.Index(anomalyComp.CurrentBehavior.Value); + + msg.AddMarkup("- " + Loc.GetString(behavior.Description)); + msg.PushNewline(); + var mod = Math.Floor((behavior.EarnPointModifier) * 100); + msg.AddMarkup("- " + Loc.GetString("anomaly-behavior-point", ("mod", mod))); + } + else + { + msg.AddMarkup(Loc.GetString("anomaly-behavior-balanced")); + } + } //The timer at the end here is actually added in the ui itself. return msg; diff --git a/Content.Server/Anomaly/AnomalySystem.cs b/Content.Server/Anomaly/AnomalySystem.cs index c3f19aa177..bae101de87 100644 --- a/Content.Server/Anomaly/AnomalySystem.cs +++ b/Content.Server/Anomaly/AnomalySystem.cs @@ -8,13 +8,18 @@ using Content.Server.Radio.EntitySystems; using Content.Server.Station.Systems; using Content.Shared.Anomaly; using Content.Shared.Anomaly.Components; +using Content.Shared.Anomaly.Prototypes; using Content.Shared.DoAfter; +using Content.Shared.Random; +using Content.Shared.Random.Helpers; using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.Physics.Events; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using Robust.Shared.Serialization.Manager; +using System.Linq; namespace Content.Server.Anomaly; @@ -33,13 +38,20 @@ public sealed partial class AnomalySystem : SharedAnomalySystem [Dependency] private readonly SharedPointLightSystem _pointLight = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly RadioSystem _radio = default!; + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly RadiationSystem _radiation = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; + [Dependency] private readonly IComponentFactory _componentFactory = default!; + [Dependency] private readonly ISerializationManager _serialization = default!; + [Dependency] private readonly IEntityManager _entity = default!; public const float MinParticleVariation = 0.8f; public const float MaxParticleVariation = 1.2f; + [ValidatePrototypeId] + const string WeightListProto = "AnomalyBehaviorList"; + /// public override void Initialize() { @@ -54,25 +66,34 @@ public sealed partial class AnomalySystem : SharedAnomalySystem InitializeCommands(); } - private void OnMapInit(EntityUid uid, AnomalyComponent component, MapInitEvent args) + private void OnMapInit(Entity anomaly, ref MapInitEvent args) { - component.NextPulseTime = Timing.CurTime + GetPulseLength(component) * 3; // longer the first time - ChangeAnomalyStability(uid, Random.NextFloat(component.InitialStabilityRange.Item1 , component.InitialStabilityRange.Item2), component); - ChangeAnomalySeverity(uid, Random.NextFloat(component.InitialSeverityRange.Item1, component.InitialSeverityRange.Item2), component); + anomaly.Comp.NextPulseTime = Timing.CurTime + GetPulseLength(anomaly.Comp) * 3; // longer the first time + ChangeAnomalyStability(anomaly, Random.NextFloat(anomaly.Comp.InitialStabilityRange.Item1 , anomaly.Comp.InitialStabilityRange.Item2), anomaly.Comp); + ChangeAnomalySeverity(anomaly, Random.NextFloat(anomaly.Comp.InitialSeverityRange.Item1, anomaly.Comp.InitialSeverityRange.Item2), anomaly.Comp); + ShuffleParticlesEffect(anomaly.Comp); + anomaly.Comp.Continuity = _random.NextFloat(anomaly.Comp.MinContituty, anomaly.Comp.MaxContituty); + SetBehavior(anomaly, GetRandomBehavior()); + } + + public void ShuffleParticlesEffect(AnomalyComponent anomaly) + { var particles = new List - { AnomalousParticleType.Delta, AnomalousParticleType.Epsilon, AnomalousParticleType.Zeta }; - component.SeverityParticleType = Random.PickAndTake(particles); - component.DestabilizingParticleType = Random.PickAndTake(particles); - component.WeakeningParticleType = Random.PickAndTake(particles); + { AnomalousParticleType.Delta, AnomalousParticleType.Epsilon, AnomalousParticleType.Zeta, AnomalousParticleType.Sigma }; + + anomaly.SeverityParticleType = Random.PickAndTake(particles); + anomaly.DestabilizingParticleType = Random.PickAndTake(particles); + anomaly.WeakeningParticleType = Random.PickAndTake(particles); + anomaly.TransformationParticleType = Random.PickAndTake(particles); } - private void OnShutdown(EntityUid uid, AnomalyComponent component, ComponentShutdown args) + private void OnShutdown(Entity anomaly, ref ComponentShutdown args) { - EndAnomaly(uid, component); + EndAnomaly(anomaly); } - private void OnStartCollide(EntityUid uid, AnomalyComponent component, ref StartCollideEvent args) + private void OnStartCollide(Entity anomaly, ref StartCollideEvent args) { if (!TryComp(args.OtherEntity, out var particle)) return; @@ -80,21 +101,33 @@ public sealed partial class AnomalySystem : SharedAnomalySystem if (args.OtherFixtureId != particle.FixtureId) return; + var behaviorMod = 1f; + if (anomaly.Comp.CurrentBehavior != null) + { + var b = _prototype.Index(anomaly.Comp.CurrentBehavior.Value); + behaviorMod = b.ParticleSensivity; + } // small function to randomize because it's easier to read like this - float VaryValue(float v) => v * Random.NextFloat(MinParticleVariation, MaxParticleVariation); + float VaryValue(float v) => v * behaviorMod * Random.NextFloat(MinParticleVariation, MaxParticleVariation); - if (particle.ParticleType == component.DestabilizingParticleType || particle.DestabilzingOverride) + if (particle.ParticleType == anomaly.Comp.DestabilizingParticleType || particle.DestabilzingOverride) { - ChangeAnomalyStability(uid, VaryValue(particle.StabilityPerDestabilizingHit), component); + ChangeAnomalyStability(anomaly, VaryValue(particle.StabilityPerDestabilizingHit), anomaly.Comp); } - if (particle.ParticleType == component.SeverityParticleType || particle.SeverityOverride) + if (particle.ParticleType == anomaly.Comp.SeverityParticleType || particle.SeverityOverride) { - ChangeAnomalySeverity(uid, VaryValue(particle.SeverityPerSeverityHit), component); + ChangeAnomalySeverity(anomaly, VaryValue(particle.SeverityPerSeverityHit), anomaly.Comp); } - if (particle.ParticleType == component.WeakeningParticleType || particle.WeakeningOverride) + if (particle.ParticleType == anomaly.Comp.WeakeningParticleType || particle.WeakeningOverride) { - ChangeAnomalyHealth(uid, VaryValue(particle.HealthPerWeakeningeHit), component); - ChangeAnomalyStability(uid, VaryValue(particle.StabilityPerWeakeningeHit), component); + ChangeAnomalyHealth(anomaly, VaryValue(particle.HealthPerWeakeningeHit), anomaly.Comp); + ChangeAnomalyStability(anomaly, VaryValue(particle.StabilityPerWeakeningeHit), anomaly.Comp); + } + if (particle.ParticleType == anomaly.Comp.TransformationParticleType || particle.TransmutationOverride) + { + ChangeAnomalySeverity(anomaly, VaryValue(particle.SeverityPerSeverityHit), anomaly.Comp); + if (_random.Prob(anomaly.Comp.Continuity)) + SetBehavior(anomaly, GetRandomBehavior()); } } @@ -116,6 +149,13 @@ public sealed partial class AnomalySystem : SharedAnomalySystem //penalty of up to 50% based on health multiplier *= MathF.Pow(1.5f, component.Health) - 0.5f; + //Apply behavior modifier + if (component.CurrentBehavior != null) + { + var behavior = _prototype.Index(component.CurrentBehavior.Value); + multiplier *= behavior.EarnPointModifier; + } + var severityValue = 1 / (1 + MathF.Pow(MathF.E, -7 * (component.Severity - 0.5f))); return (int) ((component.MaxPointsPerSecond - component.MinPointsPerSecond) * severityValue * multiplier) + component.MinPointsPerSecond; @@ -133,6 +173,7 @@ public sealed partial class AnomalySystem : SharedAnomalySystem AnomalousParticleType.Delta => Loc.GetString("anomaly-particles-delta"), AnomalousParticleType.Epsilon => Loc.GetString("anomaly-particles-epsilon"), AnomalousParticleType.Zeta => Loc.GetString("anomaly-particles-zeta"), + AnomalousParticleType.Sigma => Loc.GetString("anomaly-particles-sigma"), _ => throw new ArgumentOutOfRangeException() }; } @@ -144,4 +185,40 @@ public sealed partial class AnomalySystem : SharedAnomalySystem UpdateGenerator(); UpdateVessels(); } + + #region Behavior + private string GetRandomBehavior() + { + var weightList = _prototype.Index(WeightListProto); + return weightList.Pick(_random); + } + + private void SetBehavior(Entity anomaly, ProtoId behaviorProto) + { + if (anomaly.Comp.CurrentBehavior == behaviorProto) + return; + + if (anomaly.Comp.CurrentBehavior != null) + RemoveBehavior(anomaly, anomaly.Comp.CurrentBehavior.Value); + + //event broadcast + var ev = new AnomalyBehaviorChangedEvent(anomaly, anomaly.Comp.CurrentBehavior, behaviorProto); + anomaly.Comp.CurrentBehavior = behaviorProto; + RaiseLocalEvent(anomaly, ref ev, true); + + var behavior = _prototype.Index(behaviorProto); + + EntityManager.AddComponents(anomaly, behavior.Components); + } + + private void RemoveBehavior(Entity anomaly, ProtoId behaviorProto) + { + if (anomaly.Comp.CurrentBehavior == null) + return; + + var behavior = _prototype.Index(anomaly.Comp.CurrentBehavior.Value); + + EntityManager.RemoveComponents(anomaly, behavior.Components); + } + #endregion } diff --git a/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs b/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs index 9141ca6529..5b05522bb9 100644 --- a/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs +++ b/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs @@ -13,58 +13,64 @@ public sealed partial class AnomalousParticleComponent : Component /// The type of particle that the projectile /// imbues onto the anomaly on contact. ///

- [DataField("particleType", required: true)] + [DataField(required: true)] public AnomalousParticleType ParticleType; /// /// The fixture that's checked on collision. /// - [DataField("fixtureId")] + [DataField] public string FixtureId = "projectile"; /// /// The amount that the increases by when hit /// of an anomalous particle of . /// - [DataField("severityPerSeverityHit")] + [DataField] public float SeverityPerSeverityHit = 0.025f; /// /// The amount that the increases by when hit /// of an anomalous particle of . /// - [DataField("stabilityPerDestabilizingHit")] + [DataField] public float StabilityPerDestabilizingHit = 0.04f; /// /// The amount that the increases by when hit /// of an anomalous particle of . /// - [DataField("healthPerWeakeningeHit")] + [DataField] public float HealthPerWeakeningeHit = -0.05f; /// /// The amount that the increases by when hit /// of an anomalous particle of . /// - [DataField("stabilityPerWeakeningeHit")] + [DataField] public float StabilityPerWeakeningeHit = -0.1f; /// /// If this is true then the particle will always affect the stability of the anomaly. /// - [DataField("destabilzingOverride")] + [DataField] public bool DestabilzingOverride = false; /// /// If this is true then the particle will always affect the weakeness of the anomaly. /// - [DataField("weakeningOverride")] + [DataField] public bool WeakeningOverride = false; /// /// If this is true then the particle will always affect the severity of the anomaly. /// - [DataField("severityOverride")] + [DataField] public bool SeverityOverride = false; + + /// + /// If this is true then the particle will always affect the behaviour. + /// + [DataField] + public bool TransmutationOverride = false; } diff --git a/Content.Server/Anomaly/Components/SecretDataAnomalyComponent.cs b/Content.Server/Anomaly/Components/SecretDataAnomalyComponent.cs new file mode 100644 index 0000000000..80eecaafc7 --- /dev/null +++ b/Content.Server/Anomaly/Components/SecretDataAnomalyComponent.cs @@ -0,0 +1,45 @@ +using Content.Server.Anomaly.Effects; + +namespace Content.Server.Anomaly.Components; + +/// +/// Hides some information about the anomaly when scanning it +/// +[RegisterComponent, Access(typeof(SecretDataAnomalySystem), typeof(AnomalySystem))] +public sealed partial class SecretDataAnomalyComponent : Component +{ + /// + /// Minimum hidden data elements on MapInit + /// + [DataField] + public int RandomStartSecretMin = 0; + + /// + /// Maximum hidden data elements on MapInit + /// + [DataField] + public int RandomStartSecretMax = 0; + + /// + /// Current secret data + /// + [DataField] + public List Secret = new(); +} + +/// +/// Enum with secret data field variants +/// +[Serializable] +public enum AnomalySecretData : byte +{ + Severity, + Stability, + OutputPoint, + ParticleDanger, + ParticleUnstable, + ParticleContainment, + ParticleTransformation, + Behavior, + Default +} diff --git a/Content.Server/Anomaly/Components/ShuffleParticlesAnomalyComponent.cs b/Content.Server/Anomaly/Components/ShuffleParticlesAnomalyComponent.cs new file mode 100644 index 0000000000..00db76d486 --- /dev/null +++ b/Content.Server/Anomaly/Components/ShuffleParticlesAnomalyComponent.cs @@ -0,0 +1,28 @@ +using Content.Server.Anomaly.Effects; + +namespace Content.Server.Anomaly.Components; + +/// +/// Shuffle Particle types in some situations +/// +[RegisterComponent, Access(typeof(ShuffleParticlesAnomalySystem))] +public sealed partial class ShuffleParticlesAnomalyComponent : Component +{ + /// + /// Prob() chance to randomize particle types after Anomaly pulation + /// + [DataField] + public bool ShuffleOnPulse = false; + + /// + /// Prob() chance to randomize particle types after APE or CHIMP projectile + /// + [DataField] + public bool ShuffleOnParticleHit = false; + + /// + /// Chance to random particles + /// + [DataField] + public float Prob = 0.5f; +} diff --git a/Content.Server/Anomaly/Effects/BluespaceAnomalySystem.cs b/Content.Server/Anomaly/Effects/BluespaceAnomalySystem.cs index dd2da82c9d..bd8c2f3c7d 100644 --- a/Content.Server/Anomaly/Effects/BluespaceAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/BluespaceAnomalySystem.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using System.Numerics; using Content.Server.Anomaly.Components; using Content.Shared.Administration.Logs; @@ -33,7 +33,7 @@ public sealed class BluespaceAnomalySystem : EntitySystem { var xformQuery = GetEntityQuery(); var xform = xformQuery.GetComponent(uid); - var range = component.MaxShuffleRadius * args.Severity; + var range = component.MaxShuffleRadius * args.Severity * args.PowerModifier; var mobs = new HashSet>(); _lookup.GetEntitiesInRange(xform.Coordinates, range, mobs); var allEnts = new ValueList(mobs.Select(m => m.Owner)) { uid }; @@ -56,7 +56,7 @@ public sealed class BluespaceAnomalySystem : EntitySystem { var xform = Transform(uid); var mapPos = _xform.GetWorldPosition(xform); - var radius = component.SupercriticalTeleportRadius; + var radius = component.SupercriticalTeleportRadius * args.PowerModifier; var gridBounds = new Box2(mapPos - new Vector2(radius, radius), mapPos + new Vector2(radius, radius)); var mobs = new HashSet>(); _lookup.GetEntitiesInRange(xform.Coordinates, component.MaxShuffleRadius, mobs); diff --git a/Content.Server/Anomaly/Effects/ElectricityAnomalySystem.cs b/Content.Server/Anomaly/Effects/ElectricityAnomalySystem.cs index 8b5a72449f..f2a060d629 100644 --- a/Content.Server/Anomaly/Effects/ElectricityAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/ElectricityAnomalySystem.cs @@ -28,7 +28,7 @@ public sealed class ElectricityAnomalySystem : EntitySystem private void OnPulse(Entity anomaly, ref AnomalyPulseEvent args) { - var range = anomaly.Comp.MaxElectrocuteRange * args.Stability; + var range = anomaly.Comp.MaxElectrocuteRange * args.Stability * args.PowerModifier; int boltCount = (int)MathF.Floor(MathHelper.Lerp((float)anomaly.Comp.MinBoltCount, (float)anomaly.Comp.MaxBoltCount, args.Severity)); @@ -37,7 +37,7 @@ public sealed class ElectricityAnomalySystem : EntitySystem private void OnSupercritical(Entity anomaly, ref AnomalySupercriticalEvent args) { - var range = anomaly.Comp.MaxElectrocuteRange * 3; + var range = anomaly.Comp.MaxElectrocuteRange * 3 * args.PowerModifier; _emp.EmpPulse(_transform.GetMapCoordinates(anomaly), range, anomaly.Comp.EmpEnergyConsumption, anomaly.Comp.EmpDisabledDuration); _lightning.ShootRandomLightnings(anomaly, range, anomaly.Comp.MaxBoltCount * 3, arcDepth: 3); diff --git a/Content.Server/Anomaly/Effects/EntityAnomalySystem.cs b/Content.Server/Anomaly/Effects/EntityAnomalySystem.cs index 90a655fbba..86d6937af5 100644 --- a/Content.Server/Anomaly/Effects/EntityAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/EntityAnomalySystem.cs @@ -35,7 +35,7 @@ public sealed class EntityAnomalySystem : SharedEntityAnomalySystem if (!entry.Settings.SpawnOnPulse) continue; - SpawnEntities(component, entry, args.Stability, args.Severity); + SpawnEntities(component, entry, args.Stability, args.Severity, args.PowerModifier); } } @@ -46,7 +46,7 @@ public sealed class EntityAnomalySystem : SharedEntityAnomalySystem if (!entry.Settings.SpawnOnSuperCritical) continue; - SpawnEntities(component, entry, 1, 1); + SpawnEntities(component, entry, 1, 1, args.PowerModifier); } } @@ -57,7 +57,7 @@ public sealed class EntityAnomalySystem : SharedEntityAnomalySystem if (!entry.Settings.SpawnOnShutdown || args.Supercritical) continue; - SpawnEntities(component, entry, 1, 1); + SpawnEntities(component, entry, 1, 1, 1); } } @@ -68,7 +68,7 @@ public sealed class EntityAnomalySystem : SharedEntityAnomalySystem if (!entry.Settings.SpawnOnStabilityChanged) continue; - SpawnEntities(component, entry, args.Stability, args.Severity); + SpawnEntities(component, entry, args.Stability, args.Severity, 1); } } @@ -79,17 +79,17 @@ public sealed class EntityAnomalySystem : SharedEntityAnomalySystem if (!entry.Settings.SpawnOnSeverityChanged) continue; - SpawnEntities(component, entry, args.Stability, args.Severity); + SpawnEntities(component, entry, args.Stability, args.Severity, 1); } } - private void SpawnEntities(Entity anomaly, EntitySpawnSettingsEntry entry, float stability, float severity) + private void SpawnEntities(Entity anomaly, EntitySpawnSettingsEntry entry, float stability, float severity, float powerMod) { var xform = Transform(anomaly); if (!TryComp(xform.GridUid, out MapGridComponent? grid)) return; - var tiles = _anomaly.GetSpawningPoints(anomaly, stability, severity, entry.Settings); + var tiles = _anomaly.GetSpawningPoints(anomaly, stability, severity, entry.Settings, powerMod); if (tiles == null) return; diff --git a/Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs b/Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs index 2bef32e322..731d853280 100644 --- a/Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/InjectionAnomalySystem.cs @@ -29,12 +29,12 @@ public sealed class InjectionAnomalySystem : EntitySystem private void OnPulse(Entity entity, ref AnomalyPulseEvent args) { - PulseScalableEffect(entity, entity.Comp.InjectRadius, entity.Comp.MaxSolutionInjection * args.Severity); + PulseScalableEffect(entity, entity.Comp.InjectRadius * args.PowerModifier, entity.Comp.MaxSolutionInjection * args.Severity * args.PowerModifier); } private void OnSupercritical(Entity entity, ref AnomalySupercriticalEvent args) { - PulseScalableEffect(entity, entity.Comp.SuperCriticalInjectRadius, entity.Comp.SuperCriticalSolutionInjection); + PulseScalableEffect(entity, entity.Comp.SuperCriticalInjectRadius * args.PowerModifier, entity.Comp.SuperCriticalSolutionInjection * args.PowerModifier); } private void PulseScalableEffect(Entity entity, float injectRadius, float maxInject) diff --git a/Content.Server/Anomaly/Effects/ProjectileAnomalySystem.cs b/Content.Server/Anomaly/Effects/ProjectileAnomalySystem.cs index 8483c86dbb..23e0e472f0 100644 --- a/Content.Server/Anomaly/Effects/ProjectileAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/ProjectileAnomalySystem.cs @@ -31,12 +31,12 @@ public sealed class ProjectileAnomalySystem : EntitySystem private void OnPulse(EntityUid uid, ProjectileAnomalyComponent component, ref AnomalyPulseEvent args) { - ShootProjectilesAtEntities(uid, component, args.Severity); + ShootProjectilesAtEntities(uid, component, args.Severity * args.PowerModifier); } private void OnSupercritical(EntityUid uid, ProjectileAnomalyComponent component, ref AnomalySupercriticalEvent args) { - ShootProjectilesAtEntities(uid, component, 1.0f); + ShootProjectilesAtEntities(uid, component, args.PowerModifier); } private void ShootProjectilesAtEntities(EntityUid uid, ProjectileAnomalyComponent component, float severity) diff --git a/Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs b/Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs index 90177bae8e..d460e6f4b0 100644 --- a/Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/PuddleCreateAnomalySystem.cs @@ -25,9 +25,10 @@ public sealed class PuddleCreateAnomalySystem : EntitySystem return; var xform = Transform(entity.Owner); - var puddleSol = _solutionContainer.SplitSolution(sol.Value, entity.Comp.MaxPuddleSize * args.Severity); + var puddleSol = _solutionContainer.SplitSolution(sol.Value, entity.Comp.MaxPuddleSize * args.Severity * args.PowerModifier); _puddle.TrySplashSpillAt(entity.Owner, xform.Coordinates, puddleSol, out _); } + private void OnSupercritical(Entity entity, ref AnomalySupercriticalEvent args) { if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out _, out var sol)) diff --git a/Content.Server/Anomaly/Effects/PyroclasticAnomalySystem.cs b/Content.Server/Anomaly/Effects/PyroclasticAnomalySystem.cs index 6bd8be002e..d38bda562b 100644 --- a/Content.Server/Anomaly/Effects/PyroclasticAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/PyroclasticAnomalySystem.cs @@ -1,4 +1,4 @@ -using Content.Server.Atmos.Components; +using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; using Content.Shared.Anomaly.Components; using Content.Shared.Anomaly.Effects.Components; @@ -24,14 +24,14 @@ public sealed class PyroclasticAnomalySystem : EntitySystem private void OnPulse(EntityUid uid, PyroclasticAnomalyComponent component, ref AnomalyPulseEvent args) { var xform = Transform(uid); - var ignitionRadius = component.MaximumIgnitionRadius * args.Stability; + var ignitionRadius = component.MaximumIgnitionRadius * args.Stability * args.PowerModifier; IgniteNearby(uid, xform.Coordinates, args.Severity, ignitionRadius); } private void OnSupercritical(EntityUid uid, PyroclasticAnomalyComponent component, ref AnomalySupercriticalEvent args) { var xform = Transform(uid); - IgniteNearby(uid, xform.Coordinates, 1, component.MaximumIgnitionRadius * 2); + IgniteNearby(uid, xform.Coordinates, 1, component.MaximumIgnitionRadius * 2 * args.PowerModifier); } public void IgniteNearby(EntityUid uid, EntityCoordinates coordinates, float severity, float radius) diff --git a/Content.Server/Anomaly/Effects/SecretDataAnomalySystem.cs b/Content.Server/Anomaly/Effects/SecretDataAnomalySystem.cs new file mode 100644 index 0000000000..cbdc4b04df --- /dev/null +++ b/Content.Server/Anomaly/Effects/SecretDataAnomalySystem.cs @@ -0,0 +1,40 @@ +using Content.Server.Anomaly.Components; +using Robust.Shared.Random; + +namespace Content.Server.Anomaly.Effects; + +public sealed class SecretDataAnomalySystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + private readonly List _deita = new(); + + public override void Initialize() + { + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(EntityUid uid, SecretDataAnomalyComponent anomaly, MapInitEvent args) + { + RandomizeSecret(uid,_random.Next(anomaly.RandomStartSecretMin, anomaly.RandomStartSecretMax), anomaly); + } + + public void RandomizeSecret(EntityUid uid, int count, SecretDataAnomalyComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + component.Secret.Clear(); + + // I also considered just adding all the enum values and pruning but that seems more wasteful. + _deita.Clear(); + _deita.AddRange(Enum.GetValues()); + var actualCount = Math.Min(count, _deita.Count); + + for (int i = 0; i < actualCount; i++) + { + component.Secret.Add(_random.PickAndTake(_deita)); + } + } +} + diff --git a/Content.Server/Anomaly/Effects/ShuffleParticlesAnomalySystem.cs b/Content.Server/Anomaly/Effects/ShuffleParticlesAnomalySystem.cs new file mode 100644 index 0000000000..7d4d9a2ee5 --- /dev/null +++ b/Content.Server/Anomaly/Effects/ShuffleParticlesAnomalySystem.cs @@ -0,0 +1,41 @@ +using Content.Server.Anomaly.Components; +using Content.Shared.Anomaly.Components; +using Robust.Shared.Physics.Events; +using Robust.Shared.Random; + +namespace Content.Server.Anomaly.Effects; +public sealed class ShuffleParticlesAnomalySystem : EntitySystem +{ + [Dependency] private readonly AnomalySystem _anomaly = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnPulse); + SubscribeLocalEvent(OnStartCollide); + } + + private void OnStartCollide(EntityUid uid, ShuffleParticlesAnomalyComponent shuffle, StartCollideEvent args) + { + if (!TryComp(uid, out var anomaly)) + return; + + if (shuffle.ShuffleOnParticleHit && _random.Prob(shuffle.Prob)) + _anomaly.ShuffleParticlesEffect(anomaly); + + if (!TryComp(args.OtherEntity, out var particle)) + return; + } + + private void OnPulse(EntityUid uid, ShuffleParticlesAnomalyComponent shuffle, AnomalyPulseEvent args) + { + if (!TryComp(uid, out var anomaly)) + return; + + if (shuffle.ShuffleOnPulse && _random.Prob(shuffle.Prob)) + { + _anomaly.ShuffleParticlesEffect(anomaly); + } + } +} + diff --git a/Content.Server/Anomaly/Effects/TileAnomalySystem.cs b/Content.Server/Anomaly/Effects/TileAnomalySystem.cs index c1487cfc8c..92f5415252 100644 --- a/Content.Server/Anomaly/Effects/TileAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/TileAnomalySystem.cs @@ -34,7 +34,7 @@ public sealed class TileAnomalySystem : SharedTileAnomalySystem if (!entry.Settings.SpawnOnPulse) continue; - SpawnTiles(component, entry, args.Stability, args.Severity); + SpawnTiles(component, entry, args.Stability, args.Severity, args.PowerModifier); } } @@ -45,7 +45,7 @@ public sealed class TileAnomalySystem : SharedTileAnomalySystem if (!entry.Settings.SpawnOnSuperCritical) continue; - SpawnTiles(component, entry, 1, 1); + SpawnTiles(component, entry, 1, 1, args.PowerModifier); } } @@ -56,7 +56,7 @@ public sealed class TileAnomalySystem : SharedTileAnomalySystem if (!entry.Settings.SpawnOnShutdown || args.Supercritical) continue; - SpawnTiles(component, entry, 1, 1); + SpawnTiles(component, entry, 1, 1, 1); } } @@ -67,7 +67,7 @@ public sealed class TileAnomalySystem : SharedTileAnomalySystem if (!entry.Settings.SpawnOnStabilityChanged) continue; - SpawnTiles(component, entry, args.Stability, args.Severity); + SpawnTiles(component, entry, args.Stability, args.Severity, 1); } } @@ -78,17 +78,17 @@ public sealed class TileAnomalySystem : SharedTileAnomalySystem if (!entry.Settings.SpawnOnSeverityChanged) continue; - SpawnTiles(component, entry, args.Stability, args.Severity); + SpawnTiles(component, entry, args.Stability, args.Severity, 1); } } - private void SpawnTiles(Entity anomaly, TileSpawnSettingsEntry entry, float stability, float severity) + private void SpawnTiles(Entity anomaly, TileSpawnSettingsEntry entry, float stability, float severity, float powerMod) { var xform = Transform(anomaly); if (!TryComp(xform.GridUid, out var grid)) return; - var tiles = _anomaly.GetSpawningPoints(anomaly, stability, severity, entry.Settings); + var tiles = _anomaly.GetSpawningPoints(anomaly, stability, severity, entry.Settings, powerMod); if (tiles == null) return; diff --git a/Content.Shared/Anomaly/Components/AnomalyComponent.cs b/Content.Shared/Anomaly/Components/AnomalyComponent.cs index bafdf12360..99f7b8373a 100644 --- a/Content.Shared/Anomaly/Components/AnomalyComponent.cs +++ b/Content.Shared/Anomaly/Components/AnomalyComponent.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Shared.Anomaly.Prototypes; using Content.Shared.Damage; using Robust.Shared.Audio; using Robust.Shared.GameStates; @@ -166,6 +167,12 @@ public sealed partial class AnomalyComponent : Component [DataField] public AnomalousParticleType WeakeningParticleType; + /// + /// The particle type that change anomaly behaviour. + /// + [DataField] + public AnomalousParticleType TransformationParticleType; + #region Points and Vessels /// /// The vessel that the anomaly is connceted to. Stored so that multiple @@ -185,7 +192,7 @@ public sealed partial class AnomalyComponent : Component /// This doesn't include the point bonus for being unstable. /// [DataField("maxPointsPerSecond")] - public int MaxPointsPerSecond = 80; + public int MaxPointsPerSecond = 70; /// public sealed class EntityHealthBarOverlay : Overlay { - [Dependency] private readonly IPrototypeManager _prototype = default!; private readonly IEntityManager _entManager; private readonly SharedTransformSystem _transform; private readonly MobStateSystem _mobStateSystem; @@ -27,17 +26,14 @@ public sealed class EntityHealthBarOverlay : Overlay private readonly ProgressColorSystem _progressColor; public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; public HashSet DamageContainers = new(); - private readonly ShaderInstance _shader; public EntityHealthBarOverlay(IEntityManager entManager) { - IoCManager.InjectDependencies(this); _entManager = entManager; _transform = _entManager.System(); _mobStateSystem = _entManager.System(); _mobThresholdSystem = _entManager.System(); _progressColor = _entManager.System(); - _shader = _prototype.Index("unshaded").Instance(); } protected override void Draw(in OverlayDrawArgs args) @@ -50,8 +46,6 @@ public sealed class EntityHealthBarOverlay : Overlay var scaleMatrix = Matrix3.CreateScale(new Vector2(scale, scale)); var rotationMatrix = Matrix3.CreateRotation(-rotation); - handle.UseShader(_shader); - var query = _entManager.AllEntityQueryEnumerator(); while (query.MoveNext(out var uid, out var mobThresholdsComponent, @@ -122,7 +116,6 @@ public sealed class EntityHealthBarOverlay : Overlay handle.DrawRect(pixelDarken, Black.WithAlpha(128)); } - handle.UseShader(null); handle.SetTransform(Matrix3.Identity); } diff --git a/Content.Client/StatusIcon/StatusIconOverlay.cs b/Content.Client/StatusIcon/StatusIconOverlay.cs index 156212c55d..56107cbc02 100644 --- a/Content.Client/StatusIcon/StatusIconOverlay.cs +++ b/Content.Client/StatusIcon/StatusIconOverlay.cs @@ -3,9 +3,9 @@ using Content.Shared.StatusIcon.Components; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Shared.Enums; -using System.Numerics; using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using System.Numerics; namespace Content.Client.StatusIcon; @@ -18,7 +18,7 @@ public sealed class StatusIconOverlay : Overlay private readonly SpriteSystem _sprite; private readonly TransformSystem _transform; private readonly StatusIconSystem _statusIcon; - private readonly ShaderInstance _shader; + private readonly ShaderInstance _unshadedShader; public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; @@ -29,7 +29,7 @@ public sealed class StatusIconOverlay : Overlay _sprite = _entity.System(); _transform = _entity.System(); _statusIcon = _entity.System(); - _shader = _prototype.Index("unshaded").Instance(); + _unshadedShader = _prototype.Index("unshaded").Instance(); } protected override void Draw(in OverlayDrawArgs args) @@ -42,8 +42,6 @@ public sealed class StatusIconOverlay : Overlay var scaleMatrix = Matrix3.CreateScale(new Vector2(1, 1)); var rotationMatrix = Matrix3.CreateRotation(-eyeRot); - handle.UseShader(_shader); - var query = _entity.AllEntityQueryEnumerator(); while (query.MoveNext(out var uid, out var comp, out var sprite, out var xform, out var meta)) { @@ -111,11 +109,16 @@ public sealed class StatusIconOverlay : Overlay } + if (proto.IsShaded) + handle.UseShader(null); + else + handle.UseShader(_unshadedShader); + var position = new Vector2(xOffset, yOffset); handle.DrawTexture(texture, position); } - } - handle.UseShader(null); + handle.UseShader(null); + } } } diff --git a/Content.Shared/StatusIcon/StatusIconPrototype.cs b/Content.Shared/StatusIcon/StatusIconPrototype.cs index 428ca95082..145b443051 100644 --- a/Content.Shared/StatusIcon/StatusIconPrototype.cs +++ b/Content.Shared/StatusIcon/StatusIconPrototype.cs @@ -46,6 +46,12 @@ public partial class StatusIconData : IComparable ///
/// The multiplier applied to the point value for the @@ -221,6 +228,31 @@ public sealed partial class AnomalyComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public EntProtoId? CoreInertPrototype; + #region Behavior Deviations + + [DataField] + public ProtoId? CurrentBehavior; + + /// + /// Presumption of anomaly to change behavior. The higher the number, the higher the chance that the anomaly will change its behavior. + /// + [DataField] + public float Continuity = 0f; + + /// + /// Minimum contituty probability chance, that can be selected by anomaly on MapInit + /// + [DataField] + public float MinContituty = 0.1f; + + /// + /// Maximum contituty probability chance, that can be selected by anomaly on MapInit + /// + [DataField] + public float MaxContituty = 1.0f; + + #endregion + #region Floating Animation /// /// How long it takes to go from the bottom of the animation to the top. @@ -247,13 +279,13 @@ public sealed partial class AnomalyComponent : Component /// /// [ByRefEvent] -public readonly record struct AnomalyPulseEvent(EntityUid Anomaly, float Stability, float Severity); +public readonly record struct AnomalyPulseEvent(EntityUid Anomaly, float Stability, float Severity, float PowerModifier); /// /// Event raised on an anomaly when it reaches a supercritical point. /// [ByRefEvent] -public readonly record struct AnomalySupercriticalEvent(EntityUid Anomaly); +public readonly record struct AnomalySupercriticalEvent(EntityUid Anomaly, float PowerModifier); /// /// Event broadcast after an anomaly goes supercritical @@ -282,3 +314,9 @@ public readonly record struct AnomalyStabilityChangedEvent(EntityUid Anomaly, fl /// The anomaly being changed [ByRefEvent] public readonly record struct AnomalyHealthChangedEvent(EntityUid Anomaly, float Health); + +/// +/// Event broadcast when an anomaly's behavior is changed. +/// +[ByRefEvent] +public readonly record struct AnomalyBehaviorChangedEvent(EntityUid Anomaly, ProtoId? Old, ProtoId? New); diff --git a/Content.Shared/Anomaly/Effects/SharedGravityAnomalySystem.cs b/Content.Shared/Anomaly/Effects/SharedGravityAnomalySystem.cs index f4b7cc8bf4..4c3cdb0146 100644 --- a/Content.Shared/Anomaly/Effects/SharedGravityAnomalySystem.cs +++ b/Content.Shared/Anomaly/Effects/SharedGravityAnomalySystem.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using Content.Shared.Anomaly.Components; using Content.Shared.Anomaly.Effects.Components; using Content.Shared.Ghost; @@ -27,8 +27,8 @@ public abstract class SharedGravityAnomalySystem : EntitySystem private void OnAnomalyPulse(EntityUid uid, GravityAnomalyComponent component, ref AnomalyPulseEvent args) { var xform = Transform(uid); - var range = component.MaxThrowRange * args.Severity; - var strength = component.MaxThrowStrength * args.Severity; + var range = component.MaxThrowRange * args.Severity * args.PowerModifier; + var strength = component.MaxThrowStrength * args.Severity * args.PowerModifier; var lookup = _lookup.GetEntitiesInRange(uid, range, LookupFlags.Dynamic | LookupFlags.Sundries); var xformQuery = GetEntityQuery(); var worldPos = _xform.GetWorldPosition(xform, xformQuery); @@ -61,8 +61,8 @@ public abstract class SharedGravityAnomalySystem : EntitySystem var tiles = tileref.Select(t => (t.GridIndices, Tile.Empty)).ToList(); _mapSystem.SetTiles(xform.GridUid.Value, grid, tiles); - var range = component.MaxThrowRange * 2; - var strength = component.MaxThrowStrength * 2; + var range = component.MaxThrowRange * 2 * args.PowerModifier; + var strength = component.MaxThrowStrength * 2 * args.PowerModifier; var lookup = _lookup.GetEntitiesInRange(uid, range, LookupFlags.Dynamic | LookupFlags.Sundries); var xformQuery = GetEntityQuery(); var physQuery = GetEntityQuery(); diff --git a/Content.Shared/Anomaly/Prototypes/AnomalyBehaviorPrototype.cs b/Content.Shared/Anomaly/Prototypes/AnomalyBehaviorPrototype.cs new file mode 100644 index 0000000000..c498f5c595 --- /dev/null +++ b/Content.Shared/Anomaly/Prototypes/AnomalyBehaviorPrototype.cs @@ -0,0 +1,45 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Anomaly.Prototypes; + +[Prototype] +public sealed partial class AnomalyBehaviorPrototype : IPrototype +{ + [IdDataField] public string ID { get; private set; } = default!; + + /// + /// Description for anomaly scanner + /// + [DataField] + public string Description = string.Empty; + + /// + /// modification of the number of points earned from an anomaly + /// + [DataField] + public float EarnPointModifier = 1f; + + /// + /// deceleration or acceleration of the pulsation frequency of the anomaly + /// + [DataField] + public float PulseFrequencyModifier = 1f; + + /// + /// pulse and supercrit power modifier + /// + [DataField] + public float PulsePowerModifier = 1f; + + /// + /// how much the particles will affect the anomaly + /// + [DataField] + public float ParticleSensivity = 1f; + + /// + /// Components that are added to the anomaly when this behavior is selected, and removed when another behavior is selected. + /// + [DataField(serverOnly: true)] + public ComponentRegistry Components = new(); +} diff --git a/Content.Shared/Anomaly/SharedAnomaly.cs b/Content.Shared/Anomaly/SharedAnomaly.cs index b7585cb5f1..cde61ca336 100644 --- a/Content.Shared/Anomaly/SharedAnomaly.cs +++ b/Content.Shared/Anomaly/SharedAnomaly.cs @@ -33,6 +33,7 @@ public enum AnomalousParticleType : byte Delta, Epsilon, Zeta, + Sigma, Default } diff --git a/Content.Shared/Anomaly/SharedAnomalySystem.cs b/Content.Shared/Anomaly/SharedAnomalySystem.cs index c335cd7b85..da1d31c6ff 100644 --- a/Content.Shared/Anomaly/SharedAnomalySystem.cs +++ b/Content.Shared/Anomaly/SharedAnomalySystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Administration.Logs; using Content.Shared.Anomaly.Components; +using Content.Shared.Anomaly.Prototypes; using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.Interaction; @@ -14,6 +15,7 @@ using Robust.Shared.Network; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; +using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -33,6 +35,7 @@ public abstract class SharedAnomalySystem : EntitySystem [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() @@ -90,8 +93,7 @@ public abstract class SharedAnomalySystem : EntitySystem return; DebugTools.Assert(component.MinPulseLength > TimeSpan.FromSeconds(3)); // this is just to prevent lagspikes mispredicting pulses - var variation = Random.NextFloat(-component.PulseVariation, component.PulseVariation) + 1; - component.NextPulseTime = Timing.CurTime + GetPulseLength(component) * variation; + RefreshPulseTimer(uid, component); if (_net.IsServer) Log.Info($"Performing anomaly pulse. Entity: {ToPrettyString(uid)}"); @@ -115,10 +117,25 @@ public abstract class SharedAnomalySystem : EntitySystem pulse.EndTime = Timing.CurTime + pulse.PulseDuration; Appearance.SetData(uid, AnomalyVisuals.IsPulsing, true); - var ev = new AnomalyPulseEvent(uid, component.Stability, component.Severity); + var powerMod = 1f; + if (component.CurrentBehavior != null) + { + var beh = _prototype.Index(component.CurrentBehavior); + powerMod = beh.PulsePowerModifier; + } + var ev = new AnomalyPulseEvent(uid, component.Stability, component.Severity, powerMod); RaiseLocalEvent(uid, ref ev, true); } + public void RefreshPulseTimer(EntityUid uid, AnomalyComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + var variation = Random.NextFloat(-component.PulseVariation, component.PulseVariation) + 1; + component.NextPulseTime = Timing.CurTime + GetPulseLength(component) * variation; + } + /// /// Begins the animation for going supercritical /// @@ -159,7 +176,14 @@ public abstract class SharedAnomalySystem : EntitySystem if (_net.IsServer) Log.Info($"Raising supercritical event. Entity: {ToPrettyString(uid)}"); - var ev = new AnomalySupercriticalEvent(uid); + var powerMod = 1f; + if (component.CurrentBehavior != null) + { + var beh = _prototype.Index(component.CurrentBehavior); + powerMod = beh.PulsePowerModifier; + } + + var ev = new AnomalySupercriticalEvent(uid, powerMod); RaiseLocalEvent(uid, ref ev, true); EndAnomaly(uid, component, true); @@ -276,8 +300,17 @@ public abstract class SharedAnomalySystem : EntitySystem public TimeSpan GetPulseLength(AnomalyComponent component) { DebugTools.Assert(component.MaxPulseLength > component.MinPulseLength); - var modifier = Math.Clamp((component.Stability - component.GrowthThreshold) / component.GrowthThreshold, 0, 1); - return (component.MaxPulseLength - component.MinPulseLength) * modifier + component.MinPulseLength; + var modifier = Math.Clamp((component.Stability - component.GrowthThreshold) / component.GrowthThreshold, 0, 1); + + var lenght = (component.MaxPulseLength - component.MinPulseLength) * modifier + component.MinPulseLength; + + //Apply behavior modifier + if (component.CurrentBehavior != null) + { + var behavior = _prototype.Index(component.CurrentBehavior.Value); + lenght *= behavior.PulseFrequencyModifier; + } + return lenght; } /// @@ -335,14 +368,14 @@ public abstract class SharedAnomalySystem : EntitySystem /// /// Gets random points around the anomaly based on the given parameters. /// - public List? GetSpawningPoints(EntityUid uid, float stability, float severity, AnomalySpawnSettings settings) + public List? GetSpawningPoints(EntityUid uid, float stability, float severity, AnomalySpawnSettings settings, float powerModifier = 1f) { var xform = Transform(uid); if (!TryComp(xform.GridUid, out var grid)) return null; - var amount = (int) (MathHelper.Lerp(settings.MinAmount, settings.MaxAmount, severity * stability) + 0.5f); + var amount = (int) (MathHelper.Lerp(settings.MinAmount, settings.MaxAmount, severity * stability * powerModifier) + 0.5f); var localpos = xform.Coordinates.Position; var tilerefs = grid.GetLocalTilesIntersecting( diff --git a/Resources/Locale/en-US/anomaly/anomaly.ftl b/Resources/Locale/en-US/anomaly/anomaly.ftl index 3a398d482e..da5882fa62 100644 --- a/Resources/Locale/en-US/anomaly/anomaly.ftl +++ b/Resources/Locale/en-US/anomaly/anomaly.ftl @@ -8,20 +8,29 @@ anomaly-particles-delta = Delta particles anomaly-particles-epsilon = Epsilon particles anomaly-particles-zeta = Zeta particles anomaly-particles-omega = Omega particles +anomaly-particles-sigma = Sigma particles anomaly-scanner-component-scan-complete = Scan complete! anomaly-scanner-ui-title = anomaly scanner anomaly-scanner-no-anomaly = No anomaly currently scanned. anomaly-scanner-severity-percentage = Current severity: [color=gray]{$percent}[/color] +anomaly-scanner-severity-percentage-unknown = Current severity: [color=red]ERROR[/color] anomaly-scanner-stability-low = Current anomaly state: [color=gold]Decaying[/color] anomaly-scanner-stability-medium = Current anomaly state: [color=forestgreen]Stable[/color] anomaly-scanner-stability-high = Current anomaly state: [color=crimson]Growing[/color] +anomaly-scanner-stability-unknown = Current anomaly state: [color=red]ERROR[/color] anomaly-scanner-point-output = Point output: [color=gray]{$point}[/color] +anomaly-scanner-point-output-unknown = Point output: [color=red]ERROR[/color] anomaly-scanner-particle-readout = Particle Reaction Analysis: anomaly-scanner-particle-danger = - [color=crimson]Danger type:[/color] {$type} anomaly-scanner-particle-unstable = - [color=plum]Unstable type:[/color] {$type} anomaly-scanner-particle-containment = - [color=goldenrod]Containment type:[/color] {$type} +anomaly-scanner-particle-transformation = - [color=#6b75fa]Transformation type:[/color] {$type} +anomaly-scanner-particle-danger-unknown = - [color=crimson]Danger type:[/color] [color=red]ERROR[/color] +anomaly-scanner-particle-unstable-unknown = - [color=plum]Unstable type:[/color] [color=red]ERROR[/color] +anomaly-scanner-particle-containment-unknown = - [color=goldenrod]Containment type:[/color] [color=red]ERROR[/color] +anomaly-scanner-particle-transformation-unknown = - [color=#6b75fa]Transformation type:[/color] [color=red]ERROR[/color] anomaly-scanner-pulse-timer = Time until next pulse: [color=gray]{$time}[/color] anomaly-gorilla-core-slot-name = Anomaly core @@ -65,3 +74,23 @@ anomaly-command-supercritical = Makes a target anomaly go supercritical # Flavor text on the footer anomaly-generator-flavor-left = Anomaly may spawn inside the operator. anomaly-generator-flavor-right = v1.1 + +anomaly-behavior-unknown = [color=red]ERROR. Cannot be read.[/color] + +anomaly-behavior-title = behavior deviation analysis: +anomaly-behavior-point =[color=gold]Anomaly produces {$mod}% of the points[/color] + +anomaly-behavior-safe = [color=forestgreen]The anomaly is extremely stable. Extremely rare pulsations.[/color] +anomaly-behavior-slow = [color=forestgreen]The frequency of pulsations is much less frequent.[/color] +anomaly-behavior-light = [color=forestgreen]Pulsation power is significantly reduced.[/color] +anomaly-behavior-balanced = No behavior deviations detected. +anomaly-behavior-delayed-force = The frequency of pulsations is greatly reduced, but their power is increased. +anomaly-behavior-rapid = The frequency of the pulsation is much higher, but its strength is attenuated. +anomaly-behavior-reflect = A protective coating was detected. +anomaly-behavior-nonsensivity = A weak reaction to particles was detected. +anomaly-behavior-sensivity = Amplified reaction to particles was detected. +anomaly-behavior-secret = Interference detected. Some data cannot be read +anomaly-behavior-inconstancy = [color=crimson]Impermanence has been detected. Particle types can change over time.[/color] +anomaly-behavior-fast = [color=crimson]The pulsation frequency is strongly increased.[/color] +anomaly-behavior-strenght = [color=crimson]The pulsation power is significantly increased.[/color] +anomaly-behavior-moving = [color=crimson]Coordinate instability was detected.[/color] \ No newline at end of file diff --git a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl index 4d2dd25af2..dc45677c8d 100644 --- a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl +++ b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl @@ -70,6 +70,9 @@ signal-port-description-set-particle-epsilon = Sets the type of particle this de signal-port-name-set-particle-zeta = Set particle type: zeta signal-port-description-set-particle-zeta = Sets the type of particle this device emits to zeta. +signal-port-name-set-particle-sigma = Set particle type: sigma +signal-port-description-set-particle-sigma = Sets the type of particle this device emits to sigma. + signal-port-name-logic-input-a = Input A signal-port-description-logic-input-a = First input of a logic gate. diff --git a/Resources/Prototypes/Anomaly/behaviours.yml b/Resources/Prototypes/Anomaly/behaviours.yml new file mode 100644 index 0000000000..b46ba97fc2 --- /dev/null +++ b/Resources/Prototypes/Anomaly/behaviours.yml @@ -0,0 +1,208 @@ +- type: weightedRandom + id: AnomalyBehaviorList + weights: + #safe + Slow: 0.5 + Light: 0.5 + FullSafe: 0.1 + #balanced + Balanced: 3 + DelayedForce: 1 + Rapid: 1 + BalancedSecret: 1 + Reflect: 1 + NonSensivity: 1 + Sensivity: 1 + #Hard + Fast: 0.5 + Strenght: 0.5 + Inconstancy: 0.5 + InconstancyParticle: 0.5 + FullUnknown: 0.5 + Jumping: 0.3 + Moving: 0.1 + #Complex + FastUnknown: 0.2 + JumpingUnknown: 0.1 + InconstancyParticleUnknown: 0.1 + + +# Easy x0.5 point production + +- type: anomalyBehavior + id: FullSafe + pulseFrequencyModifier: 3 + pulsePowerModifier: 0.5 + earnPointModifier: 0.05 + description: anomaly-behavior-safe + +- type: anomalyBehavior + id: Slow + pulseFrequencyModifier: 2 + earnPointModifier: 0.5 + description: anomaly-behavior-slow + +- type: anomalyBehavior + id: Light + pulsePowerModifier: 0.5 + earnPointModifier: 0.5 + description: anomaly-behavior-light + +# Balanced x1 point production + +- type: anomalyBehavior + id: Balanced + earnPointModifier: 1 + description: anomaly-behavior-balanced + +- type: anomalyBehavior + id: DelayedForce + earnPointModifier: 1.15 + description: anomaly-behavior-delayed-force + pulseFrequencyModifier: 0.5 + pulsePowerModifier: 2 + +- type: anomalyBehavior + id: Rapid + earnPointModifier: 1.15 + description: anomaly-behavior-rapid + pulseFrequencyModifier: 2 + pulsePowerModifier: 0.5 + +- type: anomalyBehavior + id: BalancedSecret + earnPointModifier: 1.2 + description: anomaly-behavior-secret + components: + - type: SecretDataAnomaly + randomStartSecretMin: 2 + randomStartSecretMax: 3 + +- type: anomalyBehavior + id: Reflect + earnPointModifier: 1.1 + particleSensivity: 0.5 + description: anomaly-behavior-reflect + components: + - type: Reflect + reflectProb: 0.5 + reflects: + - Energy + +- type: anomalyBehavior + id: NonSensivity + earnPointModifier: 0.8 + particleSensivity: 0.5 + description: anomaly-behavior-nonsensivity + +- type: anomalyBehavior + id: Sensivity + earnPointModifier: 1.2 + particleSensivity: 1.5 + description: anomaly-behavior-sensivity + +# Hard x2 point production + +- type: anomalyBehavior + id: Fast + earnPointModifier: 1.9 + pulseFrequencyModifier: 0.5 + description: anomaly-behavior-fast + +- type: anomalyBehavior + id: Strenght + pulsePowerModifier: 1.5 + earnPointModifier: 1.4 + description: anomaly-behavior-strenght + +- type: anomalyBehavior + id: Inconstancy + earnPointModifier: 1.7 + description: anomaly-behavior-inconstancy + components: + - type: ShuffleParticlesAnomaly + shuffleOnPulse: true + prob: 1 + +- type: anomalyBehavior + id: InconstancyParticle + earnPointModifier: 1.8 + description: anomaly-behavior-inconstancy + components: + - type: ShuffleParticlesAnomaly + shuffleOnParticleHit: true + prob: 0.8 + +- type: anomalyBehavior + id: Moving + earnPointModifier: 2.2 + description: anomaly-behavior-moving + components: + - type: RandomWalk + minSpeed: 0 + maxSpeed: 0.3 + - type: CanMoveInAir + - type: Physics + bodyType: Dynamic + bodyStatus: InAir + +- type: anomalyBehavior + id: Jumping + earnPointModifier: 1.8 + description: anomaly-behavior-moving + components: + - type: ChaoticJump + jumpMinInterval: 15 + jumpMaxInterval: 25 + rangeMin: 1 + rangeMax: 4 + effect: PuddleSparkle + +- type: anomalyBehavior + id: FullUnknown + earnPointModifier: 1.9 + description: anomaly-behavior-secret + components: + - type: SecretDataAnomaly + randomStartSecretMin: 4 + randomStartSecretMax: 6 + +# Complex Effects + +- type: anomalyBehavior + id: JumpingUnknown + earnPointModifier: 1.9 + description: anomaly-behavior-moving + components: + - type: ChaoticJump + jumpMinInterval: 15 + jumpMaxInterval: 25 + rangeMin: 1 + rangeMax: 1 + effect: PuddleSparkle + - type: SecretDataAnomaly + randomStartSecretMin: 3 + randomStartSecretMax: 5 + + +- type: anomalyBehavior + id: FastUnknown + earnPointModifier: 1.9 + pulseFrequencyModifier: 0.5 + description: anomaly-behavior-fast + components: + - type: SecretDataAnomaly + randomStartSecretMin: 3 + randomStartSecretMax: 5 + +- type: anomalyBehavior + id: InconstancyParticleUnknown + earnPointModifier: 1.95 + description: anomaly-behavior-inconstancy + components: + - type: ShuffleParticlesAnomaly + shuffleOnParticleHit: true + prob: 0.5 + - type: SecretDataAnomaly + randomStartSecretMin: 3 + randomStartSecretMax: 5 \ No newline at end of file diff --git a/Resources/Prototypes/DeviceLinking/sink_ports.yml b/Resources/Prototypes/DeviceLinking/sink_ports.yml index f05934f3ba..56b10ec4fc 100644 --- a/Resources/Prototypes/DeviceLinking/sink_ports.yml +++ b/Resources/Prototypes/DeviceLinking/sink_ports.yml @@ -107,3 +107,8 @@ id: SetParticleZeta name: signal-port-name-set-particle-zeta description: signal-port-description-set-particle-zeta + +- type: sinkPort + id: SetParticleSigma + name: signal-port-name-set-particle-sigma + description: signal-port-description-set-particle-sigma diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 202604b8bf..c4736ad356 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -643,6 +643,7 @@ - type: Clothing sprite: Objects/Weapons/Guns/Revolvers/chimp.rsi - type: Gun + projectileSpeed: 4 fireRate: 1.5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser2.ogg @@ -657,6 +658,8 @@ fireCost: 100 - proto: AnomalousParticleZetaStrong fireCost: 100 + - proto: AnomalousParticleSigmaStrong + fireCost: 100 - type: Construction graph: UpgradeWeaponPistolCHIMP node: start @@ -679,6 +682,8 @@ fireCost: 100 - proto: AnomalousParticleZetaStrong fireCost: 100 + - proto: AnomalousParticleSigmaStrong + fireCost: 100 - type: entity name: eye of a behonker diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 9445a3cfe1..a28d527535 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -487,6 +487,11 @@ name: delta particles noSpawn: true components: + - type: PointLight + enabled: true + color: "#c2385d" + radius: 2.0 + energy: 7.0 - type: AnomalousParticle particleType: Delta - type: Sprite @@ -513,6 +518,9 @@ Heat: 5 - type: TimedDespawn lifetime: 3 + - type: Reflective + reflective: + - Energy - type: entity @@ -533,6 +541,11 @@ name: epsilon particles noSpawn: true components: + - type: PointLight + enabled: true + color: "#38c296" + radius: 2.0 + energy: 7.0 - type: Sprite layers: - state: magicm_cyan @@ -558,6 +571,11 @@ name: zeta particles noSpawn: true components: + - type: PointLight + enabled: true + color: "#b9c238" + radius: 2.0 + energy: 7.0 - type: Sprite layers: - state: magicm_yellow @@ -583,6 +601,11 @@ name: omega particles noSpawn: true components: + - type: PointLight + enabled: true + color: "#38c24f" + radius: 2.0 + energy: 7.0 - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/magic.rsi layers: @@ -601,6 +624,33 @@ types: Heat: 20 +- type: entity + parent: AnomalousParticleDelta + id: AnomalousParticleSigma + name: sigma particles + noSpawn: true + components: + - type: PointLight + enabled: true + color: "#8d38c2" + radius: 2.0 + energy: 7.0 + - type: Sprite + layers: + - state: magicm + shader: unshaded + - type: AnomalousParticle + particleType: Sigma + +- type: entity + parent: AnomalousParticleSigma + id: AnomalousParticleSigmaStrong + name: sigma particles + noSpawn: true + components: + - type: AnomalousParticle + particleType: Sigma + # Launcher projectiles (grenade / rocket) - type: entity id: BulletRocket diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 36d77a236d..0064e7a4ae 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -172,10 +172,12 @@ - AnomalousParticleDelta - AnomalousParticleEpsilon - AnomalousParticleZeta + - AnomalousParticleSigma setTypePorts: SetParticleDelta: AnomalousParticleDelta SetParticleEpsilon: AnomalousParticleEpsilon SetParticleZeta: AnomalousParticleZeta + SetParticleSigma: AnomalousParticleSigma fireBurstSize: 1 fireBurstDelayMin: 2 fireBurstDelayMax: 6 @@ -185,6 +187,7 @@ guides: - APE - type: Gun + projectileSpeed: 4 fireRate: 10 #just has to be fast enough to keep up with upgrades showExamineText: false selectedMode: SemiAuto @@ -219,6 +222,7 @@ - SetParticleDelta - SetParticleEpsilon - SetParticleZeta + - SetParticleSigma - type: entity id: MachineAnomalyGenerator diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml index 14a9997b80..99574ab7be 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml @@ -21,6 +21,7 @@ anchored: false - type: Physics bodyType: Static + bodyStatus: InAir - type: Fixtures fixtures: fix1: @@ -47,6 +48,9 @@ - type: EmitSoundOnSpawn sound: path: /Audio/Effects/teleport_arrival.ogg + - type: SecretDataAnomaly + randomStartSecretMin: 0 + randomStartSecretMax: 2 - type: entity id: AnomalyPyroclastic @@ -119,11 +123,11 @@ castShadows: false - type: GravityAnomaly - type: GravityWell - - type: RadiationSource + - type: RadiationSource - type: Physics bodyType: Dynamic bodyStatus: InAir - - type: CanMoveInAir + - type: CanMoveInAir - type: RandomWalk - type: SingularityDistortion intensity: 1000 @@ -598,7 +602,7 @@ color: "#6270bb" - type: Anomaly animationTime: 6 - offset: 0.05, 0 + offset: 0, 0 corePrototype: AnomalyCoreFlora coreInertPrototype: AnomalyCoreFloraInert anomalyContactDamage: From 5e15abc5ed704ce5c6d6ee72568d5e1e6ef69ffc Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 08:30:19 +0000 Subject: [PATCH 096/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 27a7a03a56..d901a49abd 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: Smoking now causes mild lung cancer in the form of cellular damage. - type: Tweak - id: 5787 - time: '2024-01-25T09:51:26.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24546 - author: metalgearsloth changes: - message: Add title2.ogg to space ambience tracks. @@ -3806,3 +3799,14 @@ id: 6286 time: '2024-04-01T07:20:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25831 +- author: TheShuEd + changes: + - message: Added new transformation particles types for APE and CHIMP + type: Add + - message: Added new anomaly behaviour mechanic. Different behaviors can change + the gameplay of an anomaly. Players can get random behaviors by bombarding the + anomaly with new particles + type: Add + id: 6287 + time: '2024-04-01T08:29:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/24683 From a05f95269f8e04a29e8d93da37cff47b84026d51 Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Mon, 1 Apr 2024 09:36:07 +0100 Subject: [PATCH 097/206] Fix clipping/overlap in lathe machine UIs (#26646) * Add scrollbars to lathe material list when necessary * Fix bug where shrinking window would cause elements to overlap --------- Co-authored-by: Eoin Mcloughlin --- Content.Client/Lathe/UI/LatheMenu.xaml | 4 +--- Content.Client/Materials/UI/MaterialStorageControl.xaml | 9 +++++---- .../Materials/UI/MaterialStorageControl.xaml.cs | 8 ++++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Content.Client/Lathe/UI/LatheMenu.xaml b/Content.Client/Lathe/UI/LatheMenu.xaml index 2b97166f05..6f484d8c7b 100644 --- a/Content.Client/Lathe/UI/LatheMenu.xaml +++ b/Content.Client/Lathe/UI/LatheMenu.xaml @@ -124,9 +124,7 @@ + Orientation="Vertical"> [GenerateTypedNameReferences] -public sealed partial class MaterialStorageControl : BoxContainer +public sealed partial class MaterialStorageControl : ScrollContainer { [Dependency] private readonly IEntityManager _entityManager = default!; @@ -63,7 +63,7 @@ public sealed partial class MaterialStorageControl : BoxContainer } var children = new List(); - children.AddRange(Children.OfType()); + children.AddRange(MaterialList.Children.OfType()); foreach (var display in children) { @@ -71,7 +71,7 @@ public sealed partial class MaterialStorageControl : BoxContainer if (extra.Contains(mat)) { - RemoveChild(display); + MaterialList.RemoveChild(display); continue; } @@ -83,7 +83,7 @@ public sealed partial class MaterialStorageControl : BoxContainer foreach (var mat in missing) { var volume = mats[mat]; - AddChild(new MaterialDisplay(_owner.Value, mat, volume, canEject)); + MaterialList.AddChild(new MaterialDisplay(_owner.Value, mat, volume, canEject)); } _currentMaterials = mats; From bc31c193c25b297179e0de2bf54c2623fbeeebe0 Mon Sep 17 00:00:00 2001 From: Sk1tch Date: Mon, 1 Apr 2024 13:48:02 -0700 Subject: [PATCH 098/206] Added chat window transparency slider to options (#24990) * Adds a new slider to the misc tab in options that lets the player set chat window transparency * Tweaked variable names * Fixed order to match UI * Renamed set chat window transparency function * Changed and refactored to opacity instead of transparency * Remove unnecessary int to float conversions Slider used to be 0-100 while the CCVar was 0.0-1.0f. This is confusing and was only used for rounding to 2 decimal points. * Round the value to two decimal points * Remove rounding for now * Rename * Unhardcode chat color by moving to stylesheet * Fix indent * Make opacity slider only change opacity --------- Co-authored-by: Your Name Co-authored-by: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> --- Content.Client/Options/UI/Tabs/MiscTab.xaml | 11 +++-- .../Options/UI/Tabs/MiscTab.xaml.cs | 12 ++++++ Content.Client/Stylesheets/StyleNano.cs | 29 ++++++++----- .../Systems/Chat/ChatUIController.cs | 43 ++++++++++++++++--- .../{ChatInputBox.cs => ChatInputBox.xaml.cs} | 4 +- .../Systems/Chat/Widgets/ChatBox.xaml | 7 +-- Content.Shared/CCVar/CCVars.cs | 7 +++ .../en-US/escape-menu/ui/options-menu.ftl | 2 + 8 files changed, 90 insertions(+), 25 deletions(-) rename Content.Client/UserInterface/Systems/Chat/Controls/{ChatInputBox.cs => ChatInputBox.xaml.cs} (95%) diff --git a/Content.Client/Options/UI/Tabs/MiscTab.xaml b/Content.Client/Options/UI/Tabs/MiscTab.xaml index 2ee59910f7..5564d7b226 100644 --- a/Content.Client/Options/UI/Tabs/MiscTab.xaml +++ b/Content.Client/Options/UI/Tabs/MiscTab.xaml @@ -25,6 +25,14 @@ + + - - - diff --git a/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs b/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs index 3b9c41efdf..476e7289ea 100644 --- a/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/MiscTab.xaml.cs @@ -66,6 +66,7 @@ namespace Content.Client.Options.UI.Tabs EnableColorNameCheckBox.OnToggled += OnCheckBoxToggled; ColorblindFriendlyCheckBox.OnToggled += OnCheckBoxToggled; ReducedMotionCheckBox.OnToggled += OnCheckBoxToggled; + ChatWindowOpacitySlider.OnValueChanged += OnChatWindowOpacitySliderChanged; ScreenShakeIntensitySlider.OnValueChanged += OnScreenShakeIntensitySliderChanged; // ToggleWalk.OnToggled += OnCheckBoxToggled; StaticStorageUI.OnToggled += OnCheckBoxToggled; @@ -81,6 +82,7 @@ namespace Content.Client.Options.UI.Tabs EnableColorNameCheckBox.Pressed = _cfg.GetCVar(CCVars.ChatEnableColorName); ColorblindFriendlyCheckBox.Pressed = _cfg.GetCVar(CCVars.AccessibilityColorblindFriendly); ReducedMotionCheckBox.Pressed = _cfg.GetCVar(CCVars.ReducedMotion); + ChatWindowOpacitySlider.Value = _cfg.GetCVar(CCVars.ChatWindowOpacity); ScreenShakeIntensitySlider.Value = _cfg.GetCVar(CCVars.ScreenShakeIntensity) * 100f; // ToggleWalk.Pressed = _cfg.GetCVar(CCVars.ToggleWalk); StaticStorageUI.Pressed = _cfg.GetCVar(CCVars.StaticStorageUI); @@ -101,6 +103,13 @@ namespace Content.Client.Options.UI.Tabs UpdateApplyButton(); } + private void OnChatWindowOpacitySliderChanged(Range range) + { + ChatWindowOpacityLabel.Text = Loc.GetString("ui-options-chat-window-opacity-percent", + ("opacity", range.Value)); + UpdateApplyButton(); + } + private void OnScreenShakeIntensitySliderChanged(Range obj) { ScreenShakeIntensityLabel.Text = Loc.GetString("ui-options-screen-shake-percent", ("intensity", ScreenShakeIntensitySlider.Value / 100f)); @@ -127,6 +136,7 @@ namespace Content.Client.Options.UI.Tabs _cfg.SetCVar(CCVars.ChatEnableColorName, EnableColorNameCheckBox.Pressed); _cfg.SetCVar(CCVars.AccessibilityColorblindFriendly, ColorblindFriendlyCheckBox.Pressed); _cfg.SetCVar(CCVars.ReducedMotion, ReducedMotionCheckBox.Pressed); + _cfg.SetCVar(CCVars.ChatWindowOpacity, ChatWindowOpacitySlider.Value); _cfg.SetCVar(CCVars.ScreenShakeIntensity, ScreenShakeIntensitySlider.Value / 100f); // _cfg.SetCVar(CCVars.ToggleWalk, ToggleWalk.Pressed); _cfg.SetCVar(CCVars.StaticStorageUI, StaticStorageUI.Pressed); @@ -154,6 +164,7 @@ namespace Content.Client.Options.UI.Tabs var isEnableColorNameSame = EnableColorNameCheckBox.Pressed == _cfg.GetCVar(CCVars.ChatEnableColorName); var isColorblindFriendly = ColorblindFriendlyCheckBox.Pressed == _cfg.GetCVar(CCVars.AccessibilityColorblindFriendly); var isReducedMotionSame = ReducedMotionCheckBox.Pressed == _cfg.GetCVar(CCVars.ReducedMotion); + var isChatWindowOpacitySame = Math.Abs(ChatWindowOpacitySlider.Value - _cfg.GetCVar(CCVars.ChatWindowOpacity)) < 0.01f; var isScreenShakeIntensitySame = Math.Abs(ScreenShakeIntensitySlider.Value / 100f - _cfg.GetCVar(CCVars.ScreenShakeIntensity)) < 0.01f; // var isToggleWalkSame = ToggleWalk.Pressed == _cfg.GetCVar(CCVars.ToggleWalk); var isStaticStorageUISame = StaticStorageUI.Pressed == _cfg.GetCVar(CCVars.StaticStorageUI); @@ -170,6 +181,7 @@ namespace Content.Client.Options.UI.Tabs isEnableColorNameSame && isColorblindFriendly && isReducedMotionSame && + isChatWindowOpacitySame && isScreenShakeIntensitySame && // isToggleWalkSame && isStaticStorageUISame; diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index 2c7a1873a3..a589abb83a 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -45,6 +45,7 @@ namespace Content.Client.Stylesheets public const string StyleClassBorderedWindowPanel = "BorderedWindowPanel"; public const string StyleClassInventorySlotBackground = "InventorySlotBackground"; public const string StyleClassHandSlotHighlight = "HandSlotHighlight"; + public const string StyleClassChatPanel = "ChatPanel"; public const string StyleClassChatSubPanel = "ChatSubPanel"; public const string StyleClassTransparentBorderedWindowPanel = "TransparentBorderedWindowPanel"; public const string StyleClassHotbarPanel = "HotbarPanel"; @@ -144,6 +145,8 @@ namespace Content.Client.Stylesheets public const string StyleClassButtonColorRed = "ButtonColorRed"; public const string StyleClassButtonColorGreen = "ButtonColorGreen"; + public static readonly Color ChatBackgroundColor = Color.FromHex("#25252ADD"); + public override Stylesheet Stylesheet { get; } public StyleNano(IResourceCache resCache) : base(resCache) @@ -346,12 +349,16 @@ namespace Content.Client.Stylesheets lineEdit.SetPatchMargin(StyleBox.Margin.All, 3); lineEdit.SetContentMarginOverride(StyleBox.Margin.Horizontal, 5); - var chatSubBGTex = resCache.GetTexture("/Textures/Interface/Nano/chat_sub_background.png"); - var chatSubBG = new StyleBoxTexture + var chatBg = new StyleBoxFlat { - Texture = chatSubBGTex, + BackgroundColor = ChatBackgroundColor }; - chatSubBG.SetPatchMargin(StyleBox.Margin.All, 2); + + var chatSubBg = new StyleBoxFlat + { + BackgroundColor = ChatBackgroundColor, + }; + chatSubBg.SetContentMarginOverride(StyleBox.Margin.All, 2); var actionSearchBoxTex = resCache.GetTexture("/Textures/Interface/Nano/black_panel_dark_thin_border.png"); var actionSearchBox = new StyleBoxTexture @@ -850,6 +857,13 @@ namespace Content.Client.Stylesheets Element().Pseudo(TextEdit.StylePseudoClassPlaceholder) .Prop("font-color", Color.Gray), + // chat subpanels (chat lineedit backing, popup backings) + new StyleRule(new SelectorElement(typeof(PanelContainer), new[] {StyleClassChatPanel}, null, null), + new[] + { + new StyleProperty(PanelContainer.StylePropertyPanel, chatBg), + }), + // Chat lineedit - we don't actually draw a stylebox around the lineedit itself, we put it around the // input + other buttons, so we must clear the default stylebox new StyleRule(new SelectorElement(typeof(LineEdit), new[] {StyleClassChatLineEdit}, null, null), @@ -858,13 +872,6 @@ namespace Content.Client.Stylesheets new StyleProperty(LineEdit.StylePropertyStyleBox, new StyleBoxEmpty()), }), - // chat subpanels (chat lineedit backing, popup backings) - new StyleRule(new SelectorElement(typeof(PanelContainer), new[] {StyleClassChatSubPanel}, null, null), - new[] - { - new StyleProperty(PanelContainer.StylePropertyPanel, chatSubBG), - }), - // Action searchbox lineedit new StyleRule(new SelectorElement(typeof(LineEdit), new[] {StyleClassActionSearchBox}, null, null), new[] diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs index ac0ea5335e..907268295c 100644 --- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs +++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs @@ -9,6 +9,7 @@ using Content.Client.Chat.UI; using Content.Client.Examine; using Content.Client.Gameplay; using Content.Client.Ghost; +using Content.Client.Stylesheets; using Content.Client.UserInterface.Screens; using Content.Client.UserInterface.Systems.Chat.Widgets; using Content.Client.UserInterface.Systems.Gameplay; @@ -54,7 +55,6 @@ public sealed class ChatUIController : UIController [Dependency] private readonly IStateManager _state = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IReplayRecordingManager _replayRecording = default!; - [Dependency] private readonly IConfigurationManager _cfg = default!; [UISystemDependency] private readonly ExamineSystem? _examine = default; [UISystemDependency] private readonly GhostSystem? _ghost = default; @@ -179,8 +179,8 @@ public sealed class ChatUIController : UIController _net.RegisterNetMessage(OnChatMessage); _net.RegisterNetMessage(OnDeleteChatMessagesBy); SubscribeNetworkEvent(OnDamageForceSay); - _cfg.OnValueChanged(CCVars.ChatEnableColorName, (value) => { _chatNameColorsEnabled = value; }); - _chatNameColorsEnabled = _cfg.GetCVar(CCVars.ChatEnableColorName); + _config.OnValueChanged(CCVars.ChatEnableColorName, (value) => { _chatNameColorsEnabled = value; }); + _chatNameColorsEnabled = _config.GetCVar(CCVars.ChatEnableColorName); _speechBubbleRoot = new LayoutContainer(); @@ -232,6 +232,9 @@ public sealed class ChatUIController : UIController { _chatNameColors[i] = nameColors[i].ToHex(); } + + _config.OnValueChanged(CCVars.ChatWindowOpacity, OnChatWindowOpacityChanged); + } public void OnScreenLoad() @@ -240,6 +243,8 @@ public sealed class ChatUIController : UIController var viewportContainer = UIManager.ActiveScreen!.FindControl("ViewportContainer"); SetSpeechBubbleRoot(viewportContainer); + + SetChatWindowOpacity(_config.GetCVar(CCVars.ChatWindowOpacity)); } public void OnScreenUnload() @@ -247,6 +252,34 @@ public sealed class ChatUIController : UIController SetMainChat(false); } + private void OnChatWindowOpacityChanged(float opacity) + { + SetChatWindowOpacity(opacity); + } + + private void SetChatWindowOpacity(float opacity) + { + var chatBox = UIManager.ActiveScreen?.GetWidget() ?? UIManager.ActiveScreen?.GetWidget(); + + var panel = chatBox?.ChatWindowPanel; + if (panel is null) + return; + + Color color; + if (panel.PanelOverride is StyleBoxFlat styleBoxFlat) + color = styleBoxFlat.BackgroundColor; + else if (panel.TryGetStyleProperty(PanelContainer.StylePropertyPanel, out var style) + && style is StyleBoxFlat propStyleBoxFlat) + color = propStyleBoxFlat.BackgroundColor; + else + color = StyleNano.ChatBackgroundColor; + + panel.PanelOverride = new StyleBoxFlat + { + BackgroundColor = color.WithAlpha(opacity) + }; + } + public void SetMainChat(bool setting) { if (UIManager.ActiveScreen == null) @@ -770,7 +803,7 @@ public sealed class ChatUIController : UIController ProcessChatMessage(msg); if ((msg.Channel & ChatChannel.AdminRelated) == 0 || - _cfg.GetCVar(CCVars.ReplayRecordAdminChat)) + _config.GetCVar(CCVars.ReplayRecordAdminChat)) { _replayRecording.RecordClientMessage(msg); } @@ -830,7 +863,7 @@ public sealed class ChatUIController : UIController break; case ChatChannel.LOOC: - if (_cfg.GetCVar(CCVars.LoocAboveHeadShow)) + if (_config.GetCVar(CCVars.LoocAboveHeadShow)) AddSpeechBubble(msg, SpeechBubble.SpeechType.Looc); break; } diff --git a/Content.Client/UserInterface/Systems/Chat/Controls/ChatInputBox.cs b/Content.Client/UserInterface/Systems/Chat/Controls/ChatInputBox.xaml.cs similarity index 95% rename from Content.Client/UserInterface/Systems/Chat/Controls/ChatInputBox.cs rename to Content.Client/UserInterface/Systems/Chat/Controls/ChatInputBox.xaml.cs index 843fd46c1a..0326664bd6 100644 --- a/Content.Client/UserInterface/Systems/Chat/Controls/ChatInputBox.cs +++ b/Content.Client/UserInterface/Systems/Chat/Controls/ChatInputBox.xaml.cs @@ -1,4 +1,5 @@ -using Content.Shared.Chat; +using Content.Client.Stylesheets; +using Content.Shared.Chat; using Content.Shared.Input; using Robust.Client.UserInterface.Controls; @@ -44,6 +45,7 @@ public class ChatInputBox : PanelContainer StyleClasses = {"chatFilterOptionButton"} }; Container.AddChild(FilterButton); + AddStyleClass(StyleNano.StyleClassChatSubPanel); ChannelSelector.OnChannelSelect += UpdateActiveChannel; } diff --git a/Content.Client/UserInterface/Systems/Chat/Widgets/ChatBox.xaml b/Content.Client/UserInterface/Systems/Chat/Widgets/ChatBox.xaml index 090041fa93..36cdce8598 100644 --- a/Content.Client/UserInterface/Systems/Chat/Widgets/ChatBox.xaml +++ b/Content.Client/UserInterface/Systems/Chat/Widgets/ChatBox.xaml @@ -7,11 +7,8 @@ HorizontalExpand="True" VerticalExpand="True" MinSize="465 225"> - - - - - + diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 51f782991e..82d1fdd14a 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1580,6 +1580,13 @@ namespace Content.Shared.CCVar * Accessibility */ + /// + /// Chat window opacity slider, controlling the alpha of the chat window background. + /// Goes from to 0 (completely transparent) to 1 (completely opaque) + /// + public static readonly CVarDef ChatWindowOpacity = + CVarDef.Create("accessibility.chat_window_transparency", 0.85f, CVar.CLIENTONLY | CVar.ARCHIVE); + /// /// Toggle for visual effects that may potentially cause motion sickness. /// Where reasonable, effects affected by this CVar should use an alternate effect. diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index ff56d54274..67d09c9012 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -48,6 +48,8 @@ ui-options-fancy-name-background = Add background to speech bubble names ui-options-enable-color-name = Add colors to character names ui-options-colorblind-friendly = Colorblind friendly mode ui-options-reduced-motion = Reduce motion of visual effects +ui-options-chat-window-opacity = Chat window opacity +ui-options-chat-window-opacity-percent = { TOSTRING($opacity, "P0") } ui-options-screen-shake-intensity = Screen shake intensity ui-options-screen-shake-percent = { TOSTRING($intensity, "P0") } ui-options-vsync = VSync From eace2378e73ca68ebc5ab607ccb9ba6bdcf3e310 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 20:50:07 +0000 Subject: [PATCH 099/206] 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 d901a49abd..de9f27a3d5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Add title2.ogg to space ambience tracks. - type: Tweak - id: 5788 - time: '2024-01-25T13:59:49.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24501 - author: Tayrtahn changes: - message: Glued mobs can no longer struggle free from their captor's hands. @@ -3810,3 +3803,10 @@ id: 6287 time: '2024-04-01T08:29:13.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/24683 +- author: Sk1tch + changes: + - message: Added chat window opacity slider to options. + type: Add + id: 6288 + time: '2024-04-01T20:48:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/24990 From 7464d8284c5e18effe277f861e734736ccc906ee Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Tue, 2 Apr 2024 00:00:10 +0300 Subject: [PATCH 100/206] Infinity books (#25840) * setup text data * roundstart reshuffling keywords with gibberish words * saved data categorized * add book with hints * start redrawing books * +4 book design * +books +random visual upgrade * finish first file * finish lore file * finish with books.rsi now authorbooks.rsi... * aurora! and some fix * nuke author books * speelbuke update * finish respriting work * fix scientist guide visual * setup datasets * setup stupid funny random story * restore author books, upgrade hint generation * add variety to story generator * add learning system * minor textgen edit * file restruct, hint count variation * more restruct * more renaming add basis learning system logic. Spears locked for special book for test. * nuke all systems, for splitting PR gods * typo fix * update migration with deleted books * add random story books to maint * Update construction-system.ftl * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: Hrosts <35345601+Hrosts@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> * typo fix * interchangeably * final * Update Resources/Prototypes/Datasets/Names/books.yml Co-authored-by: Hrosts <35345601+Hrosts@users.noreply.github.com> * "." * Update Content.Server/Paper/PaperRandomStorySystem.cs Co-authored-by: Hrosts <35345601+Hrosts@users.noreply.github.com> * Ubazer fix * inadequate * localized * Update meta.json * fuck merge conflicts * fix jani book --------- Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Co-authored-by: Hrosts <35345601+Hrosts@users.noreply.github.com> --- .../Paper/PaperRandomStoryComponent.cs | 14 + .../Paper/PaperRandomStorySystem.cs | 29 ++ .../RandomMetadata/RandomMetadataSystem.cs | 6 +- .../Prototypes/ConstructionPrototype.cs | 2 +- .../Locale/en-US/paper/story-generation.ftl | 244 ++++++++++++ .../Catalog/Cargo/cargo_service.yml | 4 +- .../Catalog/Fills/Books/bookshelf.yml | 158 +++++--- .../Prototypes/Catalog/Fills/Books/lore.yml | 122 ------ .../Prototypes/Catalog/Fills/Lockers/misc.yml | 2 + .../Prototypes/Datasets/story_generation.yml | 266 +++++++++++++ .../Entities/Objects/Devices/cartridges.yml | 2 +- .../Entities/Objects/Magic/books.yml | 96 ++++- .../Entities/Objects/Misc/books.yml | 329 +++++++++++---- .../{authorbooks.yml => books_author.yml} | 374 +++++++++++++++--- .../Prototypes/Entities/Stations/base.yml | 2 +- .../Magic/spellbooks.rsi/bookfireball.png | Bin 652 -> 0 bytes .../Magic/spellbooks.rsi/bookforcewall.png | Bin 532 -> 0 bytes .../Magic/spellbooks.rsi/bookknock.png | Bin 693 -> 0 bytes .../Objects/Magic/spellbooks.rsi/meta.json | 47 --- .../Magic/spellbooks.rsi/spellbook.png | Bin 743 -> 0 bytes .../Misc/authorbooks.rsi/book_aurora.png | Bin 358 -> 0 bytes .../Misc/authorbooks.rsi/book_cafe.png | Bin 517 -> 0 bytes .../Misc/authorbooks.rsi/book_earth.png | Bin 498 -> 0 bytes .../authorbooks.rsi/book_ian_antarctica.png | Bin 756 -> 0 bytes .../Misc/authorbooks.rsi/book_ian_arctic.png | Bin 531 -> 0 bytes .../Misc/authorbooks.rsi/book_ian_city.png | Bin 538 -> 0 bytes .../Misc/authorbooks.rsi/book_ian_desert.png | Bin 557 -> 0 bytes .../authorbooks.rsi/book_ian_mountain.png | Bin 603 -> 0 bytes .../Misc/authorbooks.rsi/book_ian_ocean.png | Bin 542 -> 0 bytes .../Misc/authorbooks.rsi/book_ian_ranch.png | Bin 530 -> 0 bytes .../Misc/authorbooks.rsi/book_ian_wolfpup.png | Bin 552 -> 0 bytes .../Misc/authorbooks.rsi/book_journ_mount.png | Bin 445 -> 0 bytes .../Objects/Misc/authorbooks.rsi/book_map.png | Bin 379 -> 0 bytes .../Misc/authorbooks.rsi/book_medical.png | Bin 356 -> 0 bytes .../Misc/authorbooks.rsi/book_morgue.png | Bin 630 -> 0 bytes .../Misc/authorbooks.rsi/book_names.png | Bin 317 -> 0 bytes .../authorbooks.rsi/book_narsie_legend.png | Bin 570 -> 0 bytes .../Misc/authorbooks.rsi/book_possum.png | Bin 468 -> 0 bytes .../Misc/authorbooks.rsi/book_rufus.png | Bin 410 -> 0 bytes .../Misc/authorbooks.rsi/book_scmmd.png | Bin 452 -> 0 bytes .../Misc/authorbooks.rsi/book_scpz.png | Bin 438 -> 0 bytes .../Misc/authorbooks.rsi/book_scsss.png | Bin 351 -> 0 bytes .../Misc/authorbooks.rsi/book_struck.png | Bin 480 -> 0 bytes .../Objects/Misc/authorbooks.rsi/book_sun.png | Bin 643 -> 0 bytes .../Misc/authorbooks.rsi/book_temple.png | Bin 553 -> 0 bytes .../Misc/authorbooks.rsi/book_truth.png | Bin 556 -> 0 bytes .../Misc/authorbooks.rsi/book_watched.png | Bin 421 -> 0 bytes .../Misc/authorbooks.rsi/book_world.png | Bin 526 -> 0 bytes .../Objects/Misc/authorbooks.rsi/meta.json | 95 ----- .../Textures/Objects/Misc/books.rsi/book0.png | Bin 593 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book1.png | Bin 802 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book2.png | Bin 270 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book3.png | Bin 265 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book4.png | Bin 266 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book5.png | Bin 255 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book6.png | Bin 266 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book7.png | Bin 341 -> 0 bytes .../Textures/Objects/Misc/books.rsi/book8.png | Bin 289 -> 0 bytes .../Objects/Misc/books.rsi/book_bar.png | Bin 371 -> 0 bytes .../Misc/books.rsi/book_boneworking.png | Bin 687 -> 0 bytes .../Objects/Misc/books.rsi/book_borg.png | Bin 515 -> 0 bytes .../Objects/Misc/books.rsi/book_chemistry.png | Bin 360 -> 0 bytes .../Objects/Misc/books.rsi/book_cloning.png | Bin 352 -> 0 bytes .../Objects/Misc/books.rsi/book_cooking.png | Bin 500 -> 0 bytes .../Misc/books.rsi/book_demonomicon.png | Bin 1015 -> 0 bytes .../Objects/Misc/books.rsi/book_detective.png | Bin 396 -> 0 bytes .../Misc/books.rsi/book_engineering.png | Bin 585 -> 0 bytes .../Misc/books.rsi/book_engineering2.png | Bin 672 -> 0 bytes .../Objects/Misc/books.rsi/book_fish.png | Bin 514 -> 0 bytes .../Objects/Misc/books.rsi/book_hacking.png | Bin 487 -> 0 bytes .../books.rsi/book_hydroponics_pod_people.png | Bin 593 -> 0 bytes .../Objects/Misc/books.rsi/book_icon.png | Bin 0 -> 652 bytes .../Misc/books.rsi/book_infections.png | Bin 427 -> 0 bytes .../Objects/Misc/books.rsi/book_medical.png | Bin 361 -> 0 bytes .../Objects/Misc/books.rsi/book_nuclear.png | Bin 809 -> 0 bytes .../Objects/Misc/books.rsi/book_origami.png | Bin 376 -> 0 bytes .../books.rsi/book_particle_accelerator.png | Bin 402 -> 0 bytes .../Objects/Misc/books.rsi/book_science.png | Bin 291 -> 0 bytes .../Objects/Misc/books.rsi/book_security.png | Bin 319 -> 0 bytes .../Objects/Misc/books.rsi/book_space_law.png | Bin 434 -> 0 bytes .../Objects/Misc/books.rsi/cover_base.png | Bin 0 -> 288 bytes .../Objects/Misc/books.rsi/cover_old.png | Bin 0 -> 578 bytes .../Objects/Misc/books.rsi/cover_strong.png | Bin 0 -> 470 bytes .../Objects/Misc/books.rsi/decor_bottom.png | Bin 0 -> 220 bytes .../Objects/Misc/books.rsi/decor_diagonal.png | Bin 0 -> 246 bytes .../Objects/Misc/books.rsi/decor_middle.png | Bin 0 -> 173 bytes .../Objects/Misc/books.rsi/decor_spine.png | Bin 0 -> 195 bytes .../Misc/books.rsi/decor_vertical_middle.png | Bin 0 -> 196 bytes .../Objects/Misc/books.rsi/decor_wingette.png | Bin 0 -> 179 bytes .../Misc/books.rsi/decor_wingette_circle.png | Bin 0 -> 213 bytes .../Misc/books.rsi/decor_wingette_flat.png | Bin 0 -> 138 bytes .../Misc/books.rsi/detail_bookmark.png | Bin 0 -> 169 bytes .../Objects/Misc/books.rsi/detail_rivets.png | Bin 0 -> 142 bytes .../Objects/Misc/books.rsi/icon_apple.png | Bin 0 -> 218 bytes .../Objects/Misc/books.rsi/icon_atmos.png | Bin 0 -> 246 bytes .../Objects/Misc/books.rsi/icon_aurora.png | Bin 0 -> 248 bytes .../Objects/Misc/books.rsi/icon_banana.png | Bin 0 -> 193 bytes .../Objects/Misc/books.rsi/icon_bar.png | Bin 0 -> 218 bytes .../Objects/Misc/books.rsi/icon_biohazard.png | Bin 0 -> 179 bytes .../Objects/Misc/books.rsi/icon_borg.png | Bin 0 -> 293 bytes .../Objects/Misc/books.rsi/icon_briefcase.png | Bin 0 -> 194 bytes .../Objects/Misc/books.rsi/icon_bucket.png | Bin 0 -> 212 bytes .../Objects/Misc/books.rsi/icon_cabbage.png | Bin 0 -> 439 bytes .../Objects/Misc/books.rsi/icon_chemical.png | Bin 0 -> 218 bytes .../Objects/Misc/books.rsi/icon_corner.png | Bin 0 -> 137 bytes .../Objects/Misc/books.rsi/icon_diamond.png | Bin 0 -> 193 bytes .../Objects/Misc/books.rsi/icon_dna.png | Bin 0 -> 163 bytes .../Objects/Misc/books.rsi/icon_eye.png | Bin 0 -> 172 bytes .../Objects/Misc/books.rsi/icon_fish.png | Bin 0 -> 342 bytes .../Objects/Misc/books.rsi/icon_glow.png | Bin 0 -> 230 bytes .../Objects/Misc/books.rsi/icon_hacking.png | Bin 0 -> 306 bytes .../Objects/Misc/books.rsi/icon_ian.png | Bin 0 -> 390 bytes .../Objects/Misc/books.rsi/icon_law.png | Bin 0 -> 240 bytes .../Objects/Misc/books.rsi/icon_letter_N.png | Bin 0 -> 164 bytes .../Objects/Misc/books.rsi/icon_letter_P.png | Bin 0 -> 179 bytes .../Objects/Misc/books.rsi/icon_lightning.png | Bin 0 -> 181 bytes .../Objects/Misc/books.rsi/icon_magic.png | Bin 0 -> 184 bytes .../Misc/books.rsi/icon_magic_fireball.png | Bin 0 -> 342 bytes .../Misc/books.rsi/icon_magic_forcewall.png | Bin 0 -> 334 bytes .../Misc/books.rsi/icon_magic_knock.png | Bin 0 -> 368 bytes .../Objects/Misc/books.rsi/icon_magnifier.png | Bin 0 -> 266 bytes .../Objects/Misc/books.rsi/icon_medical.png | Bin 0 -> 180 bytes .../Misc/books.rsi/icon_medical_cross.png | Bin 0 -> 215 bytes .../Objects/Misc/books.rsi/icon_mount.png | Bin 0 -> 311 bytes .../Objects/Misc/books.rsi/icon_nuclear.png | Bin 0 -> 316 bytes .../Objects/Misc/books.rsi/icon_origami.png | Bin 0 -> 215 bytes .../Misc/books.rsi/icon_pentagramm.png | Bin 0 -> 201 bytes .../Objects/Misc/books.rsi/icon_planet.png | Bin 0 -> 311 bytes .../Objects/Misc/books.rsi/icon_possum.png | Bin 0 -> 337 bytes .../Objects/Misc/books.rsi/icon_question.png | Bin 0 -> 256 bytes .../Objects/Misc/books.rsi/icon_scmmd.png | Bin 0 -> 280 bytes .../Objects/Misc/books.rsi/icon_skull.png | Bin 0 -> 270 bytes .../Objects/Misc/books.rsi/icon_stars.png | Bin 0 -> 181 bytes .../Objects/Misc/books.rsi/icon_stars2.png | Bin 0 -> 160 bytes .../Objects/Misc/books.rsi/icon_stunbaton.png | Bin 0 -> 183 bytes .../Objects/Misc/books.rsi/icon_temple.png | Bin 0 -> 381 bytes .../Objects/Misc/books.rsi/icon_text.png | Bin 0 -> 182 bytes .../Objects/Misc/books.rsi/icon_text2.png | Bin 0 -> 167 bytes .../Objects/Misc/books.rsi/icon_text3.png | Bin 0 -> 160 bytes .../Objects/Misc/books.rsi/icon_time.png | Bin 0 -> 205 bytes .../Objects/Misc/books.rsi/icon_tree.png | Bin 0 -> 417 bytes .../Objects/Misc/books.rsi/icon_wrench.png | Bin 0 -> 473 bytes .../Textures/Objects/Misc/books.rsi/meta.json | 202 ++++++++-- .../Objects/Misc/books.rsi/overlay_blood.png | Bin 0 -> 335 bytes .../Objects/Misc/books.rsi/overlay_dirt.png | Bin 0 -> 608 bytes .../Objects/Misc/books.rsi/overlay_null.png | Bin 0 -> 96 bytes .../Textures/Objects/Misc/books.rsi/paper.png | Bin 0 -> 327 bytes .../Objects/Misc/books.rsi/paper_blood.png | Bin 0 -> 686 bytes Resources/migration.yml | 15 +- 149 files changed, 1476 insertions(+), 533 deletions(-) create mode 100644 Content.Server/Paper/PaperRandomStoryComponent.cs create mode 100644 Content.Server/Paper/PaperRandomStorySystem.cs create mode 100644 Resources/Locale/en-US/paper/story-generation.ftl delete mode 100644 Resources/Prototypes/Catalog/Fills/Books/lore.yml create mode 100644 Resources/Prototypes/Datasets/story_generation.yml rename Resources/Prototypes/Entities/Objects/Misc/{authorbooks.yml => books_author.yml} (68%) delete mode 100644 Resources/Textures/Objects/Magic/spellbooks.rsi/bookfireball.png delete mode 100644 Resources/Textures/Objects/Magic/spellbooks.rsi/bookforcewall.png delete mode 100644 Resources/Textures/Objects/Magic/spellbooks.rsi/bookknock.png delete mode 100644 Resources/Textures/Objects/Magic/spellbooks.rsi/meta.json delete mode 100644 Resources/Textures/Objects/Magic/spellbooks.rsi/spellbook.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_aurora.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_cafe.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_earth.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_antarctica.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_arctic.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_city.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_desert.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_mountain.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_ocean.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_ranch.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_wolfpup.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_journ_mount.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_map.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_medical.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_morgue.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_names.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_narsie_legend.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_possum.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_rufus.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_scmmd.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_scpz.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_scsss.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_struck.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_sun.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_temple.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_truth.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_watched.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/book_world.png delete mode 100644 Resources/Textures/Objects/Misc/authorbooks.rsi/meta.json delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book0.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book1.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book2.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book3.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book4.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book5.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book6.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book7.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book8.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_bar.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_boneworking.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_borg.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_chemistry.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_cloning.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_cooking.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_demonomicon.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_detective.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_engineering.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_engineering2.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_fish.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_hacking.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_hydroponics_pod_people.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_icon.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_infections.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_medical.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_nuclear.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_origami.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_particle_accelerator.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_science.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_security.png delete mode 100644 Resources/Textures/Objects/Misc/books.rsi/book_space_law.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/cover_base.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/cover_old.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/cover_strong.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_bottom.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_diagonal.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_middle.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_spine.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_vertical_middle.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_wingette.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_wingette_circle.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/decor_wingette_flat.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/detail_bookmark.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/detail_rivets.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_apple.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_atmos.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_aurora.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_banana.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_bar.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_biohazard.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_borg.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_briefcase.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_bucket.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_cabbage.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_chemical.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_corner.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_diamond.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_dna.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_eye.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_fish.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_glow.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_hacking.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_ian.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_law.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_letter_N.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_letter_P.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_lightning.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_magic.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_magic_fireball.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_magic_forcewall.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_magic_knock.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_magnifier.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_medical.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_medical_cross.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_mount.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_nuclear.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_origami.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_pentagramm.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_planet.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_possum.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_question.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_scmmd.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_skull.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_stars.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_stars2.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_stunbaton.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_temple.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_text.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_text2.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_text3.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_time.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_tree.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/icon_wrench.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/overlay_blood.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/overlay_dirt.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/overlay_null.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/paper.png create mode 100644 Resources/Textures/Objects/Misc/books.rsi/paper_blood.png diff --git a/Content.Server/Paper/PaperRandomStoryComponent.cs b/Content.Server/Paper/PaperRandomStoryComponent.cs new file mode 100644 index 0000000000..7c5744f087 --- /dev/null +++ b/Content.Server/Paper/PaperRandomStoryComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Server.Paper; + +/// +/// Adds randomly generated stories to Paper component +/// +[RegisterComponent, Access(typeof(PaperRandomStorySystem))] +public sealed partial class PaperRandomStoryComponent : Component +{ + [DataField] + public List? StorySegments; + + [DataField] + public string StorySeparator = " "; +} diff --git a/Content.Server/Paper/PaperRandomStorySystem.cs b/Content.Server/Paper/PaperRandomStorySystem.cs new file mode 100644 index 0000000000..e7712009c2 --- /dev/null +++ b/Content.Server/Paper/PaperRandomStorySystem.cs @@ -0,0 +1,29 @@ +using Content.Server.RandomMetadata; + +namespace Content.Server.Paper; + +public sealed class PaperRandomStorySystem : EntitySystem +{ + + [Dependency] private readonly RandomMetadataSystem _randomMeta = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapinit); + } + + private void OnMapinit(Entity paperStory, ref MapInitEvent ev) + { + if (!TryComp(paperStory, out var paper)) + return; + + if (paperStory.Comp.StorySegments == null) + return; + + var story = _randomMeta.GetRandomFromSegments(paperStory.Comp.StorySegments, paperStory.Comp.StorySeparator); + + paper.Content += $"\n{story}"; + } +} diff --git a/Content.Server/RandomMetadata/RandomMetadataSystem.cs b/Content.Server/RandomMetadata/RandomMetadataSystem.cs index ebec4d5249..c088d57fd9 100644 --- a/Content.Server/RandomMetadata/RandomMetadataSystem.cs +++ b/Content.Server/RandomMetadata/RandomMetadataSystem.cs @@ -1,4 +1,4 @@ -using Content.Shared.Dataset; +using Content.Shared.Dataset; using JetBrains.Annotations; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -48,8 +48,8 @@ public sealed class RandomMetadataSystem : EntitySystem foreach (var segment in segments) { outputSegments.Add(_prototype.TryIndex(segment, out var proto) - ? _random.Pick(proto.Values) - : segment); + ? Loc.GetString(_random.Pick(proto.Values)) + : Loc.GetString(segment)); } return string.Join(separator, outputSegments); } diff --git a/Content.Shared/Construction/Prototypes/ConstructionPrototype.cs b/Content.Shared/Construction/Prototypes/ConstructionPrototype.cs index e9863f8364..a97b045cd8 100644 --- a/Content.Shared/Construction/Prototypes/ConstructionPrototype.cs +++ b/Content.Shared/Construction/Prototypes/ConstructionPrototype.cs @@ -1,4 +1,4 @@ -using Content.Shared.Construction.Conditions; +using Content.Shared.Construction.Conditions; using Content.Shared.Whitelist; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; diff --git a/Resources/Locale/en-US/paper/story-generation.ftl b/Resources/Locale/en-US/paper/story-generation.ftl new file mode 100644 index 0000000000..bcd1c8901e --- /dev/null +++ b/Resources/Locale/en-US/paper/story-generation.ftl @@ -0,0 +1,244 @@ +story-gen-book-type1 = book +story-gen-book-type2 = folio +story-gen-book-type3 = collection +story-gen-book-type4 = notes +story-gen-book-type5 = manuscript +story-gen-book-type6 = records +story-gen-book-type7 = tome +story-gen-book-type8 = journal +story-gen-book-type9 = archives +story-gen-book-type10= codex +story-gen-book-type11= memories +story-gen-book-type12= compendium + +story-gen-book-genre1 = work of crime fiction +story-gen-book-genre2 = comedy +story-gen-book-genre3 = horror story +story-gen-book-genre4 = poem +story-gen-book-genre5 = novella +story-gen-book-genre6 = chronicle +story-gen-book-genre7 = work of science-fiction +story-gen-book-genre8 = fantasy story +story-gen-book-genre9 = romance +story-gen-book-genre10= thriller +story-gen-book-genre11= work of historical fiction +story-gen-book-genre12= biography +story-gen-book-genre13= adventure story +story-gen-book-genre14= drama + +story-gen-book-appearance1 = ancient +story-gen-book-appearance2 = shabby +story-gen-book-appearance3 = dirty +story-gen-book-appearance4 = unusual +story-gen-book-appearance5 = faded +story-gen-book-appearance6 = nasty +story-gen-book-appearance7 = dusty +story-gen-book-appearance8 = scary +story-gen-book-appearance9 = bloody +story-gen-book-appearance10= bright +story-gen-book-appearance11= dubious +story-gen-book-appearance12= intriguing +story-gen-book-appearance13= ugly +story-gen-book-appearance14= crooked +story-gen-book-appearance15= crumpled +story-gen-book-appearance16= dirty +story-gen-book-appearance17= elegant +story-gen-book-appearance18= ornate +story-gen-book-appearance19= weathered +story-gen-book-appearance20= chrisp +story-gen-book-appearance21= lavish +story-gen-book-appearance22= tattered +story-gen-book-appearance23= polished +story-gen-book-appearance24= embossed +story-gen-book-appearance25= mismatched +story-gen-book-appearance26= gilded +story-gen-book-appearance27= strange + +story-gen-book-character1 = clown +story-gen-book-character2 = mime +story-gen-book-character3 = reporter +story-gen-book-character4 = butcher +story-gen-book-character5 = bartender +story-gen-book-character6 = janitor +story-gen-book-character7 = engineer +story-gen-book-character8 = scientist +story-gen-book-character9 = guard +story-gen-book-character10 = doctor +story-gen-book-character11 = chemist +story-gen-book-character12 = prisoner +story-gen-book-character13 = researcher +story-gen-book-character14 = trader +story-gen-book-character15 = captain +story-gen-book-character16 = lizard +story-gen-book-character17 = moth +story-gen-book-character18 = diona +story-gen-book-character19 = cat-girl +story-gen-book-character20 = cat +story-gen-book-character21 = corgi +story-gen-book-character22 = dog +story-gen-book-character23 = opossum +story-gen-book-character24 = sloth +story-gen-book-character25 = syndicate agent +story-gen-book-character26 = revenant +story-gen-book-character27 = rat king +story-gen-book-character28 = ninja +story-gen-book-character29 = space dragon +story-gen-book-character30 = revolutionary +story-gen-book-character31 = nuclear operative +story-gen-book-character32 = narsie cultist +story-gen-book-character33 = ratwar cultist +story-gen-book-character34 = greytider +story-gen-book-character35 = arachnid +story-gen-book-character36 = vox +story-gen-book-character37 = dwarf +story-gen-book-character38 = thief +story-gen-book-character39 = wizard +story-gen-book-character40 = slime + +story-gen-book-character-trait1 = stupid +story-gen-book-character-trait2 = smart +story-gen-book-character-trait3 = funny +story-gen-book-character-trait4 = attractive +story-gen-book-character-trait5 = charming +story-gen-book-character-trait6 = nasty +story-gen-book-character-trait7 = dying +story-gen-book-character-trait8 = old +story-gen-book-character-trait9 = young +story-gen-book-character-trait10 = rich +story-gen-book-character-trait11 = poor +story-gen-book-character-trait12 = popular +story-gen-book-character-trait13 = absent-minded +story-gen-book-character-trait14 = stern +story-gen-book-character-trait15 = сharismatic +story-gen-book-character-trait16 = stoic +story-gen-book-character-trait17 = cute +story-gen-book-character-trait18 = dwarven +story-gen-book-character-trait19 = beer-smelling +story-gen-book-character-trait20 = joyful +story-gen-book-character-trait21 = painfully beautiful +story-gen-book-character-trait22 = robotic +story-gen-book-character-trait23 = holographic +story-gen-book-character-trait24 = hysterically laughing + +story-gen-book-event1 = a zombie outbreak +story-gen-book-event2 = a nuclear explosion +story-gen-book-event3 = a mass murder +story-gen-book-event4 = a sudden depressurization +story-gen-book-event5 = a blackout +story-gen-book-event6 = the starvation of the protagonists +story-gen-book-event7 = a wasting illness +story-gen-book-event8 = love at first sight +story-gen-book-event9 = a rush of inspiration +story-gen-book-event10 = the occurrence of some mystical phenomena +story-gen-book-event11 = divine intervention +story-gen-book-event12 = the characters' own selfish motives +story-gen-book-event13 = an unforeseen deception +story-gen-book-event14 = the resurrection of one of these characters from the dead +story-gen-book-event15 = the terrible torture of the protagonist +story-gen-book-event16 = the inadvertent loosing of a gravitational singularity +story-gen-book-event17 = a psychic prediction of future events +story-gen-book-event18 = an antimatter explosion +story-gen-book-event19 = a chance meeting with a cat-girl +story-gen-book-event20 = drinking far too much alcohol +story-gen-book-event21 = eating way too much pizza +story-gen-book-event22 = having a quarrel with a close friend +story-gen-book-event23 = the sudden loss of their home in a fiery blaze +story-gen-book-event24 = the loss of a PDA + +story-gen-book-action1 = share in a kiss with a +story-gen-book-action2 = strangle to death a +story-gen-book-action3 = manage to blow apart a +story-gen-book-action4 = manage to win a game of chess against a +story-gen-book-action5 = narrowly lose a game of chess against a +story-gen-book-action6 = reveal the hidden secrets of a +story-gen-book-action7 = manipulate a +story-gen-book-action8 = sacrifice upon an altar a +story-gen-book-action9 = attend the wedding of a +story-gen-book-action10 = join forces to defeat their common enemy, a +story-gen-book-action11 = are forced to work together to escape a +story-gen-book-action12 = give a valuable gift to + +story-gen-book-action-trait1 = terribly +story-gen-book-action-trait2 = disgustingly +story-gen-book-action-trait3 = marvelously +story-gen-book-action-trait4 = nicely +story-gen-book-action-trait5 = weirdly +story-gen-book-action-trait6 = amusingly +story-gen-book-action-trait7 = fancifully +story-gen-book-action-trait8 = impressively +story-gen-book-action-trait9 = irresponsibly +story-gen-book-action-trait10 = severely +story-gen-book-action-trait11 = ruthlessly +story-gen-book-action-trait12 = playfully +story-gen-book-action-trait13 = thoughtfully + +story-gen-book-location1 = in an underground complex +story-gen-book-location2 = while on an expedition +story-gen-book-location3 = while trapped in outer space +story-gen-book-location4 = while in a news office +story-gen-book-location5 = in a hidden garden +story-gen-book-location6 = in the kitchen of a local restaurant +story-gen-book-location7 = under the counter of the local sports bar +story-gen-book-location8 = in an ancient library +story-gen-book-location9 = while deep in bowels of the space station's maintenance corridors +story-gen-book-location10 = on the bridge of a starship +story-gen-book-location11 = while in a grungy public bathroom +story-gen-book-location12 = while trapped inside a crate +story-gen-book-location13 = while stuck inside a locker +story-gen-book-location14 = while stationed on Barratry +story-gen-book-location15 = while in the hall of rustic church +story-gen-book-location16 = while in a crematorium +story-gen-book-location17 = standing too close to an anomaly +story-gen-book-location18 = while huddling on the evacuation shuttle +story-gen-book-location19 = standing in freshly fallen snow +story-gen-book-location20 = lost in the woods +story-gen-book-location21 = iin the harsh desert +story-gen-book-location22 = worrying about their social media networks +story-gen-book-location23 = atop of a mountain +story-gen-book-location24 = while driving a car +story-gen-book-location25 = in an escape pod +story-gen-book-location26 = while abroad in a fictional country +story-gen-book-location27 = clinging to the wing of an inflight airplane +story-gen-book-location28 = inside a pocket dimension +story-gen-book-location29 = onboard a Wizard Federation shuttle +story-gen-book-location30 = standing atop of a mountain of corpses +story-gen-book-location31 = while psychically projected into their subconscious +story-gen-book-location32 = while trapped in a shadow dimension +story-gen-book-location33 = while trying to escape a destroyed space station +story-gen-book-location34 = while sandwiched between a Tesla ball and a gravitational singularity + +story-gen-book-element1 = The plot +story-gen-book-element2 = The twist +story-gen-book-element3 = The climax +story-gen-book-element4 = The final act +story-gen-book-element5 = The ending +story-gen-book-element6 = The moral of the story +story-gen-book-element7 = The theme of this work +story-gen-book-element8 = The literary style +story-gen-book-element9 = The illustrations + +story-gen-book-element-trait1 = terrifying +story-gen-book-element-trait2 = disgusting +story-gen-book-element-trait3 = wonderful +story-gen-book-element-trait4 = cute +story-gen-book-element-trait5 = boring +story-gen-book-element-trait6 = strange +story-gen-book-element-trait7 = amusing +story-gen-book-element-trait8 = whimsical +story-gen-book-element-trait9 = impressive +story-gen-book-element-trait10 = interesting +story-gen-book-element-trait11 = inadequate +story-gen-book-element-trait12 = sad +story-gen-book-element-trait13 = rather depressing + + + + + + + + + + + + diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_service.yml b/Resources/Prototypes/Catalog/Cargo/cargo_service.yml index f27adb65a4..267f706f3b 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_service.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_service.yml @@ -82,7 +82,7 @@ id: ServiceBooks icon: sprite: Objects/Misc/books.rsi - state: book0 + state: book_icon product: CrateServiceBooks cost: 1000 category: cargoproduct-category-name-service @@ -92,7 +92,7 @@ id: ServiceGuidebooks icon: sprite: Objects/Misc/books.rsi - state: book_engineering2 + state: book_icon product: CrateServiceGuidebooks cost: 1300 category: cargoproduct-category-name-service diff --git a/Resources/Prototypes/Catalog/Fills/Books/bookshelf.yml b/Resources/Prototypes/Catalog/Fills/Books/bookshelf.yml index 48fab5dccc..b52e853008 100644 --- a/Resources/Prototypes/Catalog/Fills/Books/bookshelf.yml +++ b/Resources/Prototypes/Catalog/Fills/Books/bookshelf.yml @@ -5,70 +5,10 @@ components: - type: StorageFill contents: - - id: BookRandom - prob: 0.4 - amount: 1 - maxAmount: 4 - - id: BookNarsieLegend - prob: 0.1 - - id: BookTruth - prob: 0.1 - - id: BookWorld - prob: 0.1 - - id: BookIanAntarctica - prob: 0.1 - - id: BookSlothClownSSS - prob: 0.1 - - id: BookSlothClownPranks - prob: 0.1 - - id: BookSlothClownMMD - prob: 0.1 - - id: BookStruck - prob: 0.1 - - id: BookSun - prob: 0.1 - - id: BookPossum - prob: 0.1 - - id: BookCafe - prob: 0.1 - - id: BookFeather - prob: 0.1 - - id: BookIanLostWolfPup - prob: 0.1 - - id: BookIanRanch - prob: 0.1 - - id: BookIanOcean - prob: 0.1 - - id: BookIanMountain - prob: 0.1 - - id: BookIanCity - prob: 0.1 - - id: BookIanArctic - prob: 0.1 - - id: BookIanDesert - prob: 0.1 - - id: BookNames - prob: 0.1 - - id: BookEarth - prob: 0.1 - - id: BookAurora - prob: 0.1 - - id: BookTemple - prob: 0.1 - - id: BookWatched - prob: 0.1 - - id: BookMedicalOfficer - prob: 0.1 - - id: BookMorgue - prob: 0.1 - - id: BookRufus - prob: 0.1 - - id: BookMap - prob: 0.1 - - id: BookJourney - prob: 0.1 - - id: BookInspiration - prob: 0.1 + - id: BookRandomStory + prob: 0.6 + amount: 2 + maxAmount: 6 - id: BookSpaceEncyclopedia orGroup: BookPool - id: BookTheBookOfControl @@ -95,3 +35,93 @@ orGroup: BookPool - id: BookChemicalCompendium orGroup: BookPool + - id: BookNarsieLegend + prob: 0.1 + orGroup: BookAuthor + - id: BookTruth + prob: 0.1 + orGroup: BookAuthor + - id: BookWorld + prob: 0.1 + orGroup: BookAuthor + - id: BookIanAntarctica + prob: 0.1 + orGroup: BookAuthor + - id: BookSlothClownSSS + prob: 0.1 + orGroup: BookAuthor + - id: BookSlothClownPranks + prob: 0.1 + orGroup: BookAuthor + - id: BookSlothClownMMD + prob: 0.1 + orGroup: BookAuthor + - id: BookStruck + prob: 0.1 + orGroup: BookAuthor + - id: BookSun + prob: 0.1 + orGroup: BookAuthor + - id: BookPossum + prob: 0.1 + orGroup: BookAuthor + - id: BookCafe + prob: 0.1 + orGroup: BookAuthor + - id: BookFeather + prob: 0.1 + orGroup: BookAuthor + - id: BookIanLostWolfPup + prob: 0.1 + orGroup: BookAuthor + - id: BookIanRanch + prob: 0.1 + orGroup: BookAuthor + - id: BookIanOcean + prob: 0.1 + orGroup: BookAuthor + - id: BookIanMountain + prob: 0.1 + orGroup: BookAuthor + - id: BookIanCity + prob: 0.1 + orGroup: BookAuthor + - id: BookIanArctic + prob: 0.1 + orGroup: BookAuthor + - id: BookIanDesert + prob: 0.1 + orGroup: BookAuthor + - id: BookNames + prob: 0.1 + orGroup: BookAuthor + - id: BookEarth + prob: 0.1 + orGroup: BookAuthor + - id: BookAurora + prob: 0.1 + orGroup: BookAuthor + - id: BookTemple + prob: 0.1 + orGroup: BookAuthor + - id: BookWatched + prob: 0.1 + orGroup: BookAuthor + - id: BookMedicalOfficer + prob: 0.1 + orGroup: BookAuthor + - id: BookMorgue + prob: 0.1 + orGroup: BookAuthor + - id: BookRufus + prob: 0.1 + orGroup: BookAuthor + - id: BookMap + prob: 0.1 + orGroup: BookAuthor + - id: BookJourney + prob: 0.1 + orGroup: BookAuthor + - id: BookInspiration + prob: 0.1 + orGroup: BookAuthor diff --git a/Resources/Prototypes/Catalog/Fills/Books/lore.yml b/Resources/Prototypes/Catalog/Fills/Books/lore.yml deleted file mode 100644 index 0fd712d42f..0000000000 --- a/Resources/Prototypes/Catalog/Fills/Books/lore.yml +++ /dev/null @@ -1,122 +0,0 @@ -# ---- Library Salvage Fills ---- - -- type: entity - name: demonomicon - parent: BookBase - id: BookDemonomicon - noSpawn: true - description: 'Who knows what dark spells may be contained in these horrid pages?' - components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book_demonomicon - -- type: entity - name: demonomicon - parent: BookDemonomicon - id: BookDemonomiconRandom - suffix: random - components: - - type: RandomSpawner - prototypes: - - BookDemonomicon1 - - BookDemonomicon2 - - BookDemonomicon3 - offset: 0.1 - -- type: entity - parent: BookDemonomicon - id: BookDemonomicon1 - suffix: 1 - components: - - type: Paper - content: book-text-demonomicon1 - -- type: entity - parent: BookDemonomicon - id: BookDemonomicon2 - suffix: 2 - components: - - type: Paper - content: book-text-demonomicon2 - -- type: entity - parent: BookDemonomicon - id: BookDemonomicon3 - suffix: 3 - components: - - type: Paper - content: book-text-demonomicon3 - -- type: entity - name: pharmaceutical manuscript - parent: BookBase - id: BookChemistryInsane - suffix: library salvage - description: 'You can tell whoever wrote this was off the desoxy HARD.' - components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book_chemistry - - type: Paper - content: book-text-chemistry-insane - -- type: entity - name: botanical textbook - parent: BookBase - id: BookBotanicalTextbook - suffix: library salvage - description: 'Only a couple pages are left.' - components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book_hydroponics_pod_people - - type: Paper - content: book-text-botanics - -- type: entity - parent: BookBase - id: BookGnominomicon - name: gnominomicon - suffix: library salvage - description: You don't like the look of this. Looks - components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book5 - - type: Paper - content: book-text-gnome - -- type: entity - parent: BookBase - id: BookFishing - name: Tales from the Fishbowl - suffix: library salvage - description: This book sucks. - components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book_fish - - type: Paper - content: book-text-fishing - -- type: entity - parent: BookBase - id: BookDetective - name: Strokgraeth Holmes, Dwarf Detective - suffix: library salvage - description: Exciting! Invigorating! This author died after his book career failed. - components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book_detective - - type: Paper - content: book-text-detective - -# ---- End Library Salvage Fills ---- diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index 25078dbe57..d8b6004ec3 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -155,6 +155,8 @@ prob: 0.20 - id: BarberScissors prob: 0.05 + - id: BookRandomStory + prob: 0.1 # Syndicate loot - id: null prob: 0.95 diff --git a/Resources/Prototypes/Datasets/story_generation.yml b/Resources/Prototypes/Datasets/story_generation.yml new file mode 100644 index 0000000000..1083a6acdb --- /dev/null +++ b/Resources/Prototypes/Datasets/story_generation.yml @@ -0,0 +1,266 @@ +- type: dataset + id: book_type + values: + - story-gen-book-type1 + - story-gen-book-type2 + - story-gen-book-type3 + - story-gen-book-type4 + - story-gen-book-type5 + - story-gen-book-type6 + - story-gen-book-type7 + - story-gen-book-type8 + - story-gen-book-type9 + - story-gen-book-type10 + - story-gen-book-type11 + - story-gen-book-type12 + +- type: dataset + id: book_genre + values: + - story-gen-book-genre1 + - story-gen-book-genre2 + - story-gen-book-genre3 + - story-gen-book-genre4 + - story-gen-book-genre5 + - story-gen-book-genre6 + - story-gen-book-genre7 + - story-gen-book-genre8 + - story-gen-book-genre9 + - story-gen-book-genre10 + - story-gen-book-genre11 + - story-gen-book-genre12 + - story-gen-book-genre13 + - story-gen-book-genre14 + +- type: dataset + id: book_hint_appearance + values: + - story-gen-book-appearance1 + - story-gen-book-appearance2 + - story-gen-book-appearance3 + - story-gen-book-appearance4 + - story-gen-book-appearance5 + - story-gen-book-appearance6 + - story-gen-book-appearance7 + - story-gen-book-appearance8 + - story-gen-book-appearance9 + - story-gen-book-appearance10 + - story-gen-book-appearance11 + - story-gen-book-appearance12 + - story-gen-book-appearance13 + - story-gen-book-appearance14 + - story-gen-book-appearance15 + - story-gen-book-appearance16 + - story-gen-book-appearance17 + - story-gen-book-appearance18 + - story-gen-book-appearance19 + - story-gen-book-appearance20 + - story-gen-book-appearance21 + - story-gen-book-appearance22 + - story-gen-book-appearance23 + - story-gen-book-appearance24 + - story-gen-book-appearance25 + - story-gen-book-appearance26 + - story-gen-book-appearance27 + +- type: dataset + id: book_character + values: + - story-gen-book-character1 + - story-gen-book-character2 + - story-gen-book-character3 + - story-gen-book-character4 + - story-gen-book-character5 + - story-gen-book-character6 + - story-gen-book-character7 + - story-gen-book-character8 + - story-gen-book-character9 + - story-gen-book-character10 + - story-gen-book-character11 + - story-gen-book-character12 + - story-gen-book-character13 + - story-gen-book-character14 + - story-gen-book-character15 + - story-gen-book-character16 + - story-gen-book-character17 + - story-gen-book-character18 + - story-gen-book-character19 + - story-gen-book-character20 + - story-gen-book-character21 + - story-gen-book-character22 + - story-gen-book-character23 + - story-gen-book-character24 + - story-gen-book-character25 + - story-gen-book-character26 + - story-gen-book-character27 + - story-gen-book-character28 + - story-gen-book-character29 + - story-gen-book-character30 + - story-gen-book-character31 + - story-gen-book-character32 + - story-gen-book-character33 + - story-gen-book-character34 + - story-gen-book-character35 + - story-gen-book-character36 + - story-gen-book-character37 + - story-gen-book-character38 + - story-gen-book-character39 + - story-gen-book-character40 + +- type: dataset + id: book_character_trait + values: + - story-gen-book-character-trait1 + - story-gen-book-character-trait2 + - story-gen-book-character-trait3 + - story-gen-book-character-trait4 + - story-gen-book-character-trait5 + - story-gen-book-character-trait6 + - story-gen-book-character-trait7 + - story-gen-book-character-trait8 + - story-gen-book-character-trait9 + - story-gen-book-character-trait10 + - story-gen-book-character-trait11 + - story-gen-book-character-trait12 + - story-gen-book-character-trait13 + - story-gen-book-character-trait14 + - story-gen-book-character-trait15 + - story-gen-book-character-trait16 + - story-gen-book-character-trait17 + - story-gen-book-character-trait18 + - story-gen-book-character-trait19 + - story-gen-book-character-trait20 + - story-gen-book-character-trait21 + - story-gen-book-character-trait22 + - story-gen-book-character-trait23 + - story-gen-book-character-trait24 + + +- type: dataset + id: book_event + values: + - story-gen-book-event1 + - story-gen-book-event2 + - story-gen-book-event3 + - story-gen-book-event4 + - story-gen-book-event5 + - story-gen-book-event6 + - story-gen-book-event7 + - story-gen-book-event8 + - story-gen-book-event9 + - story-gen-book-event10 + - story-gen-book-event11 + - story-gen-book-event12 + - story-gen-book-event13 + - story-gen-book-event14 + - story-gen-book-event15 + - story-gen-book-event16 + - story-gen-book-event17 + - story-gen-book-event18 + - story-gen-book-event19 + - story-gen-book-event20 + - story-gen-book-event21 + - story-gen-book-event22 + - story-gen-book-event23 + - story-gen-book-event24 + +- type: dataset + id: book_action + values: + - story-gen-book-action1 + - story-gen-book-action2 + - story-gen-book-action3 + - story-gen-book-action4 + - story-gen-book-action5 + - story-gen-book-action6 + - story-gen-book-action7 + - story-gen-book-action8 + - story-gen-book-action9 + - story-gen-book-action10 + - story-gen-book-action11 + - story-gen-book-action12 + +- type: dataset + id: book_action_trait + values: + - story-gen-book-action-trait1 + - story-gen-book-action-trait2 + - story-gen-book-action-trait3 + - story-gen-book-action-trait4 + - story-gen-book-action-trait5 + - story-gen-book-action-trait6 + - story-gen-book-action-trait7 + - story-gen-book-action-trait8 + - story-gen-book-action-trait9 + - story-gen-book-action-trait10 + - story-gen-book-action-trait11 + - story-gen-book-action-trait12 + - story-gen-book-action-trait13 + +- type: dataset + id: book_location + values: + - story-gen-book-location1 + - story-gen-book-location2 + - story-gen-book-location3 + - story-gen-book-location4 + - story-gen-book-location5 + - story-gen-book-location6 + - story-gen-book-location7 + - story-gen-book-location8 + - story-gen-book-location9 + - story-gen-book-location10 + - story-gen-book-location11 + - story-gen-book-location12 + - story-gen-book-location13 + - story-gen-book-location14 + - story-gen-book-location15 + - story-gen-book-location16 + - story-gen-book-location17 + - story-gen-book-location18 + - story-gen-book-location19 + - story-gen-book-location20 + - story-gen-book-location21 + - story-gen-book-location22 + - story-gen-book-location23 + - story-gen-book-location24 + - story-gen-book-location25 + - story-gen-book-location26 + - story-gen-book-location27 + - story-gen-book-location28 + - story-gen-book-location29 + - story-gen-book-location30 + - story-gen-book-location31 + - story-gen-book-location32 + - story-gen-book-location33 + - story-gen-book-location34 + +- type: dataset + id: book_story_element + values: + - story-gen-book-element1 + - story-gen-book-element2 + - story-gen-book-element3 + - story-gen-book-element4 + - story-gen-book-element5 + - story-gen-book-element6 + - story-gen-book-element7 + - story-gen-book-element8 + - story-gen-book-element9 + +- type: dataset + id: book_story_element_trait + values: + - story-gen-book-element-trait1 + - story-gen-book-element-trait2 + - story-gen-book-element-trait3 + - story-gen-book-element-trait4 + - story-gen-book-element-trait5 + - story-gen-book-element-trait6 + - story-gen-book-element-trait7 + - story-gen-book-element-trait8 + - story-gen-book-element-trait9 + - story-gen-book-element-trait10 + - story-gen-book-element-trait11 + - story-gen-book-element-trait12 + - story-gen-book-element-trait13 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml index ae454e43a2..e523bbe16e 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml @@ -13,7 +13,7 @@ programName: notekeeper-program-name icon: sprite: Objects/Misc/books.rsi - state: book6 + state: book_icon - type: NotekeeperCartridge - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Magic/books.yml b/Resources/Prototypes/Entities/Objects/Magic/books.yml index 89acd9e7da..dfb875f677 100644 --- a/Resources/Prototypes/Entities/Objects/Magic/books.yml +++ b/Resources/Prototypes/Entities/Objects/Magic/books.yml @@ -7,7 +7,13 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_demonomicon + - state: paper_blood + - state: cover_strong + color: "#645a5a" + - state: decor_wingette_flat + color: "#4d0303" + - state: icon_pentagramm + color: "#f7e19f" - type: Spellbook - type: Tag tags: @@ -28,9 +34,19 @@ parent: BaseSpellbook components: - type: Sprite - sprite: Objects/Magic/spellbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: bookforcewall + - state: paper + - state: cover_strong + color: "#366ed6" + - state: decor_vertical_middle + color: "#95ffff" + - state: decor_wingette_circle + color: "#95ffff" + - state: icon_magic_forcewall + shader: unshaded + - state: detail_rivets + color: gold - type: Spellbook spells: ActionForceWall: -1 @@ -41,9 +57,17 @@ parent: BaseSpellbook components: - type: Sprite - sprite: Objects/Magic/spellbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: spellbook + - state: paper + - state: cover_old + color: "#657e9c" + - state: icon_text3 + - state: decor_wingette_circle + color: gold + - state: icon_magic + - state: detail_rivets + color: gold - type: Spellbook spells: ActionBlink: -1 @@ -53,13 +77,23 @@ name: smite spellbook parent: BaseSpellbook components: - - type: Sprite - sprite: Objects/Magic/spellbooks.rsi - layers: - - state: spellbook - - type: Spellbook - spells: - ActionSmite: -1 + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_old + color: "#c42b40" + - state: decor_wingette_circle + color: gold + - state: icon_magic + - state: detail_rivets + color: gold + - state: detail_bookmark + color: red + - state: overlay_blood + - type: Spellbook + spells: + ActionSmite: -1 - type: entity id: KnockSpellbook @@ -67,9 +101,18 @@ parent: BaseSpellbook components: - type: Sprite - sprite: Objects/Magic/spellbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: bookknock + - state: paper + - state: cover_strong + color: "#117045" + - state: decor_wingette_circle + color: gold + - state: icon_magic_knock + - state: detail_rivets + color: gold + - state: detail_bookmark + color: "#98c495" - type: Spellbook spells: ActionKnock: -1 @@ -79,13 +122,24 @@ name: fireball spellbook parent: BaseSpellbook components: - - type: Sprite - sprite: Objects/Magic/spellbooks.rsi - layers: - - state: bookfireball - - type: Spellbook - spells: - ActionFireball: -1 + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_old + color: "#ba5a14" + - state: decor_wingette_circle + color: gold + - state: detail_rivets + color: gold + - state: detail_bookmark + color: "#e89b3c" + - state: overlay_blood + - state: icon_magic_fireball + shader: unshaded + - type: Spellbook + spells: + ActionFireball: -1 - type: entity id: ScrollRunes diff --git a/Resources/Prototypes/Entities/Objects/Misc/books.yml b/Resources/Prototypes/Entities/Objects/Misc/books.yml index ab6beb70af..78f9edc9c5 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/books.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/books.yml @@ -7,8 +7,17 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book0 - map: [ "enum.DamageStateVisualLayers.Base" ] + - state: paper + - state: cover_base + color: "#332d27" + map: [ "cover" ] + - state: decor_wingette + color: "#453f3a" + map: [ "decor" ] + - state: icon_text + map: [ "icon" ] + - state: overlay_null + map: [ "overlay" ] - type: Paper contentSize: 12000 - type: ActivatableUI @@ -35,7 +44,15 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book0 # placeholder(?). if only we have a better sprite that fits this. + - state: paper + - state: cover_base + color: "#0a2a6b" + - state: decor_wingette + color: "#082561" + - state: icon_text + color: gold + - state: icon_planet + color: "#42b6f5" - type: Tag tags: - Book @@ -53,7 +70,15 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book7 + - state: paper + - state: cover_base + color: black + - state: decor_wingette + color: "#bbbbbb" + - state: icon_glow + color: red + - state: icon_corner + color: red - type: Tag tags: - Book @@ -71,7 +96,12 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_bar + - state: paper + - state: cover_base + color: "#004848" + - state: decor_wingette + color: "#006666" + - state: icon_bar - type: Tag tags: - Book @@ -89,7 +119,11 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_cooking + - state: paper + - state: cover_base + color: "#e22541" + - state: decor_wingette + - state: icon_apple - type: Tag tags: - Book @@ -107,7 +141,14 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_hydroponics_pod_people + - state: paper + - state: cover_base + color: "#0e5a24" + - state: decor_wingette + color: "#2fa151" + - state: icon_cabbage + - state: icon_corner + color: gold - type: Tag tags: - Book @@ -125,7 +166,14 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_engineering + - state: paper + - state: cover_base + color: "#6c4718" + - state: decor_wingette + color: "#b5913c" + - state: icon_wrench + - state: icon_corner + color: gold - type: Tag tags: - Book @@ -143,7 +191,12 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_science + - state: paper + - state: cover_base + color: "#542485" + - state: decor_wingette_circle + color: "#be69f0" + - state: icon_dna - type: Tag tags: - Book @@ -161,7 +214,12 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_security + - state: paper + - state: cover_base + color: "#ab1515" + - state: decor_wingette + color: "#e05334" + - state: icon_stunbaton - type: Tag tags: - Book @@ -184,7 +242,11 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book0 # no janitorial book sprite so this is a placeholder + - state: paper + - state: cover_base + color: "#550c82" + - state: decor_wingette + - state: icon_bucket - type: Tag tags: - Book @@ -202,7 +264,15 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book0 # no salvage book sprite so this is a placeholder + - state: paper + - state: cover_base + color: "#52320b" + - state: decor_wingette + color: "#e69a3e" + - state: icon_glow + - state: icon_diamond + - state: icon_text + color: "#fcdf74" - type: Tag tags: - Book @@ -220,7 +290,13 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_medical + - state: paper + - state: cover_base + color: "#cccccc" + - state: decor_wingette + color: "#f7f7f7" + - state: icon_medical + color: "#58abcc" - type: Tag tags: - Book @@ -238,7 +314,15 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_engineering + - state: paper + - state: cover_old + color: "#6c4718" + - state: decor_wingette + color: "#b5913c" + - state: icon_glow + color: red + - state: icon_wrench + - state: overlay_blood - type: Tag tags: - Book @@ -256,7 +340,12 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book_chemistry + - state: paper + - state: cover_base + color: "#2a7b74" + - state: decor_wingette + color: "#2a7b74" + - state: icon_chemical - type: Tag tags: - Book @@ -268,69 +357,120 @@ - type: entity parent: BookBase id: BookRandom - suffix: random + suffix: random visual + description: Each book is unique! What is hidden in this one? components: + - type: RandomMetadata + nameSegments: + - book_hint_appearance + - book_type - type: RandomSprite available: - - enum.DamageStateVisualLayers.Base: - book0: "" - book1: "" - book2: "" - book3: "" - book4: "" - book5: "" - book6: "" - book7: "" - book8: "" + - cover: + cover_base: Sixteen + cover_old: Sixteen + cover_strong: Sixteen + decor: + decor_wingette: Sixteen + decor_wingette_circle: Sixteen + decor_bottom: Sixteen + decor_middle: Sixteen + decor_spine: Sixteen + decor_diagonal: Sixteen + decor_vertical_middle: Sixteen + icon_corner: Sixteen + icon_mount: "" + icon: + icon_biohazard: Sixteen + icon_borg: "" + icon_banana: "" + icon_glow: Sixteen + icon_hacking: "" + icon_law: Sixteen + icon_magnifier: "" + icon_nuclear: "" + icon_time: Sixteen + icon_aurora: Sixteen + icon_briefcase: "" + icon_eye: "" + icon_letter_N: "" + icon_letter_P: "" + icon_lightning: "" + icon_planet: "" + icon_possum: "" + icon_question: Sixteen + icon_scmmd: "" + icon_stars: Sixteen + icon_stars2: Sixteen + icon_temple: Sixteen + icon_tree: "" + icon_pentagramm: Sixteen + icon_fish: "" + icon_origami: "" + icon_skull: "" + icon_text: "" + icon_text2: "" + icon_text3: "" + overlay: + overlay_blood: "" + overlay_dirt: Sixteen + detail_bookmark: Sixteen + detail_rivets: Sixteen + overlay_null: "" - type: entity - parent: BookBase - id: BookEscalation - name: Robert's Rules of Escalation - description: The book is stained with blood. It seems to have been used more as a weapon than reading material. + parent: BookRandom + id: BookRandomStory + suffix: random visual, random story components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book2 - - type: MeleeWeapon - wideAnimationRotation: 180 - damage: - types: - Blunt: 6 - - type: Paper - content: book-text-escalation - -- type: entity - parent: BookBase - id: BookEscalationSecurity - name: "Robert's Rules of Escalation: Security Edition" - description: The book is stained with blood. It seems to have been used more as a weapon than reading material. - components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book2 - - type: MeleeWeapon - wideAnimationRotation: 180 - damage: - types: - Blunt: 6 - - type: Paper - content: book-text-escalation-security - + - type: PaperRandomStory + storySegments: + - "This is a " + - book_genre + - " about a " + - book_character_trait + - " " + - book_character + - " and " + - book_character_trait + - " " + - book_character + - ". Due to " + - book_event + - ", they " + - book_action_trait + - " " + - book_action + - " " + - book_character + - " " + - book_location + - ". \n\n" + - book_story_element + - " is " + - book_story_element_trait + - "." + storySeparator: "" + - type: entity parent: BookBase id: BookAtmosDistro name: "Newton's Guide to Atmos: The Distro" description: There are endless illegible notes scribbled in the margins. Most of the text is covered in handwritten question marks. components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book5 - - type: Paper - content: book-text-atmos-distro + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_base + color: "#366ed6" + - state: decor_wingette + color: "#2739b0" + - state: icon_atmos + - state: icon_corner + color: gold + - type: Paper + content: book-text-atmos-distro - type: entity parent: BookBase @@ -338,12 +478,19 @@ name: "Newton's Guide to Atmos: Waste" description: There are endless illegible notes scribbled in the margins. Most of the text is covered in handwritten question marks. components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book5 - - type: Paper - content: book-text-atmos-waste + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_base + color: "#db233f" + - state: decor_wingette + color: "#ab0730" + - state: icon_atmos + - state: icon_corner + color: gold + - type: Paper + content: book-text-atmos-waste - type: entity parent: BookBase @@ -351,12 +498,19 @@ name: "Newton's Guide to Atmos: Air Alarms" description: There are endless illegible notes scribbled in the margins. Most of the text is covered in handwritten question marks. components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book5 - - type: Paper - content: book-text-atmos-alarms + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_base + color: "#bfb328" + - state: decor_wingette + color: "#9c7c14" + - state: icon_atmos + - state: icon_corner + color: gold + - type: Paper + content: book-text-atmos-alarms - type: entity parent: BookBase @@ -364,9 +518,16 @@ name: "Newton's Guide to Atmos: Vents and More" description: There are endless illegible notes scribbled in the margins. Most of the text is covered in handwritten question marks. components: - - type: Sprite - sprite: Objects/Misc/books.rsi - layers: - - state: book5 - - type: Paper - content: book-text-atmos-vents + - type: Sprite + sprite: Objects/Misc/books.rsi + layers: + - state: paper + - state: cover_base + color: "#3ec78e" + - state: decor_wingette + color: "#28a15a" + - state: icon_atmos + - state: icon_corner + color: gold + - type: Paper + content: book-text-atmos-vents \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Misc/authorbooks.yml b/Resources/Prototypes/Entities/Objects/Misc/books_author.yml similarity index 68% rename from Resources/Prototypes/Entities/Objects/Misc/authorbooks.yml rename to Resources/Prototypes/Entities/Objects/Misc/books_author.yml index 70d984240e..9adb14f4eb 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/authorbooks.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/books_author.yml @@ -5,9 +5,19 @@ description: The book is an old, leather-bound tome with intricate engravings on the cover. The pages are yellowed and fragile with age, with the ink of the text faded in some places. It appears to have been well-read and well-loved, with dog-eared pages and marginalia scrawled in the margins. Despite its aged appearance, the book still exudes a sense of mystical power and wonder, hinting at the secrets and knowledge contained within its pages. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_narsie_legend + - state: paper + - state: cover_old + color: "#a6161d" + - state: decor_bottom + color: "#6e1022" + - state: decor_wingette + color: "#4a101b" + - state: icon_pentagramm + color: "#911129" + - state: detail_bookmark + color: red - type: Paper content: book-text-narsielegend @@ -18,9 +28,18 @@ description: A book exploring the different philosophical perspectives on truth and lying has a worn cover, with creases and marks indicating frequent use and thoughtful contemplation. The spine shows signs of wear from being pulled off the shelf again and again. The pages themselves are filled with underlines, notes in the margins, and highlighted passages as readers grapple with the nuances and complexities of the topic. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_truth + - state: paper + - state: cover_strong + color: "#c9752a" + - state: decor_diagonal + color: "#cf792d" + - state: decor_wingette_circle + color: gold + - state: icon_question + - state: detail_bookmark + color: "#cf792d" - type: Paper content: book-text-truth @@ -31,9 +50,15 @@ description: The book is a well-preserved hardcover with a simple, elegant design on the cover, depicting the image of a world in motion. The pages are crisp and clean, with no signs of wear or tear, suggesting that it has been well-cared for and valued by its previous owner. The text is printed in a clear, legible font, and the chapters are organized in a logical and easy-to-follow manner, making it accessible to readers of all levels of expertise. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_world + - state: paper + - state: cover_base + color: "#215e9e" + - state: icon_planet + - state: icon_text + - state: detail_bookmark + color: "#2dab24" - type: Paper content: book-text-world @@ -44,9 +69,16 @@ description: The book is a small paperback in good condition, with an illustration of Ian the corgi and the colony of penguins on the cover. The title, "Ian and Robert's Antarctic Adventure", is written in bold white letters against a blue background. The back cover features a brief summary of the story, highlighting the themes of humility, resilience, and the beauty of nature. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_antarctica + - state: paper + - state: cover_base + color: "#5779c9" + - state: icon_stars2 + - state: decor_bottom + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-antarctica @@ -57,9 +89,18 @@ description: The book looks new, with a glossy cover featuring Chuckles the clown and Snuggles the sloth floating in space with a backdrop of stars and planets. Chuckles is dressed in his banana costume and Snuggles is sleeping on a hammock made of space ropes. The title "The Sloth and the Clown - Space Station Shenanigans" is written in bold and colorful letters. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_scsss + - state: paper + - state: cover_base + color: "#e838b9" + - state: decor_wingette + color: "#ab22ba" + - state: decor_spine + color: "#f7cc2f" + - state: icon_banana + - state: detail_bookmark + color: "#f7cc2f" - type: Paper content: book-text-sloth-clown-sss @@ -70,9 +111,18 @@ description: The book is in excellent condition, with crisp pages and a bright cover. The cover of the book features Chuckles and Snuggles, surrounded by the different species they encountered during their adventures in space. In the background, the Zorgs can be seen peeking out from behind a spaceship. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_scpz + - state: paper + - state: cover_base + color: "#f7cc2f" + - state: decor_wingette + color: "#ab22ba" + - state: decor_spine + color: "#e838b9" + - state: icon_banana + - state: detail_bookmark + color: "#ab22ba" - type: Paper content: book-text-sloth-clown-pz @@ -83,9 +133,18 @@ description: The book looks new and vibrant, with an image of Chuckles and Snuggles standing in front of the changing maze on the cover. The title "The Sloth and the Clown - Maze Maze Danger" is written in bold, colorful letters that pop against a background of space and stars. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_scmmd + - state: paper + - state: cover_base + color: "#e838b9" + - state: decor_wingette + color: "#ab22ba" + - state: decor_spine + color: "#f7cc2f" + - state: icon_scmmd + - state: detail_bookmark + color: "#ab22ba" - type: Paper content: book-text-sloth-clown-mmd @@ -96,9 +155,21 @@ description: The cover of the book is an electrifying image of lightning striking the ground, with a silhouette of a person standing in the midst of it. The title is written in bold letters in white against a black background, conveying the power and intensity of the experience. The subtitle is written in smaller letters below the title, providing a hint of the philosophical and spiritual themes explored within. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_struck + - state: paper + - state: cover_strong + color: "#2c384d" + - state: decor_wingette + color: "#3a4a66" + - state: decor_wingette_circle + color: "#6d7c9c" + - state: icon_glow + color: "#f7bb2f" + - state: icon_lightning + color: "#f7bb2f" + - state: detail_bookmark + color: "#f7bb2f" - type: Paper content: book-text-struck @@ -109,9 +180,20 @@ description: The book is new, with a bright and vibrant cover featuring a plant stretching its leaves towards the sun. The title, "Reaching for the Sun - A Plant's Quest for Life," is written in bold, green letters, with an image of the sun rising behind the plant. The cover evokes a sense of growth, energy, and the beauty of nature. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_sun + - state: paper + - state: cover_base + color: "#255c8a" + - state: decor_bottom + color: "#2d2e12" + - state: icon_glow + color: "#f7bb2f" + - state: icon_cabbage + - state: detail_bookmark + color: "#f7bb2f" + - state: detail_rivets + color: "#f7bb2f" - type: Paper content: book-text-sun @@ -122,9 +204,15 @@ description: The book is in good condition, with a hardcover and a dark green forest background. In the center of the cover, there is a sad looking possum sitting on a branch, with a distant and lonely expression on its face. The title, "Fallen Ambitions - The Tragic Tale of Morty the Possum," is written in bold, gold letters above the possum. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_possum + - state: paper + - state: cover_old + color: "#a3bfae" + - state: icon_possum + - state: detail_bookmark + color: "#2b593d" + - state: overlay_blood - type: Paper content: book-text-possum @@ -135,9 +223,14 @@ description: The book is in new condition, with a vibrant and whimsical cover that features a charming illustration of a tiny possum peeking out from behind a coffee cup, with a colorful and bustling cafe scene in the background. The title "The Cafe Possum" is written in bold, playful lettering, and the author's name is printed in a smaller font below it. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_cafe + - state: paper + - state: cover_strong + color: "#e8ab6d" + - state: icon_possum + - state: detail_bookmark + color: "#2b593d" - type: Paper content: book-text-cafe @@ -150,7 +243,15 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book4 + - state: paper + - state: cover_strong + color: "#abebed" + - state: decor_wingette + color: "#a081cc" + - state: icon_atmos + - state: icon_magic + - state: detail_bookmark + color: "#7396f5" - type: Paper content: book-text-feather @@ -161,9 +262,16 @@ description: The book is a new condition with a colorful cover, depicting Ian the corgi and Renault the fox on a journey through the forest, with the lost wolf pup to their feet. The title "The Adventures of Ian and Renault - Finding the Lost Wolf Pup" is prominently displayed at the top, with the author's name below. The cover has a whimsical and adventurous feel to it, attracting readers of all ages. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_wolfpup + - state: paper + - state: cover_base + color: "#3a9e57" + - state: decor_bottom + color: "#1c6330" + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-wolfpup @@ -174,9 +282,16 @@ description: The book appears to be new, with crisp pages and an unblemished cover. The cover features a colorful illustration of Ian and Renault, surrounded by various animals they encountered on the ranch, including horses, cows, and chickens. The title, "The Adventures of Ian and Renault - Ranch Expedition," is written in bold letters above the image, with the subtitle, "Helping Animals in Need," written below. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_ranch + - state: paper + - state: cover_base + color: "#ccab64" + - state: decor_bottom + color: "#946e38" + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-ranch @@ -187,9 +302,16 @@ description: The book is new and in excellent condition. The cover shows Ian and Renault running and playing on the beach, with the blue ocean and golden sand in the background. The title is written in bold, playful letters, and the subtitle reads "An Ocean Adventure." components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_ocean + - state: paper + - state: cover_base + color: "#567cd6" + - state: decor_bottom + color: "#272782" + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-ocean @@ -200,9 +322,15 @@ description: The book is in new condition. The cover is a stunning mountain landscape with Ian and Renault in the foreground, looking out over the vista of the surrounding peaks and valleys. The title is written in bold, block letters at the top, with the subtitle, "A Mountain Expedition," written underneath. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_mountain + - state: paper + - state: cover_base + color: "#86b4d9" + - state: icon_mount + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-mountain @@ -213,9 +341,16 @@ description: The book is in new condition, with crisp pages and a glossy cover. The cover features a colorful illustration of Ian and Renault exploring the city, with tall buildings and bustling streets in the background. Ian is leading the way, with his tail wagging excitedly, while Renault follows close behind, her ears perked up and her eyes wide with wonder. The title, "The Adventures of Ian and Renault," is written in bold, playful letters, with the subtitle, "Exploring the City," written below in smaller font. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_city + - state: paper + - state: cover_base + color: "#9a9b9c" + - state: decor_bottom + color: "#5f6061" + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-city @@ -226,9 +361,16 @@ description: The book looks new and adventurous, with a picture of Ian and Renault standing in front of an icy landscape with snowflakes falling all around them. The title, "The Adventures of Ian and Renault," is written in bold letters at the top, with a subtitle that reads, "An Arctic Journey of Courage and Friendship." components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_arctic + - state: paper + - state: cover_base + color: "#5779c9" + - state: icon_stars2 + - state: decor_bottom + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-arctic @@ -239,9 +381,16 @@ description: The book is in new condition and would have a colorful cover depicting Ian and Renault against a desert backdrop. The cover would feature images of various animals and plants that the two encountered on their adventure, such as a rattlesnake, coyotes, sand dunes, and an oasis. The title, "The Adventures of Ian and Renault" is prominently displayed on the cover in bold letters, while the subtitle "Exploring the Mysterious Desert" is written in smaller letters underneath. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_ian_desert + - state: paper + - state: cover_base + color: "#507bad" + - state: decor_bottom + color: "#bd9a55" + - state: icon_ian + - state: detail_bookmark + color: "#ab5e24" - type: Paper content: book-text-ian-desert @@ -252,9 +401,15 @@ description: The book is a gently used philosophy text, with a cover that features a close-up of a person's mouth, with the word "names" written on their lips. The title is "The Power of Names - A Philosophical Exploration," and the author's name is prominently displayed underneath. The overall design is simple and elegant, with the focus on the text rather than any flashy graphics or images. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_names + - state: paper + - state: cover_base + color: "#8c8c8c" + - state: decor_wingette_circle + - state: icon_letter_N + - state: detail_bookmark + - state: overlay_dirt - type: Paper content: book-text-names @@ -265,9 +420,19 @@ description: The book is in good condition, with a slightly faded cover due to exposure to sunlight. The cover of the book depicts a panoramic view of the Earth from space, with a bright blue ocean and green landmasses. In the foreground, a lone astronaut is seen sitting in front of a window, gazing wistfully at the Earth. The title of the book, "Earthly Longing," is written in bold white letters against a black background at the top of the cover. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_earth + - state: paper + - state: cover_strong + color: "#0f204f" + - state: decor_wingette_circle + color: "#2c5491" + - state: decor_vertical_middle + color: "#3c6ab0" + - state: icon_planet + - state: icon_text3 + - state: detail_bookmark + color: "#2c5491" - type: Paper content: book-text-earth @@ -278,9 +443,21 @@ description: The book is in excellent condition, with a shiny cover depicting a spaceship hovering above a planet, perhaps with the Earth in the background. The title "Journey Beyond - The Starship Aurora Mission" is written in bold, silver letters. The cover also features a quote from a review, "A breathtaking tale of human achievement and exploration" to entice potential readers. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_aurora + - state: paper + - state: cover_base + color: "#0f204f" + - state: decor_vertical_middle + color: "#3c6ab0" + - state: decor_spine + color: "#3c6ab0" + - state: icon_stars2 + - state: icon_aurora + - state: detail_bookmark + color: "#2c5491" + - state: detail_rivets + color: "#799dd4" - type: Paper content: book-text-aurora @@ -291,9 +468,18 @@ description: The book appears new with crisp pages and an uncreased spine. The cover features an image of a temple with a glowing, multicolored aura around it, symbolizing the various gods discussed in the book. The title is displayed prominently in gold lettering, with the author's name and a brief summary of the book written in smaller text below. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_temple + - state: paper + - state: cover_base + color: "#542e80" + - state: decor_vertical_middle + color: "#39205e" + - state: decor_wingette_circle + color: "#914fb8" + - state: icon_temple + - state: detail_bookmark + color: "#bfbfbf" - type: Paper content: book-text-temple @@ -304,9 +490,18 @@ description: The book is in good condition, with a slightly worn cover that features a dark and ominous space station looming in the background. The title "Watched" is written in bold letters that seem to be staring back at the reader, conveying the feeling of being constantly observed. The blurb on the back cover hints at a thrilling and suspenseful tale of paranoia and danger in a confined setting. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_watched + - state: paper + - state: cover_base + color: "#611e10" + - state: overlay_dirt + color: "#4f1206" + - state: decor_wingette_circle + color: "#241e1d" + - state: icon_eye + - state: detail_bookmark + color: "#bfbfbf" - type: Paper content: book-text-watched @@ -317,9 +512,17 @@ description: The cover features Smith, the medical officer, in his uniform, looking determined and ready to face any challenge. The backdrop shows the SS Horizon under attack, with explosions and smoke filling the space station. In the foreground, a wizard with a staff can be seen, adding an element of mystery and intrigue to the scene. The title is prominently displayed in bold letters, with the author's name and a tagline indicating the book's action-packed and suspenseful nature. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_medical + - state: paper + - state: cover_base + color: "#d7dadb" + - state: decor_wingette_circle + color: "#55b0d4" + - state: icon_medical_cross + color: "#55b0d4" + - state: detail_bookmark + color: "#55b0d4" - type: Paper content: book-text-medical-officer @@ -330,9 +533,16 @@ description: The book looks old and worn, with faded lettering on the cover. The cover depicts a dark and eerie morgue, with a full moon casting an ominous glow over the scene. In the foreground are Morty the possum and Morticia the raccoon, with mischievous expressions on their faces, peeking out from behind a metal shelf. The title is written in bold, spooky letters, with the subtitle "A Tale of Animal Spirits" written in smaller font below. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_morgue + - state: paper + - state: cover_old + color: "#d7dadb" + - state: icon_text2 + color: "#61363d" + - state: overlay_dirt + - state: detail_bookmark + color: "#61363d" - type: Paper content: book-text-morgue @@ -343,9 +553,21 @@ description: The book is in new condition, with vibrant colors and illustrations on the cover. The cover shows Rufus on his bicycle, with Blossom flying beside him in a playful manner. The title is written in bold, whimsical font, with the characters' names highlighted in a contrasting color. The overall aesthetic is charming and inviting, appealing to children and adults alike. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_rufus + - state: paper + - state: cover_base + color: "#6597c9" + - state: decor_bottom + color: "#113a63" + - state: decor_diagonal + color: "#113a63" + - state: icon_text3 + color: "#ffde7d" + - state: detail_bookmark + color: "#61363d" + - state: detail_rivets + color: "#ffde7d" - type: Paper content: book-text-rufus @@ -356,9 +578,19 @@ description: The book is in a good condition, with a glossy cover depicting a jungle scene with vibrant colors and intricate details. The title "The Map of Adventure," is written in bold, gold lettering. The cover also features an image of a mysterious suitcase with the map spilling out of it. components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_map + - state: paper + - state: cover_base + color: "#56c463" + - state: icon_briefcase + - state: decor_wingette + color: "#298033" + - state: icon_briefcase + - state: detail_bookmark + color: "#61363d" + - state: detail_rivets + color: "#ffde7d" - type: Paper content: book-text-map @@ -369,9 +601,17 @@ description: The book is in excellent condition, with crisp pages and a glossy cover. The cover features a striking image of a mountain range, with a silhouette of a climber with a guitar on their back in the foreground. The title is bold and eye-catching, with the subtitle "A Journey of Music, Mountains, and Self-Discovery." components: - type: Sprite - sprite: Objects/Misc/authorbooks.rsi + sprite: Objects/Misc/books.rsi layers: - - state: book_journ_mount + - state: paper + - state: cover_base + color: "#9bc1c9" + - state: icon_briefcase + - state: icon_mount + - state: detail_bookmark + color: "#61363d" + - state: detail_rivets + color: "#ffde7d" - type: Paper content: book-text-journ-mount @@ -384,7 +624,16 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book6 + - state: paper + - state: cover_base + color: "#1d662c" + - state: decor_spine + color: "#2a8c58" + - state: icon_glow + color: "#b9edc4" + - state: icon_tree + - state: detail_bookmark + color: "#61363d" - type: Paper content: book-text-inspiration @@ -397,7 +646,14 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book0 + - state: paper + - state: cover_old + color: "#c526de" + - state: decor_wingette + - state: icon_bucket + - state: detail_bookmark + color: "#61363d" + - state: overlay_dirt - type: Paper content: book-text-janitor diff --git a/Resources/Prototypes/Entities/Stations/base.yml b/Resources/Prototypes/Entities/Stations/base.yml index e71b3ce46d..c3fbb998b2 100644 --- a/Resources/Prototypes/Entities/Stations/base.yml +++ b/Resources/Prototypes/Entities/Stations/base.yml @@ -120,4 +120,4 @@ id: BaseStationAllEventsEligible abstract: true components: - - type: StationEventEligible # For when someone makes this more granular in the future. + - type: StationEventEligible # For when someone makes this more granular in the future. \ No newline at end of file diff --git a/Resources/Textures/Objects/Magic/spellbooks.rsi/bookfireball.png b/Resources/Textures/Objects/Magic/spellbooks.rsi/bookfireball.png deleted file mode 100644 index ed18010a728992f4539425de5df522f572bb96cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1R|P)Yr6%<4e@y`*&19%Vd z3WDeXDhPruyn*7Ti!KB~bRib;&qA@NOf_u?)0mmOH?x@cZA#K6zxTdOrpdflMBoww z5V*tu1THb)zaJb;PkirH#;i_$d{HkTr?~m421M|k-4zUdzMwK$?jBg0ZGR4oOlgl@ zTiixox!|W7px|50Cp0z>VWQQ`15n5XKhqp=K3>Xv!i9%7P>YkFc@k`0H?{kh%Y!(1 ze*Zn$Oa)x(#gEH|pX*;hB|o<@0@TnkLFwc57CvRd&t*V6=|u9}ijO!785@ucz;*Jv z5tm0s2E+qUa+!RG_m@1?NH8)W3P6eaN|?kzITEbq00r+`s$x!U)co8ARD5FtBKX(o zV<(7{eRl>>^NkI-s=cse+vy)A zSr2rlu=DvWNd*c9(=j))53%)FiBXEfU2wY+S0+$$oz$FGCa7lka7P#~WNPmFz z2e8%Wee-iyhjrrW574o7``G#edKD$9YxY^$6h%_2!bmdtD2OxgNynyG9=9uupnKKh zK@_XQ;FNCEc`1w}ho0*if!F>3>iWEIzVru}9w7Yz(jOrG0n#5J{Q;2v0Oyka04Bcl m2c&%|{Q&_;3_#!t-hdyeSrmMJI}Nk|0000A7D0p{dIGiwHo~5d?&#IkmiN$By@c|L;qm!&x_rowYIZoNc-;i%%Krv zLjYkuJe7vEB9K&EzcPN-C02~D=&g{tm7y|b>vibyEQ!)VcAOCRo6c2zn4cVLr z-{z9l^Watj4AcrHt z^T(6AeiXu4eL$M$Q!DCTSlQJ=I03*C#u&s_#sGNs(j2$8QLw8IAakx-e=BZF0QdEQ zND^{n3?MRGWV&tzK;QJ=?*nnH05SlMf)Zo)WB?3-`y5$)0O=u<5X=vX$A(S zbWaz@kcv5PXPxyr>>$#be?Xq4-ogBl{0p}le)C#}yE_8zaK!!+dc@5UB)}s6Xj`{V zjgWcXtS&u~Ka7Fg8p7pS(K-iw|6NmoS)So z$S-blYmbdO-`d68n;Ki{mKi6!(fl3w(ek$9?HyN+E51m&*neGYDyO^sbjI!BTi+!= zeqNPZ-MM7r%JXIiI;!Iye=n6_Tcmd5+HuJP^DiwZ+PE4ho@0KWf5kOj=lj#`nR8w* zW{J_cRk?ei(Zd&;c`a`CZ=0`ptBvvM`6s6iY_s!HIImLtV@juQ?KZ|qw_}~;RUJ;9 zOkwzL|1J6V%$!F-_E#B-&DGBT-SPcmruKJc)i1%k8T0Qw|0O7WHW}z%yK@Xdd^`$I z4DTIL z@4K%b{jy-LIJ|l)ufYZ$k8jVCRg9VRz63JqiLK4CQ@A<1f8rUA9T(g=3)KHi&vE#B z=3IHAa=?nK~_iwzoSU*@k-QnB9tEbr{jHC@#n9D0q6f9WUFI2EGL-jLb zbJb@&`)|t`^CI2s!TPtVQzb#l6rL)`Pxz+z320M@yoAH4!2AQ| Zt4g;>*qvB)0hkUMJYD@<);T3K0RV#^GT;CJ diff --git a/Resources/Textures/Objects/Magic/spellbooks.rsi/meta.json b/Resources/Textures/Objects/Magic/spellbooks.rsi/meta.json deleted file mode 100644 index f9f1703f24..0000000000 --- a/Resources/Textures/Objects/Magic/spellbooks.rsi/meta.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13/commit/f3e328af032f0ba0234b866c24ccb0003e1a4993", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "bookfireball", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "bookforcewall", - "delays": [ - [ - 0.1, - 0.1 - ] - ] - }, - { - "name": "bookknock", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "spellbook" - } - ] -} \ No newline at end of file diff --git a/Resources/Textures/Objects/Magic/spellbooks.rsi/spellbook.png b/Resources/Textures/Objects/Magic/spellbooks.rsi/spellbook.png deleted file mode 100644 index d24f198f949f09bd26e513d9a8df051437a5045c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmV?P)-Ep z4)8je6vhI$9gFGonaSVB-rg1s-z|VFM+W@r3}Uf+xOwLT0Sq1A(F*v3LA-r=7fL9E zU^t9sclOn4r(a|+S(rb`Pq6@v^r$A=RcVEIVMi_ARg=U+uY6={YT4dh|VUF$?W3F z)#msBf%y<5pBMTNao)}$lt2I)+a4YEW((l)GI2q$6yMmWV0BgLgJ`zfaB8*yIt?a> zeeEP}1wqE|ogfUofzAM|jElcoPvBuM^TU7j2gT9y3Vltz`LCt+ic|M z41CJvglOcV?qg4}6P6h*0a*0Y>NV6VEF90w;PcmK_Nfpf9KtV$c}D||YX8Uof+@fx Z?Khte9agC)|40A;002ovPDHLkV1kOAT(|%L diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_aurora.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_aurora.png deleted file mode 100644 index 0e34258138021492fc684b7fda2203714d8d63f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmV-s0h#`ZP)3FcgOWT0<9yPBjV^C=YUem=@yeF<@pIp?ZOlAl2Ve*t+nJ@G5`QX zQPf#eRaKuMr{4uZ0BM>|2jI;^A%YS}k|fBS4e&ebkQCSn_}Pc1Fy1a89^Gt!EX%&0 zT(JO*F|FUD0@N2=efHdi_@BGL81sp}{>~A(9ZM<6&B$7d{C0#|?}uy0esHp$cTyP{ zpihr~16+pz&{~6YAAFn(0BDULAgqD0_1_ng8DI##08cz*&hj?w^#A|>07*qoM6N<$ Ef@9H>(EtDd diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_cafe.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_cafe.png deleted file mode 100644 index 7a3b6667cf86601618c0f5aeadd4ec999245269e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 zcmV+g0{Z=lP)#5u)V)i)9kZWHtj%jftCOu)Db+q^cs9NFaSW8T6?D8i8u-ZOc{`I94@b}h{s|? zbsd1DDHbXXPzj31VgT57ipTR2`E*f$&x-0gww+@4Xc&MdOGX`0`M zdtT!K&h8B+?hfeg(g1iaxL_EVrpd&=A#iV_bRVv(){C%2q2M2 zRMnPciCR=i_#w0`3)gjVUAOLVVSve@BmkPGp=nxGPgYVJQ6uhL3ZUS@Xn*oc?^~6g z8VexujR){wt{VdoR?DX%QQg`_7T26#&w~I;>({IW&}@J=_3nqkbOKgz00000NkvXX Hu0mjf%LU%y diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_earth.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_earth.png deleted file mode 100644 index 8e29c3880a48af951ae316342b6aac1dd0675db1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmVd^$mMcDv)Sw`LA%{H1_J0LZ{O}fW&tuY(E!W(b*vD}Jpqkg zJ|Kh$tS(7@Q=?Hqh~>e*Ku4x&#!l}0e(c!T005~}s%MPnc{)=je+m)@&{~3yY}-ak z`FXFD!gbxh0Vo!W0F1|X#j zlkHVu_5@lV9+I7>RLw`0Wh4Lq%$?UUI^d(XcKM@U~xZe zZ#C_yv;mY-IIRjC+pwC3sagor3UFS}QA&*#pmWrmm1{6X_^@8Uxz9xUbric8nWp(^ z#oc_s^E`atr}21-nBEv(G5Rjob^A7+pZZ@`tX1jWo`wscQ{zK`yWs#>mPJ4RgU?q@ ofUX-5Vw{3eEAdS@21p#>9X*PTtyA@MdjJ3c07*qoM6N<$g6GxNUjP6A diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_antarctica.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_antarctica.png deleted file mode 100644 index 3843e20069633415e2005a2c6955a81d47a3150f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmV##khG85lz}VQB>qG#B;CHTn z#Z}V<7uxn3D9WLGr>2%m0+s|Y3M}toA?vP6F(69q{ zY5)K~V-EpnS3T5*2WVG4d-UZ>StZylzWOG7^~c>^l(I9hWm;$xn|pNH#3oy2@xyzk z)SVuHdPxPqt@b<5Zhfq-r7V9!0Q=u4I@!RSzCdXBF?0F?(a8p9EtE_+Cz*M*Ok_QYuFn&1 z9Y1vMQ6kg@K{Ltwni^hf)7*Y&0&Dm%G0000 diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_arctic.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_arctic.png deleted file mode 100644 index ace42ee7dcb82d0de23fdd90465beafe8309c299..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^>XP)HT-@Ed2!ddp z1xH86t`2n&LS1yKt95XSI_TgaXf_d%AU3w*;1Y-0*!r)zXzkJ;1nwU1?)ULtj$9Pq z_i3d%TI${gXafLUVUqIsyzjbhB!hH1t^5k0YQ8jmh0-$)y~Fhh{r%sr-P}BD2-pz7 zbzL+~WA9RXi#&bE_&Bd^D1Ly^)!h4855{< z<0f?|v!&cA@H{Y6^CXgbVCrW~5=k91H6Oq=4FKT&WEX%Dy&FGcGNO0a#bqVcf?BDu zLDX2()$fw7z@ztqSi7r>iM2Z(y_f$1(8qKDI`ygGsg27jQVZ<$0k*7tvV{`Mvwhg> z1Ch)jLIpbYDV`V4$refgWD6yp7te!A1PXa1q$_YXw1RErIJk9j90$WNu&f+HtN`1x z+sOeOi47JE0|3j)0btw52r*d!5gSZ26F`W`FUPg9a=9!85a~W(yj9`5xs0UW0mpGZ znO0-}0`M26kpZOoTfY8V0GV$*fd6y>jQ$=#(=?*o2d_#G06*Rb0hIQySsS3$0Iztd VjF`6Y<^uo#002ovPDHLkV1ml)=STnm diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_city.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_city.png deleted file mode 100644 index abd76a54704c2f69dec12e1b6e07a1f60a2705a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)KIJT0>Ikq|n0IpLzm}X%-Jn>%MSR@D(y3y;K zm04157nmjt`2!4&sCLp=B*@^1%8)-`!~Gcmz{A-A06l6Wu}F{}wXq~FE2$QIR9i*K-a?n7{)0=j21w|7Cc`39l*RN$@JS;h|w>f^C*?y-FZNJtHO8pGLn7= zS`Ie=$WAVQiv0^fC6c-axJi}w6qUQJFo4829>99KtPnuE7dPj@tMev+AJ2mTO6}LI c22gE)SBTz%A9MHWg8%>k07*qoM6N<$g6rAiJpcdz diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_desert.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_desert.png deleted file mode 100644 index 9a2d2ad6587d53e4d53475db616226596f18886f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P)%SK9Wh4fHq?h9SuG*cZ{aV4+Ar2 z?!EuVIrlPWT&8J~PZj0Wy#P=E07~o(T3PsMp2t#-45k-!*Si27%%?^Kt}o5-wJvi& zMa8Rg7iT820%ip`kEQTdl@eIr1NO2m_@JSgd0XRbl>p#dx!bn+W#ZQMSla*qO_ARi zM*9Ayx6g`uLO~#1jl5v1!?P0Xzw4e;64lh;9_SDfO^G^ zClsV!ac9J3B~^l_s;vG_Wwq1UkCM(n!nj4uo@T_v>?sMu{>FP3fYPV{P^@%W*VDMH z9F;(yt6@p|gFl>P{8t(JT#X}haFBswrHj;91b;XQfIplhH5RclVaeu^kj}vW+DUXR zz~7TIqR}X-s-kHDgqQ?YWtWo!_$Pb}t11AR763rkw-KT<4I+Fru<>yKKfGJOAOJ#i zzW6>Km-2Vk52*K9cOzgyE1a*00000NkvXXu0mjf-?{Hb diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_mountain.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_mountain.png deleted file mode 100644 index ee26df9e9ab6c3d7505c4c977216729652a7fc59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP))pTn{RG4%a+$&^GTSjal-A z2fz2b-+R9g@ArG$ON3#_Fm+?7*+&2)0N|!fP_bAHUDxd?L8(+q^aapPzV+x23H=`2 zx*HFen7DN9+S-e*fL#Gx*CmxovGoez=zMh7`udVooKy(_G)6!3nY6T#w#_sGBl`Yk7f#<>ea-O-YA(Ccl1?I8_^UHYwH!uKzA8(_^nlZ-7 z)C$ZP<1xRgluFR4$*J2+PW8I_pOjDF*gM18IE?wMjYE#Tv;PBN%o+fU8H-|c`Ue6~ zE|+6-XLFhzdyj1XB|G*W&gOJa$)x})l}Zd^%vj`f<$&`3N#x%@;dJFdoP?0%l~8WN z_jgut>?*bIM>HA@Ow+`+t60`5@LY8}HGtRFHV;h`0Nbtt;5cuvtc3`~+J@i1lmL{P z(6%eWwyXs)F8V$YfVRx@Q@Ci}*|6>Yxk`y{ui|t%9qPJ{rfDRTN#U>8>%z|Ea>Dj~ zpCAbM`r#>Q^8w9fv%mMiW$H}YkCXs>-m`R#fERQ~Y*Ve8ZN0O-0-tJP9U4)Eoj p3vgxqL81uGa2M-UF__hWg;5X-kws*Ul0xwIikQ`)-tO#0)8r2evv1zK z_v5`CW>#}umqsem(CkfsCIHal=b&jCOi#PmcBlkyKCk^3KsEWFACqWp!_eMeJKx#) z?ow@J-Z#8IfNeu8Mr5S`6nx#Qa({gZ9s z;#3FbdQYh25TXK6k)S+xL^@jnAe}8yo;&g?;VIyjP_Dp1-zuh&Vf)giSS+IJI);%! z%2nXIYB)839l61*t^;5g830Uk7bzzyAaVl=haU&9T)t=aX)NW$oAas)bsx~5s_@>s zij=>Bj?GN~N=r+xY@Y&9kEG!N&d!4S-d)rgK;euBaPN=n1Q3f6=013`e*>2F&-);N g*8DYV0yG-nFF_}T3baD4H2?qr07*qoM6N<$f?9U(RR910 diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_ranch.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_ranch.png deleted file mode 100644 index 7f6b3e86ddc47afc7e6c2aa759a214c0f01eda62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmV+t0`2{YP)-3t~LS&Pf9EB@Gf>-}i%3(M@j zdGp?fH#5wv@_nCns;jNpI{+O3peM>fDFuu8RN^J@w|(_0fLii@Usq9mBanFau-`DA z9jZQmj0_(QPyrIqwXq)Q8kV2kugfnQpr%1V_CNKz)(-%jl)-hY@8h5D?Zra1H4OML zAc-j41+EKY)3c1G%^+#90HbM>vFX_Wu4w=OmwP_}cyIPnEL7XDT`JKOgw>yVOMfcv z=zEDPaP8ir*UArUdaca0d)pcSbJzr++nfxZuwANHQ{ZF<*s_0-&3i0OC2=ysr5}>G z0^Q~$Hw%Yk^Bw@%yvNPLVNi)cb#4i91rCN*aO@nv&n_sHN?4YKZRgN>1^6ZnCj;2g zo6K7l0Jfb2z;SlbdZG%VH{oizc>rJDEHlp>09sEx*)LVB`+)Vo3eSB@Bwho_A4veb z8Sjy;B>;^`8Xw?X;9EIuFo58U2k`$MH3%R9aqff1`&aNC#rDg7s`G2s0cbbC9p9dH U$$b4yP5=M^07*qoM6N<$g5Zben*aa+ diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_wolfpup.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_ian_wolfpup.png deleted file mode 100644 index df0b2350ae7c580f13d2790fc4cddb46a7c1ef8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 552 zcmV+@0@wYCP)1P>kRtwRZIh$JUy$f6FeRhu@IuIj{# zUl2$~=ic|>TwU&w5(ELG)Ps?_j{(L2z{98nMNu#eBXArikwK%;Q2q;`XZ~q#1?BN` zc=B{GA)UT;?BZfE5-<|LaU4`t<;7+TXhlxgQ?2$UR$e4PPpMQYwz=ndv2$Ys0KA<( z#C5y(?;gDj<3+y$bXVi`k5!o|<#vJV!ou1*^GjN2TJ$T-FKH~St%q=T1^{sJ@c@9V zHc8R1kkuv!;m2~f^$vca6;>it%q<~Zfzvq?+p2Q( z?K|yu8(r72tSUm7z`pEsascne4tZS%z_O|U*!Bm6Snh&|9XL6@JAkvZQ}X!@0EAfn z>w8%x>Id{+Rk-b0M$+GaX_^3(N~J$y_X02s)5HKW$1GQ0hYKKO4g}YqhXbIhDoOgm qFO5r@&E`M*K>%g^Yc>WLHNa06^o``=foRMC0000~53@Tu_&r>L2o5gAt>_>Gry>Xk zg)9X(2L~N>7MzMp9h~|FTm|>YnHmCt5Em1YG@APpn5ns6#hJt?>DWuvZuW0J^=6O3&Q;lzFAzDX>fzmRY_9O99}V zYlUk8BrE5fYjr^xfO8JUSUO%h0L`3#N~v-elmIN#&8^zDZRIXV158H!T>BYga2zL{ zrxFB`1_**+F-${J01xK}DMT62WYqsZfa!PuLP#z+0m%YQ$AkI-Uarn6Jy{?Tzc9e; z<{}+OQSl}euT=&pD!UDYkcGLdq;A6`pcqsdJb$kjAPhrMD*zz=daVb55F)+z0I0fhdEP)&yAqK2Ao}bp9<-AM&-tW8*C+8;-r4&BZ@|qq10sye0 zGl&Qr?kLK!Q-JDU%Ul3;_{VV%S>J}FGyObG8%t&HK-;_?pd3Tergb_5hFW_qb$({# z(*xAn+Ay|q|7>hE2LRYi^`6JVs!8v&AOP5nfiHEl{MWt9Y0tuC<>$YoCaYeRcK?lg`7&`s5-t)<_mWQs5Mbl4@6R( zF9qP@$Zfhc$@@a&9l-7t*z9!W-GTuu_ILpGaan>;O*5D3`Ro#Z=Zx;vjE^5 Z;1j&fN@Z)Wza#(v002ovPDHLkV1hdAqQ3wD diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_medical.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_medical.png deleted file mode 100644 index e94b6789fb54ce34329953ac7d1cc550bc2d9092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmV-q0h|7bP)+=~6M^(#=zN0&gMM*>gB|@D}wL z?hcBJ5U@)rD56swG!l#2{3vnAJEh@Gzb9Y*J;oSps%AC118@KU>N2J@O&O(BD?l8_ zo)G{KJ{fM|wFW@D|7_@V-nLDWWhG!G0HqX!5G*$2UUMor%HKDQM!m}5QUF|G7|L3a zWtp^B8UO%-AgJ`@d9LzH`>Vh@fYK0%8qfBR@_gFW1~AG%!*7~22cVGwvFGJFolIyA zf!K3iK3`t%2R{Me!5V(^ec+<_4FFH`Ura*Xw2RVSh97+aCz6+po z#sdI5t^h>l0E7_e+y~c14j}q?9|Qo;JJP)rOGWKbh;c9De}OE`tI%Su)vIX1ZQR3nXc=AZfXkL=OmaNw5q>ZaB20PX;Q z$&iPZ%jH2S#kMGz1p(Wlu(4SXSl`5r5AfyXWpoh$Q~dLX*NmobVD{L2APoO{_TAf0 zed+rFtkab7WWvX}mCDwqX9BVqW5^DqppueG+m zQp(aWgo0iGW{mUs9IZ84Yg^O>gwOn;DR%%xrz!51yagRzS}BrWq36T%p!{8xU;aUg1WBHl3_1^ZBek>?T}KkTCMDT zAp~&jxUTEQraT^8U*}t3EJ+eP&m+%sJkO&nOOhlZ&-0TQz@hvxC~q%-$EPRis>1jE zW4BesI!#%pDZcOH`#yD5p_Ib+eb#A8T~+-2{tMurzXt(E_rGR$0JjG48{{V{_|L5+ Qh5!Hn07*qoM6N<$f-PPiod5s; diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_names.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_names.png deleted file mode 100644 index f2396ac527932495e2e9bcd6c4ce80f7c84fb142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQvf z#W5tJ_3d?Az9s_^_7C;Fi`l9eY#OXL3xCw{yLYI$f~PNGri6^l+dRcx*EW=PbV+7jwv-Q_!)?F7l})qjO4RTI`mdKI;Vst0OXZ;Z2$lO diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_narsie_legend.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_narsie_legend.png deleted file mode 100644 index fe7659f396f1f37d6f20908ffecb1a4b5a0617bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%A_P)`6pHR9J=WS3OR{FckhAC;d-VbwErUpj*$t%8KX>I2AWwV?=NP zHU*paB5DwRvbZ z9n1Neq1RG)!&v0j&G}x-$*n(stjSRTX4A3UL>x~Kw;+QF;9uk)7>!Eby_#HBeZCsN ze9ds?d$_*2Q!h}0gm3o_mu7(`T;l%qaf_*g0B9Tc+W>%o2~eu$`ksS;iS(KQU;r{{ zjs}o$iGT^558Lp&YL0OUj}rJ@HSV<3{7;-9ifzN%g8}Un06a?IQIfmYwqPQa!$yKi zj!YW0BUZ=(eb2Z=-`lUU_wED#MGvSP*_EVaW+j13Ng7$1<031zR>^?Y(adtwc^M$U zt_rMjAoI%w#NMrWOf+e47PO%78~n z4ycV;m!VnT#mLRFti2Ct8UrS_A~zia88fx_frLv8J5K7@bf(98eql&ZOA=}enAmb& zOvXd3l7TQ5=(q~!*LRd^Y$ltzEvL5rtOr1^<-nx`QLOfObF0-(QvpV^P@}N%L#g05~;(U#ZIcWN2>wvj6}907*qo IM6N<$g1MvthyVZp diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_possum.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_possum.png deleted file mode 100644 index b169c180be074fc0c21536cb30af01592de3cde5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1EAP) zadvc7dwJ*M;i2#P;&qv2d3o2xCqXF6MpL17EwgLeI0h~dK zRN7(f>O3%+-I9$U`(c^ilmJH6eIvbd!Sx%uuPMB zqd`H_$SVo}h0ADn1PE4OC{)li0Cc@NkvIrez;Ag)LD#Fy-)sXQ%Q666`DHc$mT7WO zDtTkuwgH%ve?Ihjq4EfC!u{K2a&3!u+Y+5R9RPsM<{ri3p*OD8Y5;UP9pPM&mY`m7 z00RKSFd~b?g!e$UY>oIs7!iw90sqk(^IJ0j0C-UEupaNpZ|neg{%))Me*peY=LwnD zzX5)~|2ka&ksc4=eg?PhPyng4LzMSmTmJ}r4+2QZuUP^RH^4V5^>#?6W`!pJ0000< KMNUMnLSTZ0pTqqC diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_rufus.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_rufus.png deleted file mode 100644 index 22e936fb3f4aecdc78311df46a2eca6cb048840b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmV;L0cHM)P)ea%tV!#14oU+AJ?^L>CcG0zUU(nAgYOPQ2tk$Fs5HF>r~!b@ zBBrCWOR)%NS^+l~r$#A&IQ;r}iqSfNwv#qk){oa7p4>_Sr2va?M$@wKhW7WF=Zqse z{?gU?zBIfLK&-9yPEji#^Vh=O!T7(5hTVsQl5h3lbfcQ8mAP7 z>j#L-oGpK&+h0wOs+22`2ca7dntdSk!i~qJ`ha#LDifMi<*m4K0HrBVTIuG~^#Z7@ z@c`oe9&n^SDL~V*(b*3^+`RzKulqp&qy9Ck0jdW01oy^^NcURC!T!nTizj4_YB#C7egVC;=$dE$x!eXb&`+@wm#~Q#kW|pPP*TnPV$);W9U;xy;>gt z1^@sTIt3yE=z)P1P6inJpnm~y$LGDxl6C-DUShsDR*tWiQ!C@v0Ab(( z0JfW%0OIeWI2G;I0Az{cRJ1vei#T0GSzgxmTLa*R{)U?OT|le=WWzk{a`;_xz-bGj zI2GPzd8y=skkhGo0B&@>oCvn>b%Pk1dKzs|NG%S$B(Iy(hi=8L0}19i7! zqX69Kb~97LF5ir;0>}v`=K!E4rj3y9zkukDfqd)FG5dM}O;!z5MAD)*!hQ}$dIlw# u50`rIGbsR|)_cHU3)+_6%klxBcYt41t&_w9@AhZ_0000*mzS z2gp#|vOD@L9fd;0K_{0GItZdjk5fVtvG;3$xjE(Ni1T+N+XdTaixzRlTY(2BG zGZV-?_N`5k#M;y;3EQ16?M|1=i(&p;UAw}o3U2RS0EnZowDy5_8OBk_;czD>@oxl1 z=LY~xrb`~5-k406rF~b3>2D}NO#lD@ diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_scsss.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_scsss.png deleted file mode 100644 index 1262f51118ca0817c38037ecafec635fcf15c84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmV-l0igbgP)(I+h~NK8J|U;bZ7*U&Yz2FW}_v z;3T4>wNNo*oC2-1=GS!TnQwBwTzYyF!Z}Bq>b2_L0dxQW`mzE-2%;$Bj4>mFEX#-$ zfG~d?Rv^O}5KO8CVc58KJYGlvr2vdEP)ZTcchb$uy5ILoby5JKAPAJri=t4jRR#cn zx5CB)4N$-^1<7VZ(v~iHOLED}d%wK@ySu~*!;nqd)<&~u02u(_ zCUH70mBNYdr%LcP8aYb==;XuB70%8f?CzNk#p0jO9_-&N1Y8I(@qG%O$H{dU=q?PX z?fLaKkzXPS0Jh!4uKXyK*f)7pz|G|lLI5D8oO^EDE7r3>N*N_=HOutc6@(B-DQ!d9 z0|+6aHwEzWW&zVcSV^E02qEaTEBJw;-WV7XsC7%A%k2lsfJ!TYRRy#?+@Atat@VvY zTsuI#^j_Yj)htJS;0KC}%NJ_^YYBAeHH06i=vur%8IKdivu?uKrt7sU0Gypa+JuVC zdK$*H)^fz}uN7ckA}{Y!t@YD{0a8eytI)YSGNxkM)i9L=LI~=O0RZ*Jz_@N}sa8UL z)D5|eSplf&)Ev(&yTP_dptn+JzNby!Sk&5c!2k(Pk?{F2LYVy*DM3rG{7%3 Wv%OLRsXy@m0000kK>^ z3}TEW^#^pYTZaX9h#<(DPCtiF` z&-=X3@A-b-_kG^?_q--e(-@|W4OM*vFaiL~{Ulwz_eMLcl}{v~CL<<80B!NFPfD21 zUI&|_GhuS_*tO2!`<{S30S;?r#%&U_Po+PRy{?Sz;ergic5`GEmgEmgcLDFEWZ0HH*VVp#>iyOJWDOb-^I z(X^9UUZC_vC7ev7uBl{}7r3>U!tL=faq)^UfKU%a*0+%JSsXJ?ie;4>cYTDDX=eTK z(tiPWEQ$%Sw?OC)9PDnh@o1iSFn~jHBImQjg8>R9xS#pnnY_P$`T$C06?ZI3WPOWb zS;g(~;eY-L?K8;vEZ(^#k#gby-nk`gM=lO_x2c&GKD^E1ket-7DY!j8JCh`dclT^jgJbL8Eg;K%!=+Sl~vR=6^G>Ph>Mz`fn@A*3&cg0J djR1xX@Ea%`!+9L+@>>7^002ovPDHLkV1jE5CO-fG diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_temple.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_temple.png deleted file mode 100644 index 6f68c1c2e239a5cfe97e069332d127c90a9fc33f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmV+^0@nSBP)Uqc(uI(~^6Od>HP_H%2p}!BE0HCEg2q8G=^x|P~nJdB9pYO$;0A|U*e2x%XkHLKOufz8C z!gu$cd`ksP1sDdGG^#tiIs~}-yVA}2{xp+cD!|N|#>1?xxc=|VzL^04o;`2UYDWwA z9b4yg;HrdF18B7)_K&*wzK^CQ2S~~(0H#^v4N(GfMKWtdba%#_Y4U4!nXmVmc|Uem zXswy2KFrnn0$>3Ecu50<5FBr!ukPFo>~*ww6M!-P?Z+44SM7w7H=pArER z0j};~Z3Ry1-xC*`)|a1Wsm3J&7-jwR#-m~Sv8e$7mOaQ!W(-D;?bB`dqv!Kx29WW_ zM!x>a10baYKqRRaGosLpp1>HF{5OE3QkOzAqT2dHI|z|d#;!0=TUo`x zU_=~jwN9RXBNz7-4|=qNkZX$+v<5KgR_~SRH*#?dR8AkBXTi-)sx_@#U~*q66}M?W zi&831QCm6Hfp!p5ZOI8pbY#Sm%pNe{Q9{>gb0HY?8&PNfw zD~si&aONlgHh+G&f*GFylhg8q+3eSU6FaX3GL4%f)wpwb`md(A{0I+qDl6TZ8rTus=z-7wAs&69Yky%w*Phzg|#1!cLv~_`O=yL!W`fP z%jl~gwk2h+?E*;dcmSaNV>8gO P00000NkvXXu0mjfV1}{0 diff --git a/Resources/Textures/Objects/Misc/authorbooks.rsi/book_world.png b/Resources/Textures/Objects/Misc/authorbooks.rsi/book_world.png deleted file mode 100644 index 8793ef8dfa2ede1e64cf3d1b8a02c4ba4ae3f3af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dKcP)&iPXu6NVfL%DDXTdiBz}{D%p3;N?JY~X!o+UCr z2CL_=a>mhcua{xO0o3HADYkaS<>)aKDgayrr%CA9nq_GT0Kmogsaa9F%yPE{&lOl) zs&#yOYYo8cL)4u4_8i=7!o)gEtP{zLufH&Wp3;bA%CI}d>`Xrq`PzgjRER(3J#9ka zQvk514sqDs2bd9wWy)TL5eJY_NT+ToQ6OHI2V@jv6ya1XoQNzTd$=2ANH-?D2^)$0 zOD43!TOZ~h!=8I;E`Z1#4`Af=<^Ti;ve@IS?mjHPN^@Ir%0IzJdul zxcDH(#ns6NU~@3U4+bMBNI#+6dTyawP-(RgqT!#Ab6d{6=XXx;R~S>)3}6QEHvo3m z*R8d!EwptV@l*;4NdoJ32Ydwn6GgkNwpw_sR&iUY;Oz2J2n4WEELy2d275aUiH?r> zLX6%%_c}{O+s0B$U-m7XUbP5db08v zEG3h;dpL&}_AaoehfHOcsN~D5t0VoAb8}cI6zq0160t2a&ENoO%9;;u5XdMUpPb-e zf8TCP>9lPvc*_$YOxak1@E(NA3FHpyST2(>7_EEwktcvfgTea9#U0!&H;gmw1!3d@ z@CWdnc(7pzN33t#hB00McbSKu2mWI{1WlI53*cM*(mNZ|)ByZwG64Ngpeo9A0Qj0Q zL`rBu&$HZL`r1TbyjNgZLMC@S^CByLlM9 z4G((SX^3E9>>xPtFm{=@frz&qJWUv0hCPTUcXLq0Rj07UwQ0K~ZQr~;Z<0L}-%-I*DBp-_NCA_1Z#K|Gm+cBkXaCGnYU+aL%6 zh@uD-ug&9QIMOtDwzeij2AG|mruD-^ShzP1$xa<|7gc=P?EN`?#Tk{%rQnw<3VpJ& z(iegY@MC`;Ov8YMk^!kq29o%bFbX!MIQ!XI!@M^w3%>5{!RCu82aG`tkB;(Q&j&Cu z)GgBly;=nU4aq%!_)xwL4@;%!HNXmvMS!?P*H4!xCP0bDA&&)XHL4IsTmTuvEn}tY zeE=jh%A)XbXUDlu=W-BMT!1caD?&u>ix`A6Vx4$;ytG6gEiOje1%wdjb}jf55rk&q z84m?uV*XX!dQ3q@IIOCt<|sllJ(!=TPghr?ML@zDXyG|Py4_Po&w|2(p*M*9)NujW z*0NoXJY(MI2l-oZ0cyJLM8O|{-*X7UAp9efjcdEjPq556hC>0QQYnaGNcBd8x72~q zn@u3@33z{Qjy_*skGKoa8!NzjPoDSQHTzn6hnCT5aiJsc0zb$}5w~_C0jTI*3q1*{ zfuJqOWV$w24Yx%?CVF|t;LR9cIusF+>yYw8y>*G?uO-39T|Zde(5|2?ce}% z_`PQ!%-^4Q&y>yQ!EE*#mRr}a(YNLI(TY&R){2Fn2INz7jrw(jkOHPa`-TN6@H;;4 zibApIjFsJ8h+*gzw=bmrW&=acdO-_M%r7gMo<$gVjz>SF)JW1{*%CFy8R_)S?r{ zTwD*X+&&TEbfJ+&mSI!Ol*aDFiQiNe-U~5rRCrx49Qdlkk6DLDzjNCk{$`7dS)N`k zUJi>n8>>~8ybmS|L^U2)-ZRlF6NUcJ#e9jLDTf^`SblNUo!-~s@U*L z-+bj`hJfsjIo}>^y`0avjlHwT!R)YEQ(FQvFDH9Pkogv&hbx#f7#R}uHD?4(GWQ4i Og~8L+&t;ucLK6U0m1GnE diff --git a/Resources/Textures/Objects/Misc/books.rsi/book3.png b/Resources/Textures/Objects/Misc/books.rsi/book3.png deleted file mode 100644 index ce11a89b0e39cc89b90386cd6b4f771b9ce8a16f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7f3x z#WAE}PI96|g2AhXKz1Hpb`ukWKlR^wY`D|TCM7I6!Dw*0`m?q~M8y@!8XyRjt)Kg_GIq-^)Ey$tvujHaDf^*rHEbZL>=VkDttCOa1xVmz#uKYWz zQN_Td=->)wH(3J}*$@B!wl|hCY)rVqxR_5Oicewbvfn>{8kWjBc**iJ)$hBrq>tHQ ztzyxw=Ieg@Rd2|toMJp+rs(Lrp)qoEn()%R4Anz{>=&4T9_rAlKi+rh0MHu@p00i_ I>zopr00VYj(EtDd diff --git a/Resources/Textures/Objects/Misc/books.rsi/book4.png b/Resources/Textures/Objects/Misc/books.rsi/book4.png deleted file mode 100644 index c5f1aba4f88fb3037a86abaac0c6cd74250230bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7eSd z#WAE}PI96|g2AhXKz1HM_KJ!>=@oxx*+`$8m%8K(W58*9{i4)_hk@w{&!@UhOcN0~ zuyX1}mAMN(w#YJk+POl5IsYT8!gD6(jSv2R6I*mea6a3UCmms@KD-dT=;i6%;^ozH z_0DehNfVt_#Cxm~t}r@ZWc+`>ULt~BfZI(LXsO~e2BEB7^XJP4-(*y|@=@W#^V7as zmJBzfl$P68y!{g0^w#l_%!XukN9PTUpIbJ&tdvgbEV#mG!oU#FsBJQ7!FvgyKNvh+ L{an^LB{Ts5fT(1n diff --git a/Resources/Textures/Objects/Misc/books.rsi/book5.png b/Resources/Textures/Objects/Misc/books.rsi/book5.png deleted file mode 100644 index 18172241ccf543cf2175717a6da12b981501a706..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7ewn z#WAE}PI96|g2AhXKz1HM_9cdY(tr3Y<2@}Yp;^pu<K6@+@iiZ+u>0Y2ObM1=psx=R3l^qLiknIGrt?wf!H yZ^)^fW8BOk-NZXXf4=XOU5e8<++`h@85mj<o;K9A)it#xFc%AT1eRkQP8?zMk#C z9xq|!%s=+g1UG&g1ep*}2*Au;*M&1|0q*5OTq}ryE6=-vjHEN*IF4*7P)en1l|qOy z7S^O`s?rjMW7uDSy=A@LS9#to05g9F(1B0}sLbmCZ6UNWkRSxpqTucomsF~~7C@7^ zij)C(znQIdmH{3_=cho|)Chnn^$S4drn}Ko`COO-P`Tro9@)VR0Go!|%!A1>2D14+ n4@v>}zAtQ|qke^O0QiNT4!Tns3Oe1^00000NkvXXu0mjfDxZoj diff --git a/Resources/Textures/Objects/Misc/books.rsi/book8.png b/Resources/Textures/Objects/Misc/books.rsi/book8.png deleted file mode 100644 index 6ba69a8c482c525d9024fcd7efd5f2907354d561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0tb^ z#WAE}&f94lxegf!w5<;)Fce^4{y@Rx2g5!GIoA)WvA-oIxlU;CHkqW?6)^jtW8ma1 zyg@tbPfYl;^EZe1yP_W(1sE9H7!{VTnHscKh(mFcA4C6>(=XXRePnV=`BpN|_r>wu zsgae8dl~dBlX>_yu^Lc@Il zMgav$hgu`YhyTB`0*#-VQ!P3=s!-c>HI0{hB-*&YoqY%mGl#KQD4+ zVBt|`VCR)Zk!BPWz^RqdB%Pq~gdG6#xu_@uZ}9~n=K=$<;Q#g(qSO(e2E@dOR?6_| z712sbON1O8gw_1`L6VU}Bo`0~4#&na*v_6kFb)7)zIZXo`l#XnaxEv>0U(Pm{Ru)5 z(_>i&7MmIgVbe4UK)yU23$ZZE;T6M?BS#pv-|_>?d8%!qPZYo$G3|gD!_#|za9aNV z{Ri4O0ND{w8T`ohIYkaYID#_EDRKa{z|eF6C_AFF=~52B0HyIxz5__8>3)8GOl1d< zP{)J7pD#D5XaR4Z#M?6V4K)ZfIu1Q3p^H008?oXgcoQ RW)c7Z002ovPDHLkV1k|plJNil diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_boneworking.png b/Resources/Textures/Objects/Misc/books.rsi/book_boneworking.png deleted file mode 100644 index 634a1c6f0af51ea599d1c50d1799e5afb3cb3278..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 zcmV;g0#N;lP)-4v7Tc;8n!SdGx7xZp>IwiKQRB-zKhQ*yC=XSm4V0tm^haWhF7P= z2t+})fI`EDen{BWn&ArZ+5i?;gJT$nO`v?J!vGi4*0QWRZT7g-5tajkc^?cV;7-$`pZp%;vakIU%C{aP4EDygyf0uk@e}4u V-6QS>v19-M002ovPDHLkV1f@OHx~c^ diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_borg.png b/Resources/Textures/Objects/Misc/books.rsi/book_borg.png deleted file mode 100644 index 8ba4772575f76bd90cf827d6e1634d7a3a13855a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 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 XUUrsBnT=L<00000NkvXXu0mjfwrmCe diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_engineering2.png b/Resources/Textures/Objects/Misc/books.rsi/book_engineering2.png deleted file mode 100644 index 853eb6cca42712d3dc47c5b6726321839662a074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 672 zcmV;R0$=@!P)RG-AHE!_QQm-i!Q=0R$W9;5Zy>n zI%-~MbkQGBP!JJP1a;F7sf)VlB8j>%BB>xKBc#$|4V!4`ril}0!#U^d=;rBNzo3ga z=jc`#`@(bJyyrRZ^EvPNzPyjbKUNMP2e32%-1Xk;?Uk{m=Oahm{&~{+NN=eNX=tdh5%l?ndJ1b&Ddq1*l%Vr zqB8n9AODa8YnchFWcjvL72>E9(aZy2E@ab23*?DUm&}ZXBx;YEnTVHi>g0NY1AVM0 z9~K_5=$=wHK!5i|;Xn)hAIAw6&yf_%JvgE;HX5d+teP)Mk}J)Zsjc$}fVY_ia8-43 zp)tY3=LufE?&9$il~hV49JNwlUrVubCDG_C9#1_tTY51fT>zaQT=<4|QeEk#;ot}k zd5Tx>m*WlW`<3JOrz0d*$xwY`9_SA25J5(@w9Wz}C!I1ioLK-PXM9@8c%Qi177vi_ zh8EHf_H;!=KX^mal9~W_TaFv_^>?+k>dRYNCd>h3Ltg=iTF2}fN=3;40000VQ!P3=s!-c>HI0{hB-*&YoqY%mGl#KQD4+ zVBt|`VCR)Zk!BPWz^RqdB%Pq~gdG6#xu_@uZ}9~n=K=$<;Q#g(qSO(e2IS<3R?6_` z5z$IXON2^FaOTh0Lkw(xjxaDTuR>LG?;c4;l9dZKZ)sp)h;?FMl>fwVIG~-u)}oSu zTtJosd^Rm&cs)6n;eQqb!&_#`ax%%fLB4;bB*wt}<`2U&ZgB=y9tMWPC&&*4k{w{b zd^W@9NhJ)-NMbfp9~sC6Bs<{y@oEMZQ+A-Y|3K*LKf&VvA60;9Mus%nI^fi#R}5x( zVhleySiqV^U%q76a*2b%NACv%Ie=sb`1&+3Y@XD>VD8G#AbQ{t*m4j6(I7ckHvIqo z18p1t10bIxJBnODRxSVqH!RpK4Y}!?3qTfbIgju)DDl}yF^~<&iUOGB;1W>}B1Uc~ zP*jY86XX_%V+2IVGlOIYh)9=Wbp(CV0FIi@S1S%f?&s&nRCWLfbvy|C`Erv=4gj`> z$Y~E=JN=emdyqH>?ASrj5NyCa;Ve<=hDft~)B!XE070*c8E6EpO8@`>07*qoM6N<$ Ef{Pl_WB>pF diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_hacking.png b/Resources/Textures/Objects/Misc/books.rsi/book_hacking.png deleted file mode 100644 index 1642063f7e4bb3e1550cb1ffd8d8632b9154088a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVbc91gqZ9-=cvwS(*Cga3G&uVQ zL{M9UC(+Ol(Gb+qEHoHs;MUP-=im}HH#CS8mO@}$?;Rv$$=&_Z3*o-Yk01AY@B4Yj z@9}R2yOw~~e}JD{ z({Qw?!HKelZmZ6A56n6+e{xXks0jnXpk+;`-FC7iylY4TxQN9d%W^N*bsd>X#XSIS zep@d0^0h<)a1(%=H(0YtlGMwWKohwKLhMF#d8}5^h(@W~&;XVd1*_}lILLhrU9aO(6cGrAu~97I40MriK_HogSSa8+mBLJ^#JbLK7l5Cfn{x=T2$qi=p#P;) z@_F2((`M}S)xN(z4i{k18^6HJfBV*bdl(V`n}#U!;Qd|Gavrn=pt7;ggm5U;=9=-G d2Rwjb>JxBicgGUjRB8YK002ovPDHLkV1n1>)@uL& diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_hydroponics_pod_people.png b/Resources/Textures/Objects/Misc/books.rsi/book_hydroponics_pod_people.png deleted file mode 100644 index df41d9621411feecc26b8468e5a251ad02b3d164..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0W{ChIfD-~RO`GNsJ4rq&IR!PQC>Az66PdyJ_WK!vCSd?B-)DK)InaS{y}*cf$*)KV0I~ zRf`}JYznS}dRC=w*U6=F^bO=Z=Wbh7Rd&a}aY+o9K{b4Uaze*w`G!x&Gbo89Kb)UD zTYgUd{6%)Ye`TdnW7pk=`{iSj&HgRxv8*f-&wJ8*aJm;>MBNj#S1QGch z*zl_j?KPQ959w6eYumO>cQ(Q2cj6FGKr59n7iPi*DCc!n_G*|33*$+ZvZmuWTONq} zb{xFnMPx%MoC0LR9J=WmOX15K@f%?=_F*sZm^pK6$YtMu-)B)q9%8Rah(tH1JtGxT)O-S zfk~O45JEyQhLl!i97_;_5D^%exG+g$leqXUcvuR1$ZcBfk5q|?E&EDbQY8q5!1H2C4!0RU1;09@Cl>imWP z7@l85@*5c-2;TCVG#U+r5CC|dhY$j#6jf&jr&@`Wd7xw*fWxx`>h-z~?0KHH)$4U# z8GuXoG?LF)6_8Tuj0=SV0F6dNg9I&!qgVjzViVIeky293mS}lRgb*5PRFmh$TmS%y z*%ENwj&{4P=L>~`whgWZ`aqfsfIslZzFS_CcDt=hZ`-yG9w_Qx5Ni_#a$Q%Cg%D%k zaTQvDzTanQd1-8}m@T1{(t#(lpDO^|+=Bi6eZBFNQml*3KLQACK{}P5X$$ti-?ShU zpzrtf*r`^4>)+9~ZA{ZdDWzKw*yjomD3{MqK@_tkUHV`?m(OD)jrpI1wOUQzh_f;c zu45x<;Co-``MprTp--l*jqRaamU<(mjA`b{M~aa&c=25Fp!_=2f223z*2ea&Z^A&C mbViT&KJP~Iz0gAcT)zM$)83daP?8P+0000B~Hxqz5dC}`t#f6a@`5o2|&$l+r~R?fp5}~{RqhLtLF1h zh)B2wOw$w%MOl`@u~J27SypFEQ4}&mV%Wnv5K;iX?>FXqYGon}!~Ou6?ufYyHhZc%3sv2YMH9Bo3!&kq z0BDNYFThi6%0;|q_Y2nF`##Wypqb$2aU8P(m6g&mY(wywt4etv;1JwgW%gPC970#a zItyef{HuH;&x^wW$ei(1oAt|K0O)N<`!9YcKQxUFKd&Q!}%!00000NkvXX Hu0mjf;R~1k diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_nuclear.png b/Resources/Textures/Objects/Misc/books.rsi/book_nuclear.png deleted file mode 100644 index dbf95833fdd79e377a89024e13edd91de963b3bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)GddY3PBfMx_(7P- zopbN~-E+=8_j>W4bp>z*a5(@Tr_x`ox!XsXE_DH5mzxkAF8)Qj*q#fZMcb-D33i$o!juVPZ$CGH zb&%ZfPyIO)yVGH_Dy`_x$?|x+4?){u&J7?_{NuFsOij)uf%m|(`FZ@NEt<_{^|svd z=8=tNK$o|+`Umh(4%Da)D6JM?sW}Uai`_d3?b;(y-@XBOYpJ$a4&Qr;hcgMhn%ltm zQxShE_fPcGb}Q&bt^gHD(!F5!08jpW`3AD9#S?v0w(U`_0O4>LUUI3lx7X3mE4NQR z7>`5R--lvUz-pJmbtV8_dBd_IPPQEGI@)rj73e*o()Ft?dqymF^9eIa!q zPJ`EIC5l5_d197*a4BO4(ul@n*bi3hL#)pPb zF-|&$C~a@!8lCqH!s{*5e^zW{1TrOJW3PZ-(GT#%<1=}L zdTm3yXJ^{x$;|ipW_184!!SNTj-6>cj>GD%W=num?s_ihx}F>JJTD%v6aYmCDFncN z9&s%JW}Ak<_P4^zwHko9@}nmWfZ6j*KNmovBH^3Vr`U!~y7Xpwa zApp_r*#Q_%x_fYt48U;4qaHU`5**%X#&L1oWNB?ixpWTt*%$fmafN21@ zuDfZPM#z8=vN#Ih&;0de3DWf)T;1I6ywR%SN zp);T;3fjDFTXZj12r&>m=G*{OzVCys>$|!vOGwics;UAJaRX5EEX$xMilKHK2RzS% zD2kx(`_ltZ)pfmFaU91G1Ob?)33-kW=}`bXuUm}TYa1P`jjQ{`u07*qoM6N<$f`EIeGXMYp diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_science.png b/Resources/Textures/Objects/Misc/books.rsi/book_science.png deleted file mode 100644 index 47047c958a032b1709baf9936c6b06fe55b7cc34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmV+;0o?wHP)@Tc5e_}9eN`-LBZJrXi1iW5SLc!VDn2-|A6_RL+ESY z*U*pvk;uQpD4`s=QBYn51&Yp&gj&8iOpv5A4EglwJ{yl-KD%UFtDsdtL4ku~HLn2d z>&wpCEJ!)4KtqO%8byhcoFxkYK#J6w(a?1KqW52xD37jfv&L&PP?JYPFJaOzXC3MJOJGE psUHCj4xjVjai^{4!ARsMxC7sySvz04@h1QP002ovPDHLkV1obPdglND diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_security.png b/Resources/Textures/Objects/Misc/books.rsi/book_security.png deleted file mode 100644 index fb1a4028e8f4ac3c83683d1b1415d0157179d872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmV-F0l@x=P)(BbLBOZci<*>0_6T?8(n}*&Ve1EQ_c?1 zEoTSlma_wN%h>@@!1@nxPP)@>p*MhY#sk24KhqRI1eN>X)LTjKg9gJ-Z~^5CS}WMb diff --git a/Resources/Textures/Objects/Misc/books.rsi/book_space_law.png b/Resources/Textures/Objects/Misc/books.rsi/book_space_law.png deleted file mode 100644 index 524f10b76c4719fe9dc921261121e653c67d8a81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcmV;j0ZsmiP)VQ!P3=IdgGcf#rN2Uec3=E7EIRIvP-PH;P z79Mp5c3xQ&c}772oO;U`O$a)WpaVdb3jy&I?G6S~K*j$vM5!Y>4G587IVsUaQX-Th zLd`P<(f~!dKzBbo!)3>xlo&y}16;15hJ*Mu1bdGbss1O?0U*m?zI+S!HF5}m*dY9j z#1J9c0dYXfVLo(0Vx#jx>L!p75+sKJ2!KL?6gjFmU=h$)?!X`h0rZ3i^1UupZYQmx z0Gq}5_^Kz#?$0+5vkkO6Ww1c5~)W<`=5083!lq5_r%NCh-Y15|ZD0Wjzn;mG&s zWdbOtEGNM+WEI7rs6ej=VEk)${*h!JQ4RoEC_9^#;c@D3FdLNDL41(EVdVo%45S7G zetv#TJqI8MDUAINY7s86KVNQA#{r;*2s!P+Yp355Y!4FUfJ!0^!3Me$W)r1uXqAMc c4xj}9039Hg+zFV-#sB~S07*qoM6N<$g2#`WJpcdz diff --git a/Resources/Textures/Objects/Misc/books.rsi/cover_base.png b/Resources/Textures/Objects/Misc/books.rsi/cover_base.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6f819a3a116963df4aca8bdda0b0131372373b GIT binary patch literal 288 zcmV+*0pI?KP)Px#+DSw~R9J=WmO%=GFc3w@(nS&>P|3C)!6VqqdJYd`R~0c3sBvdk3I**<0wF^4 zHiArMUPuBTAd&cYGD^|2>lVn4OF8Ge|CLgt{^;PSe--7q_CIwuKA1(gSO4TmcF}1m<~;E8s#B2qHjvs!jrLhlZ}4 z{|JmRkP8t{03h-aNGXF2CkYs1;tKe{9qvpJfi*K|t|5*F5=#cINEVlRcI(7 mrIxmBNs&w`Px${7FPXR9J=Wm9fsEKoo_Kn}uMbiCO>}Lrfq(hEJf058zYz1ipl=w#3HPu^=In zU}&7ei6}5zY#_3~{xiBJTdZG0fRnjr4)+eghY$ZdH5HK%LcFwit){fTv^eMdB?BtP zf5-&e?H23x8etfUG)={K_`d(N(VsHG@puHK6oe4yx{h|c4PDp2=*HtQ@;t|CwGyMz zNI80`(D!}O?REhGgpj)$#uxy=^E@n2#`OLYhFQ(?J}^IGs+?#fHNn8jS{Q z+g7O!Kp_E2sQ`c=2yne#AL@z}fZv}(bpoUbBuRoi&!r1Bn@s?KVHo8zA%u__Q8K_e zmm0W-N($03jN=%lX~J=wyYF4sh3mSNXT|udoCDGX48uSaML3_&m7)cYCPNjefx%#a zBuOg8itC>{e+B6$*zfmLZE3{rC((H^%UG1c?D?#p67v5dUsd1JHMqkxZctOx~@ahwDP_5;Q&f0dc9s*oH2&YW>Xq*T^EcoFvigD_Yp-A0ARPoO4)~C6iW| zOeXL78O>(18l_as=X11LE!eh=dcBS;%PP7o%MgYk;y8xqc~6=B@Zq2G3+bf|^9JeM Q!vFvP07*qoM6N<$f=!SD=>Px# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/cover_strong.png b/Resources/Textures/Objects/Misc/books.rsi/cover_strong.png new file mode 100644 index 0000000000000000000000000000000000000000..61baf7b5778f1262b40dddb7e311c4d26f3fd733 GIT binary patch literal 470 zcmV;{0V)28P)Px$kV!;AR9J=Wl{t>;KoCG5-GD67*bxFD!2yVTByPfWH~^<0AV5T100fc&Z(#5; z!I$|n%;KJ5kb~hRos_CyS9Pi2$&Fqgr(NWHQN2(?ltyCHorB^WIzDP?&T)9%o?~GM~@s^?LOCed0KN6C!KkY+Xa6X^Q5h(o=<^reFsT_g)^GPYo5%>-d6^NqfegP>ZQc4<) zhE_?Xlo*Bq=nrvkq3<2VlWdL4k-Y*r}nz@qLn2z= zUNPi5tRTR0!1qa0g3D3sAN5DMD_ScVE_oJahkJ^?E?6`<_{|mdGDijn7Z;b56*u+OAdsgX;g$tC?SMc63Dk2w-HWSogY=HK`}*J63>p#jkZuxxnwry4n3`?gh>{ne{qBZA*{u_Z^a;tkk SAJ+xCkipZ{&t;ucLK6VBy;Udx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/decor_diagonal.png b/Resources/Textures/Objects/Misc/books.rsi/decor_diagonal.png new file mode 100644 index 0000000000000000000000000000000000000000..50f6f591834c155990cce00c1d40198ebda72db9 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}8$4YcLn2z= zPTR%T33Hm4a?@0xj$Pjw2<(q&oASGIFLFZ}NJa6!<|@>vrW zoQ(3{%zHJ8{cdmCrfbs4HS7M!@0Msg7{9yE`!= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/decor_middle.png b/Resources/Textures/Objects/Misc/books.rsi/decor_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..ca4ca82114c9c87b69ca5cb8b1ae0a6bcccb7e39 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}>7Fi*ArY-_ zFB$SR7;vx#nCLyab*1xnd|Pxuv)Z+daR)klyY&8_wSU5{z{J47k&<@y^qF{(%1srF zp}E!PVx7a&yfl6DH|@_?SaKlp^$jNX;|JmvstX8y=fA_WROHr-<0e3DI|>=sJ{LGO T!Rfs|&`JhRS3j3^P6r)<6{Yn!`g%dY9YWzSs8smQ3%^)K#{j+6`2%ZRA# z(6>9+I;wPN^z+$Xub%Fh!WOZHkI#XD>4WY8v*r2+HhD7`AD*>Yp5eexE-%fr!=Vgm s-&iBQ^EEux4!9ci`S&E(iKW&v<|v%~e{b4GphFluUHx3vIVCg!0AU$MIsgCw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/decor_vertical_middle.png b/Resources/Textures/Objects/Misc/books.rsi/decor_vertical_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..75f141ce40d4f667c43efeed5ec3a3cffd66dc2f GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}b)GJcArY-_ zry24!D2O<(F8tY|T_DMK&NU_Zcx#KGIvcx*fT`LyUwcK}d>w}q_h-5_E4BpX3oR&g2c3KWIV`;u#5V*l6qOP3w*FE(JLAcG5e21RyLGJ=tg791J&OCj zxKzN^xa_&_W=C2qa^air@?=}t_cNvp4YszGhHQJ~HZ(EvBsgd#Jbfs+H13ePvfcll bjt;)-Q^mim*42mxTFl_->gTe~DWM4fCJjJM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/decor_wingette_circle.png b/Resources/Textures/Objects/Misc/books.rsi/decor_wingette_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..a9d9afc120782b87264ef3ef0d4c1c362df51e7c GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}{hlt4ArY-_ zryk^OP~dT0UC77O{XnVbxKfEAPxphBot=!{S0pC??|b4bZ@a~Xf#HMUWHX86HTSA- z73HO^DL!&W#3^9^YQAYft3fyV)>>$*iTZpu2h6pSaYc|5IUO)|rQ^*0z5cUfMsr@Aovv;#Tmc$r)}FC%hQ3Ug3McH)_#)oXMXVBQ&7%lwqE~*cglZ( P)-iax`njxgN@xNAg@8R? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/detail_rivets.png b/Resources/Textures/Objects/Misc/books.rsi/detail_rivets.png new file mode 100644 index 0000000000000000000000000000000000000000..53a4c8bef4ca7536b978627c095e3fad0d156f2d GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}9-c0aArY-_ zuPzj1P~dUCDEFKHs-lI@^p2HnoCib&{@?6+l9j~9V1N2dy3pxZQJ`MDh%=^yS!0x(2^Q@!awDZAY4C}=C54^5jroQaq&g%Iq z85@q2_T0<;EcGg#vCWb>;Y(lQxfh+j)n(yq_l?&SpGsO6@A5>yhT-xa^<(!!oIV5H O$KdJe=d#Wzp$Py&1yg$f literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_atmos.png b/Resources/Textures/Objects/Misc/books.rsi/icon_atmos.png new file mode 100644 index 0000000000000000000000000000000000000000..518623069e8e56f266a1f3f23f86ef52559859d2 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}8$4YcLn2y} z6C_v{Cy4Yk1sYsw{Q1=V|KYg5fA0T#`oDfxgvS0t`#VaXPxlAts2&&eS&~)p;{Az^ zHykMi|8DCC^(xD^K4TSfWTs<_VErGF8=s^D#tB8H9YvDDzUIZPSs?4MBU?m z|3688|8Ktk&kOrl9rtZBqS7W#VY^V<|{Ln2z= zUfIZXSV7>}$NF7X9Mkss$Q}P1x3FbjQ+1qfa+}b>gE#qF*W{iT(72Odbn*8d=YtZ- zJueN;7r(Ymwpdir6IgrBb+=%G%<*||e=%q-6?0-xXmRlJwB-tAcrJ6V`daDH>i%NC z=>7RD?g6YTwg!1IE|}u9_Uj!6C8H;E7*AL#D?Q)ablk+WqC7Ej+TU-t>>oaVqO?hT wSL}M5?YZ&ymwVprTz^#J_VTTU$No$e=hC$=ysPL8bUXutr>mdKI;Vst02!TSmH+?% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_banana.png b/Resources/Textures/Objects/Misc/books.rsi/icon_banana.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2a65741290b7ca97d94b98966746b8594fb01a GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R})t)YnArY-_ zFK*;KY#`F|(B3V3$w#Ys>cJJJ>lOGPDD4PH40v$o2FsU=;Mv}8k6v#NjjFyc{Y>*Ex0UPMj^+KcZdclrs)*?kji;qOY&{+aK4Nv4nRJ*@ qZsLW?_eQn#|74Q#XU;U;&YYsFb8Y>TD|dm;VDNPHb6Mw<&;$Sx-b*F` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_bar.png b/Resources/Textures/Objects/Misc/books.rsi/icon_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb7e7631f9268a3e640dcee2614297684d960a8 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Q#@T9Ln2z= zUfRgZWGLWrvHk?_1(t=@5uH<78jLg=<1!91af}o^Mt|ZH=n?zJq4+6 zBUUpC3QlC*SshrhdZFoyY5e+|C4@@FoDZFuRkkilZuU(9XQl@`Y6YAhRoyr4-Ki}j zr5|wB+b5YVVf)UK*7J|vJuQiwzF#-~>XkPx#-$_J4RA_kl>P3*!kAz6f- zzzzr@!RhvnQ?q~&LWq;OFhO-)=j~nJ_taZd@(@BE$8lXDguEx}6Ru2<_a4?-#28_% zh4-F$1^{qlf}C?mDZv=C?uQD9F#-ULF&Ksc^E}f6z8;*WY4S8pFZW&79W#WBhXDHWSSH>`;_!-jvZL!?^isof&zW6ZT)vdM8JqBS zyuACUG=Jq1#-hf1T7I_u9d&2_U*2+I8lMIC7rqyHlW%{tnVwkM+lQVszE+2Dqoy$~#1eNf` zMMr9OFuz;pp>kVhlgX*y-~a#r@q=m3dHw7I9}1EcBhxlcSlrpz*ytE@eman9e0aY9 zJWu_;dWGu}mxL9Ketdpxta?kcoWb-!gZd$$t!@W3Bv=_l=j*)YR_|F4bQy!EtDnm{ Hr-UW|)Ou1O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_cabbage.png b/Resources/Textures/Objects/Misc/books.rsi/icon_cabbage.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c806f92e25fdfdd989bc373155574ec490e728 GIT binary patch literal 439 zcmV;o0Z9IdP)Px$aY;l$R9J=W)4fYVVHC&lui2X^S`=K2$X=j9q!%KKRBCC88Wij==r4%E(V-y} z`V$&!YtW`_sHG(o0txSf6@?I&1i7Y#SlQOlYgya6xGv^-ENCc-Lbd)3z~$bJslA`GUkN~vWrDvvjrX-KH*xvS6RD?jNt96jiIiHcs~ zUS!dROV-SG+W+GL#EF{nt_9XDS{?6rfMg`$7j`u|J3YriY9C9r&fu6QzA(RdmQm8J hTwv%YNRsrYJ^*#iO&Tt4 z3f3$vOP4(O^Zoq1iLy*OPco7c5)vM4i|#5oz~x@lt9YL=ed3KrDbfC_>=nGJ>;{1g zrfW645pdvbX7p$|mJ)4wLdGHN;lTq9Q8JUGIeLMXbGaQ{z`!6~qnKYe`}TC8`xrc3 L{an^LB{Ts5F0oHI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_corner.png b/Resources/Textures/Objects/Misc/books.rsi/icon_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..70b68d327ccd07162249c512d83c3ed024a95be5 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}&YmugArY-_ zFCFA$FyL_t{61eNJB8!?H<1?%tpPvs8BJZ78rWB9O}cV7Qq$nzwsNjJ2e)l5>Qu3Q hoxi!RjtOW&yhW~+#%ig>;opHA22WQ%mvv4FO#nKQE5rZ* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_diamond.png b/Resources/Textures/Objects/Misc/books.rsi/icon_diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..268a659194e695504a7c035898eac45041d75cb4 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R})t)YnArY;~ z2@rU2;gA8Apd=StK^Ip$%LjVQ#p?>uh*;9ieD186*wj!IMLq7xTKP^{CHuI3roG_ zQkS$vr`Iz#=*4e5dwpi{YKPFRm7K2x=XnPN$X`^C+t_g;xa`pp=kH2W?=}G~V(@hJ Kb6Mw<&;$UTnmG3W literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_eye.png b/Resources/Textures/Objects/Misc/books.rsi/icon_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..11e47cd11d39a70139092188cbceaeec98c9b376 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}X`U{QArY-_ zFCFAP4FVFJ2Y}UZSaNxeBcj1>?MU%VZ zZvR~Kym<3h6VdOgK`W>K*~Jps?tSS?$`6@Cg3E(S%Z=CTeQ15?Z}3N$iD3it&pg%h TYf?2p?qcwC^>bP0l+XkK^?^Wa literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_fish.png b/Resources/Textures/Objects/Misc/books.rsi/icon_fish.png new file mode 100644 index 0000000000000000000000000000000000000000..7baaa1318568ee93c75ec992c2509f5b8b21ae39 GIT binary patch literal 342 zcmV-c0jd6pP)Px$5J^NqR9J=Wl)Xv=Q4oc{jaw`%7$FG(3w;B@N`w_F8&U8%7SiPfd<6>|A3#XE zmUgky&c@n8;Vz4yAY>sr7Gd*))!YlI<|{AEnR5>_1BPK3h9~vgsmSZ5gzB_>ii#`| zfN1xN@kKk>gc|u6NqN~9$&qT%2{NEgpvV#_?}xOiDeq~Y-)onB~JYJOm)JY6L&pGa%6Rpe~bpkM(gM*Xy zzvkx;6SZFKV*pr*-KTMb*A|@ZP3Av8+)vkg3#vg!nnMI2IU+ghTSHhxzHG!d1@9SX oj1AN)37Y@KSDIsgCw07*qoM6N<$f|Z1gegFUf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_glow.png b/Resources/Textures/Objects/Misc/books.rsi/icon_glow.png new file mode 100644 index 0000000000000000000000000000000000000000..030f8188773d6e9a44ad2aa33c346fa1e6188c8e GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}3p`yMLn2z= zPB!FXa^!K17YldUuw~=i=!(w0m*h@zS29%#x_yt%k&;%-)H%~^FxjE*kP5SFpor_o z_Yo$JmpIBPx#>`6pHR9J=Wk}+z-KoCWr5@QvvRQL$fD7eysyTEonf{x(cMT!tY2)T=n;BG;k zVYdhlDsqL?Zj2qJiA?G-*aYS^vs299Kc4}^Fbu=EGMQ$`d*3_fPJN7#5Q0i;q#1I~ z(XQ90{(i9_grJeqB`}}O`mf!Nq9_0u?e}c9Tb0(0W(Z(9nGDbFFdl1VbOz?$vwHpH z@cqui(?3nCKHhoXwNaBrmpM$Z@sDs!!Z6WKcU_}I{hAD(*OVf07*qoM6N<$ Ef}?JQUjP6A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_ian.png b/Resources/Textures/Objects/Misc/books.rsi/icon_ian.png new file mode 100644 index 0000000000000000000000000000000000000000..04109c503641052daa2c59f2a1bb05665bc4d34e GIT binary patch literal 390 zcmV;10eSw3P)Px$KuJVFR9J=Wl+Q~7K@`V7Wq4flqy*s{8oCMw#^ANTK?EW264A-KNB;#0FTr9U z^e1HJtw1_>-OeG=VV#2qFWW(OO@iPpSeN<0z?;YW@trrrfWzT%IR2SEN$}ehaTKlX z)A1&E+9C!h6yW$qR&!qx97RxTwyD-t+H~3?uGST`W}8IZ&IAB_zT5*)QF*2<;)=>| z`K26W$^wd|LyD!W*&D|AFDe za(V6%^vju=Lxu_DRD)$_#&BW*7)~t9&McjT6!8RJkGcf@h{yL2!Z1W@jqi^zrVHHd zR=|@PaG^B-zCQvW2%a(KY%RnLV0g8f5BO7$}6Sn{{3jU98|`~IO(kN&7zd}#hX_ODplyZrytfi zqUNrXpm<#H{5(4)&ps`_gy#YYEk7dyBl{;tSk7X~I$|koD&xedpt+;NGhs=Z>m(sX zoyNrO^jT>K8QEVr_UqrDEG49(erUeE-JkkzUj*A+4gSrw-tJ*K$zVtQ_e=lpT3=r< mrOv=kZ)2bVm)pS!j0}E^&HH(O-{=Rrn!(f6&t;ucLK6VTv{;$| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_letter_N.png b/Resources/Textures/Objects/Misc/books.rsi/icon_letter_N.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1888e8c6aa60151d78b7febb46ea962db4970e GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}ah@)YArY-_ zFC64NV8G*iamntC|66OWGrZIk@LK3<*cP;RvHriZ?6kDBc;})CGX9&l_s!9nE3+VO zj@SfIMRpe#uNE1G1?M|VSEwZD?RJ~Ox`yG)rH0+z<@*!TzU8ZT-_s8)3Erd%w28sf L)z4*}Q$iB}e&9Le literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_letter_P.png b/Resources/Textures/Objects/Misc/books.rsi/icon_letter_P.png new file mode 100644 index 0000000000000000000000000000000000000000..12da61a0701403eeebfe88d0c2f3921119d92252 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}xt=bLArY-_ zFKy&KV8Fq0z<Ce<@1~yCrf`UJ9PSfq^Fs#mByYxR( z!(7c-k-XoYBuK{zZ$8_2i1*9Al~z^E`9afp3jA}@t_Uu3JyP&}(iew^yftPF)j3K^ bn~IoP>*SA>9{qn9XfcDQtDnm{r-UW|puR%F literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_lightning.png b/Resources/Textures/Objects/Misc/books.rsi/icon_lightning.png new file mode 100644 index 0000000000000000000000000000000000000000..92a115d2b6bf25ea262b3c5d0350f7037f490d6c GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}`JOJ0ArY-_ zCmrNHV8Fo~c$M?kJNpDDqo$YLj2sgKRPM{)JSL{tB2Z*>Yc}HsBW8wIJPZbJb#?33 z%AH#n`L?udpWPouhG#EpTV`6ld(qf^e&MG*@wuW(Kdq*@zj$=K-*6A3d-ZDH_i9

JI!(yuN1If%QPE89ZJ6T-G@yGywpXU_>DR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_magic.png b/Resources/Textures/Objects/Misc/books.rsi/icon_magic.png new file mode 100644 index 0000000000000000000000000000000000000000..80e61b35ad38bacee8d4586ac151af403bed5610 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}MV>B>ArY-_ zuN>rUP!Mprc(F>wEQ#|{Yw8WwX$i_~zb{VaJb3wC!k#nQ4L=)M99&#l1P&E#OfS(r zRvdTt`Ij?4rajVr_PL>`=8nJBp_0Px$5J^NqRCt{2+A$7-Fc`)0N?h68*q9u-g^LSk@n9@0-hvZ2>E_06ol1zo1lpz# z^#2=8;5`a~#D2yA0002q+On|f4!*L`6SQSvt2*EGA_Pl)@$$u17HG@D-Y-Wh>o6{$ zD&caai=e&}vGToNf>oWH>~t`S7odCb#>n?t02ltcK8F%1#mwLP9MmU^)l;}R(^el7V!iC_2%1ecJ7uOJ@)000000KlJ6?+(xT zZLY;zW8VfMQY^|;wq!tK>f%%VM<4qM2=aL+l=;c2cV?vX0WtUI)%nZ^_#DK10P_LN o2mH)eAh?7qdPx$2uVaiRA_ieW91j+G>iIWf_008)R60YIJTI-(kBw_cn*4m=;&{qPLy-qP63?cI?rBHrlf-0V-&D?K!95wiP% zp^=y~1bCy@Lle|AcHzAEhyahkxq$Wl9YcUW3BOC-TdJzZy?|G9GJr^WKOoEiqE#-% gz6gh4GXemBJCL=iN#8p(EC2ui07*qoM6N<$f(;0X!~g&Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_magic_knock.png b/Resources/Textures/Objects/Misc/books.rsi/icon_magic_knock.png new file mode 100644 index 0000000000000000000000000000000000000000..506dfdeaee7111d19d1bfa83cf796a5231979da2 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq!^2X+?^QKos)S9WNUf4IEGZr zd3)QDugO55^w;#2`^tQWC7}C5IvJ-JbC8H zLr-U)Rm-&ABYx5N|E1i}iEHv}9$^42KJ^|j|8&^j;p=zC^>=G3&mDeI12ptcxAj2{$=^EnTEak9c)I$z JtaD0e0svZPx##7RU!R9J=WlOYmOV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_medical.png b/Resources/Textures/Objects/Misc/books.rsi/icon_medical.png new file mode 100644 index 0000000000000000000000000000000000000000..36799b2f95eb42726182571c54d44f79d10f5442 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}d7dtgArY-_ zFCXMRpuoWzaEo=%hW}|f2Uyt0~QkP3{+)HM9Tm zbH=Fb+ZJxNdhgW3u4ebm%wHJCYtVioXWq28_JNOh1?HM>c%ywH?&q+7zCbqVInZVXPgg&ebxsLQ0E-MkDgXcg literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_medical_cross.png b/Resources/Textures/Objects/Misc/books.rsi/icon_medical_cross.png new file mode 100644 index 0000000000000000000000000000000000000000..970b6d3b4b65c2820fceb61eb083f4ea3faa21d5 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}6FprVLn2z= zUQ*;^QRHF0uz&VWhHc>wm@4>AdwOt8JHsjHr(CU$*IZh9Y4N`nrA2YO4UgH>GR(MX6>;mV-2$NF O7(8A5T-G@yGywqbrd9I* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_mount.png b/Resources/Textures/Objects/Misc/books.rsi/icon_mount.png new file mode 100644 index 0000000000000000000000000000000000000000..399560fdf65cbe5964288378fab9ac40b52dd278 GIT binary patch literal 311 zcmV-70m%M|P)Px#@kvBMR9J=Wl0gcDFbqXA(?M|OAp}8i)pL0SujLW4bLC3#5ZMU<>8x5tnb9^C zVW1C$6qBEyv;c`jB9ZuK5YZr_iP3n*6cbTQd7J?|IT1n37Q_aK2)eFw@$CkRqS(aJ zEr<*tqWPSJrV zP4DEUX$%0sx~^aUTNBI-<2ZWjdL>p>WwI=TBLfzt6fiSP)8wUn`Uc9fbZb9repD+q zutzDiiTCGFUXtefMv}(C2AEmgPx#_DMuRR9J=W)3HheK@^4I-y~!g)I<`3U<_E8fUT9Kjb$FdVk=7p%MApq-NsT( z3LnNaK18fsBaE3P8=F}Zh{ck^at6f0`<25m=Wv+|LI@#*`0qAsE_wy zDg{7&zs8(*rvg?JSch$$M_k_x@y$J*s|R$PIE7mmFlmO46ZYy=Zn`gAK316M6r&cH zH2eJm07fmC=#+MUlfmc>fadWo=Htt$fYTO0{vRNp$~xR-3xp8j&wT^b9ZLhpv>tx| O0000D74Xb^DX_-QSKz+kKZa-z1_K6UwsZ&A^zMVG>J2LDiAV{||g% yyB4Lp`@KGU!<%zkuX)t1X{wAYC>0Z&C@AeBP%M_u$?_QJ90pHUKbLh*2~7a(j7@?7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_planet.png b/Resources/Textures/Objects/Misc/books.rsi/icon_planet.png new file mode 100644 index 0000000000000000000000000000000000000000..784dcd088276c9137effb2ec0f23e8d2e47f6ea1 GIT binary patch literal 311 zcmV-70m%M|P)Px#@kvBMR9J=Wl%Y-oK@f(&mV`E!CVhn_s1-FmgQ7_V2GCTkLswO7f`qKD=mT&H zQv+zkc`%3}P5K5n$l0sdwzP6Dxzx;;Og1yKGxKjYyPznFqA1FdX;dk))|SSYoi8F} zSyri6bdmSI1aNr@r`-@ce+R%h7u~NJv)NkvKm4i(lUKNV!6nxR`Pu{+W5Td$4!tKR zHuJiDT%NLjEwu;$;Osf9Nh8?zBm4ljm(i`N30RH8$!9n4`2d6aV1LW{1&9c~c!T*6 zMhUc+K}=ENe;0^Iy#lsR&0l=LNh<_bWBga=ARoig{{cl&lr^N|NgZmL0?7aX002ov JPDHLkV1j#Cfwcet literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_possum.png b/Resources/Textures/Objects/Misc/books.rsi/icon_possum.png new file mode 100644 index 0000000000000000000000000000000000000000..5d25c82a913203c1551f3c7fa9f270d585844150 GIT binary patch literal 337 zcmV-X0j~auP)Px$3rR#lR9J=Wlrc`jFcgMABTfJgBhAvi5>uA2F*9~39XNmwlQS?y3eFXpH8&`W zGen9Sa|Sb131qYj1Cl?sS1I>$}Z0MPfncP;N0D5VxtUlc{KICxI5Qp!Dlym5Cc0XThH>h*3iAvizD zzZ=3~7^v5~@5IeH_e0eCNqV;+%d$nRwe~Hszvz?)?O^`ZJ;bm0U)JBO1a2| j67&)M#?2#vuDnZ+#Gr}{hjowD3?DLd^2vQ&hKDg&|Lb^uf~nf*!T>O zOUo1?hJ@SOrUguWvcAJ3d;6+;N{367{#vi#FXpU$YWaM=R{eR4sX?=RU8aB4xLh9| zx|c1^jQQ7tzd8|mj!WzIyQ?Ooz4^T_tO@80>z_=_UacA%?LJoneZk=A>gTe~DWM4f Dt3qUB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_scmmd.png b/Resources/Textures/Objects/Misc/books.rsi/icon_scmmd.png new file mode 100644 index 0000000000000000000000000000000000000000..d64e9bdd85d4cd9958b8c26e22bb29cddcfa15c3 GIT binary patch literal 280 zcmV+z0q6dSP)Px#(n&-?R9J=WmAwsvFc5{Gqcq-vf=RpqOVCr%x}~CL2{vF77v91pDWXFMN|1aA z7s-8%v25)7d3OdBMN$48le2l5hc(26y0Z8-x~9)MGmB~T>y`CSJaabJl?CvQ1c1$J z0B}uj==(MUI6Ty3kc5Zirx4TW{5AvVqGPCOE-@s_0Ddurorhnd0Z|HE(;MPx#$Vo&&R9J=W)4dA9FcgO2R}uWd&C$O>s23nEom~VMuhhkB=;ETII!Wm$Z7>{l zs)JbSA|!$!oM#CMoWpk#0!k^R{?T#~=AZU1YCc7`+nxDrl9%^C3$R>-`Ebyq*=iSO zSFto2^?bFCDz5#it_81Yx7*#@>U#^$0m`mozbW?%V9W&(%QzSTFb+nDSd6*+CP1_~ zRN~|e!2WmwAWqIin}hTFdj$Y6S&E3I-|al7&r+W@0C=Sa2&X~u4SlCqN-3oP9_lAb UA?^Pd$^ZZW07*qoM6N<$f-MGcKmY&$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_stars.png b/Resources/Textures/Objects/Misc/books.rsi/icon_stars.png new file mode 100644 index 0000000000000000000000000000000000000000..0970ada3f314c9a5ce730976c12b3e3cb6dd3077 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}`JOJ0ArY;~ z2@NIc9&fuehDvVDaxNWOBu&D7J!}Rqp zg+#5(bN<)=ytMQGi)jyqmd{l75L~V)v7yC$6SvZg{EOU+7&%)RJu7&4nl*TV1{-j- au>vi89Nit9H8U8$lHZ@!%p?R@~3;m-ao>net7IVaBRkSsklCei0CyYRFLi*>%n%4zH;|TNpfD{an^L HB{Ts5MMpXH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_stunbaton.png b/Resources/Textures/Objects/Misc/books.rsi/icon_stunbaton.png new file mode 100644 index 0000000000000000000000000000000000000000..d247b9163c5ec989bbcd9a88a403d3520b7bf092 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}g`O^sArY-_ zFCFA;FyLu@xV)l7)Y`eQ|Ixwf(w29R`1Bshi5;xIvryCRN$vM9{0kWb1p`$l?U{0B zYv`ljI;UTDO}}t-@^p#CcV2&}lVRBM(NB7Rk=uUR-e+?k{Saxod(%Dt!$Uj4@^d$j gFdi`RbNLd@FT$hGpz&@0X`tl{p00i_>zopr08AT73jhEB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_temple.png b/Resources/Textures/Objects/Misc/books.rsi/icon_temple.png new file mode 100644 index 0000000000000000000000000000000000000000..54bb81a404bc969f4a946a27971db9cac58f3c8c GIT binary patch literal 381 zcmV-@0fPRCP)Px$H%UZ6R9J=Wl|f6xFc^m4&T6G4%5c@A6G7-1t%gdMd`vO=j7R#aI=oC{*!5k*nJbsGQxA=Ur@LIS+JzTu)3YH7MU#Q@-W#{hhF7D8-#XHKPM4m4(8qbh2o*22%fl?Z0oXK9dE&KO3ve#|Pj5A3ojZO5-`UapZN{D(5 z-}g-=erJH35mePmh4Ie~2q89EIQl08buB?i0LRgqy4@N0tUh*<0WG!@(7C&k51nf@ z3DIq6JPF2|kdOd*zEl}F@lG+B&iB6w0jRfcHqTL2D*)RKsgIU{l<{OTo&We58M&}n bECf#Y%1F(;t91oz~44$rjF6*2UngBIaMQ#89 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_text2.png b/Resources/Textures/Objects/Misc/books.rsi/icon_text2.png new file mode 100644 index 0000000000000000000000000000000000000000..c87370e75da7ab47f478555029d369060e6c806e GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}iJmTwArY-_ z&lz$x7znsr?7S{;F#5^A)Vv8n0{j9l8@fYPbTqdKtp1-c^X`Ns6^4e(8}my`zTbQ{ zUCGQ{)mH8O@j1m)mweteHE7l6O>Jf7fB#iB2A!I1cr4-mTRx!q>)9jt9Kv-U*M0?Z O7(8A5T-G@yGywpo3_fK5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_text3.png b/Resources/Textures/Objects/Misc/books.rsi/icon_text3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef03b24174fb8fe88f2928ac9140e8f4cc07956c GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}QJyZ2ArY;~ z2@xDe57lqL<#td*g0+Q#VSbi{p-ECw1JD)*Pgg&ebxsLQ0ML3f A!vFvP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_time.png b/Resources/Textures/Objects/Misc/books.rsi/icon_time.png new file mode 100644 index 0000000000000000000000000000000000000000..13f0267eb5e36c53fccb7bdfb22450cc42aa5dee GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}?Vc`Ly?xOor3sz0DI&OMl*0Z1Hm6}JVJl<@&K-Yxt z@Yd7Y1t#wQ&!;$J`URWDjw^GF84gs}pZ6BHs9eKna@F9FMTzloppzIpUHx3vIVCg! E0LjBnPx$TS-JgR9J=Wl)p*?K@f+(h+-)=xfn^}DZwg|!W1#hA=n$m%FZW96GVK3fcOM< zmge#Zhm8b7IJnM$=j9;(8qvb`EM#K{7S4eN^uB7@*_q#OhuMXQh=_>)PAqI<#ViI| zJi%}@;Ie!dx{f%pVip4cC9cI2cXz>K~h6zAQPtt0(>GnMU>J1a$?Md}z28N>nrJW-FqlfSI@NPXyJ4J44Cb_)9 zlBSCdh-TpRZ4t+|NUvw;_C2p(`0G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/icon_wrench.png b/Resources/Textures/Objects/Misc/books.rsi/icon_wrench.png new file mode 100644 index 0000000000000000000000000000000000000000..99bed38d3c63fa6d465ce7b904ad7c0c116e0b68 GIT binary patch literal 473 zcmV;~0Ve*5P)Px$lSxEDR9J=W(@!YmVHm*i@BC)`nPDgSQ?jCjY(!T6?AGjVjWiCE1GSmjV#xuy ztfIC(Y*V%^DXiLqqx;?*wmn!5lsydD%`}8G#4=d>!{X<0aNUEqxV@kA^E~hKKJW8_ zrfHg{-I3njj{?xq*(WM_#$6oV)$>WJYYOS?{vd&uex+RH2425vlNX-H@;UfO*1tWJ z$?-BdKVHBvoQ#e3Gc`T0RL`yw+!6>#DD;(Pe=1!q`=q$-6y%sVPx$2}wjjR9J=Wl(DVCFcd{^0+uD)a*y1yMixlH4s`Yolpcc4JEUNN-!TJiHh==5 z7@7p-M;~mFz^Cx3tmNhS+V|!Gi9{li_;#$I)qiV91aX`!U;Q?ZXkI*fZw1u=7Ox5j z@>d8QC%>K<$+Q);7}Pu!9*vPqkGbLy^H72EP1!CF?-DTyZ<`lGzdLV-o_`F-iH@yp z|Bz|0g6eMbzKF4D56*#(&GEdgvm8dUqR#UB=Ihhtr(F-N(nhlJx#*u90QyZGCq*w4 z_gUaLSx$ESMzYFrq91wxD2%bE&tgRYfbz|*&Sy}*0RX70FZVODQ@$zH)nk3StgN8b h=6GJk^i3qbf*YzoN_Lo^tlIzp002ovPDHLkV1gP?m4N^N literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/overlay_dirt.png b/Resources/Textures/Objects/Misc/books.rsi/overlay_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..43d2d741d7b1b07d665723de698d863a327db819 GIT binary patch literal 608 zcmV-m0-ybfP)Px%8c9S!R9J=Wma&TyK@`S+N3h1*(qg$ab)&W!}KqzD$7&5gO_b{55J@-?%&yq)ix_rCXb zVU0D`xL{lg4OCKWc()C=4z#ho|02K_qK)l&f_B`xsf}&>F(LcastRCs`kqJdR7tT7 z{8Umr15)5q=w?+*&;aU=q`+U5p;UlJ%o6gsh~lEEn9ve*fJg57p<6crqmAt~jE`kk;+e^l*)g7h|!`X^LU z#7c@p8@sEdxC>mv^TsMv&VWmM$36ZA+|B?Wc})uc*XMaSfSB*u1QZw;-5D2j067evu6{1-oD!MPx$0ZBwbR9J=Wl}`$SKop06h9H509za@pfiBc7x=jaa83irNbto955KNn%nK?6W zbfnFEAR-R$_wnW*;BYwpjK>{V9k;>{GXzokT_A}eiV{tgBZyLXNelp}uLmqw8*P2I zz~izL{qUb+@9_59TWjn4TmfA;0EnWL%E(x71?GY+&{TQ*rbk7$8&(8}?o@DPRIt|o z1qM;dS`S<)BY}Qlj)+wOlR)m+QByF~-k}4^x&TSYLc4Hxfw904Q`W^K0h3)ZivURw zV?@{o(er**{vX=~b_e`0vl>iH?ttu$;GTp=cY#g<_;f@!WyS)h{jDvmDo$OX@eYSW Z#|!wvcF89-BVzyn002ovPDHLkV1hqTf^q-= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/books.rsi/paper_blood.png b/Resources/Textures/Objects/Misc/books.rsi/paper_blood.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ed27ad528221596340e4986230f5725963c417 GIT binary patch literal 686 zcmV;f0#W^mP)Px%Xh}ptRCt{2nmcX+K@5hSzyX3*O1(uyOF@p1lcdanQszcm&{FLMR&W3iDUe|p z&BLCxcM$k%fC26Quh;VsHh^ImhG9G{FVr7?y?>mR#~rMO_GWy&2Ix9~P1D0_XkooR zkN@>O{0;;8`dod~LGADM))!TuZ1AUPPX5jNpef|D>%;<}r9Y<{$cY1-pGL@t1RQ;i zhu1PYbR!yUnjSVyFXDk502D-VDFY???pV%84t55(sYnfm6u8ia#(fV|PvkYgH9(n< zo2CaCI9KO+kb)HeG=NANDe;ifKYy2h0;~XVZkTGI6w;PRSci(HKxlr24oDOOrNrhq zH!Ibqfc93H^FY;S2Oz{0>%w-nfaP(Q)GqNbDgc~aVJxAWN5<%nJ_$~B7TC@fSr7Q$ zea%4*K*|8XG+ScI1L~_Sg0U2w>MX#S0-S6l2OzZw`CH@Vv*0lRpFVXVq{3PQVksEf z1#(lS6v|Xw4J}!poB{g-z}r0iBml0#*dJsAfcgNpLGXQO=^KV&7=~dOhG9GuMg0MO zZQdP2p0YmxL30n?ACM|f;Zu=Bt3O~=VI=f9RymS{QX5q350LsDm%Hc>$d#tG{~@m4 zACNME;CGstP_;h*P5AhxG|S_X{Q0ifjqh`vX$NNniAu4RR?^y+0sVYjd+e<1|>kKOkqK zv_4;3Ut|i5sn6HeXDxy;BU7}>-bH_aYa|A@K3`j(-5=nan5sTsTi-AY!+1pg0g~&n Uf3HS9=>Px#07*qoM6N<$f|4&U-v9sr literal 0 HcmV?d00001 diff --git a/Resources/migration.yml b/Resources/migration.yml index eadb76305c..209434d1db 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -227,7 +227,20 @@ Observationskit: null # 2024-02-26 CrateBaseWeldable: CrateGenericSteel -# 2024-03-7 +# 2024-03-05 +BookBotanicalTextbook: BookRandomStory +BookEscalation: BookRandomStory +BookEscalationSecurity: BookRandomStory +BookDemonomiconRandom: BookRandomStory +BookDemonomicon1: BookRandomStory +BookDemonomicon2: BookRandomStory +BookDemonomicon3: BookRandomStory +BookChemistryInsane: BookRandomStory +BookGnominomicon: BookRandomStory +BookFishing: BookRandomStory +BookDetective: BookRandomStory + +# 2024-03-07 AirlockExternalEasyPry: AirlockExternal AirlockExternalGlassEasyPry: AirlockExternalGlass AirlockGlassShuttleEasyPry: AirlockGlassShuttle From 144798ba7567b8b816e56cb6247196ec92978a2b Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 1 Apr 2024 21:01:16 +0000 Subject: [PATCH 101/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index de9f27a3d5..614e1cdf6c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Tayrtahn - changes: - - message: Glued mobs can no longer struggle free from their captor's hands. - type: Tweak - id: 5789 - time: '2024-01-25T14:01:13.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24488 - author: mirrorcult changes: - message: Atomic Amnesia MMX, Vibe Ace, Monument and Marhaba have been removed @@ -3810,3 +3803,12 @@ id: 6288 time: '2024-04-01T20:48:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/24990 +- author: TheShuEd + changes: + - message: added procedurally generating books to library. + type: Add + - message: full books resprite + type: Add + id: 6289 + time: '2024-04-01T21:00:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25840 From 4b0f47c95bdc1bc656257d3f409ad526d4377a6c Mon Sep 17 00:00:00 2001 From: osjarw <62134478+osjarw@users.noreply.github.com> Date: Tue, 2 Apr 2024 03:50:43 +0300 Subject: [PATCH 102/206] Resprite ambuzol plus pills (#26651) --- .../Prototypes/Entities/Objects/Specific/Medical/healing.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml index 79ce03f700..71e0cf6450 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml @@ -710,6 +710,10 @@ parent: Pill id: PillAmbuzolPlus components: + - type: Pill + pillType: 2 + - type: Sprite + state: pill3 - type: SolutionContainerManager solutions: food: From a4d46091e00c4fdf39bb1a932df9278a1c5ae211 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 2 Apr 2024 00:51:49 +0000 Subject: [PATCH 103/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 614e1cdf6c..f65ac6f2e6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: mirrorcult - changes: - - message: Atomic Amnesia MMX, Vibe Ace, Monument and Marhaba have been removed - as lobby music tracks - type: Remove - id: 5790 - time: '2024-01-25T14:08:29.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24480 - author: Dutch-VanDerLinde changes: - message: To prevent accidental spills, paper cups can no longer be quick-equipped. @@ -3812,3 +3804,12 @@ id: 6289 time: '2024-04-01T21:00:10.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/25840 +- author: osjarw + changes: + - message: Ambuzol plus pills now have different sprites from ambuzol pills. Now + CBURN agents and Nukies who bought the syndicate zombie bundle might realize + that they also have some ambuzol plus. + type: Tweak + id: 6290 + time: '2024-04-02T00:50:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26651 From 5d31335f98307f590ed57c3c9d87d4bc5c4d688f Mon Sep 17 00:00:00 2001 From: osjarw <62134478+osjarw@users.noreply.github.com> Date: Tue, 2 Apr 2024 08:17:26 +0300 Subject: [PATCH 104/206] Fixed air injector visuals (#26654) --- .../Entities/Structures/Piping/Atmospherics/unary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index c2f8fa339d..03cce09699 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -206,7 +206,7 @@ visuals: # toggle color of the unshaded light: enum.OutletInjectorVisuals.Enabled: - unshaded: + enum.LightLayers.Unshaded: True: { color: "#5eff5e" } False: { color: "#990000" } - type: Appearance From 307a1c534dd132c8ce90b6fed79135452601a0b3 Mon Sep 17 00:00:00 2001 From: Simon <63975668+Simyon264@users.noreply.github.com> Date: Tue, 2 Apr 2024 07:18:31 +0200 Subject: [PATCH 105/206] Make cyborgs hands explosion proof. (#26515) * Make the advanced treatment modules beakers explosion-proof. * undo changes * Epic rename fail * Explosion recursion data field * Logic for data field --- Content.Server/Hands/Systems/HandsSystem.cs | 3 +++ Content.Shared/Hands/Components/HandsComponent.cs | 6 ++++++ .../Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml | 1 + 3 files changed, 10 insertions(+) diff --git a/Content.Server/Hands/Systems/HandsSystem.cs b/Content.Server/Hands/Systems/HandsSystem.cs index 06946cd052..bfd6393790 100644 --- a/Content.Server/Hands/Systems/HandsSystem.cs +++ b/Content.Server/Hands/Systems/HandsSystem.cs @@ -75,6 +75,9 @@ namespace Content.Server.Hands.Systems private void OnExploded(Entity ent, ref BeforeExplodeEvent args) { + if (ent.Comp.DisableExplosionRecursion) + return; + foreach (var hand in ent.Comp.Hands.Values) { if (hand.HeldEntity is { } uid) diff --git a/Content.Shared/Hands/Components/HandsComponent.cs b/Content.Shared/Hands/Components/HandsComponent.cs index 904b10b3bd..f1f25a69f7 100644 --- a/Content.Shared/Hands/Components/HandsComponent.cs +++ b/Content.Shared/Hands/Components/HandsComponent.cs @@ -31,6 +31,12 @@ public sealed partial class HandsComponent : Component ///

public List SortedHands = new(); + /// + /// If true, the items in the hands won't be affected by explosions. + /// + [DataField] + public bool DisableExplosionRecursion = false; + /// /// The amount of throw impulse per distance the player is from the throw target. /// diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index f04998388b..df5b8d7519 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -83,6 +83,7 @@ templateId: borg - type: Hands showInHands: false + disableExplosionRecursion: true - type: IntrinsicRadioReceiver - type: IntrinsicRadioTransmitter channels: From c9374969b10efbecb8600e204bb7d34785881aad Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 2 Apr 2024 05:18:33 +0000 Subject: [PATCH 106/206] 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 f65ac6f2e6..f64a5e293f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Dutch-VanDerLinde - changes: - - message: To prevent accidental spills, paper cups can no longer be quick-equipped. - type: Fix - id: 5791 - time: '2024-01-25T22:04:31.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24560 - author: Agoichi changes: - message: Bio hoods hiding your face now @@ -3813,3 +3806,10 @@ id: 6290 time: '2024-04-02T00:50:43.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26651 +- author: osjarw + changes: + - message: Air injectors finally have working indicator lights while enabled. + type: Fix + id: 6291 + time: '2024-04-02T05:17:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26654 From bd5031fd9e21d84fb174808dacdb8d26ff3ac7e7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 2 Apr 2024 05:19:43 +0000 Subject: [PATCH 107/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f64a5e293f..f0f945b18f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: Agoichi - changes: - - message: Bio hoods hiding your face now - type: Tweak - - message: Bio hoods now can be used as a breath mask - type: Tweak - - message: You can not eat while you wearing bio hood - type: Tweak - id: 5792 - time: '2024-01-26T00:13:42.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24570 - author: yathxyz changes: - message: Updated nixpkgs input @@ -3813,3 +3802,11 @@ id: 6291 time: '2024-04-02T05:17:26.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26654 +- author: Simyon + changes: + - message: The hands of cyborgs are now explosion proof. Your beakers wont ever + break again! + type: Fix + id: 6292 + time: '2024-04-02T05:18:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26515 From 025107ff5f5d4039544ba9289d1035fc032ea60c Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Wed, 3 Apr 2024 04:12:47 +0200 Subject: [PATCH 108/206] Make typing indicator shaded (#26678) --- Content.Shared/Chat/TypingIndicator/TypingIndicatorPrototype.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Chat/TypingIndicator/TypingIndicatorPrototype.cs b/Content.Shared/Chat/TypingIndicator/TypingIndicatorPrototype.cs index 8cbfe7bb2e..63008c6e08 100644 --- a/Content.Shared/Chat/TypingIndicator/TypingIndicatorPrototype.cs +++ b/Content.Shared/Chat/TypingIndicator/TypingIndicatorPrototype.cs @@ -23,6 +23,6 @@ public sealed partial class TypingIndicatorPrototype : IPrototype public Vector2 Offset = new(0, 0); [DataField("shader")] - public string Shader = "unshaded"; + public string Shader = "shaded"; } From c5fe41c1196520a5e49a8579815f36cc6cf29efd Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 3 Apr 2024 02:13:53 +0000 Subject: [PATCH 109/206] 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 f0f945b18f..8b39a1d472 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: yathxyz - changes: - - message: Updated nixpkgs input - type: Tweak - id: 5793 - time: '2024-01-26T01:40:52.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24572 - author: mirrorcult changes: - message: We lied Atomic Amnesia MMX is back @@ -3810,3 +3803,10 @@ id: 6292 time: '2024-04-02T05:18:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26515 +- author: lzk228 + changes: + - message: Typing indicator now can be shaded by shadows. + type: Tweak + id: 6293 + time: '2024-04-03T02:12:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26678 From 74c45da718d2a2a89e7445af5282855442e77773 Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Tue, 2 Apr 2024 23:13:59 -0400 Subject: [PATCH 110/206] Validate wire layout prototypes and remove invalid WiresComponents (#26682) Validate wire layout prototypes; delete invalid wirescomponents. --- Content.Server/Wires/WiresComponent.cs | 3 ++- .../Entities/Mobs/Cyborgs/base_borg_chassis.yml | 2 -- .../Objects/Fun/Instruments/instruments_structures.yml | 3 --- .../Prototypes/Entities/Objects/Specific/Mech/mechs.yml | 3 --- .../Structures/Dispensers/base_structuredispensers.yml | 1 - .../Prototypes/Entities/Structures/Dispensers/booze.yml | 3 --- .../Prototypes/Entities/Structures/Dispensers/chem.yml | 3 --- .../Prototypes/Entities/Structures/Dispensers/soda.yml | 3 --- .../Entities/Structures/Doors/Firelocks/firelock.yml | 5 +---- .../Structures/Machines/Medical/chemistry_machines.yml | 2 -- .../Entities/Structures/Machines/anomaly_equipment.yml | 9 --------- .../Entities/Structures/Machines/artifact_analyzer.yml | 3 --- .../Entities/Structures/Machines/chem_master.yml | 3 --- .../Entities/Structures/Machines/cloning_machine.yml | 3 --- .../Entities/Structures/Machines/fatextractor.yml | 3 --- .../Entities/Structures/Machines/flatpacker.yml | 3 --- .../Entities/Structures/Machines/gravity_generator.yml | 3 --- .../Prototypes/Entities/Structures/Machines/lathe.yml | 6 ------ .../Entities/Structures/Machines/material_reclaimer.yml | 3 --- .../Entities/Structures/Machines/medical_scanner.yml | 3 --- .../Prototypes/Entities/Structures/Machines/research.yml | 2 -- .../Entities/Structures/Machines/telecomms.yml | 3 --- .../Entities/Structures/Piping/Atmospherics/unary.yml | 6 ------ .../Structures/Power/Generation/portable_generator.yml | 5 +---- Resources/Prototypes/Entities/Structures/Power/apc.yml | 3 --- .../Prototypes/Entities/Structures/Power/chargers.yml | 5 ----- Resources/Prototypes/Entities/Structures/Power/smes.yml | 3 --- .../Prototypes/Entities/Structures/Power/substation.yml | 3 --- Resources/Prototypes/Entities/Structures/hydro_tray.yml | 3 --- 29 files changed, 4 insertions(+), 96 deletions(-) diff --git a/Content.Server/Wires/WiresComponent.cs b/Content.Server/Wires/WiresComponent.cs index 526b73a300..89e1873c00 100644 --- a/Content.Server/Wires/WiresComponent.cs +++ b/Content.Server/Wires/WiresComponent.cs @@ -1,4 +1,5 @@ using Robust.Shared.Audio; +using Robust.Shared.Prototypes; namespace Content.Server.Wires; @@ -15,7 +16,7 @@ public sealed partial class WiresComponent : Component /// The layout ID of this entity's wires. ///
[DataField(required: true)] - public string LayoutId { get; set; } = default!; + public ProtoId LayoutId { get; set; } = default!; /// /// The serial number of this board. Randomly generated upon start, diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index df5b8d7519..9ca99f9982 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -102,8 +102,6 @@ - type: BorgChassis - type: WiresPanel - type: ActivatableUIRequiresPanel - - type: Wires - layoutId: Borg - type: NameIdentifier group: Silicon - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_structures.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_structures.yml index ad4d2eac8a..191bb75e50 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_structures.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_structures.yml @@ -163,9 +163,6 @@ - type: Appearance - type: WiresVisuals - type: WiresPanel - - type: Wires - boardName: wires-board-name-dawinstrument - layoutId: DawInstrument - type: Machine board: DawInstrumentMachineCircuitboard - type: Instrument diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index 5a2587ff71..6e5362d9bb 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -66,9 +66,6 @@ bodyType: KinematicController - type: Clickable - type: WiresPanel - - type: Wires #we just want the panel - boardName: wires-board-name-mech - layoutId: Mech - type: Fixtures fixtures: fix1: diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml b/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml index d87c5e700a..d661009b6d 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml @@ -71,5 +71,4 @@ beakerSlot: !type:ContainerSlot - type: StaticPrice price: 1000 - - type: Wires - type: WiresPanel diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/booze.yml b/Resources/Prototypes/Entities/Structures/Dispensers/booze.yml index 1583bc451d..7bc12ca966 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/booze.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/booze.yml @@ -19,9 +19,6 @@ noRot: false - type: Machine board: BoozeDispenserMachineCircuitboard - - type: Wires - boardName: wires-board-name-booze - layoutId: BoozeDispenser - type: GuideHelp guides: - Bartender diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml index 6c70cf9bca..681f0a390c 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml @@ -31,9 +31,6 @@ acts: ["Destruction"] - type: Machine board: ChemDispenserMachineCircuitboard - - type: Wires - boardName: wires-board-name-chemdispenser - layoutId: ChemDispenser - type: GuideHelp guides: - Chemicals diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/soda.yml b/Resources/Prototypes/Entities/Structures/Dispensers/soda.yml index 323480506f..72468973ee 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/soda.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/soda.yml @@ -19,9 +19,6 @@ noRot: false - type: Machine board: SodaDispenserMachineCircuitboard - - type: Wires - boardName: wires-board-name-soda - layoutId: SodaDispenser - type: GuideHelp guides: - Bartender diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index 0dd65ab4d0..a678ab7443 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -22,7 +22,7 @@ - type: RCDDeconstructable cost: 4 delay: 6 - fx: EffectRCDDeconstruct6 + fx: EffectRCDDeconstruct6 - type: Destructible thresholds: - trigger: @@ -87,9 +87,6 @@ - type: Appearance - type: WiresVisuals - type: WiresPanel - - type: Wires - boardName: wires-board-name-firelock - layoutId: Firelock - type: UserInterface interfaces: - key: enum.WiresUiKey.Key diff --git a/Resources/Prototypes/Entities/Structures/Machines/Medical/chemistry_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/Medical/chemistry_machines.yml index e2c210e7e6..23789730d0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Medical/chemistry_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Medical/chemistry_machines.yml @@ -29,8 +29,6 @@ components: - FitsInDispenser - type: Machine - - type: Wires - layoutId: chem - type: WiresPanel - type: WiresVisuals - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 0064e7a4ae..ab09a03fef 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -37,9 +37,6 @@ color: "#fca3c0" - type: Appearance - type: WiresPanel - - type: Wires - boardName: wires-board-name-vessel - layoutId: Vessel - type: AmbientSound enabled: false range: 3 @@ -198,9 +195,6 @@ - type: Appearance - type: WiresPanel - type: WiresVisuals - - type: Wires - boardName: wires-board-name-ape - layoutId: Ape - type: GenericVisualizer visuals: enum.PowerDeviceVisuals.Powered: @@ -290,9 +284,6 @@ fuelCost: 10 doAfterDelay: 5 - type: WiresPanel - - type: Wires - boardName: wires-board-name-anomalygenerator - layoutId: AnomalyGenerator - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml b/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml index 1b183661f5..b00d6d8986 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/artifact_analyzer.yml @@ -143,9 +143,6 @@ Blunt: 10 - type: Machine board: ArtifactCrusherMachineCircuitboard - - type: Wires - boardName: wires-board-name-crusher - layoutId: Crusher - type: WiresPanel - type: Sprite sprite: Structures/Machines/artifact_crusher.rsi diff --git a/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml b/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml index d7df219663..aee1246021 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/chem_master.yml @@ -63,9 +63,6 @@ False: { visible: false } # Machine / Construction stuff - type: WiresPanel - - type: Wires - boardName: wires-board-name-chemmaster - layoutId: chem_master - type: Machine board: ChemMasterMachineCircuitboard - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml index 5d9ab0dd7e..0451b39490 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml @@ -52,9 +52,6 @@ materialWhiteList: - Biomass - type: WiresPanel - - type: Wires - boardName: wires-board-name-cloningpod - layoutId: CloningPod - type: ApcPowerReceiver powerLoad: 200 #Receives most of its power from the console - type: Appearance diff --git a/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml b/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml index 9f09e49059..fc417e68d6 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fatextractor.yml @@ -98,9 +98,6 @@ - type: Machine board: FatExtractorMachineCircuitboard - type: WiresPanel - - type: Wires - boardName: wires-board-name-fatextractor - layoutId: FatExtractor - type: Appearance - type: Speech speechVerb: Robotic diff --git a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml index 54a32db69f..3244789a02 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/flatpacker.yml @@ -52,9 +52,6 @@ path: /Audio/Items/rped.ogg - type: WiresPanel - type: WiresVisuals - - type: Wires - boardName: wires-board-name-flatpacker - layoutId: Flatpacker - type: Appearance - type: ActivatableUI key: enum.FlatpackCreatorUIKey.Key diff --git a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml index 2eb4f57fab..aebc4b03de 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml @@ -120,9 +120,6 @@ min: 1 max: 1 - type: WiresPanel - - type: Wires - boardName: wires-board-name-minigravitygenerator - layoutId: MiniGravityGenerator - type: Machine board: MiniGravityGeneratorCircuitboard - type: ApcPowerReceiver diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 5a32839a47..c32f2992f9 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -33,9 +33,6 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: WiresPanel - - type: Wires - boardName: wires-board-name-autolathe - layoutId: Autolathe - type: ActivatableUI key: enum.LatheUiKey.Key - type: ActivatableUIRequiresPower @@ -239,9 +236,6 @@ map: ["enum.WiresVisualLayers.MaintenancePanel"] - type: Machine board: ProtolatheMachineCircuitboard - - type: Wires - boardName: wires-board-name-protolathe - layoutId: Protolathe - type: MaterialStorage whitelist: tags: diff --git a/Resources/Prototypes/Entities/Structures/Machines/material_reclaimer.yml b/Resources/Prototypes/Entities/Structures/Machines/material_reclaimer.yml index 028e348fd4..9a9c5283c0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/material_reclaimer.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/material_reclaimer.yml @@ -61,9 +61,6 @@ - type: Machine board: MaterialReclaimerMachineCircuitboard - type: WiresPanel - - type: Wires - boardName: wires-board-name-reclaimer - layoutId: Reclaimer - type: MaterialReclaimer whitelist: components: diff --git a/Resources/Prototypes/Entities/Structures/Machines/medical_scanner.yml b/Resources/Prototypes/Entities/Structures/Machines/medical_scanner.yml index 6f05baee94..de19db96b5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/medical_scanner.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/medical_scanner.yml @@ -69,9 +69,6 @@ - type: Machine board: MedicalScannerMachineCircuitboard - type: WiresPanel - - type: Wires - boardName: wires-board-name-medicalscanner - layoutId: MedicalScanner - type: Appearance - type: Climbable - type: ApcPowerReceiver diff --git a/Resources/Prototypes/Entities/Structures/Machines/research.yml b/Resources/Prototypes/Entities/Structures/Machines/research.yml index 7b369f62cc..83525a0510 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/research.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/research.yml @@ -23,8 +23,6 @@ priority: Low - type: ExtensionCableReceiver - type: WiresPanel - - type: Wires - layoutId: rndserver - type: WiresVisuals - type: Machine board: ResearchAndDevelopmentServerMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml b/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml index e12826a8ce..6cc1fc7981 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/telecomms.yml @@ -51,9 +51,6 @@ - type: Machine board: TelecomServerCircuitboard - type: WiresPanel - - type: Wires - boardName: wires-board-name-telecomserver - layoutId: TelecomServer - type: Transform anchored: true - type: Pullable diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 03cce09699..4ee78f1213 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -245,9 +245,6 @@ inHandsOnly: false key: enum.ThermomachineUiKey.Key - type: WiresPanel - - type: Wires - boardName: wires-board-name-thermomachine - layoutId: Thermomachine - type: WiresVisuals - type: NodeContainer nodes: @@ -430,9 +427,6 @@ - type: Machine board: CondenserMachineCircuitBoard - type: WiresPanel - - type: Wires - boardName: wires-board-name-condenser - layoutId: Condenser - type: WiresVisuals - type: Destructible thresholds: diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml index 0c8afc87a4..dbaacd6abc 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/portable_generator.yml @@ -42,9 +42,6 @@ # Construction, interaction - type: WiresPanel - - type: Wires - boardName: wires-board-name-generator - layoutId: Generator - type: UserInterface interfaces: - key: enum.GeneratorComponentUiKey.Key @@ -356,4 +353,4 @@ damage: 75 behaviors: - !type:SolutionExplosionBehavior - solution: tank \ No newline at end of file + solution: tank diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 7efa53e254..4df502791f 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -97,9 +97,6 @@ supplyRampRate: 500 - type: WallMount - type: WiresPanel - - type: Wires - boardName: wires-board-name-apc - layoutId: APC - type: WiresVisuals - type: Damageable damageContainer: Inorganic diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml index 388cc3c987..582a5b0dee 100644 --- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml +++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml @@ -83,9 +83,6 @@ visible: false - type: Machine board: CellRechargerCircuitboard - - type: Wires - boardName: wires-board-name-recharger - layoutId: Recharger - type: WiresPanel - type: GenericVisualizer visuals: @@ -250,8 +247,6 @@ - machine_parts - machine_board - entity_storage - - type: Wires - layoutId: borgcharger - type: WiresPanel - type: WiresVisuals - type: Machine diff --git a/Resources/Prototypes/Entities/Structures/Power/smes.yml b/Resources/Prototypes/Entities/Structures/Power/smes.yml index c2170a127a..1e3559e5a9 100644 --- a/Resources/Prototypes/Entities/Structures/Power/smes.yml +++ b/Resources/Prototypes/Entities/Structures/Power/smes.yml @@ -67,9 +67,6 @@ color: "#c9c042" castShadows: false - type: WiresPanel - - type: Wires - boardName: wires-board-name-smes - layoutId: SMES - type: Machine board: SMESMachineCircuitboard - type: StationInfiniteBatteryTarget diff --git a/Resources/Prototypes/Entities/Structures/Power/substation.yml b/Resources/Prototypes/Entities/Structures/Power/substation.yml index 94de12be18..4bd0bec5ea 100644 --- a/Resources/Prototypes/Entities/Structures/Power/substation.yml +++ b/Resources/Prototypes/Entities/Structures/Power/substation.yml @@ -92,9 +92,6 @@ intensitySlope: 2 totalIntensity: 200 - type: WiresPanel - - type: Wires - boardName: wires-board-name-substation - layoutId: Substation - type: Machine board: SubstationMachineCircuitboard - type: StationInfiniteBatteryTarget diff --git a/Resources/Prototypes/Entities/Structures/hydro_tray.yml b/Resources/Prototypes/Entities/Structures/hydro_tray.yml index 1ab1fd5b2f..8ea7172d8b 100644 --- a/Resources/Prototypes/Entities/Structures/hydro_tray.yml +++ b/Resources/Prototypes/Entities/Structures/hydro_tray.yml @@ -81,9 +81,6 @@ - type: Machine board: HydroponicsTrayMachineCircuitboard - type: WiresPanel - - type: Wires - boardName: wires-board-name-hydroponicstray - layoutId: HydroponicsTray - type: AmbientSound volume: -9 range: 5 From c87ba22d3ef0ec0bda7c0be6f035a9202444ac3a Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:15:57 -0400 Subject: [PATCH 111/206] Increase time inbetween anomaly pulses (#26677) nerf anomaly pulse delays --- .../Anomaly/Components/AnomalyComponent.cs | 4 ++-- .../Structures/Specific/Anomaly/anomalies.yml | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Content.Shared/Anomaly/Components/AnomalyComponent.cs b/Content.Shared/Anomaly/Components/AnomalyComponent.cs index 99f7b8373a..3878aeb81c 100644 --- a/Content.Shared/Anomaly/Components/AnomalyComponent.cs +++ b/Content.Shared/Anomaly/Components/AnomalyComponent.cs @@ -95,13 +95,13 @@ public sealed partial class AnomalyComponent : Component /// The minimum interval between pulses. /// [DataField] - public TimeSpan MinPulseLength = TimeSpan.FromMinutes(1); + public TimeSpan MinPulseLength = TimeSpan.FromMinutes(2); /// /// The maximum interval between pulses. /// [DataField] - public TimeSpan MaxPulseLength = TimeSpan.FromMinutes(2); + public TimeSpan MaxPulseLength = TimeSpan.FromMinutes(4); ///
/// A percentage by which the length of a pulse might vary. diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml index 99574ab7be..c7b3e8ab5d 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml @@ -123,11 +123,11 @@ castShadows: false - type: GravityAnomaly - type: GravityWell - - type: RadiationSource + - type: RadiationSource - type: Physics bodyType: Dynamic bodyStatus: InAir - - type: CanMoveInAir + - type: CanMoveInAir - type: RandomWalk - type: SingularityDistortion intensity: 1000 @@ -164,6 +164,8 @@ - type: Anomaly corePrototype: AnomalyCoreFlesh coreInertPrototype: AnomalyCoreFleshInert + minPulseLength: 180 + maxPulseLength: 300 - type: Sprite layers: - state: anom5 @@ -355,6 +357,8 @@ - type: Anomaly corePrototype: AnomalyCoreRock coreInertPrototype: AnomalyCoreRockInert + minPulseLength: 180 + maxPulseLength: 300 - type: Sprite layers: - state: anom6 @@ -605,6 +609,8 @@ offset: 0, 0 corePrototype: AnomalyCoreFlora coreInertPrototype: AnomalyCoreFloraInert + minPulseLength: 60 + maxPulseLength: 120 anomalyContactDamage: types: Slash: 0 @@ -709,6 +715,8 @@ - type: Anomaly corePrototype: AnomalyCoreLiquid coreInertPrototype: AnomalyCoreLiquidInert + minPulseLength: 60 + maxPulseLength: 120 anomalyContactDamage: types: Slash: 1 @@ -822,6 +830,8 @@ - type: Anomaly corePrototype: AnomalyCoreShadow coreInertPrototype: AnomalyCoreShadowInert + minPulseLength: 60 + maxPulseLength: 120 anomalyContactDamage: types: Cold: 10 From e6a090419c58db17b76b11871c19591976ae3806 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 3 Apr 2024 03:17:03 +0000 Subject: [PATCH 112/206] 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 8b39a1d472..83c23c25db 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: mirrorcult - changes: - - message: We lied Atomic Amnesia MMX is back - type: Add - id: 5794 - time: '2024-01-26T05:48:29.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24575 - author: EmoGarbage404 changes: - message: Cigarettes no longer deal cellular damage when smoked. @@ -3810,3 +3803,10 @@ id: 6293 time: '2024-04-03T02:12:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26678 +- author: EmoGarbage404 + changes: + - message: Increased time between pulses for various anomalies. + type: Tweak + id: 6294 + time: '2024-04-03T03:15:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26677 From 5aadb17be79f487f7b665035489dbe6f9fd6fdea Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Tue, 2 Apr 2024 22:31:57 -0700 Subject: [PATCH 113/206] Fix for items dropped being rotated to world north (#26662) * Fix rotation of dropped items * combined world position rotation function for dumpable * scuffed implementation? * less scuffed? * even less scuffed... I guess * capital D --------- Co-authored-by: Plykiya --- Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs | 4 +++- Content.Shared/Storage/EntitySystems/DumpableSystem.cs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs index e071cdc693..7b169b5d0a 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs @@ -134,8 +134,10 @@ public abstract partial class SharedHandsSystem return true; } + var (itemPos, itemRot) = TransformSystem.GetWorldPositionRotation(entity); + var origin = new MapCoordinates(itemPos, itemXform.MapID); var target = targetDropLocation.Value.ToMap(EntityManager, TransformSystem); - TransformSystem.SetWorldPosition(itemXform, GetFinalDropCoordinates(uid, userXform.MapPosition, target)); + TransformSystem.SetWorldPositionRotation(entity, GetFinalDropCoordinates(uid, origin, target), itemRot); return true; } diff --git a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs index 8a8b636a67..91acde47e1 100644 --- a/Content.Shared/Storage/EntitySystems/DumpableSystem.cs +++ b/Content.Shared/Storage/EntitySystems/DumpableSystem.cs @@ -159,11 +159,11 @@ public sealed class DumpableSystem : EntitySystem { dumped = true; - var targetPos = _transformSystem.GetWorldPosition(args.Args.Target.Value); + var (targetPos, targetRot) = _transformSystem.GetWorldPositionRotation(args.Args.Target.Value); foreach (var entity in dumpQueue) { - _transformSystem.SetWorldPosition(entity, targetPos + _random.NextVector2Box() / 4); + _transformSystem.SetWorldPositionRotation(entity, targetPos + _random.NextVector2Box() / 4, targetRot); } } else From 70ec12f4f7ba0063e108c36b8da89b474d91acf6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 3 Apr 2024 05:33:04 +0000 Subject: [PATCH 114/206] 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 83c23c25db..0ca98f46df 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Cigarettes no longer deal cellular damage when smoked. - type: Remove - id: 5795 - time: '2024-01-26T09:50:03.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24568 - author: ERORR404V1 changes: - message: Added mime hardsuit @@ -3810,3 +3803,10 @@ id: 6294 time: '2024-04-03T03:15:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26677 +- author: Plykiya + changes: + - message: Dropped items are no longer rotated to world north. + type: Fix + id: 6295 + time: '2024-04-03T05:31:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26662 From 6b84a04cde59894995cd69328ae2fec662424c94 Mon Sep 17 00:00:00 2001 From: lunarcomets <140772713+lunarcomets@users.noreply.github.com> Date: Wed, 3 Apr 2024 06:19:43 -0700 Subject: [PATCH 115/206] fix double interaction popup (#26684) change popentity to popupclient --- Content.Shared/Interaction/SharedInteractionSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index e4864b1f7f..8d49ce31f0 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -682,7 +682,7 @@ namespace Content.Shared.Interaction if (!inRange && popup && _gameTiming.IsFirstTimePredicted) { var message = Loc.GetString("interaction-system-user-interaction-cannot-reach"); - _popupSystem.PopupEntity(message, origin, origin); + _popupSystem.PopupClient(message, origin, origin); } return inRange; From b909c2533d78833f937a92bc09d967c897c7d446 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Wed, 3 Apr 2024 13:41:23 +0000 Subject: [PATCH 116/206] disable foam scooping (#26686) Co-authored-by: deltanedas <@deltanedas:kde.org> --- Resources/Prototypes/Entities/Effects/chemistry_effects.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml index 5b7ee46946..096e88bcb6 100644 --- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml +++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml @@ -77,8 +77,9 @@ animationState: foam-dissolve - type: Slippery - type: StepTrigger - - type: ScoopableSolution - solution: solutionArea + # disabled until foam reagent duplication is fixed + #- type: ScoopableSolution + # solution: solutionArea - type: entity id: MetalFoam From 35134fcda6a78e456b7c044c8079558caa9c0304 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 3 Apr 2024 13:42:29 +0000 Subject: [PATCH 117/206] 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 0ca98f46df..0f6baf1144 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: ERORR404V1 - changes: - - message: Added mime hardsuit - type: Add - id: 5796 - time: '2024-01-26T14:43:50.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24198 - author: icekot8 changes: - message: Correct display of syndicate jaws of life in hand @@ -3810,3 +3803,10 @@ id: 6295 time: '2024-04-03T05:31:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26662 +- author: deltanedas + changes: + - message: Disabled scooping foam due to a reagent duplication bug. + type: Fix + id: 6296 + time: '2024-04-03T13:41:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26686 From cc99bbe49ed33effcd9f541443c9c52ab9276e6e Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Thu, 4 Apr 2024 02:58:17 +0200 Subject: [PATCH 118/206] Little disk printer sprite tweaks (#26711) * Little disk printer sprite tweaks * ill change this aswell --- .../Machines/tech_disk_printer.rsi/display.png | Bin 785 -> 808 bytes .../Machines/tech_disk_printer.rsi/icon.png | Bin 699 -> 746 bytes .../Machines/tech_disk_printer.rsi/meta.json | 7 ++++--- .../Machines/tech_disk_printer.rsi/unshaded.png | Bin 280 -> 635 bytes 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Resources/Textures/Structures/Machines/tech_disk_printer.rsi/display.png b/Resources/Textures/Structures/Machines/tech_disk_printer.rsi/display.png index e86c457962944431a977cdb4431343a48223d577..d9edabb6a0d49e0a2ceaefc316a6b19484a7c16d 100644 GIT binary patch delta 785 zcmV+s1Md8h2B-#*B!3BTNLh0L04^f{04^f|c%?sf0008oNkl_%$s63 z|BWZt*&M7BlW%H{G?E`aWK+PASkw^u0&HGvi!t#0fmLWv#{sK23bH1!F%yP(JkEkA zlSzP%n(_lnAeYYxG+fWb6EHhB3*m!dNZ(6)WnCUD6a%U zByc4oQfjRFUwzI!O;2)g>5hU-#%+x0U6%b?`1&;2Ok0C%OS1;;3{A;YXw?b*1*Wf zOBN4f^7%4@g;cm|vQ9Z`73Pd8C;eT}Em|IoBD!CfuI6=7FdlQCV z3~BdU9l`B8cZC8d@sY!a0ROkQZ>s{u<3S(V(!L^$eHnx3wV08(6#+^vAH#+73HUX? zL?rP0=3q}(k1Kz$l<;H_q7Z`>%a=7y070%^xmX2+)vF3n07@?VOufS@fSZRN|GCd7 z^SQI9V1HLE>RB08EUshODz`$T1xo-ot6(xAFU(ZxedQ(?^*7xDF96dlP%HnI`^xfQ zA4a$tRnWnDJl5rl?|ClXFP9J|WoYhBlBa{~Mz zlI8Ovksf~s>)jtby)TmCYl^92l@;5Bq=2rJoqw_2f4Q&;YcZC9P66HB#z{$rlMpOk zcj{6=*OW4WTR$HPE~Z;hmjd{ZGMU^npFY0QhO;6SW(rlefU2Q$R#&-VQfXphoaJhK z7>$k&R{(;6pqTSC>uFURPu^ov%J^|A1FUY|VD+K;J)5Zs*F^H4`hNqzvJz_v~)r_vPF_-}C!@?(h7$_W}njlYgFJG%%L0C&9D#PnkKG zH%9|w`LnI=dh+AzR-6fOsIKS@&|zNV?8nz!zJcy*{|Deq$^}6Xm>y9Sf$o~}vjH-4 zrqtdRg4o;N0|2-NT}Zx6R`>-$z{4*g*onO&hB1I&TdLMI=mLOJa(b@3M!n@Rv{ch1 ztd>|yvz~KYF@KpA$k{B|A!g*v7FA*jQf(M$A9#AOlU^?LO&J7GN)$yvw&mBP&1%fh4850un+100EAt z*9CC9+i@#+1G1du3RVeY#YAWli=XC=0Z>g%&p?vWaDOBonJRl~@Hnyega* zp=%KnfL1_D7yOqhuEpbPjRVlCfY#b}IGm;9*m6dU>vP9Y1+*rm65#poHvsfkfuRbx z-R;bv<^J#AK5P1zMau4GRjYsk(Qz(sl^$B9_4Nc3RCgm4A}5hWB<00000NkvXXu0mjfxtM1N diff --git a/Resources/Textures/Structures/Machines/tech_disk_printer.rsi/icon.png b/Resources/Textures/Structures/Machines/tech_disk_printer.rsi/icon.png index d21713efdd0fc1a2dd6704240c0a56bc34b0e62d..a60dc10b12deac89ceefdb918fe201d1b44322a4 100644 GIT binary patch delta 722 zcmV;@0xkW!1?mNmB!3BTNLh0L01FZT01FZU(%pXi0007}|T4v=b9lRj`(!6#1VYua>V6Lw%W^i;c#p*Mdk3rcH24J}Y zS5V+}07x^sVaN``X6W_n*WfvUVE6+S5S0dy4I)$)p!@vQ%cpqVf!6`Znqm1H*)&iT zy?k~RoPXlcOFmw%pA5`wkZSq<-3vG!f!6_I;?e|z6J|NFB_Fy=C<=jFH?P9YyLkBl zm<@6?DS)C7uy=69unUw3NdaVq0Is|ZDk(_?WQ72(yp8OD&)?V?7`}aAph+$ORZ@fi za<0Lb3-C6{zI^=x&IK^TV7`IHGdc}&6if{)luPd2yGedI0MdEx+)20rJls6savoOJ z!)Ww`hpdNCND=IuA{!top+Zzg_4SK8B$-Rdku;SD0FSf+n29A8(EtDd07*qoM6N<$ Eg1R_AO#lD@ delta 675 zcmV;U0$ly-1-k{1B!2;OQb$4nuFf3k0007YNkl^LYH=sQaV^i5yaxqDvES!mky#h6-p5|MHCv2qDXVCXuZX| zL=j#wwlN~<5MI2?_1=5ATegGykM)8nggDSr^aylN)%g7FGbP{9*{kgV$ZxGR6*v-rA}e}E6}?`6g)~X~ zVuSRMggu z5J1;^aC34DjFpsv`C*cno|(nUyX9~ITyygaa2y+&mci)AFy`hLkj?gaJcg0O=*Tbt zVC?!eP)ad%@1Zod5&%!`z72QpOyXbl5C9<7@fVja4}XD>Bmm&a(?tM4ysNWyfOuCY z9^9Yu9Lr|=d==oDo|*NWldT;gfaBO$e(|RM-!O8xed`9!_xA?E0=0JJ;$0C6fHCF^ z<_6kJrkSsIf{K*)0WR5Iz{Ripd+}R%0Qcm*uF7$26zw%oN_{)u(fA+44%Z&bU%$K$ z2armikbjnwCs*D1ngWnj;M2zcx1$N*#&IM;u{cg!^N(E$WiAgH%BEz?wT zDL_yKf_mEx@N4@Bu+7@j1-jlN4BF@yb%F4WsPwx8LP$Lr2jcg+addlll{PmwgrL%m zXmxd^{yUjSdY%J(Y+QKmIWkE0)+jEP) zL83}Ws+2iI8VZvMEV3f6{l~NRBIi3rip=i+^E`2OGwU2L5+DH*IAH>3Xzt$m(tF<+ zUKEAfzu-AhZHenkA2z%4t8(|XbF=%I+q`XRy-zMDZc!}YIW+*P`ZBK0Ll^xEjfoH& zAjo^TVo*_rO-cb6RUn61fgUfo=VN!NNhFX)_71~RRNMXO#S+%)uT2b=!Xhy zyb+*23_u=mhwBxz{rL_CVqv-UF_+b-=a1xH0hI|*U-b-78Ax0KDs2hQt*GTSpiw8g`SkTMk#AORBiuLNYpB^!^UmDgau0!DrNN>El@vhg@tdCjlp!`!ln zJ}M4xhN2U`JofSj2%3O1>f0*-b~t{LAVq&(10ci(-9~+|ISK&Frp?1V_f0IF}V0P`)(JHg2V$cvxqBtQZrKmvIQd;{u1 V@zyTvRMr3h002ovPDHLkV1jag3@ZQt literal 280 zcmV+z0q6dSP)Px#(n&-?R9J=Wm7xy8Fc5}+2$($tvTC?lJP$Fs+`CN9o|@oImQ2-cYLbVTK@>qC zWWaKlW@$3|xi)|PyI!wXAQB18Mk*wbBcfRiGlRimPgMeztQ&750Knu1!)5r;B>Myz zXQ~8t8nMX@0K9@f*YA5;wi@xbz&|NUC-L;E!0f4yCy}Q(0cHkRss_+C3h@$Dt>_9= zJ)k0Z1^yaK*45`))B};o3aDC#qIA>ACw&F}ldx+ZAJ1g+rH9np+6zlI@LwQgu>|^S ezm#<(vNG Date: Thu, 4 Apr 2024 16:23:37 +1100 Subject: [PATCH 119/206] fixed white_box.png (#26714) * Delete Resources/Textures/Decals/bricktile.rsi/white_box.png * Readded fixed version one pixel change --- .../Textures/Decals/bricktile.rsi/white_box.png | Bin 444 -> 393 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Decals/bricktile.rsi/white_box.png b/Resources/Textures/Decals/bricktile.rsi/white_box.png index d4454f067639da680667c40657b8ac4243b74a76..e8c0fa9a8af2806660f44e9953a57f5139a31cab 100644 GIT binary patch delta 288 zcmV+*0pI?-1BnBWF_A$;fB#8DK~y-6jgt!!!ypJmu^XB0t}dN!q`%i!7uLK&X80D%F=05Iz7)2;~!ibG{96^guHNe@b!yOyMEVzXPM2 z{oFe+>haG*Unhz#Jbv8CmH;N|03d?~z>_$8s4oF=V3+5R zfR%cT)F_PSa3zpajj1ivQWL;LkEt~P1*lRd5JT;L1VHrB9}|#%bKqfK#02`ikRHNc m;-}7}=PBAE*pC8i7Wx5r1P~EG7G*d90000pG z4M{{nR5(wKl7Vu=FbG4T#$LSt|KLf2I8Ec-rd+SFc?LOPAM)2-Zq`~vMInE2)g`kK zFz^71)&>E?3m5!Z0*L3j5$NOr^UMiwC-4-IN0j9)gCu~}a&Ii)atRL*{pmoN#G8N0 zP;!4PAk4q-@~-Uy0vRfB%HegD0K3hwuK8z)Z3eX9EWuB*0igIIka_^Cn|196aHBU%CJUNk|0v0eY}P0q8k4q&%35%&n5~1|TXz85m3zkSRn7NP>S| jz)hD)itD=eFLM6@h*uC85P7^Q00000NkvXXu0mjfVIzzW From 9c50ac32ee0dc217a1f9b891acb58f8e0abdea95 Mon Sep 17 00:00:00 2001 From: Terraspark4941 Date: Thu, 4 Apr 2024 10:28:30 +0500 Subject: [PATCH 120/206] New lobby art: TerminalStation (#26505) woop woop --- Resources/Prototypes/lobbyscreens.yml | 4 ++++ .../Textures/LobbyScreens/attributions.yml | 5 +++++ .../LobbyScreens/terminalstation.webp | Bin 0 -> 1025130 bytes .../LobbyScreens/terminalstation.webp.yml | 2 ++ 4 files changed, 11 insertions(+) create mode 100644 Resources/Textures/LobbyScreens/terminalstation.webp create mode 100644 Resources/Textures/LobbyScreens/terminalstation.webp.yml diff --git a/Resources/Prototypes/lobbyscreens.yml b/Resources/Prototypes/lobbyscreens.yml index 0920be9e66..5dac050fd1 100644 --- a/Resources/Prototypes/lobbyscreens.yml +++ b/Resources/Prototypes/lobbyscreens.yml @@ -37,3 +37,7 @@ - type: lobbyBackground id: Behonker background: /Textures/LobbyScreens/behonker.webp + +- type: lobbyBackground + id: TerminalStation + background: /Textures/LobbyScreens/terminalstation.webp diff --git a/Resources/Textures/LobbyScreens/attributions.yml b/Resources/Textures/LobbyScreens/attributions.yml index f27d0b3b2c..3b81fc68fd 100644 --- a/Resources/Textures/LobbyScreens/attributions.yml +++ b/Resources/Textures/LobbyScreens/attributions.yml @@ -37,3 +37,8 @@ license: "CC-BY-NC-SA-3.0" copyright: "InCrah on twitter / @in_crah" source: "https://twitter.com/in_crah" + +- files: ["terminalstation.webp"] + license: "CC-BY-SA-3.0" + copyright: "aserovich on discord" + source: "https://github.com/space-wizards/space-station-14" diff --git a/Resources/Textures/LobbyScreens/terminalstation.webp b/Resources/Textures/LobbyScreens/terminalstation.webp new file mode 100644 index 0000000000000000000000000000000000000000..ae7cab269d171088fce87b450f4a45c7fbbd9355 GIT binary patch literal 1025130 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

WX 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

$hcfx@wud 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

I;q>M&a^K1!dhFq$kQU8`zA^ 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ν!>y*+s&F{tf)LEXY8YeyE-XT_ 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

rsD-@Ez;Yfqt^W8S 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

public static readonly CVarDef OocEnableDuringRound = CVarDef.Create("ooc.enable_during_round", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef ShowOocPatronColor = + CVarDef.Create("ooc.show_ooc_patron_color", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.CLIENT); /* * LOOC diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 67d09c9012..86ba4462cf 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -42,6 +42,7 @@ ui-options-volume-percent = { TOSTRING($volume, "P0") } ui-options-show-held-item = Show held item next to cursor ui-options-show-combat-mode-indicators = Show combat mode indicators with cursor ui-options-opaque-storage-window = Opaque storage window +ui-options-show-ooc-patron-color = Show OOC Patreon color ui-options-show-looc-on-head = Show LOOC chat above characters head ui-options-fancy-speech = Show names in speech bubbles ui-options-fancy-name-background = Add background to speech bubble names From b331228d1c323a88747978413467dfff845c2388 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 4 Apr 2024 07:21:11 +0000 Subject: [PATCH 132/206] 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 27a0240894..b703e8cbab 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: Shotgun slugs can now be printed in the security techfab. - type: Add - - message: Shotgun slugs now fire a single strong projectile when fired. - type: Tweak - id: 5801 - time: '2024-01-27T02:56:57.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24196 - author: I-JustUser-I changes: - message: Zombie Outbreak event now has a minimum limit of 15 players. @@ -3805,3 +3796,10 @@ id: 6300 time: '2024-04-04T06:28:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26690 +- author: Aexxie + changes: + - message: Added the option to disable your OOC Patron name color. + type: Add + id: 6301 + time: '2024-04-04T07:20:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26653 From fb0e8ad24dc3c44b3b4b6d578b67939b5ba3e25b Mon Sep 17 00:00:00 2001 From: DinoWattz <116862698+DinoWattz@users.noreply.github.com> Date: Thu, 4 Apr 2024 05:35:44 -0300 Subject: [PATCH 133/206] Fix random clothing slots being able to hide character's nose and hair (#26708) Fix bug and formatting --- Content.Shared/Clothing/EntitySystems/ClothingSystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs index f189db005b..85df04d20a 100644 --- a/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/ClothingSystem.cs @@ -91,7 +91,7 @@ public abstract class ClothingSystem : EntitySystem private void ToggleVisualLayer(EntityUid equipee, HumanoidVisualLayers layer, string tag) { - InventorySystem.InventorySlotEnumerator enumerator = _invSystem.GetSlotEnumerator(equipee); + InventorySystem.InventorySlotEnumerator enumerator = _invSystem.GetSlotEnumerator(equipee, SlotFlags.HEAD ^ SlotFlags.MASK); bool shouldLayerShow = true; while (enumerator.NextItem(out EntityUid item)) @@ -164,7 +164,7 @@ public abstract class ClothingSystem : EntitySystem { if (args.Handled || args.Cancelled || args.Target is not { } target) return; - args.Handled = _invSystem.TryEquip(args.User, target, ent, args.Slot, clothing: ent.Comp, predicted: true, checkDoafter: false); + args.Handled = _invSystem.TryEquip(args.User, target, ent, args.Slot, clothing: ent.Comp, predicted: true, checkDoafter: false); } private void OnUnequipDoAfter(Entity ent, ref ClothingUnequipDoAfterEvent args) From 827cd0f6e5e5234e82931c56acb24475338d01a0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 4 Apr 2024 08:36:50 +0000 Subject: [PATCH 134/206] 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 b703e8cbab..60e460ad82 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: I-JustUser-I - changes: - - message: Zombie Outbreak event now has a minimum limit of 15 players. - type: Tweak - id: 5802 - time: '2024-01-27T03:53:09.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24577 - author: mirrorcult changes: - message: Navmap now defaults to showing departments @@ -3803,3 +3796,10 @@ id: 6301 time: '2024-04-04T07:20:06.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26653 +- author: DinoWattz + changes: + - message: Fixed pocket slots being able to hide character snout markings. + type: Fix + id: 6302 + time: '2024-04-04T08:35:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26708 From d9c1130d8c20d99286bf3119f38090d093637b51 Mon Sep 17 00:00:00 2001 From: "Wrexbe (Josh)" <81056464+wrexbe@users.noreply.github.com> Date: Thu, 4 Apr 2024 01:37:50 -0700 Subject: [PATCH 135/206] Make Zombie, Initial Infected fix (#26665) Make zombie fix --- Content.Server/GameTicking/Rules/ZombieRuleSystem.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs index 0b7cb9cf8f..54e8bcf8b7 100644 --- a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs @@ -249,7 +249,7 @@ public sealed class ZombieRuleSystem : GameRuleSystem _playerManager.Sessions, component.PatientZeroPrototypeId, includeAllJobs: false, - customExcludeCondition: player => HasComp(player) || HasComp(player) + customExcludeCondition: player => HasComp(player) || HasComp(player) ); //And get all players, excluding ZombieImmune and roles with CanBeAntag = False - to fill any leftover initial infected slots @@ -259,7 +259,7 @@ public sealed class ZombieRuleSystem : GameRuleSystem acceptableAntags: Shared.Antag.AntagAcceptability.All, includeAllJobs: false , ignorePreferences: true, - customExcludeCondition: HasComp + customExcludeCondition: HasComp ); //If there are no players to choose, abort @@ -293,6 +293,7 @@ public sealed class ZombieRuleSystem : GameRuleSystem //Add the role to the mind silently (to avoid repeating job assignment) _roles.MindAddRole(mind, new InitialInfectedRoleComponent { PrototypeId = component.PatientZeroPrototypeId }, silent: true); + EnsureComp(entity); //Add the zombie components and grace period var pending = EnsureComp(entity); From f5d9d3c4586252b6741f1c7473eef2b63b8fe586 Mon Sep 17 00:00:00 2001 From: Pspritechologist <81725545+Pspritechologist@users.noreply.github.com> Date: Thu, 4 Apr 2024 04:38:27 -0400 Subject: [PATCH 136/206] Suit Sensors No Longer Use a Hardcoded 'Total Health' (#26658) * Suit sensors now know the 'total health' of an entity * Missed the constructor :pensive: --- .../CrewMonitoring/CrewMonitoringWindow.xaml.cs | 4 ++-- .../Medical/SuitSensors/SuitSensorSystem.cs | 12 ++++++++++++ .../Medical/SuitSensor/SharedSuitSensor.cs | 3 +++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs b/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs index 39326c8a99..863412e553 100644 --- a/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs +++ b/Content.Client/Medical/CrewMonitoring/CrewMonitoringWindow.xaml.cs @@ -210,9 +210,9 @@ public sealed partial class CrewMonitoringWindow : FancyWindow specifier = new SpriteSpecifier.Rsi(new ResPath("Interface/Alerts/human_crew_monitoring.rsi"), "dead"); } - else if (sensor.TotalDamage != null) + else if (sensor.DamagePercentage != null) { - var index = MathF.Round(4f * (sensor.TotalDamage.Value / 100f)); + var index = MathF.Round(4f * sensor.DamagePercentage.Value); if (index >= 5) specifier = new SpriteSpecifier.Rsi(new ResPath("Interface/Alerts/human_crew_monitoring.rsi"), "critical"); diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index 29e4ceebbe..9864badc62 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -33,6 +33,7 @@ public sealed class SuitSensorSystem : EntitySystem [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly StationSystem _stationSystem = default!; [Dependency] private readonly SingletonDeviceNetServerSystem _singletonServerSystem = default!; + [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; public override void Initialize() { @@ -344,6 +345,11 @@ public sealed class SuitSensorSystem : EntitySystem if (TryComp(sensor.User.Value, out var damageable)) totalDamage = damageable.TotalDamage.Int(); + // Get mob total damage crit threshold + int? totalDamageThreshold = null; + if (_mobThresholdSystem.TryGetThresholdForState(sensor.User.Value, Shared.Mobs.MobState.Critical, out var critThreshold)) + totalDamageThreshold = critThreshold.Value.Int(); + // finally, form suit sensor status var status = new SuitSensorStatus(GetNetEntity(uid), userName, userJob, userJobIcon, userJobDepartments); switch (sensor.Mode) @@ -354,10 +360,12 @@ public sealed class SuitSensorSystem : EntitySystem case SuitSensorMode.SensorVitals: status.IsAlive = isAlive; status.TotalDamage = totalDamage; + status.TotalDamageThreshold = totalDamageThreshold; break; case SuitSensorMode.SensorCords: status.IsAlive = isAlive; status.TotalDamage = totalDamage; + status.TotalDamageThreshold = totalDamageThreshold; EntityCoordinates coordinates; var xformQuery = GetEntityQuery(); @@ -402,6 +410,8 @@ public sealed class SuitSensorSystem : EntitySystem if (status.TotalDamage != null) payload.Add(SuitSensorConstants.NET_TOTAL_DAMAGE, status.TotalDamage); + if (status.TotalDamageThreshold != null) + payload.Add(SuitSensorConstants.NET_TOTAL_DAMAGE_THRESHOLD, status.TotalDamageThreshold); if (status.Coordinates != null) payload.Add(SuitSensorConstants.NET_COORDINATES, status.Coordinates); @@ -429,12 +439,14 @@ public sealed class SuitSensorSystem : EntitySystem // try get total damage and cords (optionals) payload.TryGetValue(SuitSensorConstants.NET_TOTAL_DAMAGE, out int? totalDamage); + payload.TryGetValue(SuitSensorConstants.NET_TOTAL_DAMAGE_THRESHOLD, out int? totalDamageThreshold); payload.TryGetValue(SuitSensorConstants.NET_COORDINATES, out NetCoordinates? coords); var status = new SuitSensorStatus(suitSensorUid, name, job, jobIcon, jobDepartments) { IsAlive = isAlive.Value, TotalDamage = totalDamage, + TotalDamageThreshold = totalDamageThreshold, Coordinates = coords, }; return status; diff --git a/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs b/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs index 07e0eca33b..e3ca466b08 100644 --- a/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs +++ b/Content.Shared/Medical/SuitSensor/SharedSuitSensor.cs @@ -23,6 +23,8 @@ public sealed class SuitSensorStatus public List JobDepartments; public bool IsAlive; public int? TotalDamage; + public int? TotalDamageThreshold; + public float? DamagePercentage => TotalDamageThreshold == null || TotalDamage == null ? null : TotalDamage / TotalDamageThreshold; public NetCoordinates? Coordinates; } @@ -58,6 +60,7 @@ public static class SuitSensorConstants public const string NET_JOB_DEPARTMENTS = "jobDepartments"; public const string NET_IS_ALIVE = "alive"; public const string NET_TOTAL_DAMAGE = "vitals"; + public const string NET_TOTAL_DAMAGE_THRESHOLD = "vitalsThreshold"; public const string NET_COORDINATES = "coords"; public const string NET_SUIT_SENSOR_UID = "uid"; From d4982bad3102c22f8374a697caa54b4aa6c14b5a Mon Sep 17 00:00:00 2001 From: Vasilis Date: Thu, 4 Apr 2024 10:39:54 +0200 Subject: [PATCH 137/206] Stop mop buckets from spilling when you push them (#26706) --- .../Fluids/EntitySystems/PuddleSystem.Spillable.cs | 3 +++ .../Fluids/Components/SpillableComponent.cs | 6 ++++++ .../Entities/Structures/Specific/Janitor/janicart.yml | 11 +++++++++++ 3 files changed, 20 insertions(+) diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs index bd7c55e85e..7780e5d467 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs @@ -143,6 +143,9 @@ public sealed partial class PuddleSystem if (Openable.IsClosed(entity.Owner)) return; + if (!entity.Comp.SpillWhenThrown) + return; + if (args.User != null) { _adminLogger.Add(LogType.Landed, diff --git a/Content.Shared/Fluids/Components/SpillableComponent.cs b/Content.Shared/Fluids/Components/SpillableComponent.cs index 428d91f2de..51bb73a11f 100644 --- a/Content.Shared/Fluids/Components/SpillableComponent.cs +++ b/Content.Shared/Fluids/Components/SpillableComponent.cs @@ -29,4 +29,10 @@ public sealed partial class SpillableComponent : Component ///
[DataField] public FixedPoint2 MaxMeleeSpillAmount = FixedPoint2.New(20); + + /// + /// Should this item be spilled when thrown? + /// + [DataField] + public bool SpillWhenThrown = true; } diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml index bdbff1b504..f35a052723 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -23,6 +23,7 @@ - type: Spillable solution: bucket spillDelay: 3.0 + spillWhenThrown: false - type: DrainableSolution solution: bucket - type: RefillableSolution @@ -82,6 +83,15 @@ behaviors: - !type:DoActsBehavior acts: ["Destruction"] + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.45" + density: 60 + mask: + - MachineMask - type: entity name: mop bucket @@ -207,6 +217,7 @@ - type: Spillable solution: bucket spillDelay: 3.0 + spillWhenThrown: false - type: SolutionContainerManager solutions: bucket: From 8dc53346d3209df1c75464bcf0b40f031c98aeef Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 4 Apr 2024 08:41:00 +0000 Subject: [PATCH 138/206] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 60e460ad82..42b174c462 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: mirrorcult - changes: - - message: Navmap now defaults to showing departments - type: Tweak - id: 5803 - time: '2024-01-27T12:08:50.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24613 - author: Tayrtahn changes: - message: Vending machines can now be repaired with a welder. @@ -3803,3 +3796,13 @@ id: 6302 time: '2024-04-04T08:35:44.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26708 +- author: VasilisThePikachu + changes: + - message: Mop buckets and Janitorial Trolleys will not spill their contents as + soon as they are pushed. + type: Fix + - message: Mop buckets are no longer solid. So you can now walk through them. + type: Fix + id: 6303 + time: '2024-04-04T08:39:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26706 From 8cd0cce22e55ffe9755a7a76f78bb46f05c56cf8 Mon Sep 17 00:00:00 2001 From: GeneralGaws <122978178+GeneralGaws@users.noreply.github.com> Date: Thu, 4 Apr 2024 16:49:01 +0300 Subject: [PATCH 139/206] Robotists technology icon fix (#26723) fix Co-authored-by: GeneralGaws --- Resources/Prototypes/Research/experimental.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index 5fbf0e640b..1b1a738322 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -4,8 +4,8 @@ id: BasicRobotics name: research-technology-basic-robotics icon: - sprite: Mobs/Silicon/drone.rsi - state: drone + sprite: Structures/Machines/exosuit_fabricator.rsi + state: fab-idle discipline: Experimental tier: 1 cost: 5000 From 57b16f5ba23fb1d9bf984295c65c4f7a03e16e3a Mon Sep 17 00:00:00 2001 From: Dae <60460608+ZeroDayDaemon@users.noreply.github.com> Date: Thu, 4 Apr 2024 15:30:12 -0400 Subject: [PATCH 140/206] Make ducks more viable as an alternative to chickens. (#26729) Quick tweak to make ducks on par with chickens at cargo --- Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml | 2 +- Resources/Prototypes/Catalog/Fills/Crates/npc.yml | 6 +++--- Resources/Prototypes/Entities/Mobs/NPCs/animals.yml | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml index 922e2951b6..f44cb61f73 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml @@ -54,7 +54,7 @@ sprite: Mobs/Animals/duck.rsi state: icon-0 product: CrateNPCDuck - cost: 6000 + cost: 4000 category: cargoproduct-category-name-livestock group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/npc.yml b/Resources/Prototypes/Catalog/Fills/Crates/npc.yml index 538eee9a1b..10c715bb99 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/npc.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/npc.yml @@ -75,10 +75,10 @@ - type: StorageFill contents: - id: MobDuckMallard - amount: 2 - - id: MobDuckWhite - amount: 2 + amount: 1 - id: MobDuckBrown + amount: 1 + - id: MobDuckWhite amount: 2 - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 6dcf553da1..3a56c4df3a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -526,6 +526,10 @@ behaviors: - !type:GibBehavior { } + +# Note that the mallard duck is actually a male drake mallard, with the brown duck being the female variant of the same species, however ss14 lacks sex specific textures +# The white duck is more akin to a pekin or call duck. + - type: entity name: mallard duck #Quack parent: SimpleMobBase From 6e2ab06edddbb394b80a6f38c8b5e77d4a32f579 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 4 Apr 2024 19:31:18 +0000 Subject: [PATCH 141/206] 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 42b174c462..4ff32dea4b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Tayrtahn - changes: - - message: Vending machines can now be repaired with a welder. - type: Tweak - id: 5804 - time: '2024-01-27T12:12:53.0000000+00:00' - url: https://api.github.com/repos/space-wizards/space-station-14/pulls/24603 - author: graevy changes: - message: Added hallway screen prototypes and comms console text broadcasts. @@ -3806,3 +3799,11 @@ id: 6303 time: '2024-04-04T08:39:55.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/26706 +- author: ZeroDayDaemon + changes: + - message: Lowered the number of ducks in the duck crate and reduced the price of + it. + type: Tweak + id: 6304 + time: '2024-04-04T19:30:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26729 From bb1cb18aaf50ee8b238bad18b6565cca51b71ddb Mon Sep 17 00:00:00 2001 From: potato1234_x <79580518+potato1234x@users.noreply.github.com> Date: Fri, 5 Apr 2024 08:54:46 +1000 Subject: [PATCH 142/206] Make the nutribrick one bite smaller (#26719) Update snacks.yml --- .../Prototypes/Entities/Objects/Consumable/Food/snacks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml index 8e52630ac8..223ac6376c 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml @@ -392,10 +392,10 @@ - type: SolutionContainerManager solutions: food: - maxVol: 30 + maxVol: 25 reagents: - ReagentId: Nutriment - Quantity: 25 + Quantity: 20 - type: entity id: FoodSnackMREBrownie From d314a41e4f5c166de5e59504090117435f6ba0c2 Mon Sep 17 00:00:00 2001 From: PrPleGoo Date: Fri, 5 Apr 2024 01:05:01 +0200 Subject: [PATCH 143/206] Task/fix nightvision huds (#26726) * StatusIcon: add field to set if icon should be rendered with shading * set/unset shader based on icon field * set new field to true for hud icons * re-shade health bars --- .../Overlays/EntityHealthBarOverlay.cs | 7 ---- .../StatusIcon/StatusIconOverlay.cs | 17 ++++++---- .../StatusIcon/StatusIconPrototype.cs | 6 ++++ Resources/Prototypes/StatusEffects/health.yml | 19 ++++++----- Resources/Prototypes/StatusEffects/hunger.yml | 32 ++++++++++++------- Resources/Prototypes/StatusEffects/job.yml | 1 + .../Prototypes/StatusEffects/security.yml | 1 + 7 files changed, 49 insertions(+), 34 deletions(-) diff --git a/Content.Client/Overlays/EntityHealthBarOverlay.cs b/Content.Client/Overlays/EntityHealthBarOverlay.cs index 9e562b5dd3..c1c0ae93ec 100644 --- a/Content.Client/Overlays/EntityHealthBarOverlay.cs +++ b/Content.Client/Overlays/EntityHealthBarOverlay.cs @@ -19,7 +19,6 @@ namespace Content.Client.Overlays; ///